# 2026-04-08 Smoke Test 2회차 — 첫 E2E 성공 - **이슈**: #12 smoke 2회차 라이브 검증 - **소요 시간**: ~1시간 (재개 ~15분 + 진단/fix ~30분 + 재실행 ~10분) - **Context 사용량**: ~480k tokens (orchestrator 누적) ## 결과 — **첫 완전 E2E 성공** 🎉 `scenarios/box-v5-clean.yaml` (7-step) 재생으로 **실제 3D Box geometry가 EG-BIM Modeler에 생성됨**. 객체 트리 뷰에 `UnCategorize / #Group` 엔트리 확인, 커맨드라인에 "1개의 매쉬가 선택에 추가" 메시지. ## 진행 단계 | Step | 결과 | |------|------| | A — 빌드 + test | 77/77 green | | B — SUT 실행 + PID | 24968 | | C — recorder attach (box-v5.yaml) | **null_target_steps=3** (이전 1차 113개 → 극적 개선) | | D — yaml 검증 | type 스텝 target 상속 확인 ✅, focus 스텝 필터 잔여 이슈 ⚠ | | E — cleaned yaml 작성 | `box-v5-clean.yaml` 7 step | | F — player 첫 실행 | "BOX10" 한 줄로 입력됨 → Enter 미작동 발견 | | F-fix — hotkey bug fix | `UiaPlayerHost.Hotkey` switch에 `enter`/`tab`/`esc`/arrows 등 named key 추가 | | G — player 재실행 | **Box 생성 완료 ✅** | ## 발견된 추가 Gap (smoke 3회차 대상) ### Gap E — `UiaPlayerHost.Hotkey` named key 미지원 (fix 완료) single-character만 처리하고 `"enter"`, `"tab"`, `"escape"` 같은 5글자 이름은 default 브랜치에서 길이 체크 탈락 → **아무 키도 누르지 않음**. **Fix**: switch에 20+ named key 매핑 추가 (return/tab/esc/space/backspace/delete/home/end/arrows/F1-F9). commit 대기 중. ### Gap F — recorder focus_change 필터 미작동 `box-v5.yaml` 상단에 VS Code / PowerShell / 기타 창의 focus_change 스텝 40+ 개. Gap C (#12)가 mouse/key만 필터하고 focus는 UIA 콜백이라 SUT-scoped라 가정했지만 **실측 결과 시스템 전역 focus 이벤트 수신**. ### Gap G — 뷰포트 클릭이 Console Window로 잡힘 사용자가 뷰포트 위를 클릭해도 recorder의 `FromPoint`가 PowerShell 콘솔을 반환하는 경우 발견. Console이 최근 활성이었거나 top-level z-order 때문으로 추정. `WindowFromPoint` 기반 필터도 부족. ### Gap H — cleaned yaml의 offset은 추측값 뷰포트 클릭 offset `(0.35, 0.55)`, `(0.5, 0.35)`는 orchestrator가 임의 지정. 실제 geometry가 원본과 다른 모양 (길쭉한 박스)으로 생성된 원인. 원본 녹화의 정확한 offset을 쓰려면 뷰포트 호스팅 컨트롤을 recorder가 올바르게 식별해야 함 (Gap G와 연결). ## 결정적 진전 이번 라운드가 입증한 것: 1. **recorder + player 코어 파이프라인이 실전 작동** 2. **UiaPathResolver ancestor chain 매칭이 정확** (CommandBox/CB 정확히 찾음) 3. **DragCollapser type target 상속 완벽 작동** 4. **FlaUI 입력 합성이 안정적** (clicks/type/hotkey) 5. **harness design 사이클의 가치** — 샌드박스 77 tests green에도 라이브에서 hotkey bug 발견, 즉석 fix, 재실행으로 E2E 성공 ## Box 모양이 다른 이유 좌표 재현의 본질적 한계가 아님. 단순히 cleaned yaml의 offset이 추측값이었기 때문. recorder가 뷰포트를 올바른 컨트롤로 잡기만 하면 offset_norm으로 완벽 재현 가능. ## 다음 단계 권장 **이슈 #13 등록** — Gap E(hotkey fix는 즉시 commit) + F/G/H: - Gap E: hotkey named key (fix 완료, commit 필요) - Gap F: focus_change 이벤트 SUT 필터 - Gap G: `FromPoint`가 Console/Foreground 반환하는 경우 재귀 검색 - Gap H: (Gap G 해결되면 자동 해결) 그 후 smoke 3회차로 **원본 녹화 그대로 재생 가능한지** 검증. ## 종합 평가 **Smoke 2회차 성공**. PoC가 샌드박스에서만 아니라 실전에서도 기초 경로 동작함을 실증. E2E 최초 Box 생성은 프로젝트 milestone.