open-standards/wai/live-conformance/timeliness
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science e253ac952a
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 17s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 17s
wai-app and Create / wai-app · does this change touch it (push) Successful in 29s
WAI operation catalogue / does this change touch it (push) Successful in 28s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 37s
wai-fleet service / does this change touch it (push) Successful in 29s
wai-audit collector and player integration / does this change touch it (push) Successful in 41s
wai-quantum for JavaScript / does this change touch it (push) Successful in 21s
wai-ledger service / does this change touch it (push) Successful in 23s
wai-key-proxy / does this change touch it (push) Successful in 35s
wai-quantum studio and desktop / does this change touch it (push) Successful in 15s
wai-sink-android native sink library / does this change touch it (push) Successful in 16s
wai-sink-swift native sink package / does this change touch it (push) Successful in 14s
WAI Studio / does this change touch it (push) Successful in 14s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Has been cancelled
wai-fleet service / service · linux (push) Has been cancelled
wai-fleet service / service · macos (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Successful in 9m21s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 1m30s
wai-ledger service / service · macos (push) Successful in 1m0s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m24s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 7m3s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 9m34s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 14m21s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 6s
wai-audit collector and player integration / collector · linux (push) Successful in 2m6s
wai-key-proxy / proxy · linux (push) Successful in 2m9s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m53s
wai-ledger service / service · linux (push) Successful in 3m14s
wai-quantum for JavaScript / javascript · linux (push) Successful in 3m26s
wai-quantum studio and desktop / studio · browser (push) Successful in 6m12s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 8m52s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 4m49s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 5m3s
WAI Studio / Studio in WebKit · linux (push) Successful in 12m24s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
wai: a statement or wanted object of the wrong shape is refused for it
A statement in symbols that is not an object, with a bearer_id that is not a
string, or with a malformed group or index is now symbols_invalid, at plan
level and as run check 7, where the reader used to return an error. Section
7.1 states the rule for group and index: 64 lowercase hexadecimal digits, and
an integer from 0 to 2^53 - 1.

A new reason, wanted_invalid, is the last of section 7.1's checks. It refuses
a wanted that is not a list, an entry that is not an object, a malformed group
and an index that is not an integer in that range. A run raises it at check 2.
One object wanted twice stays plans_invalid, and an entry section 7.1 refuses
names no object, so two of them alike are wanted_invalid. No case in any corpus
changes. A position past 2^53 - 1, which no case carries and which read as
deadline_not_stated, is now refused.

Both readers derive these outcomes from the JSON, and the generator writes the
forms the typed inputs cannot hold over a built case's JSON. Existing cases are
byte-identical.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-06 18:09:39 -05:00
..
README.md wai: a statement or wanted object of the wrong shape is refused for it 2026-11-06 18:09:39 -05:00
vectors.json wai: a statement or wanted object of the wrong shape is refused for it 2026-11-06 18:09:39 -05:00

live-conformance/timeliness — when an object is of use, and whether it was held in time

The corpus of extensions/timeliness.md §10, in one file, vectors.json.

Provenance. Generated here by wai_timeliness_vectors gen (wai-rs, feature timeliness), from Ed25519 keys on fixed 32-byte seeds, constant instants, and envelopes whose payloads are opaque test bytes written by the generator; no media and no input from outside this repository.

keys names every key by its role, as 64 lowercase hexadecimal digits: the publisher's (did:web:publisher.example#d1), another of its origin's (publisher_other, did:web:publisher.example#d2), and three holders' (holder_a, holder_b, holder_c). groups names the link hash of each group the cases use, all the publisher's, all starting at 2026-11-03T00:00:00.500Z: G, three bases and a layer of wai.image.int_refine (object 3); F, a floor of each of G's objects, its manifest's derived_from.motif the content hash of G's object at the same position; F_other, F with object 2's floor derived from G's object 1; and H, two objects, the second a WAI2; and E, another floor of each of G's objects, derived as F's are, the ladder's higher rung. G's entries, used throughout, have from_ms 1,793,664,000,000 (2026-11-03T00:00:00Z) and by_ms a minute later: entry 0 falls to 600,000 two seconds after its deadline and to 0 ten seconds after, with F's object 0 at 400,000 as its fallback; entry 1 is a hard deadline with no fallback; entry 2 holds 700,000 from one to five seconds after, and 0 a second later, with F's object 2 at 1,000,000. The ladder cases and the runs give entry 0 the ladder E's object 0 at 700,000, then F's object 0 at 400,000.

  • claims (§4.1, §4.2; jwp-receipts §3.1 steps 1 to 4) are each a claim's wire form, claim, and its outcome: accept, or reject step=N reason=R.
  • values (§5) are each an entry read alone and an instant at_ms; outcome gives the entry's value_ppm at that instant and its end_ms (§5.2). No value case's entry has a fallback.
  • verdicts (§6) are each the groups given, in order, each its group receipt and its objects, a receipt and its envelope in hexadecimal or null; the claims, in order; the holdings records in hexadecimal; and a statement offered (§6.4), {group, index, holder}, or null. outcome is refuse reason=R when a group fails jwp-receipts §3 steps 1 and 2, and otherwise gives: objects, each group's object verdicts (delivered-verified, inclusion-verified, reject reason=…); claims (accepted, or reject step=N reason=R); records (stands, set-aside reason=holdings_contradicted, reject reason=…); intents, in the order of the groups given and then of leaf_index, each with its group, leaf_index, intent (stands, or set-aside reason=timeliness_contradicted), end_ms (null for one set aside) and lines, in increasing order of the holder's key bytes, each its holder, held_ms (p), fallback_ms (f: one instant or null, and for a fallback written as an array the list of each rung's, in the ladder's order), outcome and value_ppm; and statement, {outcome, value_ppm}, reject reason=deadline_not_stated, or null.
  • plans (§7) are each a verdict's groups, claims (timeliness, transmission and schedule) and records; loss_ppm and overhead, both integers or both null; at_ms, an instant or the string from_ms; the sources in the asker's order, each exactly {kind: "bearer", bearer_id}, {kind: "holder", holder, fetch_ms} or {kind: "origin", fetch_ms}; the wanted objects, each {group, index}; and, in a plan that states what its asker holds, symbols, each {bearer_id, group, index, held}, held one number for each source block. outcome is refuse reason=R, or gives claims (accepted, declared, stands, extended, set-aside reason=…, reject step=N reason=R), records as a verdict's, and choices, one for each wanted object: {outcome, object, rung, source, arrival_ms, value_ppm}, with object primary, fallback or null, rung the rung's index in the ladder or null unless object is fallback, and source an index into sources or null, or reject reason=deadline_not_stated.
  • runs (§7.5) are each a plan's groups, claims, records, loss_ppm and overhead, shared by the run; its plans, each {at_ms, sources, wanted} as a plan case writes them; and the sink's arrivals, each {group, index, at_ms}, the trace of what it first held and when. A run that states when the sink first held its groups, claims or records also has groups_at_ms, claims_at_ms or records_at_ms, a list with one entry for each, an instant or null, or receipts_at_ms, a list for each group with one such entry for each of its object receipts. A run that states what the sink held of objects on bearer instances also has symbols, each {bearer_id, group, index, at_ms, held}, in the order of its clock. A case meant to be refused for its form writes that form: an instant, a number or a position as a string or a fraction, a hash as anything but 64 lowercase hexadecimal digits, a list or an entry as an integer or null, or a member left out. outcome is refuse reason=R, or gives plans, each plan's choices as above, in a run that states instants of its groups, object receipts, claims or records read, each plan's {claims, records} labels with not-held for what it did not read, and decisions in the order taken, each {at_ms, plan, action, group, index, object, rung, source, value_ppm}: action is fetch, abandon, present, passed or ended, and a member that does not apply is null.

The plans' schedules are G's objects 0 to 2 on urn:example:bearer:b1 and F's objects on b1 and on urn:example:bearer:b3, each declared unidirectional: RaptorQ, one source block of eight symbols of 128 octets and two repair symbols a pass, advance, ten passes of a second every ten seconds from 2026-11-03T00:00:00Z. At the plans' loss bound of 500,000 and overhead of 2 a receiver gets 5 symbols a pass and needs 12, so it holds an object at the end of its third pass. The cases that state symbols hold F's object 0 on b2 under a schedule of four passes, so from 2026-11-03T00:00:16Z two passes are left, too few from nothing and enough from what they state. urn:example:bearer:b2 is declared bidirectional.

Everything is synthetic: keys attest nothing, the publisher's origin is a reserved example domain, and bearer instances use the example URN namespace. Each case states the outcome it was written to have, declared in the generator, never copied from a verifier.

wai_timeliness_vectors verify and tests/timeliness.rs check that the file regenerates byte for byte and that wai-rs reaches every stated outcome, the runs' through timeliness::scheduler. ../timeliness_verify.py is the second implementation, written from the extension's text, which also mutates copies of the corpus and drops each of its own checks in turn and requires each to be caught.