feat(linear-static-3d-euler-beam): step 11 - inp-syntax-parser

This commit is contained in:
KOKO\Mimi
2026-08-09 15:19:29 +09:00
parent 3b56fc906b
commit b73f6cd823
8 changed files with 550 additions and 0 deletions
@@ -189,3 +189,52 @@
- handoff: backend-free `EntityIndex`, semantic model records,
`ModelDefinition`, and immutable `Domain::create`/const accessors are
available to Step 11 syntax parsing and Step 12 semantic mapping.
## Step 11 — inp-syntax-parser
- task_id: `TASK-11`
- status: `completed`
- changed_files: `include/fesa/io/abaqus/input_syntax.hpp`,
`include/fesa/io/abaqus/input_reader.hpp`,
`src/fesa/io/abaqus/input_reader.cpp`,
`tests/unit/io/abaqus/input_syntax_test.cpp`,
`tests/unit/io/abaqus/input_reader_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-11-report.md`
- requirement_ids: `FESA-REQ-LS3DEB-010`, `FESA-REQ-LS3DEB-034`,
`FESA-REQ-LS3DEB-040`
- test_ids: `T11-SYN-001`, `T11-SYN-002`, `T11-SYN-003`, `T11-SYN-004`
| 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 InpSyntax --output-on-failure` | 1 | Both planned test files are registered before production and fail for the missing reader API | MSVC C1083 for `fesa/io/abaqus/input_reader.hpp` in both new test translation units; CTest subsequently reported `No tests were found` because the executable could not build |
| GREEN-build | `cmake --build .harness/build --config Debug --target fesa_tests` | 0 | Minimal syntax records, binary reader, and four tests compile and link | `input_reader.cpp`, both parser test files, `fesa_solver.lib`, and `fesa_unit_tests.exe` built without a FESA warning under `/W4 /WX` |
| GREEN-test | `ctest --test-dir .harness/build -C Debug -R InpSyntax --output-on-failure` | 0 | All exact syntax parsing behaviors pass | 4/4 `InpSyntax` 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 | Visual Studio 18 2026/MSVC environment selected; configure and generate completed; oneMKL 2026.1 resolved |
| 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 `/W4 /WX` |
| VERIFY-targeted | `ctest --test-dir .harness/build -C Debug -R InpSyntax --output-on-failure` | 0 | Focused Step 11 suite remains green | 4/4 exact `InpSyntax` tests passed |
| VERIFY-discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | CTest discovers the accumulated suite and all four exact syntax tests | 14 tests discovered with all four `InpSyntax` 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 | 14/14 tests passed |
| VERIFY-dependency-direction | Backend, upward I/O, core-to-I/O, and semantic-policy scans over the Step 11 public/production files using `rg -n` fail-on-match wrappers | 0 | Public headers retain backend-free `core -> io/abaqus` direction and syntax parsing contains no Step 12 policy | backend leaks 0; upward I/O dependencies 0; core-to-I/O dependencies 0; semantic-policy matches 0; exactly four `InpSyntax` tests found |
| VERIFY-diff | `git diff --check` | 0 | Patch has no whitespace errors | Exit 0; only informational Git LF-to-CRLF working-copy notices were emitted |
| VERIFY-reference | `git diff --exit-code -- reference/`; `git status --short -- reference/` | 0 | Approved legacy reference artifacts remain unchanged | Diff exit 0 and reference status empty |
- contract_checks: `ParsedInput` records the absolute lexically normalized
source path and exact binary-byte FNV-1a identity formatted as
`fnv1a64:` plus 16 lowercase hexadecimal digits. Keyword and parameter names
alone become ASCII uppercase; parameter values, data label lexemes, empty
and trailing data fields, and each keyword `originalLine` preserve source
spelling. Comments and blanks remain excluded while physical 1-based file
line accounting is retained. Unreadable file, empty keyword, and orphan data
return categorized input diagnostics. No keyword allowlist, wrapper/nesting,
numeric conversion, B31/B33, or output-request decision exists in this Step.
The read-only legacy input parses as 30 keyword blocks with exact identity
`fnv1a64:04543464cc970405`, unchanged bytes, and unchanged modification time.
- generated_evidence: `.harness/build/src/fesa/Debug/fesa_solver.lib`,
`.harness/build/tests/Debug/fesa_unit_tests.exe`
- reference_diff: unchanged; `git diff --exit-code -- reference/` exit 0
- handoff: backend-free `KeywordParameter`, `DataLine`, `KeywordBlock`,
`ParsedInput`, and `AbaqusInputReader::read` with syntax/source provenance are
available to Step 12 semantic mapping.