Six families, one draft
Sources cited in this piece · draft-li-rttp-iqa-addressing-02 (pinned digest 02491c5a) · family pages iqa.org/conformance/ (six pages, each with downloadable four-piece kit and checksums) · lab PRs #210 · #212 (merged 3 November 2026) and #221 · #222 · #223 · #224 (filed 9 November 2026) · runner repository github.com/Aicent-Stack/conformance.
A vector family is a small machine for testing whether a document means what it says: take one section of a specification, derive concrete cases from it — inputs, expected verdicts, refusal reasons — freeze the bytes, write a checker, then write a second program whose only job is to try to break the checker. If the mutants get caught and the cases agree, the section's semantics are pinned to something anyone can replay. This post is the census: the two-pillar work — RTTP(rttp://)resolving where and when, IQA(iqa://)stating whether — now has six such families, all derived from one document, draft-li-rttp-iqa-addressing-02.
The counts first, because censuses should start with numbers. grant-ref: 25 cases, 21 mutation probes. lease-boundary: 15 cases, 17 probes. ae128-fail-closed: 19 cases, 15 probes. pulse-header: 24 cases, 19 probes. uri-grammar: 26 cases, 13 probes. route-shard: 16 cases, 9 probes. The full-family recorded run — all six checkers plus all six mutators in one pass — comes out at 125/125 cases agreeing and 94/94 mutants caught, byte-replayable from the sealed artifacts on the family pages.
What the four new families actually test, one breath each. Pulse header (24 cases, 19 mutants) is the wire itself: the fixed 128-octet frame layout of Section 7.1 checked by fixed comparison, the extension-block rules of Section 7.1.1 — the SPEC_REV set, the FLAGS bits, the ACTION character grammar, length and padding, the RESERVED bytes — and the time-and-order semantics of Section 7.1.2, where TTL forwarding and TIMESTAMP age meet their boundary against standing. Frame cases are concrete 128-octet headers; behavior cases hand the checker a frame, a role and an outcome, and ask whether the pinned text allows it.
AE-128 fail-closed (19 cases, 15 mutants) is the attestation envelope's refusals: the parse-time rejection rules a receiver MUST apply before doing any cryptographic work, the canonical HMAC rule whose frame-wide coverage makes any rewrite of the organ tag, the nonce or the standing byte detectable, and the published vector AE128-VECTOR-1 that every implementation must reproduce byte for byte. Every case is a concrete 128-octet frame, and the checker re-derives every decision from the frame bytes alone, using only the rules the source text states.
URI grammar (26 cases, 13 mutants) is the string-level face of rttp://: the ABNF of Section 4.1 — three dot-separated segments, hash-intent versus name-intent, a single-segment action — and the exclusions of Section 4.2, which close the door on uppercase canonical forms, userinfo, ports, queries, fragments, percent-encoded octets in a canonical URI, and any rttps fallback. Each case is one URI and the grammar decision the pinned text forces.
Route shard (16 cases, 9 mutants) is the derivation: SHA-256 over the ASCII of the canonical authority, first 16 octets, together with the boundaries that keep the function honest — scheme, // and action excluded from the input; uppercase refused rather than normalized; non-ASCII refused; and the display-form red line of Section 9.1, under which the 8-hex display form must never be the sole identifier of a subject. Derivation cases pin full 16-octet addresses; property cases pin outcomes.
Two of the six are already mainline: grant-ref and lease-boundary were merged into the lab's main branch on 3 November as PRs #210 and #212. The other four were filed this week — #221 ae128-fail-closed, #222 pulse-header, #223 uri-grammar, #224 route-shard — each as its own branch, its own four-piece kit (candidate document, vectors, checker, mutator), its own CI run across the lab's six gates. They wait in the queue like everyone else's; no dates are promised.
Now the part we are proudest of, and it is not the pass rates. Four of the new vectors mark places where our own vectors are stricter than the letter of our own draft: the AE-128 checks for flags 0x0001 and organ 0xFF, and two uri-grammar cases on the leading hyphen, where the draft's §4.1 grammar read literally permits what the vectors reject. Each of these rows is labeled for what it is — an authoritative tightening, dated as an author decision of 9 November 2026, disclosed on the family pages and in the lab filings rather than smuggled in as if the draft had always said it. A conformance suite is also a mirror: it shows the author where their own text is loose. We would rather show the looseness in public than let a stranger find it first.
One classification note, stated the way the lab's charter asks: the recorded family run is author-produced, Mode A — we wrote the vectors, the checkers, and the run. That is the honest label for this census; the independence work happens elsewhere, when others run our bytes or we run theirs, and those runs carry their own attributions. What the author-produced run establishes is narrower and still useful: the six families are internally consistent, the mutants all die, and every artifact is downloadable with its checksum today.
Six families, one draft. The pass rates are the least interesting number here — of course our own checkers pass our own cases. What matters is that the draft's semantics now exist as frozen, replayable objects in a public lab's queue, that every family can be fetched and rerun without asking anyone, and that the four places where our text is tighter than our draft are labeled as exactly that. The draft does the promising. The families keep the receipts.