delivery-telemetry §6.6 reads a CMSD field back into the description §6.1 to §6.3 write, passing over other senders' keys, and refuses with cmsd_malformed, cmsd_type or cmsd_version; §10 lists the extension's CMCD and CMSD custom keys in full, and the registry lists each as a wire identifier of the new kind telemetry-key (and WPJ1, the projection descriptor's magic). telemetry-conformance/cmsd-read/ holds the fields and their outcomes; cmsd_read_verify.py is the second implementation. Co-Authored-By: Claude Opus 5.5 <[email protected]>
4.2 KiB
4.2 KiB
telemetry-conformance — delivery telemetry
The corpus of extensions/delivery-telemetry.md
§9: observations, their CMCD version 2 reports and CMSD fields, and session logs with
their metrics. Every value here is a string or an integer, the same on every machine.
observations/— one observation (§2) each, every event kind among them: requests with the object's members, a response, the play states, the first presentation and a later one (which CMCD does not report), stalls with their metrics, a switch, a layer change, a dropped frame, dispatch outcomes, an abandon, an end with its claim pointer, a low-latency live session, and strings RFC 9651 escapes (a quote and a backslash in a capability in a custom key, a quote in a URL in an Event-mode report).expected/cmcd.json— for each observation: its mode (request,eventornone), its report (§3, §4), and for Request mode its header shards (§4.2).invalid/— observations every reader refuses (§2.4): a member unknown or missing, the wrong version, a session id that is not hexadecimal, an Event-mode observation with no time, an integer past 2⁵³ − 1, a time past an RFC 9651 Integer, a claim before the end, an unknown event, a response key on a request and a request key on a response, a switch to its own path or for an unknown reason, a pin refusal with no reason, an unknown object type, a content id past 64 characters or holding an address or a URL, an object URL with a query, a fragment, user information (behind//, behind backslashes, behind no slash, or behind a mixed separator), a backslash, or a@in its path (§8.2), a presentation at no layer, an unknown cohort.expected/refused.jsonlists them.cmsd/— CMSD-Static descriptions of a base and of a derived layer, and a CMSD-Dynamic field from two nodes (§6);expected/cmsd.json, their fields.cmsd-read/cases.json— CMSD fields to read (§6.6): fields as §6.1 to §6.3 write them, the same with their keys in another order, withv=1and with a key or parameter of another sender, and fields refused with each code of §6.6 (not a Dictionary or List, a duration or throughput as a String, a layer not in decimal or with a leading zero, a short hash, an operation as a String, a server as a Token, a drop count not in decimal, version 2);expected/cmsd-read.json, each one's description or refusal.logs/— session logs (§7.1), one observation per line: a session with stalls, one open at its end; an exit before start; a start failure.expected/qoe.json, their metrics (§7.2).cml/— the differential (§9.3).
Verifiers.
wai_telemetry verify .(from../wai-rs, featuretelemetry): reads every input from disk, requires each observation to write back as given, recomputes every expected file and requires it byte for byte, reads every report back, and requires everyinvalid/observation refused.wai_telemetry gen .writes the corpus.cmsd_read_verify.py(python3 -I cmsd_read_verify.py .): the second implementation of §6.6, written from that text and RFC 9651 and sharing no code withwai-rs: it parses every field ofcmsd-read/with its own RFC 9651 reader and requires each outcome, reads every field ofexpected/cmsd.jsonback to its description, requires §6.6's table to be the codes the corpus gives, and requires every mutated copy of the corpus to fail.cml/differential.mjs(npm ci && node differential.mjs ..incml/): builds each report from the extension's tables in JavaScript, not fromwai-rs's output; encodes it with an independent open-source CMCD and CMSD library at the versionspackage-lock.jsonlocks, in the mode the event fixes, with the header shards for Request mode; requires the bytes ofexpected/cmcd.jsonandexpected/cmsd.json; reads the expected strings back with the library's dictionary, query and header readers and requires the members; and validates every report, and the Event-mode reports together, requiring no error.
Provenance. Generated here: session ids, content hashes and timestamps are fixed values chosen for the corpus. No recorded traffic.