Files
FESADev/phases/solver-core-skeleton/step0.md
T
2026-06-12 01:31:31 +09:00

3.4 KiB

Step 0: cmake-ctest-bootstrap

읽어야 할 파일

먼저 아래 파일들을 읽고 프로젝트의 아키텍처와 검증 규칙을 파악하라:

  • /AGENTS.md
  • /docs/PRD.md
  • /docs/ARCHITECTURE.md
  • /docs/ADR.md
  • /scripts/validate_workspace.py

작업

C++ solver skeleton을 구현할 수 있도록 최소 CMake/CTest 부트스트랩을 만든다.

요구사항:

  • 루트 /CMakeLists.txt를 생성한다.
  • C++ 표준은 C++17 이상으로 고정한다.
  • MSVC에서 warning-as-error를 강제하지 않는다.
  • 아직 production source가 없으므로 solver target은 INTERFACE library fesa_core로 시작한다.
  • fesa_core는 repository root의 src를 include directory로 노출한다.
  • enable_testing()tests/ 하위 CMake 구성을 연결한다.
  • /tests/CMakeLists.txt, /tests/unit/CMakeLists.txt, /tests/integration/CMakeLists.txt를 생성한다.
  • tests/unit/*_test.cpptests/integration/*_test.cpp 파일을 각각 독립 test executable로 등록한다.
  • 각 test executable은 fesa_core에 link한다.
  • /tests/unit/harness_smoke_test.cpp를 생성하고, 표준 라이브러리만 사용해 CTest가 동작함을 확인하는 최소 main()을 둔다.
  • npm, JavaScript, TypeScript fallback은 추가하지 않는다.

권장 CMake 구조:

cmake_minimum_required(VERSION 3.20)
project(FESA LANGUAGES CXX)

add_library(fesa_core INTERFACE)
target_compile_features(fesa_core INTERFACE cxx_std_17)
target_include_directories(fesa_core INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/src)

enable_testing()
add_subdirectory(tests)

tests/unit/CMakeLists.txttests/integration/CMakeLists.txtfile(GLOB CONFIGURE_DEPENDS ...)foreach를 사용해 새 *_test.cpp가 자동으로 CTest에 등록되도록 만든다.

Tests To Write First

  • /tests/unit/harness_smoke_test.cpp
    • main()std::string{"fesa"}.size() == 4 같은 deterministic smoke assertion을 검증한다.
    • 실패 시 non-zero를 반환한다.

RED 확인:

  1. tests/unit/harness_smoke_test.cpp를 먼저 만든다.
  2. ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R harness_smoke_test를 실행해 아직 CMake 구성이 없어 실패함을 확인한다.
  3. 그 뒤 CMake 파일을 작성한다.

Acceptance Criteria

python -m unittest discover -s scripts -p "test_*.py"
python scripts/validate_workspace.py
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R harness_smoke_test

검증 절차

  1. 위 AC 커맨드를 실행한다.
  2. 아키텍처 체크리스트를 확인한다:
    • ARCHITECTURE.md의 src/, tests/unit/ 구조를 따르는가?
    • ADR-002의 C++17/MSVC/CMake/CTest 기본값을 벗어나지 않았는가?
    • AGENTS.md의 python scripts/validate_workspace.py 기본 검증 경로를 유지하는가?
  3. 결과에 따라 phases/solver-core-skeleton/index.json의 step 0을 업데이트한다:
    • 성공: "status": "completed", "summary": "CMake/CTest bootstrap with fesa_core interface target and smoke test"
    • 3회 수정 시도 후 실패: "status": "error", "error_message": "구체적 에러 내용"
    • 사용자 개입 필요: "status": "blocked", "blocked_reason": "구체적 사유" 후 중단

금지사항

  • C++ production solver class를 이 step에서 만들지 마라.
  • 외부 test framework를 추가하지 마라.
  • JavaScript/TypeScript/npm fallback을 추가하지 마라.