Legt den vom DMS (INT-11) angenommenen Endpunkt GET /legal-hold im Archive an (in moduleadapter-api, Port 8095) und behebt einen Vertragsfehler im DMS-Client.
Der Branch baut auf PR #105 (Portierung CMP-02/06/07) und damit auf PR #103 (RET-03) auf.
gofmt/vet sauber; 7 Tests legalholdapi gegen echte Datenbank PASS (11 Fehlerfälle liefern nie eine Sperrangabe, Mandantentrennung mit zwei Datenbanken)
Modul archive: go test -p 1 ./... alle ok
Vertragstest scripts/legalhold-contract-test.sh: echter DMS-retentionclient gegen echten Archive-Dienst mit echten Migrationen und eigener temporärer Datenbank: BESTANDEN
DMS-Pakete retentionclient, retentiondestroy, legalhold, trash, cmd: ok; Port-/Routenskripte ok
Fund
DMS-retentionclient.Register sandte kein tenant_slug, das Archive seit RET-12 verlangt (400). Behoben und getestet.
Offen
DMS sendet noch kein Service-Token (optional in Archive); Betrieb muss NEXARCH_MODULEADAPTER_TENANT_SLUG setzen. Details: docs/RET-13-PRUEFPROTOKOLL.md
Legt den vom DMS (INT-11) angenommenen Endpunkt `GET /legal-hold` im Archive an (in `moduleadapter-api`, Port 8095) und behebt einen Vertragsfehler im DMS-Client.
Der Branch baut auf PR #105 (Portierung CMP-02/06/07) und damit auf PR #103 (RET-03) auf.
## Durchgeführte Prüfungen (Host 204, frischer Klon, Wegwerf-Cluster)
- gofmt/vet sauber; 7 Tests `legalholdapi` gegen echte Datenbank PASS (11 Fehlerfälle liefern nie eine Sperrangabe, Mandantentrennung mit zwei Datenbanken)
- Modul archive: go test -p 1 ./... alle ok
- Vertragstest `scripts/legalhold-contract-test.sh`: echter DMS-retentionclient gegen echten Archive-Dienst mit echten Migrationen und eigener temporärer Datenbank: BESTANDEN
- DMS-Pakete retentionclient, retentiondestroy, legalhold, trash, cmd: ok; Port-/Routenskripte ok
## Fund
DMS-`retentionclient.Register` sandte kein `tenant_slug`, das Archive seit RET-12 verlangt (400). Behoben und getestet.
## Offen
DMS sendet noch kein Service-Token (optional in Archive); Betrieb muss `NEXARCH_MODULEADAPTER_TENANT_SLUG` setzen. Details: docs/RET-13-PRUEFPROTOKOLL.md
Kein Merge.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick
added 14 commits 2026-09-21 22:39:45 +02:00
- migrations/0008_legal_hold_destruction: legal_holds (historisiert,
Partial-Unique-Index gegen doppelte aktive Sperre), destruction_log
(append-only, per Postgres-Trigger gegen UPDATE/DELETE geschuetzt)
- archive/internal/deletionworkflow: SetLegalHold (Begruendungspflicht),
ReleaseLegalHold (Aufheben selbst protokolliert, keine Loeschung der
Zeile), ReleaseExpired (Freigabeprozess active->expired, keine
Sofortloeschung, Sperre wird respektiert), Destroy (verlangt
vorherigen expired-Status, prueft Sperre erneut, transaktional mit
Protokolleintrag)
- 6 Tests, alle Pflichtpruefungen real bestanden (Sperre widersteht
Loeschversuch, Protokoll real unveraenderlich per Trigger, Aufheben
real protokolliert)
- Migration real auf dms_tenant_test angewendet
Pruefungen siehe archive/docs/RET-03-PRUEFPROTOKOLL.md
- migrations/0009_data_subject_ref: additive nullable Spalte auf
retention_objects, schliesst die Luecke fuer 'betroffene Person' in
RET-01
- retention.RegisterObjectForSubject: NEUE additive Funktion, RegisterObject
selbst unveraendert (kein Diff, keine Produktionsaufrufer betroffen)
- archive/internal/dpreport: SubjectReport (Auskunftsbericht),
ProcessingOverview (Verarbeitungsuebersicht, statisch gepflegte
Zweck/Rechtsgrundlage je Objekttyp), WriteSubjectReportCSV
- Mandantentrennung strukturell durch Modell C (ein Pool pro Tenant),
real mit zwei physisch getrennten Tenant-DBs bewiesen (tenant_acme/
tenant_globex), nicht nur behauptet
- 4 Tests, alle Pflichtpruefungen real bestanden
- Migration real auf dms_tenant_test angewendet
Pruefungen siehe archive/docs/CMP-02-PRUEFPROTOKOLL.md
- migrations/0010_deletion_requests: speichert nur den Token-Hash,
nie das Token selbst
- archive/internal/deletionapproval: RequestDeletion (einmaliges
Klartext-Token), ConfirmAndExecute (FOR UPDATE-Lock, andere Person
als requester, zeitkonstanter Tokenvergleich via subtle.ConstantTimeCompare,
ruft danach genau einmal deletionworkflow.Destroy (RET-03) auf)
- 4 Tests real bestanden, inkl. echtem Nebenlaeufigkeits-Test (zwei
echte Goroutinen, genau 1 Erfolg + 1 ErrAlreadyExecuted, genau ein
destruction_log-Eintrag)
- Migration real auf dms_tenant_test angewendet
Pruefungen siehe archive/docs/CMP-06-PRUEFPROTOKOLL.md
GET /legal-hold in moduleadapter-api (legalholdapi), DMS-Register sendet tenant_slug, Vertragstest scripts/legalhold-contract-test.sh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Legt den vom DMS (INT-11) angenommenen Endpunkt
GET /legal-holdim Archive an (inmoduleadapter-api, Port 8095) und behebt einen Vertragsfehler im DMS-Client.Der Branch baut auf PR #105 (Portierung CMP-02/06/07) und damit auf PR #103 (RET-03) auf.
Durchgeführte Prüfungen (Host 204, frischer Klon, Wegwerf-Cluster)
legalholdapigegen echte Datenbank PASS (11 Fehlerfälle liefern nie eine Sperrangabe, Mandantentrennung mit zwei Datenbanken)scripts/legalhold-contract-test.sh: echter DMS-retentionclient gegen echten Archive-Dienst mit echten Migrationen und eigener temporärer Datenbank: BESTANDENFund
DMS-
retentionclient.Registersandte keintenant_slug, das Archive seit RET-12 verlangt (400). Behoben und getestet.Offen
DMS sendet noch kein Service-Token (optional in Archive); Betrieb muss
NEXARCH_MODULEADAPTER_TENANT_SLUGsetzen. Details: docs/RET-13-PRUEFPROTOKOLL.mdKein Merge.
🤖 Generated with Claude Code
Pull request closed