FIX7 N-Number Envelope Contradiction Closure Report
FIX7 — N-Number Envelope Contradiction Closure Report (2026-06-11)
- Host: T1 / Claude Code. Codex consulted: NO. Owner approval: NO. Production mutation: NO.
- Closes: Codex
CODEX-NNODE-ACTIVE-CONFLICT. Object IDs: TKT-OBJ-275 (report), 286 (envelope rev4). - Change class: labels-only / engineering convention. NOT owner/Codex ratification. No field name, roster order, N7 byte rule, DAG edge, digest, or authority semantics changed.
1. The contradiction (Codex-found)
| Surface | Stale label | Canonical meaning | Patch needed | Authority impact |
|---|---|---|---|---|
n7-approval-event-input-envelope.md rev3 §5 roster |
membership_sha256 (N1) |
membership is un-numbered active_corpus_membership_sha256 (pin f2bda8…); S3:N1 is a deprecated alias |
YES (relabel) | none (no math/edge change) |
canonical reconciliation table fix7-n-node-numbering-reconciliation-…json |
N1 = normalized_active_content_sha256[d] (per-doc); membership decision = "name 'membership'; STOP numbering N1/N2" |
— | — | — |
…envelope.json rev3 (n7_roster, dag) |
none — dag N7=[N2,N3,N4,N5,N6,N1] is already canonical (N1=per-doc, bound transitively) |
consistent | NO (rev4 note only) | none |
Ratifying the proposed table while the active authority envelope still bound membership as N1 would have preserved two conflicting meanings of N1. The canonicalizer already defines N1 as the per-document normalized-content digest.
2. The patch (rev4, labels-only)
.md §5 roster: membership_sha256 (N1) → membership_sha256 (membership — un-numbered). Added a rev4 header note + a §5 reconciliation paragraph stating: membership is un-numbered per the canonical table; (N1) was a deprecated alias (S3:N1); N1 is the per-doc digest bound transitively through N6; N2…N6 were already canonical; encoder field name / roster order / N7 byte rule / DAG edges (N7 → N2,N3,N4,N5,N6,N1) / digest math UNCHANGED; not ratification (G-DOC-1).
.json: rev 3→4 + rev4_change note recording the labels-only reconciliation. n7_roster, dag, value grammar, provenance, missing-authority-inputs UNCHANGED.
- envelope
.mdrev3 → rev4 sha182a6d9f…b09f3a5fe1;.jsonrev3 → rev4 sha138a356b…d127cb55db0bd0187. - The envelope is not pinned by hash in any packet
HASH_MANIFEST(authority-closure packet has noHASH_MANIFEST; real-N6 + alignment packets pin only their own files), so no manifest/tree update was required.
3. Executable closure proof
envelope_conformance_probe.py imports the governed n_node_checker.py (4fdf7d24…) and binds it to the live KB-fetched rev4 envelope. cwd: clean reconstruction dir.
| Check | Result |
|---|---|
envelope no longer contains membership_sha256 (N1) |
PASS |
| envelope annotates membership as un-numbered | PASS |
checker accepts membership named membership (canonical) |
PASS |
| checker rejects membership-value under N1 (R4_VALUE_WRONG_NODE) | PASS |
checker canonical N1 = normalized_active_content_sha256[d] |
PASS |
envelope N2/N3/N6 labels still canonical |
PASS (×3) |
ENVELOPE-CONFORMANCE: 8/8 PASS, exit 0. Independently, n_node_checker.py --selftest = 15/15 PASS (6 positive + 9 bad-label rejects incl. R1 N2:=membership, R4 wrong-node, R2 unknown-N10).
4. Verdict
CODEX-NNODE-ACTIVE-CONFLICT is CLOSED at the engineering/label layer: the active N7 authority envelope no longer labels membership as N1, and the canonical checker agrees. Binding numbering ratification remains an owner/Codex act (G-DOC-1) — explicitly not performed here.