{"body": "[Claude #2] Stage 2 simulation-plan \u2014 IMP-26 deferral formalization\n\n=== IMPLEMENTATION_UNITS ===\n- id: u1\n summary: Mark IMP-26 backlog row deferred + expand trigger axis with SoT-signature precondition; mirror trigger axis text in INSIGHT-MAP \u00a75 J3 row\n files:\n - docs/architecture/PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md\n - docs/architecture/PHASE-Q-INSIGHT-TO-22STEP-MAP.md\n tests: []\n estimate_lines: 6\n\n=== AXIS / ITEM COVERAGE ===\nIssue body explicit axes/items:\n| # | axis/item (from body) | covered_by | before | after |\n|---|-------------------------------------------------------------------------------------------------------|------------|------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 1 | utility \uc911\ubcf5 \uc81c\uac70 \u2014 `normalize_mdx` / `_slice_mdx_sections` / `_get_definitions` / `_get_conclusion` | u1 (defer) | status=`pending`, trigger=\"Phase R' cleanup axis \ud65c\uc131 \uc2dc\" | status=`deferred`; trigger expanded with \u00a72.1/\u00a72.2 SoT signature alignment precondition (adapter migration violates \"\ucf54\ub4dc \uc81c\uac70\ub9cc\" guardrail) \u2014 actual removal NOT performed |\n| 2 | Phase R' \uc601\uc5ed cleanup (\ucf54\ub4dc \uc81c\uac70\ub9cc) | u1 (defer) | trigger met implicitly when Phase R' archived | trigger now records dual precondition: Phase R' archive AND \u00a72.1/\u00a72.2 SoT signature unification \u2014 keeps eventual cleanup as pure removal |\n| 3 | guardrail: Phase R' \uc601\uc5ed, \ucf54\ub4dc \uc81c\uac70\ub9cc, \ub2e4\ub978 axis \ubb34\uad00 | u1 (defer) | guardrail intact but unmet (live callers + signature divergence) | guardrail unchanged; deferral note explains why current state violates it (file:line evidence carried via Stage 1 exit report) |\n| 4 | guardrail: \u00a72.1 / \u00a72.2 SoT \uc640 \ucda9\ub3cc X | u1 (defer) | currently conflicts (`html_generator.normalize_mdx`\u2192str vs \u00a72.1\u2192dict) | guardrail unchanged; deferral note flags conflict; resolution = SoT signature unification BEFORE removal |\n| 5 | trigger axis: Phase R' cleanup axis \ud65c\uc131 \uc2dc | u1 (defer) | single-precondition trigger | dual-precondition trigger documented in backlog + \u00a75 J3 row |\n| 6 | priority: \u2193 low (future) | u1 (defer) | priority `\u2193 low (future)` retained | unchanged |\n| 7 | milestone: B-4 \u00a74 cleanup (3) [#92] | out-of-scope | not edited | unchanged (milestone tracking handled by orchestrator, not by this doc edit) |\n| 8 | cross-ref: backlog \u00a74 IMP-26 / INSIGHT-MAP \u00a75 J3 / PHASE-Q-AUDIT \u00a72.9 | u1 (mirror) | only backlog row + \u00a75 row exist; AUDIT \u00a72.9 footnote already classifies| backlog + \u00a75 trigger text mirrored; AUDIT \u00a72.9 unchanged (footnote already says \"Phase R' cleanup \uc2dc \ubcc4\ub3c4 \ud310\ub2e8\" \u2014 no contradiction, no edit needed) |\n| 9 | review loop checkbox (Codex 1\ucc28 / Claude \uc7ac\uac80\ud1a0 / Codex \uc7ac\uac80\uc99d / scope-locked / ready-for-implementation / implemented / verified) | out-of-scope (issue meta) | unchanged | issue review loop is orchestrator-managed; this plan does NOT toggle checkboxes \u2014 only proposes doc edit |\n\nPer-unit rationale (\u2264 3 lines):\n- u1: Stage 1 binding contract = deferral. Sole doc surface that drives backlog automation = the IMP-26 row in PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md. Cross-anchor verbatim mirror rule requires trigger axis wording to match INSIGHT-MAP \u00a75 J3. Both updated atomically; no source code, no SoT changes.\n\nOut-of-scope (carried from Stage 1 scope_lock):\n- Actual helper deletion in `src/html_generator.py` (lines 752-827, 830-842, callers 654/730/1011/1029/1041).\n- Adapter migration redirecting helpers to \u00a72.1 `normalize_mdx_content` / \u00a72.2 `section_parser`.\n- Signature unification of \u00a72.1 / \u00a72.2 SoT (separate axis, prerequisite to eventual cleanup).\n- Type A AI-HTML dispatch removal in `pipeline.py` Stage 2 / `content_verifier.generate_with_retry`.\n- `_parse_json` (IMP-28) and catalog/`_get_block_by_id` (IMP-27) cleanups \u2014 separate issues.\n- PHASE-Q-AUDIT.md \u00a72.9 footnote \u2014 already says \"Phase R' cleanup \uc2dc \ubcc4\ub3c4 \ud310\ub2e8\"; no contradiction with deferral, no edit needed.\n\nRollback strategy:\n- Doc-only edit; revert = `git checkout -- docs/architecture/PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md docs/architecture/PHASE-Q-INSIGHT-TO-22STEP-MAP.md`. No runtime/test impact, no migrations to undo.\n\nTests:\n- None. Doc-only edit; no behavioral change. RULE 4 scope-qualified verification = grep both files for \"IMP-26\" and \"J3\" to confirm row updated + mirror consistent.\n\nFollow-up issue candidates (NOT created in this stage):\n- Future axis when SoT signature unification is planned: open a precursor issue \"\u00a72.1 + \u00a72.2 signature unification (drop-in compatibility for html_generator helpers)\" \u2014 prerequisite to IMP-26 eventual execution.\n\n=== EVIDENCE ===\n- Stage 1 exit report (binding): IMP-26 status=`deferred`, scope_lock=\"documentation-only\", out_of_scope=\"actual helper deletion / adapter migration / Type A path removal\".\n- `docs/architecture/PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md:93` \u2014 IMP-26 row, current status=`pending`, current trigger=\"Phase R' cleanup axis \ud65c\uc131 \uc2dc\".\n- `docs/architecture/PHASE-Q-INSIGHT-TO-22STEP-MAP.md:150` \u2014 \u00a75 J3 row, current trigger=\"Phase R' cleanup axis \ud65c\uc131 \uc2dc\".\n- `docs/architecture/PHASE-Q-AUDIT.md:946,947,951` \u2014 \u00a72.9 footnote already classifies the four helpers as Reference Only + \"Phase R' cleanup \uc2dc \ubcc4\ub3c4 \ud310\ub2e8\"; no edit needed.\n- `src/html_generator.py:752-827` (normalize_mdx), `:830-842` (_slice_mdx_sections), `:654,730,1011,1029,1041` (in-module callers) \u2014 live, not orphaned (confirmed by both Claude #1 + Codex #1 in Stage 1).\n- `src/mdx_normalizer.py:393-438` \u2014 \u00a72.1 `normalize_mdx_content(raw)\u2192dict` SoT (signature divergence vs html_generator helper returning str).\n- `src/section_parser.py:23-45` \u2014 \u00a72.2 `section_parser(list[dict])\u2192major-section dict` SoT (signature divergence vs `_slice_mdx_sections(raw)\u2192dict[str,str]`).\n- `src/content_verifier.py:535` \u2014 external import of `html_generator` helpers; transitive live reference.\n- Estimated diff size for u1: \u2264 6 lines total across 2 files (status cell + trigger axis cell rewrites + mirror in \u00a75 J3 row).\n"}