# Sprint Contract — diff-reporter **Owner:** Generator **Depends on:** normalizer (정규화된 입력) **Issue:** #2 ## Goal `*.approved`와 `*.received` 쌍을 받아 의미 있는 diff를 생성하고, 실패 지점을 시각화한다. `diff-triager` 서브에이전트가 읽을 수 있는 구조화 출력도 제공. ## Definition of Done - [ ] `Recordingtest.DiffReporter` 라이브러리 + CLI - [ ] 입력: `--approved --received --out ` - [ ] JSON/텍스트 파일은 라인·객체 단위 의미 diff, 바이너리는 hex 요약 diff - [ ] 출력: `diff.json`(구조화), `diff.md`(사람용), `diff.html`(옵션, side-by-side) - [ ] `diff.json` 스키마: `{ file, hunks[], summary: { added, removed, changed } }` - [ ] 동일 파일 비교 시 "identical"로 단정, exit code 0 - [ ] 차이 존재 시 exit code 1 + 요약을 stdout 1줄 - [ ] diff-triager 에이전트가 `diff.json`만 읽어 bucket 분류 가능 (통합 테스트 1개) ## Interfaces - **Inputs:** 두 파일 경로 - **Outputs:** `diff.json`, `diff.md`, (옵션) `diff.html` - **Side effects:** 없음 ## Out of scope - 정규화 자체 (normalizer) - triage 분류 로직 (diff-triager 에이전트) - 자동 approve (`/approve` 커맨드) ## Evaluation plan 1. 동일 파일 2개 → identical 판정 2. 1필드만 바뀐 JSON → `diff.json.hunks.length == 1` 3. 바이너리 파일 diff → hex summary 출력 4. diff-triager에 통합: normalization gap 케이스에서 bucket=`normalization_gap` 분류 확인 ## Risks - 큰 파일(수십 MB 모델)에서 성능 — 스트리밍 diff 필요 - JSON 스키마 변경 시 triager 하위 호환성