remove all files

This commit is contained in:
NINI
2026-05-13 23:32:45 +09:00
parent c47557885d
commit ca2d8dbc2f
304 changed files with 0 additions and 23454 deletions
@@ -1,22 +0,0 @@
{
"project": "FESA",
"phase": "1-linear-static-mitc4-rebaseline",
"steps": [
{ "step": 0, "name": "rebaseline-audit", "status": "completed" },
{ "step": 1, "name": "reference-onboarding", "status": "completed" },
{ "step": 2, "name": "core-harness-guardrails", "status": "completed" },
{ "step": 3, "name": "parser-domain-subset", "status": "completed" },
{ "step": 4, "name": "validation-singular-diagnostics", "status": "completed" },
{ "step": 5, "name": "dof-manager-reaction-foundation", "status": "completed" },
{ "step": 6, "name": "results-comparator-foundation", "status": "completed" },
{ "step": 7, "name": "mitc4-geometry-directors", "status": "completed" },
{ "step": 8, "name": "mitc4-covariant-strain-tying", "status": "completed" },
{ "step": 9, "name": "mitc4-material-integration", "status": "completed" },
{ "step": 10, "name": "mitc4-stiffness-drilling", "status": "completed" },
{ "step": 11, "name": "mitc4-patch-benchmark-tests", "status": "completed" },
{ "step": 12, "name": "assembly-sparse-solver-path", "status": "completed" },
{ "step": 13, "name": "linear-static-workflow", "status": "completed" },
{ "step": 14, "name": "stored-reference-regression", "status": "completed" },
{ "step": 15, "name": "phase1-evaluator-closeout", "status": "completed", "artifact": "step15-evaluator-report.md" }
]
}
@@ -1,88 +0,0 @@
# Step 0 Audit: Phase 1 Rebaseline
Date: 2026-05-04
Author: Codex
## Objective
Audit the existing Phase 1 C++ implementation against the paper-based `docs/MITC4_FORMULATION.md` reset before changing solver behavior.
This step did not modify production C++ code. The existing implementation remains useful historical scaffolding, but it is not authoritative for the rebuilt MITC4 element until each layer is revalidated through the rebaseline steps.
## Required Sources Read
- `AGENTS.md`
- `PLAN.md`
- `PROGRESS.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-rebaseline/step0.md`
## Code Areas Inspected
- `include/fesa/fesa.hpp`
- `tests/test_main.cpp`
- `CMakeLists.txt`
- `scripts/validate_workspace.py`
- `references/quad_01.inp`
- `references/quad_02.inp`
## High-Level Finding
The existing implementation has a working single-header Phase 1 skeleton: parser, domain validation, DOF mapping, dense test solver, in-memory results, displacement CSV comparison, full-vector reaction recovery, and a basic linear static workflow.
The existing MITC4 kernel is not compatible with the revised formulation contract. It uses a simplified midsurface local basis, 2D projected derivatives, separated membrane/bending/shear factors, direct shear row construction at tying points, 2 x 2 midsurface-only integration, and `drilling_stiffness_scale = 1.0e-6`. The revised contract requires degenerated-continuum geometry, director/local rotation handling, convected covariant strain rows, MITC transverse shear tying on tensor components, `2 x 2 x 2` Gauss integration, and drilling stabilization based on `1.0e-3 * min_positive_diagonal(K_local_without_drilling)`.
## Retain With Revalidation
These areas should be kept as starting points, but each must be revalidated by the assigned rebaseline step before being treated as Phase 1 evidence.
| Area | Current Evidence | Rebaseline Owner |
|---|---|---|
| CMake/CTest validation harness | CMake files and `scripts/validate_workspace.py` run a real C++ test executable. | P1R-02 |
| Core numeric and DOF aliases | `Real`, int64 ids/equations, and Abaqus DOF 1..6 mapping exist. | P1R-02 |
| Diagnostics model | Error/warning diagnostics and code-based checks exist. | P1R-02, P1R-04 |
| Parser subset skeleton | `*Node`, `*Element TYPE=S4`, `*Nset`, `*Elset`, `*Material`, `*Elastic`, `*Shell Section`, `*Boundary`, `*Cload`, `*Step`, `*Static`, and `*End Step` are represented. | P1R-03 |
| Unsupported feature rejection | Generic unsupported keyword rejection plus `S4R` and `NLGEOM=YES` checks exist. | P1R-01, P1R-03 |
| Domain validation | Missing element nodes, shell section/material links, load/boundary targets, no active elements, and no load warnings are present. | P1R-04 |
| DofManager foundation | Six-DOF full order, constrained/free partition, equation numbering, and full-vector reconstruction exist outside Node/Element. | P1R-05 |
| Result field structure | In-memory step/frame fields for `U` and `RF` exist. | P1R-06 |
| CSV displacement comparator | Required Abaqus displacement columns are parsed and compared by node id with abs/rel tolerance support. | P1R-06, P1R-14 |
| Linear static flow | Reduced free-DOF solve, full vector reconstruction, and `R_full = K_full * U_full - F_full` are implemented. | P1R-12, P1R-13 |
## Rewrite Required
These areas conflict with `docs/MITC4_FORMULATION.md` and should be rebuilt under the matching contracts, not patched casually.
| Area | Conflict | Rebaseline Owner |
|---|---|---|
| MITC4 local basis | Current `computeLocalBasis` uses averaged edge directions from the four coordinates. The revised contract requires element-center midsurface normal, nodal director axes `V1/V2/Vn`, deterministic fallback axes, and integration local bases. | P1R-07 |
| Geometry and Jacobian | Current code projects the element to local 2D `xy` and uses bilinear planar derivatives only. The revised contract requires degenerated-continuum geometry with through-thickness coordinate `zeta`, covariant bases `g_i`, and invalid basis/Jacobian diagnostics. | P1R-07, P1R-09 |
| Local rotation transform | Current transform rotates three translations and three rotations with one basis block. The revised contract requires mapping global rotations to local `[alpha, beta, gamma]`, where drilling `gamma` does not enter physical strain. | P1R-08, P1R-10 |
| Strain rows | Current B matrix is an 8-row engineering shell split, not the documented convected covariant strain vector `[eps_11, eps_22, eps_33, gamma_23, gamma_13, gamma_12]`. | P1R-08 |
| MITC shear tying | Current `addStandardShearRow` builds Cartesian-like `gamma_xz/gamma_yz` rows at midside derivatives, then interpolates them. The revised contract ties convected tensor components `eps_13` and `eps_23` from direct covariant rows at A/B/C/D. | P1R-08 |
| Material and integration | Current code uses pre-integrated membrane, bending, and shear factors at `2 x 2` midsurface points. The revised contract requires local plane-stress matrix with shear correction, material transform as needed, and `2 x 2 x 2` Gauss integration. | P1R-09 |
| Drilling stabilization | Current default is `1.0e-6` and the stiffness is assembled through a drilling row using `E * thickness * scale`. The revised contract requires `1.0e-3 * min_positive_diagonal(K_local_without_drilling)` added to local `gamma` diagonals before transformation. | P1R-10 |
| MITC4 tests | Existing element test only checks shape partition, stiffness symmetry, and one uniform translation. The revised contract requires director basis, rotation transform, tying-row finite difference, MITC interpolation, rigid-body, drilling, patch, and locking-sensitivity tests. | P1R-07 through P1R-11 |
## Revalidate Before Reference Regression
These areas are promising but not sufficient for stored-reference credibility yet.
| Area | Required Revalidation |
|---|---|
| `quad_02` reference path | `quad_02.inp` uses `TYPE=S4`, but also `Part/Assembly/Instance` and `*Density`. Step 1 must either add a normalized Phase 1-compatible derivative input or create an explicit parser compatibility plan. |
| Parser rejection policy | The parser must continue rejecting `S4R`, `Part/Assembly/Instance`, `*Density`, `*Include`, pressure loads, nonzero prescribed displacement, and `NLGEOM=YES` unless a later contract changes the subset. |
| Singular diagnostics | Existing diagnostics cover some conditions, but untouched free DOFs, rotational/drilling risks, invalid element geometry, non-positive thickness paths, and solver zero-pivot messages need stronger coverage. |
| Reaction output | Full-vector reaction recovery exists, but `RF` should remain verified by equilibrium tests until user-provided Abaqus reaction CSV artifacts are available. |
| Assembly and solver boundary | Current dense matrix and Gaussian solver are acceptable for deterministic tests, but the architecture requires a future sparse/MKL adapter boundary and int64 sparse path. |
## Deferred Or Out Of Scope
- Abaqus `S4R`, reduced integration, and hourglass control.
- `Part/Assembly/Instance` support unless Step 1 or a later parser contract explicitly adds it.
- `*Density` as material support for Phase 1 static analysis.
- `NLGEOM=YES`, geometric nonlinearity, pressure loads, RBE2/RBE3, nonzero prescribed displacements, dynamics, heat transfer, composite sections, stress/strain/resultant outputs, and mesh quality diagnostics.
- Tuning drilling stiffness to match one reference case.
## Step Handoff
Proceed to P1R-01 reference onboarding.
P1R-01 must decide the `quad_02` compatibility path without silently expanding parser support. P1R-02 can proceed in parallel afterward for core harness guardrails, but production MITC4 work should wait until the reference and guardrail foundations are explicit.
@@ -1,59 +0,0 @@
# Sprint Contract: Rebaseline Audit
## Objective
Audit the existing Phase 1 implementation against the paper-based `docs/MITC4_FORMULATION.md` and produce a concrete rework map before changing solver behavior.
## 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/index.json
## Scope
- Inspect existing C++ implementation and tests only enough to classify what can be retained, rewritten, or deleted in later steps.
- Produce or update planning notes in `PLAN.md` and `PROGRESS.md`.
- If useful, add a short audit artifact under `phases/1-linear-static-mitc4-rebaseline/`.
## Allowed Files
- `PLAN.md`
- `PROGRESS.md`
- `phases/1-linear-static-mitc4-rebaseline/`
## Explicit Non-Goals
- Do not change production C++ behavior.
- Do not rewrite MITC4 formulas.
- Do not unblock stored-reference regression by accepting unsupported Abaqus syntax.
## Tests To Write First
- None. This is a planning and audit sprint.
## Reference Artifacts
- `references/quad_01.inp`
- `references/quad_01_displacements.csv`
- `references/quad_02.inp`
- `references/quad_02_displacements.csv`
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- The audit identifies conflicts with `docs/MITC4_FORMULATION.md`, especially old averaged-edge basis, `1.0e-6` drilling scale, analytic thickness integration, and direct shear evaluation risks.
- Future work is assigned to later rebaseline steps instead of being fixed here.
- `PLAN.md` and `PROGRESS.md` describe the new state without treating the old P1-01 through P1-14 implementation as authoritative.
## Handoff Requirements
- Record completed audit work in `PROGRESS.md`.
- Keep next implementation tasks in `PLAN.md` or later step files.
## Do Not
- Do not merge this audit with implementation.
- Do not remove old phase history.
@@ -1,61 +0,0 @@
# Sprint Contract: Reference Onboarding
## Objective
Create a Phase 1 reference path for `quad_02` without modifying the original Abaqus artifact or silently expanding parser support.
## Required Reading
- /AGENTS.md
- /PROGRESS.md
- /PLAN.md
- /docs/ABAQUS_INPUT_SUBSET.md
- /docs/VERIFICATION_PLAN.md
- /docs/RESULTS_SCHEMA.md
- /docs/MITC4_FORMULATION.md
- /references/quad_02.inp
- /references/quad_02_displacements.csv
## Scope
- Inspect `quad_02` and document its supported and unsupported features.
- Add a normalized Phase 1-compatible derivative input if selected by the planner, keeping the original `quad_02.inp` unchanged.
- Add notes or manifest metadata for unit system, source solver, expected outputs, and tolerances.
## Allowed Files
- `references/`
- `docs/ABAQUS_INPUT_SUBSET.md`
- `docs/VERIFICATION_PLAN.md`
- `PLAN.md`
- `PROGRESS.md`
- `tests/` only for reference artifact parsing/comparator tests
## Explicit Non-Goals
- Do not implement `Part`, `Assembly`, or `Instance` parser support in this step unless this contract is revised first.
- Do not edit `references/quad_02.inp` or `references/quad_02_displacements.csv`.
- Do not compare solver displacements until the MITC4 rebuild and end-to-end workflow are complete.
## Tests To Write First
- Test that original `quad_02.inp` is recognized as stored provenance with unsupported `Part/Assembly/Instance`.
- If a normalized input is added, test that it contains only the documented Phase 1 subset.
- Test `quad_02_displacements.csv` column loading and 121-row node-label parsing.
## Reference Artifacts
- `references/quad_02.inp`
- `references/quad_02_displacements.csv`
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Original Abaqus files are preserved.
- Any normalized derivative file has a clear name and provenance note.
- Parser scope remains aligned with `docs/ABAQUS_INPUT_SUBSET.md`.
- Tolerances and result mapping are documented before regression use.
## Handoff Requirements
- Update `PROGRESS.md` with reference files changed or added.
- Update `PLAN.md` if parser compatibility remains blocked.
## Do Not
- Do not treat `*Density` as material support.
- Do not allow `Part/Assembly/Instance` through the Phase 1 parser accidentally.
@@ -1,54 +0,0 @@
# Sprint Contract: MITC4 Stiffness Drilling
## Objective
Assemble the MITC4 element stiffness and internal force kernel using the documented strain, material, integration, six-DOF transform, and drilling stabilization.
## Required Reading
- /AGENTS.md
- /docs/MITC4_FORMULATION.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/ADR.md
## Scope
- Accumulate `K_e = integral B^T D B dV`.
- Add local drilling stabilization with `drilling_stiffness_scale = 1.0e-3`.
- Transform local element stiffness/internal force to global 24-DOF order.
- Preserve parameterization and diagnostics for drilling scale.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not add assembly/global solve.
- Do not tune drilling scale to match one reference case.
- Do not output stresses/resultants as mandatory fields.
## Tests To Write First
- Stiffness dimension and symmetry tests.
- Drilling diagonal reference tests using minimum positive physical local stiffness diagonal.
- Zero/invalid reference diagonal diagnostic tests.
- Rigid body physical strain-energy tests with documented drilling effects.
- Internal force consistency test `f_int_e = K_e u_e` for linear elastic Phase 1.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Old `1.0e-6 * E * thickness` drilling rule is gone.
- Global 24-DOF ordering matches `UX,UY,UZ,RX,RY,RZ` per node.
- Stiffness remains linear elastic and symmetric.
## Handoff Requirements
- Record element kernel readiness in `PROGRESS.md`.
## Do Not
- Do not optimize or parallelize before element tests pass.
@@ -1,52 +0,0 @@
# Sprint Contract: MITC4 Patch Benchmark Tests
## Objective
Add element-level and small-mesh MITC4 patch and benchmark tests before integrating stored Abaqus references.
## Required Reading
- /AGENTS.md
- /docs/MITC4_FORMULATION.md
- /docs/VERIFICATION_PLAN.md
- /docs/NUMERICAL_CONVENTIONS.md
## Scope
- Add constant membrane, pure bending, pure shear, pure twist, rigid-body, and drilling sensitivity tests.
- Add a thin cantilever or plate strip test to expose shear locking.
- Add benchmark scaffolding for Scordelis-Lo after flat tests pass.
## Allowed Files
- `tests/`
- `include/`
- `src/` only for minimal fixes required by tests
- `docs/VERIFICATION_PLAN.md` only for clarifying benchmark notes
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not require Abaqus execution.
- Do not add pressure loads for Scordelis-Lo in Phase 1.
- Do not hide failing element behavior by loosening tolerances without rationale.
## Tests To Write First
- The patch and benchmark tests are the sprint output; write them before any fixes.
- Include at least one negative or sensitivity test for drilling scale effects.
## Reference Artifacts
- Local analytic or hand-check benchmark data only.
- Stored Abaqus CSV regression is reserved for step 14.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Tests cover locking-sensitive behavior, not only shape functions.
- Tolerances are scale-aware and documented.
- Any implementation fixes remain minimal and within MITC4 scope.
## Handoff Requirements
- Record benchmark coverage and remaining gaps in `PROGRESS.md` and `PLAN.md`.
## Do Not
- Do not implement new load types to force a benchmark into Phase 1.
@@ -1,55 +0,0 @@
# Sprint Contract: Assembly Sparse Solver Path
## Objective
Rebuild or verify full-space assembly, reduced free-DOF solve path, solver adapter boundary, and full-vector reaction recovery using the rebuilt MITC4 kernel.
## Required Reading
- /AGENTS.md
- /docs/ARCHITECTURE.md
- /docs/ADR.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/MITC4_FORMULATION.md
## Scope
- Assemble global stiffness and external load vectors.
- Preserve full-space data for `RF = K_full * U_full - F_full`.
- Apply constrained DOF elimination via `DofManager`.
- Use the current deterministic test solver or adapter boundary; keep MKL behind a future adapter.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not expose MKL or TBB APIs directly in solver core.
- Do not compare stored Abaqus references yet.
- Do not compute reactions from reduced equations.
## Tests To Write First
- Small assembled system tests with known displacement.
- Full-vector `RF` recovery tests.
- Constrained/free projection tests through assembly.
- Singular solve diagnostic tests.
- Sparse pattern deterministic ordering tests if sparse structure exists.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Full-space stiffness/load/displacement are available or reconstructable for reactions.
- Solver adapter boundary is preserved.
- Singular failures remain actionable.
## Handoff Requirements
- Record assembly and reaction readiness in `PROGRESS.md`.
## Do Not
- Do not let elements own global equation ids.
@@ -1,56 +0,0 @@
# Sprint Contract: Linear Static Workflow
## Objective
Rebuild or verify the full linear static workflow from parsed `Domain` to `AnalysisModel`, `AnalysisState`, solve, `U` and `RF` result fields.
## Required Reading
- /AGENTS.md
- /docs/ARCHITECTURE.md
- /docs/ADR.md
- /docs/RESULTS_SCHEMA.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/MITC4_FORMULATION.md
## Scope
- Build the active `AnalysisModel` for one linear static step.
- Run the template workflow: build DOF map, assemble, apply constraints, solve, reconstruct full vectors, recover RF, write results.
- Keep `Domain` immutable and `AnalysisState` mutable.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not implement nonlinear, dynamic, pressure, or thermal behavior.
- Do not add multiple-step execution unless already trivial and tested.
- Do not make HDF5 dependency mandatory if the current minimal writer remains the accepted Phase 1 path.
## Tests To Write First
- Input-to-analysis-model activation test.
- End-to-end small linear static solve with `U` and `RF`.
- Result schema field label and frame tests.
- Full-vector reaction balance test.
- Missing/unsupported input negative tests routed through the workflow.
## Reference Artifacts
- Normalized small `.inp` fixtures may be used.
- Stored Abaqus CSV regression is reserved for step 14.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Workflow follows architecture boundaries.
- `AnalysisState` owns mutable vectors.
- Results use documented step/frame/field structure.
## Handoff Requirements
- Record end-to-end workflow readiness in `PROGRESS.md`.
## Do Not
- Do not bypass validators to make a model solve.
@@ -1,61 +0,0 @@
# Sprint Contract: Stored Reference Regression
## Objective
Run automated stored-reference displacement regression against accepted Phase 1-compatible S4 cases, starting with the `quad_02` compatibility path chosen in step 1.
## Required Reading
- /AGENTS.md
- /docs/VERIFICATION_PLAN.md
- /docs/ABAQUS_INPUT_SUBSET.md
- /docs/RESULTS_SCHEMA.md
- /docs/MITC4_FORMULATION.md
- /references/
## Scope
- Wire accepted Phase 1-compatible reference inputs into automated tests.
- Compare FESA `U` against `*_displacements.csv` using documented tolerances.
- Keep original unsupported Abaqus files as provenance and negative/compatibility tests.
- Record pass/fail comparison details.
## Allowed Files
- `references/`
- `tests/`
- `include/`
- `src/` only for minimal fixes needed by reference regression
- `docs/VERIFICATION_PLAN.md`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not require Abaqus execution.
- Do not accept `S4R`, `Part/Assembly/Instance`, `*Density`, or `NLGEOM=YES` through the parser without a prior parser contract.
- Do not mark Phase 1 complete with only one reference case unless `PLAN.md` records the remaining PRD gap.
## Tests To Write First
- Reference manifest or fixture discovery tests.
- `quad_02` accepted derivative input regression test if normalized in step 1.
- Original `quad_02.inp` unsupported-provenance test if parser scope still excludes `Part/Assembly/Instance`.
- CSV displacement comparison test with absolute and relative tolerances.
## Reference Artifacts
- `references/quad_02.inp`
- `references/quad_02_displacements.csv`
- Any normalized Phase 1-compatible derivative files from step 1.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Regression uses stored artifacts only.
- Original reference provenance is preserved.
- Comparison is node-id-based and reports errors clearly.
- Remaining PRD requirement for three stored references is recorded if not satisfied.
## Handoff Requirements
- Record reference pass/fail, tolerances, and residual risks in `PROGRESS.md`.
- Update `PLAN.md` with additional reference cases still needed.
## Do Not
- Do not tune solver formulas to one CSV without element-level tests remaining green.
@@ -1,59 +0,0 @@
# Evaluation Report: P1R-15 Phase 1 Rebaseline Closeout
Date: 2026-05-04
Evaluator: Codex
## Verdict
PASS for the `1-linear-static-mitc4-rebaseline` sprint sequence, with documented product-level Phase 1 reference gaps.
This verdict closes the rebaseline execution path through P1R-15. It does not claim that the broader PRD Phase 1 reference target is fully complete, because R-010 and R-013 remain open in `PLAN.md`.
## Scope Reviewed
- `AGENTS.md`
- `PLAN.md`
- `PROGRESS.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`
- `phases/index.json`
- `phases/1-linear-static-mitc4-rebaseline/index.json`
- Completed rebaseline handoff notes in `PROGRESS.md`
## Evidence
- Rebaseline steps P1R-00 through P1R-14 were already marked complete before this evaluation.
- `python scripts/validate_workspace.py` passed on 2026-05-04. The command configured CMake, built `fesa_core` and `fesa_tests`, and ran CTest successfully.
- The active stored reference regression uses `references/quad_02_phase1.inp` and compares FESA `U` against `references/quad_02_displacements.csv`.
- The original `references/quad_02.inp` remains preserved as Abaqus/CAE provenance and is not treated as parser acceptance evidence for `Part/Assembly/Instance`.
- `RF` is recovered from the full vector path and covered by in-repo equilibrium/reaction tests; no Abaqus `*_reactions.csv` artifact is available yet.
## Checklist
| Item | Result | Notes |
|---|---|---|
| AGENTS critical rules satisfied | PASS | PLAN/PROGRESS were read before edits, architecture/numerical/reference rules were checked, and Abaqus execution was not required. |
| Harness contract followed | PASS | Step 15 stayed inside the allowed evaluation/documentation scope and did not implement missing solver behavior. |
| TDD expectations met for implementation steps | PASS | Earlier generator steps recorded failing-first or test-first validation where code was changed; Step 15 is evaluator-only. |
| MITC4 formulation alignment | PASS | Rebaseline steps 7 through 11 are tied to the paper-based formulation document and current drilling scale policy. |
| Parser subset discipline | PASS | Unsupported Abaqus/CAE provenance remains documented instead of silently expanding the Phase 1 parser subset. |
| Full-vector RF recovery | PASS with reference gap | Implementation path preserves full-space stiffness/load state and tests full-vector RF recovery. Abaqus RF CSV comparison remains open as R-010. |
| Stored displacement reference regression | PASS with PRD gap | `quad_02_phase1` displacement comparison passes. The PRD target of three stored references remains open as R-013. |
| PLAN/PROGRESS synchronized | PASS | Step 15 updates move the active objective to post-rebaseline reference completion. |
## Residual Gaps
- R-010: Add Abaqus reaction-force CSV artifacts, preferably `*_reactions.csv`, or explicitly accept internal equilibrium tests as the Phase 1 RF verification basis until Abaqus RF output is available.
- R-013: Add enough additional small Abaqus S4 reference cases to satisfy the PRD target of three stored Phase 1 references: one single-element case, one simple multi-element plate/shell case, and one curved shell benchmark.
## Closeout Decision
Mark `phases/1-linear-static-mitc4-rebaseline` complete. Continue project work from `PLAN.md` with R-010 and R-013 as the next reference-readiness tasks before claiming full PRD Phase 1 completion.
@@ -1,65 +0,0 @@
# Sprint Contract: Phase 1 Evaluator Closeout
## Objective
Perform an independent Phase 1 evaluation against the rebaseline contracts, docs, tests, reference artifacts, and validation commands.
## 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
- /phases/1-linear-static-mitc4-rebaseline/index.json
## Scope
- Review all completed rebaseline steps.
- Run validation.
- Produce pass/fail findings.
- Update phase status, `PLAN.md`, and `PROGRESS.md` with final Phase 1 state.
## Allowed Files
- `PLAN.md`
- `PROGRESS.md`
- `phases/index.json`
- `phases/1-linear-static-mitc4-rebaseline/index.json`
- Optional evaluator feedback artifact under `phases/1-linear-static-mitc4-rebaseline/`
## Explicit Non-Goals
- Do not implement missing solver behavior during evaluation.
- Do not approve unresolved reference gaps silently.
- Do not mark old superseded phase steps as evidence for new MITC4 formulation compliance unless they were revalidated.
## Tests To Write First
- None. This is an evaluator sprint.
## Reference Artifacts
- All accepted Phase 1 reference artifacts under `references/`.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- All CRITICAL `AGENTS.md` rules are satisfied.
- TDD expectations are met for implementation steps.
- MITC4 implementation follows `docs/MITC4_FORMULATION.md`.
- Parser has not silently expanded unsupported Abaqus features.
- `RF` is recovered from full vectors.
- At least one stored displacement reference regression passes, and remaining PRD reference gaps are explicit.
- `PLAN.md` and `PROGRESS.md` are synchronized.
## Handoff Requirements
- If passed, mark the rebaseline phase complete and move remaining Phase 2 or reference tasks to `PLAN.md`.
- If failed, write a concise feedback artifact with required fixes and commands to rerun.
## Do Not
- Do not self-approve implementation without evidence from tests and reference comparisons.
@@ -1,58 +0,0 @@
# Sprint Contract: Core Harness Guardrails
## Objective
Refresh the build, validation, core numeric aliases, DOF enum, and diagnostic guardrails so later MITC4 work has stable test foundations.
## Required Reading
- /AGENTS.md
- /docs/ARCHITECTURE.md
- /docs/ADR.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/HARNESS_ENGINEERING.md
- /scripts/validate_workspace.py
## Scope
- Preserve or repair CMake/CTest validation.
- Verify `double` and signed int64 aliases are centralized.
- Verify `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ` mapping to Abaqus DOF `1..6`.
- Improve diagnostics only where needed for later steps.
## Allowed Files
- `CMakeLists.txt`
- `include/`
- `src/`
- `tests/`
- `scripts/validate_workspace.py`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not implement parser features.
- Do not implement MITC4 stiffness.
- Do not introduce MKL, TBB, or HDF5 APIs into solver core.
## Tests To Write First
- DOF enum and Abaqus DOF number mapping tests.
- Numeric alias compile-time or runtime tests for `double` and int64 paths.
- Validation script smoke test through `python scripts/validate_workspace.py`.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Core aliases and DOF mapping are not duplicated across modules.
- Diagnostics include enough context for later parser, model, and singular errors.
- Validation remains a real build plus test command.
## Handoff Requirements
- Record changed guardrails and test coverage in `PROGRESS.md`.
- Leave future parser/MITC4 tasks in later step files.
## Do Not
- Do not weaken validation to make tests pass.
- Do not add external library dependencies in this step.
@@ -1,58 +0,0 @@
# Sprint Contract: Parser Domain Subset
## Objective
Revalidate and repair the Phase 1 Abaqus parser and `Domain` model against the documented subset while preserving strict rejection of unsupported reference features.
## Required Reading
- /AGENTS.md
- /docs/ARCHITECTURE.md
- /docs/ADR.md
- /docs/ABAQUS_INPUT_SUBSET.md
- /docs/VERIFICATION_PLAN.md
- /docs/MITC4_FORMULATION.md
## Scope
- Parse Phase 1 keywords into immutable `Domain` objects.
- Preserve node, element, set, material, shell section, boundary, load, and step definitions.
- Reject `S4R`, `Part/Assembly/Instance`, `*Include`, `NLGEOM=YES`, nonzero prescribed displacement, and unsupported material/section modes.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `docs/ABAQUS_INPUT_SUBSET.md` only for clarifying parser contract
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not implement analysis or assembly.
- Do not add `Part/Assembly/Instance` support because `quad_02` contains it.
- Do not normalize reference files in parser code.
## Tests To Write First
- Parser acceptance tests for every Phase 1 keyword.
- Generated and explicit `*Nset` and `*Elset` tests.
- Unsupported feature rejection tests for `S4R`, `Part`, `Assembly`, `Instance`, `*Density`, and `NLGEOM=YES`.
- Line-numbered diagnostic tests for malformed numeric and DOF fields.
## Reference Artifacts
- `references/quad_01.inp` as unsupported provenance.
- `references/quad_02.inp` as unsupported original provenance until normalized or parser scope changes.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Parser behavior matches `docs/ABAQUS_INPUT_SUBSET.md`.
- `TYPE=S4` maps to internal MITC4.
- Unsupported stored references are not silently accepted.
- Domain objects do not own equation numbers.
## Handoff Requirements
- Update `PROGRESS.md` with parser status.
- Update `PLAN.md` for unresolved reference compatibility work.
## Do Not
- Do not broaden the parser subset without ADR and doc updates.
@@ -1,56 +0,0 @@
# Sprint Contract: Validation Singular Diagnostics
## Objective
Strengthen domain and analysis-model validation so invalid inputs and singular-prone models fail before or during solve with actionable diagnostics.
## Required Reading
- /AGENTS.md
- /docs/ARCHITECTURE.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/ABAQUS_INPUT_SUBSET.md
- /docs/VERIFICATION_PLAN.md
## Scope
- Validate missing nodes, properties, materials, sets, boundary targets, load targets, active elements, and non-positive thickness.
- Add singular-prone diagnostics for no free DOFs, untouched free DOFs, missing loads where expected, and unconstrained drilling/rotational risks.
- Keep mesh quality diagnostics out of Phase 1.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not implement mesh quality metrics such as aspect ratio, skew, or warpage.
- Do not solve the global system in this step.
- Do not hide singular checks in element kernels.
## Tests To Write First
- Missing node/property/material diagnostics.
- Missing set used by shell section, boundary, or load.
- No active elements.
- No free DOFs.
- Free DOFs untouched by any active element connectivity.
- Rotational/drilling weak-constraint diagnostic smoke test.
## Reference Artifacts
- Negative inline test inputs may be used.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Diagnostics include node id, element id, property id, material id, set name, DOF component, and source line where available.
- Mesh quality remains explicitly deferred.
- Validation does not mutate `Domain`.
## Handoff Requirements
- Record validation coverage in `PROGRESS.md`.
- Note any remaining singular-diagnostic gaps in `PLAN.md`.
## Do Not
- Do not classify poor element shape as a Phase 1 mesh quality failure.
@@ -1,57 +0,0 @@
# 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.
@@ -1,57 +0,0 @@
# Sprint Contract: Results Comparator Foundation
## Objective
Rebuild or verify the minimum Phase 1 results model and Abaqus displacement CSV comparator before using stored reference regressions.
## Required Reading
- /AGENTS.md
- /docs/RESULTS_SCHEMA.md
- /docs/VERIFICATION_PLAN.md
- /docs/NUMERICAL_CONVENTIONS.md
## Scope
- Store minimum result model data for nodes, elements, `U`, and `RF`.
- Preserve step/frame/field structure even if HDF5 writing is deferred.
- Load Abaqus `*_displacements.csv` by node id and component label.
- Compare using absolute and relative tolerances.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `docs/RESULTS_SCHEMA.md` only for clarifying schema text
- `docs/VERIFICATION_PLAN.md` only for clarifying tolerance/reference text
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not make `S`, `E`, or `SF` mandatory.
- Do not require Abaqus execution.
- Do not rely on CSV row order.
## Tests To Write First
- `U` and `RF` field component labels and basis tests.
- CSV required-header tests.
- Duplicate/missing/non-numeric node row tests.
- Node-id-based comparison tests with absolute and relative tolerance paths.
- Result frame metadata tests for Phase 1 linear static frame 0.
## Reference Artifacts
- `references/quad_02_displacements.csv`
- `references/quad_01_displacements.csv`
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Result component order matches docs.
- Comparator maps Abaqus columns to FESA `U` labels exactly.
- `RF` exists as a result field even if Abaqus RF CSV is unavailable.
## Handoff Requirements
- Record comparator readiness and remaining RF artifact decision in `PROGRESS.md` and `PLAN.md`.
## Do Not
- Do not add undocumented CSV formats.
@@ -1,55 +0,0 @@
# Sprint Contract: MITC4 Geometry Directors
## Objective
Implement or rebuild MITC4 shape functions, natural-coordinate node order, element-center director policy, local director axes, and integration-point local bases.
## Required Reading
- /AGENTS.md
- /docs/MITC4_FORMULATION.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/ADR.md
## Scope
- Define `N1..N4` and derivatives for FESA natural coordinates.
- Define tying points `A`, `B`, `C`, and `D`.
- Build element-center director `Vn` from midsurface geometry.
- Build nodal `V1`, `V2`, `Vn` and integration local Cartesian basis.
- Add invalid/singular element diagnostics for near-zero normal, basis, Jacobian, and thickness.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not compute stiffness.
- Do not add Abaqus `*Orientation` or nodal normal parsing.
- Do not add mesh quality diagnostics.
## Tests To Write First
- Shape function partition-of-unity and derivative tests.
- Node order and tying-point coordinate tests.
- Flat element normal and right-handed basis tests.
- Fallback axis tests when `EY x Vn` is near zero.
- Invalid geometry diagnostic tests.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Geometry matches `docs/MITC4_FORMULATION.md`.
- The old averaged-edge basis is not used as the binding formulation.
- No stress/strain or stiffness logic is slipped into this step.
## Handoff Requirements
- Record MITC4 geometry readiness in `PROGRESS.md`.
## Do Not
- Do not silently support strongly warped/nodal-director behavior beyond the documented Phase 1 policy.
@@ -1,54 +0,0 @@
# Sprint Contract: MITC4 Covariant Strain Tying
## Objective
Implement or rebuild the degenerated-continuum displacement interpolation, direct covariant strain rows, and MITC transverse shear tying interpolation.
## Required Reading
- /AGENTS.md
- /docs/MITC4_FORMULATION.md
- /docs/NUMERICAL_CONVENTIONS.md
## Scope
- Implement five-DOF local displacement interpolation.
- Transform global rotations to local `alpha`, `beta`, and `gamma`.
- Compute direct covariant strain rows in documented internal strain order.
- Replace `eps_13` and `eps_23` with midside MITC tying interpolation.
- Add finite-difference tests for strain rows.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not integrate stiffness.
- Do not add material transform.
- Do not compute MITC shear from Cartesian `gamma_xz` and `gamma_yz` first.
## Tests To Write First
- Local rotation transform tests for `alpha`, `beta`, `gamma`.
- Displacement interpolation tests at midsurface and through-thickness points.
- Direct covariant strain finite-difference tests.
- Tying-row tests at `A`, `B`, `C`, and `D`.
- Gauss-point MITC shear interpolation tests proving rows come from tying rows.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Strain vector ordering is documented or explicitly permuted.
- `gamma` does not contribute to physical continuum strain.
- FESA sign convention for `A/C/B/D` is tested.
## Handoff Requirements
- Record strain/tying readiness in `PROGRESS.md`.
## Do Not
- Do not reintroduce direct Gauss-point transverse shear for MITC rows.
@@ -1,54 +0,0 @@
# Sprint Contract: MITC4 Material Integration
## Objective
Implement or rebuild local plane-stress material behavior, shear correction, material transformation, and `2 x 2 x 2` Gauss integration scaffolding.
## Required Reading
- /AGENTS.md
- /docs/MITC4_FORMULATION.md
- /docs/NUMERICAL_CONVENTIONS.md
- /docs/ARCHITECTURE.md
## Scope
- Implement isotropic linear elastic shell material matrix with `sigma_33 = 0` and `kappa = 5/6`.
- Define material/strain ordering tests.
- Implement or verify convected-to-local material transformation for Phase 1 cases.
- Add `2 x 2 x 2` integration point and weight infrastructure.
## Allowed Files
- `include/`
- `src/`
- `tests/`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not add composite sections.
- Do not add stress/strain output recovery as mandatory output.
- Do not switch to analytic thickness integration without equivalence tests and doc update.
## Tests To Write First
- Isotropic matrix value tests for known `E`, `nu`, and `kappa`.
- Shear row ordering tests.
- Integration point count and weights tests.
- Flat element material transform identity/equivalence tests.
- Invalid material/thickness diagnostic tests if not covered earlier.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- `2 x 2 x 2` integration is the active baseline.
- Material transform behavior is tested.
- No reduced integration or hourglass logic is introduced.
## Handoff Requirements
- Record material and integration readiness in `PROGRESS.md`.
## Do Not
- Do not make S4R assumptions in material or integration code.
-101
View File
@@ -1,101 +0,0 @@
{
"project": "FESA",
"phase": "1-linear-static-mitc4",
"steps": [
{
"step": 0,
"name": "build-test-harness",
"status": "completed",
"summary": "Added CMake/CTest build harness and wired validate_workspace.py to configure, build, and run tests."
},
{
"step": 1,
"name": "core-types-diagnostics",
"status": "completed",
"summary": "Added int64/double core aliases, DOF mapping, diagnostics, and tests."
},
{
"step": 2,
"name": "domain-model",
"status": "completed",
"summary": "Added Phase 1 Domain entities for nodes, MITC4 elements, sets, materials, shell sections, loads, boundaries, and steps."
},
{
"step": 3,
"name": "parser-foundation",
"status": "completed",
"summary": "Added Abaqus keyword parsing foundation with diagnostics and exact keyword dispatch."
},
{
"step": 4,
"name": "parser-phase1-subset",
"status": "completed",
"summary": "Implemented Phase 1 Abaqus subset parsing plus explicit unsupported-feature rejection tests."
},
{
"step": 5,
"name": "domain-validation-diagnostics",
"status": "completed",
"summary": "Added Domain validation for missing references, properties, materials, targets, and singular-prone states."
},
{
"step": 6,
"name": "analysis-model-dof-manager",
"status": "completed",
"summary": "Added six-DOF DofManager with constrained/free partitioning, equation numbering, and full-vector reconstruction."
},
{
"step": 7,
"name": "math-solver-adapters",
"status": "completed",
"summary": "Added dense test matrix and deterministic Gaussian solver adapter with singular diagnostics."
},
{
"step": 8,
"name": "results-writer-minimal",
"status": "completed",
"summary": "Added in-memory step/frame/field results for mandatory nodal U and RF outputs."
},
{
"step": 9,
"name": "reference-displacement-comparator",
"status": "completed",
"summary": "Added Abaqus displacement CSV loader and node-id-based comparator with tolerance diagnostics."
},
{
"step": 10,
"name": "mitc4-formulation-closure",
"status": "completed",
"summary": "Closed the Phase 1 MITC4 baseline decisions for tying points, local basis, integration, drilling scale, and U/RF output scope."
},
{
"step": 11,
"name": "mitc4-element-baseline",
"status": "completed",
"summary": "Implemented baseline MITC4 stiffness kernel with shape functions, MITC shear interpolation, local basis, and drilling stabilization tests."
},
{
"step": 12,
"name": "assembly-reaction-recovery",
"status": "completed",
"summary": "Added full-system assembly and RF recovery path using K_full * U_full - F_full."
},
{
"step": 13,
"name": "linear-static-analysis-path",
"status": "completed",
"summary": "Added LinearStaticAnalysis path that assembles, solves, reconstructs full U, recovers RF, and writes results."
},
{
"step": 14,
"name": "stored-reference-regression",
"status": "blocked",
"blocked_reason": "No Phase 1-compatible Abaqus TYPE=S4 reference input with matching *_displacements.csv is available. Existing quad_01 input contains S4R, Part/Assembly/Instance, Density, and NLGEOM=YES and is tested only as unsupported provenance/comparator format."
},
{
"step": 15,
"name": "phase1-evaluator-closeout",
"status": "pending"
}
]
}
-73
View File
@@ -1,73 +0,0 @@
# 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.
-68
View File
@@ -1,68 +0,0 @@
# 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.
-69
View File
@@ -1,69 +0,0 @@
# 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.
-71
View File
@@ -1,71 +0,0 @@
# 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.
-71
View File
@@ -1,71 +0,0 @@
# 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.
-71
View File
@@ -1,71 +0,0 @@
# 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.
-74
View File
@@ -1,74 +0,0 @@
# 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.
-75
View File
@@ -1,75 +0,0 @@
# 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.
-69
View File
@@ -1,69 +0,0 @@
# 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.
-66
View File
@@ -1,66 +0,0 @@
# 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.
-68
View File
@@ -1,68 +0,0 @@
# 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.
-69
View File
@@ -1,69 +0,0 @@
# 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.
-70
View File
@@ -1,70 +0,0 @@
# 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.
-69
View File
@@ -1,69 +0,0 @@
# 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.
-71
View File
@@ -1,71 +0,0 @@
# 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.
-74
View File
@@ -1,74 +0,0 @@
# 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.
@@ -1,16 +0,0 @@
{
"project": "FESA",
"phase": "1-structure-alignment-refactor",
"steps": [
{ "step": 0, "name": "architecture-drift-audit", "status": "completed", "artifact": "step0-architecture-map.md" },
{ "step": 1, "name": "module-scaffold-and-facade", "status": "completed" },
{ "step": 2, "name": "core-domain-dof-extraction", "status": "completed" },
{ "step": 3, "name": "math-solver-extraction", "status": "completed" },
{ "step": 4, "name": "io-parser-extraction", "status": "completed" },
{ "step": 5, "name": "results-reference-extraction", "status": "completed" },
{ "step": 6, "name": "mitc4-geometry-strain-extraction", "status": "completed" },
{ "step": 7, "name": "mitc4-material-stiffness-extraction", "status": "completed" },
{ "step": 8, "name": "assembly-analysis-extraction", "status": "completed" },
{ "step": 9, "name": "architecture-evaluator-closeout", "status": "completed", "artifact": "step9-evaluator-report.md" }
]
}
@@ -1,207 +0,0 @@
# P1A-00 Architecture Drift Audit And Migration Map
Date: 2026-05-05
Author: Codex
## Verdict
Architecture drift is confirmed.
The Phase 1 rebaseline implementation is behaviorally useful and currently validated, but it does not yet follow the module ownership model in `docs/ARCHITECTURE.md`. Production code is concentrated in `include/fesa/fesa.hpp`, while `src/fesa.cpp` only holds numeric static assertions.
This audit is a behavior-preserving migration map. It does not approve parser-scope changes, MITC4 formula changes, reference tolerance changes, solver behavior changes, or numerical convention changes.
## Baseline Evidence
Pre-refactor validation was run before writing this artifact:
```bash
python scripts/validate_workspace.py
```
Result:
- CMake configure succeeded.
- `fesa_core` and `fesa_tests` built successfully.
- CTest ran `fesa_tests` successfully.
- 1 test executable passed.
Current production/test layout:
| Path | Current state |
|---|---|
| `include/fesa/fesa.hpp` | 2682 lines, main production implementation body |
| `src/fesa.cpp` | 8 lines, static assertions only |
| `tests/test_main.cpp` | 1947 lines, all Phase 1 tests and test harness |
| `CMakeLists.txt` | Builds `fesa_core` from only `src/fesa.cpp` |
## Target Module Set
Use the module names documented in `docs/ARCHITECTURE.md`:
```text
Analysis
Assembly
Boundary
Core
Element
IO
Load
Math
Material
Property
Results
Util
```
Keep `include/fesa/fesa.hpp` as an umbrella facade during and after the refactor unless an ADR explicitly changes the public include policy.
## Dependency Direction
Recommended extraction dependency direction:
```text
Core type aliases
-> Util diagnostics/string/numeric helpers
-> Math primitives and solver interfaces
-> Boundary/Load/Property/Material model primitives
-> Core Domain, AnalysisModel, AnalysisState, DofManager
-> IO parser
-> Results and reference comparison
-> Element MITC4 formulation and kernel
-> Assembly
-> Analysis workflow
-> umbrella facade
```
Practical notes:
- `Core` must remain free of `IO`, `Results`, `Assembly`, and `Analysis` dependencies.
- `DofManager` must remain the only owner of equation numbering and constrained/free mapping.
- `AnalysisState` is documented under `Core` in `docs/ARCHITECTURE.md`; later steps should not relocate it to `Analysis` unless the architecture document or an ADR is updated.
- Lightweight `Node` and `Element` model records are ambiguous in `docs/ARCHITECTURE.md`: the directory comment lists them under `Element`, while `Domain` owns them. To avoid a dependency cycle, this audit recommends keeping mesh record types with the domain model in `Core`, while `Element` owns element kernels and formulation code.
## Public API Compatibility Rules
During the refactor:
- `#include <fesa/fesa.hpp>` must keep working for all existing tests and clients.
- Public symbols remain in namespace `fesa`.
- Existing type aliases remain unchanged: `Real = double`, `GlobalId`, `LocalIndex`, `EquationId`, and `SparseIndex` remain signed 64-bit paths.
- Existing class/function names should remain source-compatible unless a narrow compile conflict forces a documented alias or forwarding wrapper.
- Module headers may be introduced for direct includes, but the umbrella header remains the compatibility surface.
- Moving inline definitions to `.cpp` files is allowed only when declarations remain available through the umbrella facade and CMake compiles the moved implementations.
- No MKL, TBB, or HDF5 API may leak into solver core while files are moved.
- Each implementation extraction step must preserve `python scripts/validate_workspace.py`.
## Production Symbol Migration Map
Line numbers refer to the current `include/fesa/fesa.hpp` audit snapshot.
| Current symbols/range | Target module | Extraction step | Notes |
|---|---|---|---|
| `Real`, `GlobalId`, `LocalIndex`, `EquationId`, `SparseIndex` lines 23-27 | `Core` | P1A-02 | Keep centralized; static assertions remain covered. |
| `Severity`, `SourceLocation`, `Diagnostic`, `hasError`, `containsDiagnostic`, `makeDiagnostic` lines 29-59 | `Util` | P1A-02 | Diagnostics may include `Core` type aliases only. |
| `trim`, `lower`, `splitCsv`, `parseReal`, `parseInt64`, `addUnique`, `generatedRange` lines 61-121 and 303-318 | `Util` | P1A-02 | General parsing/list helpers; avoid IO-specific ownership unless helper becomes keyword-specific. |
| `Dof`, `allDofs`, `dofIndex`, `abaqusDofNumber`, `dofFromAbaqus`, `dofLabel`, component-label helpers lines 124-169 | `Core` | P1A-02 | Preserve DOF order `UX,UY,UZ,RX,RY,RZ`. |
| `Vec3`, vector arithmetic, `dot`, `cross`, `norm`, `isFinite`, normalization lines 171-223 | `Math` | P1A-03 | Low-level math primitive used by Core and Element. |
| `Node`, `ElementType`, `Element`, `NodeSet`, `ElementSet`, `StepDefinition`, `Domain` lines 225-300 | `Core` | P1A-02 | Recommended Core ownership to avoid `Core -> Element` cycle; Element module owns kernels. |
| `Material` lines 257-261 | `Material` | P1A-02 or P1A-07 contract refinement | Basic material record is needed by Domain and IO before MITC4 stiffness extraction; see contract refinements below. |
| `ShellSection` lines 263-267 | `Property` | P1A-02 | Phase 1 shell property record. |
| `BoundaryCondition` lines 269-274 | `Boundary` | P1A-02 | Phase 1 fixed-boundary model record; no RBE support added. |
| `NodalLoad` lines 276-280 | `Load` | P1A-02 | Phase 1 concentrated load record; no pressure/body load support added. |
| `KeywordLine`, `parseKeywordLine`, `ParseResult`, `AbaqusInputParser` lines 320-761 | `IO` | P1A-04 | Preserve strict Abaqus Phase 1 subset and unsupported-feature diagnostics. |
| `numericTarget`, `resolveNodeTarget`, `dofNameOrNumber`, `validAbaqusDofRange` lines 763-813 | `Core` or `Util` | P1A-02 | Domain target/DOF helpers used outside parser; keep parser-independent. |
| `shellSectionForElement` lines 790-801 | `Property` | P1A-02 | Property lookup over Domain element sets. |
| `validateDomain` lines 815-960 | `Core` with `Util` diagnostics | P1A-02 | Domain validation/singular-prone model checks; no parser support changes. |
| `AnalysisModel`, `buildLinearStaticAnalysisModel` lines 964-1017 | `Core` | P1A-02 | Architecture document places active model view near Core. |
| `DofAddress`, `DofManager` lines 1019-1146 | `Core` | P1A-02 | Must remain sole equation-numbering owner. |
| `SparsePatternEntry`, `SparsePattern` lines 1149-1166 | `Math` | P1A-03 | Data representation for future sparse path. |
| `buildReducedSparsePattern` lines 1169-1192 | `Assembly` | P1A-08 | It derives assembly pattern from Domain and DofManager; data type remains Math. |
| `DenseMatrix` lines 1195-1235 | `Math` | P1A-03 | Current deterministic dense test matrix, not production sparse backend. |
| `recoverFullReaction` lines 1238-1247 | `Assembly` | P1A-08 | Preserve `K_full * U_full - F_full`. |
| `SolveResult`, `LinearSolver`, `GaussianEliminationSolver` lines 1250-1314 | `Math` | P1A-03 | Keep `LinearSolver` as adapter boundary for future MKL. |
| `ShapeData`, `shapeFunctions`, `LocalBasis` lines 1317-1347 | `Element` | P1A-06 | Current shape helper is MITC4-oriented. |
| `MITC4NaturalPoint`, `MITC4TyingPoint`, node/tying coordinate helpers lines 1350-1369 | `Element` | P1A-06 | Preserve FESA/Abaqus S4 node order and A/B/C/D tying labels. |
| `MITC4DirectorFrame`, `MITC4MidsurfaceDerivatives`, `MITC4Geometry`, `MITC4IntegrationBasis` lines 1372-1410 | `Element` | P1A-06 | Geometry/director/basis layer. |
| MITC4 type aliases and strain component helpers lines 1413-1433 | `Element` | P1A-06 | Preserve strain order contract. |
| `MITC4LocalRotations`, displacement derivative/evaluation/row structs lines 1435-1469 | `Element` | P1A-06 | Kinematic and B-row data. |
| `MITC4MaterialMatrixEvaluation` and `MITC4MaterialMatrix` helpers lines 1472-1488 and 1800-1854 | `Material` | P1A-07 | Plane-stress material law and material vector operations. |
| `MITC4StrainTransform` and transform helpers lines 1481-1488, 1856-1955 | `Element` with `Material` inputs | P1A-07 | Transform depends on integration basis; keep formulas unchanged. |
| `MITC4IntegrationPoint`, material integration sample/data lines 1490-1518 and 1785-1798, 1958-1985 | `Element` | P1A-07 | Element integration scaffolding. |
| Global axis helpers, MITC4 diagnostics, append diagnostics lines 1520-1536 | `Element` or `Util` | P1A-06 | Keep MITC4-specific diagnostics near Element; generic append helper can move to Util. |
| Geometry/director/basis/displacement/strain row functions lines 1540-1779 | `Element` | P1A-06 | No formula/sign changes. |
| `computeLocalBasis` lines 1988-1995 | `Element` | P1A-06 | Legacy-facing wrapper around current geometry policy. |
| `ElementStiffnessOptions`, drilling/stiffness result structs lines 1997-2025 | `Element` | P1A-07 | Drilling scale policy remains documented baseline. |
| Local DOF transform, strain-row transform, `B^T D B`, drilling, stiffness, internal force, `MITC4ElementKernel` lines 2028-2208 | `Element` | P1A-07 | Preserve `2 x 2 x 2`, drilling reference diagonal, and internal force behavior. |
| `AssemblyResult`, `ReducedSystem`, `assembleSystem`, `projectToReducedSystem` lines 2211-2316 | `Assembly` | P1A-08 | Preserve full-space stiffness/load data for RF. |
| `FieldOutput`, `ResultFrame`, `ResultStep`, `ResultFile`, `InMemoryResultsWriter` lines 2319-2417 | `Results` | P1A-05 | Preserve step/frame/field metadata for `U` and `RF`. |
| `AnalysisState` lines 2420-2426 | `Core` | P1A-02 or P1A-08 contract refinement | Architecture document places `AnalysisState` under Core. |
| `AnalysisResult`, `Analysis`, `LinearStaticAnalysis`, `runLinearStaticInputString` lines 2428-2528 | `Analysis` | P1A-08 | Preserve Strategy + Template Method and solver injection. |
| `CsvDisplacementRow`, `CsvDisplacementTable`, CSV loaders, `ComparisonOptions`, `ComparisonResult`, `compareDisplacements` lines 2531-2679 | `Results` | P1A-05 | Reference-comparison layer; no tolerance/header changes. |
## Test Migration And Characterization Map
Keep tests behavior-preserving. Existing tests can remain in `tests/test_main.cpp` initially, but each extraction step should add direct module include smoke tests and may later split tests only with a dedicated contract.
| Test range | Coverage area | Must protect during |
|---|---|---|
| lines 310-331 | Core aliases and DOF mapping | P1A-02 |
| lines 333-544 | Abaqus parser and reference input compatibility | P1A-04 |
| lines 557-678 | `AnalysisModel` and domain validation/singular diagnostics | P1A-02 |
| lines 690-805 | DofManager, full-vector reconstruction, RF formula, sparse connectivity | P1A-02, P1A-03, P1A-08 |
| lines 826-895 | Assembly projection, full-space preservation, Gaussian solver diagnostics | P1A-03, P1A-08 |
| lines 917-1099 | Results schema, CSV loading/comparison, `quad_02_phase1` regression | P1A-05, P1A-08 |
| lines 1116-1492 | MITC4 shape, geometry, strain, tying, material transform/integration | P1A-06, P1A-07 |
| lines 1512-1749 | MITC4 stiffness, drilling, patch, locking-sensitivity, internal force | P1A-07 |
| lines 1777-1920 | Linear static analysis workflow, parse/validation routing, solver injection | P1A-08 |
## Contract Refinements To Consider Before Later Steps
These are not behavior changes, but they are important for avoiding dependency cycles:
1. `AnalysisState` target conflict:
- `docs/ARCHITECTURE.md` places `AnalysisState` under `Core`.
- P1A-08 currently says to extract `AnalysisState` with `Analysis`.
- Recommendation: keep `AnalysisState` in `Core`, or update `docs/ARCHITECTURE.md`/ADR before P1A-08 if a different ownership rule is desired.
2. `Material` model timing:
- `Material` as a domain model record is needed by `Domain`, parser, validation, assembly, and MITC4 stiffness.
- P1A-07 owns material/stiffness helpers, but IO extraction occurs earlier in P1A-04.
- Recommendation: either extract the basic `Material` record before IO extraction, or leave a temporary umbrella-forwarded declaration until P1A-07. Do not create an IO-to-Element dependency for material data.
3. `Node`/`Element` ownership ambiguity:
- `docs/ARCHITECTURE.md` directory comment lists `Node` and `Element` under `Element`.
- `Domain` owns node and element records, and `Core` should not depend on higher-level element kernels.
- Recommendation: keep lightweight mesh records in `Core` and keep MITC4 kernels/formulation in `Element`. If this final layout is accepted, clarify `docs/ARCHITECTURE.md` in a later documentation sync or evaluator closeout.
## Extraction Order
1. P1A-01 creates directories, CMake source boundaries, and module include smoke tests.
2. P1A-02 extracts stable low-level model and state ownership: aliases, diagnostics, DOF mapping, domain model records, validation, `AnalysisModel`, `AnalysisState`, and `DofManager`.
3. P1A-03 extracts `Math` primitives and solver interfaces.
4. P1A-04 extracts `IO` parser while preserving strict unsupported-feature behavior.
5. P1A-05 extracts `Results` and reference comparison.
6. P1A-06 extracts MITC4 geometry, basis, displacement, direct strain, and tying rows.
7. P1A-07 extracts MITC4 material transform, integration, stiffness, drilling, internal force, and kernel.
8. P1A-08 extracts `Assembly` and `Analysis` orchestration.
9. P1A-09 independently evaluates architecture alignment and records any residual debt.
## Non-Negotiable Behavior Locks
- Do not change `Real`, id, equation id, sparse index, or DOF ordering.
- Do not move equation ids into `Node` or `Element`.
- Do not compute `RF` from reduced vectors.
- Do not add parser support for `S4R`, `Part/Assembly/Instance`, `*Include`, pressure loads, nonzero prescribed displacement, or `NLGEOM=YES`.
- Do not change MITC4 formulation, tying signs, integration order, or drilling scale.
- Do not change displacement CSV column mapping or reference tolerances.
- Do not require Abaqus execution.
- Do not add MKL, TBB, or HDF5 dependencies during this refactor phase.
## Handoff To P1A-01
P1A-01 should start by creating the full documented module directory scaffold and include smoke tests while leaving production implementation in place. It should not move large bodies of code yet.
Required P1A-01 baseline checks:
- `include/fesa/fesa.hpp` still compiles as umbrella include.
- New module headers can be included together in tests.
- `python scripts/validate_workspace.py` passes.
- No production behavior changes are introduced.
@@ -1,64 +0,0 @@
# Sprint Contract: Architecture Drift Audit
## Objective
Create a precise migration map from the current monolithic `include/fesa/fesa.hpp` implementation to the module ownership model documented in `docs/ARCHITECTURE.md`, without changing production solver behavior.
## 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-rebaseline/step15-evaluator-report.md
## Scope
- Audit current symbols, functions, classes, and tests that are concentrated in `include/fesa/fesa.hpp` and `tests/test_main.cpp`.
- Assign every Phase 1 production symbol to one target module from `docs/ARCHITECTURE.md`: `Analysis`, `Assembly`, `Boundary`, `Core`, `Element`, `IO`, `Load`, `Math`, `Material`, `Property`, `Results`, or `Util`.
- Produce a handoff artifact at `phases/1-structure-alignment-refactor/step0-architecture-map.md`.
- Identify public API compatibility rules for keeping `include/fesa/fesa.hpp` as an umbrella facade during the refactor.
## Allowed Files
- `phases/1-structure-alignment-refactor/step0-architecture-map.md`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not move C++ code in this step.
- Do not change `CMakeLists.txt`.
- Do not change parser support, MITC4 formulas, solver behavior, reference tolerances, or numerical conventions.
- Do not create new architecture decisions unless the audit proves `docs/ARCHITECTURE.md` itself must change.
## Tests To Write First
- None. This is an audit and handoff step.
- Before writing the audit artifact, run `python scripts/validate_workspace.py` to capture the pre-refactor baseline.
## Reference Artifacts
- `references/quad_02_phase1.inp`
- `references/quad_02_displacements.csv`
These artifacts are baseline evidence only. Do not edit them.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- The map assigns all major Phase 1 production areas from `fesa.hpp` to target modules.
- The map calls out dependency direction and extraction order.
- The map preserves `include/fesa/fesa.hpp` as an umbrella facade unless an ADR changes the public API.
- The map explicitly records that this phase is behavior-preserving.
- PLAN/PROGRESS reflect this architecture debt as active work.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record changed files, validation output, and any blockers in `PROGRESS.md`.
- Keep the next refactor step in `PLAN.md`.
## Do Not
- Do not treat this audit as approval to change formulas or parser scope.
- Do not use this phase to close R-010 or R-013.
@@ -1,63 +0,0 @@
# Sprint Contract: Module Scaffold And Facade
## Objective
Create the target module directory scaffold and public include facade policy so later steps can move code incrementally while preserving existing tests and user includes.
## Required Reading
- /AGENTS.md
- /PROGRESS.md
- /PLAN.md
- /docs/README.md
- /docs/HARNESS_ENGINEERING.md
- /docs/ARCHITECTURE.md
- /docs/ADR.md
- /phases/1-structure-alignment-refactor/step0-architecture-map.md
## Scope
- Add the documented module directories under `include/fesa/` and `src/` as needed, including `Analysis`, `Assembly`, `Boundary`, `Core`, `Element`, `IO`, `Load`, `Math`, `Material`, `Property`, `Results`, and `Util`.
- Update `CMakeLists.txt` so future `.cpp` files under the module directories are compiled by `fesa_core`.
- Keep `include/fesa/fesa.hpp` as the stable umbrella header for current tests and clients.
- Add minimal module header smoke coverage proving selected module headers and `fesa/fesa.hpp` can be included together.
## Allowed Files
- `CMakeLists.txt`
- `include/fesa/`
- `src/`
- `tests/`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not move large implementations yet.
- Do not change class names, namespaces, DOF order, result labels, parser behavior, or solver outputs.
- Do not add MKL, TBB, or HDF5 dependencies.
- Do not replace the umbrella header with module-only includes.
## Tests To Write First
- Add or update a compile/include smoke test that includes the new module headers and `fesa/fesa.hpp` together.
- The test should fail before the scaffold exists and pass after the scaffold is added.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Module directory names align with `docs/ARCHITECTURE.md`.
- `fesa_core` builds with the scaffold on Windows/MSVC.
- Existing tests still include `fesa/fesa.hpp` successfully.
- New module headers do not expose external MKL, TBB, or HDF5 APIs.
- No solver behavior changes are mixed into the scaffold.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record validation output and any CMake/source-list decisions in `PROGRESS.md`.
- Leave detailed code movement to later steps.
## Do Not
- Do not introduce broad formatting churn in `fesa.hpp`.
- Do not change public API semantics while creating empty or thin module boundaries.
@@ -1,77 +0,0 @@
# Sprint Contract: Core Domain DOF Extraction
## Objective
Move core types, diagnostics, domain data, validation, `AnalysisModel`, `DofManager`, and Phase 1 boundary/load/property model ownership out of the monolithic header into the documented `Core`, `Util`, `Boundary`, `Load`, and `Property` module 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-structure-alignment-refactor/step0-architecture-map.md
- /phases/1-structure-alignment-refactor/step1.md
## Scope
- Extract numeric aliases, diagnostics, DOF enum/mapping, domain entities, domain validation helpers, `AnalysisModel`, and `DofManager`.
- Extract Phase 1 `BoundaryCondition`, `NodalLoad`, and `ShellSection` ownership into `Boundary`, `Load`, and `Property` module headers or implementation files while keeping `Domain` as the aggregate input model.
- Keep `Node` and `Element` free of equation ids.
- Keep `Domain` as input-model ownership and treat it as immutable after parsing.
- Preserve existing symbol names and the `fesa` namespace unless a compiler-visible conflict requires a narrow adjustment.
## Allowed Files
- `include/fesa/fesa.hpp`
- `include/fesa/Core/`
- `include/fesa/Util/`
- `include/fesa/Boundary/`
- `include/fesa/Load/`
- `include/fesa/Property/`
- `src/Core/`
- `src/Util/`
- `src/Boundary/`
- `src/Load/`
- `src/Property/`
- `tests/`
- `CMakeLists.txt`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not move parser, MITC4 element, assembly, analysis, solver, material-law, or result writer code in this step except for include dependency repair.
- Do not change DOF order or Abaqus DOF mapping.
- Do not change reaction recovery formulas.
- Do not add runtime polymorphic interfaces that are not needed for this extraction.
## Tests To Write First
- Add or update focused tests proving module includes expose `DofManager`, `Domain`, diagnostics, DOF mapping, Phase 1 boundary/load/property model types, and the umbrella header.
- Preserve existing DofManager and domain validation behavioral tests as characterization tests.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- Core ownership matches `docs/ARCHITECTURE.md`.
- Boundary, Load, and Property Phase 1 model types are no longer hidden only in `fesa.hpp`.
- `DofManager` still owns constrained/free mapping, equation numbering, sparse connectivity inputs, and full-vector reconstruction.
- Numeric aliases remain `double` and signed int64.
- `Node` and `Element` do not store global equation ids.
- Existing parser, analysis, and reference tests still pass.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record moved files and any remaining Core symbols still left in `fesa.hpp`.
- Update `PLAN.md` if the extraction reveals a dependency cycle that requires a later contract change.
## Do Not
- Do not weaken tests to accommodate include-order problems.
- Do not let `Core` depend on `IO`, `Element`, `Assembly`, `Analysis`, or `Results`.
- Do not create circular dependencies between `Core`, `Boundary`, `Load`, and `Property`.
@@ -1,66 +0,0 @@
# Sprint Contract: Math Solver Extraction
## Objective
Move math primitives, dense test matrix support, sparse pattern data, and linear solver interfaces into `Math` while keeping future MKL integration behind an adapter boundary.
## 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-structure-alignment-refactor/step0-architecture-map.md
- /phases/1-structure-alignment-refactor/step2.md
## Scope
- Extract vector/matrix helpers, `DenseMatrix`, sparse pattern structures, `SolveResult`, `LinearSolver`, and the deterministic test solver.
- Keep the production-facing solver dependency expressed through `LinearSolver`.
- Preserve int64 sparse index and equation-number boundaries.
- Keep MKL/PARDISO as a future adapter, not a Phase 1 dependency.
## Allowed Files
- `include/fesa/fesa.hpp`
- `include/fesa/Math/`
- `src/Math/`
- `include/fesa/Core/`
- `src/Core/`
- `tests/`
- `CMakeLists.txt`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not introduce MKL, TBB, HDF5, or production sparse storage.
- Do not change Gaussian solver numerical behavior except for mechanical relocation.
- Do not move MITC4, parser, results, assembly, or analysis logic except for include dependency repair.
## Tests To Write First
- Add or update include/link tests for the `Math` module.
- Preserve existing small linear algebra, sparse-pattern, solver-injection, and singular-solver diagnostic tests as characterization tests.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- `Math` does not depend on `IO`, `Results`, `Element`, `Assembly`, or `Analysis`.
- `LinearSolver` remains an adapter boundary.
- All ids, equation ids, nonzero counts, and sparse indices remain int64.
- Solver failure diagnostics still propagate to analysis tests.
- No external library API leaks into solver core.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record moved math/solver files and any remaining math symbols still left in `fesa.hpp`.
## Do Not
- Do not optimize the solver while moving files.
- Do not replace deterministic tests with tolerance changes.
@@ -1,72 +0,0 @@
# 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.
@@ -1,72 +0,0 @@
# 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.
@@ -1,68 +0,0 @@
# Sprint Contract: MITC4 Geometry Strain Extraction
## Objective
Move MITC4 geometry, director, natural-coordinate, displacement, direct covariant strain, and MITC shear-tying helpers into the `Element` module without changing the documented formulation.
## 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/MITC4_FORMULATION.md
- /docs/VERIFICATION_PLAN.md
- /phases/1-structure-alignment-refactor/step0-architecture-map.md
- /phases/1-structure-alignment-refactor/step3.md
## Scope
- Extract MITC4 natural points, tying points, director frames, geometry, integration basis, displacement derivative helpers, direct strain rows, and MITC shear tying rows.
- Keep the FESA/Abaqus S4 node order and tying-point labels unchanged.
- Keep diagnostics for invalid thickness, singular center normal, singular basis, and singular Jacobian.
- Keep `drilling` handling out of this step except where existing local rotation structures require it.
## Allowed Files
- `include/fesa/fesa.hpp`
- `include/fesa/Element/`
- `src/Element/`
- `include/fesa/Core/`
- `include/fesa/Math/`
- `tests/`
- `CMakeLists.txt`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not change MITC4 formulas, signs, tying interpolation, basis construction, or tolerances.
- Do not move stiffness integration or material matrix code in this step unless needed only to resolve declarations.
- Do not add S4R, reduced integration, hourglass control, pressure loads, or nonlinear geometry.
## Tests To Write First
- Add or update include/link tests for MITC4 geometry/strain module headers.
- Preserve finite-difference, tying interpolation, geometry, basis, and diagnostic tests as characterization tests.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- MITC4 geometry/strain helpers live in `Element`.
- The implementation still matches `docs/MITC4_FORMULATION.md`.
- FESA tying point sign convention remains unchanged.
- No parser, assembly, or result behavior changes are mixed in.
- Existing MITC4 geometry and strain tests still pass.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record moved MITC4 geometry/strain files and any remaining Element symbols still left in `fesa.hpp`.
## Do Not
- Do not simplify or rewrite the formulation during relocation.
- Do not tune tests around floating-point drift unless a real relocation-induced bug is found and fixed.
@@ -1,70 +0,0 @@
# Sprint Contract: MITC4 Material Stiffness Extraction
## Objective
Move MITC4 material matrix, covariant-to-local transform, integration scaffolding, drilling stabilization, stiffness assembly, and internal force helpers into the documented `Element` and `Material` module 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
- /docs/MITC4_FORMULATION.md
- /docs/VERIFICATION_PLAN.md
- /phases/1-structure-alignment-refactor/step0-architecture-map.md
- /phases/1-structure-alignment-refactor/step6.md
## Scope
- Extract plane-stress MITC4 material matrix helpers and material diagnostics.
- Extract `2 x 2 x 2` integration data, stiffness accumulation, local/global transform, drilling stabilization, `MITC4ElementKernel`, and internal force helpers.
- Keep `drilling_stiffness_scale = 1.0e-3` and reference-diagonal policy unchanged.
- Keep `Element` responsible for MITC4 element kernel behavior; keep reusable material-law helpers under `Material` if separated.
## Allowed Files
- `include/fesa/fesa.hpp`
- `include/fesa/Element/`
- `src/Element/`
- `include/fesa/Material/`
- `src/Material/`
- `include/fesa/Math/`
- `tests/`
- `CMakeLists.txt`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not change MITC4 stiffness formulas, drilling policy, integration order, or patch-test tolerances.
- Do not add stress/resultant output.
- Do not add reduced integration, S4R, hourglass control, nonlinear tangent stiffness, or pressure loads.
- Do not change assembly behavior beyond include dependency repair.
## Tests To Write First
- Add or update include/link tests for MITC4 stiffness/material module headers.
- Preserve stiffness symmetry, rigid body, drilling sensitivity, internal force, patch, and locking-sensitivity tests as characterization tests.
## Reference Artifacts
- None.
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- MITC4 material and stiffness code no longer lives in the umbrella header as implementation.
- Drilling policy matches `docs/MITC4_FORMULATION.md`.
- Element patch and locking-sensitivity tests still pass.
- No unsupported Abaqus behavior or result output is added.
- Public facade includes remain compatible.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record moved MITC4 material/stiffness files and any remaining MITC4 implementation still left in `fesa.hpp`.
## Do Not
- Do not optimize or parallelize element stiffness in this relocation step.
- Do not use reference displacement mismatch to retune formulation parameters.
@@ -1,82 +0,0 @@
# Sprint Contract: Assembly Analysis Extraction
## Objective
Move full-space assembly, reduced projection, reaction recovery path, analysis state/result objects, and linear static workflow into `Assembly` and `Analysis` while preserving Phase 1 solver behavior.
## 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
- /docs/MITC4_FORMULATION.md
- /docs/VERIFICATION_PLAN.md
- /phases/1-structure-alignment-refactor/step0-architecture-map.md
- /phases/1-structure-alignment-refactor/step2.md
- /phases/1-structure-alignment-refactor/step3.md
- /phases/1-structure-alignment-refactor/step5.md
- /phases/1-structure-alignment-refactor/step7.md
## Scope
- Extract `AssemblyResult`, `ReducedSystem`, full-space assembly, reduced projection, and full-vector reaction recovery helpers into `Assembly`.
- Extract `AnalysisState`, `AnalysisResult`, `Analysis`, `LinearStaticAnalysis`, and input-to-analysis convenience workflow into `Analysis`.
- Keep Strategy + Template Method structure visible.
- Preserve `RF = K_full * U_full - F_full`.
- Preserve solver adapter injection and deterministic default solver behavior.
## Allowed Files
- `include/fesa/fesa.hpp`
- `include/fesa/Assembly/`
- `src/Assembly/`
- `include/fesa/Analysis/`
- `src/Analysis/`
- `include/fesa/Core/`
- `include/fesa/Element/`
- `include/fesa/Math/`
- `include/fesa/Results/`
- `include/fesa/IO/`
- `tests/`
- `CMakeLists.txt`
- `phases/1-structure-alignment-refactor/index.json`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not change solve algorithms, convergence logic, boundary-condition semantics, or result schema.
- Do not add nonlinear, dynamic, heat-transfer, pressure-load, RBE, or HDF5 behavior.
- Do not compute reactions from reduced quantities.
- Do not add production sparse storage beyond the existing scaffold.
## Tests To Write First
- Add or update include/link tests for `Assembly` and `Analysis` module headers.
- Preserve assembly, reduced solve, solver injection, full-vector RF, input-to-result workflow, and `quad_02_phase1` reference 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
- Assembly owns full-space stiffness/load preservation and reduced projection.
- Analysis owns execution flow and state updates.
- `DofManager` remains the owner of equation numbering and full/reduced mapping.
- Full-vector RF recovery is unchanged.
- `quad_02_phase1` displacement regression still passes.
## Handoff Requirements
- Update this step status in `phases/1-structure-alignment-refactor/index.json`.
- Record moved assembly/analysis files and any remaining production implementation still left in `fesa.hpp`.
## Do Not
- Do not hide a behavior change under the label "refactor".
- Do not broaden Phase 1 feature scope.
@@ -1,56 +0,0 @@
# Evaluation Feedback: P1A-09 Architecture Evaluator Closeout
Date: 2026-05-05
Evaluator: Codex
## Verdict
pass
## Findings
No material architecture, guardrail, numerical-convention, parser-subset, result-schema, or validation regressions were found.
## Evidence
- Required project guardrails and topic documents were read before evaluation: `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`, `docs/RESULTS_SCHEMA.md`, and `docs/MITC4_FORMULATION.md`.
- `include/fesa/fesa.hpp` is now an umbrella include facade only. A direct search for implementation tokens such as `namespace fesa {`, `inline`, `class`, `struct`, `enum`, and `using` in that file returned no matches.
- Production symbols are no longer concentrated in `fesa.hpp`; they are separated under the documented module families in `include/fesa/Analysis`, `include/fesa/Assembly`, `include/fesa/Boundary`, `include/fesa/Core`, `include/fesa/Element`, `include/fesa/IO`, `include/fesa/Load`, `include/fesa/Math`, `include/fesa/Material`, `include/fesa/Property`, `include/fesa/Results`, and `include/fesa/Util`.
- Matching `src/` module directories and thin `.cpp` compile units exist for the architecture module set, and `CMakeLists.txt` compiles `src/*.cpp` recursively into `fesa_core`.
- Current implementation bodies remain mostly inline in module headers. This is accepted for this refactor because the sprint contracts allowed module headers or implementation files and the migration goal was to remove `fesa.hpp` as the primary implementation body. If stricter `.cpp` implementation ownership is desired later, it should be handled by a dedicated ABI/build-time hardening contract.
- `Node`, `Element`, and the lightweight `Material` domain record remain under `Core` as planned in the P1A-00 migration map to avoid a `Core -> Element` or `Core -> Material` dependency cycle. Element kernels and MITC4 material-law helpers are owned by `Element` and `Material`.
- Direct module include tests exist for Core, Math, IO, Results, Element, MITC4 stiffness, Assembly, and Analysis.
- `quad_02_phase1` remains the executable stored-reference path for Phase 1, and the displacement CSV regression is still covered by the main validation test suite.
## Checklist
| Item | Result | Notes |
|---|---|---|
| Contract compliance | PASS | Evaluation-only step changed only phase/status/handoff files. |
| Architecture alignment | PASS | `fesa.hpp` is a facade; module ownership is now visible under `include/fesa/*` with matching `src/*` compile units. |
| Numerical conventions | PASS | No DOF order, precision, int64, constrained/free mapping, or full-vector RF behavior was changed. |
| Abaqus subset discipline | PASS | No new parser support was added; unsupported Abaqus/CAE scaffolding remains outside Phase 1 parser scope. |
| MITC4 formulation | PASS | No formulation, tying sign, integration, drilling, or stiffness behavior was changed by this evaluator step. |
| Results schema | PASS | `U` and `RF` result model behavior remains covered by tests. |
| Reference verification | PASS | `references/quad_02_phase1.inp` and `references/quad_02_displacements.csv` remain the active stored displacement regression path. |
| Validation | PASS | `python scripts\validate_workspace.py` passed; CTest reported 9/9 test executables passed. |
| Handoff | PASS | Phase status, `PLAN.md`, and `PROGRESS.md` were updated. |
## Residual Non-Blocking Gaps
- R-010 remains open: reaction-force CSV artifacts are not yet onboarded with a documented schema, tolerance, and automated comparison.
- R-013 remains open: the PRD target of three stored Phase 1 reference cases is not yet satisfied.
- Optional future hardening: move large inline module bodies from public headers into `.cpp` files if compile-time, ABI, or encapsulation policy later requires it. This should not be mixed with solver behavior changes.
## Acceptance Commands
```powershell
python scripts\validate_workspace.py
```
Result:
- CMake configure succeeded.
- `fesa_core` and all test executables built successfully.
- CTest passed 9 of 9 test executables.
- Validation succeeded.
@@ -1,70 +0,0 @@
# Sprint Contract: Architecture Evaluator Closeout
## Objective
Independently evaluate the completed structure-alignment refactor against `docs/ARCHITECTURE.md`, persistent project guardrails, tests, reference artifacts, and phase handoff requirements.
## 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
- /docs/RESULTS_SCHEMA.md
- /docs/MITC4_FORMULATION.md
- /phases/1-structure-alignment-refactor/index.json
- /phases/1-structure-alignment-refactor/step0-architecture-map.md
## Scope
- Review the final production layout under `include/fesa/` and `src/`.
- Confirm the umbrella header is a facade, not the primary implementation body.
- Confirm source ownership matches the `src/` directory structure in `docs/ARCHITECTURE.md`.
- Run validation and inspect stored-reference regression status.
- Produce an evaluator report at `phases/1-structure-alignment-refactor/step9-evaluator-report.md`.
- Update phase status, `PLAN.md`, and `PROGRESS.md`.
## Allowed Files
- `phases/index.json`
- `phases/1-structure-alignment-refactor/index.json`
- `phases/1-structure-alignment-refactor/step9-evaluator-report.md`
- `PLAN.md`
- `PROGRESS.md`
## Explicit Non-Goals
- Do not implement missing refactor work in the evaluator step.
- Do not change solver behavior or tests to make evaluation pass.
- Do not claim full PRD Phase 1 completion unless R-010 and R-013 are also resolved.
- Do not approve a layout that still relies on `fesa.hpp` as the main implementation location.
## Tests To Write First
- None. This is an evaluator-only step.
## Reference Artifacts
- `references/quad_02_phase1.inp`
- `references/quad_02_displacements.csv`
## Acceptance Commands
```bash
python scripts/validate_workspace.py
```
## Evaluator Checklist
- `src/Analysis`, `src/Assembly`, `src/Boundary`, `src/Core`, `src/Element`, `src/IO`, `src/Load`, `src/Math`, `src/Material`, `src/Property`, `src/Results`, and `src/Util` exist as needed and own their documented implementation areas.
- `include/fesa/fesa.hpp` is a compatibility facade and does not contain the bulk of production implementation.
- Public tests and direct module include tests pass.
- Parser subset, MITC4 formulation, numerical conventions, result schema, and reference comparison behavior are unchanged.
- `quad_02_phase1` stored displacement regression still passes.
- PLAN/PROGRESS clearly state any residual architecture debt.
## Handoff Requirements
- If passed, mark `1-structure-alignment-refactor` completed in `phases/index.json`.
- If failed, write concrete findings and required fixes in `step9-evaluator-report.md` and keep the phase pending or blocked.
- Keep R-010 and R-013 visible if they remain unresolved.
## Do Not
- Do not self-approve incomplete module separation.
- Do not let a passing compile hide architecture drift.
-19
View File
@@ -1,19 +0,0 @@
{
"phases": [
{
"dir": "1-linear-static-mitc4",
"status": "blocked",
"blocked_reason": "Superseded by 1-linear-static-mitc4-rebaseline after the MITC4 formulation reset. Keep this phase as historical execution record; do not resume old P1-15/P1-16 without an explicit recovery decision."
},
{
"dir": "1-linear-static-mitc4-rebaseline",
"status": "completed",
"completion_note": "P1R-15 evaluator closeout passed on 2026-05-04. Product-level Phase 1 reference gaps R-010 and R-013 remain tracked in PLAN.md."
},
{
"dir": "1-structure-alignment-refactor",
"status": "completed",
"completion_note": "P1A-09 evaluator closeout passed on 2026-05-05. Architecture readiness gap R-014 is closed; product-level reference gaps R-010 and R-013 remain tracked in PLAN.md."
}
]
}