verify meldet, dass die Kette neu berechnet wurde
Im Betrieb entdeckt, nicht im Test. Das Staging-Gegenbuch meldete "Der beglaubigte Eintrag 5352 existiert nicht mehr". Rekonstruktion aus dem Protokoll: am 22.08. wurden die Aufbewahrungsfristen auf 0 gesetzt, zwei Cleanups loeschten 3155 Eintraege (id 1-5356), danach lief ein Rehash. Seither meldet die Pruefung "Alle Eintraege sind unveraendert und lueckenlos verkettet". Wahr - und praktisch das Gegenteil dessen, was ein Leser mitnimmt. Der Rehash verknuepft alles neu; die rund 700 Kettenluecken, die davor bestanden, sind seitdem unsichtbar. Nachweisbar im Vorbefund, den der Rehash selbst mitschreibt (R170-01) - nur schaute den nie jemand an. Das Gegenbuch war der einzige Zeuge; innerhalb des CRM war die Loeschung nicht mehr feststellbar. verifyIntegrity sammelt jetzt die Rehash-Marker; die Antwort enthaelt rehashes[] mit Zeitpunkt, Anzahl, Signatur und Vorbefund. Die Meldung nennt sie IMMER, auch im gruenen Fall, und der Einstiegssatz lautet dann "...lueckenlos verkettet - allerdings erst seit der letzten Neuberechnung". valid bleibt unberuehrt. Ein Rehash ist eine legitime Massnahme; ihn dauerhaft als Befund zu fuehren waere der Dauer-Alarm, den wir mit den beglaubigten Luecken gerade beseitigt haben. Melden, nicht alarmieren. Umgekehrte Beweislast als bei Manifest und Siegel: Dort zaehlen nur signierte Traeger, weil ein gefaelschter Marker Luecken wegerklaeren koennte. Hier erzeugt ein Marker eine Warnung - wuerden nur signierte zaehlen, koennte man einen Rehash unsichtbar machen, indem man seine Signatur zerstoert. Deshalb zaehlt jeder auswertbare Marker; eine fehlende Signatur wird zusaetzlich gemeldet. Getestet ueber HTTP gegen eine Wegwerf-DB mit echtem Rehash ueber den regulaeren Endpunkt: sauberer Vorzustand, Loeschung+Rehash (der Staging-Ablauf im Kleinen), und zerstoerte Signatur. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,42 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔍 `verify` meldet jetzt, dass die Kette neu berechnet wurde** (2026-08-26)
|
||||
- **Im Betrieb entdeckt, nicht im Test.** Das Staging-Gegenbuch meldete
|
||||
„Der beglaubigte Eintrag 5352 existiert nicht mehr". Rekonstruktion aus dem
|
||||
Protokoll: am 22.08. wurden die Aufbewahrungsfristen auf **0** gesetzt,
|
||||
zwei Cleanups löschten **3.155** Einträge (id 1–5356), danach lief ein
|
||||
**Rehash**. Seither meldet die Prüfung „Alle Einträge sind unverändert und
|
||||
**lückenlos** verkettet".
|
||||
- Wahr – und praktisch das Gegenteil dessen, was ein Leser mitnimmt. Der
|
||||
Rehash verknüpft alles neu; die rund **700** Kettenlücken, die davor
|
||||
bestanden, sind seitdem unsichtbar. Nachweisbar im Vorbefund, den der
|
||||
Rehash selbst mitschreibt (R170-01) – nur schaute den nie jemand an.
|
||||
- Das Gegenbuch war der einzige Zeuge. Innerhalb des CRM war die Löschung
|
||||
nicht mehr feststellbar.
|
||||
- `verifyIntegrity` sammelt jetzt die Rehash-Marker; die Antwort enthält
|
||||
`rehashes[]` (Zeitpunkt, Anzahl, Signatur, Vorbefund). Die Meldung nennt
|
||||
sie **immer**, auch im grünen Fall, und der Einstiegssatz lautet dann
|
||||
„…lückenlos verkettet – allerdings erst seit der letzten Neuberechnung".
|
||||
- **`valid` bleibt unberührt.** Ein Rehash ist eine legitime Maßnahme; ihn
|
||||
dauerhaft als Befund zu führen wäre der Dauer-Alarm, den wir mit den
|
||||
beglaubigten Lücken gerade beseitigt haben. Melden, nicht alarmieren.
|
||||
- **Umgekehrte Beweislast als bei Manifest und Siegel:** Dort zählen nur
|
||||
signierte Träger, weil ein gefälschter Marker Lücken *wegerklären* könnte.
|
||||
Hier erzeugt ein Marker eine *Warnung* – würden nur signierte zählen,
|
||||
könnte man einen Rehash unsichtbar machen, indem man seine Signatur
|
||||
zerstört. Deshalb zählt jeder auswertbare Marker; fehlende Signatur wird
|
||||
zusätzlich gemeldet.
|
||||
- Getestet über HTTP gegen eine Wegwerf-DB, mit echtem Rehash über den
|
||||
regulären Endpunkt: sauberer Vorzustand → „es wurde nichts überdeckt";
|
||||
Löschung + Rehash (der Staging-Ablauf im Kleinen) → `chainGaps` fällt von
|
||||
1 auf 0, die Meldung nennt Zeitpunkt und Vorbefund; zerstörte Signatur →
|
||||
Marker wird weiterhin gemeldet, mit Hinweis.
|
||||
- Dateien: `backend/src/services/audit.service.ts`,
|
||||
`backend/src/controllers/auditLog.controller.ts`,
|
||||
`frontend/src/services/api.ts`,
|
||||
`frontend/src/pages/settings/AuditIntegrityCard.tsx`
|
||||
|
||||
- [x] **📄 `status.txt` nennt jetzt den Grund, nicht nur das Etikett** (2026-08-26)
|
||||
- In der Statusdatei des Gegenbuchs stand für **jeden** Exit-2 derselbe Satz:
|
||||
„BEFUND – Widerspruch zwischen CRM und Gegenbuch". Ein echter Widerspruch
|
||||
|
||||
Reference in New Issue
Block a user