KB-5016 rev 2

FIX7 N-Number Envelope Contradiction Closure Report

4 min read Revision 2
tool-kiem-thufix7codexn6tkt-v022026-06-11
<!-- DOC_STATUS: ACTIVE_NON_AUTHORITY -->

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 .md rev3 → rev4 sha 182a6d9f…b09f3a5fe1; .json rev3 → rev4 sha 138a356b…d127cb55db0bd0187.
  • The envelope is not pinned by hash in any packet HASH_MANIFEST (authority-closure packet has no HASH_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.

Back to Knowledge Hub knowledge/dev/reports/architecture/fix7-n-number-envelope-contradiction-closure-report-2026-06-11.md