This commit is contained in:
commit
8f085a28d3
3220 files changed
+985495
No files matched your search
@@ -0,0 +1 @@
|
||||
[{"id": 21690, "html_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/26#issuecomment-21690", "pull_request_url": "", "issue_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/26", "user": {"id": 28, "login": "Kyeongmin", "login_name": "", "source_id": 0, "full_name": "이경민", "email": "kyeongmin@noreply.localhost", "avatar_url": "https://gitea.hmac.kr/avatars/d883a35f9197b080b2a0c535c3f9357dcd5c7d40b3c42bd8f40218cb94609a8e", "html_url": "https://gitea.hmac.kr/Kyeongmin", "language": "", "is_admin": false, "last_login": "0001-01-01T00:00:00Z", "created": "2025-12-30T10:51:04+09:00", "restricted": false, "active": false, "prohibit_login": false, "location": "", "website": "", "description": "", "visibility": "public", "followers_count": 0, "following_count": 0, "starred_repos_count": 1, "username": "Kyeongmin"}, "original_author": "", "original_author_id": 0, "body": "[Claude #1] Stage 1 — IMP-26 problem review (J3 html_generator utility 중복 cleanup)\n\n### Root-cause framing\n\nIMP-26 = `PHASE-Q-AUDIT.md §2.9` footnote **J3**: deterministic helpers inside `src/html_generator.py` (`normalize_mdx`, `_slice_mdx_sections`, `_get_definitions`, `_get_conclusion`) duplicate the §2.1 `mdx_normalizer.py` / §2.2 `section_parser.py` SoT. The audit classifies them as **Reference Only** inside an otherwise **Archive Candidate** module — and J3 explicitly says *\"Phase R' cleanup 시 제거/보존 여부를 별도 판단\"*. The issue body declares the trigger as \"Phase R' cleanup axis 활성 시\" with priority ↓ low (future). The Stage 1 question is: **is that trigger axis active today, and can the four helpers be removed in isolation?**\n\nAnswer (verified below): **no, on both counts**. The helpers are not isolated dead code — they have multiple live in-module callers plus an external import from `content_verifier.generate_with_retry`, which `pipeline.py` Stage 2 still dispatches for layout_template = Type A. Deleting them standalone breaks the Type A AI-HTML path that the active pipeline still consumes. The interfaces also diverge from the SoT (different return shapes / inputs), so the four helpers are not drop-in replaceable by §2.1 / §2.2 — a redirect would be a *migration with adapter code*, not \"코드 제거만\". The right scope-lock is therefore to **defer IMP-26 until the full §2.9 archive trigger fires** (i.e., when the Type A AI-HTML path is removed from the live pipeline), so the four helpers fall with their hosting module rather than as an isolated cleanup.\n\n### Verified facts (value + path + upstream)\n\n- **Issue backlog row** = `docs/architecture/PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md` IMP-26 §4 cleanup (3). Priority ↓ low (future). Trigger = \"Phase R' cleanup axis 활성 시\". Guardrail = \"Phase R' 영역 — 코드 제거만, 다른 axis 무관\".\n- **Source insight** = `docs/architecture/PHASE-Q-INSIGHT-TO-22STEP-MAP.md §5 J3` (별 axis 후보 cleanup) + `docs/architecture/PHASE-Q-AUDIT.md §2.9` (`src/html_generator.py` audit, lines 900–991).\n- **§2.9 audit verdict (verified)** = whole `html_generator.py` = \"Mixed (Archive heavy — Phase R' core). Salvage Candidate 0\". The four helpers themselves = **Reference Only** with `§2.1 / §2.2 에 더 직접적인 SoT 후보 존재` (lines 946–951). J3 footnote (line 975): cleanup deferred to Phase R' archive timing.\n- **SoT modules verified**:\n - §2.1 SoT = `src/mdx_normalizer.py::normalize_mdx_content` (line 395) — 4-layer parser (frontmatter / code-block protect / markdown-it-py AST / clean). Returns dict `{clean_text, title, images, popups, tables, sections}`.\n - §2.2 SoT = `src/section_parser.py::extract_major_sections` (line 23), `extract_conclusion_text` (line 491). Operates on already-normalized sections (list[dict]).\n- **Duplicate helpers in `src/html_generator.py`**:\n - `normalize_mdx` line 752 — single-pass regex → **str** (vs §2.1 returns dict).\n - `_slice_mdx_sections` line 830 — calls local `normalize_mdx`, returns `dict[str, str]` keyed by section name (vs §2.2 operates on `list[dict]` and returns `list[dict]`).\n - `_get_definitions` line 930 — uses `_slice_mdx_sections`; matches \"용어/정의\" section.\n - `_get_conclusion` line 943 — uses `_slice_mdx_sections`; matches \"요약/결론\" (vs §2.2 `extract_conclusion_text` which parses `:::note[핵심 요약]` from raw MDX).\n- **Interface divergence (not drop-in)**:\n - §2.1 input = raw MDX → dict output; helper `normalize_mdx` returns plain string. Adapter required.\n - §2.2 input = `normalized_sections: list[dict]`; helper `_slice_mdx_sections` input = raw `content: str`. Different abstractions.\n - §2.2 `extract_conclusion_text` reads `:::note[핵심 요약]` directive; helper `_get_conclusion` reads section names by Korean substring. Behaviorally different. **A pure deletion + import swap would change runtime behavior in the Type A path.**\n- **In-module live callers (wouLine truncated
|
||||
Reference in new issue
Block a user