From 5c27c492ba31ef73c635b1d5024fc07d568888f0 Mon Sep 17 00:00:00 2001 From: kyeongmin Date: Wed, 13 May 2026 13:39:30 +0900 Subject: [PATCH] feat(catalog): activate bim_current_problems_paired (IMP-04 Track A 8/16) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- scripts/smoke_frame_render.py | 11 ++ .../phase_z2/catalog/frame_contracts.yaml | 68 +++++++++ .../families/bim_current_problems_paired.html | 137 ++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 templates/phase_z2/families/bim_current_problems_paired.html diff --git a/scripts/smoke_frame_render.py b/scripts/smoke_frame_render.py index b8e7ee9..bfe9926 100644 --- a/scripts/smoke_frame_render.py +++ b/scripts/smoke_frame_render.py @@ -280,6 +280,17 @@ SELF_CHECK_FIXTURES: dict[str, dict] = { "emphasis_3_label": "실무 적용 불가", "emphasis_3_body": [{"text": "특수성 반영 어려움", "indent": 0}], }, + "bim_current_problems_paired": { + "title": "현황 및 문제점", + "issue_1_label": "개념 부재", + "issue_1_body": [{"text": "CAD 확장판 오인", "indent": 0}], + "issue_2_label": "잘못된 접근방식", + "issue_2_body": [{"text": "도구로만 인식", "indent": 0}], + "issue_3_label": "방향성 상실", + "issue_3_body": [{"text": "대형 S/W 의존", "indent": 0}], + "issue_4_label": "전제조건 오류", + "issue_4_body": [{"text": "건축·토목 혼용", "indent": 0}], + }, } diff --git a/templates/phase_z2/catalog/frame_contracts.yaml b/templates/phase_z2/catalog/frame_contracts.yaml index f489c73..46723cb 100644 --- a/templates/phase_z2/catalog/frame_contracts.yaml +++ b/templates/phase_z2/catalog/frame_contracts.yaml @@ -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: [] diff --git a/templates/phase_z2/families/bim_current_problems_paired.html b/templates/phase_z2/families/bim_current_problems_paired.html new file mode 100644 index 0000000..023b278 --- /dev/null +++ b/templates/phase_z2/families/bim_current_problems_paired.html @@ -0,0 +1,137 @@ + +{# +───────────────────────────────────────────────────────────────────────────── +Frame 17 = "현황 및 문제점" (cards/paired-rows-2x2). 4 problem cards in 2x2 grid. +Track A frame 8 (V4 RS=1 — restructure tier, V4 catalog-completeness 정합). +Builder 재사용 = `quadrant_flat_slots` (F16 pattern, pad_to=4) + `issue_{n}_*` keys. + +PROMOTED CSS : per-issue warning theme (4 distinct color tints), title gradient. +NOT PROMOTED : Figma source decoration / banner / texture / numbered badges — figma_to_html 보존. +ADAPTED : Figma absolute → 2x2 CSS grid + token-fixed typography. + +slots : title, issue_1/2/3/4_label, issue_1/2/3/4_body. +#} + + + +
+
{{ slot_payload.title }}
+
+
+
{{ slot_payload.issue_1_label | safe }}
+
+ {% if slot_payload.issue_1_body %} + {% for line in slot_payload.issue_1_body %}
{{ line.text | safe }}
{% endfor %} + {% endif %} +
+
+
+
{{ slot_payload.issue_2_label | safe }}
+
+ {% if slot_payload.issue_2_body %} + {% for line in slot_payload.issue_2_body %}
{{ line.text | safe }}
{% endfor %} + {% endif %} +
+
+
+
{{ slot_payload.issue_3_label | safe }}
+
+ {% if slot_payload.issue_3_body %} + {% for line in slot_payload.issue_3_body %}
{{ line.text | safe }}
{% endfor %} + {% endif %} +
+
+
+
{{ slot_payload.issue_4_label | safe }}
+
+ {% if slot_payload.issue_4_body %} + {% for line in slot_payload.issue_4_body %}
{{ line.text | safe }}
{% endfor %} + {% endif %} +
+
+
+