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]>
22 lines
No EOL
916 B
JSON
22 lines
No EOL
916 B
JSON
{
|
|
"action": "apply",
|
|
"expected_interaction": {
|
|
"action": "apply",
|
|
"actor": "did:key:z6MkConformanceActor",
|
|
"budget_remaining_uj": null,
|
|
"energy": {
|
|
"estimated_uj": 4200,
|
|
"measured_uj": 4200,
|
|
"provenance": "HwShunt"
|
|
},
|
|
"grant_id": null,
|
|
"inputs": "b3:9dde82eb7fbe2ce1df5f9ad9cf8790ae8bc1dfe036628d72712a326a978d4951",
|
|
"outputs": "b3:14b84e5a72005de11204ca8883b24175b7db02103ae5540a1cc83bd1e6c0af8b",
|
|
"surface": "b3:ddf8a971aaeefc840592a98d0018812a4092630ed642c257bff68db3dd882ad7",
|
|
"verdict": "Allow"
|
|
},
|
|
"inputs_utf8": "{\"intensity\":7}",
|
|
"meter_step_uj": 4200,
|
|
"note": "C2 — run_interaction over a deterministic meter (step 4200 µJ) reproduces this Interaction. surface_id = b3 of the canonical valid_surface JSON; inputs/outputs are content-addressed.",
|
|
"surface_id": "b3:ddf8a971aaeefc840592a98d0018812a4092630ed642c257bff68db3dd882ad7"
|
|
} |