GOV-07: Unabhängige Tenant-Validierung bei KI-Objekttyp-Registrierung durch DMS/Mail #238

Merged
patrick merged 1 commits from feature/gov-07-unabh-ngige-tenant-validierung-bei-ki-objekttyp-registrierung-durch-dms-mail into main 2026-09-28 02:50:30 +02:00
Owner

Zusammenfassung

ai/internal/moduletype.Registry.Register (GOV-01) nahm Tenant-Kontext bislang gar nicht entgegen und pruefte ihn folglich auch nicht — ein kompromittiertes/fehlkonfiguriertes DMS/Mail haette KI-Funktionen mit falscher Tenant-Zuordnung ausloesen koennen. GOV-07 uebertraegt das etablierte Muster aus Archive RET-12 (und analog Workflow) 1:1: neues ai/internal/tenantregistryclient (HTTP-Client gegen Core TEN-01), TenantVerifier-Interface in moduletype, Register/Get/ListByModule um tenantSlug erweitert, Verifikation vor jedem Insert, fail-closed bei Verifikationsfehler oder unbekanntem Tenant.

Aenderungen

  • ai/internal/tenantregistryclient: neuer HTTP-Client fuer Core TEN-01 (Muster wie archive/dms)
  • ai/internal/moduletype: TenantVerifier-Interface, Register/Get/ListByModule verlangen jetzt tenantSlug, Verifikation vor Insert (fail-closed)
  • ai/migrations/0005_module_objecttypes_tenant_slug.{up,down}.sql: Spalte tenant_slug, Unique-Constraint auf (tenant_slug, module_name, object_type) erweitert
  • ai/docs/GOV-07-PRUEFPROTOKOLL.md: Pruefprotokoll

Pruefungen (alle durchgefuehrt, Ergebnis siehe Pruefprotokoll)

  1. Registrierung mit gueltigem, existierendem Tenant-Kontext wird uebernommen — PASS (TestRegister_ValidExistingTenant_Accepted)
  2. Registrierung mit manipuliertem/fremdem Tenant-Kontext wird abgelehnt (adversarial) — PASS (TestRegister_ForeignOrFakeTenant_Rejected, zusaetzlich TestRegister_TenantVerificationError_FailsClosed fuer fail-closed bei Core-Ausfall)
  3. Regressionstest normaler DMS-/Mail-Registrierungsablauf — PASS (alle GOV-01-Bestandstests gruen, gesamtes ai-Modul go vet + go test ./... -p 1 ohne Regression, Testhost 192.168.1.204)

Kein Merge, kein Deploy durchgefuehrt.

🤖 Generated with Claude Code

## Zusammenfassung `ai/internal/moduletype.Registry.Register` (GOV-01) nahm Tenant-Kontext bislang gar nicht entgegen und pruefte ihn folglich auch nicht — ein kompromittiertes/fehlkonfiguriertes DMS/Mail haette KI-Funktionen mit falscher Tenant-Zuordnung ausloesen koennen. GOV-07 uebertraegt das etablierte Muster aus Archive `RET-12` (und analog Workflow) 1:1: neues `ai/internal/tenantregistryclient` (HTTP-Client gegen Core TEN-01), `TenantVerifier`-Interface in `moduletype`, `Register`/`Get`/`ListByModule` um `tenantSlug` erweitert, Verifikation vor jedem Insert, fail-closed bei Verifikationsfehler oder unbekanntem Tenant. ## Aenderungen - `ai/internal/tenantregistryclient`: neuer HTTP-Client fuer Core TEN-01 (Muster wie archive/dms) - `ai/internal/moduletype`: `TenantVerifier`-Interface, `Register`/`Get`/`ListByModule` verlangen jetzt `tenantSlug`, Verifikation vor Insert (fail-closed) - `ai/migrations/0005_module_objecttypes_tenant_slug.{up,down}.sql`: Spalte `tenant_slug`, Unique-Constraint auf `(tenant_slug, module_name, object_type)` erweitert - `ai/docs/GOV-07-PRUEFPROTOKOLL.md`: Pruefprotokoll ## Pruefungen (alle durchgefuehrt, Ergebnis siehe Pruefprotokoll) 1. Registrierung mit gueltigem, existierendem Tenant-Kontext wird uebernommen — PASS (`TestRegister_ValidExistingTenant_Accepted`) 2. Registrierung mit manipuliertem/fremdem Tenant-Kontext wird abgelehnt (adversarial) — PASS (`TestRegister_ForeignOrFakeTenant_Rejected`, zusaetzlich `TestRegister_TenantVerificationError_FailsClosed` fuer fail-closed bei Core-Ausfall) 3. Regressionstest normaler DMS-/Mail-Registrierungsablauf — PASS (alle GOV-01-Bestandstests gruen, gesamtes `ai`-Modul `go vet` + `go test ./... -p 1` ohne Regression, Testhost 192.168.1.204) Kein Merge, kein Deploy durchgefuehrt. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 1 commit 2026-09-28 02:28:49 +02:00
GOV-07: unabhaengige tenant-validierung bei ki-objekttyp-registrierung durch dms/mail
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
AI-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
1da8951d16
Registry.Register (ai/internal/moduletype) prueft den mitgelieferten
tenant_slug jetzt ueber einen TenantVerifier (Core TEN-01) unabhaengig
gegen die Core-Tenant-Registry, statt der Angabe von DMS/Mail blind zu
vertrauen - analog zu Archive RET-12. Unbekannter/gefaelschter Tenant-
Kontext wird abgelehnt und protokolliert; ein Verifikationsfehler selbst
fuehrt fail-closed zur Ablehnung, nie zur stillschweigenden Annahme.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
patrick merged commit a69dc3c86d into main 2026-09-28 02:50:30 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: scripte/nexarch#238