untracked files on main: dceb101 feat(#63): IMP-34 R1 donor capacity measured bound (u1+u2)

This commit is contained in:
kmlee1 committed 2026-05-21 22:07:41 +09:00
commit 8f085a28d3
3220 files changed
+985495

No files matched your search

@@ -0,0 +1 @@
[{"id": 21720, "html_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/27#issuecomment-21720", "pull_request_url": "", "issue_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/27", "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 problem-review — IMP-27 K5 (catalog 로드 + `_get_block_by_id` 중복 cleanup, 3 module)\n\n## 1. Root cause\n\nThree Phase Q modules each grew their own catalog loader (and two of them grew their own `_get_block_by_id`) during Phase Q evolution. INSIGHT-MAP §5 K5 (`docs/architecture/PHASE-Q-INSIGHT-TO-22STEP-MAP.md:151`) and PHASE-Q-AUDIT.md §2.10 K5 (`docs/architecture/PHASE-Q-AUDIT.md:1087`) catch this as a cleanup-only 별 axis (\"Phase R' cleanup 또는 Phase Z catalog 확장 axis 활성 시 *중복 제거 별도 판단*\"). Verified factually per RULE 5 (value + path + upstream + unknown):\n\n### 1-a. Three loaders, **not three duplicates** — shapes differ\n\n| module | symbol | return type | callers |\n|---|---|---|---|\n| `src/block_reference.py:110` | `_load_catalog() -> list[dict]` | top-level `blocks` list | `src/block_reference.py` (5×: L260, L324, L462, L657, L666, L713), `src/fit_verifier.py` (4×: L131, L840, L985, L1004), `src/space_allocator.py` (3×: L34, L390, L786), `src/pipeline.py:228` |\n| `src/block_selector.py:57` | `load_catalog() -> dict` | full root dict (`{\"blocks\": [...], ...}`) | internal only — `src/block_selector.py` L109, L203 |\n| `src/renderer.py:32` | `_load_catalog_map() -> dict[str, str]` | derived `id → template_path` map | `src/renderer.py` L77, L126, L135 |\n| `src/renderer.py:69` | `_load_catalog_map_with_variants() -> dict[str, str]` | derived `\"id--variant\" → template_path` map | `src/renderer.py` L126 |\n\nThe renderer pair returns a **derived projection** (id → template-path string), not the catalog list. Only `block_reference._load_catalog` and `block_selector.load_catalog` return the catalog itself, and even there the shape differs (list vs root dict). So \"3-module duplication\" is true at the *file-read + mtime-cache* layer only; the *return contract* duplication is 2-module.\n\n### 1-b. Two `_get_block_by_id`, **different signatures**\n\n| module | signature | catalog source |\n|---|---|---|\n| `src/block_reference.py:124` | `_get_block_by_id(block_id: str) -> dict \\| None` | internal `_load_catalog()` call |\n| `src/block_selector.py:78` | `_get_block_by_id(block_id: str, catalog: dict) -> dict \\| None` | caller-supplied |\n\n`src/renderer.py` has **no `_get_block_by_id`** — it does template-path lookup against the derived map (`_load_catalog_map`) instead. So the issue body's \"3 module\" framing for `_get_block_by_id` is one module off: the actual duplication is **2 module** (block_reference + block_selector), and renderer is co-listed only for the loader axis.\n\n### 1-c. **Critical contextual fact — `templates/catalog.yaml` was deleted on 2026-05-08**\n\nCommit `cc2f434` (\"cleanup: legacy templates/blocks + figma_to_html_agent block-tests / 옛 docs 정리\", 2026-05-08) deleted `templates/catalog.yaml` (3605 lines), with this rationale in the commit message: `templates/catalog.yaml — 위 block library 의 catalog (의존성과 같이 폐기). ... Phase Z runtime / V4 catalog 영향 0 (의존성 grep 으로 사전 검증)`.\n\nVerified:\n- `ls templates/catalog.yaml` → not found (current main HEAD = `2896bb6`).\n- `git log -- templates/catalog.yaml` shows last touch = `cc2f434` (deletion).\n- All three modules still reference the dead path:\n - `src/block_reference.py:112` → `path = TEMPLATES_DIR / \"catalog.yaml\"`\n - `src/block_selector.py:22` → `CATALOG_PATH = Path(\"templates/catalog.yaml\")`\n - `src/renderer.py:23` → `CATALOG_PATH = TEMPLATES_DIR / \"catalog.yaml\"`\n\nFailure-mode mismatch among the three loaders against the deleted file:\n- `block_selector.load_catalog` (L61–63): `if not CATALOG_PATH.exists(): return {\"blocks\": []}` — graceful empty.\n- `renderer._load_catalog_map` (L39, L47, L60): `if CATALOG_PATH.exists()` guarded + warning log — graceful empty.\n- `block_reference._load_catalog` (L113): unconditional `path.stat().st_mtime` — **FileNotFoundError** on first invocation. No `.exists()` guard.\n\nThe third loader (block_reference) is the de-facto-shared utility (cLine truncated