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": 22845, "html_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/76#issuecomment-22845", "pull_request_url": "", "issue_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/76", "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-47B problem review (reject route AI activation)\n\n### Root-cause framing\n\nThe AI fallback scaffolding from #61 (IMP-33) and the persistent cache backend from #62 (IMP-46) are both in place, but `gather_step12_ai_repair_proposals` is never called from the Phase Z runtime, AND the reject route is explicitly hard-coded out of AI eligibility at TWO layers:\n\n 1. `src/phase_z2_pipeline.py:572-577` `_IMP05_ROUTE_HINTS[\"reject\"] = \"design_reference_only\"` (reject route hint is the wrong policy).\n 2. `src/phase_z2_ai_fallback/step12.py:137-140` short-circuits any unit whose `route_hint == \"design_reference_only\"` with `skip_reason=\"design_reference_only_no_ai\"`.\n\nThe fix is therefore TWO surgical flips (route hint + step12 gate) plus ONE missing wire (call `gather_step12_ai_repair_proposals` from the pipeline and consume the returned `proposal.payload` into slot_payload before Step 13 render). The IMP-30 first-render invariant + IMP-46 cache + IMP-33 router/validator already do the heavy lifting — IMP-47B is the activation cut.\n\nThe user override path (clicking a reject card → `--override-frame`) ALREADY wires from FramePanel → Home.tsx → backend (`src/phase_z2_pipeline.py:3621`); what is missing is that override-to-reject does not set `provisional=True`, so the existing step12 gather's `provisional` gate would still skip it after the route-hint flip.\n\n### Verified facts (value + path + upstream)\n\n- Route hint map: `src/phase_z2_pipeline.py:572-577`\n ```\n _IMP05_ROUTE_HINTS = {\n \"use_as_is\": \"direct_render\",\n \"light_edit\": \"deterministic_minor_adjustment\",\n \"restructure\": \"ai_adaptation_required\",\n \"reject\": \"design_reference_only\", # ← issue body item #1\n }\n ```\n- Step 12 reject gate: `src/phase_z2_ai_fallback/step12.py:60` `_DESIGN_REFERENCE_ROUTE = \"design_reference_only\"` then `:137-140` `if route_hint == _DESIGN_REFERENCE_ROUTE: skip_reason = \"design_reference_only_no_ai\"`.\n- Step 12 provisional gate: `step12.py:133-136` `if not record[\"provisional\"]: skip_reason = \"not_provisional\"`. Override-to-reject would hit this after the route-hint flip unless we widen the gate.\n- `gather_step12_ai_repair_proposals` call sites in repo: `grep -n gather_step12 src/` → ONLY defined in `step12.py:69`. NOT invoked from `phase_z2_pipeline.py` (`grep -n \"gather_step12\\|step12_ai_repair\" src/phase_z2_pipeline.py` → 0 hits). The scaffold is dormant.\n- IMP-30 first-render invariant covers all-reject case: `src/phase_z2_pipeline.py:3430-3489` retries `plan_composition` with `allow_provisional=True`; `lookup_v4_match_with_fallback:717-740` synthesizes rank-1 provisional V4Match from `judgments[0]` when the chain exhausts (the rank-1 entry can be a reject — `phase_z_status=\"fallback_candidate\"` is not in `MVP1_ALLOWED_STATUSES = {\"matched_zone\", \"adapt_matched_zone\"}` at `:96`, so reject rank-1 IS the typical provisional input). On true zero-judgment input, `:3490-3545` falls through to `__empty__` shell with `provisional=True`. → After flipping the route hint AND removing the reject skip in step12, rank-1 reject provisional units will reach `route_ai_fallback` correctly.\n- User override path: `src/phase_z2_pipeline.py:3621-3670` rebinds `unit.frame_template_id/frame_id/label` from the V4 candidate matching the override `template_id` BUT does NOT touch `unit.provisional`. So an override that lands on a reject frame leaves `provisional=False`, and step12 would skip with `not_provisional` even after fixing the route hint. → Either set `provisional=True` on override-to-reject, OR widen the step12 provisional gate to also include `label == \"reject\"`.\n- Frontend wire already exists: `Front/client/src/components/FramePanel.tsx:154` `onClick={() => onFrameSelect(candidate.id)}` is unconditionally bound for reject cards too (only visual opacity differs). `Front/client/src/pages/Home.tsx:264-289` builds `overrides.frames[unitId] = overrideFrameId` and passes to `runPipeline`. The CLI consumes itLine truncated