open-standards/sandbox/sandbox-rs/Cargo.toml
Transaction Science 86e8619b71 family: wire JouleClaw, Sandbox, and Joule Code as JCP consumers
JCP stops being only specified and starts being consumed. Three sibling
standards now gate their real dispatch through Grants, the deterministic
runtime, and sealed JCR-1 receipts — each via a small adapter crate with
tests proving the gate:

- jouleclaw-jcp: GatedTool wraps any jouleclaw-mcp MeteredTool so every MCP
  dispatch is decided against a signed delegation chain BEFORE a byte reaches
  the tool. The tool's stable id is the content-addressed resource (a
  same-named tool on another server is a different audience), the call's
  energy estimate is debited pre-dispatch, and every decision seals. Tests: a
  granted tool dispatches and debits; an ungranted tool named by a poisoned
  result NEVER runs (panicking stub proves it) and the refusal is sealed
  evidence; the budget stops a runaway loop at exactly the wall.

- sandbox-jcp: JcpGate in front of Host::run_and_seal. The Grant binds to the
  unit's image BY CONTENT ADDRESS — one flipped image byte is a different
  audience, denied wrong-resource before the executor is ever invoked. The
  declared energy ceiling is debited from the chain pre-run (enforce before
  the side effect; energy never refunds), and a revoked grant goes dark. Two
  receipts per run: the JCP authorization + the sandbox's metered, attested
  execution, both JCR-1.

- joule-code-jcp: GatedStage wraps any cascade Stage so every tier
  consultation is decided pre-dispatch — the tier is the action, the source
  tree the content-addressed resource, the tier's energy class the debit.
  Cheapest sufficient AND authorized: a grant that doesn't name l4 means the
  remote-frontier escape hatch never fires even when it would close the
  request; an exhausted budget stops it with a sealed budget-exceeded deny;
  receipts aggregate per-tier from evidence.

Cross-standard path deps inside the monorepo (../../../../jcp/jcp-rs). Each
adapter crate is tested in its own workspace; READMEs updated (jcp gains a
"Consumers in this repository" section).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-10 11:19:00 -04:00

53 lines
1.7 KiB
TOML

[workspace]
resolver = "2"
members = [
"crates/sandbox-schema",
"crates/sandbox-capability",
"crates/sandbox-meter",
"crates/sandbox-attest",
"crates/sandbox-runtime",
"crates/sandbox-tee",
"crates/sandbox-exec-wasm",
"crates/sandbox-exec-microvm",
"crates/sandbox-conformance",
"crates/sandbox-proof",
"crates/sandbox-proof-wasm",
"crates/sandbox-mcp",
"crates/sandbox-build",
"crates/sandbox-cli",
"crates/sandbox-jcp",
]
[workspace.package]
version = "0.1.0"
edition = "2021"
license = "Apache-2.0"
repository = "https://github.com/transaction-science/open-standards"
rust-version = "1.85"
[workspace.dependencies]
sandbox-schema = { path = "crates/sandbox-schema" }
sandbox-capability = { path = "crates/sandbox-capability" }
sandbox-meter = { path = "crates/sandbox-meter" }
sandbox-attest = { path = "crates/sandbox-attest" }
sandbox-runtime = { path = "crates/sandbox-runtime" }
sandbox-tee = { path = "crates/sandbox-tee" }
sandbox-exec-wasm = { path = "crates/sandbox-exec-wasm" }
sandbox-exec-microvm = { path = "crates/sandbox-exec-microvm" }
sandbox-conformance = { path = "crates/sandbox-conformance" }
sandbox-proof = { path = "crates/sandbox-proof" }
sandbox-build = { path = "crates/sandbox-build" }
wasmtime = "43"
p384 = { version = "0.13", default-features = false, features = ["ecdsa", "sha384"] }
p256 = { version = "0.13", default-features = false, features = ["ecdsa"] }
sha2 = { version = "0.10", default-features = false }
ureq = { version = "2", features = ["json"] }
blake3 = "1"
ed25519-dalek = { version = "2", features = ["rand_core"] }
ciborium = "0.2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
base64 = "0.22"
hex = "0.4"
thiserror = "2"