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]>
53 lines
1.7 KiB
TOML
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"
|