open-standards/sandbox
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 2465cf30c3
Some checks failed
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 40s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m5s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 1m4s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 2m0s
wai-ops differential (nightly) / differential · debug (pull_request) Successful in 2m52s
wai-ops differential (nightly) / differential · release (pull_request) Successful in 4m4s
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Successful in 1m59s
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Successful in 2m0s
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Successful in 3m18s
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Successful in 4m46s
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Successful in 5m15s
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Successful in 3m27s
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 3m25s
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 5m24s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 3m33s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m48s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m22s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 15s
wai cross-architecture byte-equality / does this change touch it (pull_request) Successful in 23s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Has been skipped
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Has been skipped
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Has been skipped
WAI conformance / does this change touch it (pull_request) Successful in 33s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 1m25s
WAI energy receipts / does this change touch it (pull_request) Successful in 12s
wai formal verification (integer core) / does this change touch it (pull_request) Successful in 9s
wai formal verification (integer core) / every harness in one shard (pull_request) Has been skipped
wai formal verification (integer core) / kani (arith) (pull_request) Has been skipped
wai formal verification (integer core) / kani (isqrt512) (pull_request) Has been skipped
wai formal verification (integer core) / kani (plan) (pull_request) Has been skipped
wai formal verification (integer core) / kani (sound) (pull_request) Has been skipped
wai formal verification (integer core) / kani (stage) (pull_request) Has been skipped
wai formal verification (integer core) / kani (rans64-t2) (pull_request) Has been skipped
wai formal verification (integer core) / kani (stage-long) (pull_request) Has been skipped
wai formal verification (integer core) / kani (integer-core) (pull_request) Has been skipped
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 9s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 9s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Has been skipped
WAI neural decoders end-to-end / does this change touch it (pull_request) Successful in 7s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Has been skipped
WAI neural sink gates / does this change touch it (pull_request) Successful in 8s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Has been skipped
wai-ops integer operators / does this change touch it (pull_request) Successful in 8s
wai-ops integer operators / linux-aarch64 (pull_request) Has been skipped
wai-ops integer operators / linux-x86_64 (pull_request) Has been skipped
wai-ops integer operators / macos-arm64 (pull_request) Has been skipped
wai-ops integer operators / wasm32-wasip2 (wasmtime) (pull_request) Has been skipped
wai-ops integer operators / wasm32 under Node (pull_request) Has been skipped
wai-ops integer operators / independent checker (Python) (pull_request) Has been skipped
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m58s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 8s
wai-quantum dataflow member / does this change touch it (pull_request) Successful in 7s
wai-quantum signal processor / does this change touch it (pull_request) Successful in 6s
wai-quantum CUDA member / does this change touch it (pull_request) Successful in 7s
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Has been skipped
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Has been skipped
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Has been skipped
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Has been skipped
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Has been skipped
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Has been skipped
wai-quantum FPGA member / does this change touch it (pull_request) Successful in 9s
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Has been skipped
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Has been skipped
wai-quantum Metal member / does this change touch it (pull_request) Successful in 10s
wai-quantum HIP member / does this change touch it (pull_request) Successful in 11s
wai-quantum Metal member / member · Metal (macos) (pull_request) Has been skipped
wai-quantum Metal member / member · Metal absent (linux) (pull_request) Has been skipped
wai-quantum HIP member / member · HIP (framework-128gb) (pull_request) Has been skipped
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Has been skipped
wai-quantum npu-cores member / does this change touch it (pull_request) Successful in 10s
wai-quantum npu-cores member / member · npu-cores, neural processor (framework-128gb silicon) (pull_request) Has been skipped
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Has been skipped
wai-quantum OpenCL member / does this change touch it (pull_request) Successful in 13s
wai-quantum neural-processor member / does this change touch it (pull_request) Successful in 14s
wai-quantum OpenCL member / member · OpenCL GPU and CPU (jetson-hub) (pull_request) Has been skipped
wai-quantum OpenCL member / member · OpenCL GPU (framework-128gb) (pull_request) Has been skipped
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Has been skipped
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Has been skipped
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Has been skipped
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Has been skipped
wai-quantum-qpu / does this change touch it (pull_request) Successful in 15s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Has been skipped
wai-quantum matrix-extension member / does this change touch it (pull_request) Successful in 19s
wai-quantum service / does this change touch it (pull_request) Successful in 21s
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Has been skipped
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Has been skipped
wai-quantum service / service · linux (pull_request) Has been skipped
wai-quantum service / service · macos (pull_request) Has been skipped
wai-quantum tensor-engine member / does this change touch it (pull_request) Successful in 20s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Has been skipped
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Has been skipped
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 24s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Has been skipped
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Has been skipped
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Has been skipped
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Has been skipped
wai-quantum CPU vector units / does this change touch it (pull_request) Successful in 26s
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Has been skipped
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 24s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Has been skipped
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Has been skipped
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been skipped
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Has been skipped
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Has been skipped
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been skipped
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 33s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been skipped
wai-web wasm32 / does this change touch it (pull_request) Successful in 31s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 10m55s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 3m15s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 1m45s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m24s
standards workspaces build + test / map-rs (map-conformance, map/map-rs, map-rs, linux-arm64) (pull_request) Successful in 1m56s
standards workspaces build + test / arl-rs (arl/arl-rs, arl-rs, linux) (pull_request) Successful in 1m16s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 4m38s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 1m23s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 39s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 30s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 2m20s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Successful in 1m48s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 49s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 1m14s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m16s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m2s
standards workspaces build + test / proof-rs (proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 1m33s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, sandbox-rs, linux) (pull_request) Successful in 2m37s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 4m31s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 6m54s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m13s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 27s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 2m45s
wai-pack / wai-pack · linux (pull_request) Successful in 2m8s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 21m10s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 31s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m27s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 16m49s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m28s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 24m45s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 24m15s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 5m9s
wai-pack / wai-pack · macos (pull_request) Successful in 1m35s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Failing after 3h4m12s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Failing after 3h10m44s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Failing after 3h11m20s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 5m36s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 5s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 5m57s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 6m19s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m11s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m14s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 19s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m43s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m18s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m5s
clippy: the simplifications a machine can make without changing the code's shape
Of 5250 warnings across the seventeen workspaces, these are the ones whose fix
is mechanical and local: a redundant `.into()`, `clone` on a `Copy`, a
derivable `Default`, `useless_vec`, `default_constructed_unit_structs`,
`manual_is_multiple_of`, `uninlined_format_args`. 34 files, 24 lines shorter.

Deliberately NOT in here, because a tidy-up should not decide them:

  The ~2000 cast lints (cast_possible_truncation 914, cast_precision_loss 664,
  cast_sign_loss 236, cast_possible_wrap 186) and ~837 doc-style ones
  (doc_markdown 554, overindented lists 192, lazy continuation 91). In numeric
  code the casts are the work; "fixing" them means 2000 allows or
  try_into().unwrap() churn. With too_many_arguments, type_complexity,
  unused_self and many_single_char_names that is ~3170 of the 5250 -- a question
  about whether these crates carry clippy::pedantic, answered once at crate
  level, not 3170 times at call sites.

  unused_imports (88) and unused_unsafe (81): cfg-dependent here.
  jouleclaw-loader-gguf's `std::ffi::c_void` is behind the `numa` feature and
  its `std::arch::aarch64::*` sits inside an aarch64-gated fn -- dead in this
  configuration, live in another.

  collapsible_if (168): its fix is correct but keeps the old body indentation,
  and this tree is not rustfmt-clean so it cannot be normalised. An earlier
  pass fixed 19 files that way, inspected them and reverted; the lint is now
  excluded up front rather than fixed and undone.

  chunks_exact_to_as_chunks (65), should_implement_trait (34),
  result_large_err (52), needless_range_loop (191): API changes and loop
  rewrites, each wanting its own pass with the tests watched.

Regenerated on current main rather than rebased: six aac-web files were touched
by both this pass and the 71 commits that landed meanwhile, and re-running a
machine pass on the new base is correct by construction where resolving its
conflicts by hand is not. aac needed nothing the second time -- those
simplifications had already landed.

Verified on the build host, every check asserting it did the work rather than
trusting an exit status: all ten touched workspaces' tests pass, `ran == 10`
asserted, and no let-chain appears in the diff.

⚠️ eoc-cascade's `hit_calibration_process_energy` fails intermittently and is
NOT from this change: on clean origin/main with no local modification it went
pass, fail, fail in three consecutive runs. The check above admits it only when
it is the sole failing target, so a second failure in eoc would still fail.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-18 15:30:10 -04:00
..
conformance Sandbox + JCP: long-horizon agent execution 2026-06-12 23:14:59 -04:00
proof Add aac, map, sandbox standards; catalog the standards family 2026-06-07 17:04:36 -04:00
sandbox-rs clippy: the simplifications a machine can make without changing the code's shape 2026-10-18 15:30:10 -04:00
spec sandbox: a manifest is pinned only when its image AND every feature are digest-addressed 2026-10-15 20:50:37 -04:00
CONTRIBUTING.md Add aac, map, sandbox standards; catalog the standards family 2026-06-07 17:04:36 -04:00
LICENSE Add aac, map, sandbox standards; catalog the standards family 2026-06-07 17:04:36 -04:00
LICENSE-SPEC Add aac, map, sandbox standards; catalog the standards family 2026-06-07 17:04:36 -04:00
README.md sandbox-exec-microvm, sandbox-exec-wasm, sandbox-meter: grade nominal-cost figures Estimator 2026-10-11 10:11:54 -04:00
SECURITY.md sandbox-exec-microvm, sandbox-exec-wasm, sandbox-meter: grade nominal-cost figures Estimator 2026-10-11 10:11:54 -04:00
SPEC.md sandbox: a manifest is pinned only when its image AND every feature are digest-addressed 2026-10-15 20:50:37 -04:00

Sandbox

A sandbox for the heterogeneous compute fabric. Isolate, capability-gate, meter, and attest — owned by no one.

Sandbox is the isolated-execution substrate of the Transaction Science open standards. Where Smart Byte carries value, EOC carries compute, and Joule Code carries coding work, Sandbox carries the place those operations run: a bounded environment in which an untrusted unit of work executes, sees only what it was granted, and leaves behind a signed account of what it did and what it cost.

Every other sandbox in the field isolates a CPU process — a container, a microVM, a Linux process pinned to a core. The accelerator, where present, is an opaque passthrough that nobody meters and nobody attests. But agentic and AI work does not run on a CPU. It runs across a fabric — CPU, GPU, NPU, TPU, photonic, quantum. So in this standard the unit of isolation is not a process; it is a heterogeneous unit of work, and the accelerator is a first-class citizen of the isolation boundary: a capability you grant, a resource you meter in joules, and a line item you attest.

A Sandbox run carries exactly four guarantees: isolation (the unit runs at the lowest tier of an eight-rung ladder, S0–S7, that satisfies its needs, and cannot reach past it), capability (every resource the unit touches — each device class included — was explicitly granted; ungranted access is denied), metering (the run emits a signed energy receipt with per-device-class joule attribution and an honest provenance tag on every reading — and the reference meter reads vendor energy counters: Apple Silicon's energy model via IOReport, Intel/AMD RAPL via powercap, NVIDIA's total-energy counter via NVML. A reading is tagged HwShunt only while its counter is demonstrably live: each vendor counter is used only if every rail of it that the meter sums into one figure keeps advancing while the meter's probe burns CPU — in at least 5 sample intervals, at least 4 of every 5, over at least 300 ms — every IOReport CPU energy rail (the rail itself, one per die on a multi-die part), every RAPL package and every NVML GPU; and a span across which the CPU counter held is never a reading. A counter that is absent, or present but not live — frozen, or republished in lumps, as the IOReport CPU rails are on macOS 27 — yields no hardware-graded figure: the span degrades to the labeled Estimator (wall-clock × TDP), never a fabricated measurement, and ioreport_status(), rapl_status() and nvml_status() say why a host is estimated. For work on the meter's own process there is one more source, kept out of the default meter: on macOS, the CPU energy the kernel attributes to the process's own threads (proc_pid_rusage), read through PowerMeter::detect_in_process() under the same liveness rule, the reading thread taken off its core before each read and the read taken only once the thread's own energy count shows it was folded (a process's read of itself does not fold the thread reading, so a short span would otherwise read nothing, or energy spent before it; and a sleep does not always take a thread off its core, so the fold is checked, and a read whose thread was not seen to fold leaves the span estimated) — never for a subprocess, which it does not cover, nor whole for work that calls a system service, whose share the kernel bills to the process beside that count and this meter does not read; a single-process child's own figure is read from the exited child instead, a partial figure, since a process's exit does not fold its last time on a core into its count. For work in another live process of this user — a server, and its descendants — TreeMeter reads that same count for every process of its tree over a span, each end read once no thread of the tree is on a core and confirmed by a second walk that finds the tree's processes unchanged, and lists beside the figure every way it was seen to differ from the tree's energy over the span — short of it (a descendant reaped or exited in the span, a GPU client held, in-process Neural Engine memory, a member unreadable or still running at the stop, work a system service did for a member), or holding energy from outside the span (a member still running at the start; a bill for a service's work done before the span that was credited inside it; a member credited with service to other processes, which is subtracted, and need not be the span's own service, so the figure may be short of the span's energy or over it). Work a service does on a member's behalf, on a message that carries the member's voucher, is billed to the member by the kernel: the figure counts that billed CPU energy, less what members did for processes outside the tree, and lists it as delegated, because the bill over a span is not the span's delegated work: it carries none of the service's GPU or Neural Engine energy, none of its work on threads that never took the voucher, no credit landing after the span (the stop waits briefly for the billed counts to hold, which catches only a credit that lands within it), and it can hold a late credit for work done before the span — so the figure can be short of the delegated work or over it. Work the tree hands outside itself with no bill — over a socket, to a remote API — is not visible to any reader, so whether there is any is for the caller's operator to declare, never the reading's to claim; and a bill seen outweighs that declaration: such a span is partial whatever the operator said. Because a live counter reports the whole SoC, the meter can attribute it to a single process tree by CPU-time apportionment — tagged ModelBased, since the reading is a measurement but the split is a model), and attestation (a signed statement of what image ran, at what tier, under what grants, on what hardware, for what cost, with a deterministic-replay journal hash where one was produced).

The substrate is intentionally ownerless: no protocol-level token, permissive licensing on spec text and reference code, and conformance vectors so any implementer can verify canonicity without a trust relationship with the authors. A conforming host runs a unit, enforces its grants, meters its energy, and seals its attestation without contacting any single steward's servers as a condition of operation. Transaction Science is one steward: it publishes the spec, ships a reference implementation, and operates commercial services around the substrate — not its proprietor.

The doctrine

Isolation per joule, across the whole fabric. The durable layer of a sandbox is not fast container boot or a managed control plane — both are commoditized. It is the boundary itself, made honest: the lowest isolation tier that satisfies the work, every resource gated by an explicit capability, and a signed receipt that attributes energy to each device class it touched. "Run it safely" and "don't waste energy" are the same optimization: an over-isolated run burns joules it did not need, and an unmetered accelerator is exactly where the energy hides.

Three consequences, normative in SPEC.md:

  1. The ladder. A host MUST run a unit at the lowest isolation tier of S0:Bare → S1:Capability → S2:Sandbox → S3:Partition → S4:Unikernel → S5:MicroVM → S6:Confidential → S7:Sovereign that satisfies the unit's capability set, and MUST NOT escalate beyond what the grants require. Escalation is the escape hatch, not the entry point — the same discipline the cascade applies to inference, applied to isolation.
  2. The grant. Every resource a unit can touch — network, storage, key-value, and each compute device class (Cpu | Simd | Gpu | Npu | Tpu | Lpu | Photonic | Quantum) — MUST be explicitly granted. Access to an ungranted resource MUST be denied. Each compute grant carries a joule budget.
  3. The attested receipt. Every completed run MUST emit an energy receipt accounting joules per device class — measured + estimated, integer microjoules — each reading tagged HwShunt | ModelBased | Estimator, sealed as a JCR-1 envelope; and MUST emit an attestation binding the unit, image, tier, grants, hardware, and receipt, signed Ed25519 over JCS-canonicalized JSON — the same attestation primitive the ARL Sandbox (ARL-S) uses, so the two interoperate at the attestation layer.

Contents

  • SPEC.md — the normative specification (RFC 2119): the unit of work, the S0–S7 isolation ladder, the capability-grant model, the per-device energy receipt, the attestation, and the conformance contract.
  • spec/ — sub-specifications: tiers.md (the ladder), capabilities.md (the grant model), receipts.md (per-device energy), attestation.md (the signed claim + replay journal), conformance.md (test obligations).
  • conformance/ — signed wire vectors. An implementation is conformant if it round-trips these.
  • proof/ — the proof matrix: a ledger of signed proof cells, each a real run of the conformance pack + a sealed workload on a real target (substrate × OS × arch × cloud × hardware × tier). A green cell is a signature over a real run, not a claim.
  • sandbox-rs/ — the Rust reference library: content addressing and tiers (sandbox-schema), the capability model and deny-by-default enforcer (sandbox-capability), the per-device receipt and JCR-1 sealing (sandbox-meter), the attestation and replay journal (sandbox-attest), the reference host — tier minimization plus sealed-run assembly (sandbox-runtime), a real S2 (WASM) executor on wasmtime with fuel→joule metering and a brokered, Enforcer-gated host-call surface that journals every nondeterministic input for replay (sandbox-exec-wasm), a real S5 (microVM) executor driving Firecracker — both an API-socket driver and a supervised-child lifecycle driver — with pluggable per-device power metering (sandbox-exec-microvm), the S6 confidential-tier TEE layer — SEV-SNP report model, policy + real ECDSA-P384/SHA-384 verification, and a configfs-tsm hardware provider with a software-grounded test provider (sandbox-tee), the conformance harness with the gen_vectors generator (sandbox-conformance), the proof-matrix harness that runs the pack + a sealed run on a target and emits a signed proof cell (sandbox-proof), the sandbox reference checker/runner (sandbox-cli), and the JCP gate (sandbox-jcp) — execution as a JCP consumer: a metered Grant bound to the unit's image by content address is decided by the JCP runtime before the executor is ever invoked, the declared energy ceiling is debited from the delegation chain pre-run, and the decision (allow and deny alike) seals as a JCR-1 receipt alongside the sandbox's own sealed run.

Heterogeneity is normative, not an extension

The clause that distinguishes this standard from a process sandbox is in SPEC.md §2.3 and §6.2: where a unit is granted an accelerator capability, a conforming host MUST attribute energy to that device class separately in the receipt, MUST record the device identity (class, model, driver) in the attestation, and at tiers S5 and above MUST report the measurement provenance honestly (HwShunt where the device exposes a live energy interface — NVML, RAPL, ROCm SMI, Level Zero — ModelBased or Estimator otherwise). A host that runs accelerated work but reports a single undifferentiated CPU energy figure is not conformant.

Lineage

Sandbox draws its design from two Transaction Science runtimes and generalizes a third standard:

  • The isolation ladder and the capability-grant model follow the layered, hardware-rooted isolation and the per-resource grant set proven in the invisible-infrastructure runtime — capabilities first, WASM and microVM tiers above, TEE and sovereign tiers at the top, accelerators as explicit device capabilities throughout.
  • The per-device energy receipt and its provenance discipline follow the picojoule receipt and measurement-quality model of the JouleDB substrate, sealed in the family's shared JCR-1 envelope.
  • The attestation generalizes the SUT / Harness / Supervisor separation and the signed-telemetry model of the ARL Sandbox out of a measurement-only role into a standalone substrate that ARL-S, JouleClaw, EOC, and Joule Code can target instead of each re-specifying isolation.

Status

v0.1.0 draft. Specification core published (the unit, the ladder, the grant model, the per-device receipt, the attestation); the reference library lands the schema, capability, meter, attest, runtime, and conformance crates with the sandbox CLI, plus two real tier executors: a wasmtime-backed S2 executor that runs untrusted WASM under fuel and memory caps, meters fuel→joules, and brokers every capability the guest exercises (kv, clock, randomness) through the deny-by-default Enforcer — journaling each nondeterministic input so the run's attestation carries a replay-journal root; and a Firecracker-driver S5 executor that boots a microVM (API-socket or supervised-child lifecycle) and meters CPU and an assigned accelerator separately through pluggable power meters (RAPL/NVML-class, with an honest fallback: Estimator at the reference per-vCPU-second cost, ModelBased only at a cost calibrated on the host). Energy receipts seal as JCR-1 envelopes (canonical det-CBOR + COSE_Sign1, EdDSA), the signed-receipt format shared across the family; attestations sign Ed25519 over JCS-canonicalized JSON, interoperable with ARL-S. The conformance vectors in conformance/v1/ are real, cryptographically computed values — including a committed pack of adversarial negatives a conformant host must reject — regenerated by gen_vectors and verified by the harness (in-code and file-backed).

Readiness is classified per component (Solid / Engineering / Research / Theory) in SPEC.md §9 and respected when sequencing work. The S2 (WASM) executor runs and meters real guests; the S4–S5 (microVM) driver is real Firecracker integration (it boots a guest on Linux+KVM); and the S6/S7 confidential and sovereign tiers are implemented end-to-end — the host obtains a TEE report, verifies it (real ECDSA-P384/SHA-384 signature + measurement/TCB/debug/report-data policy), seals the evidence into the attestation, binds a locality, and links the run into a tamper-evident audit chain. The single honest caveat (SPEC §9): generating a genuine vendor-signed report requires the CPU's security processor — the configfs-tsm provider does so on real confidential hardware and reports Unavailable elsewhere, while a tagged software-grounded provider, which never claims a hardware root, covers wiring and tests.

  • ARL — the AI Readiness Level standard; its ARL Sandbox (ARL-S) is the measurement-specialized profile of this substrate. The attestation primitive (Ed25519 over JCS) is shared, so an ARL-S session attestation and a Sandbox run attestation verify under the same tooling.
  • JouleClaw — the energy-optimised AI runtime; a JouleClaw agent's tool execution runs inside a Sandbox, and the receipt provenance discipline (HwShunt | ModelBased | Estimator) and the JCR-1 envelope are JouleClaw's.
  • Joule Code — a coding operation that executes generated code (a test run, a build) runs that code inside a Sandbox; the joule receipt composes.
  • EOC — the energy-optimised compute substrate; the discipline of stopping at the cheapest tier that closes the request is EOC's, applied here to isolation tiers.

Licence

Reference code (everything under sandbox-rs/) is Apache-2.0 (LICENSE). Specification text (SPEC.md, spec/) is CC-BY-4.0 (LICENSE-SPEC). The wire format and the right to fork are public.