Files
C.E.L_Slide_test2/.orchestrator/tmp/issue9_claude_r2.md
T

7.7 KiB

[Claude #2] Stage 1: Structure Analysis — round 2

A. Codex #1 검증 결과

Codex 주장 판정 근거
phase_z2_retry.apply_retry_to_layout_css 가 layout_css consumer accept src/phase_z2_pipeline.py:61 import / :1351 호출 / src/phase_z2_retry.py:198-215heights_px/rows/ratios/computation/dynamic_rows/raw_zone_layout 6 field 모두 mutation. dependency map 추가 필요 — 내가 round 1 에서 누락.
render_slide 가 layout_css consumer accept src/phase_z2_pipeline.py:1407-1438layout_css 를 그대로 jinja slide_base.html 에 주입. 내가 round 1 dependency 도식엔 명시 안 함.
layouts.yaml 실제 preset 행 = 30-130 (1-29 = 주석/스키마 노트) accept 30: single: 시작 / 1-29 = 헤더+lock note. minor precision.
--override-zone-geometry parser = 4042-4057 accept argument 정의 4003-4011 / parsing 4042-4057 둘 다 실재. round 1 에선 definition line 만 인용.
space_allocator.build_containers_type_b 추가 gate = 790 / 1068 / 1186 / 1256 accept (확장) round 1 은 530 한 곳만 인용. 다중 gate 존재 — Phase Z 와 격리 결론은 무변.

B. Codex 주장 1 건 — pushback

"The status-board path is stale. PHASE-Z-STATUS-BOARD.md does not exist."

내 round 1 본문엔 그 path 가 들어가 있지 않음. 본문에서 쓴 표현은 Step 8 = OVERVIEW + STATUS-BOARD 양쪽 일치 — shorthand. 실제 markdown link 도 없음. Codex 가 inferred mistake. 본 정정은 새 issue body 가 stale 인 게 아니라 round 1 shorthand 가 모호 였던 것 — 받아들이지만 stale-ref 가 아닌 naming precision 카테고리로 분류.

정확한 paths (lock) :

  • D:\ad-hoc\kei\design_agent\docs\architecture\PHASE-Z-PIPELINE-OVERVIEW.md
  • D:\ad-hoc\kei\design_agent\docs\architecture\PHASE-Z-PIPELINE-STATUS-BOARD.md (line 47 = Step 8 row, ⚠ partial)

C. 양 round 가 다 누락한 structure 사실 (round 2 보완)

C-1. topology 필드 = 자연스러운 dispatch key (재확인)

  • templates/phase_z2/layouts/layouts.yaml 의 8 preset 은 topology 를 이미 선언함 :
    • single / rows / cols / T / inverted-T / side-T-left / side-T-right / 2x2
  • 즉 IMP-09 implementation 의 dispatch 는 layout_preset 문자열 대신 topology 사용해야 추가 preset (e.g. top-3-bottom-1) 시 자동 적용. round 1/2 둘 다 언급은 했으나 contract 로 lock 안 함.

C-2. single layout 의 edge case

  • single 은 zones=1 / css_rows: 1fr / 현재 default branch (line 918-927) 떨어짐 → heights_px: [].
  • 2-D solver 도입 시 single 은 의미상 heights_px = [SLIDE_BODY_HEIGHT - gap*0] 로 일관 채워야 Step 8 artifact zone_heights_px_planned[] 가 아니라 실측 가능. 또는 명시적 single 예외 로 분기. 어느 쪽이든 결정 필요.
  • 양 round 누락.

C-3. T-shape 의 부분 2-D 성격

  • top-1-bottom-2 topology=T : top zone 이 두 컬럼 span. css_areas = "top top" "bottom-left bottom-right".
  • 즉 row 비율 (top vs bottom) + bottom row 내 col 비율 (bottom-left vs bottom-right) 두 축. 단순 row solver 도 단순 col solver 도 아님.
  • side-T-left / side-T-right : 반대 — col 분할 + 한쪽 col 내부 row 분할.
  • 따라서 2-D solver 가 grid-2x2 하나 + T 계열 4개 (T/inv-T/side-T-L/side-T-R) 처리 시 area-aware contract 필요. solver 의 입력 = (zone position, occupied rows, occupied cols) 트리플. catalog 가 cssareas 로 이미 표현됨 → parser 가 area string → cell map 변환하면 자동.
  • round 1 의 "topology-aware 2-D solver" 표현은 정확하지만 area-spanning 차원 을 명시 안 함.

C-4. Retry path 의 2-D 결정 — open

  • apply_retry_to_layout_css (src/phase_z2_retry.py:198-215) 는 rows-only. widths_px / cols mutation 코드 X / dynamic_rows: True 만 set.
  • IMP-09 implementation 시 결정 분기 두 가지 :
    • (옵션 1) retry path 도 2-D 확장 → A3 lock 의 retry budget=1 / sibling donor 규칙을 col-axis 에도 적용. 새 axis.
    • (옵션 2) retry path 를 명시적으로 row-dynamic 만 gatedynamic_rows: True AND not dynamic_cols 조건 추가. 2-D 는 retry 불가 로 declared.
  • 양 round 다 "retry 와 호환 유지" 까지만 언급, 결정 분기 는 lock 안 함. Stage 1 = opinion only 이므로 둘 중 한 lock 필요 만 surface.

C-5. Step 8 artifact schema 확장 surface

  • 현재 (:3252-3274) zone_heights_px_planned + zone_ratios_planned 두 row-axis 필드.
  • 2-D layout 에서 trace 설명 가능 = guardrail. 따라서 :
    • zone_widths_px_planned (col-axis)
    • zone_col_ratios_planned
    • per_zone_plan[i] 의 zone_height_px_planned / zone_ratio_planned 도 2-D 확장 필요 (width / col_ratio).
  • select_region_layout_candidates / select_display_strategy_candidates (3211/3221) 는 region-level — IMP-09 surface 외, 무변.
  • Codex 가 consumer 로 언급한 retry path / render_slide / Step 7 artifact 와 별개로 Step 8 schema 자체가 변경 대상.

C-6. MDX 03 회귀 lock — 구체 fixture

  • tests/matching/v4_full32_result.yaml 은 V4 결과. layout_css 단위 회귀 골든 fixture 는 별도 필요.
  • IMP-09 가 horizontal-2 path 의 출력 byte-identity 를 보장하려면 :
    • horizontal-2 + override 없음 → 기존 compute_zone_layout 호출 그대로
    • horizontal-2 + override 있음 → 기존 ratio override 그대로
    • 둘 다 snapshot fixture 로 가두기.
  • round 1 은 "MDX 03 회귀" 를 surface 했지만 fixture 형태는 lock 안 함.
  • docs/architecture/PHASE-Z-IMPLEMENTATION-ISSUE-BACKLOG.md:70 확인 — IMP-19 는 renderer._group_blocks_by_area reference only, "직접 통합 X". 즉 IMP-09 가 ratio 분배 알고리즘을 원천적으로 새로 짤 때 IMP-19 의 reference 패턴을 읽을 수는 있어도 import 불가. 양 round 합의 X — 본 round 에서 lock.

D. Round 2 dependency map (보완)

layouts.yaml (preset + topology + css_areas)
  └─ load_layout_presets() / LAYOUT_PRESETS
       ├─ select_layout_preset()              [default 선택]
       ├─ select_layout_candidates()          [Step 7 passive]
       └─ build_layout_css(preset, zones_data, override_zone_geometries)
              ├─ override branch (현재 horizontal-2 h, vertical-2 w 만)
              └─ dynamic branch (현재 horizontal-2 만)
       ↓
   layout_css {areas, cols, rows, heights_px, ratios, dynamic_rows, raw_zone_layout, computation}
       ↓ consumers (4 surface)
       ├─ Step 7 artifact (phase_z2_pipeline.py:3079-3133) — layout_css 그대로 직렬화
       ├─ Step 8 artifact (:3252-3274)         — heights_px / ratios 발췌 (row-axis only)
       ├─ render_slide (:1407-1438)             — slide_base.html 에 layout_css 그대로 주입
       └─ apply_retry_to_layout_css (retry path:1351) — heights_px / rows / ratios 만 mutation

E. Round 2 결론 (opinion only — execute 아님)

  • Codex #1 의 retry-path / catalog-range / consumer-surface 보완 = 받아들임.
  • Codex #1 의 "stale path" 정정은 path stale 이 아니라 round 1 shorthand 모호 — naming precision 으로 분류.
  • 양 round 가 lock 안 한 structure 결정 분기 5 개 surface (C-1 ~ C-7).
  • Stage 1 (structure) 가 ready-for-implementation 되기 전에 2 가지 결정 lock 이 우선 필요 :
    1. Retry path 의 2-D 확장 / row-dynamic-only gate 중 어느 쪽 (C-4)
    2. Step 8 artifact schema 확장 범위 (C-5)
  • 외 5 개 (C-1 topology dispatch / C-2 single edge / C-3 T-shape area-spanning / C-6 fixture 형태 / C-7 IMP-19 import 불가) 도 implementation 전에 합의 필요.

FINAL_CONSENSUS: NO