# Step 6: analysis-model-dof-manager ## Sprint Contract ### Objective Implement `AnalysisModelBuilder` and `DofManager` for one active linear static step with six-DOF nodes, constrained/free mapping, equation numbering, sparse-pattern input, and full/reduced vector reconstruction. ### 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 - /phases/1-linear-static-mitc4/step5.md ### Scope - Build an `AnalysisModel` active view from validated `Domain`. - Assign six shell DOFs per active node in documented order. - Apply fixed boundary conditions by constrained DOF elimination. - Produce int64 equation numbers for free DOFs and mappings for constrained DOFs. - Provide reconstruction helpers between reduced vectors and full vectors. ### Allowed Files - `include/**` - `src/**` - `tests/**` - `PLAN.md` - `PROGRESS.md` - `phases/1-linear-static-mitc4/index.json` ### Explicit Non-Goals - Do not assemble element stiffness or loads. - Do not store equation ids on Node or Element objects. - Do not solve linear systems or write HDF5 results. ### Tests To Write First - DOF numbering tests for simple models with all six components. - Constrained/free partition tests for fixed boundary conditions. - Reduced/full reconstruction tests including constrained values set to zero for Phase 1. - Sparse-pattern input tests using active element connectivity without assembling values. ### Reference Artifacts - None. ### Acceptance Commands ```bash python scripts/validate_workspace.py ``` ### Evaluator Checklist - `DofManager` owns global equation numbering. - ids, sparse indices, and equations remain int64-based. - Fixed constraints are handled by elimination, not penalty. - Reconstruction supports later full-vector `RF` recovery. ### Handoff Requirements - Record DOF behavior, tests, and validation in `PROGRESS.md`. - Update `PLAN.md` only for future work or resolved blockers. - 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 tests for constrained/free and full/reduced mapping edge cases. ## Do Not - Do not make constrained DOF elimination depend on reduced-only reaction recovery.