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]>
19 lines
1.1 KiB
JSON
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."
|
|
]
|
|
}
|