- 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>
2.0 KiB
2.0 KiB
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
dotnet test tests/Normalizer.Tests전부 passjson-configs.json의 모든 suspected field가 default 프로파일 규칙에 커버됨 (매핑 테이블 검증)- 동일 입력 2회 정규화 바이트 diff 없음
- 샘플
Settings.json정규화 전/후 비교에서 타임스탬프·경로가 마스킹됨
Risks
- epsilon 선택이 SUT 실제 정밀도와 충돌 가능 → 구성 가능해야 함.
- 컬렉션 순서 정렬이 SUT 의미를 바꿀 수 있음 → 정렬 대상은 명시적 화이트리스트.