- sut-prober evaluation (pass) - diff-reporter evaluation (pass with 1 partial follow-up) - normalizer evaluations v1 (fail) + v2 (pass) - PROGRESS.md Done rows for #3, #4, #5 + Follow-ups - PLAN.md P0 reduced to hook verification Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
50
docs/history/2026-04-07_이슈3-4-5-P1-병렬완료-orchestration.md
Normal file
50
docs/history/2026-04-07_이슈3-4-5-P1-병렬완료-orchestration.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 2026-04-07 이슈 #3·#4·#5 — P1 병렬 Generator/Evaluator 오케스트레이션
|
||||
|
||||
- **이슈**: #3 (sut-prober), #4 (normalizer), #5 (diff-reporter)
|
||||
- **소요 시간**: ~45분 (Generator/Evaluator 서브에이전트 병렬 실행 포함)
|
||||
- **Context 사용량**: ~160k tokens (orchestrator 세션)
|
||||
|
||||
## 진행 요약
|
||||
|
||||
이 세션은 **오케스트레이터** 역할. 실제 구현/평가는 모두 서브에이전트에 위임.
|
||||
|
||||
### 사이클
|
||||
|
||||
1. 이슈 #3 생성 → Generator(sut-prober) → Evaluator **pass** → close
|
||||
2. 이슈 #4, #5 생성 → Generator(normalizer) + Generator(diff-reporter) **병렬 백그라운드**
|
||||
3. 두 Generator 완료 → Evaluator(normalizer) + Evaluator(diff-reporter) **병렬 백그라운드**
|
||||
4. normalizer **fail** (sidecar 누락, coverage `|| true`) → Generator 재작업 → Re-evaluator **pass**
|
||||
5. diff-reporter **pass** (DoD #8 partial: triager 통합 테스트 부재, follow-up)
|
||||
6. PROGRESS/PLAN 갱신, 이슈 #4·#5 코멘트 및 close
|
||||
|
||||
## 커밋
|
||||
|
||||
- `f043c18` sut-prober PoC (#3)
|
||||
- `7920de1` diff-reporter PoC (#5)
|
||||
- `3c5294a` normalizer PoC v1 (#4)
|
||||
- `05c7a3f` normalizer fix (#4)
|
||||
|
||||
## 결과
|
||||
|
||||
| 모듈 | 테스트 | 결과 |
|
||||
|------|--------|------|
|
||||
| sut-prober | 없음(CLI 검증) | pass (8/8 DoD) |
|
||||
| diff-reporter | 5/5 | pass (7 pass + 1 partial) |
|
||||
| normalizer | 10/10 | pass v2 (8/8 DoD) |
|
||||
|
||||
## Follow-ups (non-blocking)
|
||||
|
||||
- sut-prober: JSON snake_case naming policy
|
||||
- diff-reporter: 실제 diff-triager 에이전트 통합 테스트
|
||||
- normalizer: mask_volatile_settings JSON-path 스코핑, float epsilon 구성화
|
||||
|
||||
## Harness design 원칙 검증
|
||||
|
||||
이번 라운드가 harness design 원칙의 **첫 실전 테스트**였고 성공적으로 동작:
|
||||
- Generator와 Evaluator가 **같은 세션 아님** → 자기 평가 편향 차단
|
||||
- Normalizer v1 Generator가 자진 flag한 3개 partial 중 2개를 Evaluator가 실제로 **fail 판정** → Generator 자체 판단만으로는 부족함 실증
|
||||
- Re-iteration이 깔끔히 동작 → 계약 기반 협업이 안정적
|
||||
|
||||
## 다음 단계
|
||||
|
||||
P1 UI 자동화: recorder + player (FlaUI 승인 후)
|
||||
23
docs/history/2026-04-07_이슈3-sut-prober-evaluator.md
Normal file
23
docs/history/2026-04-07_이슈3-sut-prober-evaluator.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# 2026-04-07 — sut-prober 평가 (Evaluator)
|
||||
|
||||
- **이슈:** #3 (관련: #2 sut-prober 구현)
|
||||
- **역할:** Evaluator (독립 채점)
|
||||
- **소요 시간:** 약 10분
|
||||
- **Context 사용량:** 약 35K 토큰
|
||||
|
||||
## 작업 요약
|
||||
- `docs/contracts/sut-prober.md` 계약 기반으로 Generator 산출물을 채점.
|
||||
- `dotnet build recordingtest.sln` → 경고 0 / 오류 0.
|
||||
- `dotnet run --project src/Recordingtest.SutProber -- --sut "EG-BIM Modeler" --out docs/sut-catalog` → exit 0, plugins 187 / json 16 / assemblies 17.
|
||||
- 두 번째 실행 후 `git diff` / `git status --porcelain` 모두 비어있음 — 결정성 통과.
|
||||
- SutProber 소스 grep: 모든 `File.Write*`/`Directory.Create` 호출이 `outDir`(`docs/sut-catalog`) 대상. SUT 폴더 쓰기 없음.
|
||||
- `plugins.json` 경로는 `EG-BIM Modeler/Plugins/...` 형태로 repo-root 상대, forward slash.
|
||||
- `assemblies.json`의 `HmEG.dll` `HasPdb=true` 확인.
|
||||
|
||||
## Verdict
|
||||
**pass** — 9개 DoD 항목 전부 pass. 평가서: `docs/contracts/sut-prober.evaluation.md`.
|
||||
|
||||
## 비고 / 후속 권고
|
||||
- JSON 프로퍼티 케이스가 PascalCase (`SizeBytes` 등). 계약 문서 표기인 snake_case와 다르나 evaluator 브리핑이 "size_bytes or equivalent"를 허용하므로 통과 처리. 후속 작업으로 `JsonNamingPolicy.SnakeCaseLower` 적용 검토 권장.
|
||||
- `JsonConfigScanner`는 루트가 객체일 때만 키를 수집. `CategoryCommands.json`처럼 단일 배열을 감싼 객체는 `CategoryCommands[0]…` 식 합성 키가 보이는데, 이는 스캐너가 아닌 원본 JSON 구조 문제. DoD 위반 아님.
|
||||
- PROGRESS.md는 호출자가 갱신 (verdict=pass).
|
||||
33
docs/history/2026-04-07_이슈4-normalizer-evaluator-v2.md
Normal file
33
docs/history/2026-04-07_이슈4-normalizer-evaluator-v2.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# 2026-04-07 이슈 #4 — normalizer evaluator (v2)
|
||||
|
||||
- 관련 이슈: #4 (normalizer 평가 — 재평가)
|
||||
- 담당 에이전트: evaluator
|
||||
- 소요 시간: 약 8분
|
||||
- Context 사용량: 약 30k tokens
|
||||
- Generator iteration: commit `05c7a3f`
|
||||
|
||||
## 작업 요약
|
||||
Generator iteration 2 산출물에 대한 독립 재평가. v1에서 fail 처리한 두 항목(DoD #6 sidecar log, DoD #7 catch-all coverage)이 실제로 해소되었는지 엄격 검증.
|
||||
|
||||
## 검증 절차
|
||||
1. `dotnet build recordingtest.sln` — 0 warning / 0 error.
|
||||
2. `dotnet test tests/Recordingtest.Normalizer.Tests` — **10 passed / 0 failed / 0 skipped** (167 ms).
|
||||
3. `Normalizer.cs` 검토 — `Normalize(input, profile, sidecarPath?)` overload 존재. `sidecarPath`가 디렉터리면 `normalization.log`로, 파일 경로면 그대로 기록. 형식 `{RuleId}\tcount={Count}` Ordinal 정렬 + `total=N` 라인 일치.
|
||||
4. `RuleTests.Normalize_WritesSidecarLogFile`, `Normalize_SidecarPath_AcceptsDirectory` — 실제 임시 파일 생성 후 파일 존재/내용/정렬/total 라인을 모두 단언. 모킹 아님.
|
||||
5. `CoverageTests.cs` — `|| true` 제거 확인. 18개 엔트리의 명시적 `Dictionary<string,string> FieldRuleMap`(StringComparer.Ordinal)로 교체. 매핑 누락 또는 매핑된 규칙이 default 프로파일에 없으면 실패.
|
||||
6. `profiles/default.yaml` — 6 rules: `mask_volatile_settings` 포함.
|
||||
7. `Rules.cs` — `MaskVolatileSettings`가 stub 아닌 실제 구현(allowlist HashSet 16개, JsonNode 재귀 walk, `<VOLATILE>` 치환, count 반환).
|
||||
8. 건너뛴 테스트 0건 확인.
|
||||
|
||||
## 결과
|
||||
- Verdict: **pass**
|
||||
- 모든 DoD 항목 pass.
|
||||
- 산출물:
|
||||
- `docs/contracts/normalizer.evaluation.md` (신규 v2 보고서)
|
||||
- `docs/contracts/normalizer.evaluation.v1.md` (v1 보고서 보존)
|
||||
|
||||
## 비차단 리스크 (Notes에 기록)
|
||||
`mask_volatile_settings`의 allowlist는 필드명 단독 매칭이므로, 구조적으로 무관한 서브트리에 동일 이름 필드가 있으면 실제 버그를 마스킹할 수 있음. 현재 16개로 좁아 수용 가능. 카탈로그 확장 시 JSON path 스코핑 도입 권장. 후속 이슈에서 `normalizer.md`에 명시 권장.
|
||||
|
||||
## 후속
|
||||
Generator/Planner가 PROGRESS.md를 갱신할 수 있음. Evaluator는 PROGRESS.md를 수정하지 않음.
|
||||
26
docs/history/2026-04-07_이슈4-normalizer-evaluator.md
Normal file
26
docs/history/2026-04-07_이슈4-normalizer-evaluator.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# 2026-04-07 이슈 #4 — normalizer evaluator
|
||||
|
||||
- 관련 이슈: #4 (normalizer 평가)
|
||||
- 담당 에이전트: evaluator
|
||||
- 소요 시간: 약 10분
|
||||
- Context 사용량: 약 35k tokens
|
||||
|
||||
## 작업 요약
|
||||
독립 평가자로서 `docs/contracts/normalizer.md` Sprint Contract 기준으로 Generator 산출물(`src/Recordingtest.Normalizer/`, `tests/Recordingtest.Normalizer.Tests/`)을 채점.
|
||||
|
||||
## 검증 절차
|
||||
1. `dotnet build recordingtest.sln` — 0 warning / 0 error.
|
||||
2. `dotnet test tests/Recordingtest.Normalizer.Tests` — 8 passed / 0 failed / 0 skipped.
|
||||
3. `profiles/default.yaml` 5개 규칙 확인.
|
||||
4. `Rules.cs` 규칙별 구현 검토 (timestamps, guids, paths, floats, sort).
|
||||
5. `RuleTests.Normalize_IsIdempotent` 멱등성 테스트 확인.
|
||||
6. `CoverageTests.DefaultProfile_CoversAllSuspectedFields` 매핑 테스트 검토 — `|| true` 캐치-올 발견.
|
||||
7. sidecar `normalization.log` 파일 출력 부재 확인.
|
||||
|
||||
## 결과
|
||||
- Verdict: **fail**
|
||||
- DoD #6 (sidecar log) 미구현, DoD #7 (suspected-field 커버리지) partial.
|
||||
- 산출물: `docs/contracts/normalizer.evaluation.md`
|
||||
|
||||
## 후속
|
||||
Generator 재작업 필요. PROGRESS.md 갱신 보류.
|
||||
20
docs/history/2026-04-07_이슈5-diff-reporter-evaluator.md
Normal file
20
docs/history/2026-04-07_이슈5-diff-reporter-evaluator.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 2026-04-07 diff-reporter Evaluator
|
||||
|
||||
- 관련 이슈: #5 (#2 diff-reporter 평가)
|
||||
- 작업: Sprint Contract `docs/contracts/diff-reporter.md` 기준 독립 평가
|
||||
- 소요 시간: 약 8분
|
||||
- Context 사용량: 약 35k tokens
|
||||
|
||||
## 결과
|
||||
- Verdict: **pass**
|
||||
- DoD 8개 중 7 pass / 1 partial(diff-triager 통합 테스트 부재)
|
||||
- `dotnet build recordingtest.sln` 0/0
|
||||
- `dotnet test tests/Recordingtest.DiffReporter.Tests` 5 passed / 0 failed
|
||||
- CLI smoke: 동일 → exit 0 `identical`, 1필드 차이 → exit 1, hunks.length=1, 스키마 일치
|
||||
|
||||
## 산출물
|
||||
- `docs/contracts/diff-reporter.evaluation.md`
|
||||
- 본 히스토리 파일
|
||||
|
||||
## 후속
|
||||
- diff-triager 에이전트 통합 테스트 1건 추가 권장 (DoD #8 partial 해소)
|
||||
Reference in New Issue
Block a user