# Sprint Contract: IO Parser Extraction ## Objective Move the Abaqus Phase 1 input parser into the `IO` module while preserving the documented strict parser subset and unsupported-feature diagnostics. ## Required Reading - /AGENTS.md - /PROGRESS.md - /PLAN.md - /docs/README.md - /docs/HARNESS_ENGINEERING.md - /docs/ARCHITECTURE.md - /docs/ADR.md - /docs/ABAQUS_INPUT_SUBSET.md - /docs/VERIFICATION_PLAN.md - /phases/1-structure-alignment-refactor/step0-architecture-map.md - /phases/1-structure-alignment-refactor/step2.md ## Scope - Extract `KeywordLine`, `ParseResult`, `AbaqusInputParser`, and parser-only helpers into `IO`. - Keep parser output in `Domain`. - Preserve strict rejection for `S4R`, `Part/Assembly/Instance`, `*Include`, `NLGEOM=YES`, nonzero prescribed displacement, and unsupported keyword parameters. - Keep normalized reference behavior for `references/quad_02_phase1.inp`. ## Allowed Files - `include/fesa/fesa.hpp` - `include/fesa/IO/` - `src/IO/` - `include/fesa/Core/` - `src/Core/` - `tests/` - `CMakeLists.txt` - `phases/1-structure-alignment-refactor/index.json` - `PLAN.md` - `PROGRESS.md` ## Explicit Non-Goals - Do not add new Abaqus keyword support. - Do not accept original `references/quad_02.inp` as a Phase 1 parser input. - Do not change `docs/ABAQUS_INPUT_SUBSET.md` unless a purely clarifying note is required. - Do not move results or reference comparator code in this step. ## Tests To Write First - Add or update an include/link test for `fesa/IO` parser headers. - Preserve parser acceptance and rejection tests as characterization tests. - Ensure original `quad_02.inp` unsupported provenance remains rejected where tested. ## Reference Artifacts - `references/quad_02.inp` - `references/quad_02_phase1.inp` Do not edit these files. ## Acceptance Commands ```bash python scripts/validate_workspace.py ``` ## Evaluator Checklist - Parser code lives in `IO` and does not own analysis or assembly behavior. - Parser subset discipline is unchanged. - Diagnostics still include enough source context for malformed input. - `Domain` remains the parser output boundary. - Stored reference compatibility notes remain true. ## Handoff Requirements - Update this step status in `phases/1-structure-alignment-refactor/index.json`. - Record moved parser files and any unsupported-feature behavior verified. ## Do Not - Do not normalize reference files inside parser code. - Do not silently broaden parser compatibility while refactoring.