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": 18832, "html_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/11#issuecomment-18832", "pull_request_url": "", "issue_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/11", "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 Round #1\n\n## Root cause (현황 사실 정리)\n\n**문제 진술 (issue body 기준)**\n- Step 22 (frontend UI) — pendingLayout 모드 zone resize 시 frame 한계 (catalog 의 `visual_hints.min_height_px`) 시각화 없음.\n- 사용자가 zone 을 frame 최소 가독 높이 (예: F13=230, F29=345, F20=350) 보다 작게 줄여도 UI 신호 없음 → 한계 인지 불가.\n\n**현재 데이터 경로 (verified)**\n- catalog source : `templates/phase_z2/catalog/frame_contracts.yaml` 의 각 frame entry → `visual_hints.min_height_px` (frame_contracts.yaml:40,89,218,280,351,417,481,544,601,668).\n- Step 8/9 backend 이미 `zone_region_plans[].min_height_px` 로 zone 단위 노출 (src/phase_z2_pipeline.py:3771).\n- Step 9 application_plan 의 candidate-단위 노출 = `v4_all_judgments[]` (src/phase_z2_pipeline.py:4007). 현재 노출 필드 : `template_id, frame_id, frame_number, v4_rank, confidence, label, catalog_registered`. **`min_height_px` 미포함** = root cause.\n- Frontend type `FrameCandidate` (Front/client/src/types/designAgent.ts:120) : `id, name, score, confidence, thumbnailUrl, label, catalogRegistered` — `minHeightPx` 필드 부재.\n- Frontend mapper (Front/client/src/services/designAgentApi.ts:514) : `v4_all_judgments` → `FrameCandidate` 변환 시 `catalog_registered` 만 추출 — `min_height_px` 추출 코드 부재.\n- Frontend SlideCanvas zone overlay (Front/client/src/components/SlideCanvas.tsx:408-460) : resize handler (462-535) `minSize=0.05` 만 사용. frame contract 의 `min_height_px` 참조 없음.\n\n**Root cause**: backend Step 9 `v4_all_judgments` 가 candidate 별 `min_height_px` 를 노출하지 않아 frontend 가 frame 별 최소 가독 높이를 알 길이 없음. 따라서 zone overlay 가 한계 비교 / 시각 hint 를 띄울 수 없음.\n\n## Scope-lock (5 axes, additive only)\n\n### IN scope\n\n1. **Backend additive field** — `src/phase_z2_pipeline.py:4007 v4_all_judgments` 각 entry 에 `min_height_px` 추가.\n - source : `get_contract(c.template_id).visual_hints.min_height_px` (catalog read, no write).\n - contract unregistered 시 `None` (graceful).\n - `catalog_registered` 가 이미 `get_contract(c.template_id)` 를 호출하므로 같은 lookup 재사용 가능 (성능 동일).\n - 다른 step output / mapper 변경 X.\n\n2. **Frontend type** — `Front/client/src/types/designAgent.ts FrameCandidate` 에 `minHeightPx?: number` 추가 (camelCase 관례 유지, optional).\n\n3. **Frontend mapper** — `Front/client/src/services/designAgentApi.ts:514` `frameCandidates` builder 에 `minHeightPx: c.min_height_px ?? undefined` 추가. `v4_candidates` fallback path (rawSource 분기) 는 `undefined` (graceful, no regression).\n\n4. **Frontend SlideCanvas hint** — `Front/client/src/components/SlideCanvas.tsx` zone overlay (408-460):\n - 각 zone 의 *active frame* `minHeightPx` 결정. priority : `userSelection.overrides.zone_frames[region.id] → defaultFrameId → undefined`. 이 frameId 로 `region.frame_candidates` 에서 `minHeightPx` lookup.\n - 현재 zone height (unscaled slide px) ≈ `localGeom.h * SLIDE_H` (즉 `localGeom.h * 720`). slide-body 가 720 보다 작으므로 실제 비교 기준은 slide-body 안 px = `localGeom.h * SLIDE_BODY_UNSCALED_H`. 단, **catalog 의 min_height_px 는 slide-body 좌표계 (compute_zone_layout) 기준** (src/phase_z2_pipeline.py:791, 3091 검증) — slide-body 절대 px.\n - slide-body 절대 px 산출 : `localGeom.h * measuredSlideBody.h * SLIDE_H` ✗ (scaled coord). unscaled 1280×720 좌표계는 `measuredSlideBody.h * 720` 이 slide-body 절대 height px. 즉 zone height unscaled px = `localGeom.h * measuredSlideBody.h * SLIDE_H`.\n - 비교 : `zone_height_px < minHeightPx` 이면 zone overlay div 에 빨간 outline class 추가 (`pendingLayout` 모드에서만, normal mode 영향 X).\n - **read-only**: resize handler 의 `minSize` 변경 X. drag block 없음. 시각 hint 만.\n\n5. **scope 외 (defer)**: LayoutPanel 카드의 min_height_px tooltip Line truncated