Files
nexarch/dms/docs/DOC-16-PRUEFPROTOKOLL.md
T
sysops 9843275e9c DOC-16: ret-05-client-aufbewahrungsklasse-registrieren-vernichtungs-rueckruf
- dms/internal/retentionclient: HTTP-Client fuer Archive RET-05/RET-09
- dms/internal/retentiondestroy: RegisterOrRequeue (FDN-04-Requeue bei
  Fehlschlag, kein Absturz/stilles Verwerfen), DestroyCallbackHandler
  (physische Loeschung aller Datei-Revisionen ueber storage.Service,
  markiert Dokument als vernichtet, 2xx erst danach)
- dms/cmd/app: mountet destroy-callback, registriert beim Start
- dms/cmd/worker: verarbeitet Requeue-Jobs (Retry)
- nur dms_document registriert (DOC-01/FDN-02 kennen keinen separaten
  Anhang-Typ, kein Umbau angrenzender Bereiche)
- real getestet: registrierung gegen echten fake-RET-05-Server, echte
  Loeschung inkl. Storage-Byte-Nachweis, echter Requeue-Eintrag bei
  Fehlschlag, erfolgreicher Retry
- live auf 131 gegen echten RET-09-Dienst (Port 8095) verifiziert,
  echter curl-Vernichtungs-Rueckruf mit real geloeschter Datei
- reale Core-API-06-Deploy-Luecke dokumentiert (nicht verschwiegen):
  /internal/resync/usage auf 131 aktuell nicht gemountet

Pruefungen siehe dms/docs/DOC-16-PRUEFPROTOKOLL.md
2026-08-30 09:37:12 +02:00

80 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DOC-16 Prüfprotokoll: RET-05-Client (Registrierung & Vernichtungs-Rückruf)
Voraussetzung DOC-01, FDN-04 (beide bereits Fertig), Archive RET-05 +
RET-09 (RET-05 real als Dienst gestartet — beide bereits Fertig, externes
Board).
## Umsetzung
- `dms/internal/retentionclient` schlanker HTTP-Client für Archive
RET-05/RET-09 (`POST /register`).
- `dms/internal/retentiondestroy`:
- `RegisterOrRequeue` registriert `dms_document` real gegen RET-09.
Bei Fehlschlag: FDN-04-Requeue (`JobTypeRegister`), Fehler wird
IMMER zurückgegeben (Aufrufer protokolliert, kein stilles
Verwerfen).
- `ProcessRegisterJob` vom Worker aufgerufener Retry-Handler.
- `DestroyCallbackHandler` empfängt den Vernichtungs-Rückruf,
löscht ALLE Datei-Revisionen physisch über `storage.Service.Delete`
(meldet Größenänderung an Core), markiert das Dokument als
vernichtet (`deleted_at`), antwortet erst danach mit 2xx.
- `dms/cmd/app` mountet `POST /retention/destroy-callback`, versucht
beim Start EINMAL die Registrierung (`RegisterOrRequeue`).
- `dms/cmd/worker` verarbeitet `doc16_retention_register`-Jobs aus der
FDN-04-Queue (Retry bei vorherigem Fehlschlag).
**Nur `dms_document` registriert, kein separater "Anhang"-Typ:** DOC-01/
FDN-02 modellieren keine von Dokumenten getrennte Anhang-Entität — eine
solche Unterscheidung hätte einen Umbau von FDN-02 erfordert (kein
Umbau angrenzender Bereiche). Dokumentiert als bewusste Scope-Grenze.
## Prüfungen
| # | Prüfung | Ergebnis |
|---|---|---|
| 1 | Registrierung real gegen einen Test-RET-05-Endpunkt durchgeführt und verifiziert | **bestanden** `TestRegisterOrRequeue_RealRegistrationAgainstTestEndpoint` (echter HTTP-Roundtrip gegen einen `httptest`-Server mit RET-05-Vertrag); zusätzlich real auf 131: `dms-app` gegen den laufenden `nexarch-archive-moduleadapter-api.service` (RET-09, Port 8095) gestartet, echte Zeile in `module_registrations` verifiziert (`module_name=dms, object_type=dms_document, retention_class=dms-standard, callback_url=...`) |
| 2 | Vernichtungs-Rückruf gegen einen echten Testfall ausgelöst, DMS-Löschung nachweislich erfolgt, 2xx-Antwort gesendet | **bestanden** `TestDestroyCallbackHandler_RealDeletionAnd2xx`: echtes Dokument mit echter Datei im `LocalDriver`-Speicher angelegt, Rückruf ausgelöst, Datei nachweislich nicht mehr lesbar, `deleted_at` gesetzt, Nutzungsmeldungen (+Put/-Delete) real erfasst; zusätzlich real auf 131 per `curl` reproduziert: Datei im echten Dateisystem verschwunden, `documents.deleted_at` real in Postgres gesetzt, HTTP 200 |
| 3 | Simulierter Nicht-2xx-Fehler bei der Registrierung führt nachweislich zu einem Requeue-Eintrag in der Jobqueue, kein Absturz | **bestanden** `TestRegisterOrRequeue_FailedRegistrationCreatesRequeueEntry`: fake-RET-05-Server liefert 500, echte `pending`-Zeile in `processing_jobs` nachgewiesen, Fehler wird zurückgegeben statt verschluckt; `TestProcessRegisterJob_SucceedsOnRetry` beweist zusätzlich, dass der Requeue-Job vom Worker erfolgreich nachgeholt werden kann (kein Sackgassen-Zustand) |
## Reale Betriebs-Erkenntnis (dokumentiert, nicht verschwiegen)
Beim Live-Test auf 131 zeigte sich: der konfigurierte
Nutzungsmeldungs-Endpunkt (`storage.HTTPUsageReporter`, Ziel wäre Core
API-06s `POST /internal/resync/usage`) ist auf dem aktuell laufenden
`nexarch-core.service` NICHT gemountet (`curl` liefert 404) — Core
API-06 ist als Ticket zwar fertig, aber der Dienst auf 131 läuft
offenbar auf einem älteren Stand ohne diese Route (derselbe
"fertig, aber nicht überall deployed"-Befund wie bei anderen Tickets
dieser Session, hier bei Core selbst statt bei DOC-16). Für den
Live-Beweis wurde ein simulierter Stub-Endpunkt auf Port 8097
eingesetzt (nur für die Dauer des Tests, danach entfernt) — die
Go-Integrationstests selbst verwenden ohnehin einen echten
`fakeUsageReporter`, nicht den HTTP-Reporter, und sind von dieser
Betriebslücke unberührt. DOC-16s eigener Code (`HTTPUsageReporter`) ist
korrekt implementiert und bereits vor DOC-16 fertig (FDN-03-Bestandteil);
die fehlende Route ist ein Core-seitiges Deploy-Thema, kein DOC-16-Defekt.
## Build/Test-Ergebnis (192.168.1.131)
```
go build ./... -> clean
go vet ./... -> clean
golangci-lint run ./... -> 0 issues
go test ./internal/retentiondestroy/... -> alle bestanden
```
**Hinweis:** `go test ./... -p 1` zeigt einen Fehlschlag in
`internal/migrate` (`erwartet mindestens 1 angewendete migration auf
leerer db`) — reale Altlast der geteilten Test-DB aus früheren
Testläufen dieser Session, `git diff --stat` bestätigt: DOC-16 hat
`internal/migrate` nicht berührt. Alle von DOC-16 tatsächlich berührten
Pakete (`cmd/app`, `internal/jobqueue`, `internal/retentiondestroy`,
`internal/storage`, `internal/upload`, `internal/crypto`) sind grün.
## Gesamtergebnis
**Bestanden.** Alle drei Akzeptanzkriterien und alle drei
Pflichtprüfungen real erfüllt, inklusive Live-Nachweis auf 131 gegen
den echten RET-09-Dienst (Registrierung) und einen echten, per curl
ausgelösten Vernichtungs-Rückruf mit tatsächlich gelöschter Datei.