# Step 2: core-id-types ## Read First Read these files before editing: - `/AGENTS.md` - `/docs/AGENT_RULES.md` - `/docs/ADR.md` - `/docs/ARCHITECTURE.md` - `/docs/implementation-plans/domain-model-foundation-implementation-plan.md` - `/CMakeLists.txt` - `/tests/core/domain_bootstrap_test.cpp` ## Task Introduce core id aliases and DOF ordering constants. Allowed files: - Create `/include/fesa/core/ModelTypes.hpp` - Modify `/tests/core/domain_bootstrap_test.cpp` or create `/tests/core/model_types_test.cpp` - Modify `/CMakeLists.txt` only to register the new test file if a separate test executable is created Required API: ```cpp namespace fesa::core { using Id = std::int64_t; using NodeId = Id; using ElementId = Id; using MaterialId = Id; using PropertyId = Id; using StepId = Id; enum class Dof : std::uint8_t { U1 = 0, U2 = 1, U3 = 2, UR1 = 3, UR2 = 4, UR3 = 5 }; constexpr std::size_t kDofPerNode = 6; } ``` ## Tests To Write First Write a failing C++ test that includes `fesa/core/ModelTypes.hpp` before creating the header. The test must verify: - `sizeof(fesa::core::Id) == 8` - `kDofPerNode == 6` - `Dof::U1` through `Dof::UR3` have ordinal values 0 through 5 Run the targeted CTest and verify it fails because the header is missing. Then implement the header. ## Acceptance Criteria Run: ```powershell cmake --build build/msvc-debug --config Debug ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R domain python scripts/validate_workspace.py ``` Update `/phases/domain-model-foundation/index.json` step 2 with `completed`, `error`, or `blocked`. ## Do Not - Do not add model storage in this step. - Do not add equation numbering or solver state.