docs: add phase 1 sprint contracts

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