92%

Section 01 — Principles & Invariants

North star. This section authors the constitution every later section cites. It carries NO code; its deliverable is the principles text (it becomes content/principles--<id>.md when the subject plan self-converts in §04, and the umbrella plan’s own node-1 body).

Goal

See frontmatter goal. The 20 invariants + 9 refinements are the authoritative design contract; §02-§12 implement them, never re-decide them.

Intelligence Reconnaissance

  • 2026-05-26 — graph queries run for the constitution-authoring grounding:
    • scripts/intel-query.sh symbol-plans build_plan_json_from_dir --repo ori — confirms the 006 parser SSOT is the sole md→dict converter cited across §02/§04/§11B (grounds INV-3 owning-section mapping).
    • scripts/intel-query.sh callers compute_scope_restriction --repo ori — confirms ScopeRestriction already exists (opt-in), grounding INV-9 path-scoped-commit owning-section §07 as WIRING not new machinery.
    • Reference-file grounding (verbatim invariant source): [ori:plans/scripts-first-restructure/references/restructure-charter-seed.md] §2 (20 invariants) + §3 (28 decisions R1Q1–R7Q28) + §6 (DROP map); [ori:plans/scripts-first-restructure/references/mission-draft.md] §Consensus refinements (9 Step-1D refinements); [ori:plans/completed/scripts-first-workflow-architecture/decisions/15-mmm-derived-philosophies.md] (Decision 15.1/15.2/15.3).
  • Summary (≤500 chars): §01 is a pure-content constitution node (no code); deliverable = transcribed invariants + refinements + screens, sourced verbatim from the two references/ files. Graph queries confirm the two code anchors the invariant→section table leans on (006 parser SSOT for INV-3; compute_scope_restriction for INV-9). No further symbol inventory applies — §01 has no code surface. The §01.1 invariant→section(s) table is the cross-check schema downstream alignment loads.

01.1 — Author the 20 invariants + 9 refinements

  • Transcribe the 21 north-star invariants verbatim (INV-1..INV-20 from references/restructure-charter-seed.md §2; INV-21 by user directive 2026-05-30) (scripts-drive / LLM-zero-routing / JSON-routing-only / per-plan-SSOT + derived cross-plan / linear-walk-absolute / cyclic-impossible / zero-halt / one-big-system / path-scoped-commits / single-update-point / DROP-default+MMM / content-keyed-by-id / review-as-phase / bugs-as-nodes / flat-nodes / improve-tooling-history-review / completion-integrity / content-as-context-unit / strict-linear-single-branch-DAG / strict-forward-only-progress / structural-cross-plan-dependency), each tagged with its grilling-round / directive provenance (R1Q1 … R7Q28; INV-16 + INV-17 + INV-18 user directive 2026-05-26; INV-19 + INV-20 user directive 2026-05-27; INV-21 user directive 2026-05-30, owning §09B).
  • Transcribe the 9 Step-1D consensus refinements from references/mission-draft.md §Consensus refinements (plan-identity / bootstrap-converter-scope / 3-tuple-comparator / scoped-walk / markdown-carve-out / engine-decomposition / render-views / routing-taxonomy / DROP-citation-map).
  • Author an EXPLICIT invariant→section(s) cross-link table in §01.1 (not a delegation to the §00-overview MSC mapping — that maps deliverables, not invariants, and approximates pervasive invariants). One row per: each of the 20 invariants, each of the 9 Step-1D refinements, and each of the Decision 15.1/15.2/15.3 screens. Each row carries: owning section(s) (an invariant may span sections — e.g. scripts-drive/LLM-only-codes → §06/§08/§09/§12; JSON-routing-only → §02/§03/§04/§05/§10/§11B; DROP-default screen → §01.2 binding + §10.3 re-screen) + the acceptance hook in that section that proves the invariant holds. This table is the schema the §06.4-authored cross_section_check.py STRUCTURE:invariant-acceptance-hook-missing detector parses (success_criterion #3); it is NOT loaded by any current cross_section_check.py detector — the consumer is authored + completion-gate-wired in §06.4 (extending the existing module), and §12.1 aggregate-soaks it over the converted corpus.
  • Subsection close (01.1) — all [x]; status: complete.

The invariant→section(s) table to author (rows; owning section(s) + acceptance hook columns filled when each owning section’s success_criteria land):

SourceInvariant / refinement / screenOwning section(s)
INV-1Scripts drive; LLM only codes§06 (engine), §08 (route-access hook), §09 (thin skills), §12 (soak)
INV-2LLM zero routing/state reads — hook-enforced§08
INV-3JSON = routing only; markdown = all content§02 (converter emits routing-only plan.json), §03 (routing-only schema + write API), §04 (self-convert emits per-plan plan.json), §05 (per-plan plan.json SSOT; no size/route metadata), §10 (corpus migration emits plan.json per dir), §11B (strip structural md parsers)
INV-4Per-plan SSOT; cross-plan order derived on-the-fly§05
INV-5Linear walk absolute; relocate-past-blocker§05, §06
INV-6Cyclic-impossible by construction§05, §06
INV-7Zero halts (authoring-time + execution-time cure)§06, §07
INV-8One big system; autonomous cross-plan§06, §12
INV-9Path-scoped commits§07
INV-10Single update point per status (v7: work_items[].status engine-written JSON enum; section.status DERIVED rollup; id-keyed checkbox scanner retired — decisions/04 resolved-decision 4+5)§03, §07A, §11B
INV-11DROP-default + MMM screens§01.2 (binding), §10 (re-screen)
INV-12Content keyed (v7: slug-first content/<slug>--<id>.md; id-SUFFIX glob content/*--<id>.md; one md per section — decisions/04 resolved-decision 6)§02, §04, §07A, §10
INV-13Review is a route phase, inline + autonomous§06
INV-14Bugs are nodes in the one route — covers BOTH the blocker relationship (hint_needs, prerequisite) AND the subsumption relationship (consequence: bug node relocates to serve-after its umbrella, completes only via the §06.4 verified-completion choke point, reverses on abandon/verification-fail) — absorbs plan-bug-subsumption; full design decisions/03-plan-bug-subsumption-absorption.md§06 (bugs-as-nodes §06.4 — consequence-relationship + verification-gated done + un-subsume-via-quarantine), §10 (bug migration carries the relationship + claims)
INV-15Flat nodes + non-ordering group labels (v7: TWO levels — sections[] + flat work_items[]; group labels still non-ordering — decisions/04 resolved-decision 1+2)§05, §06, §07A, §11B
INV-16Improve-tooling-history-grounded review (every section in-review consults /improve-tooling §4 Lessons + §6 Improvement Log)§06 (review-as-phase §06.4), §12 (verification)
INV-17Completion-Integrity (single verified-completion choke point; done unrepresentable without attestation; completion-claim-without-deliverable always quarantined never auto-cured; bypasses scope-bound+expiring+audited; quarantine reconciles zero-halt) — absorbs completion-authority-gate; full design decisions/01-completion-integrity-invariants.md§03.1 (schema attestation), §06.1 (NEVER-CURABLE class) + §06.4 (choke point + deliverable teeth), §07.2 (pure-gate hooks), §08.2 (bypass-expiry), §12 (soak assertion)
INV-18Content-as-context-unit (one node = one whole-body_ref read; no fragment injection; content files size-capped; over-cap splits into sibling flat nodes; NO size metadata in plan.json) — full design decisions/02-content-as-context-unit.md§03 (whole-read contract + content-size lint + cap value), §06.3 (route_walk injects whole file) + §06.4 (size-lint review gate + split cure), §07.2 (size moves to authoring/review, not commit-push), §09 (thin skills read whole body_ref on the v7 path; plan-read-/context-discipline gain the single-read model additively), §11A (strip orchestrator section_info fragment path) + §11B (strip parser extract_section_info path), §12 (soak assertion)
INV-19Strict-Linear-Single-Branch DAG (every node has exactly ONE predecessor — root has zero — and at most ONE successor; no diamonds; no branches; no missing-predecessor implicit roots; no-natural-dep sections auto-close the chain via predecessor = immediately-prior lexorank node; branching declarations rejected at authoring + review; serve_next deterministic by construction)§03.1 (schema rejects branch-encoding fields on nodes[] — substrate enforcement), §06.3 (route_walk.serve_next single-ready-node assertion — runtime defense-in-depth), §09.2 (/create-plan + /review-plan authoring/review enforcement hooks)
INV-20Strict-Forward-Only Progress (serve_next() returns at most one node — next-in-lexorank-order whose status is not-started AND all predecessors done with INV-17 attestation; in-progress predecessor returned as-is — NEVER skipped; completion is BINARY — done ONLY when ALL §NN.N gates pass (subsection checkboxes AND named-skill gates AND pytest green AND plan_corpus check exit 0); legacy plan-complete.py --complete-all force-flip BANNED)§03.1 (impossible-state schema extension — status: done requires completion.gates_verified: [str] non-empty), §06.3 (route_walk.serve_next strict-forward semantics + test_serve_next_never_skips_in_progress regression test), §06.4 (review-as-phase = SOLE writer of completion.gates_verified), §09.2 (/continue-roadmap v7 path ADDS serve_next + never force-flips — additive, markdown path untouched), §11A (RETIRES the focus-picker + auto_complete_section.py + plan-complete.py --complete-all invocations after the §09.4 dogfood + §10 leave the corpus uniformly v7)
INV-21Structural cross-plan dependency (cross_plan_needs schema field on sections+work_items; merge-layer hard-defer in serve_next_with_cross_plan; combined-graph CROSS_PLAN_CYCLE + CROSS_PLAN_DEAD_REF validators; orthogonal axis to advisory intra-plan hint_needs)§09B (schema + merge-layer hard-defer + acyclicity validators), §10 (migration carries the field), §12 (cross-plan blocker becomes structural)
INV-22Three-plan-type taxonomy (json / legacy-markdown / json-dynamic; markdown KEPT permanently as legacy, NOT stripped; very-old markdown upgraded to latest markdown schema; json-dynamic = dynamic: true skeleton-grows-on-close; /create-plan defaults to json; INV-3 narrowed to per-plan content model; §11A/§11B strip CANCELLED) — full design decisions/05-three-plan-types.md§01.1 (taxonomy binding + INV-3 narrowing), §09 (/create-plan json default + markdown-walk PERMANENT), §10 (re-scope: no corpus-wide JSON conversion; very-old → latest markdown schema; conversion explicit-only), §11A (strip CANCELLED — markdown-walk retained as legacy), §11B (strip CANCELLED — markdown parsers retained), §11C (json-dynamic delivery: dynamic marker + grow-on-close engine step + /create-plan --dynamic + the json-dynamic acceptance hook)
REF-1Plan identity (separate umbrella plan; node 3 self-converts subject)§04
REF-2Bootstrap-converter scope (per-plan only; substrate precedes self-convert)§02, §03
REF-33-tuple comparator (key, plan_id, node_id)§05
REF-4Plan-scoped walk; relocate-past-blocker§05
REF-5Markdown-parsing carve-out (strip structural; keep id-scan; fenced-block skip)§03, §11B
REF-6Engine decomposition (one GROUP, flat capability nodes, locked boundaries)§06
REF-7Render-on-demand views (render --view) replace committed index.md§05 (render engine), §10 (consumer re-point)
REF-8routing.md §1 placement-taxonomy under flat group labels§05
REF-9DROP-default gated on philosophy-citation/dependency map first§01.2 (binding), §10.3 (re-screen executes)
Decision 15.1Absorption DROP-default; CARRY requires ≥1 load-bearing citation§01.2 (binding), §10.3
Decision 15.2conceptual_integrity_owner: eric§01.2
Decision 15.3Essential-vs-accidental; new mechanism cites essential-complexity domain§01.2 (binding; constrains all later sections)

Table coverage verified: 22 invariants (INV-1..INV-22) + 9 Step-1D refinements (REF-1..REF-9) + 3 MMM screens (Decision 15.1/15.2/15.3) = 34 rows; owning-section(s) present on every row; 3-column shape (Source / Invariant / Owning-section(s)) preserved as the parse schema for the §06.4-authored cross_section_check.py STRUCTURE:invariant-acceptance-hook-missing detector. The acceptance-hook is asserted in each owning section’s body/success_criteria (the detector cross-checks presence there against this table at the owning section’s completion), keeping the table routing-light per INV-3.

The 21 north-star invariants (verbatim)

Transcribed verbatim from references/restructure-charter-seed.md §2 (INV-1..INV-20); each carries its grilling-round / directive provenance (the parenthetical tag is part of the source text — INV-16/17/18 carry the user directive 2026-05-26 provenance; INV-19 + INV-20 carry the user directive 2026-05-27 provenance; INV-21 carries the user directive 2026-05-30 provenance and is owned by §09B).

  1. Scripts drive; LLM only codes. Scripts own the loop, compute the route, read state, inject the bounded task. LLM writes code/content + makes bounded decisions only. (Goal 1; philosophies #1-3)
  2. LLM does zero routing/state reads — mechanically enforced. PreToolUse hook hard-bans LLM Read/Edit of every plan.json corpus-wide; scripts are the sole accessor. Markdown content stays LLM-writable (authoring is coding). (Goal 5; grilling R3Q9 + R5Q18)
  3. JSON = routing only; markdown = all content. Node = {id, slug, key, status, hint_needs, body_ref}. One readable plan.json per plan. No items[], no body text, no mission/decision/history prose in JSON. (grilling R1Q3 + R2Q5)
  4. Per-plan plan.json is SSOT; cross-plan order derived on-the-fly by merging per-plan lexorank keys at runtime. No global route file. (grilling R1Q1)
  5. Linear walk, absolute. A node serves only when predecessors done; else it RELOCATES later. No design-ahead exceptions. (Goal 7; philosophies #21-22; grilling R4Q13)
  6. Cyclic looping impossible by construction. Total-order lexorank keys; no stored edges; hint_needs advisory. (Decision 16 §5; philosophy #22) v7 delta (decisions/04 resolved-decision 8): hint_needs is ADVISORY — NEVER a serve_next gate. It exists on BOTH sections[] and work_items[] and informs authoring-time lexorank placement only; serve_next walks physical array order (= lexorank key) and surfaces unmet hints as advisory metadata (unmet_hints: ["w-<hex>"]), never hard-filtering on them. A hard hint-gate would reintroduce the dependency cycles this invariant forbids; the blocker-move pattern (re-key the blocker physically before the work it unblocks) keeps array order sufficient.
  7. Zero halts. Structural correctness enforced at AUTHORING time (by construction) + EXECUTION time (auto-cure-and-re-engage). commit-push sheds structural gates. (Goal 14; philosophies #26-28; grilling R1Q4)
  8. One big system. /continue-roadmap runs fully autonomous, cross-plan: auto /add-bug, auto /fix-bug, jump to another plan’s node and back, never narrow-focuses, never halts. (Goal 9; grilling R2Q7)
  9. Path-scoped commits. commit-push stages only the active node/plan’s path-set; unrelated dirty paths ignored (parallel-work-friendly). (grilling R2Q6; replaces Goal 13)
  10. Single update point per status. Item status = id-keyed markdown checkbox; node routing-status derived by trivial id-scan (line-level, NOT structural markdown parsing). (grilling R2Q5) v7 delta (decisions/04 resolved-decision 4+5): status is now work_items[].status — an ENGINE-written JSON enum (not-started | in-progress | completed), NOT a markdown checkbox. The id-keyed checkbox scanner is retired (deprecated in §07A.3, hard-deletion deferred to §11B). section.status is a DERIVED rollup of its work_items (single update point = the work_item; section derives, never independently written). serve_next is the sole status-write path (write-on-serve); the LLM is §08-banned from plan.json and never flips status.
  11. DROP-default + MMM screens. Carry only load-bearing; drop the rest. Essential-vs-accidental screen, designated architect, throwaway-prototype, runtime budget, info-hiding kept as principles; the 58-philosophy inventory + 17 decisions re-screened, accidental ones dropped. (Decision 15; grilling R3Q12 + R4Q16)
  12. Content keyed content/<id>--<slug>.md, refs resolve by id-prefix glob (content/<id>--*.md); slug rename never breaks refs. (Decision 16 D4; grilling R5Q19) v7 delta (decisions/04 resolved-decision 6): content is now slug-FIRST content/<slug>--<id>.md, resolved by id-SUFFIX glob (content/*--<id>.md); one md PER SECTION (not per node). The id-suffix anchor keeps refs slug-rename-safe identically to v6’s id-prefix. Items live in work_items[], not the md; the md carries id-keyed item DESCRIPTION lines (no - [ ] checkboxes) so the JSON<->md coherence validator resolves both sides.
  13. Review is a route phase, run inline + autonomous. A node isn’t done until its review passes; engine auto-dispatches reviewers, auto-triages, cures-and-re-engages on findings; review state is routing fields on the node, no human halt. (grilling R6Q22)
  14. Bugs are nodes in the one route. Bug plans are JSON-first plans; their nodes merge into the same cross-plan route; /add-bug mints a node + key; a bug blocking work is a hint_needs triggering relocation. Covers TWO relationships: blocker (prerequisite — hint_needs on the bug’s fix) AND subsumption (consequence — a bug whose fix is a consequence of an umbrella node’s completion relocates to serve AFTER the umbrella, completes by construction only when the umbrella’s §06.4 verified-completion choke point confirms the bug’s verification_test passes, and un-subsumes via the INV-17 quarantine cure on abandon/verification-fail; claim + evidence live in the umbrella’s content per INV-18, never a plan.json field). Absorbs plan-bug-subsumption; full design decisions/03-plan-bug-subsumption-absorption.md. (grilling R6Q21; subsumption absorption user directive 2026-05-26)
  15. Purely flat nodes + non-ordering group labels. No parent/child, no section/subsection nesting. Order in the key, identity in the id, grouping in labels. (Decision 16 D5/D7; grilling R6Q24) v7 delta (decisions/04 resolved-decision 1+2, INV-15 row): the model is now TWO levels — coarse sections[] (one md each; human-readable) + a flat work_items[] table (every atomic item, hoisted out of markdown). Both arrays stay flat (no nesting WITHIN a level); group labels remain non-ordering. The work_item id (w-<hex>) is STABLE + section-INDEPENDENT (a move = reassign section_id + re-key; the id never changes, so hint_needs refs survive); the section id (s-<hex>) is stable + slug + lexorank key. Order in each array’s key, identity in each id.
  16. Improve-tooling-history-grounded review. Every section’s in-review phase MUST consult the /improve-tooling history — design-log §4 Lessons + §6 Improvement Log in .claude/skills/improve-tooling/*-design.md (plus python -m scripts.improve_tooling_runtime show / list-locked-designs where relevant) for the tooling the section touches — BEFORE review sign-off; a review that skipped the applicable history is incomplete. The history is the durable record of tooling lessons, regressions, and locked-design decisions; skipping it risks re-introducing a known-bad pattern or violating a locked design. (user directive 2026-05-26)
  17. Completion-Integrity. A node reaches done ONLY through a single verified-completion choke point that confirms its declared deliverables physically exist; a done state without a verification attestation is unrepresentable; a completion-claim whose deliverables are absent is NEVER auto-cured — it routes to quarantine (back to not-done), never silently advances; every route-access bypass/unlock is scope-bound + expiring + audited (no persistent global-allow). Zero-halt and verification reconcile via the quarantine cure kind. Absorbs completion-authority-gate; full design decisions/01-completion-integrity-invariants.md. (user directive 2026-05-26)
  18. Content-as-context-unit. A node’s body_ref resolves to ONE flat content/<id>--<slug>.md that is the SOLE unit of LLM context for that node; the engine hands the LLM that file to read IN FULL — never a script-extracted section/subsection fragment, never a section_info-style pointer. Content files are size-capped by a content-size lint enforced at authoring time + the review-as-phase node; an over-cap file is SPLIT into sibling flat nodes (the flat-node analogue of routing.md §4 promotion), never compacted into denser prose. plan.json carries NO size metadata — the cap is a content lint, not a schema field (INV-3 routing-only preserved). Full design decisions/02-content-as-context-unit.md. (user directive 2026-05-26)
  19. Strict-Linear-Single-Branch DAG. Every plan’s section graph is a strict-linear single-branch DAG: every node has exactly ONE predecessor (root has zero); every node has at most ONE successor; no diamonds (no node with 2+ parents); no branches (no node with 2+ children); no missing-predecessor implicit roots (every non-root node MUST declare its single predecessor explicitly). If a section has no natural dependency, assign one to the immediately-prior lexorank node to close the chain. Branching declarations REJECTED at /create-plan + /review-plan. serve_next is deterministic by construction — never has a routing choice. Eliminates non-deterministic routing classifiers. Substrate: invariants 4 (per-plan lexorank §39) + 5 (linear walk) + 6 (cyclic-impossible §40 serve_next) already provide the total-ordered chain; INV-19 is the enforcement contract on top that forbids branching at the authoring/review surface. (user directive 2026-05-27) v7 delta (decisions/04 resolved-decision 8, INV-19 row): the single-branch chain is now over sections[] (chain = section lexorank key), not flat nodes[]. hint_needs on BOTH sections AND work_items is advisory and NEVER a serve_next gate (resolves the INV-6/19 tension); the lexorank key + the array==sorted(key) invariant are the sole ordering authority. An EMPTY section (zero work_items) rolls up to completed (vacuous-truth, resolved-decision 9) so the walk never deadlocks on it. §08 depends_on re-pointed to §07A keeps the chain linear.
  20. Strict-forward-only progress. The route walk progresses STRICTLY FORWARD in lexorank order, leaving completed sections behind. serve_next() returns at most one node: the next-in-key-order whose status is not-started AND all predecessors are done (with verified completion attestation per INV-17). If ANY predecessor is in-progress, serve_next() returns that predecessor — NEVER skips past it. Completion is BINARY: a section is done ONLY when ALL §NN.N gates pass (subsection checkboxes AND named-skill gates like /tpr-review code-side AND pytest green AND plan_corpus check exit 0). The ‘move blockers / relocate out-of-order sections’ primitive (§40 relocate) handles cases where a section blocks; the engine NEVER skips past in-progress as an alternative. The legacy plan-complete.py --complete-all force-flip path is BANNED — status: complete requires evidence-anchored §NN.N gates passed. (user directive 2026-05-27 — trigger: §02 force-flipped status:complete via plan-complete.py —complete-all while §02.N /tpr-review code-side gate had not run; orchestrator then routed to §03 review, violating strict-forward-only.) v7 delta (decisions/04 resolved-decision 10, INV-20 row): serve_next walks sections[] to the first non-completed section, then walks its work_items[] (by section_id) in array order to the first non-completed work_item; the engine owns the work_item status lifecycle. serve_next is WRITE-ON-SERVE — it routes (reads the next work_item) AND flips its status not-started -> in-progress atomically; in-progress -> completed only when INV-20 gates pass. A read-only peek_next returns the identical payload with ZERO status write (for dag-ascii / manifest builders). Work_item-level in-progress precedence: the first non-completed work_item, if already in-progress, is returned AS-IS and never skipped past to a later not-started one (mirrors the section-level clause at the work_item level).
  21. Structural cross-plan dependency. Cross-plan dependency is a first-class STRUCTURAL routing-engine concept — a schema field, not prose and not an advisory hint. A node (section or work_item) declares cross_plan_needs: [{plan, id}] referencing a node in ANOTHER plan by identity. The cross-plan MERGE layer (serve_next_with_cross_plan) HARD-DEFERS a candidate whose any cross_plan_needs target is not completed, serving a ready node from another plan instead — so the engine pauses plan A, advances plan B that A needs, and resumes A (“jump to another plan’s node and back”, INV-8, made structural). Dependency-driven back-and-forth between plans is ACCEPTABLE + EXPECTED + sometimes necessary, never scope-drift or plan abandonment. It is an ORTHOGONAL axis to intra-plan hint_needs (INV-6 advisory): the hard gate lives ONLY at the merge layer, never inside the per-plan serve_next, because the intra-plan blocker-move (re-key the blocker physically before the work) is structurally impossible across independent per-plan lexorank spaces. Cyclic-impossible (INV-5/6/19) is preserved — the cross_plan_needs edges form a SEPARATE DAG validated acyclic over the COMBINED intra-plan-order + cross-plan-edge graph (CROSS_PLAN_CYCLE, which catches the indirect-via-intra-order deadlock too), exactly as the bug-blocker blocked_by DAG already coexists with the linear chain. Owning section §09B. (user directive 2026-05-30 — trigger: the §09.4 dogfood surfaced that the v7 sections[]+work_items[] split made hint_needs advisory-only, leaving cross-plan dependency with no structural enforcement / only a prose-declared §12 blocker.)

Transcribed verbatim from references/mission-draft.md §Consensus refinements (Step 1D — codex + agy + claude-ds, 2026-05-26; all reviewers returned findings informational, none rejected the mission). Architecture (Phase 3) + sections (Phase 4) MUST honor these; REF-N labels map to the table rows above.

  1. (REF-1) Plan identity RESOLVED: separate meta-plan (charter §8 corrected); node 3 self-converts the SUBJECT plan.
  2. (REF-2) Bootstrap: the corrected converter (node 2) emits per-plan plan.json ONLY (format conversion; reuses 006 parser SSOT; does NOT depend on the cross-plan merge engine; replaces the POC’s 010/D2 dependency). A minimal substrate (schema validation + plan.json write API + id-keyed checkbox scanner + per-plan serve_next) precedes node 3 self-convert.
  3. (REF-3) Cross-plan merge determinism: the on-the-fly key-merge (invariant 4) requires a stable total comparator — (key, plan_id, node_id) tuple OR <plan_id>:<key> namespacing OR merge-time collision relocation. Route-model node specifies it.
  4. (REF-4) Plan-scoped walk: serve_next walks plan-scoped + relocates-past-blocker so one plan’s blocked/in-progress node never deadlocks unrelated downstream plans in the merged order.
  5. (REF-5) Markdown-parsing carve-out: strip STRUCTURAL markdown parsing (read.py fallback, 006 md parser, frontmatter/heading parsers); RETAIN line-level id-keyed checkbox scan as the sole status-derivation mechanism; the scanner skips fenced code blocks (no example-checkbox miscount).
  6. (REF-6) Engine decomposition: ONE cohesive engine GROUP, decomposed into flat capability nodes (route-walk, cure-registry, review-as-phase, bugs-as-nodes, path-scoped-commit, soak) with locked module boundaries + per-capability acceptance tests. Honors “one engine designed once” while avoiding the second-system monolith.
  7. (REF-7) Add success criterion: render-on-demand views from plan.json (render --view) replace committed index.md.
  8. (REF-8) routing.md §1 placement-taxonomy (proposal / architectural / phase-local → flat group labels?) promoted to a route-model-node success criterion.
  9. (REF-9) DROP-default re-screen gated on a philosophy-citation/dependency map first (cited = potentially load-bearing; uncited = drop candidate) per Decision 15.1 evidence-required-CARRY — no heuristic drops.

01.2 — Restate DROP-default + MMM screens as active plan constraints

  • Restate Decision 15.1 (absorption DROP-default; CARRY requires ≥1 load-bearing citation), 15.2 (conceptual_integrity_owner: eric), 15.3 (essential-vs-accidental: every new mechanism cites the essential-complexity domain it attacks) as binding constraints on §02-§12.
  • Anchor the DROP-default citation-map RULE here in §01.2 as a BINDING constraint of the constitution — not a forward-reference to §10. The rule: a philosophy or decision is CARRY iff ≥1 section’s design body cites it as load-bearing; uncited = drop candidate; drops are evidence-driven (citation/dependency map), never heuristic. §02-§09 design against THIS stable rule; §10.3 EXECUTES the 58-philosophy / 17-decision re-screen by applying this §01.2-stated rule to the citation map. The screen’s CRITERION is finalized here at §01 (constitution); only the re-screen RUN is deferred to §10.3 — downstream sections never design against an un-screened draft because the screening rule is constitutionally fixed before they begin.
  • Subsection close (01.2) — all [x]; status: complete.

DROP-default + MMM screens — binding constraints on §02-§12

The three MMM screens of plans/completed/scripts-first-workflow-architecture/decisions/15-mmm-derived-philosophies.md (Decision 15.1/15.2/15.3, all LOCKED) bind every later section of this plan (§02-§12) as active constraints the design bodies of §02-§12 MUST obey — not forward-references resolved elsewhere. INV-11 names them collectively; this block fixes each as a concrete, checkable constraint.

Constraint A — Absorption is DROP-default; CARRY requires ≥1 load-bearing citation (Decision 15.1, LOCKED Option A).

  • Any absorption event in §02-§12 (a /migrate-feature lift, a /create-plan --inline per routing.md §3 case (b), an umbrella-plan merge, a philosophy/decision carried forward into the restructured corpus) defaults each candidate to DROPPED.
  • A candidate is CARRIED only when ≥1 active citation proves it is currently load-bearing: a citation in a shipping runtime, an .claude/rules/*.md, or a shipping skill. Archive-only references (_archive/) are insufficient.
  • Every CARRIED entry MUST carry that load-bearing citation OR an explicit DROPPED marker MUST be present. A merge/consolidation absorbing ≥3 predecessor artifacts with zero [DROPPED] markers and no per-CARRIED citation fires STRUCTURE:absorption-overload (Major); detector scripts/skill_audit/absorption_audit.py.
  • Quota-based mandatory-drop and retire-and-replace were rejected: evidence-required CARRY is the principled gate; the existing absorb-favoring philosophies stay and this constraint counterweights them (Brooks Ch 5 second-system effect).

Constraint B — One mind owns conceptual integrity per plan; conceptual_integrity_owner: eric (Decision 15.2, LOCKED Option A).

  • This plan’s 00-overview.md MUST carry conceptual_integrity_owner: eric as the designated architect for conceptual integrity across §02-§12 (emitted by the §02 converter per §02:50; not yet present at §01-authoring time). eric is the resolution authority when same-tier philosophy/principle contradictions arise inside this plan; cross-plan integrity stays with missions.md §Conflict resolution tier-ranking.
  • The bootstrap "unassigned" default does NOT apply to this plan — the owner is assigned (eric), so STRUCTURE:conceptual-integrity-leak:owner-missing cannot fire here, and any same-tier contradiction in §02-§12 MUST record a HISTORY-anchored resolution citing the architect; an unresolved same-tier contradiction fires STRUCTURE:conceptual-integrity-leak:contradiction-without-resolution (Major).
  • Schema enforcement (§02-delivered): the §02 converter emits conceptual_integrity_owner: on 00-overview.md and scripts/plan_corpus/schema.py gains the requiring validator as part of §02; the §12 close-out gate verifies the field present. Not yet schema-enforced at §01-authoring time.

Constraint C — Every new mechanism cites the essential-complexity domain it attacks (Decision 15.3, LOCKED Option A).

  • Every new mechanism introduced by §02-§12 (a philosophy, a runtime package, a STRUCTURE sub-type, a decision artifact, an engine capability node) MUST cite — in its commit body — which essential-complexity domain it attacks (plan-state coherence / cross-session resume / drift detection / adversarial review / etc.). A mechanism whose only effect is reducing accidental complexity MUST cite which essential requirement it serves.
  • A touch-path-qualifying commit lacking the rationale: line fires STRUCTURE:accidental-complexity-unjustified (Major); detector is the scripts/prose-lint.py commit-body extension, with /review-plan Step 2 as reviewer-time backstop.
  • Author-time frontmatter binary classification was rejected: forcing an essential-vs-accidental call at write-time adds more accidental complexity than it cures (Brooks Ch 16/17); the commit-body rationale citation is the primary gate.

DROP-default citation-map rule — BINDING constitutional constraint (not a §10 forward-reference)

The DROP-default screening CRITERION is constitutionally fixed HERE at §01, not deferred to §10 — §10.3 only EXECUTES the re-screen by applying this stable rule, it does NOT define it. §02-§09 design against THIS rule, never against an un-screened draft, because the criterion is fixed before they begin.

The rule (BINDING on §02-§12):

  • A philosophy or decision is CARRY iff ≥1 section’s design body cites it as load-bearing. Cited = potentially load-bearing (CARRY candidate); uncited = drop candidate.
  • Drops are evidence-driven from the citation/dependency map, NEVER heuristic. No percentage quota, no “feels stale”, no count-based force-drop — the absence of a load-bearing citation is the sole drop trigger.
  • The map is the citation/dependency graph over the philosophy + decision inventory: each entry’s CARRY/DROP disposition is read off whether a section design body cites it, not off any author judgment of merit.
  • Division of labour: the CRITERION (this rule) is constitutional and finalized at §01; the re-screen RUN — applying this rule to the 58-philosophy / 17-decision inventory’s citation map — is the only part deferred to §10.3. Per REF-9, the re-screen is gated on the citation/dependency map first, consistent with Decision 15.1 evidence-required CARRY.
  • Stability guarantee: because the rule is fixed here, every downstream section (§02-§09) and the §10.3 executor read the same criterion; the screen cannot shift under a section after it has designed against it.

01.R Third Party Review Findings

  • None.

01.N Completion Checklist

  • 01.1 + 01.2 [x] and status: complete.
  • All success criteria have [x] checkboxes.
  • python -m scripts.plan_corpus check plans/scripts-first-restructure/section-01-*.md exit 0.
  • Every later section (§02-§12) body cites §01 as north star (verified at §12 cohesion).
  • /tpr-review passed (final, full-section). TPR plan-mode 3 rounds, exit cap_reached_with_substantive; cures committed b0e5b622 + c3ef6930 + 07bb70de; verdict SIGNIFICANT REWORK APPLIED

North-star signal — body-citation, NOT the depends_on DAG. §01 has depends_on: ['00'] (§00 evaluation is its sole predecessor per the retroactive-§00-insertion HISTORY; §01 is otherwise the constitution all later sections derive from). Only §02 and §12 formally depends_on §01 via frontmatter; §03-§11B (including §06, which carries the body citation plus depends_on: ["05"]) carry the body citation “Cites §01 north star” only. Reviewers MUST read the body north-star citation — not the depends_on DAG — as the north-star relationship for the non-formally-dependent sections; the DAG encodes execution predecessors (work-order), not the derivation-from-constitution relationship. The dag-ascii view showing only §02/§12 → §01 is expected for node-1 and is NOT a missing-dependency (informational INTEGRITY:depends-on-vs-citation-drift per the §01 audit).

References

  • references/restructure-charter-seed.md §2 (invariants) + §3 (28 decisions).
  • references/mission-draft.md §Consensus refinements.
  • plans/completed/scripts-first-workflow-architecture/decisions/15-mmm-derived-philosophies.md (DROP-default + MMM screens).

HISTORY

  • 2026-05-30 — INV-21 added (structural cross-plan dependency; user directive): the §09.4 dogfood surfaced that the v7 sections[]+work_items[] split (decisions/04 resolved-decision 8) made hint_needs advisory-only, which — while correct for INTRA-plan ordering (a hard intra-plan gate would reintroduce the cycles INV-5/6/19 forbid) — left CROSS-plan dependency with no structural enforcement; the §12 cross-plan blocker was only prose-declared. INV-21 makes cross-plan dependency a first-class schema field (cross_plan_needs) + a merge-layer hard-defer + a combined-graph acyclicity validator, owned by the new §09B (inserted in the linear chain §09 → §09B → §10). Constitution amended → status: in-progress / reviewed: false pending re-review (same precedent as INV-19/20 additions). Coverage count 32 → 33 rows.
  • 2026-05-27 — Autopilot auto-cure: review_plan_redispatch_loop detected; record_review_abort restored status to ‘in-review’; advancing autopilot (per state-discipline.md §4 Hard-abort terminal-state semantics + skill-control-contract.md §Autopilot Mode unified hook-failure continuation clause).
  • 2026-05-27 — Stale review_pipeline: marker cleared by /continue-roadmap orchestrator: marker carried stage: ?, next_step: ?, updated: ?. Per /review-plan SKILL.md §Step 1a stale-marker rule (reviewed: false + marker present → STALE by definition), marker invalid; prior diagnosis preserved here for traceability. Cure rooted in scripts/plan_orchestrator/markers.py:clear_stale_marker_if_unreviewed.