wai.delivery.settlement (E6): a hop is paid only for bytes the next hop signed for #404

Merged
dcharlot merged 6 commits from wai/settlement into main 2026-10-21 19:12:00 -04:00
Owner

wai.delivery.settlement (E6): a hop is paid only for bytes the next hop signed for

Delivery settled on what the party that received it signed, not on the sender's own logs.

What is in it

  • wai/extensions/settlement.md, which registers the record wai.delivery.settlement:
    • Acknowledgement WDA1 (§3). The downstream party (a next hop or a sink) signs what it received in a window. Each entry covers one object class (live, fetch, fill, ancillary) under one grant and one proof. It states the objects as the tree root of jwp-receipts §2.2 (unlabelled leaves, so a whole group in order gives the publisher's root), and gives a count, a byte count and the SHA-256 of the item list. The item list travels beside the record: content hash, start, end. Records of one (mode, upstream, downstream) form a chain: windows do not overlap, and prev names the record before. A relay acknowledges upstream and is acknowledged downstream over the same content hashes. A hop's billable bytes are exactly the bytes its downstream parties signed for. An acknowledgement whose downstream is its own upstream is refused (self_acknowledged).

    • Unacknowledged delivery (§4). A hop whose downstream will not or cannot sign uses a declaration: the same layout with mode 2, signed by the hop. It is counted in its own class, unacknowledged: never zero, never billed, and never covering a byte the same party acknowledged in an overlapping window (declared_and_acknowledged). Bearers: "a unidirectional bearer settles under unidirectional-delivery §4", with no duplication of T2's work.

    • Range proof WBR1 (§5). It carries the covered chunks of a range plus the chaining value of every subtree of BLAKE3's chunk tree that lies outside them, and it verifies to the content hash. It generalises http-delivery §6's head proof, whose ranges start at 0. A proof establishes the object's length only when it reaches the last chunk (a tail proof), and the verifier reports whether it did. §5.6 defines audits: an auditor names an acknowledged item and asks for a proof of a range within it.

    • Paid retrieval (§6). A fetch below the live edge, a recording fetch, or a fill past a cache is billed only to a room grant whose WRP1 proof the request carried. Each entry is checked against live-rooms §10.5.4 steps 2–5, the grant's window and the seek power, and one proof pays for one record (pop_replayed). A retrieval made without a grant is free, and a statement that bills it is refused (paid_without_grant).

    • Statement WSS1 (§7). One per party per period. It holds:

      • lines by object class and payer (the downstream key for delivery classes, the grant for retrieval classes);
      • the acknowledged bytes by class, and the declared bytes;
      • joules by acquisition class from the party's WMH1 records, never summed across classes (classes_summed);
      • the amount under a declared tariff, in millionths of a minor unit per 10^9 bytes, rounded down once per line.

      The verifier recomputes every figure. A line that bills bytes no acknowledgement covers is bytes_not_acknowledged; any other difference is statement_mismatch. Line kind 2 is reserved for a payee that is not a hop (the CO6 slot), with payee and payer already in the line layout. This revision refuses it.

    • Logs (§9). Each acknowledged item maps onto an RFC 7937 cdni_http_request_v1 record (cdni_http_request_v2 under RFC 9246), with the acknowledgement's digest in a remark directive. §9.2 states what a log cannot carry: a counter-signature. Each log record is the writer's own word, and SHA256-hash is the writer's own integrity hash. A log therefore maps onto declarations, never onto acknowledgements. §9.3 covers SVTA2050, SVTA2007 and SVTA2006, cited by identifier only. Only their published summaries could be read, and the text says so.

    • Viewers as relays over ciphertext (§10, built). An acknowledgement binds the content hash of the sealed bytes, so a forwarder that cannot open what it forwards earns acknowledged bytes and can prove ranges of them. The corpus has one such statement and one sealed range proof.

    • §11 is the reasons table (19 codes). §13 states what an acknowledgement reveals and to whom, with no gate of its own (per the owner rule). A regime that asks the operator for a lawful basis is pointed at the lawful-basis declaration (jwp-receipts §2.4.6).

  • wai-rs module settlement (feature settlement = ["live_metering", "jwp_hash"], no new dependency). It has the records, the range proof via blake3's hazmat API (as the head proof uses it), grant and proof checks via live_room, WMH1 via live_metering, verify, and unit tests. It also has the generator wai_settlement_vectors and tests/settlement.rs.
  • Corpus wai/live-conformance/settlement/, written from fixed seeds:
    • 48 statements. Five are accepted:

      • a relay paid by an edge and a viewer, with two declarations and two energy classes;
      • an edge with a granted DVR fetch, a partial object and a free fetch;
      • an origin's fills billed to the viewer's grant, beside an ungranted free fill;
      • a viewer forwarding sealed objects;
      • an unmetered hop.

      The rest are refused, each a control of one defect. They include every negative the brief named: billing bytes no acknowledgement covers, an acknowledgement signed by the hop itself, a paid fetch without a grant, joules summed across classes, a statement that does not recompute, and an acknowledgement replayed from another period.

    • 24 range proofs. Accepted cases include an interior range, the head, the tail (length established), one chunk, whole objects, a sealed object, an answered audit, and an interior range under a wrong length that leaves the tree's shape unchanged (accepted, length not established). Refused cases include a range past the end, an empty range, bytes of another object, a range past the true end under a longer length, a chaining value dropped, added or changed, another content hash, an audit outside its item, and records that do not read.

  • Independent verifier live-conformance/settlement_verify.py, run as python3 -I. It shares no code with wai-rs. It reuses BLAKE3 from claim-conformance/_blake3.py by import (the pattern exists: its subtree_cv and parent_cv are the head proof's tree), strict Ed25519 from _ed25519.py, and live_rooms_verify.py / live_metering_verify.py for rooms, grants, proofs and WMH1. It requires every mutated copy of the corpus to fail, and drops each of its own 29 checks in turn, requiring the corpus to catch each one.
  • Wiring.
    • a CI step in wai-conformance.yml, with the extension added to paths:;
    • the REGISTRY.md record list, SPEC.md §5 (record list and paragraph) and the CHANGELOG.md entry;
    • codecs/registry.rs (CAP_DELIVERY_SETTLEMENT, and the wire identifiers WDA1 §3.1, WBR1 §5.2, WSS1 §7.1), with the registry export regenerated;
    • the int_kernels_vectors.rs exclusion reason for live-conformance extended to settlement;
    • the corpus README with a **Provenance.** line, and live-conformance/README.md.

Design decisions and why

  • Time is Unix microseconds, not a room clock. A statement settles a party across rooms and outside rooms. WMH1 spans are placed with their room's t0, read from the descriptor the verifier is given.
  • The verifier finds a record by the digest of the bytes it is given, never by a stated key. So a truncated record can never be found under its name, and bad bytes cannot pose as a record.
  • Item lists are signed by digest, and their content hashes also by the §2.2 root. The root keeps one-object inclusion proofs and publisher-root equality. The digest binds the byte ranges.
  • One proof pays for one record. A statement verifier cannot check the serving hop's challenge or context (live-rooms §10.5.4 steps 6–7), so it checks the possession steps, the grant window and the seek power, and refuses reuse across records.
  • Unacknowledged bytes have their own figures and never appear in a line. A CDNI log is mapped onto declarations for the same reason.

Checks (all cargo work ran on the build host via rb)

check command result
corpus regenerates and verifies cargo run --no-default-features --features settlement --bin wai_settlement_vectors -- gen/verify ../live-conformance/settlement PASS, PASS
module tests cargo test --no-default-features --features settlement --lib settlement:: 5 passed
corpus test cargo test --no-default-features --features settlement --test settlement 4 passed
clippy cargo clippy --no-default-features --features settlement --all-targets no notes in settlement files (pre-existing notes elsewhere, e.g. unpinned_read dead code, which also appears with --features live_metering alone)
second implementation python3 -I live-conformance/settlement_verify.py live-conformance/settlement exit 0: 48 statements, 24 ranges, 18 mutated copies fail, 29 weakened verifiers fail
neighbouring verifiers live_events, live_rooms, live_metering, energy_steering, ai_usage, live_moderation _verify.py, and http_verify.py all exit 0
registry cargo run --no-default-features --bin wai -- registry export then --check; cargo test --lib codecs::registry up to date; 14 passed
provenance cargo test --no-default-features --test corpus_provenance --test cli_registry; --test int_kernels_vectors every_decoded_output_states_a_sha256 (CI feature set) pass
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

Not run: check-public-names.sh, which needs the private WAI_NAME_DENYLIST. CI runs it.

Falsifications (committed first, then broken on the host and restored)

broken rule result
the self_acknowledged check cargo test --test settlement exit 101
exact consumption of chaining values exit 101
the bytes_not_acknowledged check exit 101
a row dropped from §11 the_extension_lists_the_reasons fails, and settlement_verify.py exits 1 ("18 reasons")

After restoring, exit 0. The Python verifier's own drop-each-check loop first found two checks the corpus did not exercise: item-list overlap, and a proof whose content_hash field names another object. Two vectors were added for them (items_share_a_byte, names_another_content_hash).

Not done

  • Real money, payment rails and any outward contact (out of scope).
  • Line kind 2 is reserved and refused, for CO6.
  • SVTA2050's added fields are not mapped, because its body is not public.
  • A conservation check, matching what a relay bills against what it acknowledged upstream across one period, is described in §3.7 but is not a refusal.

🤖 Generated with Claude Code

## `wai.delivery.settlement` (E6): a hop is paid only for bytes the next hop signed for Delivery settled on what the party that received it signed, not on the sender's own logs. ### What is in it - **`wai/extensions/settlement.md`**, which registers the record `wai.delivery.settlement`: - **Acknowledgement `WDA1` (§3).** The downstream party (a next hop or a sink) signs what it received in a window. Each entry covers one object class (`live`, `fetch`, `fill`, `ancillary`) under one grant and one proof. It states the objects as the tree root of jwp-receipts §2.2 (unlabelled leaves, so a whole group in order gives the publisher's root), and gives a count, a byte count and the SHA-256 of the item list. The item list travels beside the record: content hash, start, end. Records of one (mode, upstream, downstream) form a **chain**: windows do not overlap, and `prev` names the record before. A relay acknowledges upstream and is acknowledged downstream over the same content hashes. A hop's billable bytes are exactly the bytes its downstream parties signed for. An acknowledgement whose downstream is its own upstream is refused (`self_acknowledged`). - **Unacknowledged delivery (§4).** A hop whose downstream will not or cannot sign uses a **declaration**: the same layout with mode 2, signed by the hop. It is counted in its own class, `unacknowledged`: never zero, never billed, and never covering a byte the same party acknowledged in an overlapping window (`declared_and_acknowledged`). Bearers: "a unidirectional bearer settles under unidirectional-delivery §4", with no duplication of T2's work. - **Range proof `WBR1` (§5).** It carries the covered chunks of a range plus the chaining value of every subtree of BLAKE3's chunk tree that lies outside them, and it verifies to the content hash. It generalises http-delivery §6's head proof, whose ranges start at 0. A proof establishes the object's length only when it reaches the last chunk (a tail proof), and the verifier reports whether it did. §5.6 defines audits: an auditor names an acknowledged item and asks for a proof of a range within it. - **Paid retrieval (§6).** A fetch below the live edge, a recording fetch, or a fill past a cache is billed only to a room grant whose `WRP1` proof the request carried. Each entry is checked against live-rooms §10.5.4 steps 2–5, the grant's window and the seek power, and one proof pays for one record (`pop_replayed`). A retrieval made without a grant is free, and a statement that bills it is refused (`paid_without_grant`). - **Statement `WSS1` (§7).** One per party per period. It holds: - lines by object class and payer (the downstream key for delivery classes, the grant for retrieval classes); - the acknowledged bytes by class, and the declared bytes; - joules by acquisition class from the party's `WMH1` records, never summed across classes (`classes_summed`); - the amount under a declared tariff, in millionths of a minor unit per 10^9 bytes, rounded down once per line. The verifier recomputes every figure. A line that bills bytes no acknowledgement covers is `bytes_not_acknowledged`; any other difference is `statement_mismatch`. **Line kind 2 is reserved** for a payee that is not a hop (the CO6 slot), with `payee` and `payer` already in the line layout. This revision refuses it. - **Logs (§9).** Each acknowledged item maps onto an RFC 7937 `cdni_http_request_v1` record (`cdni_http_request_v2` under RFC 9246), with the acknowledgement's digest in a `remark` directive. §9.2 states what a log cannot carry: a counter-signature. Each log record is the writer's own word, and `SHA256-hash` is the writer's own integrity hash. A log therefore maps onto declarations, never onto acknowledgements. §9.3 covers SVTA2050, SVTA2007 and SVTA2006, cited by identifier only. Only their published summaries could be read, and the text says so. - **Viewers as relays over ciphertext (§10, built).** An acknowledgement binds the content hash of the sealed bytes, so a forwarder that cannot open what it forwards earns acknowledged bytes and can prove ranges of them. The corpus has one such statement and one sealed range proof. - §11 is the reasons table (19 codes). §13 states what an acknowledgement reveals and to whom, with no gate of its own (per the owner rule). A regime that asks the operator for a lawful basis is pointed at the `lawful-basis` declaration (jwp-receipts §2.4.6). - **`wai-rs` module `settlement`** (feature `settlement = ["live_metering", "jwp_hash"]`, no new dependency). It has the records, the range proof via blake3's `hazmat` API (as the head proof uses it), grant and proof checks via `live_room`, `WMH1` via `live_metering`, `verify`, and unit tests. It also has the generator `wai_settlement_vectors` and `tests/settlement.rs`. - **Corpus `wai/live-conformance/settlement/`**, written from fixed seeds: - **48 statements.** Five are accepted: - a relay paid by an edge and a viewer, with two declarations and two energy classes; - an edge with a granted DVR fetch, a partial object and a free fetch; - an origin's fills billed to the viewer's grant, beside an ungranted free fill; - a viewer forwarding sealed objects; - an unmetered hop. The rest are refused, each a control of one defect. They include every negative the brief named: billing bytes no acknowledgement covers, an acknowledgement signed by the hop itself, a paid fetch without a grant, joules summed across classes, a statement that does not recompute, and an acknowledgement replayed from another period. - **24 range proofs.** Accepted cases include an interior range, the head, the tail (length established), one chunk, whole objects, a sealed object, an answered audit, and an interior range under a wrong length that leaves the tree's shape unchanged (accepted, length **not** established). Refused cases include a range past the end, an empty range, bytes of another object, a range past the true end under a longer length, a chaining value dropped, added or changed, another content hash, an audit outside its item, and records that do not read. - **Independent verifier `live-conformance/settlement_verify.py`**, run as `python3 -I`. It shares no code with wai-rs. It reuses BLAKE3 from `claim-conformance/_blake3.py` by import (the pattern exists: its `subtree_cv` and `parent_cv` are the head proof's tree), strict Ed25519 from `_ed25519.py`, and `live_rooms_verify.py` / `live_metering_verify.py` for rooms, grants, proofs and `WMH1`. It requires every mutated copy of the corpus to fail, and drops each of its own 29 checks in turn, requiring the corpus to catch each one. - **Wiring.** - a CI step in `wai-conformance.yml`, with the extension added to `paths:`; - the `REGISTRY.md` record list, `SPEC.md` §5 (record list and paragraph) and the `CHANGELOG.md` entry; - `codecs/registry.rs` (`CAP_DELIVERY_SETTLEMENT`, and the wire identifiers `WDA1` §3.1, `WBR1` §5.2, `WSS1` §7.1), with the registry export regenerated; - the `int_kernels_vectors.rs` exclusion reason for `live-conformance` extended to settlement; - the corpus README with a `**Provenance.**` line, and `live-conformance/README.md`. ### Design decisions and why - **Time is Unix microseconds, not a room clock.** A statement settles a party across rooms and outside rooms. `WMH1` spans are placed with their room's `t0`, read from the descriptor the verifier is given. - **The verifier finds a record by the digest of the bytes it is given**, never by a stated key. So a truncated record can never be found under its name, and bad bytes cannot pose as a record. - **Item lists are signed by digest, and their content hashes also by the §2.2 root.** The root keeps one-object inclusion proofs and publisher-root equality. The digest binds the byte ranges. - **One proof pays for one record.** A statement verifier cannot check the serving hop's challenge or context (live-rooms §10.5.4 steps 6–7), so it checks the possession steps, the grant window and the seek power, and refuses reuse across records. - **Unacknowledged bytes have their own figures and never appear in a line.** A CDNI log is mapped onto declarations for the same reason. ### Checks (all cargo work ran on the build host via `rb`) | check | command | result | |---|---|---| | corpus regenerates and verifies | `cargo run --no-default-features --features settlement --bin wai_settlement_vectors -- gen/verify ../live-conformance/settlement` | PASS, PASS | | module tests | `cargo test --no-default-features --features settlement --lib settlement::` | 5 passed | | corpus test | `cargo test --no-default-features --features settlement --test settlement` | 4 passed | | clippy | `cargo clippy --no-default-features --features settlement --all-targets` | no notes in settlement files (pre-existing notes elsewhere, e.g. `unpinned_read` dead code, which also appears with `--features live_metering` alone) | | second implementation | `python3 -I live-conformance/settlement_verify.py live-conformance/settlement` | exit 0: 48 statements, 24 ranges, 18 mutated copies fail, 29 weakened verifiers fail | | neighbouring verifiers | `live_events`, `live_rooms`, `live_metering`, `energy_steering`, `ai_usage`, `live_moderation` `_verify.py`, and `http_verify.py` | all exit 0 | | registry | `cargo run --no-default-features --bin wai -- registry export` then `--check`; `cargo test --lib codecs::registry` | up to date; 14 passed | | provenance | `cargo test --no-default-features --test corpus_provenance --test cli_registry`; `--test int_kernels_vectors every_decoded_output_states_a_sha256` (CI feature set) | pass | | 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 | Not run: `check-public-names.sh`, which needs the private `WAI_NAME_DENYLIST`. CI runs it. ### Falsifications (committed first, then broken on the host and restored) | broken rule | result | |---|---| | the `self_acknowledged` check | `cargo test --test settlement` exit 101 | | exact consumption of chaining values | exit 101 | | the `bytes_not_acknowledged` check | exit 101 | | a row dropped from §11 | `the_extension_lists_the_reasons` fails, and `settlement_verify.py` exits 1 ("18 reasons") | After restoring, exit 0. The Python verifier's own drop-each-check loop first found two checks the corpus did not exercise: item-list overlap, and a proof whose `content_hash` field names another object. Two vectors were added for them (`items_share_a_byte`, `names_another_content_hash`). ### Not done - Real money, payment rails and any outward contact (out of scope). - Line kind 2 is reserved and refused, for CO6. - SVTA2050's added fields are not mapped, because its body is not public. - A conservation check, matching what a relay bills against what it acknowledged upstream across one period, is described in §3.7 but is not a refusal. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The corpus holds 48 statements and 24 range proofs written from fixed
seeds; wai-rs and settlement_verify.py agree on every outcome, every
mutated copy fails, and every check the Python verifier drops is caught.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: settlement §13 — what an acknowledgement reveals and to whom; a regime's lawful basis is a lawful-basis declaration
All checks were successful
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 4m21s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m15s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 34s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 1m46s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m6s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m59s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m57s
wai-pack / wai-pack · linux (pull_request) Successful in 1m23s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m16s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 6m40s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 15s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m41s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 12s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 23s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m34s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m12s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m20s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 15m42s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 47s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 3m56s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m13s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 26m42s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m47s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m37s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 20s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 50s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 3m29s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 7m28s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m53s
wai-pack / wai-pack · macos (pull_request) Successful in 1m13s
63cfd68220
The acknowledgement and its settlement are the delivery service's own
mechanics, with no gate of their own: the text states what each party
learns, and points a regime that asks the operator for a lawful basis
to jwp-receipts §2.4.6.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into wai/settlement (contribution records)
Some checks failed
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
wai cross-architecture byte-equality / does this change touch it (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / macos-arm64 (reference) (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, 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
869d5d4694
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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!404
No description provided.