AICENT.COM
← Back to Blog

Re-anchored: V1.3.2 points every vector at the draft

2026-11-10 · IQA · RTTP
Sources cited in this piece · draft-li-rttp-iqa-addressing-02 (40 pp., 2026-11-01, TXT sha256 02491c5a) · iqa.org/challenge/ (frozen vector sets, new pins) · crates.io rttp 1.3.2 · crates.io iqa-org 1.3.2 · PyPI rttp 1.3.2 · PyPI iqa-org 1.3.2 · npm @aicent/rttp 1.3.2 · npm @aicent/iqa 1.3.2 · spec pages rttp.com/URI/ · iqa.org/URI/.

Version numbers usually mean new features. This one means something stricter: V1.3.2 changes where the vectors point, and nothing about the vectors themselves. The two-pillar work — RTTP(rttp://)resolving where and when, IQA(iqa://)stating whether — publishes conformance vectors with every package, and each vector carries a spec_ref saying which document defines the rule it tests. Until 1.3.1 those references pointed at our own site readers, AICENT-002 and AICENT-009. V1.3.2 re-anchors them all to one document: the Internet-Draft draft-li-rttp-iqa-addressing-02, pinned at TXT sha256 02491c5a.

THE 87-ROW REMAProw by row · against the draft's text · nothing hidden87rows, remapped85 ROWS → draft-li-rttp-iqa-addressing-02RTTP → §§4 / 7.1 · IQA → §§4.2 / 5 · AE-128 → sec. 7.2inside the 85: 1 CONFLICT — negative-URI 15, §4.1 permits the leading hyphen the vector rejects2 WEAK — AE-128 flags 0x0001 / organ 0xFF, backed by the field table, not yet a MUST-reject2 ROWS → AICENT-002/009 · Ed25519 envelope beyond what -02 specifiesVECTOR BYTES UNCHANGED · hex zero-change · only anchors and text fields moved

The remap was done the only way that survives an audit: row by row, 87 rows, against the draft's text. 85 rows re-anchor cleanly to the draft's sections — the RTTP families to §§4 and 7.1, the IQA families to §§4.2 and 5, the AE-128 envelope layout to sec. 7.2, which the draft now carries normatively. Inside those 85, two kinds of rows are flagged rather than hidden. One row is a CONFLICT against our own draft: negative-URI case 15 expects a leading hyphen to be rejected, but the draft's §4.1 grammar, read literally, permits it — recorded as a conflict, to be tightened in the next revision. Two rows are WEAK: the AE-128 checks for flags 0x0001 and organ 0xFF are enforced by the vectors but only backed by the field layout in §7.2(1), not by an enumerated MUST-reject — also queued for the next revision. Two rows stay where they were: the Ed25519 attestation-envelope vectors test machinery that exceeds what -02 specifies, so they keep citing AICENT-002/009 — an honest boundary rather than a silent stretch.

Then the release itself: six packages across three ecosystems, all at 1.3.2. crates.io: rttp 1.3.2 and iqa-org 1.3.2. PyPI: rttp 1.3.2 and iqa-org 1.3.2. npm: @aicent/rttp 1.3.2 and @aicent/iqa 1.3.2 — the bare iqa name on npm is blocked by typosquatting protection, so the package lives under the organization scope, same as its sibling. Every published tarball was downloaded back from its registry and compared byte for byte against the locally built artifact before the release was called done.

One version, three ecosystems, six packagescrates.iorttp — 1.3.2iqa-org — 1.3.2cargo install / dependencyPyPIrttp — 1.3.2iqa-org — 1.3.2pip install rttp / iqa-orgnpm@aicent/rttp — 1.3.2@aicent/iqa — 1.3.2npm install, ESM + CLIall six carry the same re-anchored vectors · all six verified by downloading the published artifact backPublished 2026-11-09 · measured against the registries, not against our own notes.

The self-tests that ship inside the packages were re-run before publication, and per our discipline the numbers travel with the version: rttp 1.3.2 Python self-test 83/83 (80 passed, 3 skipped), Node node --test 21/21; iqa 1.3.2 Python self-test 111/111 (108 passed, 3 skipped), Node node --test 19/19; Rust sides re-run green on their toolchains (rttp 13 unit + 1 doc; iqa 18 + 2 doc, 20 + 2 doc on the ed25519 profile). The JS metadata tests are themselves consumers of the anchors — one of them deep-asserted the old applies_to values and had to be re-anchored with everything else, which is exactly what a real consumer is for.

One more thing moved with this release: the spec pages themselves. The dual-pillar URI reference now lives at rttp.com/URI/ and iqa.org/URI/, and every README in the six packages cites those addresses — with the frozen snapshots and the changelog history left append-only, as history should be.

Why this release matters more than its version number suggests: conformance vectors are promises with addresses. A vector that says “this byte sequence must be rejected, because section such-and-such says so” is only as good as its citation. As of 1.3.2, every published vector for both schemes points at one pinned document — the same draft that is under IETF review, the same bytes anyone can hash and check — and the frozen vector sets themselves are pinned and downloadable at iqa.org/challenge/, so every promise on this page can be replayed without installing anything. When the draft moves to -03, the vectors will say so too, row by row, conflicts included.

SEALED rttp://1e48a745.blog.aicent · iqa://1e48a745d9bd8116504d6cd441998fba.forge.iqa · seal record