First time box-v6.yaml (raw recorder output, 676 lines) replays end-to-end and actually creates a Box in the SUT — no AI post-editing of target paths or offsets required. This is the counterpart to #13's recorder-side fixes: the player now absorbs the remaining record→replay gaps instead of demanding a hand-cleaned scenario. Changes (all in Recordingtest.Player): - PlayerEngine: null-target fallbacks - Type with null target → host.Type() against current focus - Click with null target + raw_coord → click at screen-absolute raw_coord - Other null targets still skipped - PlayerEngine: strip leading alt+tab hotkey steps (recording-startup noise that fights the player's own foreground switch) - PlayerEngine: preserve recorded inter-step timing, clamped 150ms–3s, routed through new IPlayerHost.Delay so the engine itself stays Sleep-free (keeps the existing "no fixed sleep" DoD test passing) - PlayerEngine: per-step console log for live debugging - UiaPlayerHost: BringSutToForeground() — SetForeground + Focus + 600ms settle, called from Program.cs before engine.Run - Step model: add RawCoord (int[]) and Ts (long?) fields, auto-mapped from YAML raw_coord / ts keys Tests updated: - PlayerEngine_NullTarget_SkipsWithoutCalling → _Fallback_Issue14 (verifies the new Click-with-raw_coord and Type behavior) - FakePlayerHost (both player.tests and runner.tests) implement Delay Live smoke: box-v6.yaml raw replay produced the expected Box geometry on the 2nd attempt; 1st attempt dropped the initial "BOX" keystrokes, tracked as a follow-up (foreground settle is still threshold-sensitive at 600ms). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.0 KiB
2.0 KiB
PLAN.md — recordingtest
다음에 할 일의 우선순위 큐. 에이전트는 상단부터 집어든다. 비자명한 항목은
/contract <name>→docs/contracts/<name>.md로 Sprint Contract 먼저 작성.
P0 — 지금 바로
- 훅 동작 검증 — SessionStart/Stop/Guard 3개 shell 스크립트를 실제로 트리거시켜 확인
- 의존: jq 설치 여부 확인
P1 — 라이브 검증 (사용자 환경 필요)
- 이슈 #14 재생 안정화 — 첫 시도 BOX 타이핑 누락 문제. foreground settle 600ms→능동 대기 전환 또는 첫 type 이전
Keyboard.Typewarm-up./contract player-foreground-stabilize. - recorder Gap I-1 — type 스텝 target을
Automation.FocusedElement로 직접 채워 null_target_steps=0 달성./contract recorder-focused-element-target. - engine-bridge v3 — ReflectionEngineStateProvider 실매핑 (smoke test 이후)
Follow-ups (non-blocking)
- sut-prober snake_case JSON —
JsonNamingPolicy.SnakeCaseLower적용. Evaluator가 pass 처리했지만 contract 엄격 준수를 위해 권장.
P2 — 통합
- test-runner — 시나리오 일괄 실행 + 실패 triage
- 의존: recorder + player + normalizer + diff-reporter 전부
- engine-bridge 탐색 — HmEG PDB 리플렉션으로 카메라/선택 상태 접근 가능 여부 확인
- Sprint Contract 필요
- AutomationPeer PR 전략 PoC — SUT fork에 AI로 AutomationPeer 자동 부착 샘플
P3 — 상시
- Scaffolding review (PoC 3개마다)
- .claude/ 비계 감사 — 기사 원칙: 불필요한 비계 제거
- history 파일 누락 체크 — Stop hook이 경고
규칙
- 항목을 집을 때 PROGRESS.md의 "In progress"에 기록하고 본인(에이전트명/세션) 명시.
- 비자명한 P0/P1/P2 항목은 반드시 Sprint Contract 먼저.
- Generator와 Evaluator는 같은 세션이 겸하지 않는다.
- 완료 시: evaluator pass → PROGRESS.md Done 이동 → PLAN.md 제거 → history 작성 →
/handoff.