open-standards/jcp/jcp-rs/crates
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 453280c328
All checks were successful
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 3s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m19s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m15s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 2m40s
ar: bind the real emitters, not placeholder ids
Closes §5 step 3. The end-to-end example previously bound content-ids it made
up — ContentId::of_bytes(b"jcp-receipt/e2e-allow") and friends. That
demonstrated the envelope's shape while proving nothing about its bindings.

Now every id comes from an artifact that was actually produced:

  - The authority receipt is sealed from the decision that just happened via
    jcp_receipt::seal, and **verified on its own terms** before being bound. A
    receipt that would not survive its own family's verifier has no business in
    an AR-1 envelope.
  - The work receipt is built by sandbox_meter::Receipt::build over the devices
    the meter actually reported — three on this host (CPU, GPU, ANE). `build`
    enforces the provenance/measured coupling itself, so a mislabelled device is
    refused there rather than propagating into AR-1.

## The interop wrinkle worth recording

The two families disagree about content-id *presentation*:

    sandbox_schema::ContentId(pub String)     "b3:<base64url of 32 bytes>"
    jcp_schema::ContentId(pub [u8; 32])       raw digest

Both are BLAKE3 over the same canonical bytes, so they differ only in how they
render. Re-addressing the work receipt's canonical core with jcp's hasher yields
the identical digest — an exact binding, not a hash of a hash. A debug assertion
pins the sandbox rendering so the assumption fails loudly if it ever changes.

This is the kind of seam that only appears when two standards are actually
composed rather than described as composable, and it is why step 3 was worth
doing separately from step 6.

Run on this host:

  2. decide() → allow, 9750000 µJ remaining; authority receipt sealed +
     verified, id 3296ba365377
  3. work metered — 8075375 µJ [HwShunt] over 0.29s via ioreport-energy-model
     work receipt sealed over 3 metered device(s), id 44437820e66e
  5. verified from the envelope alone — 820 byte canonical core

  ar-verify:
    ok  binding:authority  grant cf97d7e7393a… · verdict allow · chain depth 2
    ok  binding:work       8075375 µJ [HwShunt] · receipt 44437820e66e…
    VERIFIED

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-08-25 23:58:09 -04:00
..
jcp-a2a jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-action-receipt ar: bind the real emitters, not placeholder ids 2026-08-25 23:58:09 -04:00
jcp-bridge jcp-bridge: Identify the authorization server per RFC 9207 2026-07-21 06:32:50 -04:00
jcp-channel jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-cite jcp-cite: tighten unreadable_by — real authorization via a caller predicate 2026-07-20 19:10:48 -04:00
jcp-cli jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-conformance jcp: close two §4.9 spec bugs found in review — metered path + caveat comparison 2026-07-19 12:18:38 -04:00
jcp-efficiency Merge pull request 'jcp-efficiency: Seal a training run measured energy as training/1' (#44) from jcp-training-receipt into main 2026-07-25 08:57:12 -04:00
jcp-energy
jcp-flow jcp-flow: Compute propagated provenance from tool bytes 2026-07-22 02:09:29 -04:00
jcp-gateway jcp-gateway: Close the flow loop from tool output to sealed verdict 2026-07-22 07:54:58 -04:00
jcp-grant jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-intercept jcp-intercept: attested interceptor chains 2026-07-01 12:10:06 -04:00
jcp-orchestrate jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-policy
jcp-prompt jcp-prompt: a signed, content-addressed prompt registry 2026-06-27 19:57:46 -04:00
jcp-receipt jcp-receipt: Seal a flow verdict as jcp/3 2026-07-22 04:17:15 -04:00
jcp-runtime jcp-runtime: Gate a call on its argument's propagated provenance 2026-07-22 04:03:15 -04:00
jcp-schema jcp-runtime: Gate a call on its argument's propagated provenance 2026-07-22 04:03:15 -04:00
jcp-threshold jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-trace jcp-trace: a std-only OTLP /v1/traces receiver (server feature) 2026-06-27 20:53:48 -04:00
jcp-wire jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00
jcp-x402 jcp: caveats — the open attenuation axis (SPEC §4.9, C24) 2026-07-19 11:03:04 -04:00