WAI energy truth: sink measurement profiles, one measured figure per capability, stream energy per hop, display capability #459

Closed
dcharlot wants to merge 12 commits from wai/energy-truth into wai/gpu-int-tier
Owner

Closed: what still applied is re-landed on main as direct commits; the rest was already on main or superseded there. (2026-11-10)

This branch is 49 commits from b0eeb5fe3: the 37 of the #426/#438/#452 stack it was built on, and 12 of its own.

Already on main (35).

Superseded by main (10).

  • 30f3ece5b and a56f22cdd (docs/research/wai-cross-fabric.md) were rewritten inside 836d0255d as wai/research/cross-fabric.md, which names hardware by architecture, PCI id and OS version. The original note named fleet hosts and addresses, and was kept out of main's history on purpose.
  • The review split this PR's subject into EN-A (#460), EN-B (#457) and EN-C (#463), and those landed instead:
    • 5f98ba083 (wai_sink_meter and the research note): replaced by EN-A's wai_sink_table (procedure wai-sink-table/1), and by the signed, measured decode tables of three reference sinks, each with its readings. The note's table came from one shared host at load 30 to 88, and is not carried. 945126c58 fixed that note, so it goes with it.
    • 1869cb92f (energy budgets): EN-C dropped the budget on purpose (4c1f64058, ba0b31a92). The energy order reads only whether a qualifying sink-metered figure is held, never its value.
    • 4d2d06bdc (display capability): replaced by EN-B's capability-constraints §4, the declaration and its match. Main chose that physical size bounds nothing, so the viewing-distance acuity rule is not carried.
    • 470a68371 (wai.stream.energy): replaced by EN-B's wai.live.termination (segment receipts with each hop's joules and class, and termination records) and EN-A's segment and session receipts with the per-hop split. The display hop is estimator-display/1.
    • 64ab37363, 32f807d17, a184a44cf (CHANGELOG and CI): main has the EN-A/B/C entries and CI. a184a44cf's corpus is not on main. Its refusal check now runs inside the harness (below).

Re-landed (4): one commit whole, and the parts of three that main did not have. Each was rebuilt on current main, tested on the build hosts, and pushed to main as its own commit:

  • d135df38a, from c0c4816fb: wai-pack-gpu's kernels are held to integer types on naga's IR (packaging §11.6 item 1), in the way main's wgsl_rules.rs holds the decoders' kernels. This replaces the branch's source scanner.
  • ad5d1c04c, from de05b8b40: energy_class::Presented and wai-web's energyText. The world page no longer prints "≈0.0 mJ" for a session it sealed as unmetered. The seal's label was already on main (1f5bfbd1e).
  • 1712665df, from 8570389f9: the C settlement kernel refuses a grade its meter cannot support (a model's figure graded measured, or a grade outside the four), and the harness checks that on every run. Main already takes the grade from the meter and regenerated the one pinned corpus (1f5bfbd1e), so the branch's second, modelled corpus is not carried. 069331a31 acknowledges the kernel's source changes for wai breaking, which reads oer-conformance/ as a corpus; no vector changed.
  • 53ee8790d, from 22c1122ce: energy-measurement §9.3 and §9.4 gain what a Linux, Android and iOS sink can read, and §6.3 gains its pointer to Partial. Main's §9 (EN-A) replaced this commit's profiles and its span protocol.

The receipt a stream carries should hold, per segment and per hop, a joule figure that is measured or bounded, and say which. This PR adds the sink side of that: which counters a sink can read on each operating system, one measured figure per capability, the receipt that sums the hops, a record for a stream nobody watches, and display negotiation. It also removes three ways an unmetered or modelled figure could pass as a measurement.

Stacked on #452 (wai/gpu-int-tier), which is stacked on #438 (wai/cross-fabric). #452 already defines the learned-decode default order (platform-decode §4, §5) and the GPU integer-only conditions (determinism-tiers §5, checked on naga's IR). This PR builds on both and does not restate them. It adds the energy budgets platform-decode §5 reads, and the same integer rule for the packer's kernels, which #452 does not cover.

Commits, one per change

  1. energy-measurement §9: sink measurement profiles, and the span protocol for a task counter.
    • macos-task: the kernel's per-task CPU energy plus what it bills the task, and the GPU rail under the sole-user rule. The media engine and the neural engine are unmetered. No root.
    • linux-rapl-nvml: RAPL is readable only by root since Linux 5.10, so an owner's grant opens a package rail, never a task figure. NVML is not root-only.
    • android-app and ios-app: an Estimator from a declared basis, or ModelBased. Android 15's power monitors refresh every 30 s and add up to 10 J of deliberate noise. iOS declares task_energy in its SDK, but nobody has measured it.
    • A figure over work on a fabric no counter covers is Partial, a lower bound.
    • The span protocol computes each figure and its least declaration from integers alone.
    • No profile names HwShunt.
  2. wai_sink_meter and the research notes: one decode figure per capability, without privileges (docs/research/wai-sink-energy.md and .jsonl).
  3. energy-measurement §9.5: energy budgets, as platform-decode §5 reads them.
    • Each budget is per picture, frame or second.
    • Each is bound to the parameter set it was measured with: budget_for(capability, pin) returns nothing for another model.
  4. capability-constraints §6: display capability.
    • wai-display:* and wai-video:* parameters.
    • The exact test of whether a rendition is above a panel: size, rate, depth, transfer, and the arc-minute acuity rule where a sink declares its viewing distance.
    • Selection that sends no rendition above the panel when one within it is offered.
    • Corpus constraints-conformance/display/ and a Python second implementation.
  5. wai.stream.energy.
    • WSH1: one hop's figure for a segment, for origin, relay, sink decode or display. It carries the class, the coverage and the deliveries the figure is shared by. An estimate carries its declared basis.
    • The display figure is always an Estimator, computed from the panel's declared on-mode power and the time presented.
    • WSE1: the sink's receipt for a segment. It holds each hop's share and a total per class, never one across classes. It adds a delivery sum and a display sum, each at its weakest class and Partial wherever a part is, plus the panel verdict.
    • WST1: a termination record for a stream stopped because its page was hidden, its player occluded, its display off, its autoplay not continued, or its viewer idle. It holds the joules spent, in all and while the condition held.
    • Registered as a record. Corpus energy-conformance/stream/ and a Python second implementation.
  6. energy_class::Presented: unmetered work is never shown as zero joules.
    • The world demo used to seal an unlabelled estimate and could print "≈0.0 mJ". It now seals Estimator, or the unmetered marker for zero.
  7. oer-conformance/settle: the C kernel takes its grade from its meter.
    • The kernel wrote measured for a modelled meter. It now writes the grade its meter states, and refuses measured unless the meter names an instrument.
    • The harness's modelled mode writes firmware_vectors_modelled.json. Its default mode recreates the pinned corpus byte for byte, which the existing CI step compares.
  8. wai-pack-gpu: the packer's WGSL kernels are checked to compute in integers (packaging §11.6).
  9. CHANGELOG.
  10. wai-conformance: stream energy and display capability run in CI.
    • Two steps in the independent-verifiers job, in the pattern of the live extensions. The first runs wai-rs's stream_energy::, sink_energy:: and codecs::energy_budget:: unit tests, --test stream_energy, and stream_energy_verify.py. The second runs display_caps::, --test display_caps, and display_verify.py.
    • The workflow also fires on an edit of extensions/stream-energy.md, whose §7 the test and the verifier read, and of docs/research/wai-sink-energy.jsonl, the raw spans the budgets are recomputed from.
    • Both tests leave tests/NOT-IN-CI.txt.
  11. wai-conformance: the OER C kernel's modelled corpus reproduces byte for byte. The C kernel step also rebuilds firmware_vectors_modelled.json in the harness's modelled mode and runs cmp against the pinned copy. The same run requires the kernel to refuse a modelled figure graded measured, so every unix leg checks that refusal.
  12. docs/research: the HDR metadata companions named by their standard. The fix for the one public-name match (below).

Measured figures

Build host: M3 Ultra, macOS 27.0.1. The one-minute load average was 30 to 88 from other work. Five spans per figure, no sudo. Every figure is OnChipCounter with filtering Unknown. Times and energies are indicative; digests and counts are exact. The full tables, with every case's input and output SHA-256, are in docs/research/wai-sink-energy.md.

capability (case) figure per decode relative_ppm window_us coverage
wai.video.int_motion (video_real) 9.655 mJ 1,094 1,564,551 Whole
wai.neural.int_hyper (tiny) 121 µJ 3,118 1,535,088 Whole
wai.video.int_hyper (video_nk) 270 µJ 3,321 1,516,652 Whole
wai.audio.int_codec 7.161 mJ 1,687 1,539,743 Whole
wai.splat.int_codec 2.451 mJ 3,186 1,541,455 Whole
wai.neural.int_synth (photo) 21.101 mJ 2,557 1,488,961 Whole
wai.neural.int_mlicpp 3.468 mJ 10,252 1,633,800 Whole
wai.world.model 31.187 mJ 6,182 1,256,739 Whole
wai.world.replay 602 µJ 4,760 1,532,674 Whole
wai.feed.state 488 µJ 3,123 1,529,618 Whole
wai.avatar.pose 1.085 mJ 6,821 1,464,198 Whole
wai.image.png 14.797 mJ 25,678 1,533,632 Whole
wai.image.jpeg 12.139 mJ 6,323 1,729,158 Whole
wai.image.avif 80.052 mJ 11,577 1,484,988 Whole
wai.image.jxl 62.576 mJ 6,226 1,442,485 Whole
wai.audio.opus 82.841 mJ 6,912 1,688,065 Whole
wai.audio.flac 37.915 mJ 8,550 1,504,677 Whole
wai.text.zstd 753 µJ 9,566 1,439,305 Whole
wai.text.xz 6.972 mJ 6,243 1,598,427 Whole
wai.video.av1 (in-crate dav1d) 150.399 mJ 103,460 1,114,854 Whole
wai.video.av1.lossless 255.785 mJ 21,926 1,564,101 Whole
wai.haptic.signal 5 µJ 58,672 1,456,335 Whole
wai.audio.score 585 µJ 8,051 1,742,149 Whole
wai.film.linear 329 µJ 4,666 1,742,308 Whole
wai.film.reel 2.640 mJ 6,331 1,765,251 Whole
wai.splat.4d 15 µJ 21,479 1,588,901 Whole
60 s of 1080p24 (1440 frames) software decode VideoToolbox (media engine)
AV1, 10-bit dav1d: 11.134 J, 74,835 ppm, 3,594,433 µs ≥ 810.075 mJ, 39,457 ppm, 2,308,343 µs, Partial
AV1, 8-bit dav1d: 7.711 J, 37,397 ppm, 4,837,294 µs ≥ 858.526 mJ, 28,827 ppm, 4,371,784 µs, Partial
HEVC, 8-bit FFmpeg: 11.089 J, 33,061 ppm, 6,616,973 µs ≥ 846.948 mJ, 13,692 ppm, 4,301,051 µs, Partial
H.264, 8-bit FFmpeg: 14.776 J, 81,887 ppm, 1,903,541 µs ≥ 920.269 mJ, 40,912 ppm, 4,418,829 µs, Partial

What is a lower bound. Every VideoToolbox figure is a lower bound. No counter an unprivileged process can read covers the media engine on macOS 27: IOReport has no decoder channel. The figure also leaves out whatever part of the decoder service's energy the kernel bills to no client. The service's whole energy is never attributed: on this shared host, other clients started 16 such services during one 58 ms run of a decoder that used none.

Falsifications

Each rule the final tree tests was broken once, and its test failed (19 of 19):

  • The span protocol: the settle term, and the lower-bound rule.
  • Display: the acuity constant, and the orientation.
  • Stream energy: the weakest-class sum, bound_overstated, the display class, and a §7 reason row.
  • Budgets: a figure, a set digest, the set binding, and the rounding term.
  • Presentation: unmetered shown as zero.
  • The demo: its label.
  • The packer's kernels: a float literal and type, and a subgroup call.
  • The Python verifiers: the weakest class, and the acuity constant.
  • The C kernel: its grade rule removed makes the harness exit 4.

The Python verifiers also catch 14 and 6 planted mutations of their corpora.

What the evidence does not support

  • A figure is a property of one decode, one input, one build, one machine and one load. It is not a property of a capability or a codec. The bitrates differ and the in-process sources are synthetic.
  • Nothing here gives the media engine's energy, or a hardware decode's total.
  • No figure exists for any display, network or phone. The display is an Estimator from a declared power, the network has no figure, and no Android or iOS device was available.
  • An OnChipCounter declaration covers the spans' scatter, the settle bound and resolution. It does not cover the counter's own systematic error.
  • The budgets belong to the conformance vectors' small models, not to production models of those capabilities.
  • Only the build host was measured. The fleet's other Macs carry production work.

For review

  • Commit 7 edits oer-conformance/, which the public-text scripts describe as settled OER/2 material. The brief asked for the kernel's receipts to state their class truthfully. oer-receipts.md and oer.rs are unchanged, and no pinned receipt changes.
  • Where the CI steps live. The repository has no .forgejo/workflows. The forge runs .github/workflows, and it would ignore that whole directory once a .forgejo/workflows existed. So commits 10 and 11 edit .github/workflows/wai-conformance.yml, the file the forge runs, as the stacked PRs edited their own workflows there. No GitHub-side workflow is added or enabled.
  • Checks.
    • scripts/check-public-names.sh was run with the private denylist. It is clean over its own scope, the 2,688 tracked files under wai/.
    • Run explicitly over the changed files outside that scope, it found one match, at docs/research/wai-sink-energy.md:175. Commit 12 fixes it, and the rerun is clean. The oer-conformance/ files commit 7 edits are also clean.
    • check-tests-in-ci.py passes now that both tests are named by a step. check-comparative-prose.sh, check-no-vanity-metrics.sh, check-spec-refs.py, check-wai-section-refs.py, check-orphan-sources.py and check-workflow-concurrency.sh also pass.
  • The status page change is a Building item on branch energy-truth of the site's repository. It is not merged and not deployed; the site's build, route check, public-text check with its denylist, and pages e2e on /status/ and /demos/ pass.
  • Every existing package, claim and receipt keeps its bytes. The claim, OER and live corpora regenerate unchanged, the receipt pins hold, and the C kernel's default mode reproduces firmware_vectors.json.

Test plan (build host)

  • cargo test --no-default-features --features "world receipt_claims stream_energy oer ffi haptic score splat4d film" --lib
  • --test stream_energy --test display_caps --test ffi_envelope --test cli_registry
  • wai_oer_vectors verify, wai_claim_vectors verify, and the wai_stream_energy_vectors and wai_display_vectors verify commands
  • wai-pack-gpu --test integer_only
  • wai-web --lib
  • stream_energy_verify.py, display_verify.py, oer2_verify.py on the modelled corpus
  • the C kernel in both modes
  • the two new CI steps and the extended C kernel step, run as the workflow writes them: 15 and 4 unit tests, 4 and 3 integration tests, stream_energy_verify.py (53 vectors, 14 of 14 mutations caught), display_verify.py (12 vectors and 7 refusals, 6 of 6 mutations caught), and both kernel corpora identical under cmp

🤖 Generated with Claude Code

**Closed: what still applied is re-landed on main as direct commits; the rest was already on main or superseded there.** (2026-11-10) This branch is 49 commits from b0eeb5fe3: the 37 of the #426/#438/#452 stack it was built on, and 12 of its own. **Already on main (35).** - 31 of the stack's packaging, cross-fabric and GPU-tier commits, the merge 921f7445f among them, came in through #465's squash 836d0255d ("wai packaging stack: #426, #438 and #452's GPU tier"), with the three reviews' fixes after it. - #452's platform-decode commits 6ad92e2e8, 8695bc75f and fed8694f4 came in through #463's replay, as 501c1f854, 44af5d5d0 and e9e9e8cdb. c47a58cca's CHANGELOG text is in both: the GPU part in 836d0255d, the platform-decode part in #463's entry. **Superseded by main (10).** - 30f3ece5b and a56f22cdd (docs/research/wai-cross-fabric.md) were rewritten inside 836d0255d as `wai/research/cross-fabric.md`, which names hardware by architecture, PCI id and OS version. The original note named fleet hosts and addresses, and was kept out of main's history on purpose. - The review split this PR's subject into EN-A (#460), EN-B (#457) and EN-C (#463), and those landed instead: - 5f98ba083 (wai_sink_meter and the research note): replaced by EN-A's `wai_sink_table` (procedure `wai-sink-table/1`), and by the signed, measured decode tables of three reference sinks, each with its readings. The note's table came from one shared host at load 30 to 88, and is not carried. 945126c58 fixed that note, so it goes with it. - 1869cb92f (energy budgets): EN-C dropped the budget on purpose (4c1f64058, ba0b31a92). The energy order reads only whether a qualifying sink-metered figure is held, never its value. - 4d2d06bdc (display capability): replaced by EN-B's capability-constraints §4, the declaration and its match. Main chose that physical size bounds nothing, so the viewing-distance acuity rule is not carried. - 470a68371 (`wai.stream.energy`): replaced by EN-B's `wai.live.termination` (segment receipts with each hop's joules and class, and termination records) and EN-A's segment and session receipts with the per-hop split. The display hop is `estimator-display/1`. - 64ab37363, 32f807d17, a184a44cf (CHANGELOG and CI): main has the EN-A/B/C entries and CI. a184a44cf's corpus is not on main. Its refusal check now runs inside the harness (below). **Re-landed (4): one commit whole, and the parts of three that main did not have.** Each was rebuilt on current main, tested on the build hosts, and pushed to main as its own commit: - d135df38a, from c0c4816fb: wai-pack-gpu's kernels are held to integer types on naga's IR (packaging §11.6 item 1), in the way main's `wgsl_rules.rs` holds the decoders' kernels. This replaces the branch's source scanner. - ad5d1c04c, from de05b8b40: `energy_class::Presented` and wai-web's `energyText`. The world page no longer prints "≈0.0 mJ" for a session it sealed as unmetered. The seal's label was already on main (1f5bfbd1e). - 1712665df, from 8570389f9: the C settlement kernel refuses a grade its meter cannot support (a model's figure graded measured, or a grade outside the four), and the harness checks that on every run. Main already takes the grade from the meter and regenerated the one pinned corpus (1f5bfbd1e), so the branch's second, modelled corpus is not carried. 069331a31 acknowledges the kernel's source changes for `wai breaking`, which reads oer-conformance/ as a corpus; no vector changed. - 53ee8790d, from 22c1122ce: energy-measurement §9.3 and §9.4 gain what a Linux, Android and iOS sink can read, and §6.3 gains its pointer to `Partial`. Main's §9 (EN-A) replaced this commit's profiles and its span protocol. --- The receipt a stream carries should hold, per segment and per hop, a joule figure that is measured or bounded, and say which. This PR adds the sink side of that: which counters a sink can read on each operating system, one measured figure per capability, the receipt that sums the hops, a record for a stream nobody watches, and display negotiation. It also removes three ways an unmetered or modelled figure could pass as a measurement. Stacked on #452 (`wai/gpu-int-tier`), which is stacked on #438 (`wai/cross-fabric`). #452 already defines the learned-decode default order (platform-decode §4, §5) and the GPU integer-only conditions (determinism-tiers §5, checked on naga's IR). This PR builds on both and does not restate them. It adds the energy budgets platform-decode §5 reads, and the same integer rule for the packer's kernels, which #452 does not cover. ## Commits, one per change 1. **energy-measurement §9: sink measurement profiles, and the span protocol for a task counter.** - `macos-task`: the kernel's per-task CPU energy plus what it bills the task, and the GPU rail under the sole-user rule. The media engine and the neural engine are unmetered. No root. - `linux-rapl-nvml`: RAPL is readable only by root since Linux 5.10, so an owner's grant opens a package rail, never a task figure. NVML is not root-only. - `android-app` and `ios-app`: an Estimator from a declared basis, or ModelBased. Android 15's power monitors refresh every 30 s and add up to 10 J of deliberate noise. iOS declares `task_energy` in its SDK, but nobody has measured it. - A figure over work on a fabric no counter covers is `Partial`, a lower bound. - The span protocol computes each figure and its least declaration from integers alone. - No profile names `HwShunt`. 2. **wai_sink_meter and the research notes: one decode figure per capability, without privileges** (`docs/research/wai-sink-energy.md` and `.jsonl`). 3. **energy-measurement §9.5: energy budgets, as platform-decode §5 reads them.** - Each budget is per picture, frame or second. - Each is bound to the parameter set it was measured with: `budget_for(capability, pin)` returns nothing for another model. 4. **capability-constraints §6: display capability.** - `wai-display:*` and `wai-video:*` parameters. - The exact test of whether a rendition is above a panel: size, rate, depth, transfer, and the arc-minute acuity rule where a sink declares its viewing distance. - Selection that sends no rendition above the panel when one within it is offered. - Corpus `constraints-conformance/display/` and a Python second implementation. 5. **`wai.stream.energy`.** - `WSH1`: one hop's figure for a segment, for origin, relay, sink decode or display. It carries the class, the coverage and the deliveries the figure is shared by. An estimate carries its declared basis. - The display figure is always an Estimator, computed from the panel's declared on-mode power and the time presented. - `WSE1`: the sink's receipt for a segment. It holds each hop's share and a total per class, never one across classes. It adds a delivery sum and a display sum, each at its weakest class and `Partial` wherever a part is, plus the panel verdict. - `WST1`: a termination record for a stream stopped because its page was hidden, its player occluded, its display off, its autoplay not continued, or its viewer idle. It holds the joules spent, in all and while the condition held. - Registered as a record. Corpus `energy-conformance/stream/` and a Python second implementation. 6. **`energy_class::Presented`: unmetered work is never shown as zero joules.** - The world demo used to seal an unlabelled estimate and could print "≈0.0 mJ". It now seals `Estimator`, or the unmetered marker for zero. 7. **oer-conformance/settle: the C kernel takes its grade from its meter.** - The kernel wrote `measured` for a modelled meter. It now writes the grade its meter states, and refuses `measured` unless the meter names an instrument. - The harness's `modelled` mode writes `firmware_vectors_modelled.json`. Its default mode recreates the pinned corpus byte for byte, which the existing CI step compares. 8. **wai-pack-gpu: the packer's WGSL kernels are checked to compute in integers** (packaging §11.6). 9. **CHANGELOG.** 10. **wai-conformance: stream energy and display capability run in CI.** - Two steps in the independent-verifiers job, in the pattern of the live extensions. The first runs wai-rs's `stream_energy::`, `sink_energy::` and `codecs::energy_budget::` unit tests, `--test stream_energy`, and `stream_energy_verify.py`. The second runs `display_caps::`, `--test display_caps`, and `display_verify.py`. - The workflow also fires on an edit of `extensions/stream-energy.md`, whose §7 the test and the verifier read, and of `docs/research/wai-sink-energy.jsonl`, the raw spans the budgets are recomputed from. - Both tests leave `tests/NOT-IN-CI.txt`. 11. **wai-conformance: the OER C kernel's modelled corpus reproduces byte for byte.** The C kernel step also rebuilds `firmware_vectors_modelled.json` in the harness's `modelled` mode and runs `cmp` against the pinned copy. The same run requires the kernel to refuse a modelled figure graded `measured`, so every unix leg checks that refusal. 12. **docs/research: the HDR metadata companions named by their standard.** The fix for the one public-name match (below). ## Measured figures Build host: M3 Ultra, macOS 27.0.1. The one-minute load average was 30 to 88 from other work. Five spans per figure, no sudo. Every figure is `OnChipCounter` with filtering `Unknown`. Times and energies are indicative; digests and counts are exact. The full tables, with every case's input and output SHA-256, are in `docs/research/wai-sink-energy.md`. | capability (case) | figure per decode | `relative_ppm` | `window_us` | coverage | |---|---:|---:|---:|---| | `wai.video.int_motion` (video_real) | 9.655 mJ | 1,094 | 1,564,551 | Whole | | `wai.neural.int_hyper` (tiny) | 121 µJ | 3,118 | 1,535,088 | Whole | | `wai.video.int_hyper` (video_nk) | 270 µJ | 3,321 | 1,516,652 | Whole | | `wai.audio.int_codec` | 7.161 mJ | 1,687 | 1,539,743 | Whole | | `wai.splat.int_codec` | 2.451 mJ | 3,186 | 1,541,455 | Whole | | `wai.neural.int_synth` (photo) | 21.101 mJ | 2,557 | 1,488,961 | Whole | | `wai.neural.int_mlicpp` | 3.468 mJ | 10,252 | 1,633,800 | Whole | | `wai.world.model` | 31.187 mJ | 6,182 | 1,256,739 | Whole | | `wai.world.replay` | 602 µJ | 4,760 | 1,532,674 | Whole | | `wai.feed.state` | 488 µJ | 3,123 | 1,529,618 | Whole | | `wai.avatar.pose` | 1.085 mJ | 6,821 | 1,464,198 | Whole | | `wai.image.png` | 14.797 mJ | 25,678 | 1,533,632 | Whole | | `wai.image.jpeg` | 12.139 mJ | 6,323 | 1,729,158 | Whole | | `wai.image.avif` | 80.052 mJ | 11,577 | 1,484,988 | Whole | | `wai.image.jxl` | 62.576 mJ | 6,226 | 1,442,485 | Whole | | `wai.audio.opus` | 82.841 mJ | 6,912 | 1,688,065 | Whole | | `wai.audio.flac` | 37.915 mJ | 8,550 | 1,504,677 | Whole | | `wai.text.zstd` | 753 µJ | 9,566 | 1,439,305 | Whole | | `wai.text.xz` | 6.972 mJ | 6,243 | 1,598,427 | Whole | | `wai.video.av1` (in-crate dav1d) | 150.399 mJ | 103,460 | 1,114,854 | Whole | | `wai.video.av1.lossless` | 255.785 mJ | 21,926 | 1,564,101 | Whole | | `wai.haptic.signal` | 5 µJ | 58,672 | 1,456,335 | Whole | | `wai.audio.score` | 585 µJ | 8,051 | 1,742,149 | Whole | | `wai.film.linear` | 329 µJ | 4,666 | 1,742,308 | Whole | | `wai.film.reel` | 2.640 mJ | 6,331 | 1,765,251 | Whole | | `wai.splat.4d` | 15 µJ | 21,479 | 1,588,901 | Whole | | 60 s of 1080p24 (1440 frames) | software decode | VideoToolbox (media engine) | |---|---|---| | AV1, 10-bit | dav1d: 11.134 J, 74,835 ppm, 3,594,433 µs | ≥ 810.075 mJ, 39,457 ppm, 2,308,343 µs, Partial | | AV1, 8-bit | dav1d: 7.711 J, 37,397 ppm, 4,837,294 µs | ≥ 858.526 mJ, 28,827 ppm, 4,371,784 µs, Partial | | HEVC, 8-bit | FFmpeg: 11.089 J, 33,061 ppm, 6,616,973 µs | ≥ 846.948 mJ, 13,692 ppm, 4,301,051 µs, Partial | | H.264, 8-bit | FFmpeg: 14.776 J, 81,887 ppm, 1,903,541 µs | ≥ 920.269 mJ, 40,912 ppm, 4,418,829 µs, Partial | **What is a lower bound.** Every VideoToolbox figure is a lower bound. No counter an unprivileged process can read covers the media engine on macOS 27: IOReport has no decoder channel. The figure also leaves out whatever part of the decoder service's energy the kernel bills to no client. The service's whole energy is never attributed: on this shared host, other clients started 16 such services during one 58 ms run of a decoder that used none. ## Falsifications Each rule the final tree tests was broken once, and its test failed (19 of 19): - **The span protocol:** the settle term, and the lower-bound rule. - **Display:** the acuity constant, and the orientation. - **Stream energy:** the weakest-class sum, `bound_overstated`, the display class, and a §7 reason row. - **Budgets:** a figure, a set digest, the set binding, and the rounding term. - **Presentation:** unmetered shown as zero. - **The demo:** its label. - **The packer's kernels:** a float literal and type, and a subgroup call. - **The Python verifiers:** the weakest class, and the acuity constant. - **The C kernel:** its grade rule removed makes the harness exit 4. The Python verifiers also catch 14 and 6 planted mutations of their corpora. ## What the evidence does not support - A figure is a property of one decode, one input, one build, one machine and one load. It is not a property of a capability or a codec. The bitrates differ and the in-process sources are synthetic. - Nothing here gives the media engine's energy, or a hardware decode's total. - No figure exists for any display, network or phone. The display is an Estimator from a declared power, the network has no figure, and no Android or iOS device was available. - An `OnChipCounter` declaration covers the spans' scatter, the settle bound and resolution. It does not cover the counter's own systematic error. - The budgets belong to the conformance vectors' small models, not to production models of those capabilities. - Only the build host was measured. The fleet's other Macs carry production work. ## For review - Commit 7 edits `oer-conformance/`, which the public-text scripts describe as settled OER/2 material. The brief asked for the kernel's receipts to state their class truthfully. `oer-receipts.md` and `oer.rs` are unchanged, and no pinned receipt changes. - **Where the CI steps live.** The repository has no `.forgejo/workflows`. The forge runs `.github/workflows`, and it would ignore that whole directory once a `.forgejo/workflows` existed. So commits 10 and 11 edit `.github/workflows/wai-conformance.yml`, the file the forge runs, as the stacked PRs edited their own workflows there. No GitHub-side workflow is added or enabled. - **Checks.** - `scripts/check-public-names.sh` was run with the private denylist. It is clean over its own scope, the 2,688 tracked files under `wai/`. - Run explicitly over the changed files outside that scope, it found one match, at `docs/research/wai-sink-energy.md:175`. Commit 12 fixes it, and the rerun is clean. The `oer-conformance/` files commit 7 edits are also clean. - `check-tests-in-ci.py` passes now that both tests are named by a step. `check-comparative-prose.sh`, `check-no-vanity-metrics.sh`, `check-spec-refs.py`, `check-wai-section-refs.py`, `check-orphan-sources.py` and `check-workflow-concurrency.sh` also pass. - The status page change is a Building item on branch `energy-truth` of the site's repository. It is not merged and not deployed; the site's build, route check, public-text check with its denylist, and pages e2e on `/status/` and `/demos/` pass. - Every existing package, claim and receipt keeps its bytes. The claim, OER and live corpora regenerate unchanged, the receipt pins hold, and the C kernel's default mode reproduces `firmware_vectors.json`. ## Test plan (build host) - `cargo test --no-default-features --features "world receipt_claims stream_energy oer ffi haptic score splat4d film" --lib` - `--test stream_energy --test display_caps --test ffi_envelope --test cli_registry` - `wai_oer_vectors verify`, `wai_claim_vectors verify`, and the `wai_stream_energy_vectors` and `wai_display_vectors` verify commands - `wai-pack-gpu` `--test integer_only` - `wai-web` `--lib` - `stream_energy_verify.py`, `display_verify.py`, `oer2_verify.py` on the modelled corpus - the C kernel in both modes - the two new CI steps and the extended C kernel step, run as the workflow writes them: 15 and 4 unit tests, 4 and 3 integration tests, `stream_energy_verify.py` (53 vectors, 14 of 14 mutations caught), `display_verify.py` (12 vectors and 7 refusals, 6 of 6 mutations caught), and both kernel corpora identical under `cmp` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A sink measurement profile fixes, for one operating system, which counters an
unprivileged sink can read, the class each figure is sealed under, the fabrics
each covers and those none covers:

- macos-task: the kernel's per-task CPU energy (ri_energy_nj, from the CPU's own
  energy counters, with ri_billed_energy for work other processes did on the
  task's behalf), OnChipCounter, attribution task, filtering Unknown; the GPU
  rail under §6.3's sole-user rule; the media engine and the neural engine
  unmetered on macOS 27. No root.
- linux-rapl-nvml: RAPL, readable only by root since Linux 5.10 (an owner's
  grant opens a package rail, never a task figure); NVML for the GPU board.
- android-app, ios-app: an Estimator from a declared basis, or ModelBased.
  Android 15's power monitors refresh every 30 s with up to 10 J of deliberate
  noise; iOS declares task_energy but nobody has measured it.

§9.3: a figure over work on a fabric its profile does not meter is Partial, a
lower bound, and is shown as one. §9.4: a task counter needs no idle bracket;
spans of whole completions, threads started after the opening read, a settle
wait, liveness read during each span, and the figure and least declaration
from the spans' integers alone. §2.6: no profile names HwShunt.

wai::sink_energy holds the profiles and the arithmetic (pure std, unconditional,
hidden from cbindgen); its macOS reader is behind the new sink_meter feature.
energy_report's Nat is shared within the crate for the exact products.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai_sink_meter runs energy-measurement §9.4 on the macos-task profile: in
process, each capability the reference sink decodes, from a committed vector or
a source made from a fixed seed, on one worker under the fast kernels; out of
process, an external decoder as a child read before it is reaped, its figure
its own energy and what the kernel billed to it.

Measured on the build host (M3 Ultra, macOS 27.0.1, one-minute load 30 to 88
from other work), five spans a case, no sudo. Every WAI capability row is
OnChipCounter, Whole; every VideoToolbox row is Partial, a lower bound, since no
counter covers the media engine. A decoder service's whole energy is never
attributed: on this shared host other clients start one at any moment (16 in
one 58 ms run of a decoder that used none), so only what the kernel bills
counts. The spans of every row are published as JSON lines, from which §9.4's
arithmetic gives each figure again. Times and energies are indicative; digests
and counts are exact.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
platform-decode §5 (wai/gpu-int-tier) reads a learned entry's energy budget and
leaves how one is carried and checked to energy-measurement. §9.5 says: an
OnChipCounter figure, coverage Whole, of a learned capability's decode with one
parameter set on a reference sink, under §9.4, per picture, frame or second of
output (a division that is not whole adds its rounding to the declaration),
bound to its parameter set by the digests a pin names, carried in the registry
and checked against its published spans.

wai::codecs::energy_budget holds the budgets of the learned capabilities
measured (int_codec audio and splat, int_hyper image and video, int_mlicpp,
int_synth) and budget_for(capability, pin), which gives the
platform_decode::EnergyBudget only to an entry pinned to the measured set. Its
tests recompute every budget from the published spans and every set digest from
the committed set, and show the default order of platform-decode §4 ranking the
measured set first and another set, or an unmeasured learned capability, last.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
WAI-authored register entries for the panel a sink presents on (wai-display:
sides, refresh, bit depth, transfers, diagonal, viewing distance) and for a
rendition (wai-video:), the exact test of whether a rendition is above a panel
in size (sides compared in the orientation that fits), rate, depth, transfer
and acuity, and selection: among the renditions a sink can pick, the first
within its panel; where none is, the first it can pick, recorded as above. The
acuity respect is ITU-R BT.1845-1's one-arc-minute criterion, applied only where
the sink declares its distance, in integers with tan(1') rounded down so it
never flags a rendition the exact value would not.

wai::display_caps, its corpus constraints-conformance/display/ (panels of common
devices against a 2160p60 HDR to 360p ladder, and the declaration refusals),
wai_display_vectors, tests/display_caps.rs, and display_verify.py, the second
implementation written from the text.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A per-stream, per-segment figure that is measured or bounded, never modelled
from a bitrate table:

- WSH1, the hop figure record: origin, relay, sink decode or display, each
  signed by its hop, with the class of energy-measurement §2, its coverage
  (Partial is a lower bound), the deliveries an origin's or relay's figure is
  shared by, and for an estimate the declared power and time it is computed
  from. A display figure is always an Estimator from the panel's declared
  on-mode power (an EU energy label's, a manufacturer's or the sink's own); a
  decode figure is held to its sink measurement profile, and a Whole figure over
  an unmetered fabric is refused bound_overstated. HwShunt is refused first.
- WSE1, the sink's stream-segment receipt: each hop's share, a total per class
  and never one across classes, a delivery sum (origin, relays, decode) and a
  display sum each at its weakest class and Partial wherever a part is, and
  whether the rendition was above the panel (capability-constraints §6).
- WST1, the termination record: a stream stopped because its page was hidden,
  its player occluded, its display off, its autoplay not continued or its viewer
  idle, with the reason, the receipts it accounts for, and the joules spent by
  role and class, in all and while the condition held.

A verifier recomputes every share, total, sum and verdict from the records.
Registered as a record (SPEC §5, REGISTRY.md, the export). Reference
wai::stream_energy (feature stream_energy), corpus energy-conformance/stream/,
wai_stream_energy_vectors, tests/stream_energy.rs, and stream_energy_verify.py,
the second implementation written from the text. The integration tests are
listed in NOT-IN-CI.txt until a workflow step names them: this change edits no
workflow.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
One rendering of a figure for every reader: the unmetered marker reads
"unmetered", a figure with no class says nothing states how it was obtained, a
Partial figure reads "at least", and a classed figure carries its class and its
declared uncertainty over its window, in integer arithmetic. A class beside a
zero figure is refused, as every verifier refuses it.

wai-web's world demo sealed its wall-time estimate (compute time at a declared
4 W) with no class, and printed "≈0.0 mJ est" for a session it had not timed.
It now labels a non-zero estimate Estimator, seals zero as the unmetered
marker, and shows the figure through energy_text, the wasm binding of
Presented. A native test seals both from a committed world vector.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The portable kernel wrote "how":"measured" and "device":"hardware" into every
receipt, whatever its meter was, and the host harness's meter is a model: a
cycle count times the kernel's projected cycle energy, and constant idle and
shared powers nobody measured. Those receipts graded a modelled figure
measured, which oer-receipts §2 does not support.

The kernel now writes the grade and device its meter states, and refuses
(returns -3) a meter graded measured whose method names no instrument
(hardware_meter). The harness's new `modelled` mode grades its meter
model_estimated / projected and checks that the kernel refuses the same meter
graded measured; its default `issued` mode recreates the pinned
firmware_vectors.json byte for byte, which the existing CI step compares, so no
issued receipt changes. firmware_vectors_modelled.json is the modelled run,
verified by oer2_verify.py and by wai_oer_vectors. The Zephyr skeleton grades
its calibrated model projected.

This touches oer-conformance/, which the public-text scripts describe as settled
OER/2 material; the brief asked for the kernel's receipts to state their class
truthfully. oer-receipts.md and wai-rs/src/oer.rs are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
packaging §11.6 item 1 forbids running a step in floating point where the step is
defined in integers. The packer's kernels (the motion search, SSE and BLAKE3)
are now held to conditions 1 and 2 of determinism-tiers §5, Claiming the tier on
a GPU, which wai-ops-gpu/tests/wgsl_rules.rs checks for the decoders' kernels on
naga's IR: a source check refuses a floating-point type or literal, an enable
directive and a subgroup or quad built-in, with a self-test of the scanner on
each form it refuses and on the integer forms the kernels use.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai CHANGELOG: energy a stream spends, measured where it can be, bounded where it cannot
Some checks failed
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 8m12s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 3m40s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m7s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 5s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 9m37s
wai-pack / wai-pack · linux (pull_request) Successful in 3m14s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m59s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 4m37s
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-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (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
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
wai-quantum studio and desktop / studio · browser (pull_request) Has been cancelled
WAI energy receipts / energy receipts · 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-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
64ab37363d
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The independent-verifiers job gains two steps in the pattern of the live
extensions: wai-rs's unit tests and integration test for wai.stream.energy
(with the sink profiles of energy-measurement §9 and the reference budgets
of §9.5) and stream_energy_verify.py; then display capability
(capability-constraints §6), its tests and display_verify.py. The workflow
fires on an edit of stream-energy.md, whose §7 the test and the verifier
read, and of the raw spans the reference budgets recompute from. Both tests
leave tests/NOT-IN-CI.txt.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The C kernel step rebuilds firmware_vectors_modelled.json from source with
the harness's modelled mode and compares it with the pinned copy, as it does
the issued corpus. The same run requires the kernel to refuse a modelled
figure graded measured (the harness exits 4 otherwise), so that refusal is
checked on every unix leg.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
docs/research: the HDR metadata companions named by their standard
Some checks failed
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 6m32s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m19s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m11s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Failing after 3m37s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m44s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Failing after 2m29s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 14s
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 1m43s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m5s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m1s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 4s
WAI conformance / cargo-class corpora · macos (pull_request) Failing after 2m5s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 23s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 53s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m11s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m12s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m46s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m55s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m38s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m28s
wai-pack / wai-pack · macos (pull_request) Successful in 2m40s
wai-pack / wai-pack · the floor through a media prober (pull_request) Failing after 30s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m12s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m8s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m40s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m48s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 29m28s
945126c58c
The research note named a trade name for one of the two SMPTE ST 2094
dynamic-metadata companions. It now names the standard and the two
registered capability strings, as SPEC §5 does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
dcharlot closed this pull request 2026-11-10 02:22:44 -05:00
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 6s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 8s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 8s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
WAI conformance / does this change touch it (pull_request) Successful in 5s
WAI energy receipts / does this change touch it (pull_request) Successful in 5s
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 5s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been skipped
WAI neural sink gates / does this change touch it (pull_request) Successful in 5s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been skipped
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 5s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 5s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 45s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 5s
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 6s
wai-web wasm32 / does this change touch it (pull_request) Successful in 5s
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Failing after 7s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m11s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 9m8s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m45s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 5m10s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 3m4s
WAI conformance / cargo-class corpora · linux (pull_request) Failing after 2m29s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m23s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 29s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m54s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 3m28s
wai-pack / wai-pack · linux (pull_request) Successful in 3m16s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m54s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 3m0s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 6m32s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m19s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m11s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Failing after 3m37s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m44s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Failing after 2m29s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 14s
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 1m43s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m5s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m1s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 4s
WAI conformance / cargo-class corpora · macos (pull_request) Failing after 2m5s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 23s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 53s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m11s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m12s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m46s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m55s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m38s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m28s
wai-pack / wai-pack · macos (pull_request) Successful in 2m40s
wai-pack / wai-pack · the floor through a media prober (pull_request) Failing after 30s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m12s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m8s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m40s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m48s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 29m28s

Pull request closed

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

No due date set.

Dependencies

No dependencies set

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