기계 PASS vs 사람 '빽빽함' 판정 간극을 잡는 결정론적 밀도 신호:
- _estimate_max_card_lines: repeat 슬롯/list-of-dict 컬럼/<br> 라인 payload 추정 (v0)
- _compute_density_gate: px_per_line = (측정 zone 높이 − 56) / 카드 최대 라인
임계값은 mdx 01~05 실측 캘리브레이션 — dense<16 / tight<45 px/line
(mdx03 105.8=ready, mdx02 40~44=cramped, mdx01 bottom 11.5=dense 와 정렬)
- design_readiness 통합: dense/tight → warnings(needs_review) — 사람 판정 정렬
(mdx01 11.5 도 사람 판정은 needs_review 였음 — not_ready 아님)
- presentation_ready 에 density AND 조건 추가 (#98 추천 1: 신호 통합)
- popup 승격 후 재계산 경로에도 동일 배선. 리포팅 전용 — final.html 영향 0
(SHA parity 게이트 무접촉 확인: regression 40/40 포함 전체 1016 passed)
실전 acceptance:
- mdx02: presentation_ready=False + density_tight×2 (44.0/40.4 px/line) — 정직 표시
- mdx03: PASS + comfortable(105.8) 유지, density warnings 0
(mdx03 design_readiness=needs_review 는 기존 reject-label warning — 회귀 아님)
후속: B5 slot metrics(#20) 성숙 시 payload 추정 → DOM 실측 교체
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>