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— confirmsScopeRestrictionalready 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_restrictionfor 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.pySTRUCTURE:invariant-acceptance-hook-missingdetector parses (success_criterion #3); it is NOT loaded by any currentcross_section_check.pydetector — 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):
| Source | Invariant / refinement / screen | Owning section(s) |
|---|---|---|
| INV-1 | Scripts drive; LLM only codes | §06 (engine), §08 (route-access hook), §09 (thin skills), §12 (soak) |
| INV-2 | LLM zero routing/state reads — hook-enforced | §08 |
| INV-3 | JSON = 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-4 | Per-plan SSOT; cross-plan order derived on-the-fly | §05 |
| INV-5 | Linear walk absolute; relocate-past-blocker | §05, §06 |
| INV-6 | Cyclic-impossible by construction | §05, §06 |
| INV-7 | Zero halts (authoring-time + execution-time cure) | §06, §07 |
| INV-8 | One big system; autonomous cross-plan | §06, §12 |
| INV-9 | Path-scoped commits | §07 |
| INV-10 | Single 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-11 | DROP-default + MMM screens | §01.2 (binding), §10 (re-screen) |
| INV-12 | Content 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-13 | Review is a route phase, inline + autonomous | §06 |
| INV-14 | Bugs 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-15 | Flat 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-16 | Improve-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-17 | Completion-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-18 | Content-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-19 | Strict-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-20 | Strict-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-21 | Structural 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-22 | Three-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-1 | Plan identity (separate umbrella plan; node 3 self-converts subject) | §04 |
| REF-2 | Bootstrap-converter scope (per-plan only; substrate precedes self-convert) | §02, §03 |
| REF-3 | 3-tuple comparator (key, plan_id, node_id) | §05 |
| REF-4 | Plan-scoped walk; relocate-past-blocker | §05 |
| REF-5 | Markdown-parsing carve-out (strip structural; keep id-scan; fenced-block skip) | §03, §11B |
| REF-6 | Engine decomposition (one GROUP, flat capability nodes, locked boundaries) | §06 |
| REF-7 | Render-on-demand views (render --view) replace committed index.md | §05 (render engine), §10 (consumer re-point) |
| REF-8 | routing.md §1 placement-taxonomy under flat group labels | §05 |
| REF-9 | DROP-default gated on philosophy-citation/dependency map first | §01.2 (binding), §10.3 (re-screen executes) |
| Decision 15.1 | Absorption DROP-default; CARRY requires ≥1 load-bearing citation | §01.2 (binding), §10.3 |
| Decision 15.2 | conceptual_integrity_owner: eric | §01.2 |
| Decision 15.3 | Essential-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).
- 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)
- LLM does zero routing/state reads — mechanically enforced. PreToolUse hook hard-bans LLM Read/Edit of every
plan.jsoncorpus-wide; scripts are the sole accessor. Markdown content stays LLM-writable (authoring is coding). (Goal 5; grilling R3Q9 + R5Q18) - JSON = routing only; markdown = all content. Node =
{id, slug, key, status, hint_needs, body_ref}. One readableplan.jsonper plan. Noitems[], no body text, no mission/decision/history prose in JSON. (grilling R1Q3 + R2Q5) - Per-plan
plan.jsonis SSOT; cross-plan order derived on-the-fly by merging per-plan lexorank keys at runtime. No global route file. (grilling R1Q1) - 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)
- Cyclic looping impossible by construction. Total-order lexorank keys; no stored edges;
hint_needsadvisory. (Decision 16 §5; philosophy #22) v7 delta (decisions/04 resolved-decision 8):hint_needsis ADVISORY — NEVER aserve_nextgate. It exists on BOTHsections[]andwork_items[]and informs authoring-time lexorank placement only;serve_nextwalks 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. - 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)
- One big system.
/continue-roadmapruns 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) - 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)
- 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.statusis a DERIVED rollup of its work_items (single update point = the work_item; section derives, never independently written).serve_nextis the sole status-write path (write-on-serve); the LLM is §08-banned fromplan.jsonand never flips status. - 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)
- 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-FIRSTcontent/<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 inwork_items[], not the md; the md carries id-keyed item DESCRIPTION lines (no- [ ]checkboxes) so the JSON<->md coherence validator resolves both sides. - Review is a route phase, run inline + autonomous. A node isn’t
doneuntil 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) - Bugs are nodes in the one route. Bug plans are JSON-first plans; their nodes merge into the same cross-plan route;
/add-bugmints a node + key; a bug blocking work is ahint_needstriggering relocation. Covers TWO relationships: blocker (prerequisite —hint_needson 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-17quarantinecure on abandon/verification-fail; claim + evidence live in the umbrella’s content per INV-18, never aplan.jsonfield). Absorbsplan-bug-subsumption; full designdecisions/03-plan-bug-subsumption-absorption.md. (grilling R6Q21; subsumption absorption user directive 2026-05-26) - 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 flatwork_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 = reassignsection_id+ re-key; the id never changes, sohint_needsrefs survive); the section id (s-<hex>) is stable + slug + lexorank key. Order in each array’skey, identity in eachid. - Improve-tooling-history-grounded review. Every section’s in-review phase MUST consult the
/improve-toolinghistory — design-log§4 Lessons+§6 Improvement Login.claude/skills/improve-tooling/*-design.md(pluspython -m scripts.improve_tooling_runtime show/list-locked-designswhere 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) - Completion-Integrity. A node reaches
doneONLY through a single verified-completion choke point that confirms its declared deliverables physically exist; adonestate without a verification attestation is unrepresentable; a completion-claim whose deliverables are absent is NEVER auto-cured — it routes toquarantine(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 thequarantinecure kind. Absorbscompletion-authority-gate; full designdecisions/01-completion-integrity-invariants.md. (user directive 2026-05-26) - Content-as-context-unit. A node’s
body_refresolves to ONE flatcontent/<id>--<slug>.mdthat 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 asection_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 ofrouting.md §4promotion), never compacted into denser prose.plan.jsoncarries NO size metadata — the cap is a content lint, not a schema field (INV-3 routing-only preserved). Full designdecisions/02-content-as-context-unit.md. (user directive 2026-05-26) - 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_nextis 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 §40serve_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 oversections[](chain = section lexorank key), not flatnodes[].hint_needson BOTH sections AND work_items is advisory and NEVER aserve_nextgate (resolves the INV-6/19 tension); the lexorankkey+ thearray==sorted(key)invariant are the sole ordering authority. An EMPTY section (zero work_items) rolls up tocompleted(vacuous-truth, resolved-decision 9) so the walk never deadlocks on it. §08depends_onre-pointed to §07A keeps the chain linear. - 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 isnot-startedAND all predecessors aredone(with verified completion attestation per INV-17). If ANY predecessor isin-progress,serve_next()returns that predecessor — NEVER skips past it. Completion is BINARY: a section isdoneONLY when ALL §NN.N gates pass (subsection checkboxes AND named-skill gates like/tpr-reviewcode-side AND pytest green ANDplan_corpus checkexit 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 legacyplan-complete.py --complete-allforce-flip path is BANNED —status: completerequires 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_nextwalkssections[]to the first non-completed section, then walks itswork_items[](bysection_id) in array order to the first non-completed work_item; the engine owns the work_item status lifecycle.serve_nextis WRITE-ON-SERVE — it routes (reads the next work_item) AND flips its statusnot-started -> in-progressatomically;in-progress -> completedonly when INV-20 gates pass. A read-onlypeek_nextreturns the identical payload with ZERO status write (fordag-ascii/ manifest builders). Work_item-level in-progress precedence: the first non-completed work_item, if alreadyin-progress, is returned AS-IS and never skipped past to a laternot-startedone (mirrors the section-level clause at the work_item level). - 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 anycross_plan_needstarget is notcompleted, 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-planhint_needs(INV-6 advisory): the hard gate lives ONLY at the merge layer, never inside the per-planserve_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 — thecross_plan_needsedges 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-blockerblocked_byDAG already coexists with the linear chain. Owning section §09B. (user directive 2026-05-30 — trigger: the §09.4 dogfood surfaced that the v7sections[]+work_items[]split madehint_needsadvisory-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.
- (REF-1) Plan identity RESOLVED: separate meta-plan (charter §8 corrected); node 3 self-converts the SUBJECT plan.
- (REF-2) Bootstrap: the corrected converter (node 2) emits per-plan
plan.jsonONLY (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.jsonwrite API + id-keyed checkbox scanner + per-planserve_next) precedes node 3 self-convert. - (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. - (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.
- (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).
- (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.
- (REF-7) Add success criterion: render-on-demand views from
plan.json(render --view) replace committedindex.md. - (REF-8) routing.md §1 placement-taxonomy (proposal / architectural / phase-local → flat group labels?) promoted to a route-model-node success criterion.
- (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-featurelift, a/create-plan --inlineperrouting.md §3case (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 firesSTRUCTURE:absorption-overload(Major); detectorscripts/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.mdMUST carryconceptual_integrity_owner: ericas the designated architect for conceptual integrity across §02-§12 (emitted by the §02 converter per §02:50; not yet present at §01-authoring time).ericis the resolution authority when same-tier philosophy/principle contradictions arise inside this plan; cross-plan integrity stays withmissions.md §Conflict resolutiontier-ranking. - The bootstrap
"unassigned"default does NOT apply to this plan — the owner is assigned (eric), soSTRUCTURE:conceptual-integrity-leak:owner-missingcannot fire here, and any same-tier contradiction in §02-§12 MUST record a HISTORY-anchored resolution citing the architect; an unresolved same-tier contradiction firesSTRUCTURE:conceptual-integrity-leak:contradiction-without-resolution(Major). - Schema enforcement (§02-delivered): the §02 converter emits
conceptual_integrity_owner:on00-overview.mdandscripts/plan_corpus/schema.pygains 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 firesSTRUCTURE:accidental-complexity-unjustified(Major); detector is thescripts/prose-lint.pycommit-body extension, with/review-planStep 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]andstatus: complete. - All success criteria have
[x]checkboxes. -
python -m scripts.plan_corpus check plans/scripts-first-restructure/section-01-*.mdexit 0. - Every later section (§02-§12) body cites §01 as north star (verified at §12 cohesion).
-
/tpr-reviewpassed (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) madehint_needsadvisory-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: falsepending 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 carriedstage: ?,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 inscripts/plan_orchestrator/markers.py:clear_stale_marker_if_unreviewed.