AICENT.COM
← Back to Blog

One family, two ledgers — five refusal records enter a second lab's test records

2026-11-05 · RTTP · IQA
Sources cited in this piece · the invitation, verbatim: Sankalp Gilda on the WIMSE list, 30 October 2026 · the filing itself: probityai/agent-evidence-vectors, issue #453 · the precedent that showed the channel: issue #412 (two vectors, one boundary left open) · the families, sealed with per-file SHA-256: iqa.org/conformance/aicent-grant-ref/ · iqa.org/conformance/aicent-lease-boundary/ · the first ledger: lab PR #210 · lab PR #212 (merged 3 November) · the text the records anchor to: draft-li-rttp-iqa-addressing-02 (retrieved TXT pinned at sha256 02491c5a…) · the two companion pieces: refusal is an answer · the boundary is a declaration · Sister pillars: RTTP (rttp://, CRI 27) · IQA (iqa://, CRI 28)

On 30 October, on the IETF WIMSE list, Sankalp Gilda of ProbityAI answered a question about closed sets with an open door: “A test record from you would help. An issue on probityai/agent-evidence-vectors with the record you expect and its verdict is enough, and it goes into the test records under your name.” Wes Jackson had already shown the channel works — his issue #412 files two vectors against his own draft, one settled as a regression and one deliberately left as an open conflict. On 5 November we filed issue #453: five records drawn from our two vector families, the same twenty-five-and-fifteen cases already merged into the LFDT Agent-Authority-Conformance lab mainline as PRs #210 and #212. One frozen set of vectors, two independent ledgers. This piece records what went into the second one, and why the second one matters.

one frozen family · two ledgersthe same vectors, attributed twice — a governed mainline and a signed test recordledger one · the lab mainlineAgent-Authority-Conformance (LFDT lab)channel: pull request — candidates become corpusreview · merge commit · shared candidates index#210 → 0da1e29 · #212 → 29423aa · 3 Novthe lab records runs and certifies nothingledger two · the test recordsprobityai/agent-evidence-vectors (ProbityAI)channel: issue — a record enters their ledgerfacts + expected verdict + the rule that decides#412 → filed by Wes Jackson · #453 → oursattribution stays with the filer, by designtwo channels, one discipline: the record carries its own citation — family, repository, operator — and neither ledger edits the frozen bytes25 cases (aicent-grant-ref) + 15 cases (aicent-lease-boundary) · sealed as four-file sets with per-file SHA-256 at iqa.org/conformance
Figure 1: the two ledgers. A governed mainline takes a family in through review and merge; a test-record channel takes a record in through an issue and keeps the filer's name on it. The vectors themselves do not change between the two.

What a test record is

The distinction between the two channels is not bureaucratic; it tracks what each operator maintains. The LFDT lab is governed by pull request: a candidate family enters review, gets merged, and becomes part of the corpus that future runs cite. ProbityAI's repository is the opposite arrangement — they maintain the corpora and the reference verifiers, and what an outsider contributes is not code but a record: the facts on record at answer time, one response an implementation could produce, the expected verdict, and the rule — with its section — that decides. The issue is enough because the record is self-contained. Nothing needs to be installed, nothing needs to be run, and nothing in their tree changes; the record simply enters the ledger with the filer's name attached, and stands or falls on whether its expectations can be defended sentence by sentence against the text it cites. That is why the invitation could be one sentence long, and why accepting it took no negotiation — only the discipline of writing records that deserve the name.

Five records, five traps

The five records in issue #453 are not a sample of the forty cases; they are the five cases most likely to make a careless checker reveal what it actually does. Each one is built so that a specific lazy reading passes some neighboring case and fails exactly this one.

Record 1 — the priority twin (GR-P03 / GR-P04). The facts: the evidence the answer relied on has expired, and a revocation is also on record. The vocabulary of §8.1 is a closed set with a fixed order, and the source states the order is part of the definition: the reason is the first value in the list whose condition applies. So a response answering evidence_expired is conformant, and the same facts answered authority_revoked are not — the revocation may be true, but it is not first. A checker that scores any applicable code instead of the first passes one of the twin and fails the other. Set intersection cannot see the difference; the pair exists to make it impossible to miss.

Record 2 — no condition, no reason (GR-P09). Every condition the vocabulary defines is absent, and the operation is permitted on the face of the record. The response emits operation_not_permitted anyway. Nonconformant: refusal values exist only when their condition applies, and a refusal with no condition behind it is not a reading of the source — it is an assertion wearing the source's clothes.

Record 3 — null is the only permit (GR-C04, with GR-C01 and GR-C03 as its edges). The conformant representation of permitted is a null reason over the closed set. There is no affirmative “granted” value (GR-C01 catches one), and there is no sixth value (GR-C03 catches a well-meaning authority_suspended). A checker that tolerates a local extension of the set will pass GR-C04's neighbors and fail here — which is the point: closed means closed, and every extension is a fork.

Record 4 — a diagnostic read does not authorize (GR-N04). The relied-on evidence was stale at answer time; a later diagnostic read succeeded. The response permits, and backfills observation_as_of_ms with the diagnostic instant — 1150. That backfill is precisely the tell. §8.2 holds that diagnostic reads do not participate in authorisation and do not renew evidence, and the null rule is stricter still: on stale facts the only conformant answer is authority_not_determined, and even that answer must keep the member null. The record's sibling GR-N03 scores the backfilled denial nonconformant too — the rule binds regardless of which way the answer goes.

Record 5 — the boundary is a declaration (LB-D01 / LB-D02, with D03–D05 as their frame). The observation's age at the lease instant is exactly the lease length — the same edge Wes Jackson's Vector B tests, which his draft settles one way and the AIMS vectors another. Our draft's §6.1 takes a complementary position: whether the instant counts as fresh or as expired is a deployment convention. A permit at the instant under a declared inclusive boundary is conformant; an expired refusal at the instant under a declared exclusive boundary is equally conformant; a declaration that contradicts use is not; and with no declaration the case cannot be settled at all (LB-D04, ambiguous by design). The frame-acceptance rule of §7.2 (LB-D05) does not decide the reliance convention — frame validity and reliance are different layers. Where the evaluation family needs one number, our family needs one declaration.

the crosswalk · two contracts on the same refusaltheir reason parity is necessary; our priority order is what makes it reproducible — the five records test the differencetheir contract · reason parityat least one emitted code intersects expected.codesa set intersection — order does not enter the comparisonour draft §8.1 · fixed prioritythe reason is the first value in the list whose conditionapplies — the priority order is part of the definitionR-ORDER twin (P03/P04)any-applicable fails exactly oneR-ORDER boundary (P09)no condition → nullR-CLOSED (C01/C03/C04)null is the only permitR-NOTDET (N04)diagnostic ≠ authorizationR-DECLARED (LB-D01–D05)the boundary is declared, not discovereda checker that scores any applicable code instead of the first passes three of the five rows above — and fails the twin, which is the only signal it was ever wrong
Figure 2: the crosswalk. Reason parity as a set intersection says some expected code appeared; the priority order says which one had to. The five records are chosen so the difference between the two readings is not arguable but countable.

The crosswalk, offered as a crosswalk

The issue includes a four-row mapping between their contract and our draft, and it is careful about what it claims: a crosswalk, not an equivalence. Their verifier contract scores reject reason parity as a set intersection — at least one emitted code intersects the expected codes, where declared, and code order does not enter the comparison. Our draft's §8.1 fixes the order instead: the reason is the first value in the list whose condition applies, and the priority order is part of the definition. The two are not rivals; the intersection is necessary and the order is what makes it reproducible. What the records add is the ability to tell the readings apart mechanically: run the twin pair, and a checker's theory of order is no longer a matter of interpretation. Their own transient vocabulary — unavailableInput, in the audit-record family — plays the role our authority_not_determined plays: an unavailable source is never a substantive code and never reads as assent. Different drafts, same floor.

What the records do not claim

The issue closes with the same limitations the families' own CANDIDATE files carry, because the channel deserves them as much as the lab did. The author's runs — 25/25 and 15/15 agree, 21/21 and 17/17 mutants killed, each exit 0 — say nothing about any implementation, and they do not show that the expected results are the right reading of the source. The readings are written out in the CANDIDATE files for anyone to dispute, sentence by sentence, and a correction in a later draft revision overrides the checker. A second batch is ready to file once it can anchor to filed text: the missing-proof classification vectors wait on the evaluation-side wording decision in the next revision of the evaluation draft, by the same discipline — expected values anchor to published sentences only.

Why a second ledger matters

A vector family earns its keep by being used, and being used means being attributed. The lab mainline attributes the family as corpus; the test-record ledger attributes the record as a filing. The two mechanisms are structurally different — one governed by review, one self-contained by design — but they agree on the thing that matters: the frozen bytes do not move, and the citation travels with them. One family, two ledgers, and the same five members of the grant reference on every response. The discipline that made the vocabulary worth writing — the reason is what makes a refusal auditable — turns out to describe the filing, too: a record with its verdict and its section is auditable; a claim without one is just noise in an issue tracker.

One line: the lab took the family; the ledger took the record; the vectors never changed — and the citation, family and repository and operator, rode along into both.

SEALED rttp://75e5620a.blog.aicent · iqa://75e5620a4482cb42ad3017cb449cc32d.forge.iqa · seal record