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

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

  1. dotnet test tests/Normalizer.Tests 전부 pass
  2. json-configs.json의 모든 suspected field가 default 프로파일 규칙에 커버됨 (매핑 테이블 검증)
  3. 동일 입력 2회 정규화 바이트 diff 없음
  4. 샘플 Settings.json 정규화 전/후 비교에서 타임스탬프·경로가 마스킹됨

Risks

  • epsilon 선택이 SUT 실제 정밀도와 충돌 가능 → 구성 가능해야 함.
  • 컬렉션 순서 정렬이 SUT 의미를 바꿀 수 있음 → 정렬 대상은 명시적 화이트리스트.