Implement normalizer PoC (#4)

This commit is contained in:
minsung
2026-04-07 14:12:07 +09:00
parent f043c18061
commit 3c5294a4cb
11 changed files with 709 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
# 2026-04-07 이슈 #4 — Normalizer PoC (Generator)
## 요약
`Recordingtest.Normalizer` 라이브러리와 xUnit 테스트 프로젝트를 신설하여 골든파일 정규화 PoC를 구현했다. `default.yaml` 프로파일에 5개 규칙(strip_timestamps, mask_guids, normalize_paths, round_floats, sort_json_keys) 등록.
## 산출물
- `src/Recordingtest.Normalizer/` (라이브러리)
- `Recordingtest.Normalizer.csproj` (YamlDotNet, System.Text.Json)
- `Normalizer.cs`, `Rules.cs`, `Profile.cs`, `RuleApplication.cs`
- `profiles/default.yaml`
- `tests/Recordingtest.Normalizer.Tests/`
- `RuleTests.cs` (규칙별 단위 테스트 + idempotent + 5-rule 적용 확인)
- `CoverageTests.cs` (json-configs.json suspectedNondeterministicFields 매핑 검증)
- `recordingtest.sln` 두 프로젝트 추가
## 결과
- `dotnet build`: 경고 0, 오류 0
- `dotnet test`: 8/8 pass
## 매핑 (suspectedNondeterministicFields → 규칙)
- `*FilePath`, `*FileName``normalize_paths`
- 그 외 스칼라 설정값 → `sort_json_keys` (직렬화 시 키 순서 결정성 확보)
- 추가 값-수준 비결정성 → `strip_timestamps`, `mask_guids`, `round_floats`
자세한 근거는 `tests/Recordingtest.Normalizer.Tests/CoverageTests.cs` 헤더 주석 참조.
## 소요 시간
약 25분
## Context 사용량
약 55k tokens
## 관련 이슈
#4
## 비고 / DoD 미충족 항목
- 사이드카 로그 파일 생성은 라이브러리 책임에서 제외하고 `NormalizeResult.Log`로 반환만 한다 (추후 CLI에서 영속화 예정 — 계약서의 sidecar 파일 작성 항목은 부분 충족).
- 정규화 epsilon은 6자리 고정. 향후 프로파일에서 구성 가능하도록 확장 필요.
- Evaluator가 위 두 항목을 어떻게 판정할지 별도 확인 필요.