wai.live.moderation: review policies, signed decisions, explained redactions, and DSA statements of reasons #337

Merged
dcharlot merged 8 commits from wai/moderation into main 2026-10-19 11:05:15 -04:00
Owner

Slice L12 of the live and interactive work: moderation for rooms. One extension, its reference module, a corpus written from fixed seeds, and an independent verifier.

What this adds

  • wai/extensions/live-moderation.md registers the record wai.live.moderation.
    • Review policy, WMP1. Signed by the room authority, and chained to the policy it replaces with the room-clock instant it takes effect. It states:

      • which event kinds and media are held before delivery (pre) or reviewed after it (post);
      • the reviewers, and the trusted flaggers it recognises;
      • each kind's deadline and its fallback: allow, deny or hold;
      • the reason-code vocabulary, each code with its ground (illegal, or incompatible with the terms), its provision or clause, an optional URL and its database category;
      • the territory, and the redress text.

      Every policy must keep the room descriptor's review field exactly (live-rooms §3.6). §6.3 says what a relay holds, for how long, and what happens at the deadline; §6.4 says what a sink shows.

    • Decisions. A decision event of live-events is used unchanged. It is followed in its author's chain by a meta event carrying the statement, WMS1, which states:

      • the target type: an event, or a media object such as a recorded chunk named by its leaf;
      • the target's prev;
      • the decision it supersedes;
      • its basis: own initiative, a notice, a complaint, or the fallback;
      • its use of automated means, in detection and in the decision (Article 17(3)(c));
      • its ground, explanation and facts.

      Decisions on one target form a line by digest. An appeal's outcome is a decision that supersedes the decision complained of. The room's clock signs each fallback the policy applies.

    • Notices and complaints, WMN1. A notice (Article 16) carries the target digest, ground, cited provision, statement, contact and good-faith flag. A complaint (Article 20) names a decision. Anyone may sign either with their own key; neither needs a grant.

    • Statement-of-reasons export. A deterministic mapping from a restricting decision, plus its room's policy and notices, onto one record of the DSA Transparency Database's single-statement format. §9.2 gives the exact JSON; §9.3 is the member table, with each member's WAI source, closed or free form, and length limit. §9.4 maps each Article 17 element to WAI's field, §9.5 lists the categories, §9.6 the content types, and §9.7 covers personal data.

    • Refusal reasons, twenty in all, from policy_malformed to redaction_not_applied (§10).

  • wai/wai-rs/src/live_moderation.rs sits behind the feature live_moderation = ["live_events", "live_room", "live_record"].
    • It holds policy, statement and notice build/read/verify, the review state machine as per-item timelines, gap explanation, clips under moderation and the export writer, with unit tests.
    • It is cbindgen:ignore and adds no dependency.
    • live_record::verify_clip_exempting is new. verify_clip calls it exempting nothing, so live-recording's corpus regenerates byte for byte.
  • wai/live-conformance/moderation/ is written by wai_live_moderation_vectors gen from fixed seeds. It holds vectors.json, ten exports as NAME.dK.sor.json, and a README with the provenance line.
  • wai/live-conformance/live_moderation_verify.py is standard library only and shares no code with wai-rs.
    • It verifies rooms through live_rooms_verify.py and clips through live_record_verify.py, which gains an exempt parameter that changes nothing by default.
    • It writes every export from §9 and compares the bytes.
    • It reads §9.5, §9.6 and §10 from the extension text.
    • 19 mutated copies of the corpus must each fail.
  • CI and registry.
    • A new step in the independent-verifiers job, and the spec added to the workflow's path list.
    • The test is declared with required-features.
    • SPEC §5 gains the record and a paragraph; the registry gains the record and the magics WMP1, WMS1 and WMN1, followed by a regenerated wai registry export.
    • A CHANGELOG entry, cross-references from live-events, live-rooms and live-recording, and the int_kernels_vectors exclusion reason for live-conformance now covers moderation.

Format version mapped to

The export targets the DSA Transparency Database's submission schema in force from 1 July 2025, which its documentation's changelog calls "API v2". It is still posted to POST /api/v1/statement.

  • Pinned by the database's published source: documentation at revision fc3b1fd5 (2026-09-23), and the validation rules (StatementStoreRequest) at revision bf0afeb8 (2026-06-09). The documentation page carries no version or date of its own.
  • Legal text: Regulation (EU) 2022/2065, OJ L 277, 27.10.2022, read from the Publications Office's only consolidated version (02022R2065-20221027). No amending act is recorded, and no English corrigendum exists.
  • Categories: the sixteen are the database's, which follow Implementing Regulation (EU) 2024/2835, Annex II.
  • Closed lists and limits: the spec states which members are closed lists and which are free text, with the limits the validation rules enforce (facts 5000, explanations 2000, grounds 500, URL 500, puid pattern).

Redaction semantics: withheld, never replaced; absence proven

  • Events. A relay withholds a held or restricted event from sessions other than the reviewers' and goes on delivering the chain. The subscriber sees a gap, and §7.3 explains it.
    • The walk starts at the next event's prev and goes back through the standing restricting decisions on each withheld digest.
    • Each statement carries its target's prev (target_prev), so a run of adjacent withheld events stays linked.
    • The walk must land exactly on the event before the gap.
    • A gap the decisions cannot explain stays a delivery_gap.
  • Clips. The range proof is over descriptors, and a restriction leaves the descriptors in place, so the proof verifies over every chunk in every case. Step (k) passes over restricted chunks; trims at a withheld boundary chunk are not applied.
    • Bytes given for a restricted chunk: redaction_not_applied.
    • A chunk restored by a later allow and left out: clip_chunk_missing.
  • Packages. Deny keeps the item, so an appeal can restore it. Redact leaves the chunk file or event record out of the recording package, and the moderation layer explains the resulting chunk_missing / delivery_gap. This package rule is specified only (§8.2), and the corpus has no package vector.
  • Why withheld and not replaced: chains, take trees and clip proofs all bind content by digest, so a stand-in would break them. Withholding keeps every proof whole and makes the absence attributable to a signed decision.

Design choices a reviewer should check

  1. The statement rides in a meta event at the decision's seq + 1, as timed-text's WTX1 does. live-events §4.11 fixes the decision payload (verdict, target, reason), and live-events is unchanged.
  2. No new code for "a decision by a principal without the moderate power". live-rooms §4.3 step 5 already makes the decision kind require the power, so the room verifier refuses it as kind_not_permitted. The corpus has that vector (not_moderator). The moderation-level check that remains is not_reviewer, against the policy's reviewer list.
  3. "A superseding chain with a gap" is supersede_gap. It covers two cases: a decision that supersedes nothing while the target already has one, and a decision that names a decision someone already superseded (a fork). A reference to an unknown decision is supersede_unknown; one to another target's decision is supersede_mismatch.
  4. "A fallback that is not one of the policy's" is checked on the clock's signed fallback decision (fallback_not_in_policy, and fallback_early). A policy whose fallback value is outside allow/deny/hold is refused policy_malformed.
  5. Fallback decisions record the fallback rather than forestall it. The timeline shows fallback_deny and then denied at the same instant. A moderator's decision at or before the deadline does forestall it.
  6. Restrictions have no end date. A restriction lasts until a later decision of its line supersedes it, so every end_date_* member is left out (the database reads that as indefinite). A timed restriction is a deny followed by an allow.
  7. Mapping choices in the export:
    • deny → DECISION_VISIBILITY_CONTENT_DISABLED; redact → ..._CONTENT_REMOVED; an allow has no export.
    • A notice of ground 2 (terms) → SOURCE_TYPE_OTHER_NOTIFICATION, following the database's guidance. A flagger listed in the policy → SOURCE_TRUSTED_FLAGGER.
    • A complaint-based decision keeps the source of the restriction it answers.
    • source_identity is never written. Article 17(3)(f) (redress) has no database member; the policy carries it as redress.
  8. Reviewing objects needs caller-supplied context. Each object is given with its digest, media kind and room-clock time (§7.1), as live-events takes policies from its caller. For a take's chunks, the digest is the leaf and the time is that of the commitment that adds the chunk.
  9. Moderators and room keys are not reviewed: their own events are not items under review (§6.1).
  10. The corpus reuses live-recording's lesson session byte for byte (two pub(crate) items in its corpus module), and adds the director's decisions to the director's chain.

Verification

Every cargo run went through ~/kani-logs/remote/rb <worktree> -- '...' on the build host under memguard, with output logged on the host and grepped:

command (in wai/wai-rs) exit
cargo test --no-default-features --features live_record --no-run (warm-up) 0
cargo build --no-default-features --features live_moderation --bin wai_live_moderation_vectors 101 first (a json! index needed parentheses), then 0
rb --pull: cargo run ... --bin wai_live_moderation_vectors -- gen ../live-conformance/moderation 0; every vector reached its stated intent and every reason of §10 appears
cargo test --no-default-features --features live_moderation --lib live_moderation:: 0 (7 passed)
cargo test --no-default-features --features live_moderation --test live_moderation 0 (3 passed: regenerates byte for byte, every case's outcome, §10 equals Reason::ALL)
cargo test --no-default-features --features live_record --lib -- live_record:: output_tree:: 0 (15 passed)
cargo test --no-default-features --features live_record --test live_record 0 (5 passed; the recordings corpus regenerates byte for byte after the exemption hook)

The next batch was first refused by rb with exit 75: the build host's shared work volume was below its 40 GiB floor, at 30 GiB free. My own target dir there was 3.6 GiB, so I deleted nothing and did not lower the floor. Once the volume was freed, the batch ran:

command (in wai/wai-rs) exit
cargo run --no-default-features --bin wai -- registry export --check 0: the committed registry export (registry/capabilities.json, vocab/v2.ttl, the REGISTRY.md table) is exactly what the generator writes
touch cbindgen.toml + cargo build --no-default-features --features live_moderation --lib + git diff --exit-code include/wai.h 0: include/wai.h unchanged
cargo test --no-default-features --lib codecs::registry:: 0 (14 passed: wire identifiers in their sections, the records table)
cargo test --no-default-features --test cli_registry --test corpus_provenance 0 (6 + 2 passed)
cargo test --no-default-features --features neural_int,video_int,audio_int,world_int,splat_int --test int_kernels_vectors 0 (8 passed)
cargo clippy --no-default-features --features live_moderation --all-targets 0; four findings in the new corpus module, fixed in 9614a2c1 and re-run with none left in any file this PR touches. The crate's other warnings are in modules this PR does not change
after the fix: live_moderation lib tests, --test live_moderation, and wai_live_moderation_vectors verify ../live-conformance/moderation 0, 0, 0

Python verifiers (stdlib, run locally):

  • python3 -I live-conformance/live_moderation_verify.py live-conformance/moderation: exit 0. All 30 rooms, 5 clips and 10 exports agree with wai-rs; every reason of §10 appears; 19 of 19 mutated copies fail.
  • python3 -I live-conformance/live_record_verify.py live-conformance/recordings: exit 0, unchanged by the exempt parameter.

Repo checks, run locally, all exit 0: check-tests-in-ci.py, check-spec-refs.py, check-wai-section-refs.py, check-no-vanity-metrics.sh, check-comparative-prose.sh, check-orphan-sources.py, check-workflow-concurrency.sh. check-public-names.sh needs the denylist secret and runs on push to main; I reviewed the added text by hand and it names no company or product. Laws and standards are cited by identifier only.

🤖 Generated with Claude Code

Slice L12 of the live and interactive work: moderation for rooms. One extension, its reference module, a corpus written from fixed seeds, and an independent verifier. ## What this adds - **`wai/extensions/live-moderation.md`** registers the record `wai.live.moderation`. - **Review policy, `WMP1`.** Signed by the room authority, and chained to the policy it replaces with the room-clock instant it takes effect. It states: - which event kinds and media are held before delivery (pre) or reviewed after it (post); - the reviewers, and the trusted flaggers it recognises; - each kind's deadline and its fallback: allow, deny or hold; - the reason-code vocabulary, each code with its ground (illegal, or incompatible with the terms), its provision or clause, an optional URL and its database category; - the territory, and the redress text. Every policy must keep the room descriptor's `review` field exactly (live-rooms §3.6). §6.3 says what a relay holds, for how long, and what happens at the deadline; §6.4 says what a sink shows. - **Decisions.** A `decision` event of live-events is used unchanged. It is followed in its author's chain by a `meta` event carrying the **statement**, `WMS1`, which states: - the target type: an event, or a media object such as a recorded chunk named by its leaf; - the target's `prev`; - the decision it supersedes; - its basis: own initiative, a notice, a complaint, or the fallback; - its use of automated means, in detection and in the decision (Article 17(3)(c)); - its ground, explanation and facts. Decisions on one target form a line by digest. An appeal's outcome is a decision that supersedes the decision complained of. The room's clock signs each fallback the policy applies. - **Notices and complaints, `WMN1`.** A notice (Article 16) carries the target digest, ground, cited provision, statement, contact and good-faith flag. A complaint (Article 20) names a decision. Anyone may sign either with their own key; neither needs a grant. - **Statement-of-reasons export.** A deterministic mapping from a restricting decision, plus its room's policy and notices, onto one record of the DSA Transparency Database's single-statement format. §9.2 gives the exact JSON; §9.3 is the member table, with each member's WAI source, closed or free form, and length limit. §9.4 maps each Article 17 element to WAI's field, §9.5 lists the categories, §9.6 the content types, and §9.7 covers personal data. - **Refusal reasons**, twenty in all, from `policy_malformed` to `redaction_not_applied` (§10). - **`wai/wai-rs/src/live_moderation.rs`** sits behind the feature `live_moderation = ["live_events", "live_room", "live_record"]`. - It holds policy, statement and notice build/read/verify, the review state machine as per-item timelines, gap explanation, clips under moderation and the export writer, with unit tests. - It is `cbindgen:ignore` and adds no dependency. - `live_record::verify_clip_exempting` is new. `verify_clip` calls it exempting nothing, so live-recording's corpus regenerates byte for byte. - **`wai/live-conformance/moderation/`** is written by `wai_live_moderation_vectors gen` from fixed seeds. It holds `vectors.json`, ten exports as `NAME.dK.sor.json`, and a README with the provenance line. - **`wai/live-conformance/live_moderation_verify.py`** is standard library only and shares no code with wai-rs. - It verifies rooms through `live_rooms_verify.py` and clips through `live_record_verify.py`, which gains an `exempt` parameter that changes nothing by default. - It writes every export from §9 and compares the bytes. - It reads §9.5, §9.6 and §10 from the extension text. - 19 mutated copies of the corpus must each fail. - **CI and registry.** - A new step in the independent-verifiers job, and the spec added to the workflow's path list. - The test is declared with `required-features`. - SPEC §5 gains the record and a paragraph; the registry gains the record and the magics `WMP1`, `WMS1` and `WMN1`, followed by a regenerated `wai registry export`. - A CHANGELOG entry, cross-references from live-events, live-rooms and live-recording, and the `int_kernels_vectors` exclusion reason for `live-conformance` now covers moderation. ## Format version mapped to The export targets the DSA Transparency Database's submission schema in force from **1 July 2025**, which its documentation's changelog calls "API v2". It is still posted to `POST /api/v1/statement`. - **Pinned by the database's published source:** documentation at revision `fc3b1fd5` (2026-09-23), and the validation rules (`StatementStoreRequest`) at revision `bf0afeb8` (2026-06-09). The documentation page carries no version or date of its own. - **Legal text:** Regulation (EU) 2022/2065, OJ L 277, 27.10.2022, read from the Publications Office's only consolidated version (02022R2065-20221027). No amending act is recorded, and no English corrigendum exists. - **Categories:** the sixteen are the database's, which follow Implementing Regulation (EU) 2024/2835, Annex II. - **Closed lists and limits:** the spec states which members are closed lists and which are free text, with the limits the validation rules enforce (facts 5000, explanations 2000, grounds 500, URL 500, `puid` pattern). ## Redaction semantics: withheld, never replaced; absence proven - **Events.** A relay withholds a held or restricted event from sessions other than the reviewers' and goes on delivering the chain. The subscriber sees a gap, and §7.3 explains it. - The walk starts at the next event's `prev` and goes back through the standing restricting decisions on each withheld digest. - Each statement carries its target's `prev` (`target_prev`), so a run of adjacent withheld events stays linked. - The walk must land exactly on the event before the gap. - A gap the decisions cannot explain stays a `delivery_gap`. - **Clips.** The range proof is over descriptors, and a restriction leaves the descriptors in place, so the proof verifies over every chunk in every case. Step (k) passes over restricted chunks; trims at a withheld boundary chunk are not applied. - Bytes given for a restricted chunk: `redaction_not_applied`. - A chunk restored by a later allow and left out: `clip_chunk_missing`. - **Packages.** Deny keeps the item, so an appeal can restore it. Redact leaves the chunk file or event record out of the recording package, and the moderation layer explains the resulting `chunk_missing` / `delivery_gap`. This package rule is **specified only** (§8.2), and the corpus has no package vector. - **Why withheld and not replaced:** chains, take trees and clip proofs all bind content by digest, so a stand-in would break them. Withholding keeps every proof whole and makes the absence attributable to a signed decision. ## Design choices a reviewer should check 1. **The statement rides in a `meta` event** at the decision's `seq` + 1, as timed-text's `WTX1` does. live-events §4.11 fixes the decision payload (verdict, target, reason), and live-events is unchanged. 2. **No new code for "a decision by a principal without the moderate power".** live-rooms §4.3 step 5 already makes the `decision` kind require the power, so the room verifier refuses it as `kind_not_permitted`. The corpus has that vector (`not_moderator`). The moderation-level check that remains is `not_reviewer`, against the policy's reviewer list. 3. **"A superseding chain with a gap" is `supersede_gap`.** It covers two cases: a decision that supersedes nothing while the target already has one, and a decision that names a decision someone already superseded (a fork). A reference to an unknown decision is `supersede_unknown`; one to another target's decision is `supersede_mismatch`. 4. **"A fallback that is not one of the policy's" is checked on the clock's signed fallback decision** (`fallback_not_in_policy`, and `fallback_early`). A policy whose fallback value is outside allow/deny/hold is refused `policy_malformed`. 5. **Fallback decisions record the fallback rather than forestall it.** The timeline shows `fallback_deny` and then `denied` at the same instant. A moderator's decision at or before the deadline does forestall it. 6. **Restrictions have no end date.** A restriction lasts until a later decision of its line supersedes it, so every `end_date_*` member is left out (the database reads that as indefinite). A timed restriction is a deny followed by an allow. 7. **Mapping choices in the export:** - deny → `DECISION_VISIBILITY_CONTENT_DISABLED`; redact → `..._CONTENT_REMOVED`; an allow has no export. - A notice of ground 2 (terms) → `SOURCE_TYPE_OTHER_NOTIFICATION`, following the database's guidance. A flagger listed in the policy → `SOURCE_TRUSTED_FLAGGER`. - A complaint-based decision keeps the source of the restriction it answers. - `source_identity` is never written. Article 17(3)(f) (redress) has no database member; the policy carries it as `redress`. 8. **Reviewing objects needs caller-supplied context.** Each object is given with its digest, media kind and room-clock time (§7.1), as live-events takes policies from its caller. For a take's chunks, the digest is the leaf and the time is that of the commitment that adds the chunk. 9. **Moderators and room keys are not reviewed:** their own events are not items under review (§6.1). 10. **The corpus reuses live-recording's lesson session byte for byte** (two `pub(crate)` items in its corpus module), and adds the director's decisions to the director's chain. ## Verification Every cargo run went through `~/kani-logs/remote/rb <worktree> -- '...'` on the build host under memguard, with output logged on the host and grepped: | command (in `wai/wai-rs`) | exit | |---|---| | `cargo test --no-default-features --features live_record --no-run` (warm-up) | 0 | | `cargo build --no-default-features --features live_moderation --bin wai_live_moderation_vectors` | 101 first (a `json!` index needed parentheses), then 0 | | `rb --pull`: `cargo run ... --bin wai_live_moderation_vectors -- gen ../live-conformance/moderation` | 0; every vector reached its stated intent and every reason of §10 appears | | `cargo test --no-default-features --features live_moderation --lib live_moderation::` | 0 (7 passed) | | `cargo test --no-default-features --features live_moderation --test live_moderation` | 0 (3 passed: regenerates byte for byte, every case's outcome, §10 equals `Reason::ALL`) | | `cargo test --no-default-features --features live_record --lib -- live_record:: output_tree::` | 0 (15 passed) | | `cargo test --no-default-features --features live_record --test live_record` | 0 (5 passed; the recordings corpus regenerates byte for byte after the exemption hook) | The next batch was first refused by `rb` with exit 75: the build host's shared work volume was below its 40 GiB floor, at 30 GiB free. My own target dir there was 3.6 GiB, so I deleted nothing and did not lower the floor. Once the volume was freed, the batch ran: | command (in `wai/wai-rs`) | exit | |---|---| | `cargo run --no-default-features --bin wai -- registry export --check` | 0: the committed registry export (`registry/capabilities.json`, `vocab/v2.ttl`, the REGISTRY.md table) is exactly what the generator writes | | `touch cbindgen.toml` + `cargo build --no-default-features --features live_moderation --lib` + `git diff --exit-code include/wai.h` | 0: `include/wai.h` unchanged | | `cargo test --no-default-features --lib codecs::registry::` | 0 (14 passed: wire identifiers in their sections, the records table) | | `cargo test --no-default-features --test cli_registry --test corpus_provenance` | 0 (6 + 2 passed) | | `cargo test --no-default-features --features neural_int,video_int,audio_int,world_int,splat_int --test int_kernels_vectors` | 0 (8 passed) | | `cargo clippy --no-default-features --features live_moderation --all-targets` | 0; four findings in the new corpus module, fixed in `9614a2c1` and re-run with none left in any file this PR touches. The crate's other warnings are in modules this PR does not change | | after the fix: `live_moderation` lib tests, `--test live_moderation`, and `wai_live_moderation_vectors verify ../live-conformance/moderation` | 0, 0, 0 | Python verifiers (stdlib, run locally): - `python3 -I live-conformance/live_moderation_verify.py live-conformance/moderation`: exit 0. All 30 rooms, 5 clips and 10 exports agree with wai-rs; every reason of §10 appears; 19 of 19 mutated copies fail. - `python3 -I live-conformance/live_record_verify.py live-conformance/recordings`: exit 0, unchanged by the `exempt` parameter. Repo checks, run locally, all exit 0: `check-tests-in-ci.py`, `check-spec-refs.py`, `check-wai-section-refs.py`, `check-no-vanity-metrics.sh`, `check-comparative-prose.sh`, `check-orphan-sources.py`, `check-workflow-concurrency.sh`. `check-public-names.sh` needs the denylist secret and runs on push to main; I reviewed the added text by hand and it names no company or product. Laws and standards are cited by identifier only. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
verify_clip is unchanged in behaviour (it exempts nothing); verify_clip_exempting passes
over the chunks a caller names in step (k), which live-moderation §8.3 uses for chunks a
standing decision restricts. The recordings corpus regenerates byte for byte.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Verifies each room with live_rooms_verify.py and each clip with live_record_verify.py
(which gains an exempt parameter, unchanged by default), writes every export from §9,
reads §9.5, §9.6 and §10 from the extension, and requires 19 mutated copies to fail.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
registry export: wai.live.moderation and the magics WMP1, WMS1, WMN1
Some checks failed
WAI energy receipts / does this change touch it (pull_request) Successful in 7s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-web wasm32 / does this change touch it (pull_request) Successful in 6s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 19s
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 25s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m36s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m8s
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
WAI conformance / cargo-class corpora · linux (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 / cross-arch byte-equality · linux (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 energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
wai-pack / wai-pack · linux (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-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-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
wai-pack / wai-pack · linux-arm64 (pull_request) Has been cancelled
7e7c38d3f6
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
live_moderation corpus: clippy (is_multiple_of, contains, two type aliases)
All checks were successful
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 13s
wai-web wasm32 / does this change touch it (pull_request) Successful in 7s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 19s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m11s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 17s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 27s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m42s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 5s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 8s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m11s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 27s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m35s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m18s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m2s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 23s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 8m53s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 19m44s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m15s
wai-pack / wai-pack · linux (pull_request) Successful in 1m23s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 23m30s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m29s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m48s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m13s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 19s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 46s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m9s
wai-pack / wai-pack · macos (pull_request) Successful in 1m4s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m48s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 3m24s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m37s
9614a2c1eb
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!337
No description provided.