# Sprint Contract: Dof Manager Reaction Foundation ## Objective Rebuild or verify the six-DOF `DofManager`, constrained/free mapping, equation numbering, sparse-pattern inputs, and full-vector reconstruction needed for reaction recovery. ## Required Reading - /AGENTS.md - /docs/ARCHITECTURE.md - /docs/ADR.md - /docs/NUMERICAL_CONVENTIONS.md - /docs/RESULTS_SCHEMA.md ## Scope - Manage active six-DOF shell nodes. - Apply fixed constraints by constrained DOF elimination. - Own equation numbering and sparse connectivity inputs. - Reconstruct full vectors in original global DOF order. - Provide data needed for `RF = K_full * U_full - F_full`. ## Allowed Files - `include/` - `src/` - `tests/` - `PLAN.md` - `PROGRESS.md` ## Explicit Non-Goals - Do not assemble MITC4 stiffness. - Do not store equation ids in `Node` or `Element`. - Do not compute `RF` from reduced vectors only. ## Tests To Write First - DOF activation and Abaqus component order. - Constrained/free partition tests. - Equation numbering stability with noncontiguous node ids. - Full/reduced vector reconstruction tests. - Sparse-pattern connectivity input tests. - Full-vector reaction formula unit test with a small known matrix. ## Reference Artifacts - None. ## Acceptance Commands ```bash python scripts/validate_workspace.py ``` ## Evaluator Checklist - `DofManager` owns all equation numbering. - Full-space order is deterministic and matches `UX,UY,UZ,RX,RY,RZ`. - Reaction foundation preserves constrained DOF information. ## Handoff Requirements - Record DOF and reaction foundation status in `PROGRESS.md`. ## Do Not - Do not bypass `DofManager` from elements or analysis code.