Files
recordingtest/docs/contracts/recorder.md
minsung 7ffbb1f757 Set up AI dev environment for recordingtest (#2)
- 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>
2026-04-07 13:57:20 +09:00

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

  1. SUT를 수동 실행 후 recorder attach → Box 명령 버튼 클릭 → Box 생성 드래그 → 저장
  2. 출력 yaml 파싱 + 스키마 검증
  3. 클릭 이벤트의 uia_pathButton[@Name*='Box'] 형태 포함 확인
  4. 드래그 이벤트의 offset_norm[0..1] 범위 확인
  5. PasswordBox에 더미 입력 → <MASKED> 기록 확인
  6. 종료 후 hook 해제 확인 (재실행 시 double-hook 안 남음)

Risks

  • IME(한글) 조합 키 이벤트 손실 → 클립보드 우회 필요 가능
  • 해상도/DPI 변경 시 raw_coord는 유효성 상실 → offset_norm 우선 사용
  • Win32 hook은 UI thread 블록 가능 → 별도 스레드 + 큐 필수