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>
This commit is contained in:
minsung
2026-04-07 13:57:20 +09:00
parent a48a8a2d1d
commit 7ffbb1f757
47 changed files with 1886 additions and 11 deletions

View File

@@ -0,0 +1,47 @@
# 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 블록 가능 → 별도 스레드 + 큐 필수