Files
recordingtest/docs/contracts/normalizer.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

44 lines
2.0 KiB
Markdown

# Sprint Contract — normalizer
**Owner:** Generator
**Depends on:** sut-prober (Json 카탈로그)
**Issue:** #2
## Goal
SUT 저장 파일(Json 설정 + 모델 파일)의 비결정적 필드를 정규화해 golden-file 비교를 결정적으로 만든다. 규칙은 **프로파일 단위로 버전 관리**되고 단위 테스트를 동반한다.
## Definition of Done
- [ ] `Recordingtest.Normalizer` 라이브러리가 `Normalize(input, profile)` API 제공
- [ ] 기본 프로파일 `default` 포함 규칙 최소 5개: 타임스탬프 마스킹, GUID 치환, 절대 경로 → `<REPO>`/`<USER>`, 부동소수점 epsilon(1e-6), JSON 객체 키 정렬
- [ ] 프로파일은 `profiles/*.yaml`로 선언, 코드 변경 없이 규칙 추가 가능
- [ ] 각 규칙마다 `tests/Normalizer.Tests/` 아래 before/after 샘플 1쌍 이상
- [ ] 동일 입력으로 두 번 정규화해도 같은 바이트 출력 (idempotent)
- [ ] 정규화 로그(sidecar) `normalization.log` 생성 — 어떤 규칙이 몇 번 적용됐는지 기록
- [ ] `json-configs.json` 카탈로그의 "suspected fields" 전수를 default 프로파일로 덮는다
## Interfaces / contracts
- **Inputs:** 파일 경로 + 프로파일 이름
- **Outputs:** 정규화된 바이트 스트림 + sidecar 로그
- **Side effects:** sidecar 로그 쓰기만
## Out of scope
- 바이너리 `.hme`/`.egm` 파서 (별도 contract)
- SUT 내부 호출
- 정규화 규칙 자동 학습
## Evaluation plan
1. `dotnet test tests/Normalizer.Tests` 전부 pass
2. `json-configs.json`의 모든 suspected field가 default 프로파일 규칙에 커버됨 (매핑 테이블 검증)
3. 동일 입력 2회 정규화 바이트 diff 없음
4. 샘플 `Settings.json` 정규화 전/후 비교에서 타임스탬프·경로가 마스킹됨
## Risks
- epsilon 선택이 SUT 실제 정밀도와 충돌 가능 → 구성 가능해야 함.
- 컬렉션 순서 정렬이 SUT 의미를 바꿀 수 있음 → 정렬 대상은 명시적 화이트리스트.