# Step 0: model-object-contract ## Read First Read these files before editing: - `/AGENTS.md` - `/docs/PLAN.md` - `/docs/PROGRESS.md` - `/docs/WORKNOTE.md` - `/docs/AGENT_RULES.md` - `/docs/PRD.md` - `/docs/ADR.md` - `/docs/ARCHITECTURE.md` - `/docs/implementation-plans/domain-model-foundation-implementation-plan.md` - `/include/fesa/core/Domain.hpp` ## Task Create `/docs/implementation-plans/analysis-model-objects-implementation-plan.md`. The document must define the model object layer that will be stored by `Domain`: - `Node` model object. - abstract `Element` base and MITC4 model object skeleton. - abstract `Material` base and linear elastic material model object. - shell property/section model object. - abstract `Load` base and nodal load model object. - abstract `BoundaryCondition` base and single-point constraint model object. - `Domain` RAII ownership of polymorphic model objects through `std::unique_ptr`. State explicitly that this phase does not implement MITC4 stiffness, material constitutive matrices, global force assembly, boundary-condition matrix application, equation numbering, solver vectors, HDF5 output, reference comparison, or reference-solver execution. Document how existing `*Definition` value objects remain compatible as input DTOs until parser/factory work replaces or maps them. ## Tests To Write First This is a documentation planning step. Do not write C++ production code in this step. ## Acceptance Criteria Run: ```powershell python -m unittest discover -s scripts -p "test_*.py" python scripts/validate_workspace.py ``` Update `/phases/analysis-model-objects/index.json` step 0 with `completed`, `error`, or `blocked`. ## Do Not - Do not change C++ code in this step. - Do not change MITC4 formulation, I/O contracts, reference artifacts, or tolerance policy.