# Step 2: domain-model ## Sprint Contract ### Objective Implement immutable-ish Domain entities for Phase 1 input data: nodes, elements, sets, materials, shell sections, loads, boundaries, and steps. ### Required Reading - /AGENTS.md - /PROGRESS.md - /PLAN.md - /docs/README.md - /docs/HARNESS_ENGINEERING.md - /docs/PRD.md - /docs/ARCHITECTURE.md - /docs/ADR.md - /docs/NUMERICAL_CONVENTIONS.md - /docs/ABAQUS_INPUT_SUBSET.md - /phases/1-linear-static-mitc4/step1.md ### Scope - Add Domain-level value objects and containers preserving input ids and labels. - Support Phase 1 shell elements as Abaqus `TYPE=S4` mapped to FESA MITC4. - Represent node sets, element sets, linear elastic materials, shell sections, fixed boundary conditions, nodal loads, and linear static steps. - Provide lookup APIs and duplicate-id diagnostics without storing equation ids in entities. ### Allowed Files - `include/**` - `src/**` - `tests/**` - `PLAN.md` - `PROGRESS.md` - `phases/1-linear-static-mitc4/index.json` ### Explicit Non-Goals - Do not parse Abaqus files in this step. - Do not create `AnalysisModel`, `AnalysisState`, or `DofManager`. - Do not add support for S4R, pressure loads, nonzero prescribed displacement, Part/Assembly/Instance, dynamics, nonlinear steps, or thermal coupling. ### Tests To Write First - Domain construction tests for nodes, elements, sets, materials, shell sections, loads, boundaries, and steps. - Duplicate id/name tests with diagnostics. - Lookup tests proving labels and ids are preserved. ### Reference Artifacts - None. ### Acceptance Commands ```bash python scripts/validate_workspace.py ``` ### Evaluator Checklist - Domain preserves model definition and is treated as immutable after construction. - Node and element objects do not own global equation numbers. - Phase 1 object set matches `docs/ABAQUS_INPUT_SUBSET.md`. - Tests cover duplicate and missing lookup behavior. ### Handoff Requirements - Record changed files and validation in `PROGRESS.md`. - Update future tasks in `PLAN.md` only if Domain scope changes. - Update the matching phase index entry: use `completed` with a one-line `summary`, or `blocked` with `blocked_reason`, or `error` with `error_message`. ## Verification 1. Run the acceptance command. 2. Inspect Domain APIs for architecture-boundary drift. ## Do Not - Do not make Domain depend on solver adapters, analysis strategies, or result writers.