| Filename | Latest commit message | Latest commit date |
|---|---|---|
live-events §4.12 points at the payload capture binding defines; jwp-receipts §7.5 registers capture/store and §7.6 consent withdrawal through revoked_modules. Co-Authored-By: Claude Opus 5.5 <[email protected]> |
||
| .. | ||
| README.md | ||
| vectors.json | ||
live-conformance/takes — capture binding
The corpus of extensions/capture-binding.md §13:
takes, each a room (a signed WRD1 descriptor, its WRG1 grants, the head of its
authority's key log, and its principals' WEV1 chains, the device's take_commit events
among them), a device-signed WTM1 take manifest, the uploaded parts, the store's WUR1
upload receipts, WCN1 consent records, and an evaluation instant, with the outcome a take
verifier gives them.
Take equivalence. For each vector, a conforming take verifier given its room, its
manifest, its parts (each an index and its bytes, in the order received), its
receipts and consents in order, and its evaluated_at (seconds since 1970) reaches the
outcome the vector states (§9.5):
refuse: thereasonand where,at:["room", …]with the room verifier's own place (live-rooms §9.1),["manifest"],["record", c, i]for recordiof chainc,["store"],["receipt", i]or["consent", i];verdicts: thetakeid and itsstream_id(§11.1); the digests of the held commitments,commits, in order; the last held commitment'ssizeandroot; theverdictsofsingle_take,aligned,completeandpublishablefor each oflive,record,distributeandtrain, eachholdsor the reason it fails; whether the manifeststands; and themarkersof the room within the master (§10), each with itseventdigest, itst, itschunk, and its positioninto_chunkandinto_masterin microseconds, stated wherealignedholds.
A verifier that reaches another outcome, reason, place, verdict, digest or position does not conform.
Provenance. Generated here: wai_capture_take_vectors gen writes every descriptor,
grant, key-log head, record, chunk, manifest, receipt and consent from takes authored in
code, from fixed seeds. Each key is SHA-256 of a fixed label and the principal's index, each
chunk's bytes SHA-256 output under a fixed label and the chunk's index (they stand for an
encoded master and encode nothing), every time is a constant (the rooms' t0 is
2026-10-16T00:00:00Z), and Ed25519 signing is deterministic (RFC 8032), so the file is the
same bytes on every machine. The generator asserts that each vector reaches the outcome it
was written to have before it writes it. The key-log heads are sealed by the reference's key
log (jwp-receipts §7.2) under a fixed root. The origins are .example names (RFC 2606). No
recorded data.
Layout
One file, vectors.json:
principals: the keys, by name (informative).vectors: each withname,about,descriptorandgrants(hexadecimal),key_log_head(a key-log revision's JSON text, ornull),chains(lists of records in hexadecimal),manifest,parts,receiptsandconsents(hexadecimal),evaluated_at,outcome, and as abovereason,at,take,stream_id,commits,size,root,verdicts,standsandmarkers.
Every take is in one lesson room: a director with the record power, the performer's device
under a grant whose subject attribute names the performer, an audience; a recording policy
of mode 1, a two-second commit interval and 500 ms of jitter, pinned to DE and FR; a key log
listing the room authority and the store. Vectors:
- good takes:
lesson(the director'srecord_startwith a four-second count-in, ten one-second chunks committed every two seconds, two markers,record_stop, the closing commitment, an upload sealed in DE, the performer's consent to live, record and distribute),resumed_upload(the upload interrupted after four chunks and resumed, chunk 3 sent twice) andminor_guardian(a performer the grant marks a minor, under the guardian's consent); each stands, andpublishablefortrainfails; - the negatives of §13, each a single defect:
commit_gap,spliced_chunk,reordered_chunk,extra_chunk,missing_chunk(completefails andsingle-takeholds),late_commit,root_not_extending,misaligned,consent_missing,consent_expired,consent_revoked,minor_without_guardiananddevice_not_bound; - one vector for each other reason of §12, a manifest of another room, a manifest and a consent with a bad signature, and a room that refuses the device's first commitment.
Running
cd ../../wai-rs
cargo run --no-default-features --features capture_take --bin wai_capture_take_vectors -- verify ../live-conformance/takes
cargo run --no-default-features --features capture_take --bin wai_capture_take_vectors -- gen ../live-conformance/takes # regenerate
cargo test --no-default-features --features capture_take --test capture_take
cd ../live-conformance
python3 capture_take_verify.py takes
wai_capture_take_vectors verify and tests/capture_take.rs require the file to regenerate
byte for byte and wai-rs to give every vector its outcome; the test also requires every
reason of §12 and delivery_gap to appear, the three good takes to stand, and §12 to list
exactly the reasons the reference reports. capture_take_verify.py is the second
implementation, written from the extension's text and sharing no code with wai-rs: it
verifies the room with live_rooms_verify.py (which verifies every event with
live_events_verify.py), gives every vector the same outcome, requires the same coverage,
and then mutates copies of the corpus, one defect each (a part's byte, two parts swapped, a
part dropped, a signature's byte, a descriptor's byte, the seal removed, a consent's byte, a
commitment not delivered, a later evaluation instant, and stated roots, ids, positions,
verdicts, places and reasons changed), each of which must fail. Pass = an exit status of 0
from each.