# Step 25: Build and Test Verification

## 담당 역할과 필수 스킬

- 담당 역할: `build-test-executor-agent`
- 필수 스킬: `fesa-cpp-msvc-tdd`
- 이 step은 검증과 보고만 수행한다. 실패를 production 변경으로 덮지 않는다.

## 읽어야 할 파일

- `/AGENTS.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
- `/docs/linear-static-3d-euler-beam/requirements.md`
- `/docs/linear-static-3d-euler-beam/implementation-plan.md`
- `/docs/linear-static-3d-euler-beam/implementation-report.md`
- `/docs/linear-static-3d-euler-beam/numerical-review.md`
- `/docs/linear-static-3d-euler-beam/io.md`
- `/docs/linear-static-3d-euler-beam/reference-model.md`
- `/CMakeLists.txt`와 모든 CMake/test registration
- `/phases/linear-static-3d-euler-beam/index.json`의 Step 7–24 summary

## 작업

fresh MSVC x64 Debug configure/build/test evidence를 수집해
`docs/linear-static-3d-euler-beam/build-test.md`를 생성하라.

- Metadata status는 모든 gate 통과 시 `pass-for-reference-verification`이다.
- Environment/dependency revision과 config-resolved command를 기록한다.
- Configure, build, targeted feature tests, CTest discovery, full CTest 각각에 command,
  start/end 또는 duration, exit code, stdout/stderr tail, verdict를 기록한다.
- CTest discovery가 하나 이상의 test를 포함하고 compiler metadata가 MSVC인지 확인한다.
- `/W4 /WX`로 새 product warning이 없는지 build output/CMake setting으로 확인한다.
- implementation report의 Step 7–24 RED/GREEN/VERIFY evidence가 모두 present인지 감사한다.
- 실패는 `configure | compile | link | test | reference-comparison | harness | environment |
  upstream-contract` 중 하나로 분류하고 correction handoff를 기록한다.

## Acceptance Criteria

아래 명령을 fresh evidence로 실행한다.

```powershell
cmake -S . -B .harness/build -A x64 `
  -DFESA_GTEST_SOURCE_DIR=C:/git/googletest `
  "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" `
  "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" `
  "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
cmake --build .harness/build --config Debug
$discovery = ctest --test-dir .harness/build -C Debug --show-only=json-v1 | ConvertFrom-Json
if ($discovery.tests.Count -lt 1) { throw 'CTest discovered zero tests' }
ctest --test-dir .harness/build -C Debug -L linear-static-3d-euler-beam --output-on-failure
ctest --test-dir .harness/build -C Debug --output-on-failure
```

Report structural check:

```powershell
$path = 'docs/linear-static-3d-euler-beam/build-test.md'
if (-not (Test-Path $path)) { throw "Missing $path" }
$required = @('status: `pass-for-reference-verification`', 'MSVC', 'x64', 'Debug',
  'configure', 'build', 'show-only=json-v1', 'output-on-failure', 'exit code', 'duration')
foreach ($text in $required) {
  if (-not (Select-String -LiteralPath $path -SimpleMatch $text -Quiet)) {
    throw "Missing build/test evidence: $text"
  }
}
git diff --check -- $path
```

## 검증 절차

1. 모든 command를 새로 실행하고 실제 exit code/duration/output tail을 기록한다.
2. implementation evidence와 CTest discovered tests를 대조한다.
3. 모두 성공한 경우에만 report와 Step 25를 pass/completed로 갱신한다.
4. 실패 시 report에 정확한 classification과 correction handoff를 기록하고 Step 25를
   `error`로 둔다. 환경/사용자 조치가 필수인 경우만 `blocked`로 둔다.

## 금지사항

- source, tests, CMake를 수정하지 마라. 이유: independent build/test gate다.
- 실패 test를 disable/filter-out하지 마라. 이유: 회귀를 숨긴다.
- reference artifact나 tolerance를 수정하지 마라. 이유: 이 gate의 책임 밖이다.
- command 결과를 추정하거나 이전 summary를 fresh evidence로 대체하지 마라. 이유: gate 신뢰성을 잃는다.
- 직접 commit하지 마라. 이유: Harness executor가 담당한다.
