fix(B06): 저장된 상단 패널 높이가 첫 렌더에 반영되지 않아 종단면도가 잘리던 문제

패널을 줄여 둔 세션에서 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) <noreply@anthropic.com>
This commit is contained in:
2026-08-02 11:56:58 +09:00
co-authored by Claude Opus 5
parent 6a87baa212
commit bc02fcc1d4
@@ -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;
};