# Step 4: material-base-interface ## Read First Read these files before editing: - `/AGENTS.md` - `/docs/AGENT_RULES.md` - `/docs/ARCHITECTURE.md` - `/docs/implementation-plans/analysis-model-objects-implementation-plan.md` - `/include/fesa/core/MaterialDefinition.hpp` ## Task Add material model base and linear elastic material model object. Allowed files: - Create `/include/fesa/material/Material.hpp` - Create `/include/fesa/material/LinearElasticMaterial.hpp` - Create `/src/material/LinearElasticMaterial.cpp` - Create `/tests/material/material_base_test.cpp` - Modify `/CMakeLists.txt` Required behavior: - `Material` has virtual destructor and `MaterialId id() const noexcept`. - `LinearElasticMaterial` derives from `Material`. - Stores Young's modulus and Poisson ratio. - No constitutive matrix or stress update in this phase. ## Tests To Write First Write `/tests/material/material_base_test.cpp` before production changes: - Access `LinearElasticMaterial` through `const Material&`. - Verify id, E, and nu. - Verify deletion through `std::unique_ptr`. Run targeted build and confirm RED. ## Acceptance Criteria Run: ```powershell python scripts/validate_workspace.py ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R model-object ``` Update step 4 status. ## Do Not - Do not implement constitutive matrices, stress updates, or tangent stiffness.