Smoke 2차 first E2E success + hotkey named key fix (#13)

- UiaPlayerHost.Hotkey now recognizes enter/tab/esc/space/arrows/F1-F9
- Live run generated an actual Box geometry in EG-BIM Modeler (milestone)
- Gap F/G/H documented for follow-up (issue #13)
- PROGRESS: first E2E success row

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-08 17:40:05 +09:00
parent 2428827df6
commit 7db9cd08e1
3 changed files with 88 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
# 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.