docs: use S4-only MITC4 reference gate

This commit is contained in:
KOKO\Mimi
2026-08-13 00:48:26 +09:00
parent cf769aa44f
commit 91b2df9e4d
12 changed files with 142 additions and 140 deletions
@@ -13,7 +13,7 @@
- status: `ready-for-implementation`
- approval_state: `harness-step-draft-approved-2026-08-12`
- owner_agent: `implementation-planning-agent`
- date: `2026-08-12`
- date: `2026-08-13`
- source_requirement: `docs/requirements/linear-static-mitc4-shell.md`
- source_research: `docs/research/linear-static-mitc4-shell-research.md`
- source_formulation: `docs/formulations/mitc4-shell-formulation.md`
@@ -37,7 +37,7 @@
승인된 Abaqus `.inp` subset의 `S4``S4R` source element를 하나의 FESA
`FESA-MITC4` 선형 정적 shell formulation으로 해석하고, 물리적으로 분리된 fixed
drilling stabilization, deterministic sparse assembly, mandatory HDF5 shell results,
declared displacement reference case를 end-to-end로 연결한다.
sole declared S4 displacement reference case를 end-to-end로 연결한다.
### Architecture
@@ -84,7 +84,7 @@ HDF5 temporary/self-check/atomic replacement는 재사용한다.
| Formulation | `docs/formulations/mitc4-shell-formulation.md`, `approved-for-implementation-planning` | pass | linear sections만 구현; Section 15 future nonlinear 제외 |
| Numerical Review | `docs/numerical-reviews/linear-static-mitc4-shell-review.md` | pass | critical blocker 없음; planning authorized |
| I/O | `docs/io-definitions/linear-static-mitc4-shell-io.md`, `approved-for-implementation-planning` | pass | keyword, diagnostic, HDF5 schema를 그대로 구현 |
| Reference Model | `docs/reference-models/linear-static-mitc4-shell-reference-models.md` | pass | input/CSV pair만 read-only 사용 |
| Reference Model | `docs/reference-models/linear-static-mitc4-shell-reference-models.md` | pass | sole S4 input/CSV pair만 read-only acceptance input으로 사용 |
| Repository seams | parser/model, element/analysis, result/reference 영역 read-only 조사 | pass | candidate files와 current signatures 확인 |
| Toolchain paths | GoogleTest/MKL/TBB/HDF5 config directories 존재 | pass | Section 10의 exact configure command 사용 가능 |
@@ -99,7 +99,6 @@ Declared read-only reference inventory:
| case | source | displacement CSV | SHA-256 |
| --- | --- | --- | --- |
| S4 | `reference/shell/shell.inp` | `reference/shell/shell displacements.csv` | input `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF`; CSV `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
| S4R | `reference/shellR/shellR.inp` | `reference/shellR/shellR displacements.csv` | input `1325940FB42B78961CF25E84379BF2693846FAD22473E7688AC5456B37B18CB4`; CSV `8887ACC5ED007CB97583A9FDC1150B48B9297E269A5BA8EBA6C1A5F6306E98CB` |
README, `metadata.json`, Abaqus provenance/version, canonical naming 및 추가 portfolio는
readiness gate가 아니다. 현재 열린 product/numerical 결정은 없다. 남은 승인 항목은
@@ -161,7 +160,7 @@ order even when the minimal dependency set below is smaller.
| TASK-12 | TASK-01, TASK-07, TASK-08, TASK-10, TASK-11 |
| TASK-13 | TASK-11, TASK-12 |
| TASK-14 | TASK-13 |
| TASK-15 | TASK-13 |
| TASK-15 | TASK-01, TASK-07, TASK-11 |
| TASK-16 | TASK-00 through TASK-15 |
### TASK-00: `shell-semantic-model`
@@ -291,14 +290,15 @@ order even when the minimal dependency set below is smaller.
- Assert source type `S4`, internal `FESA-MITC4` and U pass/UR report behavior.
- Tests: `MITC4-E2E-S4-001`, `MITC4-E2E-S4-002`.
### TASK-15: `shell-s4r-end-to-end`
### TASK-15: `shell-s4r-common-path-verification`
- This is declared-case sub-work owned by TASK-13/Step 13's test-only reference module,
not an independent production-module Step.
- Run the declared S4R deck through the identical numerical route.
- Assert only source metadata differs from an otherwise identical S4 semantic fixture;
no reduced integration/hourglass branch exists.
- Tests: `MITC4-E2E-S4R-001`, `MITC4-E2E-S4R-002`.
- This is non-reference coverage distributed across the existing domain-mapping,
sparse-assembly and HDF5 tests; Step 13 does not consume an S4R Abaqus artifact.
- Assert S4R selects the same FESA-MITC4 integration/kernel/assembly path as an
otherwise identical S4 semantic fixture while preserving only source metadata.
- Tests: `InpDomainMapping.MapsS4AndS4rThroughOneMitc4Identity`,
`SparseAssembly.S4AndS4rSemanticFixturesAssembleIdenticalStiffness`, and the
existing shell HDF5 source-type metadata coverage.
### TASK-16: `mitc4-full-verification`
@@ -370,8 +370,6 @@ order even when the minimal dependency set below is smaller.
| MITC4-REF-006 | comparator may require administrative files | only declared input/CSV/HDF5 required | `Mitc4ReferenceComparison.*` |
| MITC4-E2E-S4-001 | S4 deck cannot produce valid shell HDF5 | CLI succeeds with exact S4 metadata/schema | `Mitc4S4Reference.*` |
| MITC4-E2E-S4-002 | S4 U comparison unavailable | all U rows pass; UR fully reported | `Mitc4S4Reference.*` |
| MITC4-E2E-S4R-001 | S4R deck selects no/other path | same FESA-MITC4 integration rule | `Mitc4S4RReference.*` |
| MITC4-E2E-S4R-002 | S4R U comparison unavailable | all U rows pass; UR fully reported | `Mitc4S4RReference.*` |
| MITC4-VERIFY-001 | feature tests not discoverable | all planned suites discovered/labeled | CTest JSON inventory |
| MITC4-VERIFY-002 | warnings/regressions unknown | MSVC Debug full build passes /W4 /WX | full build |
| MITC4-VERIFY-003 | nondeterminism unknown | repeated focused/full tests pass | full CTest |
@@ -505,7 +503,7 @@ once without gap or overlapping requirement range.
| requirement range | owning tasks | test/evidence id | reference model id | acceptance |
| --- | --- | --- | --- | --- |
| 001 | TASK-01, TASK-12 | MAP-004, FLOW-001 | N/A | one static step only; deterministic rejection otherwise |
| 002-004 | TASK-00, TASK-01, TASK-11, TASK-14, TASK-15 | MODEL-001, MAP-001, H5-001, both E2E suites | `shell-s4`, `shell-s4r` | S4/S4R one kernel; distinct stable source identity |
| 002-004 | TASK-00, TASK-01, TASK-11, TASK-14, TASK-15 | MODEL-001, MAP-001, H5-001, S4 E2E plus S4R common-path tests | `shell-s4` for reference; S4R N/A | S4/S4R one kernel; distinct stable source identity |
| 005 | TASK-00, TASK-06, TASK-11 | MODEL-001, DOF-001/003, H5-001/002 | N/A | exact six-component order; no distributed equation ownership |
| 006-010 | TASK-00, TASK-01 | MODEL-002, MAP-002/003 | N/A | finite E,nu,t; one assignment; unsupported meanings fail |
| 011-016 | TASK-02, TASK-03 | GEO-001..004, KIN-002 | N/A | deterministic unit directors; exact geometry predicates |
@@ -514,21 +512,21 @@ once without gap or overlapping requirement range.
| 024-030 | TASK-00, TASK-06, TASK-07, TASK-09, TASK-10, TASK-12, TASK-16 | MODEL, DOF, ASM, STATE, REC, FLOW, VERIFY suites | N/A | ownership, deterministic assembly, lifecycle, residual reaction |
| 031-038 | TASK-03, TASK-04, TASK-05, TASK-07, TASK-10 | KIN, KERNEL, PHYSREC, ASM-003, REC-003 | N/A | physical 5-DOF embedding, exact drilling, same quadrature, invariants |
| 039-048 | TASK-09, TASK-10, TASK-11, TASK-12 | STATE-001..003, REC-001..005, H5-001..004, FLOW-004 | N/A | mandatory finite schema/results and atomic commit |
| 049 | TASK-00 through TASK-16 | every production Task records RED/failure/GREEN/focused/full VERIFY; VERIFY-001..003 | `shell-s4`, `shell-s4r` where reference-dependent | TDD evidence, related C++ tests, MSVC Debug no-warning build and full CTest |
| 049 | TASK-00 through TASK-16 | every production Task records RED/failure/GREEN/focused/full VERIFY; VERIFY-001..003 | `shell-s4` where reference-dependent | TDD evidence, related C++ tests, MSVC Debug no-warning build and full CTest |
| 050 | TASK-02 through TASK-05, TASK-07 | GEO-001/002, KIN-001/002, KERNEL-001..004, ASM-002 | N/A | frames, Jacobian, symmetry, transformation, six modes, positivity and repeatability |
| 051 | TASK-02 through TASK-05, TASK-10, TASK-12 | GEO-001, KERNEL-001..003, REC-004, FLOW-002 | N/A | exact normalized 1e-12 and 1e-10 algebraic thresholds |
| 052 | TASK-03 through TASK-05, TASK-10 | KIN-003/004, KERNEL-004, PHYSREC-001, REC-001/002 | N/A | independent membrane, bending, shear, twist fields and recovery signs/order |
| 053 | TASK-04, TASK-05, TASK-14, TASK-15 | KERNEL-001..007, PHYSREC-001, both declared E2E suites | `shell-s4`, `shell-s4r` | formulation invariants/patches and both reference cases pass |
| 053 | TASK-04, TASK-05, TASK-14 | KERNEL-001..007, PHYSREC-001, declared S4 E2E suite | `shell-s4` | formulation invariants/patches and the S4 reference case pass |
| 054 | TASK-02 | GEO-001..004 | N/A | exact valid/rejected geometry inventory; no NR-O03/O04 |
| 055 | TASK-16 | VERIFY scope audit | N/A | extra benchmark portfolio is explicitly nonblocking and absent from completion gate |
| 056 | TASK-04, TASK-05, TASK-07, TASK-10 | KERNEL-005..007, PHYSREC-001, ASM-001/002, REC-003 | N/A | exact fixed drilling, deterministic rank/action and physical-output exclusion |
| 057 | TASK-10, TASK-12, downstream Physics Evaluation | REC-002..004, FLOW-002, later physics report | `shell-s4`, `shell-s4r` | implementation exposes equilibrium/sign/energy evidence; physical plausibility verdict is downstream |
| 058-060 | TASK-13, TASK-14, TASK-15 | REF-003, both E2E comparison tests | `shell-s4`, `shell-s4r` | exact U mixed tolerance without clamp |
| 061-062 | TASK-13, TASK-14, TASK-15 | REF-004/005, both E2E tests | `shell-s4`, `shell-s4r` | UR same tolerance, deterministic warning only |
| 063-064 | TASK-13 | REF-001/002/005 | `shell-s4`, `shell-s4r` | schema/row failure before numeric comparison; full metrics |
| 065-068 | TASK-13, TASK-14, TASK-15 | REF-001/002/006, both case prechecks | `shell-s4`, `shell-s4r` | exact four read-only paths; unique finite mapped rows |
| 069-071 | TASK-14, TASK-15 | both E2E suites | `shell-s4`, `shell-s4r` | declared S4/S4R; U blocks and UR warns; no other equality gate |
| 072 | TASK-13 through TASK-16 | REF-006, VERIFY-004 and git/hash audit | `shell-s4`, `shell-s4r` | no reference solver run or artifact mutation |
| 057 | TASK-10, TASK-12, downstream Physics Evaluation | REC-002..004, FLOW-002, later physics report | `shell-s4` | implementation exposes equilibrium/sign/energy evidence; physical plausibility verdict is downstream |
| 058-060 | TASK-13, TASK-14 | REF-003 and S4 E2E comparison | `shell-s4` | exact U mixed tolerance without clamp |
| 061-062 | TASK-13, TASK-14 | REF-004/005 and S4 E2E test | `shell-s4` | UR same tolerance, deterministic warning only |
| 063-064 | TASK-13 | REF-001/002/005 | `shell-s4` | schema/row failure before numeric comparison; full metrics |
| 065-068 | TASK-13, TASK-14, TASK-15 | REF-001/002/006, S4 case precheck and S4R non-consumption/common-path evidence | `shell-s4` | exact two S4 paths; unique finite mapped rows; no S4R artifact consumption |
| 069-071 | TASK-14, TASK-15 | S4 E2E suite and S4R common-path tests | `shell-s4` | S4 U blocks/UR warns; S4R mapping has no Abaqus equality gate |
| 072 | TASK-13 through TASK-16 | REF-006, VERIFY-004 and git/hash audit | `shell-s4` | no reference solver run or artifact mutation |
## 10. Validation Commands
@@ -571,7 +569,7 @@ 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 --target fesa_reference_tests
ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference|Mitc4S4RReference" --output-on-failure
ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference" --output-on-failure
```
Planning-document verification:
@@ -588,8 +586,6 @@ Reference immutability audit is read-only and fails on any mismatch:
$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 ($referencePath in $expectedReferenceHashes.Keys) {
$actualHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $referencePath).Hash
@@ -656,8 +652,9 @@ user separately authorizes execution.
This approved draft is materialized under `phases/linear-static-mitc4-shell/`.
Every Step is zero-based, kebab-case and closes RED/GREEN/VERIFY before the
Executor advances it. TASK-14/TASK-15 are declared-case sub-work inside Step 13's
single test-only reference module; TASK-16 is downstream Build/Test Executor evidence,
Executor advances it. TASK-14 is declared-case sub-work inside Step 13's single
test-only reference module; TASK-15 is non-reference coverage already owned by
Steps 1/7/11; TASK-16 is downstream Build/Test Executor evidence,
not an Implementation Agent phase Step. During materialization, the exact required-reading
paths, configure block, focused command and full VERIFY block shown here are copied
verbatim into every `stepN.md`; a materialized Step never refers back to this draft or
@@ -696,7 +693,7 @@ Step-specific path ledger copied into the corresponding materialized Step:
| 10 | Steps 5/9 paths; `include/fesa/results/result_recovery.hpp`; `src/fesa/results/result_recovery.cpp`; `tests/unit/results/result_recovery_test.cpp` |
| 11 | Steps 9/10 paths; `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` |
| 12 | Steps 7-11 paths; `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` |
| 13 | Steps 11/12 paths; candidate new `tests/reference/mitc4_reference_comparison.hpp`, `tests/reference/mitc4_reference_comparison.cpp`, `tests/reference/mitc4_reference_comparison_test.cpp`, `tests/reference/mitc4_reference_cases_test.cpp`; `tests/CMakeLists.txt`; the four exact read-only reference paths in Section 2 |
| 13 | Steps 11/12 paths; candidate new `tests/reference/mitc4_reference_comparison.hpp`, `tests/reference/mitc4_reference_comparison.cpp`, `tests/reference/mitc4_reference_comparison_test.cpp`, `tests/reference/mitc4_reference_cases_test.cpp`; `tests/CMakeLists.txt`; the two exact read-only S4 reference paths in Section 2 |
The configure command copied before each Step's RED build is:
@@ -880,20 +877,20 @@ ctest --test-dir .harness/build -C Debug --output-on-failure
### Step 13 — `shell-reference-comparison`
- Required reading: requirements 058-072, I/O Section 7, Reference Model contract,
both declared S4/S4R paths and hashes, and current B33 comparator only as reusable
the sole declared S4 paths and hashes, and current B33 comparator only as reusable
identity/report precedent.
- Scope ownership: this one test-only reference module owns TASK-13 comparator behavior
plus TASK-14/TASK-15 declared-case tests; it owns no solver production module.
plus TASK-14 declared-case tests; it owns no solver production module.
- Prerequisite: Step 12 `completed` and valid MITC4 HDF5 fixture.
- RED: add REF-001..006 plus E2E-S4-001/002 and E2E-S4R-001/002 before the comparator
- RED: add REF-001..006 plus E2E-S4-001/002 before the comparator
implementation; build the reference target and run
`ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference|Mitc4S4RReference" --output-on-failure`.
`ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference" --output-on-failure`.
Record the missing comparator/declared-case failure.
- GREEN: minimally add test-only comparator for exact shell CSV/HDF5 contract.
- If a declared case exposes a production defect outside this reference-test module,
stop the Step and route a focused correction to the owning prior module; do not patch
unrelated production layers inside this Step.
- VERIFY: focused comparator and both declared-case tests, then common full VERIFY.
- VERIFY: focused comparator and the declared S4 tests, then common full VERIFY.
- Prohibitions: no reference artifact writes/Abaqus run, no metadata/README gate, no UR blocking.
After explicit approval, planning may create only: