aicent-lease-boundary
our vectors · merged at the lab · PR #212
This family tests the lease of an attestation answer: which
boundary convention an implementation may declare and apply at the lease instant, what an expired
lease still owes, how the declared answer mode shapes the refusal when the organ cannot be reached,
and which expiry a verifier checks. It is authored by us and anchored to our own published
specification — draft-li-rttp-iqa-addressing-02
(Informational, posted 2026-11-01): section 6.1 (The Lease), 6.2 (Answer Modes), 6.3 (Evaluation at
the Moment of Use) and the verification procedure of 7.2. The retrieved TXT copy is pinned at sha256
02491c5a…85044. Every expected value was checked against the published text
sentence by sentence.
The family is open as a candidate at the Agent-Authority-Conformance lab (PR #212), offered for anyone to run: give your implementation each case’s input, record the response it produces, and the checker scores it against the published text. Nothing here is a reviewed fixture; the candidate adds nothing to the lab’s schema, failure classes or verifier behavior.
Rules under test
| rule | what it decides | basis |
|---|---|---|
R-DECLARED | Whether the lease instant counts as fresh or as expired is a deployment convention, so a permit under a declared inclusive boundary and an expired refusal under a declared exclusive boundary are both conformant; a declaration that contradicts use is not; with no declaration the boundary answer cannot be settled; and a frame accepted at the instant under the verification procedure does not decide the reliance convention — frame validity and reliance are different layers. | §6.1, §7.2 |
R-NOEXTEND | An expired lease: an answer read past its expiry is answered
as expired; replaying the original observation as fresh is not conformant; reinterpreting
the lease inside a locally added grace period is not. | §6.1, §6.3 |
R-MODE | The declared answer mode with an unreachable organ: in live mode
the call is refused regardless of the age of any cached answer, and a fresh cache does not rescue
it; in cached-lease mode a policy demanding a current observation refuses with
authority_not_determined while a policy accepting lease-fresh evidence may admit the
call; an expired cache is refused as evidence_expired, the first applicable value. |
§6.1, §6.2, §8.1 |
R-WINDOW | The window length is an operator choice: an answer whose stated lease has not expired is not refused, and refusing it by assuming the 120-second deployment default instead of checking the stated expiry is not conformant. | §6.1 |
Cases
15 cases — 9 conformant, 5 nonconformant, and 1
ambiguous (the undeclared-boundary case, scored in named parts so it can show which part of
the outcome holds and which does not). The full case table — every identifier, its facts at
answer time, and the rule that decides — is in the downloadable CANDIDATE.md and
vectors.json.
Self-check
At the submitted revision, the submitter’s runs on Python 3 printed 15/15 agree and 17/17 mutants killed, each with exit 0. These show that the checker agrees with the expected results and that every rule has a case depending on it, in both directions. They say nothing about any implementation, and they do not show that the expected results are the right reading of the source — that reading is written out in the CANDIDATE.md, one quoted sentence per rule, for anyone to dispute.
Download
| file | size | sha256 |
|---|---|---|
| CANDIDATE.md | 7,844 B | 076693695c6142dabe98046ca4c47bb80bee733309726316f5902a793d56ad6f |
| vectors.json | 10,963 B | 71735739303dcbc248e3939535d754c702d00109cb4c6f1b4a02316ff29d773c |
| check.py | 5,303 B | 74f6d4e78fcaecd6f3a49abe354ad11656b29667b350997f493e54ea3dd04ae4 |
| mutate.py | 3,303 B | d3b87a9c50aadf3a5570bf9907e0addbd6444f962972d7e8fa20a124852147c5 |
Canonical source: github.com/Aicent-Stack/conformance · candidates/aicent-lease-boundary. Merged at the lab: Agent-Authority-Conformance lab · PR #212. License Apache 2.0 (the license of the repository). The candidate reuses no text from the draft beyond short quoted sentences for rule description.
How to run
python3 -I check.py vectors.json
python3 -I mutate.py
check.py recomputes each case’s verdict from its input and
outcome, and compares it with expect and expect_parts.
mutate.py weakens or distorts one rule of check.py at a time —
including versions that always answer nonconformant and always answer conformant — and fails
unless some case catches each change. Zero dependencies; any Python 3.