# Step 6: boundary-load-step-storage ## 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` - `/include/fesa/core/Domain.hpp` - `/include/fesa/core/ModelTypes.hpp` - `/tests/core/domain_storage_test.cpp` ## Task Add boundary condition, nodal load, and analysis step definition storage. Allowed files: - Create `/include/fesa/core/BoundaryCondition.hpp` - Create `/include/fesa/core/LoadDefinition.hpp` - Create `/include/fesa/core/StepDefinition.hpp` - Modify `/include/fesa/core/Domain.hpp` - Modify `/src/core/Domain.cpp` - Modify `/tests/core/domain_storage_test.cpp` Required behavior: - A boundary condition stores node id, constrained `Dof`, and prescribed value. - A nodal load stores node id, `Dof`, and value. - A linear static step definition stores step id, name, boundary condition indices or ids, and load indices or ids. - Adding BC/load for a missing node throws `std::invalid_argument`. - Duplicate step ids throw `std::invalid_argument`. - Stored BCs, loads, and steps are returned as const data. ## Tests To Write First Write failing tests before production changes: - Add and retrieve a boundary condition on an existing node. - Add and retrieve a nodal load on an existing node. - Missing-node BC/load throws. - Add a linear static step referencing stored BC/load entries. - Duplicate step id throws. Run targeted CTest and verify RED before implementation. ## 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 6 with `completed`, `error`, or `blocked`. ## Do Not - Do not apply boundary conditions to matrices. - Do not compute reactions. - Do not add solver state, displacements, equation ids, or sparse matrix behavior.