diff --git a/PLAN.md b/PLAN.md index 23844e5..496e5fd 100644 --- a/PLAN.md +++ b/PLAN.md @@ -13,7 +13,7 @@ Every new agent session must read this file together with `PROGRESS.md` before p - If an item becomes obsolete, move it to `PROGRESS.md` with a short reason instead of silently deleting it. ## Current Objective -Prepare FESA for Phase 1 implementation planning: a reference-verified linear static MITC4 shell solver using the documented architecture, numerical conventions, Abaqus input subset, HDF5 result schema, and stored reference artifacts. +Execute the generated Phase 1 harness plan for a reference-verified linear static MITC4 shell solver using the documented architecture, numerical conventions, Abaqus input subset, HDF5 result schema, and stored reference artifacts. ## Required Reading For New Agents 1. `AGENTS.md` @@ -29,6 +29,14 @@ Prepare FESA for Phase 1 implementation planning: a reference-verified linear st 11. `docs/VERIFICATION_PLAN.md` 12. `docs/RESULTS_SCHEMA.md` 13. `docs/MITC4_FORMULATION.md` +14. `phases/index.json` +15. `phases/1-linear-static-mitc4/index.json` + +## Active Phase Files +- Phase directory: `phases/1-linear-static-mitc4` +- Execute with: `python scripts/execute.py 1-linear-static-mitc4` +- Step numbering is zero-based for the harness: `step0.md` corresponds to milestone P1-01, and `step15.md` corresponds to milestone P1-16. +- Every step file contains a sprint contract with objective, scope, allowed files, tests-first plan, reference-artifact policy, evaluator checklist, acceptance command, and handoff requirements. ## Phase 1 Readiness Tasks | ID | Status | Owner | Task | Source | @@ -79,7 +87,6 @@ All milestones are intended to become one or more self-contained sprint contract | ID | Status | Owner | Objective | Depends On | Acceptance Focus | |---|---|---|---|---|---| -| P1-00 | pending | harness sprint planner | Convert this PLAN into executable phase files with sprint contracts. | R-004..R-011 status reviewed | Phase files contain objective, scope, allowed files, tests-first plan, reference artifacts, evaluator checklist | | P1-01 | pending | build/system generator | Establish C++ project skeleton, build system, test framework, and validation script integration. | R-008 | `python scripts/validate_workspace.py` runs build/test checks | | P1-02 | pending | core generator | Add core numeric/id types, DOF enum, diagnostics primitives, and logging/error result conventions. | P1-01 | Tests for int64 aliases, DOF mapping, diagnostic payloads | | P1-03 | pending | domain generator | Implement immutable-ish `Domain` entities: nodes, elements, sets, materials, shell properties, loads, boundaries, steps. | P1-02 | Tests for construction, lookup, duplicate ids, label preservation | diff --git a/PROGRESS.md b/PROGRESS.md index cf0b92e..edd3804 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -17,6 +17,47 @@ The project is in documentation and readiness planning. Solver implementation ha ## Completed Work +### 2026-05-01 - P1-00 Phase 1 sprint contracts generated +Author: Codex + +Changed files: +- `phases/index.json` +- `phases/1-linear-static-mitc4/index.json` +- `phases/1-linear-static-mitc4/step0.md` +- `phases/1-linear-static-mitc4/step1.md` +- `phases/1-linear-static-mitc4/step2.md` +- `phases/1-linear-static-mitc4/step3.md` +- `phases/1-linear-static-mitc4/step4.md` +- `phases/1-linear-static-mitc4/step5.md` +- `phases/1-linear-static-mitc4/step6.md` +- `phases/1-linear-static-mitc4/step7.md` +- `phases/1-linear-static-mitc4/step8.md` +- `phases/1-linear-static-mitc4/step9.md` +- `phases/1-linear-static-mitc4/step10.md` +- `phases/1-linear-static-mitc4/step11.md` +- `phases/1-linear-static-mitc4/step12.md` +- `phases/1-linear-static-mitc4/step13.md` +- `phases/1-linear-static-mitc4/step14.md` +- `phases/1-linear-static-mitc4/step15.md` +- `PLAN.md` +- `PROGRESS.md` + +Summary: +- Converted Phase 1 milestones P1-01 through P1-16 into executable Harness step files under `phases/1-linear-static-mitc4`. +- Added top-level and phase-level JSON indices using the zero-based `scripts/execute.py` convention. +- Embedded sprint contracts in every step with objective, required reading, scope, allowed files, explicit non-goals, tests to write first, reference-artifact policy, acceptance command, evaluator checklist, and handoff requirements. +- Kept readiness blockers visible, especially MITC4 formulation decisions, build-system selection, reference comparator tolerance, missing reaction CSV, and the need for Phase 1-compatible `TYPE=S4` references. +- Updated `PLAN.md` so new agents can find and execute the active phase files. + +Verification: +- Parsed `phases/index.json` and `phases/1-linear-static-mitc4/index.json` with PowerShell `ConvertFrom-Json`. +- Verified the phase registry points to `1-linear-static-mitc4`, all 16 steps are `pending`, step names are kebab-case, and every `stepN.md` file exists. +- Verified every step file includes the required sprint contract sections from `docs/HARNESS_ENGINEERING.md`. +- `python scripts/validate_workspace.py` exited successfully, but still reported no configured validation commands. + +Follow-up: +- Begin Phase 1 execution with `python scripts/execute.py 1-linear-static-mitc4` after confirming readiness blockers are accepted, resolved, or intentionally deferred. + ### 2026-05-01 - Phase 1 implementation master plan added Author: Codex diff --git a/phases/1-linear-static-mitc4/index.json b/phases/1-linear-static-mitc4/index.json new file mode 100644 index 0000000..0ec5735 --- /dev/null +++ b/phases/1-linear-static-mitc4/index.json @@ -0,0 +1,86 @@ +{ + "project": "FESA", + "phase": "1-linear-static-mitc4", + "steps": [ + { + "step": 0, + "name": "build-test-harness", + "status": "pending" + }, + { + "step": 1, + "name": "core-types-diagnostics", + "status": "pending" + }, + { + "step": 2, + "name": "domain-model", + "status": "pending" + }, + { + "step": 3, + "name": "parser-foundation", + "status": "pending" + }, + { + "step": 4, + "name": "parser-phase1-subset", + "status": "pending" + }, + { + "step": 5, + "name": "domain-validation-diagnostics", + "status": "pending" + }, + { + "step": 6, + "name": "analysis-model-dof-manager", + "status": "pending" + }, + { + "step": 7, + "name": "math-solver-adapters", + "status": "pending" + }, + { + "step": 8, + "name": "results-writer-minimal", + "status": "pending" + }, + { + "step": 9, + "name": "reference-displacement-comparator", + "status": "pending" + }, + { + "step": 10, + "name": "mitc4-formulation-closure", + "status": "pending" + }, + { + "step": 11, + "name": "mitc4-element-baseline", + "status": "pending" + }, + { + "step": 12, + "name": "assembly-reaction-recovery", + "status": "pending" + }, + { + "step": 13, + "name": "linear-static-analysis-path", + "status": "pending" + }, + { + "step": 14, + "name": "stored-reference-regression", + "status": "pending" + }, + { + "step": 15, + "name": "phase1-evaluator-closeout", + "status": "pending" + } + ] +} diff --git a/phases/1-linear-static-mitc4/step0.md b/phases/1-linear-static-mitc4/step0.md new file mode 100644 index 0000000..0565208 --- /dev/null +++ b/phases/1-linear-static-mitc4/step0.md @@ -0,0 +1,73 @@ +# Step 0: build-test-harness + +## Sprint Contract + +### Objective +Establish the C++ project skeleton, build system, test framework, and validation script integration required before solver code begins. + +### 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/VERIFICATION_PLAN.md + +### Scope +- Choose the Phase 1 build/test path. CMake is recommended unless project constraints require another choice. +- Add a minimal C++17 project skeleton with one smoke-test target. +- Wire `scripts/validate_workspace.py` to run real configured checks. +- Document the build-system decision in ADR if it changes or becomes explicit. + +### Allowed Files +- `CMakeLists.txt` or the selected build-system files +- `src/**` +- `include/**` +- `tests/**` +- `scripts/validate_workspace.py` +- `README.md` +- `docs/ADR.md` +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not implement solver, parser, MITC4, results, or reference-comparison behavior. +- Do not introduce MKL, TBB, or HDF5 APIs into solver core during this setup step. +- Do not mark readiness blockers R-004 through R-011 as solved unless this step actually resolves them. + +### Tests To Write First +- A minimal C++ smoke test that fails before the test harness is connected and passes after the harness is wired. +- A validation-script test or self-check proving `python scripts/validate_workspace.py` reports the configured build/test command status. + +### Reference Artifacts +- None. This step does not use `references/*.inp` or `references/*_displacements.csv`. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- The project builds with C++17 or newer. +- The chosen test framework runs through the validation script. +- `scripts/validate_workspace.py` no longer reports that no checks are configured. +- The build-system decision is documented if new or changed. +- No solver behavior was implemented. + +### Handoff Requirements +- Update `PROGRESS.md` with changed files, validation output, and any build-system caveats. +- Update `PLAN.md` only for changed 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. Confirm the smoke test is executed by the validation script. +3. Inspect the diff for accidental solver behavior or dependency leakage. + +## Do Not +- Do not expand Phase 1 scope to make a build demo more impressive. +- Do not commit generated build artifacts. diff --git a/phases/1-linear-static-mitc4/step1.md b/phases/1-linear-static-mitc4/step1.md new file mode 100644 index 0000000..ee644bb --- /dev/null +++ b/phases/1-linear-static-mitc4/step1.md @@ -0,0 +1,68 @@ +# Step 1: core-types-diagnostics + +## Sprint Contract + +### Objective +Add core numeric/id types, shell DOF enumeration, diagnostics primitives, and error-result conventions used by later layers. + +### 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 +- /phases/1-linear-static-mitc4/step0.md + +### Scope +- Define int64-based ids, indices, and equation-number types. +- Define `double` as the default scalar precision. +- Define the six shell DOFs in the documented order: `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. +- Add diagnostics/result primitives with enough context for parser, validation, and solver errors. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `docs/ADR.md` +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not add Domain, parser, DofManager, sparse matrix, or MITC4 element behavior. +- Do not use 32-bit ids, equation numbers, or sparse indices. +- Do not encode global equation ids inside node or element data structures. + +### Tests To Write First +- Unit tests for id/index/equation type sizes and signedness expectations. +- Unit tests for DOF ordering, component labels, and stable integer mapping. +- Unit tests for diagnostic severity, code, message, and source-location payloads. + +### Reference Artifacts +- None. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Core types are reusable without depending on parser, analysis, MKL, TBB, or HDF5. +- DOF labels and order match `docs/NUMERICAL_CONVENTIONS.md`. +- Diagnostics can carry actionable context for unsupported input and singular systems. +- Tests were added before behavior and pass through validation. + +### Handoff Requirements +- Record completed work and validation in `PROGRESS.md`. +- Keep `PLAN.md` focused on future blockers only. +- 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 explicit int64 and DOF-order assertions. + +## Do Not +- Do not infer future element or solver APIs beyond what this contract requires. diff --git a/phases/1-linear-static-mitc4/step10.md b/phases/1-linear-static-mitc4/step10.md new file mode 100644 index 0000000..8fcd932 --- /dev/null +++ b/phases/1-linear-static-mitc4/step10.md @@ -0,0 +1,69 @@ +# Step 10: mitc4-formulation-closure + +## Sprint Contract + +### Objective +Close the MITC4 formulation decisions required before element implementation: transverse shear tying, local basis, integration ordering, drilling stiffness default, and Phase 1 output scope. + +### Required Reading +- /AGENTS.md +- /PROGRESS.md +- /PLAN.md +- /docs/README.md +- /docs/HARNESS_ENGINEERING.md +- /docs/PRD.md +- /docs/NUMERICAL_CONVENTIONS.md +- /docs/RESULTS_SCHEMA.md +- /docs/MITC4_FORMULATION.md +- /docs/VERIFICATION_PLAN.md + +### Scope +- Update `docs/MITC4_FORMULATION.md` with the exact baseline formulas and implementation checklist needed for coding. +- Resolve or explicitly defer R-004, R-005, R-006, and R-007. +- Record literature/source basis and benchmark expectations without requiring local Abaqus execution. +- Update ADR or PLAN only when a durable design decision changes. + +### Allowed Files +- `docs/MITC4_FORMULATION.md` +- `docs/RESULTS_SCHEMA.md` +- `docs/VERIFICATION_PLAN.md` +- `docs/ADR.md` +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not implement C++ MITC4 code in this step. +- Do not invent formulas from memory without documenting the source or derivation. +- Do not expand Phase 1 outputs beyond resolved R-007. + +### Tests To Write First +- No C++ tests are required unless executable formulation checks already exist. +- Add documentation checklist items or review notes that can be evaluated before Step 11. + +### Reference Artifacts +- None required. Existing `references/quad_01*` may inform future benchmark planning but is not a Phase 1 MITC4 acceptance case. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Transverse shear tying equations are explicit enough to implement. +- Local shell basis construction is explicit for flat and non-flat quads. +- Drilling stiffness default scale and parameter name are finalized. +- Integration ordering and output scope are finalized or explicitly deferred with downstream blockers. +- Step 11 remains blocked if any required formulation item is unresolved. + +### Handoff Requirements +- Record closed decisions and remaining risks in `PROGRESS.md`. +- Remove or update resolved readiness tasks in `PLAN.md`. +- 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. Review docs for implementable formulas and unresolved placeholders. + +## Do Not +- Do not let implementation begin on undocumented MITC4 formulas. diff --git a/phases/1-linear-static-mitc4/step11.md b/phases/1-linear-static-mitc4/step11.md new file mode 100644 index 0000000..5e5c22f --- /dev/null +++ b/phases/1-linear-static-mitc4/step11.md @@ -0,0 +1,71 @@ +# Step 11: mitc4-element-baseline + +## Sprint Contract + +### Objective +Implement the baseline MITC4 element utilities and stiffness path after the formulation gate is closed. + +### 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 +- /docs/MITC4_FORMULATION.md +- /phases/1-linear-static-mitc4/step10.md + +### Scope +- Implement shape functions, derivatives, local basis utilities, MITC shear tying per the finalized formulation, stiffness calculation, and drilling stiffness parameter path. +- Keep the element behind runtime-polymorphic element interfaces. +- Produce a 24x24 element stiffness for four-node shell elements with six DOFs per node. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `docs/MITC4_FORMULATION.md` only for errata discovered during implementation +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not implement S4R, reduced integration, hourglass control, nonlinear kinematics, pressure loads, composites, thermal coupling, or mesh quality checks. +- Do not implement formulas that are still placeholders in `docs/MITC4_FORMULATION.md`. +- Do not optimize element kernels before baseline benchmark behavior is established. + +### Tests To Write First +- Shape function partition and nodal interpolation tests. +- Derivative and Jacobian/local basis tests. +- 24x24 dimension and symmetry tests. +- Rigid body or patch-style checks appropriate to the documented formulation. +- Drilling stiffness sensitivity tests. + +### Reference Artifacts +- None required for this unit-level step. Stored-reference regression is Step 14. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Step 10 formulation decisions are closed before code is added. +- Element interface uses runtime polymorphism as documented. +- Stiffness output dimension, DOF order, symmetry, and drilling behavior are tested. +- No S4R or nonlinear behavior was introduced. + +### Handoff Requirements +- Record implemented formulation surface and validation in `PROGRESS.md`. +- Update `PLAN.md` if benchmark or formulation risks remain. +- 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 against the finalized MITC4 formulation checklist. + +## Do Not +- Do not hide formulation uncertainty in comments or TODOs inside executable code. diff --git a/phases/1-linear-static-mitc4/step12.md b/phases/1-linear-static-mitc4/step12.md new file mode 100644 index 0000000..051f1b2 --- /dev/null +++ b/phases/1-linear-static-mitc4/step12.md @@ -0,0 +1,71 @@ +# 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. diff --git a/phases/1-linear-static-mitc4/step13.md b/phases/1-linear-static-mitc4/step13.md new file mode 100644 index 0000000..b374fcf --- /dev/null +++ b/phases/1-linear-static-mitc4/step13.md @@ -0,0 +1,71 @@ +# Step 13: linear-static-analysis-path + +## Sprint Contract + +### Objective +Implement the `LinearStaticAnalysis` Template Method path from parsed Domain to solved state and written `U`/`RF` results. + +### 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 +- /docs/RESULTS_SCHEMA.md +- /docs/VERIFICATION_PLAN.md +- /phases/1-linear-static-mitc4/step8.md +- /phases/1-linear-static-mitc4/step12.md + +### Scope +- Implement the linear static analysis strategy using the documented common flow: validate, build model, number DOFs, assemble, constrain, solve, reconstruct, recover RF, update state, write results. +- Store mutable physical quantities and iteration/result state in `AnalysisState`. +- Route solving through the linear solver interface. +- Emit minimum Phase 1 result fields `U` and `RF`. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not implement nonlinear, dynamic, thermal, composite, or contact workflows. +- Do not bypass `DofManager`, assembler, solver interface, or result writer boundaries. +- Do not compare against stored Abaqus references in this step; that is Step 14. + +### Tests To Write First +- End-to-end small-model test using a deterministic element or minimal fixture where expected `U` and `RF` are known. +- Singular-system failure test through the analysis path. +- Result-emission test for `U` and `RF` fields and component order. + +### Reference Artifacts +- None required for this orchestration step. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Strategy + Template Method architecture is visible and not hardwired to only one future analysis type. +- `AnalysisState` owns mutable solve/result data. +- `RF` uses full-vector recovery. +- Results match the documented step/frame/field layout. + +### Handoff Requirements +- Record analysis behavior, tests, and validation in `PROGRESS.md`. +- Update `PLAN.md` if Phase 1 end-to-end risks remain. +- 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 the analysis path for architecture-boundary shortcuts. + +## Do Not +- Do not make the first end-to-end path depend on local Abaqus execution. diff --git a/phases/1-linear-static-mitc4/step14.md b/phases/1-linear-static-mitc4/step14.md new file mode 100644 index 0000000..d842fa5 --- /dev/null +++ b/phases/1-linear-static-mitc4/step14.md @@ -0,0 +1,74 @@ +# Step 14: stored-reference-regression + +## Sprint Contract + +### Objective +Add stored-reference regression coverage using accepted Phase 1-compatible cases and preserve `quad_01` as a compatibility/provenance reference. + +### Required Reading +- /AGENTS.md +- /PROGRESS.md +- /PLAN.md +- /docs/README.md +- /docs/HARNESS_ENGINEERING.md +- /docs/ABAQUS_INPUT_SUBSET.md +- /docs/VERIFICATION_PLAN.md +- /docs/RESULTS_SCHEMA.md +- /references/README.md +- /phases/1-linear-static-mitc4/step9.md +- /phases/1-linear-static-mitc4/step13.md + +### Scope +- Add automated regression tests comparing FESA `U` output to stored `*_displacements.csv` for Phase 1-compatible `TYPE=S4` linear static cases. +- Keep `references/quad_01.inp` documented as S4R/NLGEOM provenance and future compatibility target, not a passing Phase 1 parser case. +- Add or document reference-case requirements for single-element, multi-element, and curved-shell cases. +- Use internal equilibrium tests for RF unless `*_reactions.csv` artifacts are added. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `references/**` +- `docs/VERIFICATION_PLAN.md` +- `docs/ABAQUS_INPUT_SUBSET.md` only for reference compatibility notes +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not require Abaqus execution locally or in CI. +- Do not make `quad_01.inp` pass by adding S4R, Part/Assembly/Instance, or NLGEOM support. +- Do not accept missing reference comparisons silently. + +### Tests To Write First +- Regression test harness test that fails when a required displacement CSV is missing or malformed. +- At least one Phase 1-compatible displacement comparison test when a matching reference case exists. +- Negative test that `quad_01.inp` remains unsupported for Phase 1 parsing while its CSV can still validate comparator format. + +### Reference Artifacts +- Required solver regression: at least one Phase 1-compatible `TYPE=S4` `.inp` and matching `*_displacements.csv`. +- Format/provenance only: `references/quad_01.inp` and `references/quad_01_displacements.csv`. +- Optional RF artifact: `*_reactions.csv`; otherwise RF is checked by internal equilibrium/reaction tests. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- At least one accepted Phase 1 reference comparison runs if the artifact exists. +- Missing required reference artifacts produce a documented block or failing test, not a silent pass. +- `quad_01` remains out of Phase 1 parser support. +- Reference comparisons use documented columns, node-id matching, and tolerances. + +### Handoff Requirements +- Record reference cases, comparison results, and missing artifacts in `PROGRESS.md`. +- Update `PLAN.md` with remaining reference additions for Phase 1 completion or Phase 2. +- 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 regression logs or test output for actual CSV comparison. + +## Do Not +- Do not relax parser restrictions to make an existing reference input pass. diff --git a/phases/1-linear-static-mitc4/step15.md b/phases/1-linear-static-mitc4/step15.md new file mode 100644 index 0000000..79e8529 --- /dev/null +++ b/phases/1-linear-static-mitc4/step15.md @@ -0,0 +1,75 @@ +# Step 15: phase1-evaluator-closeout + +## Sprint Contract + +### Objective +Run the full Phase 1 evaluator pass, close documentation and handoff gaps, and record Phase 2 carryovers. + +### 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 +- /docs/ABAQUS_INPUT_SUBSET.md +- /docs/VERIFICATION_PLAN.md +- /docs/RESULTS_SCHEMA.md +- /docs/MITC4_FORMULATION.md +- /references/README.md +- /phases/1-linear-static-mitc4/index.json + +### Scope +- Evaluate all Phase 1 Definition of Done items from `PLAN.md` and `docs/PRD.md`. +- Run the full validation command set and inspect reference-comparison evidence. +- Produce a concise evaluator report in `PROGRESS.md` or a linked docs artifact. +- Move unresolved Phase 2 or deferred work into `PLAN.md`. + +### Allowed Files +- `docs/**` +- `tests/**` only for evaluator-owned missing validation metadata, not feature implementation +- `references/**` only for documentation or final accepted artifact notes +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not implement missing solver features in the evaluator step. +- Do not mark Phase 1 complete if validation, reference comparison, MITC4 formulation, RF recovery, or parser rejection evidence is missing. +- Do not hide remaining risks in prose without putting future tasks in `PLAN.md`. + +### Tests To Write First +- No new implementation tests are expected unless the evaluator identifies missing metadata tests that are needed to prove acceptance. + +### Reference Artifacts +- Required: all accepted Phase 1-compatible reference cases and their `*_displacements.csv` files. +- Optional: `*_reactions.csv`; otherwise evaluator must verify RF through internal equilibrium tests. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Phase 1 Definition of Done is checked item by item. +- Parser rejects unsupported Abaqus features with tests. +- MITC4 baseline tests and documented formulation agree. +- `U` reference comparison evidence exists for accepted cases. +- `RF` is recovered from full vectors and verified by available reference or equilibrium tests. +- `PLAN.md` and `PROGRESS.md` are current. + +### Handoff Requirements +- Record final verdict, validation output, reference evidence, and remaining risks in `PROGRESS.md`. +- Move future work, Phase 2 candidates, and deferred features into `PLAN.md`. +- Update the matching phase index entry: use `completed` with a one-line `summary`, or `blocked` with `blocked_reason`, or `error` with `error_message`; update the top-level phase status if execution is complete. + +## Verification +1. Run the acceptance command. +2. Perform the evaluator checklist against changed files and test evidence. +3. Confirm no phase step remains with stale status or missing handoff notes. + +## Do Not +- Do not use evaluator closeout as a place to sneak in broad implementation fixes. diff --git a/phases/1-linear-static-mitc4/step2.md b/phases/1-linear-static-mitc4/step2.md new file mode 100644 index 0000000..445bd16 --- /dev/null +++ b/phases/1-linear-static-mitc4/step2.md @@ -0,0 +1,69 @@ +# Step 2: domain-model + +## Sprint Contract + +### Objective +Implement immutable-ish Domain entities for Phase 1 input data: nodes, elements, sets, materials, shell sections, loads, boundaries, and steps. + +### 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 +- /docs/ABAQUS_INPUT_SUBSET.md +- /phases/1-linear-static-mitc4/step1.md + +### Scope +- Add Domain-level value objects and containers preserving input ids and labels. +- Support Phase 1 shell elements as Abaqus `TYPE=S4` mapped to FESA MITC4. +- Represent node sets, element sets, linear elastic materials, shell sections, fixed boundary conditions, nodal loads, and linear static steps. +- Provide lookup APIs and duplicate-id diagnostics without storing equation ids in entities. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not parse Abaqus files in this step. +- Do not create `AnalysisModel`, `AnalysisState`, or `DofManager`. +- Do not add support for S4R, pressure loads, nonzero prescribed displacement, Part/Assembly/Instance, dynamics, nonlinear steps, or thermal coupling. + +### Tests To Write First +- Domain construction tests for nodes, elements, sets, materials, shell sections, loads, boundaries, and steps. +- Duplicate id/name tests with diagnostics. +- Lookup tests proving labels and ids are preserved. + +### Reference Artifacts +- None. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Domain preserves model definition and is treated as immutable after construction. +- Node and element objects do not own global equation numbers. +- Phase 1 object set matches `docs/ABAQUS_INPUT_SUBSET.md`. +- Tests cover duplicate and missing lookup behavior. + +### Handoff Requirements +- Record changed files and validation in `PROGRESS.md`. +- Update future tasks in `PLAN.md` only if Domain scope changes. +- 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 Domain APIs for architecture-boundary drift. + +## Do Not +- Do not make Domain depend on solver adapters, analysis strategies, or result writers. diff --git a/phases/1-linear-static-mitc4/step3.md b/phases/1-linear-static-mitc4/step3.md new file mode 100644 index 0000000..3d56332 --- /dev/null +++ b/phases/1-linear-static-mitc4/step3.md @@ -0,0 +1,66 @@ +# Step 3: parser-foundation + +## Sprint Contract + +### Objective +Implement the Abaqus input lexical/keyword parser foundation plus Factory + Registry plumbing for Phase 1 objects. + +### 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 +- /phases/1-linear-static-mitc4/step2.md + +### Scope +- Tokenize Abaqus keyword lines, parameters, data lines, comments, continuations if documented, and source locations. +- Add a parser result shape that returns Domain data or diagnostics. +- Add keyword Factory + Registry structure without completing every Phase 1 keyword. +- Add smoke parsing for a tiny supported subset such as `*Node` and `*Element, TYPE=S4`. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not complete all Phase 1 Abaqus keywords in this step. +- Do not silently accept unsupported keywords or unknown parameters. +- Do not parse `quad_01.inp` as a supported Phase 1 case. + +### Tests To Write First +- Lexer tests for keyword names, parameters, comments, blank lines, and source locations. +- Registry tests for supported and unsupported keyword dispatch. +- Parser smoke tests for minimal nodes and S4 elements. + +### Reference Artifacts +- None. Existing `references/quad_01.inp` is not a Phase 1 parser acceptance case. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Unsupported input produces diagnostics with line context. +- Factory + Registry is present and parser logic is not hardwired into Domain constructors. +- Parser tests do not expand Phase 1 support beyond `docs/ABAQUS_INPUT_SUBSET.md`. + +### Handoff Requirements +- Record progress and validation in `PROGRESS.md`. +- Update `PLAN.md` if parser-scope risks change. +- 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 parser tests for line-numbered diagnostic coverage. + +## Do Not +- Do not normalize away Abaqus labels that later diagnostics or references need. diff --git a/phases/1-linear-static-mitc4/step4.md b/phases/1-linear-static-mitc4/step4.md new file mode 100644 index 0000000..45c8722 --- /dev/null +++ b/phases/1-linear-static-mitc4/step4.md @@ -0,0 +1,68 @@ +# Step 4: parser-phase1-subset + +## Sprint Contract + +### Objective +Complete Phase 1 Abaqus input subset behavior and explicit rejection diagnostics for unsupported features. + +### Required Reading +- /AGENTS.md +- /PROGRESS.md +- /PLAN.md +- /docs/README.md +- /docs/HARNESS_ENGINEERING.md +- /docs/PRD.md +- /docs/ARCHITECTURE.md +- /docs/ABAQUS_INPUT_SUBSET.md +- /docs/VERIFICATION_PLAN.md +- /phases/1-linear-static-mitc4/step3.md + +### Scope +- Parse `*Node`, `*Element`, `*Nset`, `*Elset`, `*Material`, `*Elastic`, `*Shell Section`, `*Boundary`, `*Cload`, `*Step`, `*Static`, and `*End Step` as documented. +- Support generated and explicit set definitions only if documented in `docs/ABAQUS_INPUT_SUBSET.md`. +- Reject unsupported Abaqus constructs with clear diagnostics. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `docs/ABAQUS_INPUT_SUBSET.md` only for clarification of already agreed behavior +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not support `S4R`, `Part`, `Assembly`, `Instance`, `*Include`, pressure loads, nonzero prescribed displacement, `*Density`, or `NLGEOM=YES`. +- Do not make `quad_01.inp` pass as Phase 1 input. +- Do not add geometric/material nonlinearity, dynamics, thermal coupling, or mesh quality diagnostics. + +### Tests To Write First +- Positive parser tests for each Phase 1 supported keyword. +- Negative parser tests for `S4R`, `Part/Assembly/Instance`, `*Include`, `*Density`, pressure loads, nonzero prescribed displacement, and `NLGEOM=YES`. +- Diagnostics tests for missing required parameters, malformed data rows, and invalid labels. + +### Reference Artifacts +- Format/provenance only: `references/quad_01.inp` may be used to assert that unsupported features are rejected or documented, not as a passing parser case. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Supported keyword coverage matches `docs/ABAQUS_INPUT_SUBSET.md`. +- Unsupported features fail loudly and specifically. +- S4 maps to the internal MITC4 shell element type; S4R remains unsupported. +- Tests include both successful subset parsing and negative diagnostics. + +### Handoff Requirements +- Record parser coverage, unsupported-feature behavior, and validation in `PROGRESS.md`. +- Update `PLAN.md` if a parser blocker remains. +- 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 to ensure unsupported Abaqus features are not silently accepted. + +## Do Not +- Do not widen parser support because a stored reference file happens to contain a keyword. diff --git a/phases/1-linear-static-mitc4/step5.md b/phases/1-linear-static-mitc4/step5.md new file mode 100644 index 0000000..7487d3e --- /dev/null +++ b/phases/1-linear-static-mitc4/step5.md @@ -0,0 +1,69 @@ +# Step 5: domain-validation-diagnostics + +## Sprint Contract + +### Objective +Implement Domain validation and singular-prone pre-solve diagnostics required before DOF and solver work. + +### 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/ABAQUS_INPUT_SUBSET.md +- /docs/VERIFICATION_PLAN.md +- /phases/1-linear-static-mitc4/step4.md + +### Scope +- Validate node, element, set, material, property, load, boundary, and step references. +- Add singular-prone diagnostics for no active elements, no material/property, no boundary constraints, untouched free DOFs when detectable, and invalid active step data. +- Keep diagnostics actionable and source-linked where parser information is available. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `docs/VERIFICATION_PLAN.md` only for clarification of diagnostic test expectations +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not implement DofManager, assembly, or solver singularity handling in this step. +- Do not add mesh quality diagnostics; Phase 1 excludes them. +- Do not accept unsupported parser features to make validation easier. + +### Tests To Write First +- Validation tests for missing nodes, missing sets, missing materials, missing shell sections, invalid element connectivity, invalid loads, and invalid boundary references. +- Singular-prone tests for no active elements, unconstrained models, and untouched free DOF candidates where detectable without assembly. +- Diagnostic payload tests for code, severity, message, and source/model context. + +### Reference Artifacts +- None. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Diagnostics align with `docs/NUMERICAL_CONVENTIONS.md` and `docs/VERIFICATION_PLAN.md`. +- Validation is separate from parsing and analysis execution. +- Mesh quality checks were not introduced. +- Tests cover failure modes, not only valid models. + +### Handoff Requirements +- Record validation coverage and command results in `PROGRESS.md`. +- Update `PLAN.md` if singular diagnostics require later solver support. +- 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. Review negative tests for clear diagnostics and no mesh-quality drift. + +## Do Not +- Do not defer singular diagnostics entirely to the linear solver. diff --git a/phases/1-linear-static-mitc4/step6.md b/phases/1-linear-static-mitc4/step6.md new file mode 100644 index 0000000..044ca66 --- /dev/null +++ b/phases/1-linear-static-mitc4/step6.md @@ -0,0 +1,70 @@ +# 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. diff --git a/phases/1-linear-static-mitc4/step7.md b/phases/1-linear-static-mitc4/step7.md new file mode 100644 index 0000000..c21b8c5 --- /dev/null +++ b/phases/1-linear-static-mitc4/step7.md @@ -0,0 +1,69 @@ +# Step 7: math-solver-adapters + +## Sprint Contract + +### Objective +Implement vector, sparse matrix, and linear solver interfaces plus a deterministic test solver adapter while preserving future MKL/TBB adapter boundaries. + +### 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 +- /phases/1-linear-static-mitc4/step6.md + +### Scope +- Add minimal vector and sparse matrix abstractions needed by assembly and linear static solving. +- Add a linear solver interface with deterministic test implementation. +- Keep MKL/TBB-specific code behind adapter boundaries if any placeholder is added. +- Surface solver singularity diagnostics in a structured way. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `docs/ADR.md` if adapter decisions need clarification +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not require Intel oneAPI installation for Phase 1 unit tests. +- Do not expose MKL, TBB, or HDF5 APIs in solver core headers. +- Do not implement element assembly or analysis algorithms in this step. + +### Tests To Write First +- Sparse pattern and insertion tests with int64 indices. +- Deterministic small linear solve tests. +- Singular solve diagnostic tests. +- Adapter-boundary tests or compile checks showing core APIs do not include MKL/TBB headers. + +### Reference Artifacts +- None. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Core math interfaces are dependency-clean. +- Singular solver failures produce diagnostics, not crashes or silent NaNs. +- Tests cover sparse storage, solve success, and solve failure. +- Future MKL acceleration remains possible without changing solver core contracts. + +### Handoff Requirements +- Record math interfaces, validation, and adapter caveats in `PROGRESS.md`. +- Update `PLAN.md` if MKL/TBB integration becomes a future task. +- 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 public headers for third-party API leakage. + +## Do Not +- Do not optimize sparse storage before correctness and testability are established. diff --git a/phases/1-linear-static-mitc4/step8.md b/phases/1-linear-static-mitc4/step8.md new file mode 100644 index 0000000..d88c2fe --- /dev/null +++ b/phases/1-linear-static-mitc4/step8.md @@ -0,0 +1,71 @@ +# Step 8: results-writer-minimal + +## Sprint Contract + +### Objective +Implement the minimal result model and writer boundary for Phase 1 `U` and `RF` step/frame/field outputs. + +### 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 + +### Scope +- Add result data structures for model ids/connectivity plus step/frame/field outputs. +- Support mandatory Phase 1 fields `U` and `RF` with components `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. +- Add an in-memory or file-backed writer boundary as appropriate for the current build system. +- If HDF5 is implemented now, keep HDF5 APIs behind an adapter/wrapper. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `docs/RESULTS_SCHEMA.md` only for clarification of agreed schema details +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not add stress, strain, shell force, history, nonlinear frame, thermal, or composite outputs unless R-007 is resolved and docs are updated first. +- Do not write RF from reduced vectors only. +- Do not expose HDF5 APIs in solver core headers. + +### Tests To Write First +- Schema tests for step/frame layout and mandatory field names. +- Component-label and ordering tests for `U` and `RF`. +- Model id/connectivity storage tests using int64 ids. +- Adapter-boundary tests if HDF5 is introduced. + +### Reference Artifacts +- None for solver regression. This step only prepares output data consumed by later comparison. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Result layout follows `docs/RESULTS_SCHEMA.md`. +- `U` and `RF` have six components in the documented order. +- HDF5, if present, is isolated behind an adapter. +- No extra Phase 1 outputs were added without resolving R-007. + +### Handoff Requirements +- Record result writer scope and validation in `PROGRESS.md`. +- Update `PLAN.md` if R-007 changes or output scope remains blocked. +- 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 schema and component ordering. + +## Do Not +- Do not treat a file being created as proof that its schema matches the contract. diff --git a/phases/1-linear-static-mitc4/step9.md b/phases/1-linear-static-mitc4/step9.md new file mode 100644 index 0000000..e2e6c6d --- /dev/null +++ b/phases/1-linear-static-mitc4/step9.md @@ -0,0 +1,74 @@ +# Step 9: reference-displacement-comparator + +## Sprint Contract + +### Objective +Implement the `references/*_displacements.csv` loader and comparator for FESA `U` output. + +### Required Reading +- /AGENTS.md +- /PROGRESS.md +- /PLAN.md +- /docs/README.md +- /docs/HARNESS_ENGINEERING.md +- /docs/NUMERICAL_CONVENTIONS.md +- /docs/VERIFICATION_PLAN.md +- /docs/RESULTS_SCHEMA.md +- /references/README.md +- /phases/1-linear-static-mitc4/step8.md + +### Scope +- Load Abaqus displacement CSV files with columns `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`. +- Compare by node id, not row order. +- Implement absolute and relative tolerance behavior with a documented default or configuration path. +- Report missing columns, duplicate nodes, missing nodes, nonnumeric values, and tolerance failures. + +### Allowed Files +- `include/**` +- `src/**` +- `tests/**` +- `references/**` only for small test fixtures or documentation updates +- `docs/VERIFICATION_PLAN.md` only for comparator tolerance clarification +- `docs/RESULTS_SCHEMA.md` only for schema clarification +- `PLAN.md` +- `PROGRESS.md` +- `phases/1-linear-static-mitc4/index.json` + +### Explicit Non-Goals +- Do not require Abaqus execution. +- Do not treat `references/quad_01.inp` as Phase 1 supported input. +- Do not compare RF here unless a `*_reactions.csv` contract is added. + +### Tests To Write First +- CSV header validation tests. +- Node-id matching and row-order independence tests. +- Absolute/relative tolerance pass/fail tests. +- Duplicate, missing, and malformed value diagnostics tests. +- Format-only smoke test using `references/quad_01_displacements.csv` if stable enough for CI. + +### Reference Artifacts +- Format-only: `references/quad_01_displacements.csv`. +- Required later for solver regression: at least one Phase 1-compatible `TYPE=S4` input and matching displacement CSV. + +### Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +### Evaluator Checklist +- Component mapping matches `docs/VERIFICATION_PLAN.md` and `docs/RESULTS_SCHEMA.md`. +- Comparison is by node id and independent of row order. +- Missing or malformed reference data fails with actionable diagnostics. +- `quad_01` is not used to imply S4R or nonlinear support. + +### Handoff Requirements +- Record comparator behavior, tolerance decision, and validation in `PROGRESS.md`. +- Update `PLAN.md` if R-009 or reference artifact blockers change. +- 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 comparator tests for tolerance and malformed CSV behavior. + +## Do Not +- Do not silently skip reference nodes or components. diff --git a/phases/index.json b/phases/index.json new file mode 100644 index 0000000..07087a6 --- /dev/null +++ b/phases/index.json @@ -0,0 +1,8 @@ +{ + "phases": [ + { + "dir": "1-linear-static-mitc4", + "status": "pending" + } + ] +}