# Step 0: Harness Self Tests ## 읽어야 할 파일 먼저 아래 파일을 모두 읽고 현재 Harness 계약을 파악하라. - `/AGENTS.md` - `/docs/HARNESS.md` - `/.harness/config.example.json` - `/pytest.ini` - `/scripts/msvc_harness/config.py` - `/scripts/msvc_harness/discovery.py` - `/scripts/msvc_harness/models.py` - `/scripts/msvc_harness/process.py` - `/scripts/msvc_harness/tdd_policy.py` - `/scripts/hooks/stop_validation.py` ## 작업 현재 Harness Python 검증이 테스트 0개 수집으로 실패하는 기준선 문제를 해결한다. production Harness 동작은 변경하지 않고, 이미 문서화된 핵심 계약을 검증하는 최소 자가 테스트를 작성한다. - 다음 파일을 만든다. - `tests/harness/test_config.py` - `tests/harness/test_discovery.py` - `tests/harness/test_process.py` - `test_config.py`는 기본 설정 로드, repository 밖 경로 거부, CMake preset 필드의 all-or-none 규칙을 실제 임시 디렉터리로 검증한다. - `test_discovery.py`는 빈 저장소 건너뛰기, CMake 우선 감지, C/C++ 파일만 존재하는 orphan 프로젝트 거부를 실제 임시 디렉터리로 검증한다. - `test_process.py`는 CTest JSON에 테스트가 0개이면 실패하고 하나 이상이면 통과하는 결과 검사를 안전한 fake command runner로 검증한다. subprocess shell을 사용하지 않는 계약도 유지한다. - 각 테스트는 공개 함수인 `load_config`, `discover_project`, `execute_plan`을 통해 관찰 가능한 동작만 확인한다. 이 step은 기존 production 동작의 characterization test만 추가한다. 테스트가 기존 문서 계약과 다르게 실패하면 production 코드를 임의로 고치지 말고 step을 `blocked`로 표시하고 불일치를 기록한다. ## Acceptance Criteria ```powershell uv run --with pytest python -m pytest -v -rs ``` pytest가 테스트를 한 개 이상 수집하고 모든 테스트가 통과해야 한다. ## 검증 절차 1. 변경 전 명령이 테스트 0개 수집으로 실패한다는 기존 기준선 기록을 확인한다. 2. 위 세 테스트 파일만 추가한다. 3. Acceptance Criteria 명령을 새로 실행한다. 4. production Harness 파일에 변경이 없는지 `git diff`로 확인한다. 5. 성공 시 index의 step을 `completed`로 바꾸고 테스트 파일을 summary에 기록한다. ## 금지사항 - production Harness 코드를 변경하지 마라. 이유: 이 step은 기존 계약의 기준선 테스트만 마련한다. - C++ 프로젝트 파일이나 `.harness/config.json`을 만들지 마라. 이유: 다음 step의 독립 범위다. - subprocess로 실제 CMake, MSBuild 또는 CTest를 실행하지 마라. 이유: self-test가 개발 머신 도구 설치 상태에 의존하게 된다.