summarize-allow.hex was pinned to the superseded jcp/1 receipt profile — a 588-byte envelope its own README and receipt.json called 586 — while the reference teammate seals jcp/2, which binds a payload_hash (667 bytes). The teammate is deterministic (three runs byte-identical) and the new envelope decodes to every field receipt.json records. pack.rs now requires the teammate to seal the published bytes exactly, and the published bytes themselves to verify under the channel steward and decode to receipt.json. Falsified: the old receipt back in the pack fails the byte check; a changed cost_uj in receipt.json fails the decode checks. Co-Authored-By: Claude Opus 5.5 <[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 (667 bytes, byte-deterministic under the reference teammate's fixed dev keys and now=0; payload profile jcp/2). 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."
|
|
]
|
|
}
|