# Sprint Contract — sut-prober **Owner:** Generator (일반 세션) **Depends on:** 없음 **Issue:** #2 ## Goal EG-BIM Modeler SUT의 **정적** 구조(플러그인·설정·어셈블리)를 덤프해 `docs/sut-catalog/`에 베이스라인 가능한 카탈로그를 생성한다. SUT는 실행하지 않는다. ## Definition of Done - [ ] `dotnet run --project src/Recordingtest.SutProber` 실행으로 카탈로그 3종이 생성된다: `plugins.json`, `json-configs.json`, `assemblies.json` - [ ] `plugins.json`은 `EG-BIM Modeler/Plugins/Eg*Plugin/` 187개(±) 전부를 담고, 각 항목은 `{ name, path, dlls[], size_bytes }` 형식 - [ ] `json-configs.json`은 `EG-BIM Modeler/Json/*.json` 각 파일별 `{ name, top_level_keys[], suspected_nondeterministic_fields[] }` - [ ] `assemblies.json`은 `HmEG*.dll`, `Editor*.dll`, `HmGeometry*.dll`의 `{ name, size, has_pdb }` - [ ] 출력은 **정렬되어 있어** 두 번 실행해도 동일 (decimal/텍스트 diff 없음) - [ ] `EG-BIM Modeler/` 폴더에 대한 쓰기 접근이 없다 (코드 리뷰로 확인) - [ ] 경로는 repo root 상대 경로로 기록(절대 경로 금지) ## Interfaces / contracts - **Inputs:** `EG-BIM Modeler/` (read-only), CLI 인자 `--sut ` (기본 `EG-BIM Modeler`) - **Outputs:** `docs/sut-catalog/plugins.json`, `docs/sut-catalog/json-configs.json`, `docs/sut-catalog/assemblies.json` - **Side effects:** 없음 (로그 제외) ## Out of scope - SUT 실행 / 리플렉션 / 동적 분석 - PDB 파싱 (engine-bridge의 몫) - UIA 트리 덤프 (recorder 또는 별도 PoC의 몫) ## Evaluation plan evaluator는 다음을 수행: 1. `dotnet build` 성공 2. `dotnet run --project src/Recordingtest.SutProber -- --sut "EG-BIM Modeler"` 실행, exit code 0 확인 3. 세 카탈로그 파일 존재 확인 + JSON 파싱 유효성 4. `plugins.json` 엔트리 수 ≥ 180 5. 두 번째 실행 후 세 파일 `git diff` 결과가 비어있음을 확인 (결정성) 6. `grep -r "EG-BIM Modeler" src/Recordingtest.SutProber/` 결과에 `File.Write|File.Delete|File.Create` 호출 없음 확인 ## Risks / open questions - .NET 버전 합의 필요 (`net8.0` 제안). SUT와 다를 수 있으나 prober는 독립 프로세스이므로 무관. - 플러그인 폴더 구조가 일정한지 샘플 확인 필요. - 경로 구분자(Windows `\`) 정규화 정책 — 출력에서 `/`로 통일 권장.