15 KiB
PLAN
Purpose
PLAN.md is the shared forward-looking work plan for FESA agents.
Every new agent session must read this file together with PROGRESS.md before planning or editing. Keep this file focused on what should happen next, not on long historical notes.
How To Use
- Update this file when project priorities, planned phases, task ownership, or open decisions change.
- Keep tasks concrete enough that another agent can continue without private context.
- Link to the owning design document for each task when possible.
- Do not mark work complete here. Move completion notes to
PROGRESS.md. - If an item becomes obsolete, move it to
PROGRESS.mdwith a short reason instead of silently deleting it.
Current Objective
Prepare FESA for Phase 1 implementation planning: a reference-verified linear static MITC4 shell solver using the documented architecture, numerical conventions, Abaqus input subset, HDF5 result schema, and stored reference artifacts.
Required Reading For New Agents
AGENTS.mdPROGRESS.mdPLAN.mddocs/README.mddocs/HARNESS_ENGINEERING.mddocs/PRD.mddocs/ARCHITECTURE.mddocs/ADR.mddocs/NUMERICAL_CONVENTIONS.mddocs/ABAQUS_INPUT_SUBSET.mddocs/VERIFICATION_PLAN.mddocs/RESULTS_SCHEMA.mddocs/MITC4_FORMULATION.md
Phase 1 Readiness Tasks
| ID | Status | Owner | Task | Source |
|---|---|---|---|---|
| R-004 | pending | MITC4 formulation agent | Finalize MITC4 transverse shear tying-point equations. | docs/MITC4_FORMULATION.md |
| R-005 | pending | MITC4 formulation agent | Finalize MITC4 local shell basis algorithm for flat and non-flat quads. | docs/MITC4_FORMULATION.md, docs/NUMERICAL_CONVENTIONS.md |
| R-006 | pending | MITC4 formulation agent | Finalize default artificial drilling stiffness scale and parameter name. | docs/MITC4_FORMULATION.md |
| R-007 | pending | user + architecture agent | Decide whether Phase 1 outputs only U and RF, or also S, E, and SF. |
docs/RESULTS_SCHEMA.md, docs/MITC4_FORMULATION.md |
| R-008 | pending | user + phase planner | Decide build system; CMake is recommended unless project constraints say otherwise. | README.md, docs/README.md |
| R-009 | pending | verification agent | Define and implement the automated loader/comparator contract for references/*_displacements.csv. |
docs/VERIFICATION_PLAN.md, docs/RESULTS_SCHEMA.md |
| R-010 | pending | user + verification agent | Add or define reaction-force reference artifacts, preferably *_reactions.csv, or decide that Phase 1 RF is verified by equilibrium tests until Abaqus RF CSV is available. |
docs/VERIFICATION_PLAN.md, docs/RESULTS_SCHEMA.md |
| R-011 | pending | user + Abaqus compatibility agent | Add at least one Phase 1-compatible Abaqus TYPE=S4 input case; keep quad_01.inp as stored S4R/NLGEOM reference provenance until S4R/nonlinear support is intentionally added. |
docs/ABAQUS_INPUT_SUBSET.md, docs/VERIFICATION_PLAN.md |
Phase 1 Definition Of Done
Phase 1 is complete only when FESA can run a documented linear static MITC4 workflow from input to verified results without requiring Abaqus execution.
Required capabilities:
- Parse the Phase 1 Abaqus input subset into
Domain:*Node,*Element,*Nset,*Elset,*Material,*Elastic,*Shell Section,*Boundary,*Cload,*Step,*Static,*End Step. - Reject unsupported features with diagnostics, including
S4R,Part/Assembly/Instance,*Include, pressure loads, nonzero prescribed displacement, andNLGEOM=YES. - Build
AnalysisModelfor one active linear static step. - Manage six shell DOFs per node with
DofManager:UX,UY,UZ,RX,RY,RZ. - Apply fixed boundary conditions by constrained DOF elimination.
- Assemble a sparse global linear system with int64 ids/indices/equation numbers and
doublevalues. - Solve the reduced free-DOF system through a solver interface that can later bind to MKL.
- Reconstruct full vectors and recover
RF = K_full * U_full - F_full. - Write minimum Phase 1 results: model ids/connectivity plus
UandRFin the documented step/frame/field layout. - Compare
Uagainst storedreferences/*_displacements.csvartifacts. - Provide singular system diagnostics for missing constraints, missing properties/materials, invalid references, untouched free DOFs, and solver singularity.
- Pass unit, integration, reference, and negative tests required by
docs/VERIFICATION_PLAN.md.
Out of scope:
- Abaqus
S4Rexecution semantics, hourglass control, pressure loads, RBE2/RBE3, nonzero prescribed displacements, geometric/material nonlinearity, dynamics, heat transfer, composite sections, and mesh quality diagnostics.
Phase 1 Execution Gates
Each gate should be satisfied before moving to the next implementation band unless the user explicitly accepts a documented deferral.
| Gate | Status | Requirement | Evidence |
|---|---|---|---|
| G0 - Planning readiness | pending | Readiness tasks R-004 through R-011 are completed or explicitly deferred. | Updated docs, PLAN.md, PROGRESS.md |
| G1 - Build and validation | pending | Build system, test framework, and scripts/validate_workspace.py run real checks. |
Validation command output |
| G2 - Parser and domain | pending | Phase 1 .inp subset parses into Domain; unsupported features fail clearly. |
Parser tests and diagnostics tests |
| G3 - DOF/math/results infrastructure | pending | Core types, DofManager, sparse math adapters, minimal results writer, and CSV comparator are tested. | Unit tests and schema/comparator tests |
| G4 - MITC4 element readiness | pending | MITC4 formulation open decisions are closed and element-level tests pass. | Updated formulation doc and element tests |
| G5 - End-to-end solver | pending | Linear static path writes U/RF and passes stored-reference and negative tests. |
Integration/reference regression output |
Phase 1 Implementation Milestones
All milestones are intended to become one or more self-contained sprint contracts or phases/{phase}/stepN.md files. Each sprint must follow docs/HARNESS_ENGINEERING.md and be evaluated independently.
| ID | Status | Owner | Objective | Depends On | Acceptance Focus |
|---|---|---|---|---|---|
| P1-00 | pending | harness sprint planner | Convert this PLAN into executable phase files with sprint contracts. | R-004..R-011 status reviewed | Phase files contain objective, scope, allowed files, tests-first plan, reference artifacts, evaluator checklist |
| P1-01 | pending | build/system generator | Establish C++ project skeleton, build system, test framework, and validation script integration. | R-008 | python scripts/validate_workspace.py runs build/test checks |
| P1-02 | pending | core generator | Add core numeric/id types, DOF enum, diagnostics primitives, and logging/error result conventions. | P1-01 | Tests for int64 aliases, DOF mapping, diagnostic payloads |
| P1-03 | pending | domain generator | Implement immutable-ish Domain entities: nodes, elements, sets, materials, shell properties, loads, boundaries, steps. |
P1-02 | Tests for construction, lookup, duplicate ids, label preservation |
| P1-04 | pending | parser generator | Implement Abaqus lexical/keyword parser foundation and Phase 1 object factories/registries. | P1-03 | Parser smoke tests for supported keywords and line-numbered diagnostics |
| P1-05 | pending | parser generator | Complete *Nset, *Elset, material, shell section, boundary, cload, step/static/end-step subset behavior. |
P1-04 | Supported subset tests; reject S4R, NLGEOM=YES, Part/Assembly/Instance |
| P1-06 | pending | validation generator | Implement domain validation and singular-prone pre-solve diagnostics. | P1-05 | Missing node/set/material/property/load/BC diagnostics and no-active-element tests |
| P1-07 | pending | dof generator | Implement AnalysisModelBuilder and DofManager for 6-DOF nodes, constrained/free mapping, equation numbering, sparse pattern input, and full/reduced reconstruction. |
P1-06 | Exact mapping tests, constrained elimination tests, reconstruction tests |
| P1-08 | pending | math generator | Implement vector/sparse matrix/linear solver interfaces and a deterministic test solver adapter. | P1-07 | Sparse pattern tests, reduced-system solve tests, no MKL leakage into core APIs |
| P1-09 | pending | results generator | Implement minimal result model and writer boundary for U and RF step/frame/field outputs. |
P1-07, P1-08 | Schema tests for ids, component labels, frame metadata, int64/double storage |
| P1-10 | pending | verification generator | Implement references/*_displacements.csv loader and comparator for FESA U output. |
P1-09, R-009 | Column validation, node-id matching, abs/rel tolerance tests |
| P1-11 | pending | MITC4 formulation agent | Finalize MITC4 transverse shear tying points, local basis, integration ordering, drilling stiffness default, and Phase 1 output scope. | R-004, R-005, R-006, R-007 | docs/MITC4_FORMULATION.md updated and reviewed |
| P1-12 | pending | element generator | Implement MITC4 shape functions, local basis utility, element stiffness skeleton, and drilling stiffness parameter path. | P1-11, P1-08 | Shape function, derivative, 24x24 dimension, symmetry, rigid body, drilling sensitivity tests |
| P1-13 | pending | assembly generator | Implement assembly of element stiffness/load contributions into full and reduced system data while preserving full-space data for reactions. | P1-12, P1-07, P1-08 | Assembly tests and full-vector reaction recovery test |
| P1-14 | pending | analysis generator | Implement LinearStaticAnalysis Template Method path: build model, DOFs, sparse pattern, assemble, constrain, solve, update state, write results. |
P1-09, P1-13 | End-to-end small model test with U and RF |
| P1-15 | pending | verification generator | Add stored-reference regression suite using accepted Phase 1-compatible cases and quad_01 compatibility notes. |
P1-10, P1-14, R-011 | At least one displacement CSV comparison; unsupported quad_01.inp is not treated as Phase 1 support |
| P1-16 | pending | evaluator | Run full Phase 1 evaluator pass and close documentation/handoff gaps. | P1-15 | Harness evaluator report, updated PROGRESS.md, remaining Phase 2 items recorded in PLAN.md |
Phase 1 Sprint Contract Rules
Every implementation milestone above must be decomposed into one or more contracts before code changes begin.
Contract requirements:
- One contract should usually touch one layer or one module.
- Each contract must list allowed files and explicit non-goals.
- Each contract must list tests to write before implementation.
- Each contract must state whether it uses
references/*.inporreferences/*_displacements.csv. - Each contract must include
python scripts/validate_workspace.pyplus any focused test command available after P1-01. - Each contract must include an evaluator checklist tied to the milestone acceptance focus.
- Generator work must not begin if the contract relies on unresolved MITC4 formulas or undocumented reference tolerances.
Phase 1 Verification Strategy
Verification should grow with the implementation bands:
- Unit tests: core types, DOF enum, diagnostics, parser tokens, label handling.
- Parser tests: supported keywords, generated sets, duplicate/missing references, unsupported keyword diagnostics.
- DOF/math tests: constrained/free partition, equation numbering, sparse pattern, reduced solve, full reconstruction.
- Results tests: HDF5 or writer boundary schema for
UandRF; component labels and frame metadata. - Reference comparator tests: CSV header validation, node matching, tolerance pass/fail behavior.
- Element tests: MITC4 shape functions, stiffness symmetry, rigid body behavior, drilling stiffness sensitivity.
- Assembly/analysis tests: small known systems, full-vector reaction recovery, singular negative cases.
- Stored-reference tests: at least one Phase 1-compatible displacement CSV comparison first, then three accepted stored cases for Phase 1 completion.
Phase 1 Reference Plan
Current reference state:
references/quad_01.inpandreferences/quad_01_displacements.csvare accepted stored artifacts.quad_01.inpcontainsS4R,Part/Assembly/Instance,*Density, andNLGEOM=YES; it is not a Phase 1 parser acceptance case as-is.
Required reference additions or decisions:
- Add at least one Phase 1-compatible
TYPE=S4linear static.inpcase. - Decide first
quad_01_displacements.csvtolerance for comparator testing. - Add
*_reactions.csvor explicitly use internal equilibrium tests for Phase 1RFuntil Abaqus RF output is available. - Add more small cases until Phase 1 can pass one single-element case, one simple multi-element plate/shell case, and one curved shell benchmark.
Phase 1 Risk Controls
- Do not implement MITC4 element stiffness until the formulation gate in
docs/MITC4_FORMULATION.mdis closed. - Do not use
quad_01.inpto justifyS4R,Part/Assembly/Instance, orNLGEOM=YESsupport. - Do not compute reactions from reduced vectors only.
- Do not expose MKL, TBB, or HDF5 APIs directly in solver core.
- Do not narrow ids, equation numbers, or sparse indices below int64.
- Do not allow
NodeorElementto own global equation ids. - Do not treat a passing build as Phase 1 validation without parser, DOF, reference, and singular negative tests.
Current Non-Goals
- Do not implement solver code before readiness tasks are addressed.
- Do not require Abaqus execution locally or in CI.
- Do not add mesh quality diagnostics in Phase 1.
- Do not support Abaqus
S4Rin Phase 1. - Do not silently expand the Abaqus input subset beyond
docs/ABAQUS_INPUT_SUBSET.md.
Codex Extension Follow-up Tasks
| ID | Status | Owner | Task | Source |
|---|---|---|---|---|
| C-002 | pending | user + Codex | Confirm hook behavior in the actual Codex runtime on native Windows after features.codex_hooks is enabled. |
.codex/hooks.json, .codex/hooks/*.py |
| C-003 | pending | user + Codex | Decide whether any .codex/skills/* should be mirrored under .agents/skills/ for environments that only scan the default skill folders. |
.codex/config.toml, .codex/skills/ |
| C-004 | pending | user + Codex | Confirm that the fesa-commands repo plugin appears in the active Codex plugin/command surface after marketplace registration. |
plugins/fesa-commands/, .agents/plugins/marketplace.json |
Open Questions
- Which Abaqus version will generate reference artifacts?
- What is the default drilling stiffness scale?
- Which MITC4 stress/strain/resultant outputs are mandatory in Phase 1?
- Should CMake be adopted as the first build system?
- What tolerance should be used for the first
quad_01_displacements.csvcomparison? - Will Phase 1
RFbe checked from Abaqus reaction CSV or from internal equilibrium tests first?