- CLAUDE.md with collaboration rules and Planner/Generator/Evaluator cycle - .claude/ agents, commands, skills, hooks per Claude Code conventions - Sprint Contracts for sut-prober, normalizer, recorder, player, diff-reporter - SUT catalog (EG-BIM Modeler, 187 plugins) and .gitignore excluding SUT tree - PROGRESS.md / PLAN.md as shared agent handoff state - Solution scaffold targeting sut-prober PoC Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.1 KiB
2.1 KiB
Sprint Contract — recorder
Owner: Generator Depends on: FlaUI 승인, sut-prober(UIA 힌트용 카탈로그) Issue: #2
Goal
사용자가 EG-BIM Modeler에서 수동 테스트하는 동안 입력(키·마우스·창 이벤트)을 캡처해 element-aware 시나리오 파일을 생성한다.
Definition of Done
Recordingtest.Recorder콘솔 실행 시 SUT에 attach하고 입력 캡처 시작- 캡처되는 이벤트: 키 다운/업, 마우스 클릭/드래그/휠, 포커스 변경
- 각 이벤트는
{ ts, kind, uia_path, offset_norm, raw_coord, value }형식으로 기록 - 3D 뷰포트(SharpDX surface) 클릭 시 uia_path는 호스팅 엘리먼트,
offset_norm은[0..1]정규화 좌표 - 출력:
scenarios/<name>.yaml스키마 준수 (scenario-author규격 일치) - 비밀번호/토큰 마스킹 규칙 1개 이상 (예: focus된 element가
PasswordBox이면value를<MASKED>) - 캡처 중 SUT 성능에 눈에 띄는 영향 없음 (60 FPS 유지; 경고만)
- 캡처 종료 시 요약(이벤트 수, 소요 시간, uia_path 미결 건수)
Interfaces
- Inputs:
--output scenarios/<name>.yaml,--attach <pid or window title> - Outputs: 시나리오 yaml
- Side effects: 전역 Win32 hook 등록/해제
Out of scope
- 리플레이 (player의 몫)
- 3D 엔진 상태 캡처 (engine-bridge 사용 예정)
- 자동 이름 추정 / 자연어 변환 (scenario-author)
Evaluation plan
- SUT를 수동 실행 후 recorder attach → Box 명령 버튼 클릭 → Box 생성 드래그 → 저장
- 출력 yaml 파싱 + 스키마 검증
- 클릭 이벤트의
uia_path가Button[@Name*='Box']형태 포함 확인 - 드래그 이벤트의
offset_norm이[0..1]범위 확인 PasswordBox에 더미 입력 →<MASKED>기록 확인- 종료 후 hook 해제 확인 (재실행 시 double-hook 안 남음)
Risks
- IME(한글) 조합 키 이벤트 손실 → 클립보드 우회 필요 가능
- 해상도/DPI 변경 시
raw_coord는 유효성 상실 →offset_norm우선 사용 - Win32 hook은 UI thread 블록 가능 → 별도 스레드 + 큐 필수