# 2026-04-07 이슈 #12 Smoke 2회차 fix — Generator - **이슈**: #12 - **롤**: Generator (Planner/Generator/Evaluator 사이클) - **소요 시간**: ~50분 - **Context 사용량**: ~75k tokens ## 작업 요약 Smoke 1회차에서 발견된 4개 구조적 gap을 unit test 가능한 형태로 수정. | Gap | 위치 | 수정 | |-----|------|------| | A | Player full-path resolver | `UiaPathParser` + `IUiaTreeNode`/`UiaPathResolver` 신규. `UiaPlayerHost.ResolveElement`가 FlaUI tree adapter로 segment chain descend | | B | Recorder type step target inheritance | `DragCollapser`에 `lastFocusPath`/`lastMousePath` 추적, `FlushType()`이 typeRes 없을 때 fallback | | C | SUT 외 창 필터 | `IWindowFilter` + `SutProcessWindowFilter` 도입, `LowLevelHook.Filter`가 mouse/key 모두 필터링. `Program.cs`에서 `WindowFromPoint`/`GetForegroundWindow` 와이어업 | | D | UTF-8 BOM 없는 yaml 명시 | `ScenarioWriter.WriteToFile`이 `new UTF8Encoding(false)`로 저장 | ## 새 테스트 (10건) Player.Tests: - `UiaPathParser_ParsesMultiSegment_WithClassAndId` - `UiaPathParser_ParsesNameAttribute` - `UiaPathResolver_Descend_FindsNestedElement` - `UiaPathResolver_LastSegmentWithoutId_UsesClassName` - `UiaPathResolver_NotFound_ReturnsNull` - `SmokeRegression_BoxV4CleanLike_ParsesAndResolves` Recorder.Tests: - `DragCollapser_TypeAfterFocusChange_InheritsTarget` - `DragCollapser_TypeAfterMouseDown_FallbackToMouseTarget` - `WindowFilter_ExternalCoord_DropsEvent` - `WindowFilter_SutCoord_KeepsEvent` - `ScenarioWriter_RoundTrip_PreservesKorean` ## 빌드/테스트 결과 - `dotnet build recordingtest.sln` — 0 warning, 0 error (TreatWarningsAsErrors) - `dotnet test` — 60 → 71 통과, 0 실패 ## 변경 파일 - src/Recordingtest.Player/UiaPathParser.cs (new) - src/Recordingtest.Player/IUiaPathResolver.cs (new — `IUiaTreeNode`+`UiaPathResolver`) - src/Recordingtest.Player/UiaPlayerHost.cs - src/Recordingtest.Recorder/DragCollapser.cs - src/Recordingtest.Recorder/ScenarioWriter.cs - src/Recordingtest.Recorder/WindowFilter.cs (new) - src/Recordingtest.Recorder/NativeMethods.cs (WindowFromPoint/GetForegroundWindow/GetWindowThreadProcessId) - src/Recordingtest.Recorder/LowLevelHook.cs (Filter property) - src/Recordingtest.Recorder/Program.cs (filter wiring) - tests/Recordingtest.Player.Tests/UiaPathResolverTests.cs (new) - tests/Recordingtest.Recorder.Tests/RecorderTests.cs (5 새 fact) - docs/guides/smoke-test.md (PowerShell UTF-8 팁) ## 다음 단계 - `/evaluate issue-12` (Evaluator) - 통과 시 PROGRESS.md/PLAN.md orchestrator가 갱신 - 실제 SUT 위 smoke 2회차로 box-v4-clean.yaml 재생 검증