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": 19127, "html_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/14#issuecomment-19127", "pull_request_url": "", "issue_url": "https://gitea.hmac.kr/Kyeongmin/C.E.L_Slide_test2/issues/14", "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**Problem statement (per issue body + cross-refs)**\n- `slide_base.html` bakes standalone-mode CSS into body: `display: flex; justify-content: center; align-items: center; min-height: 100vh; padding: 20px 0;` (`templates/phase_z2/slide_base.html:14-21`).\n- These rules center the 1280×720 `.slide` inside a window-sized viewport when the file is opened directly in a browser — correct for standalone preview.\n- When the same final.html is loaded inside `<iframe>` (SlideCanvas), the `min-height: 100vh` + flex centering + body padding cause the slide to be vertically shifted / cropped inside the 1280×720 iframe box.\n- Workaround in place today = frontend runtime CSS injection: `Front/client/src/components/SlideCanvas.tsx:296-316` adds a `<style>` to `iframe.contentDocument` on `onLoad` that overrides body to `padding:0 / min-height:0 / height:720px / width:1280px / display:block / overflow:hidden` and `.slide { box-shadow:none; margin:0 }`. Comment at 293-295 documents the exact reason (\"body 에 padding / flex center / min-height: 100vh 가 있어서, iframe 안에서는 슬라이드가 잘림\").\n- INSIGHT-MAP §3 (axis registry, `docs/architecture/PHASE-Q-INSIGHT-TO-22STEP-MAP.md:120`) classifies this as the **A-4 slide-base iframe mode axis**, source = §2.8 I2 (renderer.py slide-base 사용 호출 지점). Backlog row `IMP-14` (`docs/architecture/PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md:65`) scope = \"slide-base.html conditional CSS (embedded vs standalone)\".\n- Audit signal table (`docs/architecture/PHASE-Q-AUDIT.md:101`) suggests the signal mechanism: \"slide-base.html template + query string `?embedded=1` 같은 시그널\" → \"conditional CSS (standalone vs embedded)\".\n\n**Root cause = frontend-backend coupling anti-pattern**\n- Backend artifact (`final.html`) carries a single-mode (standalone) CSS contract that is not iframe-safe.\n- Frontend silently patches the contract at runtime via DOM injection. The patch is invisible to backend testing, lives in two places, and drifts independently. If `slide_base.html` body styles change, the frontend reset must be hand-updated to stay in sync.\n- The fix is to **internalize both modes in `slide_base.html`** under a single declarative signal (embedded vs standalone), and **delete the runtime CSS injection** so the contract has exactly one owner (backend Jinja2 template).\n\n**Current code paths (verified)**\n- Template (the only renderer entry point): `templates/phase_z2/slide_base.html:14-21` (body), `:24-31` (.slide), `:200-211` (.slide-footer with `bottom: 8px` absolute) — `box-shadow` on `.slide` at line 29.\n- Renderer: `src/phase_z2_pipeline.py:2022-2053` `render_slide(...)` — Jinja2 env loads `slide_base.html` with context `{slide_title, slide_footer, zones, layout_preset, layout_css, gap_px, token_css}`. No `embedded` variable today.\n- Selenium overflow check: `src/phase_z2_pipeline.py:2058-2089` loads `final.html` via `file:///` URI (`driver.get(html_path.resolve().as_uri())`, line 2090) at window 1400×900 → standalone-mode rendering, no iframe nesting.\n- Screenshot path (Phase Q lineage, not used in active Phase Z final.html flow but still loadable): `src/slide_measurer.py:140-147` (`webdriver.Chrome` → `driver.get(f\"file:///{tmp_file.name}\")`) → also non-iframe.\n- Frontend consumer: `Front/client/src/components/SlideCanvas.tsx:284-368` `<iframe sandbox=\"allow-same-origin\" src={finalHtmlUrl}>`. `onLoad` callback:\n - Lines 297-316: body / .slide reset CSS injection (target of removal).\n - Lines 320-325: `slideOverrideCss` per-mdx visual override injection (orthogonal axis — kept intact).\n - Lines 327-363: zone bbox + `.slide-body` bbox measurement (orthogonal axis — kept intact).\n- Separate edit-mode injection: lines 100-145 (`useEffect` → contenteditable + outline styles) — orthogonal, not touched.\n\n**Why a Jinja2 render-time flag is the wrong shape**\n- Considered: pass `embedded=True/False` into `render_slide(...)` and emit two CSS branches. RejLine truncated