From bc02fcc1d47fe0772470c98cf8ae153ce0620559 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 2 Aug 2026 11:56:58 +0900 Subject: [PATCH] =?UTF-8?q?fix(B06):=20=EC=A0=80=EC=9E=A5=EB=90=9C=20?= =?UTF-8?q?=EC=83=81=EB=8B=A8=20=ED=8C=A8=EB=84=90=20=EB=86=92=EC=9D=B4?= =?UTF-8?q?=EA=B0=80=20=EC=B2=AB=20=EB=A0=8C=EB=8D=94=EC=97=90=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=EB=90=98=EC=A7=80=20=EC=95=8A=EC=95=84=20=EC=A2=85?= =?UTF-8?q?=EB=8B=A8=EB=A9=B4=EB=8F=84=EA=B0=80=20=EC=9E=98=EB=A6=AC?= =?UTF-8?q?=EB=8D=98=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 패널을 줄여 둔 세션에서 B06 에 다시 들어오면 패널 높이는 복원되는데 차트 높이 배분만 기본값(종단 220 / 유토 190)으로 계산돼, 합계 410px 가 200px 공간에 밀려 들어가면서 종단면도가 20px 로 잘려 사실상 사라졌다. 창 크기를 조금만 바꾸면 정상으로 잡혀 (자가 치유) 구현 당시 검증에서 걸리지 않았다. 원인은 첫 렌더 시점의 조회 방식이다. draw() 는 root.replaceChildren(panel, ...) 보다 먼저 drawPanel() 을 부르므로, 그 시점의 panel 은 아직 root 에 붙기 전(detached)이다. detached 요소는 getComputedStyle 이 빈 값을 돌려주기 때문에 --b06-profile-height 를 읽지 못하고 BASE_PANEL_HEIGHT(506) 로 폴백했다. 리사이저가 복원해 둔 값 자체는 인라인 스타일에 정상적으로 들어가 있었다. panelHeight() 가 인라인 스타일을 먼저 읽고, 없을 때만 computed 로 폴백하게 바꿨다. 인라인 조회는 detached 상태에서도 동작하므로 첫 렌더부터 저장값이 반영된다. 구조는 C02 에서 유입됐으나 당시에는 차트가 하나뿐이라 영향이 작았고, C05 로 차트가 둘이 되면서 배분 실패가 종단면도 소멸로 확대됐다. 자체 검증 — 판정 기준은 "첫 렌더 = 재렌더"(결함이 있으면 첫 렌더만 어긋난다): - 저장값 296px : 296/99/111 = 296/99/111 일치 - 저장값 없음 : 496/220/190 = 496/220/190 일치 (회귀 없음) - 저장값 700px : 700/220/384 = 700/220/384 일치 (기본 초과 시 종단도 고정, 유토가 흡수) prettier 변경 없음, tsc --noEmit 오류 0건, 437줄. 근거: docs/raw/verification/2026-08-02_verify_mass_haul_multi_curve.md [F1] Co-Authored-By: Claude Opus 5 (1M context) --- B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Section_View.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Section_View.ts b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Section_View.ts index 78dadd57..ca309b5b 100644 --- a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Section_View.ts +++ b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Section_View.ts @@ -199,6 +199,11 @@ export function createSectionView( panel.append(panelResizer.root); const panelHeight = (): number => { + // 첫 렌더 때 panel은 아직 root에 붙기 전(detached)이라 getComputedStyle이 빈 값을 준다. + // 리사이저가 복원해 둔 인라인 변수부터 읽어야 저장된 높이가 첫 화면부터 반영된다. + // (computed만 읽으면 기본값으로 폴백해 종단도가 잘린 채로 그려진다 — C05 검증 F1) + const inline = Number.parseFloat(panel.style.getPropertyValue("--b06-profile-height")); + if (Number.isFinite(inline) && inline > 0) return inline; const raw = Number.parseFloat(getComputedStyle(panel).getPropertyValue("--b06-profile-height")); return Number.isFinite(raw) && raw > 0 ? raw : BASE_PANEL_HEIGHT; };