834ed3946d
test(IMP-04): add F14 render artifact check and fix min-height note
...
3rd commit in F14 series (calibration point clean pass). Closes the two
Codex round 26 (#15435 ) blockers:
1. min_height_px self-contradiction
2. F14 actual rendered visual artifact absent
Per Codex round 28 (#15447 ) agreement (M1 + --render-to extension) and
Claude round 27 (#15438 ) fix path :
Changes :
1. templates/phase_z2/catalog/frame_contracts.yaml — min_height_px 320 → 350.
Comment now self-consistent : 70 (badge raster) + 210 (bullet body) +
36 (photo strip) + 30 (padding) = 346 sum + 4 safety buffer = 350.
F14 is now F29-class (345) per raster-promoted content density.
2. scripts/smoke_frame_render.py — add `--render-to DIR` dev mode (R3
acceptance gate). Behavior :
- StrictUndefined smoke render (unchanged)
- reuse production `copy_assets(template_id, run_dir)` so the runtime
asset delivery path is exercised (no logic duplication)
- wrap partial with minimal viewer HTML (Phase Z token vars + slide-
sized wrap, browser-openable)
- fail-fast if rendered HTML references a missing local asset (per
Codex round 28 §4 recommendation)
- save artifact to {DIR}/index.html with {DIR}/assets/{template_id}/*
- production render path (phase_z2_pipeline.render_slide) unchanged
- small regex fix : asset extraction now captures both `src="..."`
and `url("...")` references
F14 verification (3rd commit) :
- python -m py_compile scripts/smoke_frame_render.py : PASS
- python scripts/smoke_frame_render.py --self-check : PASS 4/4 (7446 chars
for persona unchanged from a1c06b7 )
- python scripts/smoke_frame_render.py three_persona_benefits --render-to
data/runs/imp04_f14_visual : PASS, 10 asset refs all resolved, 14
raster files copied via production copy_assets() to
data/runs/imp04_f14_visual/assets/three_persona_benefits/
- R3 artifact ready for browser visual inspection at
data/runs/imp04_f14_visual/index.html (Phase Z slide-sized wrapper +
promoted persona partial + 10 referenced assets all on disk)
F14 clean pass status :
- min_height_px self-consistency : fixed (M1 = 350)
- Actual rendered artifact : produced and assets resolved
- Visual fidelity inspection : ready for browser/eye review
- Earlier MDX02 chain attempt (commit a1c06b7 body) : superseded;
MDX02 is not the F14 validation baseline (Claude round 26 / Codex
round 26 agreement). MDX03 is the matched baseline; F14 visual
inspection now uses the harness artifact path instead.
scope-lock guardrails honored : 32-frame target, no V4 logic change,
no Phase R' regression, no mapper or composition planner change, no
production render path change. The new harness mode is dev verification
only, isolated from runtime selection.
Refs Gitea #4 (IMP-04 Track A — F14 3rd commit, clean pass gate)
2026-05-13 11:07:37 +09:00
a1c06b779a
refactor(persona): F14 2nd refinement — promote raster assets (IMP-04 Track A F2 re-do)
...
Second calibration refinement after Codex round 22 F2 finding (commit 2fcd8bb
was over-broad CSS-only over-generalization). Approach re-locked via Codex
rounds 23/24 + Claude rounds 23/25 with per-asset case-by-case promotion
policy (round 13 §2.3 restored).
Asset decisions for F14 (Codex round 24 agreement) :
PROMOTED RASTER (Phase Z `copy_assets()` infra — pipeline.py:746 — handles
delivery from figma_to_html_agent/blocks/1171281191/assets/ to runtime
{run_dir}/assets/three_persona_benefits/) :
- col_bg_texture (1 PNG, 3 col 공유)
- bottom photos × 3 (실사 사진, CSS equivalent 불가)
- badge outer × 3 (round ring image)
- badge inner × 3 (round disk image)
→ 10 raster assets total
PROMOTED CSS (디자인 의도, CSS 충분) :
- 발주자/시공자/설계자 accent color (#285b4a / #445a2f / #743002 )
- col-overlay solid tint (#d6e7c4 / #e1efe1 / #d0c0ad, opacity 0.8)
- title gradient (#000 → #883700 )
- bullet check marker (✓ unicode)
NOT PROMOTED : 한자/장식 텍스트 (Figma deco, MDX 무관)
min_height_px : 290 → 320 (badge 70 + body 210 + photo 36 + padding 30,
F29 345 class). Codex round 13 §2.2 derive + confirm method.
Partial structure :
- 3-column grid (Phase Z flex/grid, not Figma absolute positioning)
- per column: badge (raster outer/inner + CSS text overlay) → bullet
body (CSS check marker) → bottom photo (raster, opacity 0.7)
- col-bg texture as ::before background image, overlay tint as ::after
- isolation: isolate + z-index layering for proper raster + overlay stacking
Verification :
- python scripts/smoke_frame_render.py --self-check : PASS 4/4 (persona
refined 7446 chars, was 5314 in commit 2fcd8bb )
V2 validation gap (Codex round 24 §3 anticipation) :
- python run_mdx03_pipeline.py --phase-z2 --mdx samples/mdx/02. DX의 시행
목표 및 기대효과.mdx --run-id imp04_persona_v2_mdx02 : FAIL
- TypeError 'NoneType' object is not subscriptable at contract["payload"]
- Root cause : MDX 02 section 02-1 V4 rank-1 = construction_goals_three_
circle_intersection (frame 12), not yet in catalog. Pipeline aborts at
02-1 before reaching 02-2.2 (persona target).
- Chain dependency : MDX 02 acceptance requires construction_goals
activation first.
- F1/F2/F3 classification of this blocker pending Codex round 26 review.
Visual rendering of F14 deferred to either:
(a) construction_goals activation first (Track A priority reorder)
(b) V3 synthetic MDX with persona-only content + V4 evidence extension
(c) V4 dev override / IMP-06 section-override mechanism
This commit progresses the asset-promoted F14 partial. F14 acceptance
gate (actual render inspection) remains open pending the V2 chain
dependency resolution.
scope-lock guardrails honored : 32-frame target, no V4 logic change, no
Phase R' regression, no MDX03/MDX02 hardcoding, no other partial/builder
modified.
Refs Gitea #4 (IMP-04 Track A F2 re-do, persona 2nd refinement)
2026-05-13 10:49:20 +09:00
2fcd8bb94a
refactor(persona): refine three_persona_benefits using index.html base (IMP-04 Track A 1/16)
...
First Track A calibration refinement. Previous commit 556b448 wrote partial
from scratch (110 lines, minimum viable) without referencing the figma_to_html
index.html base. Per the matrix-clarification commit df9ee43 §4.1, this is the
first refinement and the agreed calibration point for the corrected work pattern.
Input :
- figma_to_html_agent/blocks/1171281191/index.html (184 lines, MCP Figma
Desktop Dev Mode 2026-04-16, 텍스트 노드 전수 반영)
- figma_to_html_agent/blocks/1171281191/analysis.md (slot 정의 + suits/not_suits)
- figma_to_html_agent/blocks/1171281191/flat.md (좌표 + 색 + typography 실측)
- figma_to_html_agent/blocks/1171281191/texts.md (텍스트 전수)
Visual provenance applied :
- PROMOTED : 발주자/시공자/설계자 accent color (#285b4a / #445a2f / #743002 ),
overlay tint (#d6e7c4 / #e1efe1 / #d0c0ad — 0.5 → 0.15 vertical fade),
title gradient (#000 → #883700 ), card 외곽 color border + radius,
badge round 의도, bullet check 의도, section divider 의 색 위계
- NOT PROMOTED : col_bg_texture.png, col-overlay raster, 하단 사진 3 개,
원형 뱃지 outer/inner image, 체크 아이콘 image — Phase Z 기존 F13/F29/F16
strict CSS-only convention 답습 (memory rule feedback_blocks_must_be_css.md)
- ADAPTED : Figma 65/50/40px → token-fixed (zone-title / sub-title / caption /
body), 396×397 absolute round badge → flex card-header CSS round 의도, Figma
zoom 0.49213 absolute positioning → Phase Z flex/grid zone-fit, 7 bullets
absolute layout → flex column auto spacing
min_height_px derivation (Codex round 13 §2.2 — derive + confirm) :
- Figma frame 1927 px @ scale 0.49213 → 948 px adapted full frame
- Phase Z slide-body ≤ 585 px → adaptive content fit
- Content density (3 col × 7 bullets + badge) → F29 (345) class 보다 가벼움
- Derived = 290 (between F13=230 and F29=345). updated from 280 estimate.
- confirm via smoke + sample run (current commit)
Changes :
- templates/phase_z2/families/three_persona_benefits.html : rewrite (110 → 175
lines). per-persona soft background tint (overlay color), CSS round badge
with name + "목표" sub, CSS ::before check marker, full provenance comment
block (PROMOTED / NOT PROMOTED / ADAPTED / min_height derivation).
- templates/phase_z2/catalog/frame_contracts.yaml : min_height_px 280 → 290
with derivation comment.
Verification :
- python scripts/smoke_frame_render.py --self-check : PASS 4/4 (existing 3 +
persona refined 5314 chars, was 3889 — visual richer)
- python run_mdx03_pipeline.py --phase-z2 --run-id imp04_persona_refinement :
PASS (MDX 03 V4 rank-1 still F13/F29, persona refinement does not affect
existing 03-1/03-2 selection)
Calibration outcome : ready for first-refinement Codex review (per scope-lock
#5 , first refinement = mandatory Codex review). Pending F1/F2/F3 escalation
decision based on review result.
Refs Gitea #4 (IMP-04 Track A — first calibration refinement, persona)
2026-05-13 10:32:24 +09:00
556b4486ae
feat(catalog): activate three_persona_benefits frame (IMP-04 #4 / 1 of 7)
...
Reason : V4 use_as_is=1 (frame_number=14, frame_id=1171281191).
Pattern : cards-3col-persona — 발주자/시공자/설계자 3 주체 각 benefit.
- Append `three_persona_benefits` contract to frame_contracts.yaml after
the existing F13/F29/F16 entries (Codex Catch 1/4: YAML order = trace
selection surface)
- Reuse existing builder primitives: items_with_role + quadrant_item
parser. No new entry in PAYLOAD_BUILDERS / ITEM_PARSERS.
Output dict shape: payload.personas = [{label, body, color_class}, ...]
- Add families/three_persona_benefits.html partial:
- Pure CSS (no Figma raster img tags) per memory rule
`feedback_blocks_must_be_css.md`
- PROMOTED colors per persona (#285b4a client / #445a2f constructor /
#743002 designer) from Figma TEXT layers
- NOT PROMOTED: col_bg_texture / overlay / 하단 사진 / 원형 뱃지 inner-outer
image — all replaced by CSS approximation (pill badge + colored
border + check-style text-line bullets)
- Token-fixed typography (zone-title / sub-title / caption / body)
- data-frame-id="1171281191" data-template-id attributes
- Add bundled smoke fixture for three_persona_benefits to
scripts/smoke_frame_render.py
- visual_hints.min_height_px = 280 (initial estimate between F13=230 and
F29=345 for 3-card text-heavy layout). Refine during batch full
pipeline if needed.
- accepted_content_types = [text_block] only (rich types not routed yet
per IMP-03 scope-lock).
Verification :
- isolated Jinja StrictUndefined smoke (scripts/smoke_frame_render.py
--self-check) : PASS=4/4 (existing 3 + new persona, 3889 chars)
- regression run on MDX 03 (env OFF + rich OFF) : PASS — MDX 03 V4
rank-1 still F13/F29 so the new entry does not affect existing flow
scope-lock 15 conditions all honored (no V4 / mapper / Phase R' / Step
6+ changes; per-frame 6-step gate complete; YAML order preserved).
Refs Gitea #4 (IMP-04 A-2 Catalog 확장)
2026-05-13 06:56:35 +09:00
8e1f5c67c1
phase z catalog: Step 7-A (layouts) + 8-A (regions/display) 박힘
...
사용자 lock 2026-05-07 — catalog data 는 yaml/HTML 에서 사람이 보고 modify
가능 (= hardcoded dict 위배 제거).
추가:
- templates/phase_z2/layouts/layouts.yaml — 8 preset (single / horizontal-2 /
vertical-2 / top-1-bottom-2 / top-2-bottom-1 / left-1-right-2 / left-2-right-1
/ grid-2x2). 기존 hardcoded LAYOUT_PRESETS dict (src/phase_z2_composition.py)
→ catalog 이전. backward compat (load_layout_presets() 가 같은 dict shape).
필드: zones / topology / positions / css_areas / css_cols / css_rows /
render_ready / default_selection / candidate_when. (Step 7-A)
- templates/phase_z2/layouts/layouts_preview.html — 8 preset 시각 검증.
- templates/phase_z2/regions/region_layouts.yaml — Internal Region 6 entry
(region-single / vertical-stack / horizontal-split / main-support /
preview-details / grid-2x2). SPEC §2.5 의 sequential first-match
decision tree. region-vertical-stack only default_fallback. (Step 8-A)
- templates/phase_z2/regions/display_strategies.yaml — display 4 entry
(inline_full / inline_preview_with_details / details_only / dropped).
applies_to / forbidden_for / detail_trigger.placement: top-right.
사용자 절대 lock: text/table/image/details 절대 dropped X (forbidden_for).
- templates/phase_z2/regions/regions_preview.html — 6 region + 4 display 카드
시각 검증 (axis 분리 lock — region structure ≠ display policy).
axis 분리 lock (사용자 2026-05-07):
- region (structure axis) ≠ display (policy axis) → 두 catalog 분리.
- preserves_original 은 display_strategies 의 single source of truth.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-08 09:43:18 +09:00
f66497cf8d
phase z slide_base + token CSS + families 갱신 (5-layer + F29 fix)
...
- templates/phase_z2/slide_base.html — geometry 재정상화:
divider top 58 / height 2 / #cbd5e1
body top 76 / height 585 / left 50 / width calc(100%-100px)
footer left 50 / bottom 8 / height 41 / width calc(100%-100px)
(사용자 lock 2026-05-07 — front 정합)
- templates/styles/tokens/{spacing,typography}.css — 5-layer 위계 lock 반영:
spacing : --slide-divider-top 58 / --slide-body-top 76 / --slide-body-height 585 /
--slide-footer-bottom 8 (slide_base.html 와 1:1)
typography : --font-zone-title 16px (대) / --font-sub-title 12px (소) /
--font-body 10px (콘텐츠) — 5-layer (대/중/소/부소/콘텐츠)
- templates/phase_z2/families/three_parallel_requirements.html — F13 partial:
cleanup-1 (2026-05-08) stale 주석 정정 (Legacy templates/blocks/structures/
prerequisites-3col.html reference 제거 — 해당 legacy 폴더 삭제 후 broken).
- templates/phase_z2/families/process_product_two_way.html — F29 partial:
visual fidelity bug fix (2026-05-08).
missing SVG asset 3 개 (header_left_bg, header_right_bg, body_bg) 참조 제거 →
figma origin (figma_to_html_agent/blocks/1171281210/index.html) 의 R8 룰
("순수 CSS 우선") 따라 linear-gradient + border-radius pill 로 재현.
PROMOTED 줄도 갱신 (banner-left/right bg gradient + body bg 2-half gradient).
regression 0 (MDX03 fresh run 검증 — final.html PASS, missing image 0).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-08 09:41:40 +09:00
02a6d44944
Add Phase Z frame slot telemetry markers
...
- add frame slot markers to F29 runtime partial
- collect per-cell frame slot metrics in visual runtime check
- preserve existing visual status and failure routing behavior
2026-05-04 10:05:03 +09:00
4144dc4c21
Add Phase Z runtime templates
...
- add slide base template for Phase Z rendering
- add family partials for F13, F29, and F16 frames
2026-05-04 09:34:27 +09:00
2ec8fc5a77
Add Phase Z Layer A planning scaffold
...
- add Internal Region model to Phase Z architecture docs and specs
- add frame contract content type and Frame Slot declarations
- add dormant content object extractor and internal region planner
2026-05-04 08:21:50 +09:00