# Sprint Contract: Results Reference Extraction ## Objective Move the in-memory result model, Phase 1 results writer, displacement CSV loader, and reference comparator into `Results` while preserving the documented step/frame/field schema. ## Required Reading - /AGENTS.md - /PROGRESS.md - /PLAN.md - /docs/README.md - /docs/HARNESS_ENGINEERING.md - /docs/ARCHITECTURE.md - /docs/ADR.md - /docs/RESULTS_SCHEMA.md - /docs/VERIFICATION_PLAN.md - /docs/NUMERICAL_CONVENTIONS.md - /phases/1-structure-alignment-refactor/step0-architecture-map.md - /phases/1-structure-alignment-refactor/step2.md ## Scope - Extract `FieldOutput`, `ResultFrame`, `ResultStep`, `ResultFile`, `InMemoryResultsWriter`, displacement CSV tables, comparison options, and comparison results. - Preserve mandatory Phase 1 `U` and `RF` field metadata. - Preserve CSV mapping from Abaqus `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`. - Keep HDF5 as a future writer adapter; do not add the dependency yet. ## Allowed Files - `include/fesa/fesa.hpp` - `include/fesa/Results/` - `src/Results/` - `include/fesa/Core/` - `include/fesa/IO/` - `tests/` - `CMakeLists.txt` - `phases/1-structure-alignment-refactor/index.json` - `PLAN.md` - `PROGRESS.md` ## Explicit Non-Goals - Do not add HDF5 output implementation. - Do not change result labels, field positions, basis, or comparison tolerances. - Do not add reaction CSV parsing in this step. - Do not change analysis execution. ## Tests To Write First - Add or update include/link tests for `fesa/Results` headers. - Preserve existing result schema, CSV loader, comparison, and `quad_02_phase1` displacement regression tests as characterization tests. ## Reference Artifacts - `references/quad_02_phase1.inp` - `references/quad_02_displacements.csv` Do not edit these files. ## Acceptance Commands ```bash python scripts/validate_workspace.py ``` ## Evaluator Checklist - Result model follows `docs/RESULTS_SCHEMA.md`. - `U` and `RF` metadata are unchanged. - CSV comparison still matches by node id, not row order alone. - `quad_02_phase1` stored displacement regression still passes. - HDF5 APIs do not leak into solver core. ## Handoff Requirements - Update this step status in `phases/1-structure-alignment-refactor/index.json`. - Record moved result/comparator files and any remaining result symbols still left in `fesa.hpp`. ## Do Not - Do not relax reference tolerances to make relocation pass. - Do not treat missing Abaqus reaction CSV as solved.