open-standards/mesh/README.md
Transaction Science f79fffd9fa
All checks were successful
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m6s
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Successful in 1m8s
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Successful in 2m0s
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Successful in 2m19s
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Successful in 3m53s
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Successful in 4m18s
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Successful in 2m36s
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 2m34s
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 4m33s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 2m40s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been skipped
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been skipped
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 44s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 5s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
WAI conformance / does this change touch it (pull_request) Successful in 5s
WAI conformance / cargo-class corpora · linux (pull_request) Has been skipped
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been skipped
WAI conformance / cargo-class corpora · macos (pull_request) Has been skipped
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been skipped
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been skipped
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been skipped
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been skipped
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been skipped
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been skipped
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been skipped
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been skipped
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been skipped
WAI energy receipts / does this change touch it (pull_request) Successful in 4s
WAI energy receipts / energy receipts · linux (pull_request) Has been skipped
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been skipped
WAI energy receipts / energy receipts · macos (pull_request) Has been skipped
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 4s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been skipped
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been skipped
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 4s
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 sink gates / does this change touch it (pull_request) Successful in 4s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Has been skipped
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 4s
wai-pack / wai-pack · linux (pull_request) Has been skipped
wai-pack / wai-pack · linux-arm64 (pull_request) Has been skipped
wai-pack / wai-pack · macos (pull_request) Has been skipped
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been skipped
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been skipped
wai-pack / wai-pack · dependency licences (pull_request) Has been skipped
wai-quantum CUDA member / does this change touch it (pull_request) Successful in 4s
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 dataflow member / does this change touch it (pull_request) Successful in 4s
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 / does this change touch it (pull_request) Successful in 4s
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Has been skipped
wai-quantum FPGA member / does this change touch it (pull_request) Successful in 5s
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 HIP member / does this change touch it (pull_request) Successful in 4s
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 Metal member / does this change touch it (pull_request) Successful in 4s
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 npu-cores member / does this change touch it (pull_request) Successful in 4s
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 neural-processor member / does this change touch it (pull_request) Successful in 4s
wai-quantum OpenCL member / does this change touch it (pull_request) Successful in 4s
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 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-qpu / does this change touch it (pull_request) Successful in 4s
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 4s
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 tensor-engine member / does this change touch it (pull_request) Successful in 4s
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 4s
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 / 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 4s
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 WebGPU member / does this change touch it (pull_request) Successful in 4s
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 / 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 4s
wai-web wasm32 / does this change touch it (pull_request) Successful in 4s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been skipped
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been skipped
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m34s
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 56s
mesh: a grant is spent only by its issuer, at the steward it names, and its spend survives a restart
After #294, mesh decided a grant with JCP's runtime but honoured it as a
bearer token. Whoever presented a grant was taken to be its subject, and
the steward's spend lived in memory. Three consequences:
- Anyone who obtained a grant could spend it and receive the output.
- The same grant spent its full budget again at every steward it was
  shown to.
- A restart gave every grant its budget back.

**Caller authentication (SPEC §2.1).** A grant is now presented as a
`Presentation`: the delegation chain, root first, plus a caller, a nonce
and an Ed25519 signature over the request id, the leaf's id, the caller
and the nonce.
- The steward refuses a presentation whose caller is not the leaf's
  issuer, or whose signature is not for this request.
- The steward refuses a presentation it has already spent, keyed by leaf
  and nonce, so a captured one cannot be replayed.

**Steward-held grants (SPEC §2.1).** The steward decides the chain as its
holder, under its sealing key's identity, so the leaf's subject must be
this steward. A grant shown to another steward is refused
`NotThisSteward`. One budget over several stewards is sharded with
`jcp_grant::shard` (JCP §4.5): one shard held by each steward, summing to
no more than the parent. Chains are decided with jcp-runtime's new
`authorize_chained` / `charge_chained` (#300), which check every link and
debit every link.

**Durable spend (SPEC §2.2, JCP §4.11).** The decision journal:
- **Before the engine runs,** each decision is recorded as an
  `Authorised` entry. A decision that cannot be recorded is refused.
- **After the debit,** a `Debited` entry is recorded.
- **On restart,** `Mesh::with_journal` replays the journal through the
  gate. Each authorisation is verified and decided again at its recorded
  time, and each debit is applied to its serve.
- **Inconsistent journals** fail with `JournalInconsistent`: a replay the
  gate refuses, a debit with no authorisation, or a presentation spent
  twice.
- **In-flight serves** (authorised, never debited) stay debited at their
  ceiling. They are listed in `unresolved()` with the caller and backend,
  and never retried.
- **The reference `FileJournal`** is append-only JSON lines, synced per
  append. A torn final line is dropped and cut from the file.

`Mesh::serve` and mesh-openai's `complete_chat` / `complete_responses`
take `Option<&Presentation>`. The demo and the falcon binary present
their grants. The HTTP server presents none, as before. SPEC §2, §2.1,
§2.2, §7 and §8 and the README describe all of it.
joulehook-rs locks mesh-core through a path dependency, so its Cargo.lock
is updated too.

Checked on the build host:
- mesh-rs: 73 tests pass, eight of them new. They cover a grant held
  elsewhere, a wrong or misdirected caller, replay, shards across two
  stewards, restart resumption, an in-flight serve, a forged journal and a
  torn file line.
- Every `mesh/1` vector is byte-identical, and the lockfile is current.
- The gguf and openai server features build, the demo runs, and clippy is
  clean on mesh-core and mesh-openai.
- Mutations each fail tests: no caller check, no replay check, bearer
  subject, replay dropping debits, in-flight not debited, and replay
  trusting the journal.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 17:13:42 -04:00

107 lines
5.4 KiB
Markdown

# Mesh
**Energy-accounted inference serving & routing.** One of the
[Transaction Science open standards](../README.md).
Mesh treats every inference as a metered transaction. A request declares a
**joule ceiling** and a **fidelity floor**; the mesh routes it to the
cheapest-sufficient model on the cheapest-sufficient backend, serves it under an
energy meter, and seals a receipt whose headline figure is **microjoules per
accepted output token** — measured at the meter, not estimated from a price list.
The serving shelf reports dollars per token and tokens per second. Mesh reports
the number that is physical, comparable across hardware, and impossible to
inflate: the joule.
- **Spec:** [`SPEC.md`](SPEC.md) (CC-BY-4.0)
- **Reference code:** [`mesh-rs/`](mesh-rs/) (Apache-2.0)
- **Conformance vectors:** [`conformance/v1/`](conformance/v1/)
## The shape
```
ServeRequest ──▶ route (cheapest-sufficient) ──▶ authorise (JCP grant)
│
▼
meter + debit ◀── serve (engine) ──▶ tokens
│
▼
sealed JCR-1 receipt: µJ / accepted token
```
Four roles — **caller**, **router**, **engine**, **steward** — and four phases
per serve: route, authorise, meter, seal. The grant is decided by JCP's own
runtime before any work runs, so its expiry, caveats and remaining budget bind
here as at any JCP enforcement point, and the metered joules are debited
against it afterwards. A grant is spent only by its issuer, who signs each
presentation for one request, and only at the steward it was issued to; each
decision is journalled before the work, so a restart gives no budget back. See
[`SPEC.md`](SPEC.md) §2.
## The reference workspace
`mesh-rs/` is a pure-Rust reference implementation:
| Crate | What it is |
|---|---|
| `mesh-schema` | wire types — `ServeRequest`, `Fidelity`, two-part `Energy`, `RouteDecision`, `ServeOutcome` |
| `mesh-router` | energy-weighted cheapest-sufficient routing with a full candidate audit |
| `mesh-engine` | the `ServingEngine` interface + a deterministic, weights-free `ReferenceEngine` |
| `mesh-engine-gguf` | a **real** backend (behind `gguf`): wraps the family's pure-Rust GGUF/Metal inference substrate so the mesh routes and meters actual model tokens |
| `mesh-meter` | the meter window; an always-available estimator + an optional bridge to the family hardware meter (RAPL / NVML / Apple) behind `hw-meter`, and `ProcessMeter`: this process's own CPU and GPU energy for an engine that runs in process, measured when a span covers the whole request |
| `mesh-receipt` | the `mesh/1` receipt, JCR-1 sealing (det-CBOR + COSE_Sign1), and a hash-chained log |
| `mesh-core` | the orchestration that ties route → authorise → meter → seal together |
| `mesh-conformance` | the deterministic reference scenario, its checks, and the `gen-vectors` bin |
Mesh **rides on** [JCP](../jcp/) (a serve request is authorised by a JCP grant;
receipts seal in JCR-1), **dispatches to** runtimes such as
[JouleClaw](../jouleclaw/), and **routes across** compute described by
[EOC](../eoc/) and isolated by [Sandbox](../sandbox/). It introduces no new
cryptography (see [`SPEC.md`](SPEC.md) §9).
## Run it
```bash
cd mesh-rs
# all crates green
cargo test --workspace
cargo clippy --workspace --all-targets
# end-to-end: mint a JCP grant, serve, print the sealed receipt
cargo run -p mesh-core --example demo
# on Linux/RAPL or a CUDA/NVML box, meter real silicon (HwShunt provenance, where
# the counter is live; a counter that is not live falls back to the estimator)
cargo run -p mesh-core --example demo --features hw-meter-rapl
# regenerate the published conformance vectors
cargo run -p mesh-conformance --bin gen-vectors -- ../conformance/v1
# serve a REAL model end-to-end through Mesh (Falcon-H1 0.5B), seal the receipt
cargo run --release -p mesh-engine-gguf --features gguf --bin serve_falcon -- \
/path/to/falcon-h1-0.5b-instruct 12 "The capital of France is"
```
The `serve_falcon` run demonstrates the **whole standard** on real model tokens:
a JCP grant authorises each request (an underfunded grant is refused *before any
decode runs*), the cheapest-sufficient backend is chosen, the decode is metered,
and a `mesh/1` receipt is sealed and hash-chained across the session — e.g.
prompt *"The capital of France is"* → `" Paris. It is known for its historical
landmarks"`, prompt *"Photosynthesis is the process by which"* → `" plants
convert sunlight into chemical energy in the form of"`, with both seals verifying
and the chain's prev-links intact.
The demo prints the route (every backend weighed, with the reason each was kept
or rejected), the honest energy provenance, and the wedge metric — then verifies
the sealed envelope under the steward key.
## Status
v0.1.0-draft.1. Reference workspace builds and tests green (`mesh-schema`,
`mesh-router`, `mesh-engine`, `mesh-meter`, `mesh-receipt`, `mesh-core`,
`mesh-conformance`); `cargo clippy --all-targets` warning-free; published vectors
in [`conformance/v1/`](conformance/v1/). The reference engine is deterministic and
weights-free; production backends implement the same `ServingEngine` interface —
`mesh-engine-gguf` (behind `gguf`) is a real one over the family's pure-Rust
GGUF/Metal substrate, kept out of the default build so it needs no weights.