# Step 1: property-base-interface ## Read First Read these files before editing: - `/AGENTS.md` - `/docs/AGENT_RULES.md` - `/docs/implementation-plans/property-model-foundation-implementation-plan.md` - `/include/fesa/core/ModelTypes.hpp` - `/include/fesa/property/ShellProperty.hpp` - `/tests/property/shell_property_test.cpp` - `/CMakeLists.txt` ## Task Add the runtime property base interface. Required API: - File: `/include/fesa/property/Property.hpp` - Namespace: `fesa::property` - `enum class PropertyKind { Shell };` - `class Property` - virtual destructor; - `virtual PropertyId id() const noexcept = 0;` - `virtual PropertyKind kind() const noexcept = 0;` Rules: - Use `fesa::core::PropertyId`. - Do not add section stiffness or material behavior. - Keep this header independent from HDF5, MKL, TBB, and parser headers. ## Tests To Write First - Add `/tests/property/property_base_test.cpp`. - Test that a small derived class can be used through `const Property&`. - Test virtual deletion through `std::unique_ptr`. ## 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 implementation and confirm the expected compile failure. 2. Keep all code C++17/MSVC-compatible. 3. Update `phases/property-model-foundation/index.json` for this step result.