wai: receipt ledger — a signed tariff, invoices that cite their records, ad and delivery reports, and the wai-ledger service #473

Closed
dcharlot wants to merge 0 commits from wai/receipt-ledger into main
Owner

What is in it

wai.delivery.ledger (extensions/receipt-ledger.md) produces invoice lines a customer can recompute from the signed records WAI already defines. It comes with the reference ledger as a service, wai/wai-ledger.

  • The tariff, WLT1. The seller signs it and the buyer accepts it with a second signature. It sets one currency and one price for every unit the records state:

    • a room session's thirteen units, in live-metering §4.1's order;
    • acknowledged bytes per object class, in settlement §7.1's order;
    • packages, entries and stored bytes (packaging §9);
    • impressions: presented under the players' claims, or billable on beacons.

    Its scope names the rooms, delivering parties, packagers, ad deciders and stitchers it bills.

  • §3, the note on one tariff across rooms, packages and HTTP delivery:

    • a room receipt or a settlement statement that states a tariff must state this one (tariff_conflict);
    • every amount is rounded down once per line;
    • no unit is converted into another, and nothing is priced from joules.

    The merged live-metering tariff and the settlement statement are read as they are. They are not changed.

  • Sources. Each source is verified by the extension that defines it:

    • room: live-metering §5;
    • delivery: settlement §8, a party's statement with the acknowledgements its downstream parties signed;
    • package: packaging §9, the receipt against its indexes;
    • ads: live-ads §9 with ad-presentation §9;
    • stitched: stitched-presentation §7 (#470), with the tariff's ad scope as its signers.
  • The invoice, WLI1.

    • It lists every record it was computed from.
    • It has one line per source and unit, citing the records it came from by a citation digest.
    • It states energy per scope (room hops, delivery hops, packaging, ad decisions) and per acquisition class, with the largest declared uncertainty (max_ppm). Energy is never summed across classes or scopes.
    • Invoices are chained per tariff, so no record is billed twice (record_rebilled).
    • The verifier refuses with 15 reasons of its own (§10).
  • Two reports come with an accepted invoice:

    • Ads: the seller's billable impressions and spend against the players' presented ones, with the reason each billed impression did not count. For a stitched stream, the report is stitched-presentation §7.5's own statement, unchanged, so the ledger computes no second reconciliation.
    • Delivery by party (multi-CDN settlement) under the one tariff:
      • acknowledged, free and declared bytes;
      • each statement's own amount beside the invoiced one;
      • energy by class;
      • the overlaps: bytes one receiver acknowledged from two parties in windows that overlap.
  • wai/wai-ledger is an axum service over a directory it owns. One process holds the lock (File::try_lock). Every file is written whole (temporary name, fsync, rename, directory fsync). On start, the state is read back and verified again. Every invoice is served with its verification document, which receipt_ledger_verify.py --document checks without the service.

Built on #470

This branch merges wai/ssai-stitched (#470, head 4623548d6). The ledger consumes its records directly:

  • the stitcher's pod-input record WSI1 and the player's claim WSC1, verified by stitched_presentation::verify;
  • its §7.5 statement as the stitched report.

Merge #470 first. This PR's own diff then shrinks to the ledger.

Design decisions

  • The buyer signs the tariff. "The customer's signed tariff" is literal. A tariff the buyer did not sign bills nobody, and the scope is what the buyer agreed to pay for.
  • A stitched source's signers are the tariff's ad scope. stitched-presentation §7.1 asks for "the stitchers the buyer and the seller agreed on", which is what the scope is. A stitcher outside it has its records refused by that extension and bills nothing.
  • Lines per (source, unit), rounded once. The invoice rounds once per party and class, while a statement rounds once per payer. The report states both amounts, so the difference is visible.
  • Untimed records. Package receipts and pod-input records state no time. Each is billed in the first invoice that holds it, and the chain keeps it from being billed again.
  • Energy is stated, not billed. Each figure counts once, by record identity: a per-hop record named by both a room and a statement counts in the room scope.
  • The corpus takes its sources from the corpora they belong to: metering, settlement, ads, presentation, stitched, and pack-conformance's packs. The generator reads them, so a regeneration of any of those corpora regenerates this one (the regeneration test catches drift). Two delivering parties' statements are written here from fixed seeds, so the overlap and the declared and free bytes are exercised.

Checks

Build-host runs went through rb; the rest ran locally. The final run was on 9cea6b5c7.

check command result
unit tests cargo test --locked --no-default-features --features receipt_ledger --lib receipt_ledger:: 6 passed
corpus regenerates, outcomes, reasons, §10 table cargo test --locked --no-default-features --features receipt_ledger --test receipt_ledger 4 passed
generator verify wai_receipt_ledger_vectors verify ../live-conformance/ledger both PASS
#470's test after the merge cargo test --locked --no-default-features --features stitched_presentation --test stitched_presentation 3 passed
registry cargo test --no-default-features --lib codecs::registry; wai registry export --check 14 passed; up to date
clippy, this slice's files cargo clippy --locked --no-default-features --features receipt_ledger --all-targets 0 notes in receipt_ledger* (the unpinned_read dead-code warning is pre-existing; the settlement baseline has it)
independent verifier python3 -I live-conformance/receipt_ledger_verify.py live-conformance/ledger every vector PASS; 35 mutated copies fail; 19 dropped checks caught
other verifiers it calls settlement_verify.py, live_metering_verify.py, live_ads_verify.py, ad_presentation_verify.py, stitched_presentation_verify.py all rc 0
service tests cd wai/wai-ledger && cargo test --locked --release 3 passed (the corpus's invoices issued byte for byte, the chain recovered after a restart, one process per directory)
service clippy cargo clippy --locked --release --all-targets -- -D warnings rc 0
service over HTTP bash smoke.sh http://127.0.0.1:18251 against a started instance all checks hold; after a restart 1 invoice, 7 sources recovered; a second process on the directory is refused (rc 1)
lockfiles cargo metadata --locked --offline in wai-rs and wai-ledger ok (wai-ledger/Cargo.lock is new, from wai-rs's lock with additions only: axum 0.8.9, tokio 1.54.1, the quantum service's pins)
workflows wfsteps.py HEAD 9d984511a origin/main origin/wai/ssai-stitched 76dca14fa; ruby YAML parse 0 problems; all parse
repo checks check-tests-in-ci.py, check-workflow-concurrency.sh, check-spec-refs.py, check-wai-section-refs.py, check-no-vanity-metrics.sh, test-public-text-checks.sh, check-comparative-prose.sh, check-orphan-sources.py all clean
public names check-public-names.sh on every changed file, and the commit messages clean (59 files), 0 hits

Falsifications

Each was a mutation of the committed tree on the build host, checked by exit code and then restored.

  • Reference (cargo test --test receipt_ledger exits 101 each time):
    • the one-tariff rule dropped;
    • amounts rounded up;
    • classes summed into one row;
    • the rebilled check dropped;
    • citations not compared;
    • the buyer's signature unchecked;
    • a free retrieval billed;
    • package, party and decider scope unchecked;
    • the ad period unchecked;
    • a stitched source billing its own claims instead of its presentations;
    • unpresented claims cited;
    • stitched signers not taken from the scope;
    • the stitched report dropped.
  • Service (cargo test --release exits 101 each time):
    • the directory lock dropped;
    • an invoice not persisted (the restart test fails);
    • the held-sources check dropped.
  • Independence. For each reference mutation that changes figures (rounding, rows, every scope rule, the period, the stitched presentations and citations, the report), the corpus the mutated reference wrote was checked by receipt_ledger_verify.py, which exited 1 each time.
  • Gaps found and closed. Falsifying found two gaps, now closed:
    1. No vector refused a package outside the scope. A reference that skipped the rule wrote a corpus both sides accepted. There are now scope controls for every source kind, a room under other prices, and period controls for statements and ad breaks.
    2. Billing every own claim of a stitched record passed, because every own claim in the corpus was presented. #470's squeezeback shared break, with 3 of its 6 sessions presented, is now a source.

Not done

  • Deploy. Not done. The deploy note (binary, environment, port 8251 on prod's loopback, storage, launchd plist, Caddy route that publishes only reads and verify, health and smoke) is with the lead.
  • Tariff-issuing step. There is no CLI or UI that issues a tariff, and no buyer-side signing step. Tariff::sign exists; issuing tariffs is the operator's job.
  • Package measurement claims. packaging §9.4's measurement claim of a metered package is not checked by the ledger (pack_verify.py does not check it either). The corpus's packages are unmetered.
  • RI1 audit-kit acknowledgements. WDA1 records from third-party HTTP objects acknowledged by plain SHA-256 are not a source kind yet, because RI1 has not landed.
  • Accounts and limits. The service has no accounts, no per-client limits and no rate limiting. Writes are meant to stay on the host.

🤖 Generated with Claude Code


Closed: Landed on main through merge train E (#499, merge bf39ec9a); verified by content: this PR's head is in main

## What is in it **`wai.delivery.ledger`** ([`extensions/receipt-ledger.md`](wai/extensions/receipt-ledger.md)) produces invoice lines a customer can recompute from the signed records WAI already defines. It comes with the reference ledger as a service, **`wai/wai-ledger`**. - **The tariff, `WLT1`.** The seller signs it and the buyer accepts it with a second signature. It sets one currency and one price for every unit the records state: - a room session's thirteen units, in live-metering §4.1's order; - acknowledged bytes per object class, in settlement §7.1's order; - packages, entries and stored bytes (packaging §9); - impressions: presented under the players' claims, or billable on beacons. Its **scope** names the rooms, delivering parties, packagers, ad deciders and stitchers it bills. - **§3, the note on one tariff across rooms, packages and HTTP delivery:** - a room receipt or a settlement statement that states a tariff must state this one (`tariff_conflict`); - every amount is rounded down once per line; - no unit is converted into another, and nothing is priced from joules. The merged live-metering tariff and the settlement statement are read as they are. They are not changed. - **Sources.** Each source is verified by the extension that defines it: - `room`: live-metering §5; - `delivery`: settlement §8, a party's statement with the acknowledgements its downstream parties signed; - `package`: packaging §9, the receipt against its indexes; - `ads`: live-ads §9 with ad-presentation §9; - `stitched`: stitched-presentation §7 (#470), with the tariff's ad scope as its signers. - **The invoice, `WLI1`.** - It lists every record it was computed from. - It has one line per source and unit, citing the records it came from by a citation digest. - It states energy per scope (room hops, delivery hops, packaging, ad decisions) and per acquisition class, with the largest declared uncertainty (`max_ppm`). Energy is never summed across classes or scopes. - Invoices are chained per tariff, so no record is billed twice (`record_rebilled`). - The verifier refuses with 15 reasons of its own (§10). - **Two reports** come with an accepted invoice: - Ads: the seller's billable impressions and spend against the players' presented ones, with the reason each billed impression did not count. For a stitched stream, the report is stitched-presentation §7.5's own statement, unchanged, so the ledger computes no second reconciliation. - Delivery by party (multi-CDN settlement) under the one tariff: - acknowledged, free and declared bytes; - each statement's own amount beside the invoiced one; - energy by class; - the **overlaps**: bytes one receiver acknowledged from two parties in windows that overlap. - **`wai/wai-ledger`** is an axum service over a directory it owns. One process holds the lock (`File::try_lock`). Every file is written whole (temporary name, fsync, rename, directory fsync). On start, the state is read back and verified again. Every invoice is served with its verification document, which `receipt_ledger_verify.py --document` checks without the service. ## Built on #470 This branch **merges `wai/ssai-stitched` (#470, head `4623548d6`)**. The ledger consumes its records directly: - the stitcher's pod-input record `WSI1` and the player's claim `WSC1`, verified by `stitched_presentation::verify`; - its §7.5 statement as the stitched report. Merge #470 first. This PR's own diff then shrinks to the ledger. ## Design decisions - **The buyer signs the tariff.** "The customer's signed tariff" is literal. A tariff the buyer did not sign bills nobody, and the scope is what the buyer agreed to pay for. - **A stitched source's signers are the tariff's ad scope.** stitched-presentation §7.1 asks for "the stitchers the buyer and the seller agreed on", which is what the scope is. A stitcher outside it has its records refused by that extension and bills nothing. - **Lines per (source, unit), rounded once.** The invoice rounds once per party and class, while a statement rounds once per payer. The report states both amounts, so the difference is visible. - **Untimed records.** Package receipts and pod-input records state no time. Each is billed in the first invoice that holds it, and the chain keeps it from being billed again. - **Energy is stated, not billed.** Each figure counts once, by record identity: a per-hop record named by both a room and a statement counts in the room scope. - **The corpus takes its sources from the corpora they belong to**: metering, settlement, ads, presentation, stitched, and pack-conformance's packs. The generator reads them, so a regeneration of any of those corpora regenerates this one (the regeneration test catches drift). Two delivering parties' statements are written here from fixed seeds, so the overlap and the declared and free bytes are exercised. ## Checks Build-host runs went through `rb`; the rest ran locally. The final run was on `9cea6b5c7`. | check | command | result | |---|---|---| | unit tests | `cargo test --locked --no-default-features --features receipt_ledger --lib receipt_ledger::` | 6 passed | | corpus regenerates, outcomes, reasons, §10 table | `cargo test --locked --no-default-features --features receipt_ledger --test receipt_ledger` | 4 passed | | generator verify | `wai_receipt_ledger_vectors verify ../live-conformance/ledger` | both PASS | | #470's test after the merge | `cargo test --locked --no-default-features --features stitched_presentation --test stitched_presentation` | 3 passed | | registry | `cargo test --no-default-features --lib codecs::registry`; `wai registry export --check` | 14 passed; up to date | | clippy, this slice's files | `cargo clippy --locked --no-default-features --features receipt_ledger --all-targets` | 0 notes in `receipt_ledger*` (the `unpinned_read` dead-code warning is pre-existing; the settlement baseline has it) | | independent verifier | `python3 -I live-conformance/receipt_ledger_verify.py live-conformance/ledger` | every vector PASS; 35 mutated copies fail; 19 dropped checks caught | | other verifiers it calls | `settlement_verify.py`, `live_metering_verify.py`, `live_ads_verify.py`, `ad_presentation_verify.py`, `stitched_presentation_verify.py` | all rc 0 | | service tests | `cd wai/wai-ledger && cargo test --locked --release` | 3 passed (the corpus's invoices issued byte for byte, the chain recovered after a restart, one process per directory) | | service clippy | `cargo clippy --locked --release --all-targets -- -D warnings` | rc 0 | | service over HTTP | `bash smoke.sh http://127.0.0.1:18251` against a started instance | all checks hold; after a restart 1 invoice, 7 sources recovered; a second process on the directory is refused (rc 1) | | lockfiles | `cargo metadata --locked --offline` in `wai-rs` and `wai-ledger` | ok (`wai-ledger/Cargo.lock` is new, from `wai-rs`'s lock with additions only: axum 0.8.9, tokio 1.54.1, the quantum service's pins) | | workflows | `wfsteps.py HEAD 9d984511a origin/main origin/wai/ssai-stitched 76dca14fa`; ruby YAML parse | 0 problems; all parse | | repo checks | `check-tests-in-ci.py`, `check-workflow-concurrency.sh`, `check-spec-refs.py`, `check-wai-section-refs.py`, `check-no-vanity-metrics.sh`, `test-public-text-checks.sh`, `check-comparative-prose.sh`, `check-orphan-sources.py` | all clean | | public names | `check-public-names.sh` on every changed file, and the commit messages | clean (59 files), 0 hits | ## Falsifications Each was a mutation of the committed tree on the build host, checked by exit code and then restored. - **Reference** (`cargo test --test receipt_ledger` exits 101 each time): - the one-tariff rule dropped; - amounts rounded up; - classes summed into one row; - the rebilled check dropped; - citations not compared; - the buyer's signature unchecked; - a free retrieval billed; - package, party and decider scope unchecked; - the ad period unchecked; - a stitched source billing its own claims instead of its presentations; - unpresented claims cited; - stitched signers not taken from the scope; - the stitched report dropped. - **Service** (`cargo test --release` exits 101 each time): - the directory lock dropped; - an invoice not persisted (the restart test fails); - the held-sources check dropped. - **Independence.** For each reference mutation that changes figures (rounding, rows, every scope rule, the period, the stitched presentations and citations, the report), the corpus the mutated reference wrote was checked by `receipt_ledger_verify.py`, which exited 1 each time. - **Gaps found and closed.** Falsifying found two gaps, now closed: 1. No vector refused a package outside the scope. A reference that skipped the rule wrote a corpus both sides accepted. There are now scope controls for every source kind, a room under other prices, and period controls for statements and ad breaks. 2. Billing every own claim of a stitched record passed, because every own claim in the corpus was presented. #470's `squeezeback` shared break, with 3 of its 6 sessions presented, is now a source. ## Not done - **Deploy.** Not done. The deploy note (binary, environment, port 8251 on prod's loopback, storage, launchd plist, Caddy route that publishes only reads and verify, health and smoke) is with the lead. - **Tariff-issuing step.** There is no CLI or UI that issues a tariff, and no buyer-side signing step. `Tariff::sign` exists; issuing tariffs is the operator's job. - **Package measurement claims.** packaging §9.4's measurement claim of a metered package is not checked by the ledger (`pack_verify.py` does not check it either). The corpus's packages are unmetered. - **RI1 audit-kit acknowledgements.** WDA1 records from third-party HTTP objects acknowledged by plain SHA-256 are not a source kind yet, because RI1 has not landed. - **Accounts and limits.** The service has no accounts, no per-client limits and no rate limiting. Writes are meant to stay on the host. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- **Closed:** Landed on main through merge train E (#499, merge bf39ec9a); verified by content: this PR's head is in main
extensions/receipt-ledger.md: a tariff (WLT1) a seller and a buyer both sign,
pricing every unit WAI's records state in one currency (a room session's units,
acknowledged bytes by object class, a package's packages, entries and stored
bytes, counted ad impressions) with the scope of rooms, parties, packagers and
deciders it bills; sources verified by their own extensions; an invoice (WLI1)
whose lines cite their records, whose energy is per scope and per class with
its largest declared uncertainty, chained so no record is billed twice; and the
ad and delivery reports.

wai-rs: the receipt_ledger module (feature receipt_ledger), its corpus
generator and wai_receipt_ledger_vectors; live-conformance/ledger/ and
receipt_ledger_verify.py, the second implementation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai.video.stitched_presentation (extensions/stitched-presentation.md): a WPS1 claim names an ad
by the marker the stream carries for it (an EXT-X-DATERANGE tag, an interstitial's asset, a DASH
event) in the manifest it states the SHA-256 of; a WPI1 pod-input record, signed by the
stitcher or a proxy in front of the ad server, binds the response digest, the chosen ads, their
creatives and prices, the avail, the frame and the measurement terms; a verifier recomputes
each ad's presentations, quartiles and the spend that counts by currency. A form-1
wai.video.ssai receipt gains a JSON carriage (its signed bytes unchanged) so it can be a
record's response. live-compose gains the squeeze and double-box ad frames (§5.9). Corpus
live-conformance/stitched/, its independent verifier stitched_presentation_verify.py, and the
browser producer web/ads/stitched.js with tests against the corpus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai/wai-ledger: tariffs, sources and invoices kept in a directory the service
owns (one process holds its lock; every file written whole; the state read back
and verified again on start); POST /v1/tariffs, /v1/sources, /v1/invoices and
/v1/verify, GET /v1/invoices/{digest} with the invoice's verification document.
Its tests issue the corpus's invoices byte for byte and recover the chain after
a restart; smoke.sh checks it over HTTP, the document checked by
receipt_ledger_verify.py --document.

wai.delivery.ledger registered with WLT1 and WLI1 (registry export
regenerated); unit tests of the module; the CI step beside settlement's and
.github/workflows/wai-ledger.yml.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The pod-input record and the claim were first written as WPI1 and WPS1, which co-performance
already defines (§5.1, §7.7); the registry's wire-identifier table showed the collision. They
are WSI1 and WSC1 now, the corpus regenerated. The capability is registered in
codecs/registry.rs with its two wire identifiers, the registry export regenerated, SPEC §5
gains its paragraph, the CHANGELOG its entries, and wai-conformance a step that runs the
module's tests, the corpus through the tool, the independent verifier and the browser
producer.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
An ad frame's function takes the descriptor's fields it reads (allowed too_many_arguments,
with the reason); the verifier keeps each ad's own claims by index alone; the XML subset's
name reader takes its stop characters as an array.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A falsification moved a squeeze's side band onto the window's side and the corpus still
verified: the share is the same area, and no fact stated the rectangles. Each accepted record
now states its frame's share and its ad region's rectangles (live-compose §5.9), so wai-rs and
stitched_presentation_verify.py must agree on the region, not only its area; the Python
verifier gains the matching mutation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Falsifying the reference found that no vector refused a package outside the
tariff's scope: a reference that skipped that rule wrote a corpus the second
implementation accepted. The corpus now refuses a delivering party, a packager
and an ad decider outside the scope, a room receipt under other prices, and a
delivering party's statement and an ad break outside the invoice's period.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: stitched-presentation §7.2 step 5 states its refusal plainly
Some checks failed
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Has been cancelled
4623548d63
Co-Authored-By: Claude Opus 5.5 <[email protected]>
# Conflicts:
#	wai/CHANGELOG.md
A stitched source (extensions/stitched-presentation.md, PR #470, which this
branch merges): the stitcher's pod-input records (WSI1) and the players'
claims (WSC1), verified by that extension with the tariff's ad scope as its
signers. Its presentations bill as presented impressions, each line citing the
accepted records and the presented own claims; its report is that extension's
§7.5 statement unchanged, a form-1 receipt's own quartiles and spend beside the
presented ones. The corpus bills two vectors of live-conformance/stitched/ and
refuses a stitched source given twice and a stitcher outside the scope.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: receipt ledger — a stitched shared break whose own claims are not all presented
Some checks failed
wai-ledger service / does this change touch it (pull_request) Has been cancelled
wai-ledger service / service · linux (pull_request) Has been cancelled
wai-ledger service / service · macos (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Has been cancelled
9cea6b5c71
Falsifying the stitched source found that a reference billing every own claim,
presented or not, wrote a corpus both implementations accepted: every own claim
of the billed records was presented. The squeezeback vector's shared break,
three of whose six sessions' claims are presented, is now among the stitched
sources.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
dcharlot closed this pull request 2026-10-26 20:58:29 -04:00
Some checks failed
wai-web wasm32 / does this change touch it (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been cancelled
wai-quantum studio and desktop / does this change touch it (pull_request) Has been cancelled
wai-quantum studio and desktop / studio · browser (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-pack / wai-pack · does this change touch it (pull_request) Has been cancelled
wai-pack / wai-pack · linux (pull_request) Has been cancelled
wai-pack / wai-pack · linux-arm64 (pull_request) Has been cancelled
wai-pack / wai-pack · macos (pull_request) Has been cancelled
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been cancelled
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been cancelled
wai-pack / wai-pack · dependency licences (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
wai-ledger service / does this change touch it (pull_request) Has been cancelled
wai-ledger service / service · linux (pull_request) Has been cancelled
wai-ledger service / service · macos (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Has been cancelled

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!473
No description provided.