From 274d7666ea981f3751b54db502e67cb969b40d1b Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Tue, 1 Sep 2026 16:39:59 +0200 Subject: [PATCH] chore: Version 1.12.0 --- CHANGELOG.md | 83 ++++++++++++++++++++++++++++++++- docs/INSTALLATION.md | 2 +- package.json | 2 +- scripts/wiederherstellung.sh | 4 +- src/lib/speicher/pruefung.ts | 2 +- src/lib/version.ts | 2 +- tests/anleitung.test.ts | 2 +- tests/speicher-pruefung.test.ts | 2 +- 8 files changed, 90 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0752505..fa703a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,86 @@ Wiederherstellung*. _Noch nichts._ +## [1.12.0] – 2026-09-01 + +Diese Fassung geht aus einer Fehlersuche im laufenden Betrieb hervor. Ein +Schreiben ließ sich nicht in der Akte ablegen — und hinter derselben +Meldung lagen nacheinander drei verschiedene Ursachen. Beim Nachsehen kam +ein vierter Punkt dazu, der schwerer wiegt als alle anderen zusammen. + +### Nach dem Update: einmal die Sicherung prüfen + +```bash +docker compose up -d +docker compose exec sicherung /bin/sh /sicherung.sh +``` + +Erwartet werden drei Zeilen: `Datenbank gesichert`, `Dokumente gesichert` +und `Selbstpruefung bestanden - Datenbank und Dokumente.` + +### Behoben + +- **Deine Dokumente waren in keiner Sicherung.** Der Sicherungsdienst + machte täglich ein `pg_dump` und sonst nichts. Nach einem Plattenschaden + wäre die Akte vollständig wiederhergestellt worden — mit allen + Einträgen, Verweisen und Prüfsummen, aber ohne eine einzige Datei + dahinter. Die Prüfsumme in der Akte hätte dann ein Dokument belegt, das + es nicht mehr gibt. + + Je Lauf entstehen jetzt zwei verschlüsselte Dateien mit demselben + Zeitstempel — der Datenbankstand und ein Archiv der Dokumente. Beide mit + Prüfsumme, beide in der Aufbewahrung, beide in der Selbstprüfung. + Schlägt der Dokumententeil fehl, bricht der Lauf ab und räumt den + angefangenen Datenbankstand weg: Eine Sicherung, die nur die halbe + Wahrheit enthält, aber vollständig aussieht, ist schlimmer als gar + keine. + +- **Der mitgelieferte Objektspeicher konnte keine Dokumente aufnehmen.** + Die Anwendung verlangte bei jeder Ablage serverseitige Verschlüsselung, + das mitgelieferte MinIO kann sie ohne Zusatzdienst nicht. Wer der + Installationsanleitung folgte, landete zwangsläufig dort. Sie ist jetzt + abschaltbar und standardmäßig aus — gebraucht wird sie nicht, weil die + Anwendung seit 1.11.0 selbst verschlüsselt. + +- **„Das Schreiben konnte nicht abgelegt werden" sagte nichts.** Jetzt + steht dort, was los ist: fehlender Ablagebereich mit Verweis auf den + Installationsschritt, abgelehnte Zugangsdaten, nicht erreichbarer + Speicher. Und in jedem Fall, ob deine Eingaben erhalten bleiben. + +- **Zwei Einstellungen erreichten die Anwendung nie.** + `ERSTEINRICHTUNG_GEHEIMNIS` und `VERTRAUE_PROXY` standen zwar in der + Anleitung, wurden aber nicht an den Behälter durchgereicht. Bei + `VERTRAUE_PROXY` fiel das nicht auf: Die Anmeldesperre zählte still eine + Dimension weniger. + +- **Die Beispielkonfiguration zeigte auf einen fremden Anbieter.** + `S3_ENDPOINT` war mit einer externen Adresse vorbelegt und hebelte damit + den richtigen Standard aus. Die Zeile ist jetzt auskommentiert. + +### Neu + +- **Die Anwendung prüft ihre Dateiablage selbst.** Sie schreibt eine + winzige Datei, liest sie zurück und räumt sie weg — und beantwortet + damit auf einmal, ob der Speicher erreichbar ist, der Ablagebereich + existiert und geschrieben werden darf. Das Ergebnis steht unter + `/api/gesundheit` und im Log. Bisher fiel eine kaputte Konfiguration + erst auf, wenn jemand ein Dokument ablegen wollte. + +- **Ein neuer Abschnitt in der Anleitung: „Wo deine Daten liegen".** + Die drei Orte, der Pfad auf der Platte, welche Schlüssel unverzichtbar + sind — und wie man prüft, ob zu jedem Akteneintrag auch eine Datei + gehört. + +### Geändert + +- **Ausschlussfristen warnen nur noch, wenn sie näherrücken.** Auf dem + Dashboard standen dauerhaft drei rote Kästen mit Warndreieck — für + Aufwandspauschalen, die 2027, 2028 und 2029 ablaufen. Eine Warnung, die + monatelang dasteht und nichts von einem will, stumpft ab; man übersieht + die vierte, die etwas will. Ab drei Monaten vor Ablauf meldet sich eine + Frist wieder, Versäumtes immer. In der Fristenliste stehen sie + unverändert weiter. + ## [1.11.0] – 2026-08-24 Diese Fassung geht aus einer Sicherheitsprüfung hervor. Sie ändert nichts @@ -1265,7 +1345,8 @@ Was davon wann angegangen wird, steht in [`docs/ROADMAP.md`](docs/ROADMAP.md). --- -[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.11.0...HEAD +[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.12.0...HEAD +[1.12.0]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.11.0...v1.12.0 [1.11.0]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.10.2...v1.11.0 [1.10.2]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.10.1...v1.10.2 [1.10.1]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.10.0...v1.10.1 diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index 465fe94..d0748fb 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -323,7 +323,7 @@ betreuungs-cockpit-sicherung-1 Up ```bash # Antwortet die Anwendung? (Port anpassen, falls du APP_PORT gesetzt hast) curl -s http://127.0.0.1:3000/api/gesundheit -# {"status":"bereit","version":"1.11.1","commit":"...", +# {"status":"bereit","version":"1.12.0","commit":"...", # "speicher":{"status":"bereit","treiber":"s3"}} ``` diff --git a/package.json b/package.json index 2164108..62296a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "betreuungs-cockpit", - "version": "1.11.0", + "version": "1.12.0", "private": true, "description": "Arbeits- und Dokumentationswerkzeug fuer die ehrenamtliche rechtliche Betreuung", "engines": { diff --git a/scripts/wiederherstellung.sh b/scripts/wiederherstellung.sh index 259e120..e743fa5 100755 --- a/scripts/wiederherstellung.sh +++ b/scripts/wiederherstellung.sh @@ -100,7 +100,7 @@ echo "$(date -Iseconds) Datenbank wiederhergestellt." # --- Dokumente --------------------------------------------------------------- # Zu "cockpit_2026-09-01_0315.dump.enc" gehoert # "dokumente_2026-09-01_0315.tar.gz.enc" - gleicher Zeitstempel, anderer -# Name. Fehlt sie, stammt die Sicherung aus einer Fassung vor v1.11.1. +# Name. Fehlt sie, stammt die Sicherung aus einer Fassung vor v1.12.0. ZEITSTEMPEL="$(basename "$DATEI" | sed -n 's/^cockpit_\(.*\)\.dump\.enc$/\1/p')" DOKUMENTE_DATEI="$(dirname "$DATEI")/dokumente_${ZEITSTEMPEL}.tar.gz.enc" AUSPACKZIEL="$(dirname "$DATEI")/dokumente-wiederhergestellt_${ZEITSTEMPEL}" @@ -109,7 +109,7 @@ if [ ! -f "$DOKUMENTE_DATEI" ]; then echo "" echo "WARNUNG: Zu dieser Sicherung gibt es kein Dokumentenarchiv." echo " Erwartet wurde: $DOKUMENTE_DATEI" - echo " Sicherungen aus Fassungen vor v1.11.1 enthalten nur die" + echo " Sicherungen aus Fassungen vor v1.12.0 enthalten nur die" echo " Datenbank. Die Akte ist dann vollstaendig, die Dateien" echo " dahinter fehlen." else diff --git a/src/lib/speicher/pruefung.ts b/src/lib/speicher/pruefung.ts index 610edd6..6aa37d7 100644 --- a/src/lib/speicher/pruefung.ts +++ b/src/lib/speicher/pruefung.ts @@ -6,7 +6,7 @@ import { speicherfehlerErkennen } from '@/lib/speicher/fehler' /** * Ist die Dateiablage benutzbar? * - * Bis v1.11.1 fiel eine kaputte Speicherkonfiguration erst auf, wenn + * Bis v1.12.0 fiel eine kaputte Speicherkonfiguration erst auf, wenn * jemand ein Dokument ablegen wollte. Auf dem Livesystem waren das * mehrere Wochen nach der Installation - und dann mitten in der Arbeit, * mit einer Meldung, die nichts sagte. diff --git a/src/lib/version.ts b/src/lib/version.ts index 710fae4..81f15e8 100644 --- a/src/lib/version.ts +++ b/src/lib/version.ts @@ -17,7 +17,7 @@ */ /** Muss zur "version" in der package.json passen. */ -export const VERSION = '1.11.0' +export const VERSION = '1.12.0' /** * Kurzer Git-Stand, beim Bauen hineingereicht: diff --git a/tests/anleitung.test.ts b/tests/anleitung.test.ts index 4b8665a..6662d3a 100644 --- a/tests/anleitung.test.ts +++ b/tests/anleitung.test.ts @@ -104,7 +104,7 @@ describe('Installationsanleitung', () => { }) it('behauptet nicht mehr, die Dokumente seien ungesichert', () => { - // Stand bis v1.11.1 so drin und stimmt seit der Sicherung nicht mehr. + // Stand bis v1.12.0 so drin und stimmt seit der Sicherung nicht mehr. expect(anleitung).not.toMatch(/Was das Backup nicht enthält:.*Dateien im Objektspeicher/s) }) }) diff --git a/tests/speicher-pruefung.test.ts b/tests/speicher-pruefung.test.ts index 8c46fda..7978974 100644 --- a/tests/speicher-pruefung.test.ts +++ b/tests/speicher-pruefung.test.ts @@ -6,7 +6,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' /** * Die Bereitschaftsprüfung der Dateiablage. * - * Bis v1.11.1 fiel eine kaputte Speicherkonfiguration erst auf, wenn + * Bis v1.12.0 fiel eine kaputte Speicherkonfiguration erst auf, wenn * jemand ein Dokument ablegen wollte. Auf dem Livesystem waren das * mehrere Wochen nach der Installation — und dann mitten in der Arbeit, * mit einer Meldung, die nichts sagte. -- 2.54.0