The change of wai/one-way-delivery (f1258784d..987625394, 28 commits), on the fix branch: its changelog entries as files of wai/changes/, its wai-conformance.yml edits as step files, corpus files and test tags, and every other file as the branch has it. - 25240c4f0 wai: timeliness — when each object of a group is of use, and whether each holder held it in time - c84992362 wai: timeliness_verify.py — the timeliness corpus's second implementation - 44036fcdc wai: timeliness in the registry, SPEC §5, the changelog and CI; http_receipts.py checks its claims - 27ce6754c wai: claim_verify.py lists not-held-by-deadline, and the claim corpus holds a session that switches for it - 73d8d8eb9 wai: timeliness corpus — each holder's own line in key order, a holder's earliest fallback, and §7.2–§7.3's unreached plan rules - 64c735f0c wai: the files timeliness changes are clippy-clean — a let chain, and the fetch callback's type allowed - b72dc36bf wai: rung price — what delivering a rung costs, by bearer and direction, and which option a comparer takes - 4e905e213 wai: rung_price_verify.py — the rung price corpus's second implementation - 711fa6126 wai: rung price in the registry, SPEC §5, the changelog and CI - 8ab70654e wai: rung price corpus — a refusal for every form rule 1 and §6.1 set, and the neighbour order a plan gives - 1bc465959 wai: rung price ranks energy by checked evidence — a class counts only on the seller's own per-hop records, current and under a confirmed key - 9e97997d9 wai: rung_price — the evidence text bound at its exact sizes, and a key confirmed for another class confirming nothing - 8f1168683 wai: rung price corpus — a key confirmed for another class, the uncertainty product, each edge and order of the evidence verdict, and the evidence a plan read - 7330e26ff wai: rung price — §6.1 links jwp-receipts at its first mention, and §10 says a record's age is its room's word - 12c099457 wai: cache authority — who served what a node holds, and on whose authority - f8f5d3e09 wai: cache_authority_verify.py — the cache authority corpus's second implementation - 354146619 wai: cache authority in the registry, SPEC §5, the changelog and CI; its corpus holds what §12 states - 55c7f3031 wai: timeliness §6 reads holdings records alone; cache-authority §9 derives the lines that read every kind - b8fc6f02b wai: cache authority's lines read records as timeliness does, its deadline claim meets the envelopes held, and its corpus fixes each order and instant - 91c5291cf wai: the files cache authority changes are clippy-clean — a boxed envelope, the base's names named once, slices borrowed - 8e479daff wai: a held envelope boxes both its forms, so neither outweighs the other - 3ec8da807 wai: impression aggregates — ad presentations counted over a bearer with no return path - 0433a35c3 wai: impression_aggregate_verify.py — the impression aggregates corpus's second implementation - 7d8e150e4 wai: impression aggregates in the registry, SPEC §5, the changelog and CI; its corpus states each receipt whole and a control for every malformed file - d5e8ace02 wai: impression aggregates' size bounds are checked at their edge, and §4.3's decides no outcome - 4bc8e13bd wai: impression aggregates' table totals are exact, and a receipt given twice is checked when either occurrence was - 3c9f20524 wai: key_log's two result enums keep their public form, and say so to clippy - 987625394 wai: Item::with_authority and Count::instance_received build only with the feature that calls each Co-Authored-By: Claude Opus 5.5 <[email protected]>
5.5 KiB
live-conformance/impressions — ad presentations counted over a bearer with no return path
The corpus of extensions/impression-aggregates.md
§11, in one file, vectors.json.
Provenance. Generated here by wai_impression_aggregate_vectors gen (wai-rs, feature
impression_aggregate), from Ed25519 keys, salts, report ids, Prio3 randomness, HPKE ephemeral
seeds and token nonces and salts that are SHA-256 of a fixed label and a name; constant instants;
and manifests, records and claims written by the generator. The issuer key is RFC 9578 Appendix
A.2's first test vector, as the presentation corpora use it, and every token is signed with it by
RSASSA-PSS over a salt from a seed. The reference aggregators of wai-rs run every flow. No media
and no input from outside this repository.
flight gives the flight's first hour (first_hour, in time_precision units), its length and
its start in milliseconds. keys names every key by its role, in hexadecimal: the task origin's
keys t1 and t2 (aggregate/task) and d1 (delivery alone), a stranger origin's s1, the
stitcher and a stranger stitcher, the three statement keys and a stranger's, each aggregator's and
the collector's HPKE configuration and private key, the verification keys' seed, and the issuer.
fixtures holds what cases name: the creatives A, B and C; the manifests as text (mpd,
mpd_short without the first two events, playlist); the pod-input records with what each is;
the catalogues flight, open and bound (the flight's with a hold of 3,599 s); the tasks; the
key logs (rev0, rev1, which revokes t2 and arrives on the bearer, and stranger); the
anchor records (pinned at rev0, fetched); receiver, the revisions and anchors a receiver
holds; and the task files flight, open and twin.
catalogues(§4.3) are each a catalogue'sbytes;outcomeisread, with itsdigest, itscellsand itschunklength, orrefuseand itsreason.tasks(§5.3) are a TaskConfiguration (task) and acatalogue;outcomeisaccept, with thetask_idand theretention_s, orrefuse.task_files(§5.4) are a file'sbytes, therevisionsand theanchorsheld, by fixture name;outcomeisaccept, with the file'sdigest, thetask_idand theconfirmationas jwp-receipts §7.4 reports it, orrefuse.contributions(§6.2) name atask_fileand arecord, and give the session'sclaims(the last is the one judged), theregion,at_msand thepool; every manifest and creative offixturesis held, and the task file is accepted underreceiver.outcomeisreport, with thecell,creative,column,quartile,time, the reportid(freshwithout attestation) and the pool idsdiscarded, orno_reportwith itsreason.flows(§6–§7) are end to end:reportslists each report, a presentation with itsrecord,claim,region,at_msand its contribution's cell, or a report written to fail with theerrorand the WAIreasonit meets;stepsare, in order, each upload (theWIU1file, the leader'sresponseas DAP UploadErrors and itserrors, and for a relay's merge itssourcesand each source'ssharesof the response), the aggregation job (its request, response and each report'soutcomeandreason), and each collection atnow_s(processing, a DAP problem type, orcompletedwith every message, theresultand the signedreceipt). Theflightflow'slatereport is uploaded after its batch's collection.uploads(§6.4) are a file'sbytes;outcomeisread, with thetask_idand theids, orrefuse.plans(§6.5) are thestoredreports, the instantt_msand thebudget, under the open task file;outcomegivessend(each id and its class),defer,dropand thefile.settles(§6.6) are the filesentand theresponse;outcomegives whether itsettles, and the ids todeleteand tokeep.receipts(§8.1) are areceipt, acatalogueand the batch'sreports(ornull);outcomeisaccept, with telemetry-aggregation §8.2's fields andreports_checked, orrefusewith itsreasonand where (at).tables(§8.2) are acatalogue, ataskandreceipts, each with its reports ornull;outcomegives each receipt'sdigestandverdict, a standing one's batch, instants, count androws, and thetotals; orrefuseand itsreason.
Everything is synthetic: keys attest nothing, the key logs are test logs, origins are reserved example domains, and regions are ISO 3166-1's user-assigned codes and subdivisions of them. Each case states the outcome it was written to have, declared in the generator, never copied from a verifier. The size bounds of §5.4 and §6.4 are carried by no vector; both implementations check each at its edge: a file of exactly the bound that reads in every other respect is read, and the same file one byte longer is refused. §4.3's bound decides no outcome, so neither checks it.
wai_impression_aggregate_vectors verify and tests/impression_aggregate.rs check that the file
regenerates byte for byte and that wai-rs reaches every stated outcome; the test also checks
the equivalence the extension's §11 describes, which is not stored. ../impression_aggregate_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.