Skip to content

feat(d3): violation_records write on DENY — component 2 step 5 (final)#121

Merged
MoltyCel merged 1 commit into
mainfrom
feat/d3-c2-violation-write
Jun 2, 2026
Merged

feat(d3): violation_records write on DENY — component 2 step 5 (final)#121
MoltyCel merged 1 commit into
mainfrom
feat/d3-c2-violation-write

Conversation

@MoltyCel

@MoltyCel MoltyCel commented Jun 1, 2026

Copy link
Copy Markdown
Owner

Evaluator (Komponente 2) Schritt 5 — letzter Baustein. Verweist Evaluator-Brief v4 (#115).

Write-Contract

evaluate_envelope schreibt bei Gesamt-DENY EINEN violation_records-Eintrag, atomar mit dem signierten eval-row (dieselbe Transaktion → schlägt der violation-write fehl, rollt auch das eval-row zurück, kein Split-State).

  • id app-generiert (viol_+uuid, kein default); adjudicator_type='evaluator'; violation_type = komma-getrennte Liste der verletzten Constraint-Typen; interaction_proof_id=NULL (Evaluator gated pre-action → IPR evtl. noch nicht da); principal_did=agent_did; reversed=false; confirmed_at/created_at server-set; alle TEXT.
  • NUR bei DENY (violation_records = Verstoß-Log), nie bei ALLOW.

Design-Entscheidung: ein violation_record pro Eval (nicht pro Constraint)

Ein eval-row = eine Entscheidung → ein Verstoß-Eintrag. Mehrere verletzte Constraints werden als komma-getrennte violation_type-Liste aggregiert (z.B. allowed_domains,max_transaction_value) + alle reasons in description. Das hält 1:1 zur Entscheidung und vermeidet N Rows pro Eval.

Tests (server-venv, 29 grün; 4 neu)

DENY→violation-row + eval-row in selber tx (adjudicator_type/principal_did/violation_type/interaction_proof_id=NULL/reversed geprüft); ALLOW→KEIN violation-row; violation-write-failure→eval-row mit-zurückgerollt (Atomarität); mehrere Constraints→ein Record mit komma-Liste.

Konformität

§3.1 + §3.2 ✅. NICHT auf Live (Code+Tests). Eine Komponente = ein PR.

Komponente 2 KOMPLETT

Migration (#116/#117) → Signing (#118) → Core (#119) → Endpoint (#120) → violation-write (dieser PR). NEXT: Komponente 3 (enforce-mode-Chokepoint) + Acceptance-Gate D-1.

🤖 Generated with Claude Code

evaluate_envelope writes ONE violation_records row per DENY eval, atomic with the eval-row (same tx -> violation-write failure rolls back the eval-row, no split-state). Contract: id app-generated, adjudicator_type='evaluator', violation_type=comma-joined violated constraint types, interaction_proof_id=NULL (gated pre-action), principal_did=agent_did, reversed=false, all TEXT. ALLOW writes none. 29 server-venv tests green (4 new: deny-writes-violation, allow-no-violation, violation-failure-rolls-back-eval, multiple-constraints-one-record).
@MoltyCel
MoltyCel merged commit 8f62bcc into main Jun 2, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant