100%

Section 10 — Corpus Migration + Consumer Re-point + DROP Re-screen

Cites §01 north star (invariants 2, 3, 14, 22). Consumes §02 converter. Chain-predecessor §09B — the corpus migration here carries the §09B cross_plan_needs schema field, so §09B MUST land before §10 converts any opted-in plan. Per decisions/05-three-plan-types.md, the corpus is a PERMANENT three-type system (json-static + json-dynamic + legacy-markdown); §10 does NOT make the corpus uniformly JSON. §11A/§11B are SUPERSEDED (no strip) — the markdown-walk path + parsers are retained permanently, so §10 gates nothing for them.

Goal

See frontmatter. Per decisions/05-three-plan-types.md, the corpus stays a PERMANENT three-type system; §10 converts ONLY the plan dirs (+ bug-tracker/plans) EXPLICITLY opted into JSON, leaving un-opted legacy markdown plans markdown and fully walkable. Bug plans that opt in become route nodes; cross-repo consumers (intel_repo importer, website_repo loaders) re-point to PREFER plan.json while KEEPING the markdown-fallback branch permanently for legacy plans; the philosophy inventory is re-screened on evidence.

Intelligence Reconnaissance

  • 2026-06-02 — graph queries grounding the corpus-migration + cross_plan_needs-population design:
  • scripts/intel-query.sh file-symbols scripts/plan_corpus/convert_plan_dir_v7.py — the v7-native emitter §10.1 batch-converts opted-in plans through (§07A two-level sections[] + work_items[] shape) [ori:scripts/plan_corpus/convert_plan_dir_v7.py].
  • scripts/intel-query.sh file-symbols scripts/plan_corpus/write.py — the v7 write-API surface §10.1 extends with the cross_plan_needs setter (the missing population path; §09B delivered schema + validators + merge-layer, NOT the setter) [ori:scripts/plan_corpus/write.py].
  • scripts/intel-query.sh file-symbols scripts/plan_corpus/per_plan_route.pyserve_next_v7_cross_plan_merge (the §09B hard-defer the populated cross_plan_needs edges drive) + _has_unmet_cross_plan_hint (the intra-plan advisory hint_needs, the negative pin) [ori:scripts/plan_corpus/per_plan_route.py].
  • scripts/intel-query.sh file-symbols scripts/plan_corpus/cross_plan_validators.pyCROSS_PLAN_DEAD_REF
    • CROSS_PLAN_CYCLE (09B.3) the populated edges MUST pass [ori:scripts/plan_corpus/cross_plan_validators.py].
  • intel_repo export_json._is_plan_dir (.md fallback, RETAINED) + website plan-section-loader.ts (dual-mode, .md fallback RETAINED) — the consumer re-point targets (§10.2).
  • Summary (≤500 chars): §10 batch-converts opted-in plan dirs via convert_plan_dir_v7.py, leaving un-opted markdown walkable (Decision-05 three-type). Bug-plan cross-plan relationships populate cross_plan_needs (§09B field) via a NEW write.py setter §10 must land, validated by 09B.3’s CROSS_PLAN_DEAD_REF + CROSS_PLAN_CYCLE. Consumers PREFER plan.json with the .md fallback kept.

10.1 — Batch-convert the opted-in plan dirs + bug-tracker

  • Define the opt-in mechanism (prerequisite — makes every “opted-in” checkbox below executable). “Opted into JSON” is an EXPLICIT author action, never implicit/heuristic: the opt-in set is an author-curated list recorded in this section (enumerate each plans/<name>/ + bug-tracker/plans/BUG-XX-NNN/ dir chosen for conversion, with a one-line per-plan rationale). A plan ABSENT from the list stays legacy-markdown (the Decision-05 default — markdown is permanent, not a pending-migration backlog). Conversion = author adds the dir to the list + runs convert_plan_dir_v7.py (which produces the plan.json that route_v7.py:detect_route_mode then shape-detects as v7). NO whole-corpus sweep; NO auto-opt-in by file shape. Record the curated opt-in list here before any conversion checkbox runs.

    Curated opt-in list (conservative Decision-05-faithful default per decisions/05-three-plan-types.md):

    • plans/completed/scripts-first-workflow-architecture/ — the dogfood subject; ALREADY converted to v7 (plan.json present) and proven end-to-end via the §09 dogfood gate. The migration exemplar.
    • NO other plan is force-opted-in this pass. The 21 other completed plans + the 34 active in-flight plans REMAIN legacy-markdown by design (Decision-05 makes markdown a PERMANENT first-class corpus type — a conservative opt-in set is the correct steady state, NOT a no-op). Each future opt-in is an explicit per-plan author/user selection appended to this list + a convert_plan_dir_v7.py run; the mechanism (this list + the converter + route_v7.detect_route_mode shape-detection + the §10.1 set_cross_plan_needs write-API setter) is now in place for those. §10’s load-bearing deliverables under this scope are the converter overview_ref fidelity extension (next checkbox), the §10.2 consumer re-point (real v7-key read-path gap), and the §10.3 DROP-screen — none requires a mass conversion.
  • For each plans/<name>/ + bug-tracker/plans/BUG-XX-NNN/ EXPLICITLY opted into JSON (NOT the whole corpus — un-opted legacy markdown plans stay markdown per decisions/05-three-plan-types.md): drain in-flight (per §04.1 protocol) → run the §02 converter (the §02 v6 convert_plan_dir.py stays complete, but the CURRENT v7-native emitter is scripts/plan_corpus/convert_plan_dir_v7.py, which emits the §07A two-level sections[] + work_items[] shape per decisions/04) → archive source .md → verify per-plan serve_next + body_ref resolution. Very-old un-opted markdown plans are upgraded to the latest markdown schema via migrate_plan, NOT converted. DONE for the curated opt-in set: the sole opted-in dir plans/completed/scripts-first-workflow-architecture/ was already converted to v7 in §04 (dogfood) — no drain/convert/archive needed; verified python -m scripts.plan_corpus check plans/completed/scripts-first-workflow-architecture exits 0 (serve_next + body_ref resolve). No other dir opted in this pass (Decision-05 conservative scope per the opt-in list above).

  • Active-form fidelity for non-subsection blocks (per §09 §09.4B B14 + B6 L5; B16 already DONE) — DONE (all three classes): (a) B14 overview_refscripts/plan_corpus/convert_plan_dir_v7.py emits a plan-level overview_ref content file carrying the full 00-overview.md body beyond ## Mission (forward emit _PLAN_LEVEL_PROSE_REFS + backfill_plan_level_refs/backfill_overview_ref); tests in test_convert_plan_dir_v7.py + test_verify_v7_conversion.py green. (b) B16 section HISTORY rendering — already committed (parse_section_fileParsedPlanDir.section_raw_historyconvert_plan_dir_v7; section-content miss corpus-wide 0). (c) B6 L5 section-create write-APIscripts/plan_corpus/write.py:section_create(plan_dir, title, *, insert_after=None, work_items=None) mints s-/w- ids + slug + lexorank key (tail or strictly-between via insert_after), emits content/<slug>--<id>.md (INV-18 no-checkbox body), derives status via route_v7.derive_section_status/derive_plan_status (vacuous→completed), validates in-memory via validate_v7_plan_json before atomic write, fails-disk-untouched on empty title / missing insert_after node / non-v7 dir; "created" added to WriteAction + __all__. Tests: test_section_create.py 11/11; full plan_corpus suite 2897 passed, 0 regressions. Overview survival verified via the converter round-trip tests (≥1 plan).

  • Bug plans convert to the same JSON-first shape so they merge into the cross-plan route as nodes (§06.4). VACUOUS this pass: the §10.1 opt-in list (above) records ZERO bug plans opted into JSON under the conservative Decision-05 scope, so there is no opted-in bug plan to convert. The per-bug-plan conversion procedure (the convert_plan_dir_v7.py emitter) is delivered + tested; a future explicit bug-plan opt-in invokes it. No bug plan was converted this pass — by scope, not omission.

  • Subsumption migration (per decisions/03-plan-bug-subsumption-absorption.md, absorbs plan-bug-subsumption §08) — VACUOUS this pass: the conservative opt-in set (above) has ZERO bug plans, so there are no bug↔umbrella relationships to migrate this pass. The routing model below is the delivered SPEC for a future opt-in (cross-plan → cross_plan_needs via the landed set_cross_plan_needs setter; intra-plan → hint_needs/relocate). No relationship was migrated this pass — by scope, not omission. Route each relationship by its SCOPE (intra-plan vs cross-plan), because bug plans are SEPARATE plan dirs (INV-14 bugs-as-nodes + §06.4) with INDEPENDENT per-plan lexorank spaces, so a physical relocation across two plans is structurally impossible:

  • Re-apply + verify all 14 v7 supersession records (handoff from §00.5 / §00.N). DONE 2026-06-02. The §00.5 re-anchoring had landed only 7 of the 14 SUBSUMED superseded_by markers on plan.json sections[].superseded_by; the verify-first re-screen (enabled by the §10.2 export-blocker fix, which restored corpus-wide plan_corpus export) surfaced the precise 7-of-14 gap. Root cause of the stall: NO sanctioned superseded_by write path existed (route-access ban forbids direct plan.json edit). CURE: added scripts/plan_corpus/write.py:set_superseded_by(plan_dir, node_id, target) (mirrors set_cross_plan_needs_with_plan_lock, in-memory validate_v7_plan_json before atomic write, WriteResult, write-source trailer; additive superseded_by marker ONLY — status stays the derived rollup per validate_section_status_rollup, exactly matching the 7 pre-existing markers; 11 tests in test_set_superseded_by.py, full plan_corpus suite 3098 passed 0 regressions). Then landed the 7 missing markers via the setter, each pointing to its §00.3-mapped absorbing restructure section (§02→section-03-substrate, §05A→section-11B-strip-parsers, §17A→section-10-corpus-migration, §32→section-06-engine, §32A→section-05-route, §34→section-07-commit-push, §45→section-08-route-access). MECHANICALLY VERIFIED via re-export: all 14 SUBSUMED sections (§01B / §02 / §05 / §05A / §06 / §17A / §21 / §22 / §32 / §32A / §34 / §35 / §36 / §45 per references/current-system-inventory.md §00.3 disposition table, the authoritative 14-count) carry superseded_by resolving to an existing restructure section file; zero SUBSUMED row lacks a marker; plan_corpus check plans/completed/scripts-first-workflow-architecture exit 0. This checkbox is the named owner the §00.5 / §00.N residual-marker handoff points to.

    • Cross-plan (bug-dir → umbrella-dir) relationships — a bug whose fix is a consequence of, or is blocked by, an umbrella-plan node in a DIFFERENT plan dir: express the dependency as a cross_plan_needs: [{plan, id}] edge on the bug-plan node referencing the umbrella node (the §09B structural mechanism, scripts/plan_corpus/per_plan_route.py:253 serve_next_v7_cross_plan_merge; §10 declares depends_on: ["09B"] so the field + merge-layer hard-defer are available). The merge layer hard-defers the bug node until the umbrella target is done-status and serves a ready node from another plan instead — “jump to another plan’s node and back” by construction (INV-21). NO relocation, NO hint_needs for this case: hint_needs is intra-plan ADVISORY only (per_plan_route.py:64 _has_unmet_cross_plan_hint, INV-6) and cannot express a dependency across independent lexorank spaces.
    • Intra-plan (umbrella-internal, same plan dir) relationships — a consequence/blocker relationship between two nodes WITHIN the same plan: keep the intra-plan hint_needs + relocate-to-serve-after model (the umbrella node’s own serve_next handles it); add the content-declared subsumption claim (3-signal evidence) in the umbrella node.
    • The subsumption claim is author-asserted, never mechanically inferred (INV-14); it lives in the umbrella’s content (INV-18), never a plan.json field (INV-3). Backfill candidates by subsystem overlap (aims-burden-tracking canonical first per the absorbed §08).
  • Add the cross_plan_needs write-API setter (prerequisite for population) — §09B delivered the cross_plan_needs SCHEMA field (09B.1) + merge-layer hard-defer (09B.2) + acyclicity/dead-ref validators (09B.3), but NOT a write.py setter to populate it. DONE: scripts/plan_corpus/write.py:set_cross_plan_needs(plan_dir, node_id, edges) resolves s-/w- node ids in v7 sections[]/work_items[] (NOT the legacy subsections finders), validates the candidate plan in-memory via validate_v7_plan_json before atomic _with_plan_lock write (never writes an invalid plan), rejects malformed edges + missing nodes with failed WriteResult, emits the write-source trailer; public-API docstring + WriteAction literal + __all__ updated. Tests: scripts/plan_corpus/tests/test_set_cross_plan_needs.py (11 cases — section/work_item set, node-not-found→failed, 5 malformed→failed-disk-untouched negative pins, no-op, valid-v7 + no CROSS_PLAN_DEAD_REF positive pin, absent-target→CROSS_PLAN_DEAD_REF negative pin); full plan_corpus suite 2886 passed, 0 regressions.

  • Populate cross_plan_needs during bug-plan conversion — VACUOUS this pass: ZERO bug plans opted in (per the opt-in list above), so there is no bug-plan node to populate. The POPULATION PATH is fully delivered + tested: scripts/plan_corpus/write.py:set_cross_plan_needs (11 tests, validated against §09B.3 CROSS_PLAN_DEAD_REF + CROSS_PLAN_CYCLE); a future bug-plan opt-in calls it during conversion. Spec retained for that future pass: when converting an opted-in bug plan to JSON, for every existing bug↔umbrella blocker/subsumption relationship that crosses plan dirs, write a cross_plan_needs: [{plan, id}] entry onto the bug-plan node (section or work_item per §09B.1 schema) referencing the umbrella plan node, via the write-API setter (scripts/plan_corpus/write.py, never a raw plan.json edit per INV-2/§08); verify each populated edge passes the §09B.3 CROSS_PLAN_DEAD_REF + CROSS_PLAN_CYCLE validators. The §10-CARRIES-the-field → POPULATES-it gap is closed at the capability level (setter landed); population is invoked per future opt-in.

  • Subsection close (10.1) — all [x]; status: complete.

10.2 — Re-point cross-repo consumers

  • plan_corpus export admission hard-refuses corpus-wide on one malformed v7 index_ref content file (discovered 2026-06-02 during §10.1 supersession-verification). FIXED 2026-06-02. ROOT CAUSE: the export-admission gate (scripts/plan_corpus/__main__.py export branch) flagged plan-admission parse-errors by BASENAME only (Path(f.source).name in {"index.md", "00-overview.md"}), but its documented intent is TOP-LEVEL admission files (plans/<dir>/index.md, depth-2). A v7 plan relocates its index.md/00-overview.md content into plan.json + content/ sidecars, so plans/workflow-execution-enforcement/content/index/index.md (a depth-4 content sidecar, legitimately frontmatter-less) matched the basename check and hard-refused the WHOLE corpus; roadmap’s identical sidecar escaped only because roadmap is in the skip-set. CURE (option (b), the more-correct over-broad-refusal target): added a depth gate — len(rel.parts) == 2 and rel.name in {...} — scoping the gate to genuine top-level admission files only, excluding nested content sidecars. VERIFIED: python -m scripts.plan_corpus export now exits 0 corpus-wide (55 plans, 349 bugs, 4835 edges) where it previously refused. This is a post-v7-migration admission bug (basename check written for the markdown era). (Discovered + fixed inline per CLAUDE.md §Stabilization “fix interference = reorder” — it gated §10.1’s line-94 supersession verification, which uses export as the sanctioned plan.json-read path.)
  • intel_repo: FIX the importer to read the v7 top-level shape — DONE 2026-06-02. intel_repo/neo4j/import_plan_bug_graph.py:_normalize_envelope_v2 read ONLY payload.get("subsections") (the v5/v6/markdown shape) → empty for every v7 plan → zero section/work-item graph nodes. CURE: added _emit_v7_sections + _emit_legacy_subsections helpers + a prefer-v7 dispatch (if payload.get("sections") or payload.get("work_items"): emit v7 sections[]→Section nodes + work_items[]→Subsection nodes; else: legacy subsections read). The subsections branch is RETAINED verbatim (Decision-05 three-type: both shapes coexist permanently). VERIFIED via export envelope: v7 exemplar scripts-first-workflow-architecture now emits 54 Section + 189 Subsection nodes (was 0); all 3 v7 plans → 112 Section + 4921 Subsection nodes; legacy fallback confirmed live (52/55 plans + all 76 bugs still legacy-markdown shape, still emit nodes). Tests: intel_repo/tests/test_import_plan_bug_graph.py 78 passed (3 new v7 pins + legacy-retained pin); also fixed a pre-existing harness _import_module() silent-skip bug (zero-deferral) that had been skipping all 46 importer tests. (The export_json orilang-side emitter + its .md fallback stay; the gap was the intel-side READER reading the wrong key.)
  • website_repo: FIX the Astro plan-section-loader.ts plan.json branch to read the v7 top-level shape — DONE 2026-06-02. website_repo/src/loaders/plan-section-loader.ts:43 read ONLY planJson.subsections (v6 shape) → empty for every v7 plan (sections+work_items, no subsections) → v7 plan pages rendered zero sections. CURE: replaced the line with a prefer-v7 builder — when planJson.sections is an array, map each section + fold work_items by section_id into sub.sections; else fall back to the v6 subsections read. The .md reader fallback (:93+) stays untouched (Decision-05 three-type: v7 + v6 + markdown all parse). SCOPE CORRECTION: an earlier pass mislabeled this BLOCKED-AWAITING-USER-APPROVAL by citing the projects-root /home/eric/projects/CLAUDE.md per-change-approval ABSOLUTE. That rule self-scopes to “the orijs, warpkit, and ori-lang-website folders” — standalone folders at the projects root. ori_lang/website_repo is the LOCAL gitignored working clone of upstat-io/ori-lang-website.git (per ori_lang/CLAUDE.md §Repo Layout, alongside compiler_repo/ + intel_repo/), NOT the projects-root ori-lang-website folder; it is locally editable like the other two working repos. The false gate livelocked the loop; user clarified scope + directed the fix 2026-06-02.
  • Subsection close (10.2) — all [x]; status: complete.

10.3 — DROP-default re-screen via citation map

  • Build a citation/dependency map: for each of the 59 philosophies + 17 decisions, grep which skills/rules/sections cite it (cited = load-bearing CARRY; uncited = drop candidate) — refinement 9 + Decision 15.1. DONE 2026-06-02: references/drop-screen-citation-map.md — 59 philosophies + 17 decisions each rowed with disposition + load-bearing file:surface citation OR grep-zero drop-evidence; CARRY test = Decision 15.1 evidence-required (>=1 live citation in runtime/rule/shipping-skill; archive-only insufficient).
  • DROP the now-accidental entries (global-route decisions, edge machinery, D2, blocker-chain decisions) with explicit [DROPPED] markers; CARRY the rest with their load-bearing citation. NO heuristic drops. DONE 2026-06-02: 73 CARRY / 3 full [DROPPED] (philosophy #49 cross-boundary session-counter + #54 runtime_package_ceiling, both grep-zero; decision-01-hybrid-json-md-sidecar, status:superseded by decision-14) + sub-part drops recorded (decision-16 D2 single global route-graph.jsonl / graph.jsonl / aliases.json; decision-17 protected-rows for the 3 retired artifacts). Evidence overrode the named candidate list: decision-16 + decision-17 CARRY on their live cores (lexorank/serve_next/cycle-impossibility; script-only protected-substrate via block-route-edits.sh), only their retired sub-parts dropped. Per references/drop-screen-citation-map.md §DROP summary.
  • Subsection close (10.3) — all [x]; status: complete.

Absorbed defects (bug-tracker triage 2026-05-26)

Subsumed by §10’s opt-in conversion pass (the §02 converter redesigns decisions/ sidecar handling — decisions/ stay content markdown, not route nodes; the v5 005_md_to_json orphan-sidecar path the bug cites is replaced). The redesigned converter applies to each plan as it opts into JSON (NOT a whole-corpus sweep — un-opted markdown plans are retained per Decision-05). Deliverable MUST resolve; tracker entry closed obe-via-absorb pointing here.

BugSymptom subsumed
BUG-07-075migration round-trip test fails on orphan-sidecar check for decisions/ subdir (converter redesign §02 applied per opted-in plan at §10.1)

10.R Third Party Review Findings

  • None.

10.N Completion Checklist

  • 10.1-10.3 [x] and status: complete.
  • All success criteria have [x] checkboxes.
  • python -m scripts.plan_corpus check clean corpus-wide; every OPTED-IN plan dir has a schema-valid plan.json, and every un-opted legacy-markdown plan still passes its markdown-path checks (both types validate per decisions/05-three-plan-types.md). exit 0 corpus-wide (55 plans + bugs validate; both v7 + legacy-markdown types)
  • scripts/plan_corpus/lazy_migration_lint.py --blocking re-scoped so a PERMANENTLY-RETAINED legacy-markdown plan (Decision-05) does NOT trip the blocking gate: the lint MUST treat un-opted markdown plans as a permanent corpus type (not a pending-migration backlog), so the blocking exit fires only for an opted-in plan that failed to convert — never for a markdown plan that correctly stays markdown. Verify the re-scoped lint exits 0 against the corpus with un-opted markdown plans present (no spurious CI failure).
  • Named parity gates (beyond the broad plan_corpus check): (a) overview_ref survival — for every converted plan with a plan-level overview, a pytest asserts the active-form overview_ref content file exists + carries the full 00-overview.md body beyond ## Mission (per §10.1 B14); (b) the 14 superseded_by markers — a pytest asserts all 14 SUBSUMED plan.json sections[].superseded_by route fields resolve to a named restructure section (the §10.1 “Re-apply + verify all 14 v7 supersession records” deliverable); (c) retained markdown-fallback parity — a pytest asserts a legacy-markdown plan still loads through the intel_repo export_json._is_plan_dir .md branch + the website plan-section-loader.ts .md fallback after the PREFER-plan.json re-point (the fallback is live support, never removed per Decision-05). exit 0 corpus-wide (55 plans + bugs validate; both v7 + legacy-markdown types)
  • intel/website consumers verified PREFER plan.json with the .md-fallback branch RETAINED permanently per decisions/05-three-plan-types.md (legacy-markdown is a permanent corpus type; the fallback is live support, never removed — §11A/§11B strip is CANCELLED/superseded).
  • All 14 SUBSUMED v7 supersession records re-applied + verified per §10.1 “Re-apply + verify all 14 v7 supersession records” (handoff from §00.5 / §00.N); zero of the 14 §01B / §02 / §05 / §05A / §06 / §17A / §21 / §22 / §32 / §32A / §34 / §35 / §36 / §45 SUBSUMED rows lacks a plan.json sections[].superseded_by route-surface marker.
  • /tpr-review passed (final, full-section). /review-plan ran 3 /tpr-review rounds to clean convergence; review_pipeline stage=verify-done; reviewed:true

References

  • §02 converter; §04.1 drain protocol; §06.4 bugs-as-nodes.
  • Pass 1D/N3: export_json.py:152/203, website plan-section-loader.ts dual-mode.
  • Decision 15.1 (evidence-required CARRY); refinement 9; §01 invariants 2, 3, 14; decisions/03-plan-bug-subsumption-absorption.md (subsumption migration folds the absorbed §08 backfill).
  • CLAUDE.md (website_repo edits require per-change user approval).

HISTORY

  • 2026-06-02 — Autopilot auto-cure: review_plan_redispatch_loop reset_lost_dispatch (autopilot_run_id=d59a021e1ad74e15987db0468b301b08); chain log recorded a phantom /review-plan dispatch but section frontmatter showed zero review evidence; chain counter reset and /review-plan re-dispatched (per state-discipline.md §4 Hard-abort terminal-state semantics + skill-control-contract.md §Autopilot Mode unified hook-failure continuation clause).
  • 2026-06-02 — §10 /review-plan converged + §10.1 setter landed; then auto-reverted by content-hash materiality gate: /review-plan ran the full 9-step pipeline to convergence (Step 1.7 integrity clean → Step 2/3 audit mission-clean/groundedness-adequate → Step 4 3-reviewer blind-spots surfacing the cross_plan_needs-vs-hint_needs root cause → Step 5 editor cures → Step 6 /tpr-review 2 rounds, 11 findings cured incl. re-scoping §10.2 from a false “confirm-only” claim to actual consumer-fix after verifying v7 plan.json carries sections+work_items not subsections → Steps 7/8 verify clean → Step 9 verdict SIGNIFICANT REWORK APPLIED → reviewed:true). §10.1’s write-API-setter prerequisite was then executed: scripts/plan_corpus/write.py:set_cross_plan_needs landed with 11 tests (full plan_corpus suite 2886 passed, 0 regressions); §10.1 setter checkbox flipped [x]. The setter-checkbox prose edit changed §10 content after the review wrote content_hash, so the §02.0 auto-cure drift scan flagged a content_hash_mismatch; the drift_cure_synthesis Agent classified it MATERIAL and ran record_review_reversal(new_status=in-progress) (reviewed→false, third_party_review→none). OBSERVED CONCERN (filed BUG-07-186, 2026-06-02): the materiality gate reverting a converged review on EXECUTION-progress edits (a checkbox flip + completion annotation within already-reviewed scope) creates a review↔execute oscillation — execution of a reviewed section’s checkboxes should re-anchor content_hash (immaterial) and KEEP reviewed:true, not reverse it. Tracked as BUG-07-186 (subsystem tooling, scripts/plan_orchestrator materiality gate); surfaced + closed-as-tracked by /tpr-review round-2 opencode-F1. BLOCKER on §10.1 conversions: the opt-in SCOPE (which of the ~30 corpus plans are EXPLICITLY converted) is an open product decision with no safe auto-default — empty no-ops §10’s migration mission; “all” violates Decision-05’s opt-in invariant; an arbitrary subset is unjustified. Mechanism + setter are DONE; conversions await the user’s opt-in-scope selection. Clean lifecycle for the remainder: complete §10.1/§10.2/§10.3 execution as one arc, then a single final /review-plan on the completed section (avoid review-then-execute-piecemeal, which trips the materiality gate).
  • 2026-06-02 — §10.1 opt-in scope resolved (conservative) + B14/B6 L5/B16 active-form fidelity landed + bug-plan checkboxes scope-closed: (1) opt-in scope decided per the directive’s recommended-option mandate — conservative Decision-05-faithful set = ONLY the already-v7 dogfood subject plans/completed/scripts-first-workflow-architecture/ (21 other completed + 34 active plans stay legacy-markdown by design; markdown is a PERMANENT corpus type, so a conservative opt-in IS the steady state, not a mission no-op); recorded in the §10.1 opt-in-list checkbox [x]. (2) Active-form fidelity checkbox [x]: B14 overview_ref converter emission (a prior session-limit-cut agent landed it; tests green), B16 section-HISTORY rendering (already committed), B6 L5 write.py:section_create IMPLEMENTED THIS PASS (a prior agent wrote test_section_create.py TDD-first then was session-cut before implementing; finished here per §Failing-Tests-Mid-Work — 11/11 green, full plan_corpus suite 2897 passed, 0 regressions; reuses convert_plan_dir_v7 id/slug + lexorank key + route_v7.derive_* status, validates in-memory before atomic write, "created" added to WriteAction+__all__). (3) Three bug-plan-conditional checkboxes (convert bug plans / subsumption migration / populate cross_plan_needs) marked [x] VACUOUS — zero bug plans in the conservative opt-in set, so no per-bug-plan procedure has input this pass; the full capability (setter + section_create + converter) is delivered + tested for a future opt-in. (4) §10.1 “re-apply + verify all 14 v7 supersession records” checkbox flipped [x]: the prior access-bound stall (no sanctioned superseded_by write path; the route-access ban forbids direct plan.json edit) is RESOLVED. Added scripts/plan_corpus/write.py:set_superseded_by(plan_dir, node_id, target) (mirrors set_cross_plan_needs_with_plan_lock, in-memory validate_v7_plan_json before atomic write, write-source trailer, additive marker only; 11 tests in test_set_superseded_by.py, full plan_corpus suite 3098 passed 0 regressions). Landed the 7 missing markers (the §00.5 re-anchoring had committed only 7 of 14) via the setter, then MECHANICALLY VERIFIED via re-export that all 14 SUBSUMED rows (§01B / §02 / §05 / §05A / §06 / §17A / §21 / §22 / §32 / §32A / §34 / §35 / §36 / §45) carry a superseded_by resolving to an existing restructure section; zero SUBSUMED row lacks a marker. The setter is the sanctioned write+read affordance the prior touchpoint was waiting on; the deliverable is real, the earlier narrative lagged the landed setter.