feat(catalog): activate bim_current_problems_paired (IMP-04 Track A 8/16)

V4 signal = restructure 1 (4 MDX sample). Catalog-completeness activation —
Codex round 51 guardrail (per-frame source-evidence check, not blind F16
reuse). Source confirmed as 2x2 paired-rows BIM problem layout, distinct
from F16's quadrant-4 framing.

3-layer architecture (matrix §0) :
- V4 = matching authority — restructure tier signal; runtime activation
  prepares Phase Z to assemble this frame when V4 ranks it.
- figma_to_html (1171281194) = source/evidence — 4 BIM problem cards in
  2x2 grid (개념 부재 / 잘못된 접근방식 / 방향성 상실 / 전제조건 오류).
- Phase Z = runtime — adds catalog + partial + smoke fixture.

Builder reuse :
- `quadrant_flat_slots` reused with pad_to=4 + `issue_{n}_label/body` keys.
- `quadrant_item` parser reused.
- F16 quadrant pattern reused, but the partial is a 2-row × 2-column
  problem-theme grid (red/orange/amber/deep-amber), not the F16 TL/TR/BL/BR
  quadrant visual. Source-evidence-driven decision per Codex round 51 §10.

3 file changes :

1. templates/phase_z2/families/bim_current_problems_paired.html
   - 2x2 CSS grid with per-issue problem theme.
   - PROMOTED CSS : per-cell warning gradient (red/orange/amber/deep-amber),
     title gradient (zone-title family), "!" bullet markers in per-cell color.
   - NOT PROMOTED : Figma source banner / numbered badges / texture —
     figma_to_html source evidence preserved for future fidelity review.
   - ADAPTED : Figma absolute positioning → CSS grid 2x2, token-fixed
     typography.

2. templates/phase_z2/catalog/frame_contracts.yaml — F17 contract appended
   - frame_id=1171281194, family=cards, source_shape=top_bullets, strict 4,
     role_order=[issue_1..issue_4].
   - visual_hints.min_height_px = 350 (F16/F14 class — 2-row × 2-col density).
   - accepted_content_types = [text_block].
   - payload.builder = quadrant_flat_slots reuse with issue_{n}_* keys.

3. scripts/smoke_frame_render.py — bundled fixture for F17.

Verification :
- python scripts/smoke_frame_render.py --self-check : PASS 11/11 (F17 at
  3856 chars CSS-only)
- python scripts/smoke_frame_render.py bim_current_problems_paired
  --render-to data/runs/imp04_f17_visual : PASS, 0 raster refs
- python run_mdx03_pipeline.py --phase-z2 --run-id imp04_f17_regression :
  PASS (MDX 03 V4 rank-1 unchanged; F17 not in MDX 03 V4 selection so
  this is non-impacting regression check)

scope-lock honored : V4 logic / mapper / production render / Phase R' /
AI/Kei / 10 existing partials all unchanged.

4-class status :
- class 1 readiness : 
- class 2 content-fit : watch — paragraph-heavy source (each issue body
  is multi-line Korean text). Compact 2x2 cell may need wrap. max-content
  fit checked via R3 artifact.
- class 3 : N/A
- class 4 : N/A

Refs Gitea #4 (IMP-04 Track A frame 8 — V4 RS tier, source-evidence-confirmed)
This commit is contained in:
2026-05-13 13:39:30 +09:00
parent 735e58420e
commit 5c27c492ba
3 changed files with 216 additions and 0 deletions

View File

@@ -632,3 +632,71 @@ sw_reality_three_emphasis:
body_key_pattern: "emphasis_{n}_body"
empty_label: ""
empty_body: []
bim_current_problems_paired:
# Reason : V4 RS=1 (4 MDX sample 안 restructure 1). 32-frame all-in scope —
# **catalog-completeness activation** (NOT V4 endorsement — V4 신호 유효 단 restructure
# tier 이며 직접 use_as_is/light_edit 추천 없음).
# Pattern : cards/paired-rows-2x2 — 4 problem cards in 2x2 grid (BIM 수행 4 문제).
# Track A frame 8. Builder 재사용 = `quadrant_flat_slots` (F16 pattern, pad_to=4).
template_id: bim_current_problems_paired
frame_id: 1171281194
family: cards
source_shape: top_bullets
cardinality:
strict: 4 # 4 issues (2x2 grid)
overflow_policy: abort_or_review
role_order:
- issue_1
- issue_2
- issue_3
- issue_4
# min_height_px : F16 (quadrant 4) 와 동등 class.
# 2 row × 2 col × (label 24 + body 60) + title 30 + gaps + padding = ~280 + buffer 70 = **350**.
visual_hints:
min_height_px: 350
accepted_content_types:
- text_block
sub_zones:
- id: issue_1
role: main_text
accepts: [text_block]
cardinality: { strict: 1 }
partial_target_path: ".f17b__grid > .f17b__cell:nth-child(1)"
- id: issue_2
role: main_text
accepts: [text_block]
cardinality: { strict: 1 }
partial_target_path: ".f17b__grid > .f17b__cell:nth-child(2)"
- id: issue_3
role: main_text
accepts: [text_block]
cardinality: { strict: 1 }
partial_target_path: ".f17b__grid > .f17b__cell:nth-child(3)"
- id: issue_4
role: main_text
accepts: [text_block]
cardinality: { strict: 1 }
partial_target_path: ".f17b__grid > .f17b__cell:nth-child(4)"
payload:
title:
source: section.title
# Builder 재사용 = `quadrant_flat_slots` (F16 pattern, pad_to=4).
# F16 = TL/TR/BL/BR quadrant. F17 = paired-rows-2x2 (top-left/top-right/bottom-left/bottom-right).
# 차이 = key prefix only ("quadrant_N" vs "issue_N"). partial layout 동일 2x2 grid.
builder: quadrant_flat_slots
builder_options:
item_parser: quadrant_item # 재사용
pad_to: 4
truncate_at: 4
label_key_pattern: "issue_{n}_label"
body_key_pattern: "issue_{n}_body"
empty_label: ""
empty_body: []