receipt-ledger: tariff version 3 prices media jobs per operation and bills the work done #550
Merged
dcharlot
merged 2 commits from 2026-10-31 08:50:18 -04:00
wai/ledger-work-priced into main 2026-10-31
Merge origin/main (#553: two arm64-heavy conformance jobs build without debuginfo) into wai/ledger-work-priced
All checks were successful
wai-pack / wai-pack · macos (pull_request) Successful in 3m16s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 9m41s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 55s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m50s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 5m35s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 5m4s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 16m2s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 5m10s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 15m19s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 17m55s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m25s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 5m5s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 15m31s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 11m1s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 10m23s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 12m33s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 20m15s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 10s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 31s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m10s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 6m10s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m36s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m33s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m12s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 25s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m31s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 8m28s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m1s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h7m20s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30
receipt-ledger: tariff version 3 prices media jobs per operation and bills the work
Some checks failed
wai-quantum docs, course and locales / the Studio's words in every locale · linux (pull_request) Successful in 9s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m13s
WAI conformance / cargo-class corpora · macos (pull_request) Failing after 16m4s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 3m34s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 11m16s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 3m39s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 13m9s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 9m27s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m35s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 24s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 1m15s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 5m18s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 13m54s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 11m58s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 17m21s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Failing after 18m2s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Failing after 8m14s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 29s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 9m26s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 11m12s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m2s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 8m35s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m51s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m8s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m0s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 35s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m54s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m53s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 8m32s
A job price of version 2 is (capability, unit, divisor, price), so one capability's encode (a motion search, then a codestream written) and decode (a reconstruction) shared a price although they spend different energy for the same output units. And a chain billed every record once, the output's int_motion decode receipt among them: the codecs are deterministic, so a re-run of a request (a new hop, new energy, a new OER/2 receipt) delivered the same output receipt and was refused record_rebilled. Version 3 (WLT1 and WLI1 with version byte 3) adds op_len and operation to each job price, which a version-2 reader cannot read, and prices a job by its serving capability and its route record's operation, in strictly ascending order of (capability, operation, unit); an unpriced (capability, operation) bills nothing. Under it a chain bills a job's work once (its route record and its hops' OER/2 receipts); the output receipt is cited and carried in the citation digest but is not once-only, so a re-run is billed and a replayed hop receipt or route record is still refused (record_rebilled, record_duplicate). Two route records of one job are two runs, no longer record_overlap. Version 2 reads, verifies and bills exactly as before; packages keep their rule. A job price whose capability or operation is not text is tariff_invalid, as §4.3 reads it (the reference said malformed). wai-rs, receipt_ledger_verify.py and the ledger service follow. The corpus adds nine vectors (encode and decode at their own prices, a re-run billed, one output under two hops, an unpriced operation, a replayed hop, one hop under two lines, prices out of order by operation, a version-2 invoice under a version-3 tariff, the re-run refused under version 2); its version-3 jobs are routed under the route corpus's seeds, whose file is unchanged. The control invoice_version now gives version 4. Co-Authored-By: Claude Opus 5.5 <[email protected]>