- 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>
48 lines
2.1 KiB
Markdown
48 lines
2.1 KiB
Markdown
# 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_path`가 `Button[@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 블록 가능 → 별도 스레드 + 큐 필수
|