docs: write Phase Q audit salvage plan

- Summarize §2.1~§2.11 audit into 8 Salvage Candidate bundles
- Fill §3-A lens table with A-1 through D-2 salvage/new-build decisions
- Add §3-B deterministic Step 16/17 retry refinement axis
- Keep Archive exclusions and detailed dual-write criteria out of §3 scope
- Add §5-1 dated entry for 2026-05-12

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-12 13:24:27 +09:00
parent b172c1b9f4
commit c7abf61ef6

View File

@@ -1230,24 +1230,36 @@ L5. (factual note — §1 매핑 누적) — §1 audit lens 의 B-1 매핑 정
## 3. Salvage Plan
> 모든 Salvage Plan 은 **§0-A 원칙** 을 따른다. 특히 **Salvage Candidate 적용 항목은 adapter + dual-write 검증 (원칙 3 + 9) 을 통과한 뒤** 기존 path 를 대체한다. 각 Salvage Candidate 적용 항목별 *dual-write 통과 기준* (어떤 artifact 필드가 일치해야 하는지) 은 항목별로 §3 안에 명시.
> 모든 Salvage Plan 은 **§0-A 원칙** 을 따른다. 특히 **Salvage Candidate 적용 항목은 adapter + dual-write 검증 (원칙 3 + 9) 을 통과한 뒤** 기존 path 를 대체한다. 각 Salvage Candidate 적용 항목별 *dual-write 통과 기준* (어떤 artifact 필드가 일치해야 하는지) 은 적용 axis 활성 시 별 turn 에서 확정.
>
> §2 결과를 합산해 §1 의 lens 항목별 *어떤 Phase Q 자산을 어떤 방식으로 가져올지* 결정. *후속 turn*.
> §2.1~§2.11 audit (2026-05-12 완료) 합산 — Salvage Candidate = **8 후보 묶음** (§2.1~§2.5 SoT, §2.6~§2.11 = 0). §1 lens 직접 매핑 4 묶음 + A-3 conditional 1 묶음 + 별 axis Step 16/17 retry 3 묶음. AI / Kei / Phase R' 흐름 자산은 §2.X audit 에서 Archive Candidate 분류 — 본 §3 적용 대상 외.
| Phase Z 항목 | 가져올 Phase Q 자산 | 방식 (Salvage / Reference / 새로 만들기) | 후속 axis |
### 3-A. §1 lens 항목별 Phase Q 자산 정리
| Phase Z 항목 | 가져올 Phase Q 자산 | 방식 | 후속 axis |
|---|---|---|---|
| A-1 Stage 0 normalize | (TBD) | (TBD) | (TBD) |
| A-2 Catalog 확장 | (TBD) | (TBD) | (TBD) |
| A-3 Frame preview 일관성 | (TBD) | (TBD) | (TBD) |
| A-4 slide-base iframe mode | (TBD) | (TBD) | (TBD) |
| A-5 V4 fallback | (TBD) | (TBD) | (TBD) |
| A-6 Zone 좌표 export | (TBD) | (TBD) | (TBD) |
| B-1 Zone-section override | (TBD) | (TBD) | (TBD) |
| B-2 Edited HTML → MDX | (TBD) | (TBD) | (TBD) |
| B-3 Sub-section drag drop | (TBD) | (TBD) | (TBD) |
| B-4 다른 layout zone-geometry | (TBD) | (TBD) | (TBD) |
| D-1 filtered_section_reasons UI | (TBD) | (TBD) | (TBD) |
| D-2 Frame min_height 표시 | (TBD) | (TBD) | (TBD) |
| **A-1** Stage 0 normalize | `mdx_normalizer.normalize_mdx_content` (전체 4 Layer) + `section_parser.extract_major_sections` + `extract_conclusion_text` (chained — §2.1 + §2.2 SoT) | **Salvage** (adapter + dual-write 검증 전제) | A-1 통합 axis |
| **A-2** Catalog 확장 | 없음 (§2.10 Salvage 0) | **새로 만들기** (frame_contracts + frame_partials catalog) | A-2 catalog 구축 axis |
| **A-3** Frame preview 일관성 | `slide_measurer.capture_slide_screenshot` | **Salvage 후보** (A-3 구현 axis 활성 시 dual-write 검증) | A-3 구현 axis |
| **A-4** slide-base iframe mode | 없음 (§2.9 Salvage 0) | **새로 만들기** (slide-base.html conditional CSS — embedded vs standalone) | A-4 보강 axis |
| **A-5** V4 fallback | 없음 (§2.4 `calculate_fit` 통째 Migrate 금지 — dual path 위험) | **새로 만들기** (Phase Z Step 9 / Step 16 확장) | A-5 V4 fallback axis |
| **A-6** Zone 좌표 export | `slide_measurer._MEASURE_SCRIPT` JS extension (`getBoundingClientRect()`) | **Salvage** (Phase Z visual_check JS 보강 + dual-write 검증) | A-6 JS 보강 axis |
| **B-1** Zone-section override | 없음 (§2.11 / §2.6 Salvage 0) | **새로 만들기** (CLI 인자 + pipeline override path) | B-1 신설 axis |
| **B-2** Edited HTML → MDX | 없음 (§2.7 Salvage 0) | **새로 만들기** (글벗 `fmt_slide.html_to_slide_mdx` 참조 가능) | B-2 신설 axis |
| **B-3** Sub-section drag drop | 없음 (§2.2 sub-section schema 는 Reference Only — dual path 위험) | **새로 만들기** (Phase Z section_id schema 확장) | B-3 신설 axis |
| **B-4** 다른 layout zone-geometry | 없음 (§2.5 `calculate_container_specs` 등 Reference Only — dual path 위험) | **새로 만들기** (build_layout_css 분기 확장) | B-4 보강 axis |
| **D-1** filtered_section_reasons UI | Phase Q audit 외 — frontend 신규 구현 | — | D-1 frontend axis |
| **D-2** Frame min_height 표시 | 없음 (§2.4 fit_verifier 간접) | **새로 만들기** (catalog `min_height_px` 직접 참조 + frontend resize hint) | D-2 frontend axis (catalog 참조) |
### 3-B. 별 axis — Step 16/17 retry 정밀화 (22-step 안 deterministic 보강)
> §1 lens 외 항목 (Phase Z Step 16 `router_decision` retry action 의 실 구현 후보). **AI fallback 아님** — Step 16 router / Step 17 retry trace 의 *deterministic* 보강 path. 22-step 안. AI 격리 invariant 안 (AI 호출 X).
| 별 axis action | 가져올 Phase Q 자산 | 방식 | 후속 axis |
|---|---|---|---|
| Step 16 `zone_ratio_retry` 실 구현 | `fit_verifier.redistribute` (zone 안 role 간 px 재배분) | **Salvage** (deterministic) | Step 16/17 retry 정밀화 axis |
| Step 16 `glue_compression` action (신설) | `space_allocator.compute_glue_css_overrides` + `calculate_glue_absorption` + `SPACING_GLUE`/`GlueSpec` (LaTeX 글루 모델) | **Salvage** (deterministic) | Step 16/17 retry 정밀화 axis |
| Step 16 `font_size_retry` action (신설) | `space_allocator.find_fitting_font_size` + `FONT_SIZE_STEPS` (이진 탐색) | **Salvage** (deterministic) | Step 16/17 retry 정밀화 axis |
---
@@ -1307,7 +1319,7 @@ audit 결과 → 어느 항목이:
| 2026-05-12 | §2.9 html_generator.py audit | 완료 — Mixed (Archive heavy — Phase R' core). **`html_generator.py` = Phase R' (AI HTML 직접 생성) main implementation (CLAUDE.md 명시 폐기)**. Salvage Candidate 0. AI HTML generation path (`generate_slide_html` / `_call_claude` / `regenerate_area` / `build_area_prompt` / Phase T supplement / `_LEGACY_*` prompts) = Archive Candidate. deterministic helpers (`normalize_mdx` / `_slice_mdx_sections` / `_get_definitions` / `_get_conclusion` / `_calc_indent` / `_replace_img_placeholder` 등) = Reference Only (§2.1 / §2.2 에 더 직접적인 SoT 후보 존재). §3 적용 대상 없음. 별도 surface: §1 A-3/A-4 매핑 부정확, J1 Phase R' core Archive marker, J2 §2.8 연결, J3 utility 중복 cleanup axis, J4 general helper reference axis, J5 §1 매핑 factual note |
| 2026-05-12 | §2.10 block_reference.py / block_selector.py audit | 완료 — Mixed (Reference Only heavy + 일부 high-level Phase R' / Kei prompt entries Archive). Salvage Candidate 0. block_reference utilities (`_get_jinja_env` / `_load_catalog` / `_get_block_by_id` / `_match_visual_type` / `_match_by_tags` / `VISUAL_TYPE_KEYWORDS`) + block_selector utilities + filtering (`load_catalog` / `_get_block_by_id` / `select_block_candidates` / `select_fallback_candidates` / 상수) = Reference Only. **block_reference high-level entries (`select_reference_block` / `generate_design_reference` / `select_and_generate_references`) = Phase R' reference path Archive (§2.8 / §2.9 와 같은 Phase R' core 그룹)**. block_selector `format_candidates_for_prompt` = Kei prompt formatter Archive (`kei_client.py` used). §3 적용 대상 없음. 별도 surface: §1 A-2 매핑 간접, K1 Phase R' reference path Archive marker, K2 Kei prompt formatter Archive marker, K3 block_selector legacy unused + dual path, K4 deterministic utilities reference axis, K5 catalog/_get_block_by_id 중복 cleanup axis, K6 §1 매핑 factual note |
| 2026-05-12 | §2.11 pipeline.py / pipeline_context.py audit (마지막) | 완료 — Mixed (Archive heavy — Phase Q+R'+T master orchestrator + utility Reference Only). **pipeline.py = Phase T 11-Stage AI orchestration main implementation (Phase Q+R'+T 모듈 모두 consume)**. Salvage Candidate 0. Main orchestration (`generate_slide` / `generate_slide_legacy` / `_retry_kei` / `_adjust_design` / `_review_balance` / `_apply_adjustments` / `_convert_kei_judgment`) = Archive. utility (`run_stage` / `_save_step` / `_build_overflow_context` / `_parse_json`) = Reference Only. pipeline_context.py = Reference Only (Pydantic schema + PipelineContext lifecycle methods). §3 적용 대상 없음. 별도 surface: §1 B-1 매핑 간접 (pipeline orchestration entry, direct composition planner 아님), 누적 §1 매핑 정정 axis weight ↑, utility 중복 (_parse_json 등) cleanup axis, L1 master orchestrator Archive marker, L2~L3 utility/schema reference axis, L4 cleanup axis, L5 §1 factual note |
| (then) | §3 Salvage Plan | (대기) |
| 2026-05-12 | §3 Salvage Plan 작성 | 완료 — §2.1~§2.11 audit 합산. Salvage Candidate **8 후보 묶음** lock: §1 lens 직접 매핑 4 (§2.1+§2.2 A-1 chained / §2.3 A-6) + A-3 conditional 1 (§2.3 `capture_slide_screenshot`) + 별 axis Step 16/17 retry 3 (§2.4 `redistribute` + §2.5 glue + §2.5 font compression). 구조 = §3-A (§1 lens 12 rows) + §3-B (별 axis 3 rows) — (γ) 중간안. 3-C Archive 명시 제외 / 3-D dual-write 상세는 §2 결론 중복 + 적용 axis 활성 시 작업 (over-engineering 회피). prelude 1 줄 — 8 후보 묶음 inventory |
| (then) | §4 우선순위 재정렬 → ROADMAP 갱신 | (대기) |
### 정정 pass 2 실행 원칙