open-standards/jouledesk/conformance/v1/receipt.json
Transaction Science a8f3e4e26c jouledesk: rename Joule Tag → Joule Desk (naming call), part of the Joule Table umbrella
David's naming: the teammate/collaboration binding is 'Joule Desk' (you still @joule
it; the standard is Joule Desk) — 'tag' was borrowed from a third-party product name,
which broke the self-referential/no-comparison rule. Full rename across the standard:
dir jouletag→jouledesk, crate + jouledesk-bind binary, profile jouletag/1→jouledesk/1,
stewards did:jcp:jouletag-{channel,realtime}→jouledesk-*, and every SPEC/README/code/
example reference. Conformance vector regenerated (steward change → 586→588 bytes;
decoded fields unchanged: summarize/allow/100000/900000). @joule handle untouched.
17 tests green, clippy-clean. Joule Desk + Joule Hook are the two bindings under the
Joule Table umbrella (jt.transaction.science) — umbrella spec lands next.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-05 07:30:53 -04:00

19 lines
1.1 KiB
JSON

{
"profile": "jouledesk/1",
"description": "A sealed decision receipt (SPEC §5) for a granted 'summarize' tag against the teammate's capability set. The raw JCR-1 COSE_Sign1 envelope is in summarize-allow.hex (586 bytes, byte-deterministic under the reference teammate's fixed dev keys and now=0). Decoding + verifying it under the channel steward key MUST yield the fields below.",
"envelope_file": "summarize-allow.hex",
"steward": "did:jcp:jouledesk-channel",
"decoded": {
"action": "summarize",
"verdict": "allow",
"cost_uj": 100000,
"budget_remaining_uj": 900000,
"steward": "did:jcp:jouledesk-channel",
"verified": true
},
"notes": [
"`verified: true` means the COSE_Sign1 signature checked out under the channel steward's public key — the ledger entry is non-repudiable, not merely present.",
"`budget_remaining_uj` = 900000 = the skill's 1,000,000 µJ grant budget minus the 100,000 µJ this dispatch debited (SPEC §6/§7).",
"Reproduce: `cargo run -p jouledesk --example vector` — stdout is the hex, stderr the decode. The hex MUST equal summarize-allow.hex."
]
}