open-standards/wai/changes/2026-11-10-energy-shown-as-what-it-is.md
Transaction Science ad5d1c04c2
All checks were successful
wai-audit collector and player integration / does this change touch it (push) Successful in 15s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 8s
wai-fleet service / does this change touch it (push) Successful in 20s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 21s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 29s
wai-ledger service / does this change touch it (push) Successful in 27s
wai-sink-swift native sink package / does this change touch it (push) Successful in 36s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 53s
WAI Studio / does this change touch it (push) Successful in 15s
wai-sink-android native sink library / does this change touch it (push) Successful in 43s
WAI operation catalogue / does this change touch it (push) Successful in 46s
wai-quantum for JavaScript / does this change touch it (push) Successful in 46s
wai-quantum studio and desktop / does this change touch it (push) Successful in 46s
wai-app and Create / wai-app · does this change touch it (push) Successful in 47s
wai-fleet service / service · macos (push) Successful in 41s
wai-ledger service / service · macos (push) Successful in 1m13s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 1m30s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 1m44s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 1m58s
wai-audit collector and player integration / collector · linux (push) Successful in 2m38s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 3m23s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 52s
wai-ledger service / service · linux (push) Successful in 4m7s
wai-fleet service / service · linux (push) Successful in 4m48s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 5m21s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m49s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m32s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 6m20s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 7m12s
wai-quantum for JavaScript / javascript · linux (push) Successful in 7m5s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 8m38s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 7m46s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 10m3s
wai-quantum studio and desktop / studio · browser (push) Successful in 6m35s
joule-moq-room room service / joule-moq-room, every target (push) Successful in 9m59s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 9m44s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 8m55s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 9m13s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 14m59s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 16m33s
WAI Studio / Studio in WebKit · linux (push) Successful in 14m53s
wai: a figure shown as what it is; the world page never prints unmetered as zero
energy_class::Presented is one rendering of a figure for a reader: the
unmetered marker reads "unmetered", a figure with no class says nothing states
how it was obtained, a Partial figure reads "at least" (energy-measurement
§9.1), and a classed figure carries its class and its declared uncertainty over
its window, in integer arithmetic (joules_text). A class beside a zero figure, a
lower bound of nothing and a figure below the resolution floor are refused, as
the verifiers refuse them.

wai-web binds it as energyText. The world demo seals a session it never timed as
the unmetered marker (label_page_figure, 1f5bfbd1e), yet printed
"≈0.0 mJ (Estimator: …)" beside it. It now shows that session as unmetered, and a
timed one as its Estimator figure with the declared power it rests on.

Re-landed from PR #459 (de05b8b40), whose labelling of the seal main already
has; this is the rest of it, adapted to main's label_page_figure and to §9.1.
wai-web's native lib count in wai-web-wasm.yml goes from 38 to 39.

Tested on the M3 Ultra build host: wai-energy-receipts.yml's wai-rs step as
written (903 lib tests and the rest, the new test among them); wai-web
cargo test --lib (39 passed); wai-web's wasm32 release build through
wasm-bindgen --target nodejs, with energyText called under Node (unmetered,
an Estimator figure, a lower bound, and both refusals); no clippy note in the
new code (the library's existing notes are unchanged); the C header
unchanged. Falsified: the marker shown as "0 µJ", and a lower bound shown
without "at least", each fail the test.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 02:19:57 -05:00

1,012 B

A figure shown as what it is: the unmetered marker never reads as zero joules

  • wai-rs: energy_class::Presented is the one rendering of a figure for a reader. The unmetered marker reads unmetered; a figure with no class says that nothing states how it was obtained; a figure whose coverage is Partial reads "at least" (energy-measurement §9.1); a classed figure carries its class and, where it has one, its declared uncertainty over its window, all in integer arithmetic (joules_text). A class beside a zero figure, a lower bound of nothing and a figure below the resolution floor are refused, as every verifier refuses them, so nothing is shown that a verifier would not accept.
  • wai-web: energyText binds it for a page. The world demo sealed a session it never timed as the unmetered marker yet printed "≈0.0 mJ (Estimator …)" beside it; it now shows that session as unmetered, and a timed one as its Estimator figure with the declared power it rests on.