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
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]>
88 lines
7.1 KiB
Markdown
88 lines
7.1 KiB
Markdown
# live-conformance/timeliness — when an object is of use, and whether it was held in time
|
|
|
|
The corpus of [`extensions/timeliness.md`](../../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.
|