wai.edge.derivation: the deriving edge — derive, publish under its own receipts, chain to the source, carry provenance #379

Merged
dcharlot merged 11 commits from wai/deriving-edge into main 2026-10-21 10:18:45 -04:00
Owner

What this is

D1, the deriving edge. The roadmap item reads: "An edge that evaluates derived tracks and rebuilds or re-packs content under its own receipt, chained to the source." Until now a conforming relay could only forward envelopes and receipts unaltered.

This PR adds that edge as the record wai.edge.derivation (wai/extensions/deriving-edge.md):

  • Derivations. An edge may do three things:

    • evaluate a wai.derive.* operation (identity, crop, ROI selection, rotation, mirror, grid, overlay, scaling) over 8-bit RGB samples;
    • rebuild an object at a lower rung for a sink that lacks its capability: a frame of a wai.video.int_motion clip, written as a wai.image.png still or a wai.image.jpeg picture;
    • re-package a WAI2 component as its exploded WAI1 envelope (wai-edge:explode).
  • Publishing. Each output is a new object. The edge publishes it in a group of its own track, under its own key.

  • The record. It names:

    • each input by content hash, the group receipt that carries it, its object_id, frame and samples digest, and the record that derived it where another edge did;
    • the derivation, its parameters, and the encoder where the writer is not pinned;
    • the output by content hash, receipt, size and samples digest;
    • the energy and its acquisition class, which must agree with the output's object receipt;
    • every provenance item its inputs had, and an AI-origin label (see the next section).

    The record is JSON under jwp-receipts §2.4.3's encodings. It is signed over JCS (wai:derivation\x01) and identified by BLAKE3("wai:derivation-link\x01" ‖ JCS).

  • The check.

    • replicate applies when every step is pinned:

      • the inputs' reading: packaging §5's still reader, or the WIV1 keyframe-0 decode;
      • an operation that is exact by codecs::derivation::derived_sample_tier, the registry's own composition rule (every one but scaling);
      • packaging §5's still writer, or SPEC §7.1's explode.

      A verifier that holds the inputs re-executes the derivation and compares the output byte for byte.

    • attest applies otherwise (a JPEG encode, a resampling). The inputs and every pinned step before the attested one are still checked.

  • Verification. The verifier follows a derived object back to its source, one hop at a time. A sink policy can refuse attested hops (attested: refuse), require re-execution (recompute: required), or require authority (authority: required).

  • Authority. The authority is edge/derive. It is registered in jwp-receipts §7.5, and it comes from the origin of the source each chain reaches: that origin's key log lists the edges it trusts with its content.

  • Refusals. There are 31 reason codes, each with a corpus control. They include:

    • derivation_unknown;
    • inputs that do not verify (input_receipt_invalid, input_hash_mismatch);
    • replicate_mismatch;
    • edge_not_authorised;
    • chain_skips_hop (a hop that passes an edge's output off as a source object), hop_not_held and hop_mismatch;
    • provenance_stripped and synthesis_dropped.

Provenance carried forward (added at the lead's request, from the regulation sweep)

I read California AB 853's chaptered text myself (Statutes of 2025, Chapter 674). §22757.3.1(b) says a large online platform "shall not, to the extent technically feasible, knowingly strip any system provenance data or digital signature…", operative 1 January 2027. §22757.1 (n), (o) and (p) define personal, provenance and system provenance data.

For C2PA I read version 2.2: §A.3.2 (a PNG carries its manifest store in a caBX chunk) and §18.14 (actions).

  • Provenance items. Each record lists, by digest, every provenance item of every input:

    • the claims about the input (claim, by link hash);
    • the C2PA Manifest Stores bound to it or embedded in it (c2pa, by SHA-256). The still reader now admits caBX.
    • every item the records below it carry.

    Each item is in a system or a personal compartment, read by §22757.1's split. An item the record leaves out is refused as provenance_stripped. A sink therefore holds every item's digest from the subject's record alone.

  • AI-origin label. Every input and output carries a label, assist < generate, or null when none is known. It may rise along a chain and never fall: a lowered label is synthesis_dropped. A step that synthesizes content labels its output. The terms are the top two step classes of the origin claim syn-provenance is building, so one vocabulary serves both; I told that session.

Decisions, and why

  • A record family of its own, not a new claim class. It follows the key log's precedent: JSON under §2.4.3's encodings, JCS, its own domains. claim_receipt.rs, the claims corpus and claim_verify.py are untouched, and every existing claim verifier is unaffected. The record still uses the JWP hash family, so it names inputs and outputs by content hash and group link hash.
  • The reference edge is a standalone tool (wai_edge derive|verify), not a mode of joule-moq-relay.
    • The receipt chain does not depend on the carrier (jwp-receipts §1; moq-streaming-format §0). The tool signs exactly what a relay mode would sign.
    • The relay never originates a track today and has no wai-rs dependency, so a relay mode would add a local-publisher path and that dependency.
    • The tool verifies each input before it derives (§3.3).
    • tests/derive_edge.rs runs it twice over a publisher's clip to make a chain of two hops, checks that the chain verifies with recomputation required, and checks the refusals that follow when the bundle is tampered with.
  • The packaging §5 still writer and reader move from wai-pack into wai-rs (png_still, a feature with no dependencies). The edge's replicate outputs are byte-reproducible pinned stills. wai-pack/src/png.rs re-exports the module and keeps its tests; nothing it calls changes.
  • PNG inputs refuse colour chunks. A PNG input may hold only IHDR, IDAT, IEND and caBX. A colour chunk would state a representation the samples do not carry, which breaks derived-tracks' same-representation condition.
  • The output manifest is pinned (§4.3). A one-input output carries derived_from naming its input. A multi-input output carries none, because derived_from names one motif and the record names all of the inputs.
  • The reference edge measures nothing. Its energy is the unmetered marker unless --energy passes a meter's figure, as joule-moq-relay does. The corpus's figures are fixed test values.
  • The corpus's C2PA stores are labelled byte strings standing for a store. No verifier here parses one; each names a store by its SHA-256.

Checks

All cargo work ran on the build host through rb.

check command result
unit tests cargo test --locked --no-default-features --features derive_edge --lib -- derive_edge:: png_still:: 13 passed
corpus, spec tables, reference edge cargo test --locked --no-default-features --features derive_edge --test derive_edge 4 passed
corpus regenerate cargo run --locked --no-default-features --features derive_edge --bin wai_edge_vectors -- verify ../edge-conformance both PASS
second implementation python3 -I edge-conformance/edge_verify.py edge-conformance (stdlib only) exit 0, 125 PASS, 0 FAIL
CI lib-test feature set cargo test --locked --lib --no-default-features --features world,audio_scene,haptic,splat4d,score,provenance,neural_int,film,oer,receipt_claims,key_discovery,staged,video_int,audio_int,splat_int,stage_measure,telemetry,video_package,http 839 passed
registry export cargo run --no-default-features --bin wai -- registry export (pulled) then --check up to date
clippy cargo clippy --locked --no-default-features --features derive_edge --all-targets no notes in any touched file (other modules' notes are unchanged)
wai-pack cargo clippy --locked --all-targets -- -D warnings; cargo test --release --locked; wai-pack conformance check ../pack-conformance 0; all suites ok; every vector holds
lockfiles cargo metadata --locked --offline in every workspace whose Cargo.lock names wai (9) all ok; no lock change
include/wai.h rb --pull over builds with derive_edge unchanged (both new modules are cbindgen:ignore)
other verifiers (shared text touched) all 12 live-conformance/*_verify.py, claim_verify.py, jwp_verify.py, signer_verify.py, staged_verify.py, int_payload_verify.py all exit 0
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 0

Falsifications (each committed first, then broken, then restored)

  • Rust verifier and spec table. I disabled the step-4.5 provenance check and the step-5 replicate comparison in verify.rs, and removed the provenance_stripped row from §9. tests/derive_edge.rs then failed 3 of 4 tests (exit 101):
    • provenance_stripped and replicate_mismatch were accepted;
    • the generator's own assertion fired;
    • "§9's table and Reason::ALL differ".
  • Mutated corpus copies. edge_verify.py fails every one of its 23 mutated copies of the corpus. These include:
    • a flipped signature byte;
    • a moved region;
    • a changed held input;
    • a dropped hop record;
    • the sources taken away;
    • facts misstated (authority, recomputation, energy totals, compartment, label);
    • a changed held C2PA store;
    • a changed held claim.
  • Dropped checks. With each of its 39 checks dropped in turn, the corpus catches the weakened verifier. That run is how two missing controls were found and added: a JPEG output that names no encoder, and a grid stated over more inputs than it has cells.

Not done

  • Redacting personal provenance. Redacting a personal item under a stated rule, with a salted commitment, is to come. This revision carries personal items by digest, as it carries system ones (§6.1 says so).
  • C2PA emission. The reference edge writes no C2PA manifest for its outputs. §6.1 states the ingredient rule: parentOf, with c2pa.transcoded or c2pa.repackaged.
  • The origin claim. A provenance item kind for syn-provenance's origin claim (wai-origin), and the edge signing the output's origin claim, are to come once both branches land.
  • Carriage. WAI defines no carriage of records and items, as for receipts.
  • Operations. There is no wai.derive.dissolve and no srgb_fill. Rebuilds handle WIV1 keyframe 0 only. There is no video floor (AV1) rebuild.

🤖 Generated with Claude Code

## What this is **D1, the deriving edge.** The roadmap item reads: "An edge that evaluates derived tracks and rebuilds or re-packs content under its own receipt, chained to the source." Until now a conforming relay could only forward envelopes and receipts unaltered. This PR adds that edge as the record `wai.edge.derivation` (`wai/extensions/deriving-edge.md`): - **Derivations.** An edge may do three things: - evaluate a `wai.derive.*` operation (identity, crop, ROI selection, rotation, mirror, grid, overlay, scaling) over 8-bit RGB samples; - rebuild an object at a lower rung for a sink that lacks its capability: a frame of a `wai.video.int_motion` clip, written as a `wai.image.png` still or a `wai.image.jpeg` picture; - re-package a `WAI2` component as its exploded `WAI1` envelope (`wai-edge:explode`). - **Publishing.** Each output is a new object. The edge publishes it in a group of its own track, under its own key. - **The record.** It names: - each input by content hash, the group receipt that carries it, its `object_id`, frame and samples digest, and the record that derived it where another edge did; - the derivation, its parameters, and the encoder where the writer is not pinned; - the output by content hash, receipt, size and samples digest; - the energy and its acquisition class, which must agree with the output's object receipt; - every provenance item its inputs had, and an AI-origin label (see the next section). The record is JSON under jwp-receipts §2.4.3's encodings. It is signed over JCS (`wai:derivation\x01`) and identified by `BLAKE3("wai:derivation-link\x01" ‖ JCS)`. - **The check.** - `replicate` applies when every step is pinned: - the inputs' reading: packaging §5's still reader, or the `WIV1` keyframe-0 decode; - an operation that is exact by `codecs::derivation::derived_sample_tier`, the registry's own composition rule (every one but scaling); - packaging §5's still writer, or SPEC §7.1's explode. A verifier that holds the inputs re-executes the derivation and compares the output byte for byte. - `attest` applies otherwise (a JPEG encode, a resampling). The inputs and every pinned step before the attested one are still checked. - **Verification.** The verifier follows a derived object back to its source, one hop at a time. A sink policy can refuse attested hops (`attested: refuse`), require re-execution (`recompute: required`), or require authority (`authority: required`). - **Authority.** The authority is `edge/derive`. It is registered in jwp-receipts §7.5, and it comes from the origin of the source each chain reaches: that origin's key log lists the edges it trusts with its content. - **Refusals.** There are 31 reason codes, each with a corpus control. They include: - `derivation_unknown`; - inputs that do not verify (`input_receipt_invalid`, `input_hash_mismatch`); - `replicate_mismatch`; - `edge_not_authorised`; - `chain_skips_hop` (a hop that passes an edge's output off as a source object), `hop_not_held` and `hop_mismatch`; - `provenance_stripped` and `synthesis_dropped`. ### Provenance carried forward (added at the lead's request, from the regulation sweep) I read California AB 853's chaptered text myself (Statutes of 2025, Chapter 674). §22757.3.1(b) says a large online platform "shall not, to the extent technically feasible, knowingly strip any system provenance data or digital signature…", operative 1 January 2027. §22757.1 (n), (o) and (p) define personal, provenance and system provenance data. For C2PA I read version 2.2: §A.3.2 (a PNG carries its manifest store in a `caBX` chunk) and §18.14 (actions). - **Provenance items.** Each record lists, by digest, every provenance item of every input: - the claims about the input (`claim`, by link hash); - the C2PA Manifest Stores bound to it or embedded in it (`c2pa`, by SHA-256). The still reader now admits `caBX`. - every item the records below it carry. Each item is in a `system` or a `personal` compartment, read by §22757.1's split. An item the record leaves out is refused as `provenance_stripped`. A sink therefore holds every item's digest from the subject's record alone. - **AI-origin label.** Every input and output carries a label, `assist` < `generate`, or `null` when none is known. It may rise along a chain and never fall: a lowered label is `synthesis_dropped`. A step that synthesizes content labels its output. The terms are the top two step classes of the origin claim `syn-provenance` is building, so one vocabulary serves both; I told that session. ## Decisions, and why - **A record family of its own, not a new `claim` class.** It follows the key log's precedent: JSON under §2.4.3's encodings, JCS, its own domains. `claim_receipt.rs`, the claims corpus and `claim_verify.py` are untouched, and every existing claim verifier is unaffected. The record still uses the JWP hash family, so it names inputs and outputs by content hash and group link hash. - **The reference edge is a standalone tool (`wai_edge derive|verify`), not a mode of `joule-moq-relay`.** - The receipt chain does not depend on the carrier (jwp-receipts §1; moq-streaming-format §0). The tool signs exactly what a relay mode would sign. - The relay never originates a track today and has no `wai-rs` dependency, so a relay mode would add a local-publisher path and that dependency. - The tool verifies each input before it derives (§3.3). - `tests/derive_edge.rs` runs it twice over a publisher's clip to make a chain of two hops, checks that the chain verifies with recomputation required, and checks the refusals that follow when the bundle is tampered with. - **The packaging §5 still writer and reader move from `wai-pack` into `wai-rs`** (`png_still`, a feature with no dependencies). The edge's replicate outputs are byte-reproducible pinned stills. `wai-pack/src/png.rs` re-exports the module and keeps its tests; nothing it calls changes. - **PNG inputs refuse colour chunks.** A PNG input may hold only `IHDR`, `IDAT`, `IEND` and `caBX`. A colour chunk would state a representation the samples do not carry, which breaks derived-tracks' same-representation condition. - **The output manifest is pinned (§4.3).** A one-input output carries `derived_from` naming its input. A multi-input output carries none, because `derived_from` names one motif and the record names all of the inputs. - **The reference edge measures nothing.** Its energy is the unmetered marker unless `--energy` passes a meter's figure, as `joule-moq-relay` does. The corpus's figures are fixed test values. - **The corpus's C2PA stores are labelled byte strings standing for a store.** No verifier here parses one; each names a store by its SHA-256. ## Checks All cargo work ran on the build host through `rb`. | check | command | result | |---|---|---| | unit tests | `cargo test --locked --no-default-features --features derive_edge --lib -- derive_edge:: png_still::` | 13 passed | | corpus, spec tables, reference edge | `cargo test --locked --no-default-features --features derive_edge --test derive_edge` | 4 passed | | corpus regenerate | `cargo run --locked --no-default-features --features derive_edge --bin wai_edge_vectors -- verify ../edge-conformance` | both PASS | | second implementation | `python3 -I edge-conformance/edge_verify.py edge-conformance` (stdlib only) | exit 0, 125 PASS, 0 FAIL | | CI lib-test feature set | `cargo test --locked --lib --no-default-features --features world,audio_scene,haptic,splat4d,score,provenance,neural_int,film,oer,receipt_claims,key_discovery,staged,video_int,audio_int,splat_int,stage_measure,telemetry,video_package,http` | 839 passed | | registry export | `cargo run --no-default-features --bin wai -- registry export` (pulled) then `--check` | up to date | | clippy | `cargo clippy --locked --no-default-features --features derive_edge --all-targets` | no notes in any touched file (other modules' notes are unchanged) | | wai-pack | `cargo clippy --locked --all-targets -- -D warnings`; `cargo test --release --locked`; `wai-pack conformance check ../pack-conformance` | 0; all suites ok; every vector holds | | lockfiles | `cargo metadata --locked --offline` in every workspace whose `Cargo.lock` names `wai` (9) | all ok; no lock change | | `include/wai.h` | `rb --pull` over builds with `derive_edge` | unchanged (both new modules are `cbindgen:ignore`) | | other verifiers (shared text touched) | all 12 `live-conformance/*_verify.py`, `claim_verify.py`, `jwp_verify.py`, `signer_verify.py`, `staged_verify.py`, `int_payload_verify.py` | all exit 0 | | 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 0 | ## Falsifications (each committed first, then broken, then restored) - **Rust verifier and spec table.** I disabled the step-4.5 provenance check and the step-5 replicate comparison in `verify.rs`, and removed the `provenance_stripped` row from §9. `tests/derive_edge.rs` then failed 3 of 4 tests (exit 101): - `provenance_stripped` and `replicate_mismatch` were accepted; - the generator's own assertion fired; - "§9's table and Reason::ALL differ". - **Mutated corpus copies.** `edge_verify.py` fails every one of its 23 mutated copies of the corpus. These include: - a flipped signature byte; - a moved region; - a changed held input; - a dropped hop record; - the sources taken away; - facts misstated (authority, recomputation, energy totals, compartment, label); - a changed held C2PA store; - a changed held claim. - **Dropped checks.** With each of its 39 checks dropped in turn, the corpus catches the weakened verifier. That run is how two missing controls were found and added: a JPEG output that names no encoder, and a grid stated over more inputs than it has cells. ## Not done - **Redacting personal provenance.** Redacting a personal item under a stated rule, with a salted commitment, is to come. This revision carries personal items by digest, as it carries system ones (§6.1 says so). - **C2PA emission.** The reference edge writes no C2PA manifest for its outputs. §6.1 states the ingredient rule: `parentOf`, with `c2pa.transcoded` or `c2pa.repackaged`. - **The origin claim.** A provenance item kind for `syn-provenance`'s origin claim (`wai-origin`), and the edge signing the output's origin claim, are to come once both branches land. - **Carriage.** WAI defines no carriage of records and items, as for receipts. - **Operations.** There is no `wai.derive.dissolve` and no `srgb_fill`. Rebuilds handle WIV1 keyframe 0 only. There is no video floor (AV1) rebuild. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The writer every byte of whose output is a pure function of the frame, and
the reader with its own inflater, now live in the standard's crate behind
the feature png_still (no dependency), so the deriving edge can read and
write stills with the code the packager uses. wai-pack's src/png.rs
re-exports them and keeps its tests; nothing it calls changes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
extensions/deriving-edge.md registers the record an edge signs for an
object it derived from delivered objects: a wai.derive.* operation over
8-bit RGB samples, a frame of a wai.video.int_motion clip rebuilt as a
still or a JPEG picture, a WAI2 component exploded. The record names each
input by content hash, delivery receipt and the record that derived it,
the derivation and its parameters, the output by content hash and
receipt, the energy with its acquisition class, and its check: replicate
(re-executed byte for byte) or attest (the edge's signature).

wai-rs feature derive_edge: the record (read under §5.3, JCS, signed and
identified), the derivations' arithmetic, the verifier that follows a
derived object hop by hop to its source, the reference edge's derive, the
wai_edge tool and the edge-conformance corpus (wai_edge_vectors).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
edge-conformance/edge_verify.py verifies the corpus from the extension's
text alone: it reads receipts and writes stills itself, re-executes every
replicate hop, requires every mutated copy of the corpus to fail and the
corpus to catch it with each of its own checks dropped. Two controls are
added so that every one of its checks is caught (a JPEG output naming no
encoder, a grid stated over more inputs than its cells).

The registry lists wai.edge.derivation and the document kind
wai-derivation; jwp-receipts §4.2 and §7.5 register what an edge may do
and its authority edge/derive; derived-tracks and energy-measurement say
where the receipt and the group receipts now come from.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A derivation makes a new object, and nothing its input carried is in it
unless the edge puts it there. Each record now lists, by digest, every
provenance item of every input: the claims about it, the C2PA Manifest
Stores bound to it or embedded in it (a PNG's caBX chunk, which the
still reader now admits), and every item the records below it carry,
each in the system or personal compartment of California Business and
Professions Code §22757.1 (AB 853, Statutes of 2025, Chapter 674). A hop
that leaves one out is refused (provenance_stripped). Each input and
output carries an AI-origin label (assisted, partial, generated) that
may rise along a chain and never fall (synthesis_dropped).

Personal items are carried by digest like system ones in this revision;
the redaction rule (a stated rule and a salted commitment) is to come.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The label a record carries is the top of the order an origin claim
gives its steps (capture < convert < assist < generate), so one
vocabulary serves both; every derivation this revision pins is a convert
step and raises no label.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into wai/deriving-edge
Some checks failed
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (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 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 HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (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-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-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
wai-web wasm32 / does this change touch it (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
32395df216
Co-Authored-By: Claude Opus 5.5 <[email protected]>
deriving edge: cite C2PA 2.4 (§A.3.2, §18.15 actions); edge-conformance in the decoded-output exclusion list
Some checks failed
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m40s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m47s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 4m21s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 17s
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 31s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m58s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Failing after 15m52s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 13m17s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 26m26s
WAI conformance / cargo-class corpora · macos (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 · macos (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (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-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
3d98199668
C2 (#381) reads C2PA 2.4; actions moved from §18.14 to §18.15 there, and PNG embedding stays
§A.3.2. A new *-conformance directory must state a SHA-256 or be listed with its reason in
int_kernels_vectors.rs, which only the cargo-class corpora job runs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
# Conflicts:
#	.github/workflows/wai-conformance.yml
#	wai/CHANGELOG.md
#	wai/REGISTRY.md
#	wai/SPEC.md
#	wai/registry/capabilities.json
#	wai/wai-rs/Cargo.toml
#	wai/wai-rs/src/codecs/registry.rs
#	wai/wai-rs/src/lib.rs
registry export: regenerated after merging main (live provenance + deriving edge)
All checks were successful
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 15m0s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 5m56s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 22m44s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m19s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 1m51s
wai-pack / wai-pack · linux (pull_request) Successful in 1m25s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m20s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m48s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m51s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m16s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 46m12s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 45m15s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 12m25s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 18s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 42s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 4m56s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 5m45s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 10s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m11s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 45m47s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m35s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m21s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m8s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m10s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 16s
wai-pack / wai-pack · macos (pull_request) Successful in 1m4s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 7m0s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m7s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m6s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 3m57s
ab4ce0c64e
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!379
No description provided.