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

44
docs/contracts/player.md Normal file
View File

@@ -0,0 +1,44 @@
# Sprint Contract — player
**Owner:** Generator
**Depends on:** recorder 스키마 확정
**Issue:** #2
## Goal
recorder가 생성한 시나리오 yaml을 SUT에 재생해 결과 저장 파일을 생성한다. 타이밍은 고정 sleep 금지, UIA/이벤트 기반 동기화.
## Definition of Done
- [ ] `Recordingtest.Player` 콘솔이 `--scenario <path> [--output-dir <path>]` 받음
- [ ] 각 step 재생 전 `wait_for`(uia 이벤트/엘리먼트 property) 대기 구현
- [ ] `target.uia_path`로 엘리먼트 재탐색 후 `offset_norm`으로 좌표 계산해 입력 전달
- [ ] 재생 중 예외 발생 시 시나리오 스텝 index + 엘리먼트 탐색 실패 이유를 아티팩트로 기록
- [ ] 체크포인트 step에서 현재 저장 파일을 `<output-dir>/checkpoint-<n>.*`로 복사
- [ ] 재생 완료 시 exit code 0, 실패 시 non-zero + 아티팩트 경로 출력
- [ ] 동일 시나리오 10회 재생 시 9회 이상 성공 (flaky 허용 상한)
## Interfaces
- **Inputs:** 시나리오 yaml, 아티팩트 출력 디렉터리
- **Outputs:** checkpoint 저장 파일, 실패 아티팩트(스크린샷, UIA 덤프, 로그)
- **Side effects:** SUT 프로세스 실행/종료
## Out of scope
- 정규화 (normalizer의 몫)
- diff (diff-reporter의 몫)
- 리포트 집계 (test-runner의 몫)
## Evaluation plan
1. recorder로 만든 간단 시나리오(Box 생성 저장)를 10회 재생 → 9회 이상 완료 파일 생성
2. 의도적으로 잘못된 `uia_path`를 넣어 실패 → 아티팩트에 탐색 실패 이유 기록 확인
3. 체크포인트 2개 시나리오 재생 → 각 checkpoint 파일 존재 확인
4. 고정 sleep 호출 grep으로 0건 확인
## Risks
- plugin 로드 지연 → 첫 step 전 "plugin ready" 신호 필요
- 시작 상태 초기화 (임시 프로젝트 파일 삭제) 미비 시 누적 오염
- 재생 중 모달 대화상자 출현 시 대응 정책 필요