Skip to content

feat(d3): POST /vc/aae/evaluate endpoint — component 2 step 4 - #120

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

feat(d3): POST /vc/aae/evaluate endpoint — component 2 step 4#120
MoltyCel merged 1 commit into
mainfrom
feat/d3-c2-evaluate-endpoint

Conversation

@MoltyCel

@MoltyCel MoltyCel commented Jun 1, 2026

Copy link
Copy Markdown
Owner

Evaluator (Komponente 2) Schritt 4 — HTTP-Surface. Verweist Evaluator-Brief v4 (#115) + Core #119.

POST /vc/aae/evaluate (tags: AAE Enforcement)

  • Auth via verify_api_key_or_did (X-API-Key/X-MolTrust-DID) → 401.
  • Boundary-Validierung (Defense-in-Depth zum fail-closed Core, aus Step-3-Queue): aae_ref-Format; action_context object + 8KB-Size-Cap; nonce-missing→422 (VOR Core); numeric value finite-check; agent_did==auth-principal (sonst 403); vc_id↔Envelope-Direkt-Binding (Substitution-Schutz; Delegation-Chain = dokumentierter Follow-up).
  • Ruft evaluate_envelope (Core feat(d3): evaluator core — per-type handlers + advisory-lock eval-tx (component 2 step 3) #119) → signiertes Verdict; Response {verdict, reason, eval_id, verdict_signature, verdict_kid, evaluations}.
  • scrub_secrets: verdict_signature zu _KNOWN_PUBLIC_CREDENTIAL_FIELDS hinzugefügt (Ed25519-Sig kann sonst vom 40-char-base64-Pattern teilmaskiert werden — Lehre fix(a2a): exempt JWS protected+signature from scrub_secrets allowlist #101). Per Test verifiziert.

Tests (async TestClient, volle Middleware-Kette, 7 grün)

ALLOW-path (+ verdict_signature NICHT maskiert), DENY-path (self_asserted Betrag), nonce-missing→422, auth-missing→401, vc_id-mismatch→422, oversized→422, agent_did≠principal→403.

Defense-in-Depth

nonce-missing & co. werden am Endpoint mit 422 abgewiesen UND der Core lehnt fail-closed mit DENY ab — beide Schichten.

Konformität

§3.1 + §3.2 ✅. NICHT auf Live (Code+Tests; Endpoint-Tests hinterlassen test-markierte append-only Rows). Eine Komponente = ein PR.

Nächster Schritt

  1. violation_records-Write bei DENY. DANN Komponente 3 (enforce-mode-Chokepoint) + Acceptance-Gate D-1.

🤖 Generated with Claude Code

Boundary validation (defense-in-depth to fail-closed core): aae_ref format, action_context schema+8KB size-cap, nonce-missing->422, numeric value finite-check, agent_did==auth-principal (403 else), vc_id<->envelope direct binding (substitution-safe; delegation-chain = follow-up). Calls evaluate_envelope; returns signed verdict. verdict_signature added to _KNOWN_PUBLIC_CREDENTIAL_FIELDS (scrub-allowlist, lesson #101).

Per evaluator brief v4 (#115) + core #119.
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