# FESA Repository Instructions ## 적용 범위와 기준 문서 이 파일은 저장소 전체에 적용한다. - 제품 요구사항과 Phase 1 수용 조건은 `docs/PRD.md`를 따른다. - 모듈 경계와 데이터 흐름은 `docs/ARCHITECTURE.md`를 따른다. - 기술 선택과 트레이드오프는 `docs/ADR.md`를 따른다. - Harness 실행 방법은 `docs/HARNESS.md`와 `.agents/skills/harness/SKILL.md`를 따른다. - 실제 빌드와 테스트 명령은 `.harness/config.json`과 CMake Preset을 우선한다. ## 기술 기준 - 언어 표준: C++20 - 컴파일러: Visual Studio 2026 MSVC v145 - 대상 플랫폼: Windows x64 - 빌드 및 테스트: CMake, CMake Presets, CTest, GoogleTest/GoogleMock - 수치 연산 및 희소 직접해법: Intel oneAPI MKL - 요소 계산 및 조립 병렬화: Intel oneAPI TBB - 결과 저장: HDF5 - 외부 라이브러리는 개발 환경에 사전 설치된 버전을 사용한다. - FESA는 단위 변환을 수행하지 않는다. 입력은 일관 단위계를 사용해야 한다. ## Phase 1 범위 - Abaqus `.inp` 제한 부분집합으로 작성된 flat/orphan mesh 또는 좌표변환이 없는 단일 Part/Assembly/Instance 모델을 읽는다. - 단일 선형 정적 `*STEP`만 실행한다. - 절점당 6자유도를 갖는 2절점 3D Isoparametric Timoshenko Beam만 구현한다. - 등방성 선형 탄성, 일반 단면, `*BOUNDARY`, `*CLOAD`만 지원한다. - 다른 요소, 다중 step, 여러 Instance, Instance 좌표변환, MPC, 분포하중, 비선형, 동적, 모달, 좌굴 및 열전달을 선행 구현하지 않는다. ## 아키텍처 규칙 - public header는 `include/fesa/`, 구현은 `src/fesa/`, 테스트는 `tests/`에 둔다. - `core`, `model`, `fem`, `elements`는 Abaqus, MKL, TBB 및 HDF5 API에 의존하지 않는다. - `io/abaqus`는 입력 syntax와 semantic mapping만 담당하며 해석 알고리즘을 알지 않는다. - `model`에는 Abaqus keyword 문자열 대신 solver semantic model을 저장한다. - 자유도와 equation ID는 `DofManager`가 소유한다. `Node`나 `Element`에 분산 저장하지 않는다. - 외부 라이브러리 handle과 resource는 adapter와 RAII wrapper 내부에 가둔다. - 테스트 helper가 production parser, model validation 또는 solver 경로를 우회하지 않게 한다. - 실제 두 번째 구현이 생기기 전에는 범용 registry, 빈 미래 클래스 또는 디렉터리를 만들지 않는다. ## 개발 및 검증 절차 1. 요구조건과 완료 기준을 먼저 문서화한다. 2. 정식화의 출처, 가정, 좌표계, 부호 및 적분 규칙을 기록한다. 3. 입력, semantic model 및 HDF5 계약을 구현 전에 확정한다. 4. 실패하는 단위·통합·reference 테스트와 모델을 먼저 작성한다. 5. 테스트를 통과하는 최소 코드를 구현한다. 6. 해석해, physics sanity 및 Abaqus 2024 골든 결과와 비교한다. 7. 물리량별 tolerance를 통과한 뒤에만 기능 완료와 내부 배포를 선언한다. 추가 규칙: - 수직 파이프라인을 먼저 연결하되 임시 가짜 강성행렬은 사용하지 않는다. - 같은 입력과 설정의 병렬 조립 결과는 재현 가능해야 한다. - 전단강성이 생략되면 \(A_{sy}=A_{sz}=5A/6\)과 `SCF=0`을 Phase 1 기본값으로 적용한다. - reference 비교는 metadata 없이 요청된 물리량과 CSV 경로를 명시한다. 현재 캔틸레버 샘플은 변위, 반력 및 요소 단면력을 비교하며 도심 응력 비교 루틴은 synthetic CSV로 검증한다. - 새 MSVC 빌드 경고를 추가하지 않는다. - 변경은 요청 범위에 한정하고 Conventional Commits 형식의 메시지를 사용한다. ## 검증 명령 Harness Python 검증: ```powershell uv run --with pytest python -m pytest -v -rs ``` 테스트가 0개 수집된 실행은 성공으로 인정하지 않는다. Solver bootstrap 이후에는 `.harness/config.json`에 지정된 CMake Preset을 사용한다. Preset이 없을 때만 다음 격리 build directory를 사용한다. ```powershell cmake -S . -B .harness/build -A x64 cmake --build .harness/build --config Debug ctest --test-dir .harness/build -C Debug --output-on-failure ``` Harness phase 실행: ```powershell python scripts/execute.py ``` 사용자가 명시적으로 원격 push를 요청한 경우에만 다음을 사용한다. ```powershell python scripts/execute.py --push ```