# Step 12: assembly-reaction-recovery ## Sprint Contract ### Objective Implement assembly of element stiffness/load contributions into full and reduced system data while preserving full-space data for reactions. ### Required Reading - /AGENTS.md - /PROGRESS.md - /PLAN.md - /docs/README.md - /docs/HARNESS_ENGINEERING.md - /docs/ARCHITECTURE.md - /docs/ADR.md - /docs/NUMERICAL_CONVENTIONS.md - /docs/RESULTS_SCHEMA.md - /phases/1-linear-static-mitc4/step6.md - /phases/1-linear-static-mitc4/step7.md - /phases/1-linear-static-mitc4/step11.md ### Scope - Assemble global stiffness and load data from active elements and nodal loads. - Create reduced free-DOF systems using `DofManager` mappings. - Preserve or reconstruct full-space `K_full`, `F_full`, and `U_full` data needed for `RF = K_full * U_full - F_full`. - Add assembly diagnostics for missing contributions and singular-prone untouched DOFs where detectable. ### Allowed Files - `include/**` - `src/**` - `tests/**` - `PLAN.md` - `PROGRESS.md` - `phases/1-linear-static-mitc4/index.json` ### Explicit Non-Goals - Do not implement the full `LinearStaticAnalysis` orchestration here. - Do not compute reactions from reduced quantities only. - Do not add pressure loads, nonzero prescribed displacement, or nonlinear residual assembly. ### Tests To Write First - Assembly tests for simple element/load contributions into full and reduced matrices/vectors. - Constrained elimination tests using known DOF mappings. - Full-vector reaction recovery tests using `RF = K_full * U_full - F_full`. - Missing contribution or untouched free DOF diagnostic tests. ### Reference Artifacts - None required. RF reference CSV is not available; use internal equilibrium/reaction tests for this step. ### Acceptance Commands ```bash python scripts/validate_workspace.py ``` ### Evaluator Checklist - Full-space reaction data is preserved. - Reduced system assembly matches constrained/free DOF mapping. - Reaction tests use full vectors and the documented sign convention. - Unsupported loads and nonlinear behavior are not introduced. ### Handoff Requirements - Record assembly and RF recovery behavior in `PROGRESS.md`. - Update `PLAN.md` if R-010 remains unresolved or becomes resolved. - 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 reaction tests for full-vector recovery. ## Do Not - Do not allow reduced-system convenience to overwrite the documented RF convention.