# Step 2: shell-property-polymorphism ## Read First Read these files before editing: - `/AGENTS.md` - `/docs/AGENT_RULES.md` - `/docs/implementation-plans/property-model-foundation-implementation-plan.md` - `/include/fesa/property/Property.hpp` - `/include/fesa/property/ShellProperty.hpp` - `/src/property/ShellProperty.cpp` - `/tests/property/shell_property_test.cpp` ## Task Make `ShellProperty` derive from `Property`. Required behavior: - `ShellProperty::id()` overrides `Property::id()`. - `ShellProperty::kind()` returns `PropertyKind::Shell`. - `ShellProperty` keeps `materialId()` and `thickness()` accessors. - Constructor still rejects `thickness <= 0.0`. Rules: - Do not rename `ShellProperty` in this phase. - Do not add shell section stiffness. - Do not add material lookup inside `ShellProperty`; Domain validates cross references. ## Tests To Write First - Extend `/tests/property/shell_property_test.cpp`. - Test `const Property& base = shell_property` exposes id and kind. - Preserve positive-thickness validation tests. ## Acceptance Criteria ```powershell ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R model-object python scripts/validate_workspace.py ``` ## Verification Notes 1. Run targeted CTest before production edits and confirm failure. 2. Keep `ShellProperty` free of solver state. 3. Update `phases/property-model-foundation/index.json` for this step result.