wai: staged measurement and the session claim in the browser; a session bound to the envelopes it names (W5-4) #187
Loading…
Reference in a new issue
No description provided.
Delete branch "wai/w5-4-measure-web"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Staged measurement and the session claim in the browser. The measurement core runs as wasm32 and equals the native tool byte for byte. A page records, seals and verifies a session claim. The claim's rules now bind each presentation to what the envelopes it names actually give.
wai-webbindswai::stage_measure:evaluateTitle,simulate,simulateModel,countObject,qualityRgb8andoutputRootgive the text the native tool prints;titleMissingnames the next file a page should fetch.sessionBeginrecords each decoder, presentation and object received.finishseals after checking the record.verifyClaimchecks a claim as the claim-conformance runner does.demo/verify_measure.shruns in the wasm job. It requires every golden, refusal title, counted object, quality pair and simulator result ofstaged-measure-conformance/from the wasm32 build. A session recorded as a page records one is the native tool's claim byte for byte. The wasm32, native and Python verifiers agree on it and on its altered variants.presentedexactly when an entry names it, with the counted bytes its envelope gives.first_unit. A base's units are read in its payload's own format.first_unit. A WAI2 component and its exploded envelope are one base in either form.classical_declaredfrom the WAI2 envelopes it holds in full. A sink that received a WAI2 only as ranges cannot yet state it; that is stated as a limitation of this revision.check_component_roles, now onManifestV2).refineson a base is ignored.wai stage applyandwai stage explodefollow this.components_nonconforming).session_*vector.pin-conformance/selection.jsongains the role cases.differential.pycovers held envelopes as WAI1 and WAI2, aliases, fallback formats, encrypted envelopes and the component-rule sweep.The /measure page that uses this binding is in the site repository. Its binding is rebuilt from this branch reproducibly, by a script that refuses any build carrying a local path.
Checked locally on macOS arm64:
falsify/run.sh;verify_measure.sh(wasm32, native and Python agree);Eight review rounds; every probe from them gives the same verdict in both implementations.
The forge CI runs on this pull request.
🤖 Generated with Claude Code
7ac6deca) into wai/w5-4-measure-web 0dd30b95f11cf132ec) into wai/w5-4-measure-web 272911e83bae9a1ca6: strict Ed25519) into wai/w5-4-measure-web 95ef62b222- §7 step 4 as the text stands: a refinement of the pick is one whose refines.base, read on its own, is the pick's id (container::refinements_naming, refinements_naming in http_verify.py), so one whose refines is otherwise malformed is reported dropped (components_nonconforming). Of a conforming envelope the set is the same as before. - Objects OCF (ONC's conforming twin: refinements [2], dropped []), ONM (refines {base: b} alone: reported) and ONX (refines {base: x}: not reported), on the whole and the range paths; fetch_OR_malformed_refines now reports its refinement; the generator checks each outcome. - falsify: conforming-withheld and refines-read-whole, each with an http_verify.py --mutate, wired into falsify/run.sh; nonconforming-offered's must-fail list extended. Co-Authored-By: Claude Opus 5.5 <[email protected]>