feat(linear-static-3d-euler-beam): step 12 - inp-domain-mapping

This commit is contained in:
KOKO\Mimi
2026-08-09 16:15:31 +09:00
parent 8b7c6896d5
commit fc3a66d8da
6 changed files with 2843 additions and 0 deletions
@@ -238,3 +238,91 @@
- handoff: backend-free `KeywordParameter`, `DataLine`, `KeywordBlock`,
`ParsedInput`, and `AbaqusInputReader::read` with syntax/source provenance are
available to Step 12 semantic mapping.
## Step 12 — inp-domain-mapping
- task_id: `TASK-12`
- status: `completed`
- changed_files: `include/fesa/io/abaqus/domain_mapper.hpp`,
`src/fesa/io/abaqus/domain_mapper.cpp`,
`tests/unit/io/abaqus/domain_mapper_test.cpp`,
`src/fesa/CMakeLists.txt`, `tests/CMakeLists.txt`,
`docs/implementation-plans/linear-static-3d-euler-beam-implementation-report.md`,
`phases/linear-static-3d-euler-beam/index.json`,
`.superpowers/sdd/linear-static-3d-euler-beam/task-12-report.md`
- requirement_ids: `FESA-REQ-LS3DEB-001`, `FESA-REQ-LS3DEB-002`,
`FESA-REQ-LS3DEB-005` through `FESA-REQ-LS3DEB-020`,
`FESA-REQ-LS3DEB-034`, `FESA-REQ-LS3DEB-044`
- test_ids: `T12-MAP-001`, `T12-MAP-002`, `T12-MAP-003`,
`T12-MAP-004`, `T12-MAP-005`
| stage | exact command | exit_code | expected_or_observed_result | evidence_tail |
| --- | --- | ---: | --- | --- |
| RED | `cmake --build .harness/build --config Debug --target fesa_tests`; `ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure` | 1 | All five planned tests were registered before production and the implementation-owned mapper API was absent | MSVC C1083 reported missing `fesa/io/abaqus/domain_mapper.hpp`; CTest then found no runnable mapper tests because the executable did not build |
| GREEN-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | The mapper, five semantic tests, solver library, and unit executable compile and link | `domain_mapper.cpp` and `domain_mapper_test.cpp` built without a FESA warning under `/W4 /WX` |
| GREEN-test | `ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure` | 0 | Exact supported inventory, deterministic expansion, no-op policy, negative portfolio, and DLOAD exclusion pass | 5/5 exact `InpDomainMapping` tests passed |
| VERIFY-configure | `cmake -S . -B .harness/build -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"` | 0 | Approved MSVC x64 build tree regenerates with explicit dependencies | Windows SDK and oneMKL 2026.1 resolved; configure and generate completed |
| VERIFY-build | `cmake --build .harness/build --config Debug` | 0 | Full Debug build passes without a new FESA warning | `fesa_solver.lib` and `fesa_unit_tests.exe` built under the existing `/W4 /WX` policy |
| VERIFY-targeted | `ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure` | 0 | Focused Step 12 suite remains green after review corrections | 5/5 `InpDomainMapping` tests passed |
| VERIFY-discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | CTest discovers the accumulated suite and all five exact mapper tests | 19 tests discovered with all five planned `InpDomainMapping` names and feature/unit labels |
| VERIFY-full | `ctest --test-dir .harness/build -C Debug --output-on-failure` | 0 | Full accumulated C++ suite has zero failures | 19/19 tests passed |
| VERIFY-dependency-direction | Backend, upward-I/O, core-upward, distributed-load-object, unapproved-`nu`-gate, and exact-test-count scans over Step 12 files | 0 | Public dependencies and approved scope remain intact | backend leaks 0; upward dependencies 0; core upward dependencies 0; distributed-load objects 0; unapproved `nu` gates 0; mapper tests 5 |
| VERIFY-diff | `git diff --check` plus trailing-whitespace scan over the three new files | 0 | Tracked and untracked Step 12 files have no whitespace errors | Git reported informational LF-to-CRLF notices only; new-file trailing whitespace matches 0 |
| VERIFY-reference | `git diff --exit-code -- reference/`; `git status --short -- reference/` | 0 | Approved legacy reference artifacts remain read-only and unchanged | Reference diff exit 0 and reference status empty |
- contract_checks: the mapper consumes syntax-only `ParsedInput` and returns
one complete immutable `Domain` or a categorized diagnostic. It enforces the
monotonic top-level/part/assembly/step grammar, B33 only, identity instances
only, exact inclusive set generation, case-insensitive references, stable
declaration/instance-order internal IDs, and `SourceEntityId
{instance_name, source_label}`. Direct node labels, part and assembly sets,
ambiguous multi-instance labels/sets, and direct-versus-set constraint
overlap are resolved before Domain success.
- contract_checks: material and section mapping uses exact `E,nu`,
`G=E/(2*(1+nu))`, `A,I11,I12,I22,J`, exact `I12=0`,
`Iy=I11`, `Iz=I22`, and `n1 -> local y`. It requires positive
`E,G,A,I11,I22,J` without adding a `nu < 0.5` gate. Nonfinite material,
section, and guide data are model failures. Overflow-safe scaled norms apply
the exact length and guide-vector inequalities; equality fails, values above
pass, and valid finite geometry near `1e308` is accepted without a fallback
axis.
- contract_checks: model-level and step-level boundaries and sole-step CLOAD
targets are validated, conflicting expanded node/DOF prescriptions fail, the
exact four positive finite `*STATIC` fields are retained, and the sole
canonical result identity is `Step-1`, frame 0. The exact warning no-op
allowlist produces stable `ignored-input-keyword` diagnostics without
changing semantic objects. B31, transforms, nested/dependent assembly
semantics, second step, NLGEOM, unknown keywords, and `*DLOAD` fail; no
distributed-load Domain object, B31 alias, multi-step path, or transform
fallback exists.
- generated_evidence: `.harness/build/src/fesa/Debug/fesa_solver.lib`,
`.harness/build/tests/Debug/fesa_unit_tests.exe`
- reference_diff: unchanged; the legacy cantilever input maps successfully
while exact bytes and modification time remain unchanged, and
`git diff --exit-code -- reference/` exits 0
- handoff: `AbaqusDomainMapper::map(const ParsedInput&)`, complete immutable
Domain objects, stable expanded node/element/set identities, validated
material/section indices, and the sole `StaticStepDefinition` are available
to Step 13 `AnalysisModel`.
### Step 12 Review Corrections
- A duplicate-`*ELASTIC` regression test first failed because a second
consecutive elasticity record lost the owning-material state. Preserving the
immediate material eligibility produced the exact `duplicate-entity`
diagnostic and restored targeted 5/5.
- Ten monotonic-order regressions first failed at the accepted late-`*PART`
case. Explicit phase state now rejects late model data, assembly sets before
or followed by instances, element-before-node, incomplete block closure, and
pre-`*STATIC` or out-of-order history data with
`invalid-keyword-location`.
- Review edge tests then failed for valid `1e308` geometry and for nonfinite
elasticity being classified as input. Context-specific model parsing,
overflow-safe scaled geometry comparisons, active beam-section context,
exact GENERATE landing, direct/ambiguous target resolution, and exact
threshold cases were added. The corrected focused suite passes 5/5 and the
full accumulated suite passes 19/19.
- Focused re-review returned Critical 0 and Important 0. Its sole remaining
minor requested an explicit negative transverse-shear context assertion;
that table case was added and passes without a production change.