# Step 2: Dependency Smoke Tests ## 읽어야 할 파일 - `/AGENTS.md` - `/docs/PRD.md` - `/docs/ARCHITECTURE.md` - `/docs/ADR.md` - `/docs/HARNESS.md` - `/docs/superpowers/plans/2026-07-29-fesa-phase-1.md` - `/CMakeLists.txt` - `/CMakePresets.json` - `/cmake/FesaDependencies.cmake` - `/.harness/config.json` - `/tests/CMakeLists.txt` 이전 step의 CMake target과 preset을 그대로 확장하라. 현재 개발환경에서 검증된 package 위치: - HDF5 2.1.1: `C:/Program Files/HDF_Group/HDF5/2.1.1/cmake/hdf5-config.cmake` - HDF5 runtime: `C:/Program Files/HDF_Group/HDF5/2.1.1/bin` - GoogleTest/GoogleMock v1.17, VS2026/MSVC v145 x64: `C:/Users/baram/AppData/Local/FESA/dependencies/googletest-1.17.0-v145-x64-crt/lib/cmake/GTest/GTestConfig.cmake` 위 파일의 존재를 먼저 확인하고 package root를 `CMAKE_PREFIX_PATH` 또는 `HDF5_DIR`/`GTest_DIR` hint로 사용하라. 이 절대경로를 production CMake에 하드코딩하지 마라. 이유: 개발환경별 설치 위치를 build contract와 분리해야 한다. ## 작업 사전 설치된 oneMKL, oneTBB, HDF5 C API, GoogleTest/GoogleMock을 CMake imported target으로 찾고 링크 계약을 검증한다. - `tests/unit/dependencies/dependency_smoke_test.cpp`를 먼저 작성한다. - 테스트는 MKL의 작은 vector 연산, TBB의 제한된 parallel loop, HDF5 임시 파일 생성·닫기, GoogleTest 실행을 확인한다. - `FesaDependencies.cmake`는 `MKL::MKL`, TBB imported target, HDF5 C target, GoogleTest target을 제공해야 한다. - oneMKL은 LP64, dynamic link, TBB threading 조합을 사용한다. - runtime DLL 또는 architecture 불일치는 configure diagnostic으로 보고한다. ## Acceptance Criteria ```powershell cmake --preset windows-debug cmake --build --preset windows-debug ctest --preset windows-debug -R DependencySmoke --output-on-failure ctest --preset windows-debug --output-on-failure ``` 네 의존성을 실제 호출하는 smoke test가 통과해야 하며 새 MSVC 경고가 없어야 한다. ## 검증 절차 1. smoke test를 먼저 추가하고 link 또는 실행 실패를 확인한다. 2. dependency discovery와 target link만 최소 수정한다. 3. 전체 configure/build/test를 새로 실행한다. 4. 성공 시 정확한 imported target과 탐색 파일을 summary에 기록한다. 5. 패키지나 MSVC가 없으면 세 차례 임의 수정하지 말고 `blocked`로 종료한다. ## 금지사항 - FetchContent, vcpkg, Conan 또는 다운로드를 추가하지 마라. 이유: ADR-002 위반이다. - vendor 절대경로를 public header에 노출하지 마라. 이유: backend 격리를 깨뜨린다. - 현재 개발환경의 package 절대경로를 tracked CMake cache variable 기본값으로 넣지 마라. 이유: 다른 개발환경의 configure를 깨뜨린다. - solver 기능을 구현하지 마라. 이유: 이 step은 build dependency 계약만 다룬다.