Spec-layer sync + proposal complementarity + close
Goal
- Sync the rules-layer spec so the new enforcement is discoverable next to
PHASE-54. - Record the draft-proposal complementarity and prove the north-star gate end-to-end.
Implementation Sketch
- Update
canon.md §7.5‘already-landed enforcement’ to name the consumer-SSOT registry + lint alongsidePHASE-54. - Record complementarity with
single-semantic-authority-tooling-proposal.md(draft) in HISTORY: its tooling-consumer case registers in this SSOT once tooling is built. - End-to-end north-star verification: unregistered-consumer fixture rejected + real tree green + the three rules present and citing the backing.
Spec References
canon.md §7.5; proposals.md (draft complementarity, no proposal edit here); missions.md §How to use.
Work Items
- Fix the phantom probe_ref shared by TWO success criteria this section owns or terminates: the section-local sc-ff165de905 (owner_section_id: s-3c90c7fe) and the PLAN-WIDE functional sc-344fce343b (owner_section_id: null, kind: functional — the north-star gate this plan-terminating close mechanically evaluates per missions.md §How to use — the mission-chain audit). Both currently carry the identical probe_ref ‘python -m scripts.consumer_ssot_lint —self-test’ — verified live: zero files matching consumer_ssot_lint exist anywhere in the repo (ModuleNotFoundError on invocation). This is the FIFTH instance of the exact defect class the four completed sibling sections already found and fixed on their own criteria (sc-93a0660b1f, sc-2d1ad5ae90, sc-5a808987f4, sc-20775d1462) — confirming a real, still-open plan-wide defect, not stale dossier content. Fix via scripts/plan_corpus/write.py:amend_success_criterion ONLY (plan.json is script-only per plan-read-discipline.md §2.1; never a hand-edit). Re-point sc-344fce343b (plan-wide) at ‘python3 compiler_repo/scripts/crate-dag-lint.py —self-test’ — the same already-proven probe as the sibling sc-5a808987f4, and verified live here too (exit 0, self-test OK) — since crate-dag-lint.py’s negative-fixture rejection + clean-real-tree pass is the literal, already-satisfied text of the plan-wide criterion; do NOT author a new scripts/consumer_ssot_lint.py to make the phantom string true — that would itself be a second cargo-metadata-reading script duplicating crate-dag-lint.py/consumer_registration_check.py (LEAK:algorithmic-duplication), the exact temptation the two prior sibling sections (w-8a2865ab, w-d140e950) already refused when they hit the identical defect. Re-point sc-ff165de905 (section-local) at a DIFFERENT probe — its text is about canon.md §7.5 content and HISTORY, not the lint’s fixture — author it as a grep/self-test asserting .claude/rules/canon.md §7.5 mentions ori_ir::canon::consumers + crate-dag-lint.py (or PHASE-58/COVER-35/DESIGN-26) AND this section’s own content file (spec-sync-and-close—s-3c90c7fe.md) carries a ## HISTORY block per state-discipline.md §7; the probe_ref text can be written now (it references content w-46c77f4f/w-8f95a92a will land) but its PASS evidence is only recorded once those two items complete — run it as part of w-b306e354’s verification, not before.
- Update
canon.md §7.5to reference the consumer-SSOT registry + lint alongsidePHASE-54. - Record draft-proposal complementarity in HISTORY.
- Run the end-to-end north-star verification (fixture rejected + real tree green + rules present).
Fresh intel (regenerated)
This section closes the plan — but its own gate is currently unprovable, and so is the plan’s. Two success criteria share the identical phantom probe_ref (python -m scripts.consumer_ssot_lint --self-test) — a wrapper-root Python module that has never existed anywhere in this repo: the section’s own sc-ff165de905 AND, more consequentially, the plan-wide kind: functional criterion sc-344fce343b that this plan-terminating close mechanically evaluates per missions.md §How to use — the mission-chain audit. This is the fourth and fifth instance of the exact same defect class already found and fixed on all three completed siblings (sc-93a0660b1f, sc-2d1ad5ae90’s sibling sc-5a808987f4, sc-20775d1462) — the section cannot honestly execute w-b306e354’s “end-to-end north-star verification” while its own gate, and the plan’s gate, both point at a command that raises ModuleNotFoundError.
The good news the recon also proves: the underlying machinery this section needs to cite and verify is already fully built, wired, and green on the real tree. ori_ir::canon::consumers::CANON_CONSUMERS (Rust registry, 10/10 unit tests pass) + compiler_repo/scripts/crate-dag-lint.py --self-test (verified live: exits 0, its self_test_consumer_checks() DOES reject a synthetic unregistered-consumer fixture) + impl-hygiene.md PHASE-54/PHASE-58/COVER-35/DESIGN-26 (verified live: finding_categories freeze --check passes) together already satisfy the plan-wide criterion’s literal text (“A CI/hygiene pass rejects a synthetic consumer… and passes the real tree unchanged”) — the fix is a probe_ref correction, not new engineering.
Decisions this package forces before any edit lands:
- Fix
sc-344fce343bandsc-ff165de905FIRST, viascripts/plan_corpus/write.py:amend_success_criterion(never a hand-edit —plan.jsonis script-only perplan-read-discipline.md §2.1), mirroring the exact cure the three sibling sections already applied to their own instances of this bug. Never author the phantom module to make the string true — that would be inventing a fourth cargo-metadata reader (LEAK:algorithmic-duplication) for a check that already exists twice over. - The plan-wide criterion’s real proof is
crate-dag-lint.py --self-test+ a clean real-tree run — the same probe already proven forsc-5a808987f4. Re-pointsc-344fce343bthere (or a thin wrapper composing it with thefinding_categories/rules_parserparity check for the “three rules cite the backing” half). - The section’s own criterion (
sc-ff165de905) needs a DIFFERENT probe than the plan-wide one — its text is aboutcanon.md §7.5+ HISTORY content, not the lint’s negative fixture. No existing script asserts “doescanon.mdmention the registry/lint.” The section’s own work items (w-46c77f4f,w-8f95a92a) must land the prose first; the probe is then a grep/self-test over.claude/rules/canon.md(mentionsori_ir::canon::consumers+crate-dag-lint.py) and over this section’s own content file (carries a## HISTORYblock perstate-discipline.md §7recording the draft-proposal complementarity) — never the phantom module either. - Do not touch
single-semantic-authority-tooling-proposal.md. The section’s own Spec References line is explicit: “no proposal edit here” — the file lives under the lockeddrafts/directory (proposals.md §Proposal Lock), and w-8f95a92a’s HISTORY record belongs in THIS section’s own artifact, not the proposal. - The graph is structurally blind to the enforcement half of this plan —
crate-dag-lint.pyand its siblingconsumer_registration_check.pyare Python and carry zero symbols in theori-repo graph (file-symbols queries returned empty for both). Every verification of “is the lint real and does it work” in this dossier came from running the command directly (read-only Bash), never from the graph. Treat that as the honest floor of what/query-intelcan tell you about this plan’s north-star gate.
DIG DEEPER
python -m scripts.plan_corpus.read plans/canonical-consumer-boundary --criteria
python -m scripts.plan_corpus.read plans/canonical-consumer-boundary --criteria --section s-3c90c7fe
python3 compiler_repo/scripts/crate-dag-lint.py --self-test # verify the real gate live
(full dossier: spec-sync-and-close—s-3c90c7fe.intel.md)
HISTORY
- 2026-07-07 — Consumer-boundary enforcement lands; complements the single-semantic-authority-tooling draft: The canonical-consumer-boundary plan delivered the COMPILE-TIME enforcement for PHASE-54’s single-semantic-authority invariant — the
ori_ir::canon::consumers::CANON_CONSUMERSregistry with its closedPoolAccessclassification, thecrate-dag-lint.py/consumer_registration_check.pyunregistered-consumer lint (synthetic negative fixture +--warn-onlywiring into lefthook +test-all.sh), and impl-hygiene COVER-35 (registration-required) / PHASE-58 (least-resistance) / DESIGN-26 (proactive-at-add) with theirfinding-categories.mdLEAK subcats. This COMPLEMENTS the draftcompiler_repo/docs/ori_lang/proposals/drafts/single-semantic-authority-tooling-proposal.md, which names the invariant and binds all tooling at the spec layer: when the LSP / tooling consumer is built per that proposal (reusing the shared SalsaCompilerDb, never a parallel analyzer), it registers here as aConsumerEntryand is caught by the same lint if it re-derives meaning. No proposal was edited in this plan — the complementarity is enforcement (this plan) meeting principle (the draft).