GOV-05: KI-Entscheidungs-Nachvollziehbarkeit (Kopplung Core AUD) #230

Merged
patrick merged 1 commits from feature/gov-05-ki-entscheidungs-nachvollziehbarkeit-kopplung-core-aud into main 2026-09-28 00:26:42 +02:00
Owner

Zusammenfassung

  • Neue Pakete ai/internal/httpclient, ai/internal/auditclient, ai/internal/decisionaudit (Muster aus connect/internal/*, ENG-06): jede KI-Entscheidung (Modell, Prompt-Version, Eingabe-Referenz, Ergebnis) wird ueber Cores Audit-Ingest-Endpunkt (AUD-08, POST /audit/ingest) als Ereignis ai.decision.<function> gemeldet.
  • auditclient.Client bietet ausschliesslich Ingest (anfuegend) - keine Update-/Delete-Operation. Unveraenderlichkeit wird technisch bei Core per DB-Trigger durchgesetzt (AUD-02, Migration 0005_audit_append_only), bereits dort geprueft.
  • classify.Classifier erhaelt eine zusaetzliche, additive Methode ClassifyWithSchemaAudited (unveraenderte ClassifyWithSchema bleibt bestehen, keine bestehenden Aufrufer/Tests angefasst) als konkrete Demonstration der Kopplung. Schlaegt die Audit-Meldung fehl, gilt die Entscheidung als nicht protokolliert (fail-closed) statt still verloren zu gehen.

Pruefungen vor der Abnahme

# Pruefung Ergebnis
1 Audit-Eintrag an Testentscheidung nachvollzogen Bestanden. TestRecord_CreatesAuditEntryForDecision, TestClassifyWithSchemaAudited_RecordsDecisionAtCore
2 Verweis auf Modell-/Promptversion im Test bestaetigt Bestanden. TestRecord_MetadataReferencesModelAndPromptVersion, TestClassifyWithSchemaAudited_RecordsDecisionAtCore
3 Unveraenderlichkeit des Eintrags im Test geprueft Bestanden. TestRecord_RepeatedDecisionsCreateSeparateImmutableEntries (Client bietet nur anfuegendes Ingest, wiederholte Entscheidungen erzeugen getrennte, unveraenderte Eintraege) + TestClassifyWithSchemaAudited_AuditFailureFailsClosed

Details siehe ai/docs/GOV-05-PRUEFPROTOKOLL.md. go build/go vet/go test im ai-Modul: alle Pakete ok, keine Regressionen.

Nicht Bestandteil dieser Kachel

QA-05 (Datenschutz- & Governance-Pruefung) - nicht umgesetzt, nur die Audit-Schnittstelle vorbereitet.

🤖 Generated with Claude Code

## Zusammenfassung - Neue Pakete `ai/internal/httpclient`, `ai/internal/auditclient`, `ai/internal/decisionaudit` (Muster aus `connect/internal/*`, ENG-06): jede KI-Entscheidung (Modell, Prompt-Version, Eingabe-Referenz, Ergebnis) wird ueber Cores Audit-Ingest-Endpunkt (AUD-08, `POST /audit/ingest`) als Ereignis `ai.decision.<function>` gemeldet. - `auditclient.Client` bietet ausschliesslich `Ingest` (anfuegend) - keine Update-/Delete-Operation. Unveraenderlichkeit wird technisch bei Core per DB-Trigger durchgesetzt (AUD-02, Migration `0005_audit_append_only`), bereits dort geprueft. - `classify.Classifier` erhaelt eine zusaetzliche, additive Methode `ClassifyWithSchemaAudited` (unveraenderte `ClassifyWithSchema` bleibt bestehen, keine bestehenden Aufrufer/Tests angefasst) als konkrete Demonstration der Kopplung. Schlaegt die Audit-Meldung fehl, gilt die Entscheidung als nicht protokolliert (fail-closed) statt still verloren zu gehen. ## Pruefungen vor der Abnahme | # | Pruefung | Ergebnis | |---|---|---| | 1 | Audit-Eintrag an Testentscheidung nachvollzogen | Bestanden. TestRecord_CreatesAuditEntryForDecision, TestClassifyWithSchemaAudited_RecordsDecisionAtCore | | 2 | Verweis auf Modell-/Promptversion im Test bestaetigt | Bestanden. TestRecord_MetadataReferencesModelAndPromptVersion, TestClassifyWithSchemaAudited_RecordsDecisionAtCore | | 3 | Unveraenderlichkeit des Eintrags im Test geprueft | Bestanden. TestRecord_RepeatedDecisionsCreateSeparateImmutableEntries (Client bietet nur anfuegendes Ingest, wiederholte Entscheidungen erzeugen getrennte, unveraenderte Eintraege) + TestClassifyWithSchemaAudited_AuditFailureFailsClosed | Details siehe `ai/docs/GOV-05-PRUEFPROTOKOLL.md`. go build/go vet/go test im ai-Modul: alle Pakete ok, keine Regressionen. ## Nicht Bestandteil dieser Kachel QA-05 (Datenschutz- & Governance-Pruefung) - nicht umgesetzt, nur die Audit-Schnittstelle vorbereitet. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
patrick added 1 commit 2026-09-27 21:29:52 +02:00
GOV-05: ki-entscheidungs-nachvollziehbarkeit (kopplung core aud)
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 / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) 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 / 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
2c85037d50
Neue Pakete ai/internal/httpclient, auditclient, decisionaudit (Muster
aus connect/internal/* ENG-06): jede KI-Entscheidung (Modell,
Prompt-Version, Eingabe-Referenz, Ergebnis) wird ueber Cores
Audit-Ingest-Endpunkt (AUD-08) als ein Ereignis ai.decision.<function>
gemeldet. Der Client bietet ausschliesslich Ingest (anfuegend), keine
Update-/Delete-Operation - Unveraenderlichkeit wird technisch bei Core
per DB-Trigger (AUD-02) durchgesetzt.

classify.Classifier erhaelt eine zusaetzliche, optionale Methode
ClassifyWithSchemaAudited (unveraenderte ClassifyWithSchema bleibt
bestehen) als konkrete Demonstration der Kopplung; schlaegt die
Audit-Meldung fehl, gilt die Entscheidung als nicht protokolliert
(fail-closed) statt still verloren zu gehen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
patrick merged commit fc5a1df1ce into main 2026-09-28 00:26:42 +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#230