docs: approve MITC4 implementation handoff
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"project": "FESA Structural Solver",
|
||||
"phase": "linear-static-mitc4-shell",
|
||||
"steps": [
|
||||
{
|
||||
"step": 0,
|
||||
"name": "shell-semantic-model",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 1,
|
||||
"name": "shell-domain-mapping",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"name": "shell-director-geometry",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"name": "mitc4-kinematics-constitutive",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"name": "mitc4-stiffness-drilling",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"name": "mitc4-physical-recovery",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 6,
|
||||
"name": "shell-dof-scatter",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 7,
|
||||
"name": "shell-sparse-assembly",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 8,
|
||||
"name": "shell-load-validation",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 9,
|
||||
"name": "shell-analysis-state",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 10,
|
||||
"name": "shell-result-recovery",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 11,
|
||||
"name": "shell-hdf5-output",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 12,
|
||||
"name": "shell-linear-static-flow",
|
||||
"status": "pending"
|
||||
},
|
||||
{
|
||||
"step": 13,
|
||||
"name": "shell-reference-comparison",
|
||||
"status": "pending"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
# Step 0: Shell Semantic Model
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
- 이 Step만 `RED -> observed failure -> minimal GREEN -> focused/full VERIFY`로 수행한다.
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`
|
||||
- `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`
|
||||
- `/docs/PRD.md`
|
||||
- `/docs/ARCHITECTURE.md`
|
||||
- `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`
|
||||
- `/docs/HARNESS_WORKFLOW.md`
|
||||
- `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md`
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- `/phases/index.json`
|
||||
- `/phases/linear-static-mitc4-shell/index.json`
|
||||
- `/phases/linear-static-mitc4-shell/step0.md`
|
||||
- `/include/fesa/model/model_types.hpp`
|
||||
- `/include/fesa/model/domain.hpp`
|
||||
- `/src/fesa/model/domain.cpp`
|
||||
- `/tests/unit/model/model_types_test.cpp`
|
||||
- `/tests/unit/model/domain_test.cpp`
|
||||
|
||||
필수 파일이 없거나 승인 계약과 충돌하면 현재 Step을 `blocked`로 기록하고 중단한다.
|
||||
|
||||
## 작업
|
||||
|
||||
Requirements 002-016, 024의 semantic ownership만 구현한다.
|
||||
|
||||
1. 먼저 `MITC4-MODEL-001`과 `MITC4-MODEL-002`를 기존 model tests에 추가한다.
|
||||
2. Tests는 four-node connectivity, stable `SourceEntityId`, source type `S4|S4R`와
|
||||
internal `FESA-MITC4` identity 분리, finite positive thickness와 material/section
|
||||
indices, optional initial nodal director/frame storage, declaration order를 검증한다.
|
||||
3. Production은 `model_types.hpp`와 필요한 `Domain` const accessor에만 최소 추가한다.
|
||||
Candidate records are `ShellSourceElementType`, `ShellSection`,
|
||||
`Mitc4ShellDefinition` and a shell-only node director/frame record.
|
||||
4. 기존 `EulerBeam3DDefinition`, `GeneralBeamSection`, B33 accessors를 보존한다.
|
||||
5. Node/Element에 equation id를 넣지 않는다. Director는 dimensionless unit vector이고
|
||||
thickness와 별도다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
먼저 다음 configure를 실행한다.
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths = @(
|
||||
"C:/git/googletest",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb",
|
||||
"C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
|
||||
)
|
||||
foreach ($requiredBuildPath in $requiredBuildPaths) {
|
||||
if (-not (Test-Path -LiteralPath $requiredBuildPath)) { throw "Missing $requiredBuildPath" }
|
||||
}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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"
|
||||
```
|
||||
|
||||
RED test를 작성한 뒤 아래 build/test가 missing shell semantic behavior 때문에 실패함을
|
||||
기록한다. Compile failure면 그 expected failure를 기록하고 CTest는 GREEN 뒤 실행한다.
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "DomainModel" --output-on-failure
|
||||
```
|
||||
|
||||
GREEN 뒤 focused와 full VERIFY:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "DomainModel" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
- RED command와 예상 failure, GREEN/focused/full 결과를 다음 Step summary에 남긴다.
|
||||
- 성공 시 현재 Step만 `completed`와 한 줄 `summary`로 갱신한다.
|
||||
- 3회 후 실패면 `error`/`error_message`, 사용자 결정이 필요하면
|
||||
`blocked`/`blocked_reason`을 기록한다.
|
||||
- timestamp, retry, commit, 다음 Step 선택은 Executor 소유다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Parser, element kernel, DOF, assembly를 수정하지 마라. 이유: Step 0은 model layer만 소유한다.
|
||||
- 공통 public Element hierarchy를 만들지 마라. 이유: 승인된 아키텍처 범위가 아니다.
|
||||
- 기존 B33 record를 제거하거나 의미를 바꾸지 마라. 이유: V0 회귀를 막는다.
|
||||
- 직접 commit하거나 hook script를 수동 실행하지 마라. 이유: Executor/hook 소유권이다.
|
||||
- `reference/` 파일을 수정하거나 Abaqus를 실행하지 마라.
|
||||
@@ -0,0 +1,78 @@
|
||||
# Step 1: Shell Domain Mapping
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 001-010, 017-023
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Sections 1-5, 8-9
|
||||
- `/phases/index.json`, task index, `/phases/linear-static-mitc4-shell/step1.md`
|
||||
- Step 0에서 수정한 model/Domain paths와 Step 0 summary
|
||||
- `/include/fesa/io/abaqus/domain_mapper.hpp`
|
||||
- `/src/fesa/io/abaqus/domain_mapper.cpp`
|
||||
- `/tests/unit/io/abaqus/domain_mapper_test.cpp`
|
||||
- `/include/fesa/io/abaqus/input_syntax.hpp`와 `input_reader.hpp`는 경계 확인용으로만 읽는다.
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-MAP-001..004`를 먼저 작성한다.
|
||||
2. `AbaqusDomainMapper::map(const ParsedInput&) -> Result<Domain>` signature를 유지하고
|
||||
exact `TYPE=S4|S4R` four-node connectivity와 single-row centered
|
||||
`*SHELL SECTION, MATERIAL=...`를 semantic model로 mapping한다.
|
||||
3. ELSET/material을 element마다 exactly once resolve하고 source type과
|
||||
`FESA-MITC4` identity를 분리한다.
|
||||
4. identity PART/ASSEMBLY/INSTANCE 및 multiple identity instances의 stable mapping을
|
||||
유지한다. Mixed beam-shell은 `unsupported-mixed-element-model`로 거부한다.
|
||||
5. Invalid connectivity/section/material/unsupported option/second or nonlinear step/
|
||||
DLOAD를 I/O 계약의 exact diagnostic class로 fail closed 한다.
|
||||
6. Existing six-DOF BOUNDARY/CLOAD grammar와 output-request no-op behavior를 재사용한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "InpDomainMapping" --output-on-failure
|
||||
```
|
||||
|
||||
Valid S4/S4R mapping 또는 negative diagnostic assertion의 expected RED를 기록한 뒤
|
||||
minimal GREEN만 작성한다. GREEN 뒤:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "InpSyntax|InpDomainMapping|DomainModel" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/focused/full evidence를 기록하고 현재 Step만 `completed`/`summary` 또는
|
||||
`error`/`error_message`, `blocked`/`blocked_reason`으로 갱신한다. Timestamp,
|
||||
commit, advancement는 Executor 소유다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- `AbaqusInputReader`에 semantic policy를 넣지 마라.
|
||||
- Element math, geometry calibration, equation numbering을 구현하지 마라.
|
||||
- Unsupported 의미를 무시하거나 S4R reduced integration을 암시하지 마라.
|
||||
- Reference artifact, tolerance, upstream 문서를 수정하지 마라.
|
||||
- 직접 commit/hook 실행을 하지 마라.
|
||||
@@ -0,0 +1,69 @@
|
||||
# Step 10: Shell Result Recovery
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 029/035/041-046/048/057
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md` Sections 14, 16
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Sections 6.3-6.5
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step10.md`, completed Steps 5/9 paths and summaries
|
||||
- `/include/fesa/results/result_recovery.hpp`
|
||||
- `/src/fesa/results/result_recovery.cpp`
|
||||
- `/tests/unit/results/result_recovery_test.cpp`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-REC-001..005`를 먼저 작성한다.
|
||||
2. Existing full `K*d-F` residual을 nodal reaction/free residual evidence로 유지한다.
|
||||
3. Shell element displacement는 24-entry scatter로 추출하고 Step 5
|
||||
physical-only recovery를 호출해 stable source-element/GP/section order로 candidate를 채운다.
|
||||
4. Deterministic element reduction으로 physical energy를 합산한다. Applied CLOAD와
|
||||
constrained reaction으로 global origin about force/moment balance와 normalized
|
||||
metrics를 계산한다.
|
||||
5. 모든 row/component/location/finite validation 뒤 AnalysisState에 원자적으로 commit한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "ResultRecovery" --output-on-failure
|
||||
```
|
||||
|
||||
Beam-only recovery/absent shell rows의 expected RED 후 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "ResultRecovery|AnalysisState|Mitc4ShellPhysicalRecovery" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED와 focused/full result evidence를 기록하고 current Step만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Result record type 또는 HDF5 schema를 이 Step에서 새로 만들지 마라.
|
||||
- Location averaging, Abaqus point relabeling, drilling recovery/energy를 추가하지 마라.
|
||||
- Reaction을 shell resultants의 별도 합으로 정의하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,72 @@
|
||||
# Step 11: Shell HDF5 Output
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 039-048
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Section 6 exact schema
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step11.md`, completed Steps 9/10 paths and summaries
|
||||
- `/include/fesa/results/results_writer.hpp`
|
||||
- `/include/fesa/io/hdf5/hdf5_results_writer.hpp`
|
||||
- `/src/fesa/io/hdf5/hdf5_results_writer.cpp`
|
||||
- `/tests/unit/io/hdf5/hdf5_results_writer_test.cpp`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-H5-001..004`를 먼저 작성한다.
|
||||
2. Generic `ResultsWriter::write(path,Domain,AnalysisState,diagnostics)` 경계를 유지한다.
|
||||
3. I/O contract exact metadata, four-node element identity, director/frame,
|
||||
materials/sections, masks/prescribed values, fixed locations와 all mandatory shell
|
||||
result/global datasets를 schema v0에 additive하게 기록한다.
|
||||
4. Exact shapes/dtypes/component attributes/unit dimensions/coordinate/location/step/frame
|
||||
identity와 finite/order를 self-check한다.
|
||||
5. Output request와 무관하게 mandatory inventory를 기록하고 drilling paths/S33/S13/S23를
|
||||
만들지 않는다.
|
||||
6. Existing same-directory temp, flush/close, read-only reopen/self-check, atomic replace를 재사용한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Hdf5ResultsWriter" --output-on-failure
|
||||
```
|
||||
|
||||
Missing shell schema/atomic validation RED 후 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Hdf5ResultsWriter|ResultRecovery|AnalysisState" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/schema/focused/full evidence를 기록하고 current Step 상태 payload만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- B33 dataset 의미를 migrate/reinterpret하지 마라.
|
||||
- CSV를 solver output으로 만들거나 partial final HDF5를 남기지 마라.
|
||||
- Drilling/calibration output을 추가하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,72 @@
|
||||
# Step 12: Shell Linear Static Flow
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 024-030/051/057
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` CLI/diagnostic contract
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step12.md`, completed Steps 7-11 paths and summaries
|
||||
- `/include/fesa/analysis/linear_static_analysis.hpp`
|
||||
- `/src/fesa/analysis/linear_static_analysis.cpp`
|
||||
- `/tests/integration/analysis/linear_static_analysis_test.cpp`
|
||||
- `/tests/integration/app/fesa_application_test.cpp`
|
||||
- `/include/fesa/app/fesa_application.hpp`와 implementation은 dispatch 확인용
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-FLOW-001..004` integration tests를 먼저 작성한다.
|
||||
2. Shell Domain을 existing eight-hook `Analysis::run()` lifecycle에 연결한다.
|
||||
3. Stiffness assemble/partition, `Kff` factorize, load/effective RHS, substitute,
|
||||
full displacement reconstruct, full residual/physical recovery, validated state/output
|
||||
commit 순서를 유지하고 factorization은 exactly once다.
|
||||
4. Nonzero prescribed displacement의 `Ff-Kfc*dc`, singular support failure,
|
||||
all-constrained `0x0 Kff` success를 검증한다.
|
||||
5. CLI syntax와 exit 0/2/3/4/5/6 semantics를 유지하며 shell input도 같은
|
||||
`fesa.exe <model.inp> --output <results.h5>` route를 사용한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_integration_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure
|
||||
```
|
||||
|
||||
Shell pipeline RED를 확인하고 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_integration_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/lifecycle/focused/full evidence를 기록하고 current Step 상태 payload만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Analysis lifecycle을 재정렬하거나 0x0 Kff를 singular로 바꾸지 마라.
|
||||
- Nonlinear procedure, distributed load, mixed beam-shell execution을 추가하지 마라.
|
||||
- Candidate validation 전 state/output을 commit하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,107 @@
|
||||
# Step 13: Shell Reference Comparison
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
- 이 Step은 test-only reference module을 소유하며 solver production module을 소유하지 않는다.
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 053/058-072
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Section 7
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step13.md`, completed Steps 11/12 paths and summaries
|
||||
- `/tests/reference/reference_comparison.hpp`와 cpp/test는 B33 identity/report precedent
|
||||
- Candidate new `/tests/reference/mitc4_reference_comparison.hpp`
|
||||
- Candidate new `/tests/reference/mitc4_reference_comparison.cpp`
|
||||
- Candidate new `/tests/reference/mitc4_reference_comparison_test.cpp`
|
||||
- Candidate new `/tests/reference/mitc4_reference_cases_test.cpp`
|
||||
- `/tests/CMakeLists.txt`
|
||||
- Read-only:
|
||||
`/reference/shell/shell.inp`,
|
||||
`/reference/shell/shell displacements.csv`,
|
||||
`/reference/shellR/shellR.inp`,
|
||||
`/reference/shellR/shellR displacements.csv`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-REF-001..006`, `MITC4-E2E-S4-001/002`,
|
||||
`MITC4-E2E-S4R-001/002`를 comparator 구현 전에 작성한다.
|
||||
2. Test-only comparator는 각 case의 exact input/displacement CSV와 FESA HDF5만 요구한다.
|
||||
`Part Instance Name`와 `Node Label`을 HDF5 node identity에 match하고 CSV
|
||||
`U-U1..U-U3, UR-UR1..UR-UR3`를 displacement columns 0..5에 match한다.
|
||||
3. Header/schema/row set/missing/extra/duplicate/nonfinite/source identity를 numeric
|
||||
comparison 전에 fail한다.
|
||||
4. Component group의 finite Abaqus scale로
|
||||
`tol_c=1e-9+1e-6*reference_scale_c`를 clamp/row denominator 없이 적용한다.
|
||||
U1/U2/U3만 blocking이고 UR1/UR2/UR3 exceedance는 deterministic warning-only다.
|
||||
5. 모든 row decision, max absolute, normalized, RMS, vector norm, worst source row/component를
|
||||
deterministic report/JSON에 남긴다.
|
||||
6. S4/S4R HDF5가 source type만 보존하고 동일 `FESA-MITC4` integration rule을 기록하는지
|
||||
검증한다.
|
||||
7. Declared case가 solver production defect를 드러내면 current Step을 중단하고
|
||||
Correction/Coordinator에 owning prior module로 handoff한다. 이 Step에서 그 production
|
||||
file을 수정하지 않는다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
먼저 exact expected hashes를 검증한다.
|
||||
|
||||
```powershell
|
||||
$expectedReferenceHashes=[ordered]@{
|
||||
"reference/shell/shell.inp"="4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF"
|
||||
"reference/shell/shell displacements.csv"="C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B"
|
||||
"reference/shellR/shellR.inp"="1325940FB42B78961CF25E84379BF2693846FAD22473E7688AC5456B37B18CB4"
|
||||
"reference/shellR/shellR displacements.csv"="8887ACC5ED007CB97583A9FDC1150B48B9297E269A5BA8EBA6C1A5F6306E98CB"
|
||||
}
|
||||
foreach($p in $expectedReferenceHashes.Keys){
|
||||
if((Get-FileHash -Algorithm SHA256 -LiteralPath $p).Hash -ne $expectedReferenceHashes[$p]){
|
||||
throw "Reference artifact changed: $p"
|
||||
}
|
||||
}
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_reference_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference|Mitc4S4RReference" --output-on-failure
|
||||
```
|
||||
|
||||
Missing comparator/case RED를 확인하고 test-only minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_reference_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference|Mitc4S4RReference" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
foreach($p in $expectedReferenceHashes.Keys){
|
||||
if((Get-FileHash -Algorithm SHA256 -LiteralPath $p).Hash -ne $expectedReferenceHashes[$p]){
|
||||
throw "Reference artifact changed: $p"
|
||||
}
|
||||
}
|
||||
git diff --check
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/comparator/E2E/full/hash evidence를 기록하고 current Step 상태 payload만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Abaqus/reference solver를 실행하거나 reference 파일을 생성·수정·rename·repair하지 마라.
|
||||
- README, metadata.json, provenance, Abaqus version을 gate로 만들지 마라.
|
||||
- UR warning을 blocking으로 바꾸거나 tolerance를 calibration/clamp하지 마라.
|
||||
- Reaction/stress equality gate나 Abaqus formulation equivalence를 추가하지 마라.
|
||||
- Solver production file을 수정하거나 직접 commit/hook 실행을 하지 마라.
|
||||
@@ -0,0 +1,71 @@
|
||||
# Step 2: Shell Director Geometry
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 011-016/050/051/054
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md` Sections 4, 9, 17
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md` Sections 5.2, 5.5, 6.1
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Sections 3.3, 8-9
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step2.md`, Step 0-1 modified paths/summaries
|
||||
- Candidate new `/include/fesa/model/shell_geometry.hpp`
|
||||
- Candidate new `/src/fesa/model/shell_geometry.cpp`
|
||||
- Candidate new `/tests/unit/model/shell_geometry_test.cpp`
|
||||
- `/src/fesa/CMakeLists.txt`, `/tests/CMakeLists.txt`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-GEO-001..004`를 먼저 작성하고 CMake에 test source를 등록한다.
|
||||
2. Backend-neutral model geometry module에 element normal candidate, deterministic
|
||||
area-weighted nodal director, pairwise positive orientation, right-handed nodal
|
||||
tangent frame with documented axis tie-break, structured validation seam을 만든다.
|
||||
3. Center, eight stiffness points, four tying points, four committed recovery points에서
|
||||
finite bases, nonzero surface measure, positive finite Jacobian을 검사한다.
|
||||
4. Valid planar/rotated/warped cases와 duplicate, bow-tie, zero-area, reversed,
|
||||
nonfinite, nonpositive-J, opposed-normal cases를 검증한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4Geometry" --output-on-failure
|
||||
```
|
||||
|
||||
Expected missing geometry API/behavior RED를 확인한 뒤 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4Geometry|DomainModel|InpDomainMapping" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/VERIFY evidence를 summary에 남기고 현재 Step 상태만 갱신한다. Executor-owned
|
||||
timestamp/retry/commit/advancement를 쓰지 않는다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Calibrated smooth angle, warp/distortion threshold, NR-O03/NR-O04를 추가하지 마라.
|
||||
- Parser keyword policy나 element stiffness를 구현하지 마라.
|
||||
- Invalid geometry를 clamp/repair하지 마라.
|
||||
- Reference/upstream 문서를 수정하거나 직접 commit/hook 실행을 하지 마라.
|
||||
@@ -0,0 +1,74 @@
|
||||
# Step 3: MITC4 Kinematics and Constitutive Law
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 031-038/050-052
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md` Sections 3-11, 17
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md` Sections 5.1-5.6, 6.1-6.2
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step3.md`, Step 2 geometry paths/summary
|
||||
- `/include/fesa/elements/euler_beam_3d.hpp`와 cpp는 concrete value-kernel style 참고용
|
||||
- Candidate new `/include/fesa/elements/mitc4_shell.hpp`
|
||||
- Candidate new `/src/fesa/elements/mitc4_shell.cpp`
|
||||
- Candidate new `/tests/unit/elements/mitc4_shell_test.cpp`
|
||||
- source/test CMakeLists
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-KIN-001..005` tests를 먼저 작성한다.
|
||||
2. Public common Element hierarchy 없이 concrete `Mitc4Shell` value type을 만든다.
|
||||
3. Candidate creation seam은 four nodes, four initial directors, `ShellSection`,
|
||||
`LinearElasticMaterial`을 받아 validated `Result<Mitc4Shell>`을 반환한다.
|
||||
4. Shape/derivative identities, local frames, `T_p`/`T_d` channel maps, direct
|
||||
membrane/bending columns, four covariant MITC edge-midpoint tying samples와
|
||||
interpolation weights, engineering shear factors를 구현한다.
|
||||
5. `C_ps`, `C_5`, `A`, `D`, `A_s`의 exact coefficients, dimensions, symmetry,
|
||||
positive definiteness와 unit rescaling을 구현한다.
|
||||
6. `2x2x2` Gauss point/weight order를 고정하고 intermediate physical matrices는
|
||||
20 DOF contract를 유지한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKinematics|Mitc4ShellConstitutive" --output-on-failure
|
||||
```
|
||||
|
||||
Expected missing kernel/kinematics RED를 기록한 뒤 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKinematics|Mitc4ShellConstitutive|Mitc4Geometry" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
현재 Step의 RED와 focused/full evidence만 기록하고 상태 payload만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Global assembly, drilling stiffness, recovery/HDF5를 구현하지 마라.
|
||||
- S4R source type으로 quadrature를 분기하지 마라.
|
||||
- Nonlinear state/residual/tangent를 구현하지 마라.
|
||||
- Vendor type을 public header에 노출하거나 직접 commit/hook 실행을 하지 마라.
|
||||
@@ -0,0 +1,68 @@
|
||||
# Step 4: MITC4 Stiffness and Drilling Stabilization
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 031-038/050-056
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md` Sections 10-14, 17
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md` Sections 5.7, 6.1-6.2
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step4.md`, completed Step 3 kernel/header/test and summary
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-KERNEL-001..006`를 production edit 전에 작성한다.
|
||||
2. Common `2x2x2` integration으로 physical `K20`을 만들고 deterministic
|
||||
20-to-24 congruence로 global-coordinate `K24 physical`을 만든다.
|
||||
3. `R+`는 eight physical tangent-rotation diagonal의 finite positive values만
|
||||
사용하고 `k_ref=min(R+)`, `k_d=1e-3*k_ref`,
|
||||
`K_drill=T_d^T(k_d I4)T_d`를 정확히 구현한다.
|
||||
4. Empty/nonfinite `R+`는 structured deterministic failure다.
|
||||
5. Scaled symmetry <=1e-12, transform energy <=1e-12, physical rigid action <=1e-10,
|
||||
physical rank 14, stabilized rank 18/nullity 6, positive non-rigid energy,
|
||||
membrane/bending/shear/twist patch fields를 독립 test로 검증한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKernel|Mitc4ShellPatch|Mitc4ShellDrilling" --output-on-failure
|
||||
```
|
||||
|
||||
Expected missing stiffness/drilling RED를 확인한 뒤 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKernel|Mitc4ShellPatch|Mitc4ShellDrilling|Mitc4ShellKinematics" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/VERIFY evidence와 exact formula를 summary에 기록하고 현재 Step 상태만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Translational diagonal을 `R+`에 넣지 마라.
|
||||
- Coefficient sweep, calibration, drill energy/result, physical recovery를 구현하지 마라.
|
||||
- S4R reduced integration/hourglass와 future nonlinear tangent를 구현하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,67 @@
|
||||
# Step 5: MITC4 Physical Recovery
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 035/042-046/052/056
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md` Sections 14, 16
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` result component/location order
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step5.md`, completed Steps 3-4 kernel/header/test and summaries
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-KERNEL-007`과 `MITC4-PHYSREC-001`을 먼저 작성한다.
|
||||
2. `Mitc4Shell` 내부에 global element displacement 24개를 받아 physical-only
|
||||
shell recovery를 반환하는 candidate seam을 최소 구현한다.
|
||||
3. Fixed GP1..GP4에서 local frame, eight generalized strain/resultant를 계산하고
|
||||
BOTTOM/MIDDLE/TOP에서 direct `[S11,S22,S12]`를 계산한다.
|
||||
4. Physical element strain energy만 반환하며 drilling stiffness/action은 모든
|
||||
physical recovery와 energy에서 제외한다.
|
||||
5. Pure drill vector가 stabilized action은 가지지만 모든 physical recovery/energy가
|
||||
zero임을 검증한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ShellDrilling|Mitc4ShellPhysicalRecovery" --output-on-failure
|
||||
```
|
||||
|
||||
Expected missing recovery seam/pure-drill exclusion RED 후 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ShellDrilling|Mitc4ShellPhysicalRecovery|Mitc4ShellPatch" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
현재 Step만 status/summary payload를 갱신하고 RED/GREEN/VERIFY를 기록한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- AnalysisState/global result rows, ResultRecovery orchestration, HDF5를 수정하지 마라.
|
||||
- Drilling output/stress/resultant/energy를 추가하지 마라.
|
||||
- Location averaging 또는 Abaqus integration-point identity를 만들지 마라.
|
||||
- 직접 commit/hook 실행이나 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,68 @@
|
||||
# Step 6: Shell DOF Scatter
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 005/025
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step6.md`, Step 0 shell model and Step 5 summary
|
||||
- `/include/fesa/fem/dof_manager.hpp`, `/src/fesa/fem/dof_manager.cpp`
|
||||
- `/tests/unit/fem/dof_manager_test.cpp`
|
||||
- `/tests/unit/constraints/essential_constraints_test.cpp`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-DOF-001..003` tests를 먼저 작성한다.
|
||||
2. 기존 node DOF order `[ux,uy,uz,urx,ury,urz]`를 유지한다.
|
||||
3. B33 12-entry scatter를 보존하면서 shell four-node/source-order 24-entry typed
|
||||
scatter와 sorted unique sparse pattern을 `DofManager` 단독 소유로 추가한다.
|
||||
4. Free/constrained numbering과 no/mixed/all constraint, nonzero prescribed value
|
||||
round trip을 shell-sized system에서 검증한다.
|
||||
5. All-constrained `0x0 Kff`가 valid하도록 existing constraint behavior를 보존한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "DofManager|EssentialConstraints" --output-on-failure
|
||||
```
|
||||
|
||||
Current 12-entry-only behavior의 expected RED 뒤 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "DofManager|EssentialConstraints|DomainModel" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/VERIFY evidence를 기록하고 current Step의 Codex-owned fields만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Node/Element에 equation id를 저장하지 마라.
|
||||
- Load/constraint ownership이나 sparse reduction을 이동하지 마라.
|
||||
- 기존 B33 scatter behavior를 제거하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Step 7: Shell Sparse Assembly
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 027/030/037/050/056
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step7.md`, completed Steps 4/6 paths and summaries
|
||||
- `/include/fesa/assembly/sparse_assembler.hpp`
|
||||
- `/src/fesa/assembly/sparse_assembler.cpp`
|
||||
- `/src/fesa/math/sparse_matrix.cpp`
|
||||
- `/tests/unit/assembly/sparse_assembler_test.cpp`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-ASM-001..003` tests를 먼저 작성한다.
|
||||
2. Shell topology를 concrete MITC4 global 24x24 stiffness에 dispatch한다.
|
||||
3. Active source-element order로 worker-owned local buffers를 만들고 element당
|
||||
576 COO entries에 stable `elementOrder`와 `localOrder`를 부여한다.
|
||||
4. Existing `SparseMatrix::fromCoo` canonical reduction과 every diagonal slot을
|
||||
보존하며 worker가 global CSR을 직접 수정하지 않게 한다.
|
||||
5. Serial/TBB/repeated run CSR bytes/values를 비교하고 identical semantic S4/S4R
|
||||
fixtures가 identical K를 만드는지 검증한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "SparseAssembly" --output-on-failure
|
||||
```
|
||||
|
||||
Four-node/24-DOF RED를 확인하고 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "SparseAssembly|DofManager|Mitc4ShellKernel" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED와 deterministic focused/full evidence를 summary에 기록하고 current Step만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Worker가 global CSR을 직접 갱신하거나 unordered reduction을 사용하지 마라.
|
||||
- Source type으로 quadrature/hourglass를 분기하지 마라.
|
||||
- Load, solve, recovery를 구현하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,69 @@
|
||||
# Step 8: Shell Load Validation
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 017-020/028
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md` Sections 8, 13
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Sections 4.2-4.3
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step8.md`, completed Steps 2/7 paths and summaries
|
||||
- `/include/fesa/assembly/load_assembler.hpp`
|
||||
- `/src/fesa/assembly/load_assembler.cpp`
|
||||
- `/tests/unit/assembly/load_assembler_test.cpp`
|
||||
- `/tests/unit/constraints/essential_constraints_test.cpp`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-LOAD-001..004`를 먼저 작성한다.
|
||||
2. Existing global six-DOF full-space CLOAD assembly와 constraint partition을 재사용한다.
|
||||
3. Node별 global force/moment를 stable source order로 먼저 aggregate한다.
|
||||
4. Moment가 exact zero면 별도 나눗셈 없이 accept한다. Nonzero면 approved director로
|
||||
`rho_M=abs(dot(d,M))/norm(M)`을 계산해 `rho_M<=1e-12`만 accept한다.
|
||||
5. Rejected moment는 `unsupported-drilling-load`로 RHS/substitution/drill stabilization
|
||||
이전에 실패해야 한다. Existing `Ff-Kfc*dc`와 factorization-before-load를 보존한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "LoadAssembly|EssentialConstraints" --output-on-failure
|
||||
```
|
||||
|
||||
Moment projection/diagnostic RED 뒤 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "LoadAssembly|EssentialConstraints|InpDomainMapping" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
현재 Step의 RED/GREEN/VERIFY evidence와 exact threshold를 summary에 기록한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- DLOAD/equivalent/follower/distributed load를 구현하지 마라.
|
||||
- Numerical drilling을 load channel로 사용하지 마라.
|
||||
- Factorization/load lifecycle을 재정렬하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Step 9: Shell Analysis State
|
||||
|
||||
## 담당 역할과 필수 스킬
|
||||
|
||||
- 담당 역할: `implementation-agent`
|
||||
- 필수 스킬: `harness`, `fesa-cpp-msvc-tdd`
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/.agents/skills/harness/SKILL.md`, `/.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
|
||||
- `/AGENTS.md`, `/docs/PRD.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`
|
||||
- `/docs/HARNESS.md`, `/docs/HARNESS_WORKFLOW.md`, `/.codex/hooks.json`
|
||||
- `/docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md`
|
||||
- `/docs/requirements/linear-static-mitc4-shell.md` Requirements 026/041-046/048
|
||||
- `/docs/research/linear-static-mitc4-shell-research.md`
|
||||
- `/docs/formulations/mitc4-shell-formulation.md`
|
||||
- `/docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- `/docs/io-definitions/linear-static-mitc4-shell-io.md` Sections 6.3-6.5
|
||||
- `/docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- phase indexes, `step9.md`, Step 5 recovery types and Step 8 summary
|
||||
- `/include/fesa/results/result_records.hpp`
|
||||
- `/include/fesa/analysis/analysis_state.hpp`
|
||||
- `/src/fesa/analysis/analysis_state.cpp`
|
||||
- `/tests/unit/results/result_records_test.cpp`
|
||||
|
||||
## 작업
|
||||
|
||||
1. `MITC4-STATE-001..003`을 먼저 작성한다.
|
||||
2. Additive shell record types를 정의한다: stable element, GP1..GP4 natural location,
|
||||
local 3x3 frame, eight generalized strain/resultant, three section positions의
|
||||
`[S11,S22,S12]`.
|
||||
3. AnalysisState에 shell rows, physical strain energy, six equilibrium components,
|
||||
three normalized verification metrics를 candidate-owned storage로 추가한다.
|
||||
4. Validated candidate가 완성된 뒤에만 state로 commit하며 invalid/nonfinite/
|
||||
inventory mismatch가 기존 state를 바꾸지 않게 한다.
|
||||
5. Nonlinear director history, iteration, velocity, acceleration을 할당하지 않는다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths=@("C:/git/googletest","C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl","C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb","C:/Program Files/HDF_Group/HDF5/2.1.1/cmake")
|
||||
foreach($p in $requiredBuildPaths){if(-not(Test-Path -LiteralPath $p)){throw "Missing $p"}}
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -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 --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "AnalysisState" --output-on-failure
|
||||
```
|
||||
|
||||
Missing shell state/rollback RED 뒤 minimal GREEN. 이후:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "AnalysisState|DomainModel" --output-on-failure
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 및 상태 갱신
|
||||
|
||||
RED/VERIFY evidence를 기록하고 현재 Step 상태 payload만 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- Element calculation, ResultRecovery orchestration, HDF5를 구현하지 마라.
|
||||
- Nonlinear/dynamic state나 drilling-specific row를 추가하지 마라.
|
||||
- 직접 commit/hook 실행 또는 reference/upstream 변경을 하지 마라.
|
||||
Reference in New Issue
Block a user