MDX 03 시연 정비 인사이트 — Phase Z pipeline 개선 axis (2026-05-15) #44
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
MDX 03 시연 정비 인사이트 — Phase Z pipeline 개선 axis (2026-05-15)
발표 시연 path (mdx 03 + 03-1/03-2 rank 1/2/3 + 레이아웃 변환 + Connect) 정비 과정에서 얻은 인사이트. 향후 pipeline 개선 axis 로 정리. 모든 항목 =
[단계] / [인사이트] / [개선 방향] / [참고]구조.1. Multi-layer silent fail chain (진단 도구 필수)
assets_dir가 partial 까지 도달하지 않은 chain =(a) zones_data 키 누락 + (b) jinja autoescape (') + (c) Windows` → URL 404` 3 중 silent fail. 한 chain 안 여러 layer 가 동시에 fail 면 "수정했다" 착각 → 사용자에게 "변환이 안 됨" 으로 보임.zones_data[i]가 partial render 직전 필수 키 (assets_dir,slot_payload) 보유 여부 assertionbuild_layout_css의 url() output 에 invalid char (&,\) detector[DIAG raw overrides]같은 진단 console.log/terminal log 가 상시 출력 (사용자 진단 cost 0)src/phase_z2_pipeline.py:2606,2635+templates/phase_z2/families/dx_sw_necessity_three_perspectives.html의| safe+ as_posix()2. Phase Z 원칙 위배 — zone size 가 frame.min_height 기반 (Axis A: zone lock)
compute_zone_layout이min_height_first + content_weight_distribution으로 zone height 계산. frame 마다 다른 min_height → frame override 시 zone 비율 변동 → 사용자가 본 "frame 만 바꿨는데 글자가 잘림". CLAUDE.md 의 "디자인이 텍스트에 맞춘다" 와 정확히 반대 방향.build_layout_css의override_zone_geometriespath 존재 → frontend 가 자동으로 prev heights 를 ratio 로 변환해서 spawn args 에 추가.client/src/services/designAgentApi.ts의 RunMetazone_heights_px+client/src/pages/Home.tsxhandleGenerate 의 pinned zoneGeometries 자동 set.src/phase_z2_pipeline.py:794의available = SLIDE_BODY_HEIGHT - gap * (n - 1)추가 (override path 의 gap subtraction 누락 버그)3. 수학 비례 fit — CSS container query + jinja line count (Axis B)
cqh / cqw단위) +clamp(min, calc(N*cqh / line_count), max)+ jinja 가 카드별 line count--max-body-linesinline 주입.4. CSS container query 기반 자동 회전 — layout 변경 대응
1fr 1fr 1fr(균등 분할) 보다auto auto auto + align-content: start가 좌/우 zone visual balance 에 더 자연 — 콘텐츠 height 만 차지 + 위쪽 정렬.5. 콘텐츠 무손실 보존 — builder 통일 (process_product_pair + column_with_transform)
bim_dx_comparison_table의 builder_optionscolumn_plain이 markdown table (AS-IS/TO-BE) 무시 → 사용자가 본 "AS-IS/TO-BE 사라짐". 메모리 [AI 격리 contract] 의 원문 무손실 보존 룰 위배.process_product_pair, body_parser =column_with_transform. partial 의 jinja loop 에서{% if a.transforms %} mini table {% else %} text_lines {% endif %}분기 처리. 모든 frame 이 동일 mdx 의 모든 element (transforms / text_lines / images / strong) 보존.templates/phase_z2/catalog/frame_contracts.yaml의bim_dx_comparison_table+app_sw_package_vs_solution(신규 등록) 모두 동일 builder/parser.6. Frontend stale closure + override comparison bug
useCallbackdeps array 누락 ([state.uploadedFile]만) → mdx 업로드 후 첫 render 의 state capture → frame override 클릭으로 state 변경 후에도 옛 state 봄. 모든 spawn 의 overrides 가 빈 채로 backend 까지 도달. 진단 도구 (vite plugin DIAG log) 없으면 잡기 매우 어려움.useCallbackdeps 점검 + ESLintreact-hooks/exhaustive-deps활성. 또한 backend 의current_default_candidate가 override 적용된 template_id 라 default 와 override 구분 어려움 → backend 가 원본 V4 rank 1 template_id 와 현재 적용된 template_id 를 별도 field 로 반환.overrideFrameId !== defaultFrameId) 제거. 사용자 명시 override 는 default 와 같든 다르든 spawn args 에 포함.7. 자동 fix loop 부분 구현 + 미구현 action (visual_check → retry chain)
_attempt_zone_ratio_retry는 구현됨 (donor zone 에서 sibling 차감 → rerender → revert on fail, budget=1). 그러나 다른 action :details_popup_escalation= 미구현. 콘텐츠가 frame slot 보다 클 때 텍스트 일부를 popup 으로 이동.frame_swap= 미구현. V4 rank+1 frame 으로 자동 fallback._attempt_zone_ratio_retry패턴 mirror) — 사용자 명시 override 없을 때만 자동 시도, 사용자 override 시 idempotent.<details>mechanism. AI fallback path (메모리 [AI 격리 contract]).src/phase_z2_pipeline.py:1182의 패턴.8. Incremental rerun 없음 — V4 + Selenium 매번 재실행
--reuse-from <prev_run_id>옵션 — frame override 가 step09 에만 영향, step00~step08 은 동일. prev run 의 output 을 copy + step09 부터 재실행 = 50-70% 시간 절감 (~10-20초 → ~3-8초).9. Layout override 와 zone position id mismatch
Home.tsxhandleGenerate 의 pinned 조건에&& !overrides.layout추가. backendbuild_layout_css의 override path 가 unknown position key 에 warning emit.client/src/pages/Home.tsx:344(frontend) +src/phase_z2_pipeline.py:790-823(backend override path).10. Connect axis — design_agent → cel astro 정적 export
public/slides/<slug>.html+public/slides/assets/) 와 그대로 일치 → 단순 file copy 만으로 사이트에 슬라이드 노출.POST /api/connectendpoint (body{run_id, slug}).RUNS_DIR/<run_id>/phase_z2/final.html+assets/→CEL_SLIDES_DIR/<slug>.html+assets/(overwrite,fs.cpSyncrecursive). frontend Connect 버튼 =handleConnect(slug =selectedSample또는 filename prefix).SlideViewer.astro가iframe.src = /slides/<slug>.html으로 load. 변경 시 cel astro dev server HMR 자동.발표 후 axis 우선 순위 (추후 implement)
--reuse-from) — 1 일 axis, 모든 사용자 대상 효과 큼_attempt_zone_ratio_retry패턴 mirror, 1-2 일이 정리는 mdx 03 시연 정비 (2026-05-15 lock) 결과. 발표 후 axis 별 implement 검토.
분해 완료 — 14 신규 IMP + 이미 구현됨 + 흡수 매핑 + 정정 사항 (2026-05-21)
#44 axis 10 → 신규 IMP 매핑 표
--reuse-from/api/connect)closed: 10 axis 모두 분해 (4) / 흡수 (1) / 이미 구현됨 (4) + 정정 (1). 시연 정비 axis 정리의 본래 목적 달성.
⚠ axis 7 정정 사항 (중요)
원 axis 7 의 "frame_swap auto retry" = V4 rank+1 frame 으로 자동 fallback. 사용자 기조 위반으로 폐기됨:
feedback_phase_z_spacing_direction: "공통 여백 줄이지 말 것. 늘리거나 다른 fit 으로 옮기는 방향"대체 = #63 IMP-34 zone resize + compact retry (다른 zone 공란 활용, 자동 frame 교체 X).
overflow 처리 정정된 순서 (모든 chain IMP 의 가드)
동반 14 신규 IMP 전체 (Wave 1 + Wave 2)
closed.