# Step 3: sets-and-section-properties ## Read First Read these files before editing: - `/AGENTS.md` - `/docs/ARCHITECTURE.md` - `/docs/ADR.md` - `/docs/io-definitions/abaqus-input-parser-io.md` - `/src/fesa/model/domain.hpp` - `/src/fesa/model/element.hpp` - `/src/fesa/model/property.hpp` - `/src/fesa/io/abaqus/input_parser.hpp` - `/src/fesa/io/abaqus/input_parser.cpp` Review completed parser tests and phase summaries first. ## Task Extend the model and parser only as needed to represent set membership and section-to-property assignment for V0 bar/truss models. Required behavior: - Parse `*NSET, NSET=` node membership rows. - Parse `*ELSET, ELSET=` element membership rows. - Parse one V0 section keyword that assigns a material name to an element set. Prefer the smallest section subset compatible with the current V0 element path. - Preserve deterministic member ordering as read, unless the I/O contract explicitly states otherwise. - Keep `Domain` as the owner of model definition data. Do not store equation ids on nodes or elements. ## Tests To Write First Add focused C++ tests before production code: - a model test for any new set/section semantic model API; - a parser test proving `*NSET`, `*ELSET`, and the selected section keyword map into the semantic model. Run targeted CTest and confirm the tests fail before implementation. ## Acceptance Criteria ```powershell ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R "(model_|abaqus_input_parser_)" python -m unittest discover -s scripts -p "test_*.py" python scripts/validate_workspace.py ``` ## Verification Procedure Update step 3 status with summary or a concrete error/blocked reason. ## Forbidden - Do not parse materials beyond names needed for section linkage. - Do not add loads, boundary conditions, or analysis steps. - Do not generate or modify reference artifacts.