open-standards/wai/live-conformance/links/README.md
Transaction Science 57e426c940 live-contribution: the link record's magic is WLK1, no longer the clip record's WCL1
The contribution link record and the live-recording clip record both began WCL1. The clip
record had it first (live-recording §5.1, the registry's only WCL1 row); the link record took
the same four bytes when it was added, so a reader that tells records apart by their magic
could not tell one from the other.

The link record is now WLK1, a magic nothing else in the registry, the code or an open branch
uses. live-contribution §6.2 and SPEC name it, §6.5 step 2 says the clip record's WCL1 is
refused as malformed, and codecs/registry.rs registers it (REGISTRY.md and registry/ exported
from it). joule-moq-ingest writes and reads it. The corpus live-conformance/links/ is
regenerated with it, its files now .wlk1, plus clip_record_magic, a part with the clip
record's magic, refused. live_contribution_verify.py reads WLK1 and also refuses each accepted
part mutated to WCL1.

A wire change: a link record written before this one is malformed to a reader of this
revision. The CHANGELOG says so and acknowledges every corpus file that changed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 05:19:53 -05:00

25 lines
1.4 KiB
Markdown

# links — the contribution link record, `WLK1`
The corpus of [live-contribution](../../extensions/live-contribution.md) §6: parts of the
link record a gateway signs while it receives an SRT or RIST link, and series of them.
- `vectors.json` lists every vector: its `kind` (`part`, one file; `series`, several, in
order), its `files`, its `outcome` and, for a refusal, its `reason` (and, in a series, `at`,
the index of the part refused), for an accepted part its `digest` and a `summary` of its
fields, and a `note` on what it shows. `hop` is the signing key, `hop_seed` the seed it is
made from, so anyone can sign a new vector the same way.
- Each `.wlk1` file is one record's bytes.
Accepted vectors cover each protocol and mode, each key length, a session's last part with
sequence numbers outstanding, a part whose loss runs are truncated, tracks not yet begun,
and series of three parts, one with a track that begins in its second part. Each refused
vector breaks one rule of §6.5 or §6.6 and keeps every other; every reason of §7's last list
refuses at least one.
Written by `joule-moq-ingest-link-vectors --out` (crate `joule-moq-ingest`), from fixed seeds:
`--check` regenerates it and compares every byte. Read by the crate's `tests/link_corpus.rs`,
and by `../live_contribution_verify.py`, written from the text alone:
```
python3 -I live-conformance/live_contribution_verify.py live-conformance/links # from wai/
```