open-standards/joule-ui/conformance/v1/c2-interaction.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

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"
}