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]>
24 lines
No EOL
905 B
JSON
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"
|
|
} |