open-standards/joule-ui/conformance/v1/c3-authorization.json
Transaction Science 079fabafe8 joule-ui: make the interaction actor mandatory (SPEC /2)
Every sealed interaction now names the principal that fired it. The actor
is a required field on Interaction, a required argument to run_interaction,
and is bound into the signed canonical core — so an interaction can no
longer be attributed to a different principal without breaking the chain.

Human and agent are traced identically (a did:key either way); the standard
draws no distinction. An unauthenticated host attributes fires to its own
session principal — joule-ui-serve defaults this to the host's own did:key
(derived from its signing key) and exposes with_session_actor for
deployments that authenticate the caller.

The canonical-core profile tag is bumped joule-ui/interaction/1 -> /2,
since the actor is now part of the signed preimage; the two cores are
distinct bytes and never collide. SPEC §7.1 + C2/C3 updated, conformance
v1 vectors regenerated, examples and the conformance harness pass an actor.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-12 22:19:18 -04:00

24 lines
No EOL
905 B
JSON

{
"action": "apply",
"budget_uj": 0,
"expected_handler_ran": false,
"expected_interaction": {
"action": "apply",
"actor": "did:key:z6MkConformanceActor",
"budget_remaining_uj": 0,
"energy": {
"estimated_uj": 0,
"measured_uj": null,
"provenance": "Estimator"
},
"grant_id": "did:web:conformance#grant",
"inputs": "b3:9dde82eb7fbe2ce1df5f9ad9cf8790ae8bc1dfe036628d72712a326a978d4951",
"outputs": "b3:0000000000000000000000000000000000000000000000000000000000000000",
"surface": "b3:ddf8a971aaeefc840592a98d0018812a4092630ed642c257bff68db3dd882ad7",
"verdict": {
"Deny": "budget-exceeded"
}
},
"note": "C3 — a zero-budget Authorizer denies the action BEFORE the handler runs. handler_ran MUST be false; outputs are the genesis sentinel.",
"surface_id": "b3:ddf8a971aaeefc840592a98d0018812a4092630ed642c257bff68db3dd882ad7"
}