# Project: FESA Harness ## 기술 스택 - C++17 이상 - MSVC on Windows - CMake + CTest - Abaqus UserSubroutine source in Fortran - Intel oneAPI Fortran compiler on Windows - Harness scripts in Python 3 ## 아키텍처 규칙 - CRITICAL: 기본 검증 경로는 `python scripts/validate_workspace.py`이다. - CRITICAL: C++ 빌드는 CMake/MSVC/x64/Debug 기준으로 검증한다. - CRITICAL: Abaqus 실행은 기본 검증에서 수행하지 않는다. `HARNESS_ABAQUS_VALIDATION=run`으로 명시한 경우에만 실행한다. - CRITICAL: 새 기능 또는 동작 변경은 테스트를 먼저 작성하고 실패를 확인한 뒤 구현한다. - CRITICAL: Abaqus reference artifact나 solver 코드 복원은 명시적으로 요청된 phase에서만 수행한다. - Codex custom agent의 `model_reasoning_effort` 기본값은 `extra high`로 둔다. - Harness runner는 `scripts/execute.py`에 둔다. - Codex hook 정책은 `.codex/hooks/`에 둔다. - Harness planning/review instructions are stored in `.codex/skills/`. - Generated phase execution outputs remain ignored under `phases/**/step*-output.json`. ## 개발 프로세스 - TDD를 기본으로 한다. C++ production file을 바꿀 때는 관련 C++ test file이 있어야 한다. - Fortran user subroutine production file을 바꿀 때는 관련 no-Abaqus Fortran/Python driver test가 있어야 한다. - 커밋 전 hook은 Harness Python self-test와 workspace validation을 실행해야 한다. - 커밋 메시지는 conventional commits 형식을 따른다: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`. - 계획이 필요한 장기 작업은 Harness phase로 나누고, 각 step은 독립 실행 가능해야 한다. ## 명령어 ```bash python -m unittest discover -s scripts -p "test_*.py" python scripts/validate_workspace.py python scripts/validate_fortran.py python scripts/validate_reference_artifacts.py python scripts/execute.py python scripts/execute.py --push ``` ## MSVC 검증 기본값 - Generator: `Visual Studio 17 2022` - Platform: `x64` - Config: `Debug` - Build directory: `build/msvc-debug` Override variables: - `HARNESS_VALIDATION_COMMANDS` - `HARNESS_CMAKE_GENERATOR` - `HARNESS_CMAKE_PLATFORM` - `HARNESS_CMAKE_CONFIG` - `HARNESS_BUILD_DIR` ## Abaqus / Fortran 검증 기본값 - `HARNESS_FORTRAN_VALIDATION=auto`: `tests/fortran/manifest.json`이 있으면 Intel Fortran no-Abaqus tests를 실행한다. - `HARNESS_FORTRAN_COMPILER=auto`: `ifx`를 우선 사용하고, 없으면 `ifort`를 사용한다. - `HARNESS_ONEAPI_VARS_BAT`: Intel oneAPI 환경 설정 batch file override. - `HARNESS_ABAQUS_VALIDATION=off`: 기본값이며 Abaqus job을 실행하지 않는다. - `HARNESS_ABAQUS_VALIDATION=detect`: Abaqus executable 탐지만 수행한다. - `HARNESS_ABAQUS_VALIDATION=run`: `HARNESS_ABAQUS_VALIDATION_COMMANDS`에 명시된 Abaqus command만 실행한다. - `HARNESS_ABAQUS_USE_ONEAPI_ENV=auto`: Abaqus run command 앞에 oneAPI 환경 설정을 자동 적용할 수 있다.