Neues Paket ai/internal/residency: je Tenant konfigurierbarer Datenresidenz-Stand (local / external_approved) mit Freigabe-Nachweis (approved_by, approved_at), Migration 0006_tenant_data_residency.
residency.Gate implementiert das bestehende openai.TenantGate-Interface (ENG-03) gegen den DB-Stand, ohne GuardedProvider zu verändern.
Neues Paket ai/internal/residencyapi: HTTP-Bindung (GET/POST je Tenant), Service-Token-Pflicht wie bestehende AI-APIs.
Neues Paket ai/internal/notraining: technischer Nachweis, dass provider.Provider keine Trainings-/Fine-Tuning-Methode kennt und keiner der Adapter einen solchen Endpunkt aufruft.
Durchgeführte Prüfungen (Ergebnis)
Konfiguration lokal/extern im Test nachvollzogen — bestanden (Default local, Umschalten per Approve/HTTP sichtbar inkl. Freigeber/Zeitpunkt).
Fehlende Freigabe verhindert externe Verarbeitung im Test — bestanden (Gate lehnt ohne Freigabe ab, HTTP 400 ohne approved_by).
Trainingsausschluss vertraglich und technisch geprüft — bestanden (technisch: Interface-Reflection + Quelltext-Scan gegen Trainings-Endpunkte, beide PASS; vertraglich: On-Premise-Ollama ohne Drittbetreiber + Anbieter-Opt-in-Regel für den externen Adapter, siehe Prüfprotokoll für Details/Grenzen).
## Umsetzung
- Neues Paket `ai/internal/residency`: je Tenant konfigurierbarer Datenresidenz-Stand (`local` / `external_approved`) mit Freigabe-Nachweis (`approved_by`, `approved_at`), Migration `0006_tenant_data_residency`.
- `residency.Gate` implementiert das bestehende `openai.TenantGate`-Interface (ENG-03) gegen den DB-Stand, ohne `GuardedProvider` zu verändern.
- Neues Paket `ai/internal/residencyapi`: HTTP-Bindung (GET/POST je Tenant), Service-Token-Pflicht wie bestehende AI-APIs.
- Neues Paket `ai/internal/notraining`: technischer Nachweis, dass `provider.Provider` keine Trainings-/Fine-Tuning-Methode kennt und keiner der Adapter einen solchen Endpunkt aufruft.
## Durchgeführte Prüfungen (Ergebnis)
1. Konfiguration lokal/extern im Test nachvollzogen — **bestanden** (Default `local`, Umschalten per Approve/HTTP sichtbar inkl. Freigeber/Zeitpunkt).
2. Fehlende Freigabe verhindert externe Verarbeitung im Test — **bestanden** (Gate lehnt ohne Freigabe ab, HTTP 400 ohne `approved_by`).
3. Trainingsausschluss vertraglich und technisch geprüft — **bestanden** (technisch: Interface-Reflection + Quelltext-Scan gegen Trainings-Endpunkte, beide PASS; vertraglich: On-Premise-Ollama ohne Drittbetreiber + Anbieter-Opt-in-Regel für den externen Adapter, siehe Prüfprotokoll für Details/Grenzen).
Vollständiges Protokoll: `ai/docs/GOV-03-PRUEFPROTOKOLL.md`.
Gesamtlauf 204: `go build`, `go vet`, `gofmt -l` sauber für alle neuen Dateien; `go test ./...` im `ai`-Modul komplett grün (keine Regression).
Kein Merge, kein Deploy durchgeführt.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
Umsetzung
ai/internal/residency: je Tenant konfigurierbarer Datenresidenz-Stand (local/external_approved) mit Freigabe-Nachweis (approved_by,approved_at), Migration0006_tenant_data_residency.residency.Gateimplementiert das bestehendeopenai.TenantGate-Interface (ENG-03) gegen den DB-Stand, ohneGuardedProviderzu verändern.ai/internal/residencyapi: HTTP-Bindung (GET/POST je Tenant), Service-Token-Pflicht wie bestehende AI-APIs.ai/internal/notraining: technischer Nachweis, dassprovider.Providerkeine Trainings-/Fine-Tuning-Methode kennt und keiner der Adapter einen solchen Endpunkt aufruft.Durchgeführte Prüfungen (Ergebnis)
local, Umschalten per Approve/HTTP sichtbar inkl. Freigeber/Zeitpunkt).approved_by).Vollständiges Protokoll:
ai/docs/GOV-03-PRUEFPROTOKOLL.md.Gesamtlauf 204:
go build,go vet,gofmt -lsauber für alle neuen Dateien;go test ./...imai-Modul komplett grün (keine Regression).Kein Merge, kein Deploy durchgeführt.
🤖 Generated with Claude Code