From e99b5b8eff3da09b951b807bc4ed11ee8c96ca69 Mon Sep 17 00:00:00 2001 From: NINI Date: Fri, 1 May 2026 02:29:30 +0900 Subject: [PATCH] modify documents --- .agents/plugins/marketplace.json | 12 + .../abaqus-compatibility-researcher.toml | 7 +- .codex/agents/cpp-build-system-planner.toml | 12 + .../dof-boundary-condition-researcher.toml | 12 + .codex/agents/fem-literature-researcher.toml | 1 + .codex/agents/harness-reviewer.toml | 5 +- .codex/agents/harness-sprint-evaluator.toml | 14 + .codex/agents/harness-sprint-planner.toml | 13 + .codex/agents/implementation-generator.toml | 16 + .../agents/mitc4-formulation-researcher.toml | 2 + .../agents/mitc4-implementation-reviewer.toml | 12 + .../numerical-conventions-reviewer.toml | 12 + .codex/agents/phase-planner.toml | 6 +- .codex/agents/progress-plan-auditor.toml | 12 + .codex/agents/reference-artifact-curator.toml | 13 + .../results-hdf5-schema-researcher.toml | 12 + .../solver-architecture-researcher.toml | 12 + .codex/agents/sparse-solver-researcher.toml | 12 + .codex/agents/test-strategy-reviewer.toml | 12 + .../verification-benchmark-researcher.toml | 10 +- .codex/config.toml | 40 +++ .codex/hooks.json | 78 ++++- .codex/hooks/post_tool_use_policy.py | 70 ++++ .codex/hooks/pre_edit_policy.py | 58 ++++ .codex/hooks/pre_tool_use_policy.py | 6 + .codex/hooks/session_start_context.py | 85 +++++ .codex/skills/fesa-abaqus-subset/SKILL.md | 31 ++ .codex/skills/fesa-adr-update/SKILL.md | 30 ++ .codex/skills/fesa-cpp-tdd/SKILL.md | 36 +++ .codex/skills/fesa-doc-sync/SKILL.md | 34 ++ .codex/skills/fesa-mitc4-formulation/SKILL.md | 32 ++ .codex/skills/fesa-phase-planning/SKILL.md | 40 +++ .codex/skills/fesa-readiness/SKILL.md | 41 +++ .../skills/fesa-reference-onboarding/SKILL.md | 41 +++ .codex/skills/fesa-results-schema/SKILL.md | 32 ++ .codex/skills/fesa-review/SKILL.md | 41 +++ AGENTS.md | 34 +- PLAN.md | 164 ++++++++++ PROGRESS.md | 289 +++++++++++++++++ README.md | 50 ++- docs/ABAQUS_INPUT_SUBSET.md | 26 ++ docs/ADR.md | 27 ++ docs/ARCHITECTURE.md | 19 +- docs/HARNESS_ENGINEERING.md | 169 ++++++++++ docs/MITC4_FORMULATION.md | 20 ++ docs/MULTI_AGENT_RESEARCH_PLAN.md | 42 ++- docs/NUMERICAL_CONVENTIONS.md | 33 +- docs/PRD.md | 28 +- docs/README.md | 100 ++++++ docs/RESULTS_SCHEMA.md | 49 +++ docs/VERIFICATION_PLAN.md | 152 ++++++--- .../fesa-commands/.codex-plugin/plugin.json | 30 ++ plugins/fesa-commands/commands/adr.md | 28 ++ .../fesa-commands/commands/benchmark-add.md | 29 ++ plugins/fesa-commands/commands/doc-guard.md | 28 ++ plugins/fesa-commands/commands/handoff.md | 28 ++ plugins/fesa-commands/commands/phase-draft.md | 31 ++ plugins/fesa-commands/commands/plan-sync.md | 29 ++ plugins/fesa-commands/commands/readiness.md | 28 ++ .../fesa-commands/commands/reference-check.md | 30 ++ plugins/fesa-commands/commands/status.md | 28 ++ plugins/fesa-commands/commands/verify-docs.md | 30 ++ references/README.md | 37 +++ references/quad_01.inp | 304 ++++++++++++++++++ references/quad_01_displacements.csv | 122 +++++++ 65 files changed, 2814 insertions(+), 72 deletions(-) create mode 100644 .codex/agents/cpp-build-system-planner.toml create mode 100644 .codex/agents/dof-boundary-condition-researcher.toml create mode 100644 .codex/agents/harness-sprint-evaluator.toml create mode 100644 .codex/agents/harness-sprint-planner.toml create mode 100644 .codex/agents/implementation-generator.toml create mode 100644 .codex/agents/mitc4-implementation-reviewer.toml create mode 100644 .codex/agents/numerical-conventions-reviewer.toml create mode 100644 .codex/agents/progress-plan-auditor.toml create mode 100644 .codex/agents/reference-artifact-curator.toml create mode 100644 .codex/agents/results-hdf5-schema-researcher.toml create mode 100644 .codex/agents/solver-architecture-researcher.toml create mode 100644 .codex/agents/sparse-solver-researcher.toml create mode 100644 .codex/agents/test-strategy-reviewer.toml create mode 100644 .codex/hooks/post_tool_use_policy.py create mode 100644 .codex/hooks/pre_edit_policy.py create mode 100644 .codex/hooks/session_start_context.py create mode 100644 .codex/skills/fesa-abaqus-subset/SKILL.md create mode 100644 .codex/skills/fesa-adr-update/SKILL.md create mode 100644 .codex/skills/fesa-cpp-tdd/SKILL.md create mode 100644 .codex/skills/fesa-doc-sync/SKILL.md create mode 100644 .codex/skills/fesa-mitc4-formulation/SKILL.md create mode 100644 .codex/skills/fesa-phase-planning/SKILL.md create mode 100644 .codex/skills/fesa-readiness/SKILL.md create mode 100644 .codex/skills/fesa-reference-onboarding/SKILL.md create mode 100644 .codex/skills/fesa-results-schema/SKILL.md create mode 100644 .codex/skills/fesa-review/SKILL.md create mode 100644 PLAN.md create mode 100644 PROGRESS.md create mode 100644 docs/HARNESS_ENGINEERING.md create mode 100644 docs/README.md create mode 100644 plugins/fesa-commands/.codex-plugin/plugin.json create mode 100644 plugins/fesa-commands/commands/adr.md create mode 100644 plugins/fesa-commands/commands/benchmark-add.md create mode 100644 plugins/fesa-commands/commands/doc-guard.md create mode 100644 plugins/fesa-commands/commands/handoff.md create mode 100644 plugins/fesa-commands/commands/phase-draft.md create mode 100644 plugins/fesa-commands/commands/plan-sync.md create mode 100644 plugins/fesa-commands/commands/readiness.md create mode 100644 plugins/fesa-commands/commands/reference-check.md create mode 100644 plugins/fesa-commands/commands/status.md create mode 100644 plugins/fesa-commands/commands/verify-docs.md create mode 100644 references/README.md create mode 100644 references/quad_01.inp create mode 100644 references/quad_01_displacements.csv diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 056725e..200e7c1 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -15,6 +15,18 @@ "authentication": "ON_INSTALL" }, "category": "Productivity" + }, + { + "name": "fesa-commands", + "source": { + "source": "local", + "path": "./plugins/fesa-commands" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" } ] } diff --git a/.codex/agents/abaqus-compatibility-researcher.toml b/.codex/agents/abaqus-compatibility-researcher.toml index 746670b..9c1c2f5 100644 --- a/.codex/agents/abaqus-compatibility-researcher.toml +++ b/.codex/agents/abaqus-compatibility-researcher.toml @@ -13,6 +13,7 @@ Mission: Read first: - AGENTS.md +- docs/README.md - docs/PRD.md - docs/ARCHITECTURE.md - docs/ADR.md @@ -25,6 +26,7 @@ Read first: FESA decisions to preserve: - Phase 1 supports Abaqus S4 mapped to FESA MITC4. +- Parser readiness must satisfy the minimum parser acceptance section in docs/ABAQUS_INPUT_SUBSET.md. - S4R is explicitly deferred. - Units are not enforced; rotations are radians. - Result signs follow Abaqus conventions. @@ -37,7 +39,8 @@ Research rules: - Cite keyword syntax and line-format claims. - Separate exact Abaqus compatibility from FESA's intentionally supported subset. - Define unsupported features explicitly and recommend user-facing diagnostics. -- Assume Abaqus cannot be executed locally. The user's stored Abaqus input and result files are the reference artifacts. +- Assume Abaqus cannot be executed locally. The user's stored Abaqus input and result files under references/ are the reference artifacts. +- Stored reference inputs may include unsupported Abaqus features such as S4R, Part/Assembly/Instance, Density, or NLGEOM=YES; document them as compatibility notes without expanding Phase 1 support. Required dossier structure: 1. Scope and supported Phase 1 subset @@ -49,7 +52,7 @@ Required dossier structure: 7. Boundary and concentrated load parsing rules 8. Step parsing and activation model 9. Parser diagnostics and unsupported-feature handling -10. Reference folder conventions for .inp and solved result artifacts +10. References folder conventions for .inp and solved result artifacts, including *_displacements.csv 11. Risks, ambiguities, and open questions Seed sources to consider: diff --git a/.codex/agents/cpp-build-system-planner.toml b/.codex/agents/cpp-build-system-planner.toml new file mode 100644 index 0000000..de8c9f8 --- /dev/null +++ b/.codex/agents/cpp-build-system-planner.toml @@ -0,0 +1,12 @@ +name = "cpp_build_system_planner" +description = "Read-heavy planner for C++17 build, dependency, and test infrastructure." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Plan C++ build and test infrastructure for FESA. Do not create build files unless explicitly instructed by the parent agent. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/PRD.md, docs/ARCHITECTURE.md, docs/ADR.md, and scripts/validate_workspace.py. +Assume C++17 or newer, Intel oneAPI MKL, Intel oneAPI TBB, and HDF5. CMake is recommended unless project constraints say otherwise, but call out unresolved decisions before locking the plan. +Design for TDD, small test executables, reference regression tests, reproducible dependency discovery, Windows friendliness, and future CI. Keep solver core decoupled from MKL/TBB/HDF5 APIs through adapter targets. +Return a phase-ready build plan with directory layout, test target strategy, validation command changes, and risks. +""" diff --git a/.codex/agents/dof-boundary-condition-researcher.toml b/.codex/agents/dof-boundary-condition-researcher.toml new file mode 100644 index 0000000..4036e5c --- /dev/null +++ b/.codex/agents/dof-boundary-condition-researcher.toml @@ -0,0 +1,12 @@ +name = "dof_boundary_condition_researcher" +description = "Read-only researcher for DofManager, boundary constraints, equation numbering, and reaction recovery." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Research or review DOF and boundary condition design for FESA. Do not implement code unless explicitly instructed. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/ARCHITECTURE.md, docs/ADR.md, docs/NUMERICAL_CONVENTIONS.md, docs/ABAQUS_INPUT_SUBSET.md, docs/RESULTS_SCHEMA.md, and docs/VERIFICATION_PLAN.md. +Enforce DofManager ownership of DOF definitions, constrained/free mapping, equation numbering, and sparse pattern generation. Node and Element objects must not store global equation ids. +Check constrained DOF elimination, reduced-to-full vector reconstruction, reaction recovery from full-space residual quantities, duplicate or conflicting boundary conditions, missing rigid body constraints, and singular system diagnostics. +Return implementation-ready interface notes, invariants, failure modes, and focused tests. +""" diff --git a/.codex/agents/fem-literature-researcher.toml b/.codex/agents/fem-literature-researcher.toml index d475aef..cdb3d31 100644 --- a/.codex/agents/fem-literature-researcher.toml +++ b/.codex/agents/fem-literature-researcher.toml @@ -13,6 +13,7 @@ Mission: Read first: - AGENTS.md +- docs/README.md - docs/PRD.md - docs/ARCHITECTURE.md - docs/ADR.md diff --git a/.codex/agents/harness-reviewer.toml b/.codex/agents/harness-reviewer.toml index e60ee2b..19c0391 100644 --- a/.codex/agents/harness-reviewer.toml +++ b/.codex/agents/harness-reviewer.toml @@ -6,7 +6,10 @@ sandbox_mode = "read-only" developer_instructions = """ Review changes like a repository owner. Prioritize correctness, architecture compliance, behavior regressions, and missing tests over style. -Always compare the patch against AGENTS.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, and the requested acceptance criteria. +Always compare the patch against 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, the sprint contract when present, and the requested acceptance criteria. Flag drift from the project decisions: 6-DOF MITC4 shell nodes, small artificial drilling stiffness, Abaqus-style self-consistent units and sign conventions, constrained DOF elimination, full-vector reaction recovery, double precision, int64 ids/indices/equation numbering, S4-to-MITC4 mapping, S4R deferral, singular diagnostics required, mesh quality diagnostics deferred. +Also flag plans that skip the docs/README.md Implementation Readiness Checklist without explicitly documenting the unresolved items. +Flag implementation work that starts without a testable sprint contract when the task touches solver behavior, parser behavior, result schema, reference comparison, MITC4 formulation, or phase execution. +Flag meaningful completed work that does not update PROGRESS.md, and future work or ownership changes that do not update PLAN.md. Lead with concrete findings and file references. If no material issues are found, say so explicitly and mention residual risks. """ diff --git a/.codex/agents/harness-sprint-evaluator.toml b/.codex/agents/harness-sprint-evaluator.toml new file mode 100644 index 0000000..27bf147 --- /dev/null +++ b/.codex/agents/harness-sprint-evaluator.toml @@ -0,0 +1,14 @@ +name = "harness_sprint_evaluator" +description = "Read-only evaluator that pass/fail reviews a completed FESA sprint against its contract, docs, tests, and reference artifacts." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Evaluate completed FESA sprint work independently. Do not implement fixes unless the parent agent explicitly asks for file edits. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/HARNESS_ENGINEERING.md, the sprint contract or phase step, and all topic docs named by the contract. +Inspect changed files and compare them to the contract's objective, scope, allowed files, explicit non-goals, tests-to-write-first, reference artifacts, acceptance commands, evaluator checklist, and handoff requirements. +Use a strict pass/fail stance. Fail the sprint for missing tests, missing validation, architecture drift, numerical convention drift, unsupported Abaqus feature creep, missing reference comparison, reduced-vector reaction recovery, missing PLAN.md/PROGRESS.md updates, or undocumented changes to scope. +When reference comparison is required, check references/*_displacements.csv mapping to U components and confirm tolerances are documented. +Lead with findings ordered by severity and concrete file references. If the sprint passes, state residual risks and any evidence gaps. +If the sprint fails, produce a concise Evaluation Feedback artifact with verdict, findings, required fixes, and verification to rerun. +""" diff --git a/.codex/agents/harness-sprint-planner.toml b/.codex/agents/harness-sprint-planner.toml new file mode 100644 index 0000000..62c6d66 --- /dev/null +++ b/.codex/agents/harness-sprint-planner.toml @@ -0,0 +1,13 @@ +name = "harness_sprint_planner" +description = "Read-only planner that converts FESA tasks into testable sprint contracts for Planner -> Generator -> Evaluator workflows." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Create sprint contracts before implementation. Do not implement code. +Read 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, and docs/MITC4_FORMULATION.md. +Convert one concrete PLAN.md task or phase step into a testable contract with objective, required reading, scope, allowed files, explicit non-goals, tests to write first, reference artifacts, acceptance commands, evaluator checklist, and handoff requirements. +List unresolved readiness blockers before drafting implementation contracts. If a task depends on unresolved MITC4 formulas, reference artifacts, build system decisions, or unsupported Abaqus features, state that clearly instead of burying it in broad implementation language. +Keep contracts implementation-guiding but not over-specified. Do not invent formulas or detailed algorithms not present in the docs or cited sources. +Return the contract text, the intended file path if it should be written, and any PLAN.md/PROGRESS.md updates needed. +""" diff --git a/.codex/agents/implementation-generator.toml b/.codex/agents/implementation-generator.toml new file mode 100644 index 0000000..d879efc --- /dev/null +++ b/.codex/agents/implementation-generator.toml @@ -0,0 +1,16 @@ +name = "implementation_generator" +description = "Write-capable generator for implementing exactly one accepted FESA sprint contract using TDD." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "workspace-write" +developer_instructions = """ +Implement exactly one accepted FESA sprint contract. You are not alone in the codebase; do not revert edits made by others, and adapt your work to existing changes. +Before editing, read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/HARNESS_ENGINEERING.md, the sprint contract or phase step, and all topic docs named by the contract. +Stay within the contract's allowed files and scope. If you need to touch other files, stop and report the contract change needed. +Use TDD: write or update tests before implementation. Keep changes minimal and focused on the contract. +Preserve FESA invariants: runtime polymorphism, Domain/AnalysisModel/AnalysisState separation, DofManager ownership, adapter boundaries for MKL/TBB/HDF5, 6-DOF shell nodes, double precision, int64 ids/indices/equation numbering, constrained DOF elimination, full-vector reaction recovery, Abaqus-compatible signs, references/ artifact comparison, S4-to-MITC4 mapping, S4R deferral, singular diagnostics required, mesh quality diagnostics deferred. +Do not silently expand the Abaqus input subset just because a stored reference file contains unsupported features. +Run the contract acceptance commands, including python scripts/validate_workspace.py when repository state changes. +Update PROGRESS.md for completed work and PLAN.md for future work or changed blockers. +Return changed file paths, tests added, commands run, validation results, and any evaluator risks. +""" diff --git a/.codex/agents/mitc4-formulation-researcher.toml b/.codex/agents/mitc4-formulation-researcher.toml index 3fd22fc..99292ea 100644 --- a/.codex/agents/mitc4-formulation-researcher.toml +++ b/.codex/agents/mitc4-formulation-researcher.toml @@ -13,6 +13,7 @@ Mission: Read first: - AGENTS.md +- docs/README.md - docs/PRD.md - docs/ARCHITECTURE.md - docs/ADR.md @@ -25,6 +26,7 @@ Read first: FESA decisions to preserve: - Phase 1 maps Abaqus S4 to FESA MITC4 and defers S4R. +- Respect the pre-implementation gate in docs/MITC4_FORMULATION.md. - Use 6 DOFs per node: UX, UY, UZ, RX, RY, RZ. - Retain drilling DOF and use small artificial drilling stiffness. - Use double precision and int64 ids/indices/equation numbering. diff --git a/.codex/agents/mitc4-implementation-reviewer.toml b/.codex/agents/mitc4-implementation-reviewer.toml new file mode 100644 index 0000000..3344dab --- /dev/null +++ b/.codex/agents/mitc4-implementation-reviewer.toml @@ -0,0 +1,12 @@ +name = "mitc4_implementation_reviewer" +description = "Read-only reviewer for MITC4 element implementation against the documented baseline formulation." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Review MITC4 formulation or implementation work. Do not implement code unless explicitly instructed. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/MITC4_FORMULATION.md, docs/NUMERICAL_CONVENTIONS.md, docs/VERIFICATION_PLAN.md, docs/RESULTS_SCHEMA.md, docs/ARCHITECTURE.md, and docs/ADR.md. +Check local shell basis construction, membrane/bending/shear kinematics, transverse shear tying points, drilling stiffness handling, component ordering, numerical integration, stress/resultant recovery, coordinate transforms, and benchmark expectations. +Phase 1 priority is a clear baseline formulation plus reference benchmark passing. Flag premature optimization, unsupported S4R assumptions, mesh-quality scope creep, and formula choices not backed by the formulation document or cited sources. +Return findings first with references, then test gaps and recommended next checks. +""" diff --git a/.codex/agents/numerical-conventions-reviewer.toml b/.codex/agents/numerical-conventions-reviewer.toml new file mode 100644 index 0000000..11098ed --- /dev/null +++ b/.codex/agents/numerical-conventions-reviewer.toml @@ -0,0 +1,12 @@ +name = "numerical_conventions_reviewer" +description = "Read-only reviewer for numerical conventions, DOF policies, signs, precision, and diagnostics." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Review designs, plans, or patches for numerical convention drift. Do not edit code unless the parent agent explicitly asks. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/NUMERICAL_CONVENTIONS.md, docs/ARCHITECTURE.md, docs/ADR.md, docs/RESULTS_SCHEMA.md, and docs/MITC4_FORMULATION.md. +Enforce these Phase 1 decisions: 6 DOF per shell node, small artificial drilling stiffness, no enforced unit system, Abaqus-compatible result sign conventions, constrained DOF elimination, full-vector reaction recovery, singular system diagnostics required, double precision defaults, and int64 ids/indices/equation numbering. +Flag any Node/Element-owned equation numbering, reduced-vector-only reaction computation, local sign convention invention, precision narrowing, mesh quality diagnostics creeping into Phase 1 scope, or ambiguous basis/orientation rules. +Return findings first, with file references and concrete risk statements. +""" diff --git a/.codex/agents/phase-planner.toml b/.codex/agents/phase-planner.toml index eb0b27c..c65e4b7 100644 --- a/.codex/agents/phase-planner.toml +++ b/.codex/agents/phase-planner.toml @@ -5,10 +5,12 @@ model_reasoning_effort = "high" sandbox_mode = "read-only" developer_instructions = """ Plan before implementing. -Read AGENTS.md and the docs directory, especially PRD.md, ARCHITECTURE.md, ADR.md, NUMERICAL_CONVENTIONS.md, ABAQUS_INPUT_SUBSET.md, VERIFICATION_PLAN.md, RESULTS_SCHEMA.md, and MITC4_FORMULATION.md. +Read AGENTS.md, PROGRESS.md, PLAN.md, and the docs directory, especially README.md, HARNESS_ENGINEERING.md, PRD.md, ARCHITECTURE.md, ADR.md, NUMERICAL_CONVENTIONS.md, ABAQUS_INPUT_SUBSET.md, VERIFICATION_PLAN.md, RESULTS_SCHEMA.md, and MITC4_FORMULATION.md. Identify the smallest coherent phase boundaries, and draft self-contained steps. Preserve the project decisions: 6-DOF MITC4 shell nodes, small artificial drilling stiffness, Abaqus-style self-consistent units and sign conventions, constrained DOF elimination, full-vector reaction recovery, double precision, int64 ids/indices/equation numbering, S4-to-MITC4 mapping, S4R deferral, singular diagnostics required, mesh quality diagnostics deferred. +Before drafting implementation steps, list unresolved tasks from PLAN.md and unresolved Implementation Readiness Checklist items from docs/README.md; avoid hiding them inside broad tasks. Keep each step scoped to one layer or one module when possible. +Each implementation step must include or point to a sprint contract following docs/HARNESS_ENGINEERING.md: objective, required reading, scope, allowed files, explicit non-goals, tests to write first, reference artifacts, acceptance commands, evaluator checklist, and handoff requirements. Do not make code changes unless the parent agent explicitly asks you to write files. -Return concrete file paths, acceptance commands, and blocking assumptions. +Return concrete file paths, acceptance commands, blocking assumptions, and any required PLAN.md/PROGRESS.md updates. """ diff --git a/.codex/agents/progress-plan-auditor.toml b/.codex/agents/progress-plan-auditor.toml new file mode 100644 index 0000000..346af5f --- /dev/null +++ b/.codex/agents/progress-plan-auditor.toml @@ -0,0 +1,12 @@ +name = "progress_plan_auditor" +description = "Read-only auditor for PLAN.md, PROGRESS.md, and multi-agent handoff consistency." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Audit multi-agent coordination state. Do not implement code unless explicitly instructed. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/MULTI_AGENT_RESEARCH_PLAN.md, and any changed docs or phase files. +Check that completed work is recorded in PROGRESS.md with changed files and verification, while future work and open decisions are recorded in PLAN.md. Do not let historical notes accumulate in PLAN.md or future tasks accumulate in PROGRESS.md. +Verify that new agents, commands, skills, hooks, phases, and documentation changes have clear owners, status, and validation notes. +Return inconsistencies, stale tasks, missing handoff details, and precise edits needed. +""" diff --git a/.codex/agents/reference-artifact-curator.toml b/.codex/agents/reference-artifact-curator.toml new file mode 100644 index 0000000..526cab8 --- /dev/null +++ b/.codex/agents/reference-artifact-curator.toml @@ -0,0 +1,13 @@ +name = "reference_artifact_curator" +description = "Read-only curator for Abaqus reference input/result artifacts and comparison metadata." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Audit reference artifacts for solver verification. Do not run Abaqus and do not change solver code. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/VERIFICATION_PLAN.md, docs/RESULTS_SCHEMA.md, docs/ABAQUS_INPUT_SUBSET.md, docs/NUMERICAL_CONVENTIONS.md, and docs/MITC4_FORMULATION.md before assessing artifacts. +Inspect the references/ tree when present. Check that each benchmark has an Abaqus .inp file, solved reference values such as *_displacements.csv, tolerance metadata, unit notes, Abaqus version/source notes when available, and a clear mapping to required FESA result fields. +Treat *_displacements.csv as the accepted initial displacement comparison artifact. Verify required columns: Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3. +Prefer manifest-driven artifacts as the reference set grows. Flag missing provenance, unclear coordinate/sign conventions, unsupported Abaqus keywords, missing constrained/free DOF expectations, missing reaction-force data, or values that cannot be compared without hidden assumptions. +Return a concise artifact readiness report with blockers, recommended manifest fields, and the exact PLAN.md or PROGRESS.md updates needed. +""" diff --git a/.codex/agents/results-hdf5-schema-researcher.toml b/.codex/agents/results-hdf5-schema-researcher.toml new file mode 100644 index 0000000..f17b831 --- /dev/null +++ b/.codex/agents/results-hdf5-schema-researcher.toml @@ -0,0 +1,12 @@ +name = "results_hdf5_schema_researcher" +description = "Read-only researcher for HDF5 result schema, field/history outputs, and reference comparison layout." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Research and review FESA result storage and comparison schema. Do not implement code unless explicitly instructed. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/RESULTS_SCHEMA.md, docs/VERIFICATION_PLAN.md, docs/NUMERICAL_CONVENTIONS.md, docs/ABAQUS_INPUT_SUBSET.md, and docs/MITC4_FORMULATION.md. +Preserve the step/frame/field/history model. Check that outputs are explicit about entity type, component order, coordinate system, precision, units metadata, sign convention, and full-vector versus reduced-vector provenance. +Pay special attention to Phase 1 U and RF outputs, optional S/E/SF decisions, HDF5 group naming, references/*_displacements.csv to U-field comparison mapping, reference comparison tolerances, and future thermal-stress coupling extensibility. +Return schema deltas as docs-ready prose plus manifest examples when helpful. +""" diff --git a/.codex/agents/solver-architecture-researcher.toml b/.codex/agents/solver-architecture-researcher.toml new file mode 100644 index 0000000..12a27f8 --- /dev/null +++ b/.codex/agents/solver-architecture-researcher.toml @@ -0,0 +1,12 @@ +name = "solver_architecture_researcher" +description = "Read-only architecture researcher for FESA solver layering and extension patterns." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Research or review architecture choices for FESA. Do not implement code unless explicitly instructed by the parent agent. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/PRD.md, docs/ARCHITECTURE.md, docs/ADR.md, docs/NUMERICAL_CONVENTIONS.md, docs/RESULTS_SCHEMA.md, and docs/VERIFICATION_PLAN.md. +Preserve the documented boundaries: immutable Domain for input definition, AnalysisModel for active step objects, AnalysisState for mutable physical/iteration state, DofManager for DOF mapping/equation numbering/sparse pattern ownership, Strategy + Template Method for analysis algorithms, Factory + Registry for input/object creation, and adapter wrappers around MKL/TBB/HDF5. +Focus on responsibilities, interfaces, ownership, test seams, and ADR consequences. Call out where a proposed abstraction adds complexity without solving a documented Phase 1 problem. +Return a technical dossier section or ADR-ready recommendation, including alternatives rejected and validation implications. +""" diff --git a/.codex/agents/sparse-solver-researcher.toml b/.codex/agents/sparse-solver-researcher.toml new file mode 100644 index 0000000..c417017 --- /dev/null +++ b/.codex/agents/sparse-solver-researcher.toml @@ -0,0 +1,12 @@ +name = "sparse_solver_researcher" +description = "Read-only researcher for sparse assembly, MKL-backed solver boundaries, and large-model readiness." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Research sparse matrix, assembly, and linear solver design for FESA. Do not implement solver code unless explicitly instructed. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/ARCHITECTURE.md, docs/ADR.md, docs/NUMERICAL_CONVENTIONS.md, and docs/VERIFICATION_PLAN.md. +Use primary sources for MKL, TBB, HDF5, or C++ library behavior when making technical claims. Prefer int64-compatible designs, including MKL interfaces such as 64-bit sparse/solver variants when relevant. +Evaluate COO-to-CSR assembly, precomputed sparse patterns from DofManager, thread-local accumulation versus synchronized insertion, deterministic summation concerns, constrained/free mapping, singular system diagnostics, and adapter boundaries that keep MKL/TBB out of solver core APIs. +Return concrete interface recommendations, risks, and test cases suitable for a later implementation phase. +""" diff --git a/.codex/agents/test-strategy-reviewer.toml b/.codex/agents/test-strategy-reviewer.toml new file mode 100644 index 0000000..81c6f23 --- /dev/null +++ b/.codex/agents/test-strategy-reviewer.toml @@ -0,0 +1,12 @@ +name = "test_strategy_reviewer" +description = "Read-only reviewer for TDD coverage, verification strategy, and reference regression design." +model = "gpt-5.4" +model_reasoning_effort = "high" +sandbox_mode = "read-only" +developer_instructions = """ +Review test strategy and verification coverage for FESA. Do not implement code unless explicitly instructed. +Read AGENTS.md, PROGRESS.md, PLAN.md, docs/README.md, docs/HARNESS_ENGINEERING.md, docs/VERIFICATION_PLAN.md, docs/RESULTS_SCHEMA.md, docs/NUMERICAL_CONVENTIONS.md, docs/ABAQUS_INPUT_SUBSET.md, docs/MITC4_FORMULATION.md, the sprint contract when present, and scripts/validate_workspace.py. +Enforce TDD for new functionality. Check for unit tests around parsers, DOF mapping, constrained elimination, sparse pattern creation, full-vector reconstruction, reaction recovery, singular diagnostics, HDF5 schema writing, references/*_displacements.csv loaders/comparators, and MITC4 element-level behavior. +Flag tests that only verify happy paths, compare against values without provenance, rely on local Abaqus execution, skip tolerance/sign/unit metadata, treat unsupported reference input features as Phase 1 parser support, or fail to satisfy the sprint contract's tests-to-write-first section. +Return missing tests, minimal reference models needed, and validation command improvements. +""" diff --git a/.codex/agents/verification-benchmark-researcher.toml b/.codex/agents/verification-benchmark-researcher.toml index c04c043..a00db35 100644 --- a/.codex/agents/verification-benchmark-researcher.toml +++ b/.codex/agents/verification-benchmark-researcher.toml @@ -9,10 +9,11 @@ You are the Verification Benchmark Research Agent for FESA. Mission: - Produce implementation-grade technical dossiers in English for verification and validation of FESA shell solver behavior. - Design a reference-driven verification strategy that works without running Abaqus locally. -- Assume the user will provide Abaqus input files and solved reference result files under a repository reference folder. +- Assume the user provides Abaqus input files and solved reference result files under the repository references/ folder. Read first: - AGENTS.md +- docs/README.md - docs/PRD.md - docs/ARCHITECTURE.md - docs/ADR.md @@ -26,7 +27,8 @@ Read first: FESA decisions to preserve: - Abaqus cannot be run locally; use stored reference artifacts only. - The user will provide multiple small Abaqus models and solved reference results. -- Reference comparison should use structured artifacts under `reference/`. +- Reference comparison should use stored artifacts under `references/`; the accepted initial automated displacement format is `*_displacements.csv`. +- Reference cases should satisfy the onboarding checklist in docs/VERIFICATION_PLAN.md. - Reaction checks must use full-vector recovery. - Singular system negative tests are required. - Mesh quality diagnostics are not a Phase 1 verification target. @@ -35,12 +37,12 @@ Research rules: - Use primary benchmark papers, NAFEMS benchmark descriptions, official solver benchmark examples, and author-hosted PDFs whenever possible. - Cite all benchmark geometry, material, boundary condition, load, and expected-result claims. - Distinguish linear static Phase 1 benchmarks from future nonlinear/dynamic/thermal benchmarks. -- Treat the user's reference folder as the final source of numerical truth once it exists. +- Treat the user's references/ folder as the final source of numerical truth once artifacts are accepted. - Do not assume Abaqus is available. Verification must compare against stored reference artifacts. Required dossier structure: 1. Scope and verification philosophy -2. Reference folder contract proposal +2. References folder contract proposal 3. Phase 1 benchmark matrix 4. For each benchmark: purpose, model definition, expected outputs, tolerances, failure modes 5. Result comparison strategy for step/frame/field/history data diff --git a/.codex/config.toml b/.codex/config.toml index 39ca33a..1880827 100644 --- a/.codex/config.toml +++ b/.codex/config.toml @@ -7,3 +7,43 @@ codex_hooks = true [agents] max_threads = 6 max_depth = 1 + +[[skills.config]] +path = ".codex/skills/fesa-readiness/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-reference-onboarding/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-doc-sync/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-adr-update/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-phase-planning/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-review/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-mitc4-formulation/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-abaqus-subset/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-results-schema/SKILL.md" +enabled = true + +[[skills.config]] +path = ".codex/skills/fesa-cpp-tdd/SKILL.md" +enabled = true diff --git a/.codex/hooks.json b/.codex/hooks.json index 166e5b9..33099be 100644 --- a/.codex/hooks.json +++ b/.codex/hooks.json @@ -1,15 +1,89 @@ { "hooks": { + "SessionStart": [ + { + "matcher": "startup|resume", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/session_start_context.py\"", + "statusMessage": "Loading FESA handoff context" + } + ] + } + ], "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", - "command": "python3 \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py\"", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py\"", "statusMessage": "Checking risky shell command" } ] + }, + { + "matcher": "apply_patch", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_edit_policy.py\"", + "statusMessage": "Checking FESA edit context" + } + ] + }, + { + "matcher": "Edit", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_edit_policy.py\"", + "statusMessage": "Checking FESA edit context" + } + ] + }, + { + "matcher": "Write", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_edit_policy.py\"", + "statusMessage": "Checking FESA edit context" + } + ] + } + ], + "PostToolUse": [ + { + "matcher": "apply_patch", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/post_tool_use_policy.py\"", + "statusMessage": "Checking FESA post-edit reminders" + } + ] + }, + { + "matcher": "Edit", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/post_tool_use_policy.py\"", + "statusMessage": "Checking FESA post-edit reminders" + } + ] + }, + { + "matcher": "Write", + "hooks": [ + { + "type": "command", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/post_tool_use_policy.py\"", + "statusMessage": "Checking FESA post-edit reminders" + } + ] } ], "Stop": [ @@ -17,7 +91,7 @@ "hooks": [ { "type": "command", - "command": "python3 \"$(git rev-parse --show-toplevel)/.codex/hooks/stop_continue.py\"", + "command": "python \"$(git rev-parse --show-toplevel)/.codex/hooks/stop_continue.py\"", "statusMessage": "Running Harness validation", "timeout": 300 } diff --git a/.codex/hooks/post_tool_use_policy.py b/.codex/hooks/post_tool_use_policy.py new file mode 100644 index 0000000..cdc8016 --- /dev/null +++ b/.codex/hooks/post_tool_use_policy.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +"""Add validation reminders after Codex edits project coordination files.""" + +from __future__ import annotations + +import json +import re +import sys + + +FORMAT_PATTERNS = ( + r"\.codex[\\/]agents[\\/].+\.toml\b", + r"\.codex[\\/]config\.toml\b", + r"\.codex[\\/]hooks\.json\b", + r"\.codex[\\/]skills[\\/].+[\\/]SKILL\.md\b", + r"\.codex[\\/]commands[\\/].+\.md\b", + r"plugins[\\/].+[\\/]\.codex-plugin[\\/]plugin\.json\b", + r"plugins[\\/].+[\\/]commands[\\/].+\.md\b", + r"\.agents[\\/]plugins[\\/]marketplace\.json\b", +) + +SYNC_PATTERNS = ( + r"\bdocs[\\/]", + r"\bphases[\\/]", + r"\bPLAN\.md\b", + r"\bPROGRESS\.md\b", + r"\bAGENTS\.md\b", + r"\bplugins[\\/]", + r"\.agents[\\/]plugins[\\/]", +) + + +def matches(tool_input: object, patterns: tuple[str, ...]) -> bool: + text = json.dumps(tool_input, ensure_ascii=False) + return any(re.search(pattern, text, re.IGNORECASE) for pattern in patterns) + + +def main() -> int: + try: + payload = json.load(sys.stdin) + except json.JSONDecodeError: + return 0 + + tool_input = payload.get("tool_input", {}) + notes: list[str] = [] + + if matches(tool_input, FORMAT_PATTERNS): + notes.append("parse changed .codex TOML/JSON/frontmatter files before finishing") + + if matches(tool_input, SYNC_PATTERNS): + notes.append("confirm PLAN.md and PROGRESS.md still reflect completed work and future work") + + if not notes: + return 0 + + notes.append("run python scripts/validate_workspace.py for changed repository state") + json.dump( + { + "hookSpecificOutput": { + "hookEventName": "PostToolUse", + "additionalContext": "FESA post-edit reminder: " + "; ".join(notes) + ".", + } + }, + sys.stdout, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.codex/hooks/pre_edit_policy.py b/.codex/hooks/pre_edit_policy.py new file mode 100644 index 0000000..265723d --- /dev/null +++ b/.codex/hooks/pre_edit_policy.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Add FESA context before repository files are edited.""" + +from __future__ import annotations + +import json +import re +import sys + + +WATCHED_PATTERNS = ( + r"\bAGENTS\.md\b", + r"\bPLAN\.md\b", + r"\bPROGRESS\.md\b", + r"\bdocs[\\/]", + r"\bphases[\\/]", + r"\.codex[\\/]agents[\\/]", + r"\.codex[\\/]commands[\\/]", + r"\.codex[\\/]skills[\\/]", + r"\.codex[\\/]hooks", + r"\.codex[\\/]config\.toml\b", + r"\bplugins[\\/]", + r"\.agents[\\/]plugins[\\/]", +) + + +def has_watched_path(tool_input: object) -> bool: + text = json.dumps(tool_input, ensure_ascii=False) + return any(re.search(pattern, text, re.IGNORECASE) for pattern in WATCHED_PATTERNS) + + +def main() -> int: + try: + payload = json.load(sys.stdin) + except json.JSONDecodeError: + return 0 + + if not has_watched_path(payload.get("tool_input", {})): + return 0 + + json.dump( + { + "hookSpecificOutput": { + "hookEventName": "PreToolUse", + "additionalContext": ( + "FESA edit guardrail: after editing docs, phases, or .codex extension files, " + "keep PLAN.md/PROGRESS.md synchronized and run python scripts/validate_workspace.py " + "when the turn changes files." + ), + } + }, + sys.stdout, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.codex/hooks/pre_tool_use_policy.py b/.codex/hooks/pre_tool_use_policy.py index e64fa90..56394b2 100644 --- a/.codex/hooks/pre_tool_use_policy.py +++ b/.codex/hooks/pre_tool_use_policy.py @@ -10,12 +10,18 @@ import sys BLOCK_PATTERNS = ( r"\brm\s+-rf\b", + r"\brm\s+.*-[a-zA-Z]*r[a-zA-Z]*f\b", + r"\brm\s+.*-[a-zA-Z]*f[a-zA-Z]*r\b", r"\bgit\s+push\s+--force(?:-with-lease)?\b", r"\bgit\s+reset\s+--hard\b", + r"\bgit\s+clean\s+-[a-zA-Z]*f[a-zA-Z]*d\b", r"\bDROP\s+TABLE\b", r"\btruncate\s+table\b", r"\bRemove-Item\b.*\b-Recurse\b", + r"\bRemove-Item\b.*\b-Force\b.*\b-Recurse\b", r"\bdel\b\s+/s\b", + r"\brd\b\s+/s\b", + r"\brmdir\b\s+/s\b", ) diff --git a/.codex/hooks/session_start_context.py b/.codex/hooks/session_start_context.py new file mode 100644 index 0000000..15cb058 --- /dev/null +++ b/.codex/hooks/session_start_context.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +"""Provide FESA handoff context at Codex session startup/resume.""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + + +MAX_SECTION_CHARS = 700 + + +def find_repo_root(start: Path) -> Path: + for candidate in (start, *start.parents): + if (candidate / "AGENTS.md").exists() and (candidate / "PLAN.md").exists(): + return candidate + return start + + +def read_text(path: Path) -> str: + try: + return path.read_text(encoding="utf-8") + except OSError: + return "" + + +def section(markdown: str, heading: str) -> str: + marker = f"## {heading}" + start = markdown.find(marker) + if start < 0: + return "" + start = markdown.find("\n", start) + if start < 0: + return "" + end = markdown.find("\n## ", start + 1) + body = markdown[start:end if end >= 0 else len(markdown)].strip() + body = " ".join(line.strip() for line in body.splitlines() if line.strip()) + if len(body) > MAX_SECTION_CHARS: + body = body[:MAX_SECTION_CHARS].rstrip() + "..." + return body + + +def main() -> int: + try: + payload = json.load(sys.stdin) + except json.JSONDecodeError: + payload = {} + + root = find_repo_root(Path(payload.get("cwd") or ".").resolve()) + plan = read_text(root / "PLAN.md") + progress = read_text(root / "PROGRESS.md") + + context_lines = [ + "FESA session startup context:", + "- Before planning or editing, read AGENTS.md, PROGRESS.md, PLAN.md, and docs/README.md.", + "- Keep completed work in PROGRESS.md and future tasks/open decisions in PLAN.md.", + ] + + current_objective = section(plan, "Current Objective") + if current_objective: + context_lines.append(f"- Current objective: {current_objective}") + + current_status = section(progress, "Current Status") + if current_status: + context_lines.append(f"- Current status: {current_status}") + + blockers = section(progress, "Known Blockers") or section(plan, "Open Questions") + if blockers: + context_lines.append(f"- Blockers/open questions: {blockers}") + + json.dump( + { + "hookSpecificOutput": { + "hookEventName": "SessionStart", + "additionalContext": "\n".join(context_lines), + } + }, + sys.stdout, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.codex/skills/fesa-abaqus-subset/SKILL.md b/.codex/skills/fesa-abaqus-subset/SKILL.md new file mode 100644 index 0000000..41857db --- /dev/null +++ b/.codex/skills/fesa-abaqus-subset/SKILL.md @@ -0,0 +1,31 @@ +--- +name: fesa-abaqus-subset +description: Design or review Abaqus input parsing against the documented FESA Phase 1 keyword subset. +--- + +# FESA Abaqus Subset + +Use this skill when parser scope, input compatibility, Nset/Elset handling, or unsupported keyword behavior is involved. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/ABAQUS_INPUT_SUBSET.md` +- `/docs/NUMERICAL_CONVENTIONS.md` +- `/docs/ARCHITECTURE.md` +- `/docs/VERIFICATION_PLAN.md` + +## Workflow + +1. Map each requested keyword to the documented Phase 1 subset. +2. Check `*Nset` and `*Elset` semantics, ordering, generated sets, and use by boundary/load/result requests. +3. Keep Abaqus keyword parsing separated from internal object creation through Factory + Registry. +4. Require explicit diagnostics for unsupported keywords instead of silent partial parsing. +5. Record parser-scope changes in ADRs or subset docs when they affect project policy. + +## Do Not + +- Do not silently expand support beyond the documented subset. +- Do not store parser-only details in solver core objects unless the architecture document requires it. diff --git a/.codex/skills/fesa-adr-update/SKILL.md b/.codex/skills/fesa-adr-update/SKILL.md new file mode 100644 index 0000000..4e398b6 --- /dev/null +++ b/.codex/skills/fesa-adr-update/SKILL.md @@ -0,0 +1,30 @@ +--- +name: fesa-adr-update +description: Draft or revise FESA ADRs when architecture, numerical conventions, dependencies, result schema, or phase scope decisions change. +--- + +# FESA ADR Update + +Use this skill when a design decision should become durable project policy. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/ARCHITECTURE.md` +- `/docs/ADR.md` +- The topic-specific design document. + +## Workflow + +1. Identify whether the change is a new decision, a clarification, or a superseding decision. +2. Capture context, decision, consequences, alternatives considered, and validation impact. +3. Update related docs only when needed to avoid drift. +4. Add follow-up tasks to `PLAN.md`. +5. Record completed ADR work in `PROGRESS.md`. + +## Decision Quality Bar + +- Decisions should preserve runtime polymorphism, documented state ownership, DofManager ownership, adapter boundaries, step/frame/history outputs, and reference-driven verification. +- If a decision weakens those policies, document why and what test or reference coverage will protect it. diff --git a/.codex/skills/fesa-cpp-tdd/SKILL.md b/.codex/skills/fesa-cpp-tdd/SKILL.md new file mode 100644 index 0000000..3c38617 --- /dev/null +++ b/.codex/skills/fesa-cpp-tdd/SKILL.md @@ -0,0 +1,36 @@ +--- +name: fesa-cpp-tdd +description: Implement or review FESA C++ changes using tests first, documented architecture boundaries, and project validation. +--- + +# FESA C++ TDD + +Use this skill when writing or reviewing C++ solver code, build files, tests, or validation scripts. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/README.md` +- `/docs/HARNESS_ENGINEERING.md` +- `/docs/ARCHITECTURE.md` +- `/docs/ADR.md` +- `/docs/NUMERICAL_CONVENTIONS.md` +- The topic-specific design document for the code being changed. + +## Workflow + +1. Confirm that readiness blockers do not prohibit the requested implementation. +2. Confirm that a sprint contract exists for solver behavior, parser, result schema, reference comparator, MITC4, or phase execution work. +3. Write or update tests before implementation. +4. Keep changes scoped to the requested layer and contract allowed files. +5. Preserve runtime polymorphism, DofManager ownership, adapter boundaries, and int64/double numerical defaults. +6. Run focused tests plus `python scripts/validate_workspace.py`. +7. Update `PROGRESS.md` and `PLAN.md` when status or future work changes. + +## Do Not + +- Do not start solver implementation from this skill when the user asked for planning or documentation only. +- Do not start implementation without a testable sprint contract for nontrivial solver work. +- Do not bypass tests for parser, DOF mapping, reactions, singular diagnostics, sparse assembly, result writing, or MITC4 behavior. diff --git a/.codex/skills/fesa-doc-sync/SKILL.md b/.codex/skills/fesa-doc-sync/SKILL.md new file mode 100644 index 0000000..4c68192 --- /dev/null +++ b/.codex/skills/fesa-doc-sync/SKILL.md @@ -0,0 +1,34 @@ +--- +name: fesa-doc-sync +description: Keep FESA documentation, PLAN.md, and PROGRESS.md synchronized after design, planning, or Codex extension changes. +--- + +# FESA Doc Sync + +Use this skill whenever documentation, `.codex` extension files, phase files, or planning state changes. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/README.md` +- Any changed docs, phase files, or `.codex` files. + +## Workflow + +1. Put completed work, changed files, verification, and residual risks in `PROGRESS.md`. +2. Put future tasks, open decisions, and changed ownership in `PLAN.md`. +3. Keep historical notes out of `PLAN.md`. +4. Keep future task lists out of `PROGRESS.md`. +5. Check whether documentation indexes or agent instructions need updates. + +## Verification + +- Parse changed TOML, JSON, or YAML-like frontmatter when practical. +- Run `python scripts/validate_workspace.py` after edits. + +## Output + +- Summarize only the meaningful sync changes. +- Call out any stale or contradictory state that remains. diff --git a/.codex/skills/fesa-mitc4-formulation/SKILL.md b/.codex/skills/fesa-mitc4-formulation/SKILL.md new file mode 100644 index 0000000..7eaadbf --- /dev/null +++ b/.codex/skills/fesa-mitc4-formulation/SKILL.md @@ -0,0 +1,32 @@ +--- +name: fesa-mitc4-formulation +description: Work on or review MITC4 formulation details, benchmarks, or implementation notes using the documented baseline rather than memory. +--- + +# FESA MITC4 Formulation + +Use this skill for MITC4 element math, implementation review, benchmark interpretation, or formulation documentation. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/MITC4_FORMULATION.md` +- `/docs/NUMERICAL_CONVENTIONS.md` +- `/docs/VERIFICATION_PLAN.md` +- `/docs/RESULTS_SCHEMA.md` +- `/docs/ARCHITECTURE.md` + +## Workflow + +1. Identify whether the work concerns basis construction, kinematics, transverse shear tying, drilling stiffness, integration, stress/resultant recovery, or benchmarks. +2. Check whether the relevant formula or convention is explicitly defined in `/docs/MITC4_FORMULATION.md`. +3. If it is not defined, treat it as a blocker or documentation task. +4. Keep Phase 1 focused on baseline formulation and reference benchmark passing. + +## Do Not + +- Do not infer missing tying-point equations from memory. +- Do not introduce S4R or reduced-integration behavior into Phase 1. +- Do not optimize before the baseline passes documented reference benchmarks. diff --git a/.codex/skills/fesa-phase-planning/SKILL.md b/.codex/skills/fesa-phase-planning/SKILL.md new file mode 100644 index 0000000..91325d3 --- /dev/null +++ b/.codex/skills/fesa-phase-planning/SKILL.md @@ -0,0 +1,40 @@ +--- +name: fesa-phase-planning +description: Create or review FESA Harness phase plans and self-contained step files after readiness blockers are understood. +--- + +# FESA Phase Planning + +Use this skill when drafting or reviewing `phases/` work plans for FESA. + +## Read First + +- `/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` + +## Workflow + +1. Run the readiness check first. +2. Use the repo `harness-workflow` skill when generating phase files. +3. Keep each step scoped to one layer or module where possible. +4. Make each `stepN.md` executable in a fresh Codex session. +5. Include a sprint contract section following `/docs/HARNESS_ENGINEERING.md`. +6. Include acceptance commands and explicit prohibitions. +7. Do not hide unresolved reference, build, or MITC4 decisions inside implementation tasks. + +## Phase Shape + +- Start with project skeleton, build/test harness, and core types only after readiness blockers are accepted. +- Preserve the documented sequence: Domain, parser, diagnostics, DofManager, math adapters, results, reference comparator, MITC4, assembly, linear static path. +- For implementation phases, plan the Planner -> Generator -> Evaluator loop explicitly enough that an independent evaluator can pass/fail each step. diff --git a/.codex/skills/fesa-readiness/SKILL.md b/.codex/skills/fesa-readiness/SKILL.md new file mode 100644 index 0000000..a9dec06 --- /dev/null +++ b/.codex/skills/fesa-readiness/SKILL.md @@ -0,0 +1,41 @@ +--- +name: fesa-readiness +description: Check FESA Phase 1 readiness before implementation planning or coding, especially reference artifacts, MITC4 open decisions, result outputs, and build-system blockers. +--- + +# FESA Readiness + +Use this skill before drafting implementation phases, starting solver code, or deciding whether Phase 1 can proceed. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/README.md` +- `/docs/VERIFICATION_PLAN.md` +- `/docs/RESULTS_SCHEMA.md` +- `/docs/MITC4_FORMULATION.md` +- `/docs/NUMERICAL_CONVENTIONS.md` +- `/docs/ABAQUS_INPUT_SUBSET.md` + +## Workflow + +1. Compare `/PLAN.md` Phase 1 readiness tasks with the Implementation Readiness Checklist in `/docs/README.md`. +2. Classify each item as ready, blocked, explicitly deferred, or unknown. +3. Confirm that reference artifacts under `references/` do not require local Abaqus execution. +4. Confirm that at least one `*_displacements.csv` can drive automated `U` comparison, and flag missing `RF` artifacts if reaction verification depends on Abaqus output. +5. Confirm that MITC4 baseline formulation decisions are not being filled from memory. +6. Identify the smallest next decision or artifact needed. + +## Output + +- Lead with the readiness verdict: ready, blocked, or partial. +- Include blockers and the exact files that should be updated. +- If work is completed during the turn, update `PROGRESS.md`. +- If future tasks change, update `PLAN.md`. + +## Do Not + +- Do not start implementation while unresolved readiness blockers remain unless the user explicitly accepts them as deferred. +- Do not treat undocumented formulas or reference values as authoritative. diff --git a/.codex/skills/fesa-reference-onboarding/SKILL.md b/.codex/skills/fesa-reference-onboarding/SKILL.md new file mode 100644 index 0000000..dcb406e --- /dev/null +++ b/.codex/skills/fesa-reference-onboarding/SKILL.md @@ -0,0 +1,41 @@ +--- +name: fesa-reference-onboarding +description: Onboard or review Abaqus reference artifacts for FESA verification without running Abaqus locally. +--- + +# FESA Reference Onboarding + +Use this skill when the user adds, asks about, or wants to validate stored reference models and results. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/VERIFICATION_PLAN.md` +- `/docs/RESULTS_SCHEMA.md` +- `/docs/ABAQUS_INPUT_SUBSET.md` +- `/docs/NUMERICAL_CONVENTIONS.md` + +## Artifact Checklist + +- Abaqus `.inp` input file. +- Solved reference values, initially Abaqus-exported `*_displacements.csv`. +- Tolerance metadata by result field where needed. +- Unit notes, because FESA does not enforce a unit system. +- Abaqus version/provenance when available. +- Step/frame/result field mapping that matches `/docs/RESULTS_SCHEMA.md`. +- Unsupported keywords documented against `/docs/ABAQUS_INPUT_SUBSET.md`. + +## Workflow + +1. Inspect `references/` when present. +2. Verify that each artifact can be compared without hidden coordinate, sign, unit, or precision assumptions. +3. For `*_displacements.csv`, verify required columns: `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`. +4. Check that `U` and `RF` expectations are clear; flag missing reaction artifacts and optional `S`, `E`, and `SF` ambiguity. +5. Record completed artifact onboarding in `PROGRESS.md` and remaining artifact tasks in `PLAN.md`. + +## Do Not + +- Do not run Abaqus. +- Do not alter numerical tolerances just to make comparisons pass. diff --git a/.codex/skills/fesa-results-schema/SKILL.md b/.codex/skills/fesa-results-schema/SKILL.md new file mode 100644 index 0000000..9a5c297 --- /dev/null +++ b/.codex/skills/fesa-results-schema/SKILL.md @@ -0,0 +1,32 @@ +--- +name: fesa-results-schema +description: Design or review FESA HDF5 result outputs, step/frame/field/history layout, and reference comparison mapping. +--- + +# FESA Results Schema + +Use this skill when result storage, HDF5 groups, field/history outputs, or reference comparison paths are involved. + +## Read First + +- `/AGENTS.md` +- `/PROGRESS.md` +- `/PLAN.md` +- `/docs/RESULTS_SCHEMA.md` +- `/docs/VERIFICATION_PLAN.md` +- `/docs/NUMERICAL_CONVENTIONS.md` +- `/docs/MITC4_FORMULATION.md` + +## Workflow + +1. Preserve the step/frame/field/history model. +2. Check entity type, component order, coordinate system, precision, units metadata, and sign convention for each field. +3. Distinguish full-vector results from reduced-vector solver internals. +4. Ensure `U` and `RF` are clear for Phase 1; flag unresolved `S`, `E`, and `SF` decisions. +5. When reference comparison is involved, map `references/*_displacements.csv` to HDF5 field output `U` using the documented Abaqus column names. +6. Keep HDF5 API usage behind result writer/adapters. + +## Output + +- Provide docs-ready schema deltas or review findings. +- Include reference comparison implications and tests needed. diff --git a/.codex/skills/fesa-review/SKILL.md b/.codex/skills/fesa-review/SKILL.md new file mode 100644 index 0000000..504c0b4 --- /dev/null +++ b/.codex/skills/fesa-review/SKILL.md @@ -0,0 +1,41 @@ +--- +name: fesa-review +description: Review FESA changes against repository guardrails, technical dossier docs, TDD expectations, and validation requirements. +--- + +# FESA Review + +Use this skill for repository-grounded review of docs, `.codex` extensions, phase plans, or implementation patches. + +## Read First + +- `/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` +- The changed files under review. + +## Checklist + +- Architecture and ADR compliance. +- Numerical convention compliance. +- Abaqus subset discipline. +- Result schema compatibility. +- MITC4 formulation traceability. +- TDD or reference verification coverage. +- Sprint contract compliance when implementation work is under review. +- PLAN.md and PROGRESS.md synchronization. + +## Output + +- Lead with findings ordered by severity. +- Include concrete file references and the risk behind each finding. +- If no material issues exist, say so and list remaining evidence gaps. diff --git a/AGENTS.md b/AGENTS.md index e9d3186..ea47b6a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,7 +8,9 @@ - git 주소 : https://teagit.mimi1011.synology.me/baram2584/FESADev.git ## 아키텍처 규칙 -- CRITICAL: 레퍼런스가 되는 예제들과 결과 비교를 통해 솔버의 품질을 항상 유지 +- CRITICAL: 레퍼런스가 되는 예제들과 결과 비교를 통해 솔버의 품질을 항상 유지. 저장 위치는 `references/`이며, 기본 reference artifact는 Abaqus `*.inp` 입력 파일과 `*_displacements.csv` 같은 Abaqus 결과 CSV 파일이다 +- CRITICAL: 모든 새 작업 세션은 먼저 `PROGRESS.md`와 `PLAN.md`를 읽고 현재 진행 상황, 다음 작업, blocker를 파악할 것 +- CRITICAL: 구현 또는 phase 계획 전 `docs/README.md`의 문서 우선순위와 Phase 1 hard invariants를 확인할 것 - CRITICAL: `docs/ARCHITECTURE.md`와 `docs/ADR.md`의 결정 사항을 우선 준수할 것. 구조 변경이 필요하면 먼저 ADR을 추가/수정할 것 - CRITICAL: 수치 규약은 `docs/NUMERICAL_CONVENTIONS.md`를 우선 준수할 것. DOF, 좌표계, 단위, 부호, precision, reaction recovery 규약을 임의로 바꾸지 말 것 - 요소, 재료, 하중, 경계조건, 해석 알고리즘은 런타임 다형성 기반으로 확장할 것 @@ -22,9 +24,34 @@ - 대규모 모델을 목표로 sparse matrix, assembly, solver 계층은 성능 확장이 가능하게 설계하고, id/index/equation 번호는 int64 기반으로 둘 것 - MITC4 요소 구현은 Phase 1에서 `docs/MITC4_FORMULATION.md`의 baseline formulation과 reference benchmark 통과를 우선하며, reference 검증 전 과도한 최적화를 하지 말 것 - Mesh quality 진단은 Phase 1 범위에서 제외하되, singular system 진단은 필수로 구현할 것 +- Abaqus 실행을 로컬/CI 검증 요구사항으로 두지 말 것. 검증은 `references/`에 저장된 `*.inp`와 `*_displacements.csv` 등 reference artifact와 비교할 것 +- Reference input이 Phase 1 parser subset 밖의 Abaqus 기능(`S4R`, `Part/Assembly/Instance`, `NLGEOM=YES` 등)을 포함할 수 있다. 이런 파일은 저장 reference로 보존하되, 지원 범위를 조용히 확장하지 말고 `docs/ABAQUS_INPUT_SUBSET.md`와 `docs/VERIFICATION_PLAN.md`에 compatibility note를 남길 것 +- Phase 1 implementation plan을 만들기 전 `docs/README.md`의 Implementation Readiness Checklist 미결 항목을 명시할 것 + +## 작업 상태 관리 +- `PLAN.md`는 앞으로 해야 할 일, 우선순위, task ownership, open question의 단일 진실 공급원으로 취급할 것 +- `PROGRESS.md`는 완료된 일, 검증 결과, blocker, 알려진 위험의 단일 진실 공급원으로 취급할 것 +- 작업을 시작할 때 `PROGRESS.md`에서 최근 완료 내역과 blocker를 확인하고, `PLAN.md`에서 현재 objective와 다음 task를 확인할 것 +- 의미 있는 문서/코드/계획 변경을 완료하면 `PROGRESS.md`에 날짜, 변경 파일, 검증, 후속 작업을 기록할 것 +- 앞으로 해야 할 일이 새로 생기거나 우선순위가 바뀌면 `PLAN.md`를 갱신할 것 +- 완료된 task는 `PLAN.md`에 방치하지 말고 `PROGRESS.md`에 완료 기록을 남긴 뒤 `PLAN.md`에서는 제거하거나 상태를 갱신할 것 +- 여러 에이전트가 동시에 작업할 수 있으므로, 파일 수정 전 `PLAN.md`의 owner/scope를 확인하고 서로의 작업 범위를 침범하지 말 것 +- `phases/{phase}/index.json`은 phase 실행 상태의 단일 진실 공급원이지만, phase 밖의 전체 프로젝트 진행 상태는 `PLAN.md`와 `PROGRESS.md`에서 관리할 것 + +## Harness Engineering +- FESA의 장기 작업은 기본적으로 Planner -> Generator -> Evaluator 구조로 수행할 것 +- Planner는 구현 전에 sprint contract 또는 `phases/{phase}/stepN.md`를 작성한다. 구현 세부를 과도하게 고정하지 말고, 산출물/검증/금지 범위를 명확히 할 것 +- Generator는 승인된 contract 하나만 구현한다. 여러 layer를 한 번에 묶어 구현하지 말고, 테스트를 먼저 작성한 뒤 contract의 acceptance criteria를 만족시키는 최소 변경을 수행할 것 +- Evaluator는 Generator와 분리된 관점으로 검토한다. 자기 작업을 스스로 승인하지 말고, architecture drift, 수치 규약 위반, reference 비교 누락, 테스트 누락, unsupported Abaqus feature의 조용한 확장을 실패로 판정할 것 +- 각 sprint contract는 최소한 다음 항목을 포함해야 한다: objective, scope, allowed files, explicit non-goals, required reading, tests to write first, reference artifacts, acceptance commands, evaluator checklist, handoff requirements +- Sprint 시작 전 contract가 testable하지 않으면 구현하지 말고 contract를 먼저 보강할 것 +- Sprint 실패 시 Evaluator는 실패 이유와 재현 방법을 feedback artifact로 남기고, Generator는 그 feedback만을 대상으로 다음 반복을 수행할 것 +- 장기 실행 중 context가 커지면 `PROGRESS.md`, `PLAN.md`, phase step 파일, review feedback을 handoff artifact로 사용해 새 세션이 이어받을 수 있게 할 것 +- Harness 복잡도는 필요한 만큼만 유지한다. 단순 문서 변경은 단일 agent로 처리할 수 있지만, solver 구현/수치 검증/reference 비교가 포함되면 Planner/Generator/Evaluator 분리를 적용할 것 +- Harness contract와 평가 기준은 `docs/HARNESS_ENGINEERING.md`를 따를 것 ## Harness Workflow -- 먼저 `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`를 읽고 기획/설계 의도를 파악할 것 +- 먼저 `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`를 읽고 기획/설계 의도를 파악할 것 - 단계별 실행 계획이 필요하면 repo skill `harness-workflow`를 사용해 `phases/` 아래 파일을 설계할 것 - 변경사항 리뷰가 필요하면 repo skill `harness-review` 또는 Codex의 `/review`를 사용할 것 - `phases/{phase}/index.json`은 phase 진행 상태의 단일 진실 공급원으로 취급할 것 @@ -38,6 +65,9 @@ ## 검증 - 기본 검증 스크립트는 `python scripts/validate_workspace.py` - 기준이 되는 Reference 모델들의 해석결과와 비교로 검증 수행 +- Abaqus는 실행하지 않는 전제이다. 사용자가 `references/` 아래에 정리한 입력/결과 artifact를 기준으로 비교할 것 +- Reference displacement CSV는 Abaqus export column `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`를 FESA `U` field의 `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`와 비교하는 기본 형식으로 취급할 것 +- Reference 비교는 absolute tolerance와 relative tolerance를 함께 사용할 것 ## 명령어 - `python scripts/execute.py `: Codex 기반 phase 순차 실행 diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..23844e5 --- /dev/null +++ b/PLAN.md @@ -0,0 +1,164 @@ +# 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.md` with a short reason instead of silently deleting it. + +## Current Objective +Prepare FESA for Phase 1 implementation planning: a reference-verified linear static MITC4 shell solver using the documented architecture, numerical conventions, Abaqus input subset, HDF5 result schema, and stored reference artifacts. + +## Required Reading For New Agents +1. `AGENTS.md` +2. `PROGRESS.md` +3. `PLAN.md` +4. `docs/README.md` +5. `docs/HARNESS_ENGINEERING.md` +6. `docs/PRD.md` +7. `docs/ARCHITECTURE.md` +8. `docs/ADR.md` +9. `docs/NUMERICAL_CONVENTIONS.md` +10. `docs/ABAQUS_INPUT_SUBSET.md` +11. `docs/VERIFICATION_PLAN.md` +12. `docs/RESULTS_SCHEMA.md` +13. `docs/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, and `NLGEOM=YES`. +- Build `AnalysisModel` for 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 `double` values. +- 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 `U` and `RF` in the documented step/frame/field layout. +- Compare `U` against stored `references/*_displacements.csv` artifacts. +- 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 `S4R` execution 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/*.inp` or `references/*_displacements.csv`. +- Each contract must include `python scripts/validate_workspace.py` plus 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: + +1. Unit tests: core types, DOF enum, diagnostics, parser tokens, label handling. +2. Parser tests: supported keywords, generated sets, duplicate/missing references, unsupported keyword diagnostics. +3. DOF/math tests: constrained/free partition, equation numbering, sparse pattern, reduced solve, full reconstruction. +4. Results tests: HDF5 or writer boundary schema for `U` and `RF`; component labels and frame metadata. +5. Reference comparator tests: CSV header validation, node matching, tolerance pass/fail behavior. +6. Element tests: MITC4 shape functions, stiffness symmetry, rigid body behavior, drilling stiffness sensitivity. +7. Assembly/analysis tests: small known systems, full-vector reaction recovery, singular negative cases. +8. 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.inp` and `references/quad_01_displacements.csv` are accepted stored artifacts. +- `quad_01.inp` contains `S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=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=S4` linear static `.inp` case. +- Decide first `quad_01_displacements.csv` tolerance for comparator testing. +- Add `*_reactions.csv` or explicitly use internal equilibrium tests for Phase 1 `RF` until 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.md` is closed. +- Do not use `quad_01.inp` to justify `S4R`, `Part/Assembly/Instance`, or `NLGEOM=YES` support. +- 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 `Node` or `Element` to 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 `S4R` in 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.csv` comparison? +- Will Phase 1 `RF` be checked from Abaqus reaction CSV or from internal equilibrium tests first? diff --git a/PROGRESS.md b/PROGRESS.md new file mode 100644 index 0000000..cf0b92e --- /dev/null +++ b/PROGRESS.md @@ -0,0 +1,289 @@ +# PROGRESS + +## Purpose +`PROGRESS.md` is the shared chronological status log for FESA agents. + +Every new agent session must read this file together with `PLAN.md` before planning or editing. Keep this file factual: what changed, what was verified, what is blocked, and what remains risky. + +## How To Use +- Add a new entry whenever a meaningful planning, documentation, implementation, verification, or review task is completed. +- Include date, agent or author when known, changed files, verification performed, and follow-up items. +- Record blockers explicitly. +- Do not use this file as a future task list. Put future tasks in `PLAN.md`. +- Do not remove history unless the user explicitly asks for archival cleanup. + +## Current Status +The project is in documentation and readiness planning. Solver implementation has not started. The first stored Abaqus reference pair exists under `references/`: `quad_01.inp` and `quad_01_displacements.csv`. + +## Completed Work + +### 2026-05-01 - Phase 1 implementation master plan added +Author: Codex + +Changed files: +- `PLAN.md` +- `PROGRESS.md` + +Summary: +- Expanded `PLAN.md` from a short implementation sequence into a Phase 1 master implementation plan. +- Added Phase 1 Definition of Done, execution gates, milestone backlog P1-00 through P1-16, sprint contract rules, verification strategy, reference plan, and risk controls. +- Kept implementation blocked behind readiness decisions for MITC4 formulation, build system, reference comparator, reaction verification, and Phase 1-compatible reference input. +- Aligned the plan with the Planner -> Generator -> Evaluator harness in `docs/HARNESS_ENGINEERING.md`. + +Verification: +- Reviewed the plan against `docs/PRD.md`, `docs/ARCHITECTURE.md`, `docs/HARNESS_ENGINEERING.md`, `docs/NUMERICAL_CONVENTIONS.md`, `docs/ABAQUS_INPUT_SUBSET.md`, `docs/VERIFICATION_PLAN.md`, `docs/RESULTS_SCHEMA.md`, and `docs/MITC4_FORMULATION.md`. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +Follow-up: +- Convert P1 milestones into `phases/` step files with sprint contract sections when the user asks for executable phase planning. + +### 2026-05-01 - Planner/Generator/Evaluator harness structure added +Author: Codex + +Changed files: +- `AGENTS.md` +- `PLAN.md` +- `PROGRESS.md` +- `README.md` +- `docs/README.md` +- `docs/HARNESS_ENGINEERING.md` +- `docs/MULTI_AGENT_RESEARCH_PLAN.md` +- `.codex/agents/harness-sprint-planner.toml` +- `.codex/agents/implementation-generator.toml` +- `.codex/agents/harness-sprint-evaluator.toml` +- `.codex/agents/phase-planner.toml` +- `.codex/agents/harness-reviewer.toml` +- `.codex/agents/test-strategy-reviewer.toml` +- `.codex/skills/fesa-phase-planning/SKILL.md` +- `.codex/skills/fesa-review/SKILL.md` +- `.codex/skills/fesa-cpp-tdd/SKILL.md` +- `plugins/fesa-commands/commands/phase-draft.md` + +Summary: +- Added `docs/HARNESS_ENGINEERING.md` as the durable Planner -> Generator -> Evaluator contract for long-running FESA work. +- Updated `AGENTS.md` so nontrivial solver, parser, result schema, reference comparator, MITC4, and phase execution work requires a sprint contract before implementation. +- Added custom agents for sprint contract planning, contract-bound implementation, and independent sprint evaluation. +- Updated existing planner/reviewer/test strategy guidance to enforce contract compliance, evaluator pass/fail review, TDD, and PLAN/PROGRESS handoff. + +Verification: +- `.codex/agents/*.toml` parsed successfully with Python `tomllib`. +- Codex skill and plugin command frontmatter checks passed. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +Follow-up: +- When implementation planning begins, generate phase steps with sprint contract sections before assigning Generator work. + +### 2026-05-01 - Abaqus reference CSV contract adopted +Author: Codex + +Changed files: +- `AGENTS.md` +- `README.md` +- `PLAN.md` +- `PROGRESS.md` +- `docs/README.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` +- `docs/MULTI_AGENT_RESEARCH_PLAN.md` +- `references/README.md` +- `.codex/agents/*.toml` +- `.codex/skills/*.md` +- `plugins/fesa-commands/commands/*.md` + +Summary: +- Accepted `references/` as the project reference artifact root. +- Documented the initial artifact pair `references/quad_01.inp` and `references/quad_01_displacements.csv`. +- Adopted Abaqus-exported `*_displacements.csv` as the first automated displacement comparison format. +- Mapped CSV columns `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3` to FESA `U` components `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. +- Documented that `quad_01.inp` includes `S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=YES`; it is stored reference provenance and a future compatibility target, not a Phase 1 parser acceptance expansion. + +Verification: +- Inspected `quad_01_displacements.csv`: 121 data rows and the required Abaqus displacement/rotation columns. +- Parsed documentation and Codex extension metadata checks. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +Follow-up: +- Add or define reaction-force reference artifacts, preferably `*_reactions.csv`, or verify `RF` by equilibrium tests until Abaqus RF CSV is available. +- Add at least one Phase 1-compatible `TYPE=S4` reference input for the first MITC4 linear static implementation path. + +### 2026-05-01 - FESA commands converted to repo plugin +Author: Codex + +Changed files: +- `plugins/fesa-commands/.codex-plugin/plugin.json` +- `plugins/fesa-commands/commands/*.md` +- `.agents/plugins/marketplace.json` +- `.codex/commands/*.md` +- `.codex/hooks/pre_edit_policy.py` +- `.codex/hooks/post_tool_use_policy.py` +- `PLAN.md` +- `PROGRESS.md` + +Summary: +- Created the repo-local `fesa-commands` plugin and registered it in `.agents/plugins/marketplace.json`. +- Moved the FESA command prompts from `.codex/commands/` into `plugins/fesa-commands/commands/`. +- Removed the old `.codex/commands/*.md` files so plugin commands are the single maintained location. +- Updated hook policy scripts to watch plugin manifests, plugin commands, and marketplace registration files. +- Resolved the prior `.codex/commands` discovery concern by converting the commands to plugin form. + +Verification: +- Parsed plugin manifests and `.agents/plugins/marketplace.json` with Python `json`. +- Checked plugin command Markdown frontmatter. +- Parsed `.codex/config.toml` and `.codex/agents/*.toml` with Python `tomllib`. +- Parsed `.codex/hooks.json` with Python `json`. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +Follow-up: +- Confirm that the `fesa-commands` plugin appears in the active Codex plugin/command surface. + +### 2026-05-01 - Project-local Codex extension pack added +Author: Codex + +Changed files: +- `.codex/config.toml` +- `.codex/hooks.json` +- `.codex/agents/*.toml` +- `.codex/commands/*.md` +- `.codex/skills/*/SKILL.md` +- `.codex/hooks/*.py` +- `PLAN.md` +- `PROGRESS.md` + +Summary: +- Added focused project agents for reference artifact curation, numerical convention review, solver architecture, sparse solver design, HDF5 results schema, DOF/boundary conditions, C++ build planning, MITC4 implementation review, test strategy, and PLAN/PROGRESS auditing. +- Added project command prompts for status, readiness, plan sync, reference checks, documentation guards, phase drafting, ADR work, benchmark onboarding, extension verification, and handoff. +- Added project-local FESA skills and registered them through `.codex/config.toml`. +- Added hooks for session startup context, pre-edit coordination reminders, post-edit validation reminders, and expanded destructive shell command blocking. + +Verification: +- Parsed `.codex/config.toml` and `.codex/agents/*.toml` with Python `tomllib`. +- Parsed `.codex/hooks.json` with Python `json`. +- Checked `.codex/skills/*/SKILL.md` and `.codex/commands/*.md` frontmatter. +- Smoke-tested the new hook scripts with representative JSON payloads. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +Follow-up: +- Resolved later by converting `.codex/commands/*.md` into the `fesa-commands` repo plugin. +- Confirm hook behavior in the actual Codex runtime on native Windows. + +### 2026-05-01 - PLAN/PROGRESS coordination files added +Author: Codex + +Changed files: +- `PLAN.md` +- `PROGRESS.md` +- `AGENTS.md` +- `docs/README.md` +- `docs/MULTI_AGENT_RESEARCH_PLAN.md` +- `.codex/agents/phase-planner.toml` +- `.codex/agents/harness-reviewer.toml` + +Summary: +- Added `PLAN.md` as the shared forward-looking work plan for multi-agent coordination. +- Added `PROGRESS.md` as the shared chronological progress, verification, blocker, and risk log. +- Updated `AGENTS.md` so every new work session must read `PROGRESS.md` and `PLAN.md` before planning or editing. +- Updated documentation index and Codex agent instructions so planning/review agents enforce PLAN/PROGRESS usage. + +Verification: +- `.codex/agents/*.toml` parsed successfully with Python `tomllib`. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +### 2026-05-01 - Documentation coordination and multi-agent planning state +Author: Codex + +Changed files: +- `AGENTS.md` +- `README.md` +- `docs/README.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` +- `docs/MULTI_AGENT_RESEARCH_PLAN.md` +- `.codex/agents/*.toml` + +Summary: +- Added `docs/README.md` as documentation index and implementation readiness gate. +- Reinforced Phase 1 invariants across project docs. +- Added readiness gates for numerical conventions, parser acceptance, reference onboarding, mandatory result outputs, and MITC4 pre-implementation decisions. +- Updated Codex agent definitions so delegated agents read the current documentation set. +- Root `README.md` now points to the FESA documentation entry point. + +Verification: +- `.codex/agents/*.toml` parsed successfully with Python `tomllib`. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +Follow-up: +- Keep `PLAN.md` and `PROGRESS.md` current for multi-agent coordination. + +### 2026-04-22 - Technical dossier documents added +Author: Codex + +Changed files: +- `docs/NUMERICAL_CONVENTIONS.md` +- `docs/ABAQUS_INPUT_SUBSET.md` +- `docs/VERIFICATION_PLAN.md` +- `docs/RESULTS_SCHEMA.md` +- `docs/MITC4_FORMULATION.md` +- `AGENTS.md` +- `docs/PRD.md` +- `docs/ARCHITECTURE.md` +- `docs/ADR.md` +- `docs/MULTI_AGENT_RESEARCH_PLAN.md` +- `.codex/agents/*.toml` + +Summary: +- Captured user decisions: 6 DOF shell nodes, artificial drilling stiffness, Abaqus-style units and signs, constrained DOF elimination, full-vector reaction recovery, no Phase 1 mesh quality diagnostics, singular diagnostics required, `double`, int64 indexing, S4-to-MITC4 mapping, S4R deferral. +- Added technical dossier documents for numerical conventions, Abaqus subset, verification, results schema, and MITC4 formulation. +- Added ADRs for numerical baseline, boundary/reaction policy, drilling stabilization, S4/S4R policy, singular diagnostics, and technical dossier contracts. + +Verification: +- `.codex/agents/*.toml` parsed successfully with Python `tomllib`. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +### 2026-04-21 - Initial architecture and agent setup +Author: Codex + +Changed files: +- `docs/PRD.md` +- `docs/ARCHITECTURE.md` +- `docs/ADR.md` +- `AGENTS.md` +- `docs/MULTI_AGENT_RESEARCH_PLAN.md` +- `.codex/agents/fem-literature-researcher.toml` +- `.codex/agents/verification-benchmark-researcher.toml` +- `.codex/agents/mitc4-formulation-researcher.toml` +- `.codex/agents/abaqus-compatibility-researcher.toml` + +Summary: +- Established solver architecture direction: runtime polymorphism, Strategy + Template Method, Factory + Registry, adapter boundaries, immutable `Domain`, mutable `AnalysisState`, `DofManager` ownership, step/frame/history results. +- Created first research agents for FEM literature, verification benchmarks, MITC4 formulation, and Abaqus compatibility. + +Verification: +- `.codex/agents/*.toml` parsed successfully with Python `tomllib`. +- `python scripts/validate_workspace.py` ran, but reported no configured validation commands. + +## Known Blockers +- No reaction-force reference artifact exists yet under `references/`. +- The current initial `quad_01.inp` reference contains `S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=YES`, so it is not a Phase 1 parser acceptance case as-is. +- MITC4 transverse shear tying-point equations are not finalized in `docs/MITC4_FORMULATION.md`. +- MITC4 local shell basis algorithm is not finalized. +- Artificial drilling stiffness default scale is not finalized. +- Build system is not decided. +- Validation script has no concrete build/lint/test commands configured. + +## Current Risks +- Implementation could start from the `quad_01` reference input without accounting for its unsupported Abaqus features. +- MITC4 formulation could drift if tying-point equations are inferred from memory instead of cited sources. +- Reaction output may be wrong if full-space stiffness/load data is not preserved or reconstructed. +- Large-model support may be weakened if any module narrows ids or sparse indices below int64. diff --git a/README.md b/README.md index cad8f9e..59905a5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,50 @@ -# Agentic-AI-Template +# FESA + +FESA is a C++17 finite element structural analysis solver project. The first milestone is a reference-verified linear static MITC4 shell solver with an Abaqus-compatible input subset, HDF5-oriented results, and explicit numerical conventions. + +## Current Phase 1 Direction +- MITC4 shell element baseline formulation. +- Linear elastic material. +- Nodal loads and fixed boundary conditions. +- Abaqus input subset with `S4` mapped to FESA `MITC4`. +- `S4R` deferred. +- 6 shell DOFs per node: `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. +- Small artificial drilling stiffness. +- Constrained DOF elimination. +- Full-vector reaction recovery. +- `double` precision and int64 ids/indices/equation numbering. +- Stored-reference comparison from `references/*.inp` and `references/*_displacements.csv` without requiring local Abaqus execution. + +## Reference Artifacts +Stored Abaqus examples live under [references](references). + +The initial accepted artifact pair is: +- [quad_01.inp](references/quad_01.inp) +- [quad_01_displacements.csv](references/quad_01_displacements.csv) + +Reference CSV displacement columns use Abaqus labels `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`, mapped to FESA `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. + +## Documentation Entry Point +Start with [docs/README.md](docs/README.md). + +The core project documents are: +- [AGENTS.md](AGENTS.md) +- [docs/HARNESS_ENGINEERING.md](docs/HARNESS_ENGINEERING.md) +- [docs/PRD.md](docs/PRD.md) +- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) +- [docs/ADR.md](docs/ADR.md) +- [docs/NUMERICAL_CONVENTIONS.md](docs/NUMERICAL_CONVENTIONS.md) +- [docs/ABAQUS_INPUT_SUBSET.md](docs/ABAQUS_INPUT_SUBSET.md) +- [docs/VERIFICATION_PLAN.md](docs/VERIFICATION_PLAN.md) +- [docs/RESULTS_SCHEMA.md](docs/RESULTS_SCHEMA.md) +- [docs/MITC4_FORMULATION.md](docs/MITC4_FORMULATION.md) + +## Validation +The default repository validation command is: + +```bash +python scripts/validate_workspace.py +``` + +At this planning stage, validation may report that no concrete build/lint/test commands are configured. diff --git a/docs/ABAQUS_INPUT_SUBSET.md b/docs/ABAQUS_INPUT_SUBSET.md index 71d4e75..f842bf2 100644 --- a/docs/ABAQUS_INPUT_SUBSET.md +++ b/docs/ABAQUS_INPUT_SUBSET.md @@ -45,6 +45,20 @@ FESA parser rules: - Include files through `INPUT=` are not supported in Phase 1. - Part/Assembly/Instance syntax is not supported in Phase 1 unless added by ADR. +## Stored Reference Inputs vs Supported Subset +Files under `references/` are allowed to preserve the exact Abaqus input used to generate reference results, even when the file contains features outside the current Phase 1 parser subset. + +Rules: +- A stored reference input is not automatically a supported FESA input. +- Unsupported reference features must be documented as compatibility notes. +- Parser implementation must still reject unsupported features until this document and ADRs explicitly add support. +- Test harnesses may use normalized or reduced derivative inputs for Phase 1 parser tests, but must keep the original Abaqus reference artifact unchanged. + +Current initial reference note: +- `references/quad_01.inp` was generated by Abaqus/CAE Learning Edition 2024. +- It uses `TYPE=S4R`, `Part`, `Assembly`, `Instance`, `*Density`, and `NLGEOM=YES`, all of which are outside the current Phase 1 parser/solver subset. +- Its paired `references/quad_01_displacements.csv` is still valid as a stored displacement reference artifact for future compatibility and regression work. + ## Labels and Names Rules: - Set and material labels are stored case-insensitively by default. @@ -206,6 +220,18 @@ Required parser diagnostics: Diagnostic messages should include file path, line number, keyword, and offending token. +## Minimum Parser Acceptance +Before Phase 1 parser work is considered ready for solver integration: +- Parse `*Node`, `*Element`, `*Nset`, `*Elset`, `*Material`, `*Elastic`, `*Shell Section`, `*Boundary`, `*Cload`, `*Step`, `*Static`, and `*End Step` smoke cases. +- Preserve original labels for diagnostics while resolving labels case-insensitively. +- Accept explicit and `GENERATE` node/element sets. +- Reject `TYPE=S4R` with an unsupported element diagnostic. +- Reject `NLGEOM=YES`. +- Reject unsupported Part/Assembly/Instance and Include syntax. +- Resolve shell section material and element set references. +- Resolve boundary/load node set references. +- Produce line-numbered diagnostics for malformed numeric fields and invalid DOF ids. + ## Explicit Non-Goals - Abaqus `Part`, `Assembly`, `Instance`, and instance-qualified labels. - `*Include`. diff --git a/docs/ADR.md b/docs/ADR.md index fa79881..9e961a5 100644 --- a/docs/ADR.md +++ b/docs/ADR.md @@ -119,3 +119,30 @@ **이유**: FEM solver는 DOF, 좌표계, 부호, parser subset, result schema, benchmark 기준이 조금만 흔들려도 구현이 불안정해진다. 구현자가 따를 수 있는 technical dossier를 먼저 고정한다. **트레이드오프**: 문서 유지 비용이 증가한다. 하지만 문서와 구현이 어긋날 때는 ADR 또는 해당 dossier를 먼저 갱신하여 설계 drift를 관리한다. + +--- + +### ADR-014: Documentation Index and Implementation Readiness Gate +**결정**: `docs/README.md`를 프로젝트 문서 index와 문서 우선순위의 entry point로 둔다. Phase 1 implementation plan을 작성하기 전 `docs/README.md`의 Implementation Readiness Checklist 미결 항목을 명시한다. + +**이유**: FESA는 수치 규약, Abaqus subset, MITC4 formulation, HDF5 schema, reference verification이 강하게 결합되어 있다. 구현 전에 어떤 문서가 어느 결정을 소유하는지 분명히 하지 않으면 작은 구현 선택이 전체 solver convention을 흔들 수 있다. + +**트레이드오프**: 계획 단계에서 문서 확인 비용이 늘어난다. 대신 이후 Codex 세션과 multi-agent 작업이 같은 규칙을 공유하고, 미결 결정을 숨기지 않는다. + +--- + +### ADR-015: Reference-Artifact-Only Validation Baseline +**결정**: Phase 1 검증은 저장된 `references/` artifact와 비교한다. Abaqus 실행은 로컬 개발, CI, 기본 validation의 요구사항으로 두지 않는다. + +**이유**: 사용자는 Abaqus input과 해석 결과를 `references/` 폴더로 제공하며, 현재 개발 환경에서 Abaqus 실행은 사용할 수 없다. 저장 artifact 기반 검증이 재현성과 자동화에 더 적합하다. + +**트레이드오프**: reference artifact 생성과 갱신은 수동 절차에 의존한다. 따라서 reference manifest, Abaqus version, unit note, tolerance, 비교 대상 output path를 명확히 기록해야 한다. + +--- + +### ADR-016: References Folder and CSV Displacement Artifact Contract +**결정**: 저장 reference의 공식 루트는 `references/`이다. 초기 자동 변위 검증은 Abaqus 해석 입력 `*.inp`와 Abaqus에서 export한 `*_displacements.csv` 파일 쌍을 사용한다. CSV column은 `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`를 기본 형식으로 한다. + +**이유**: 사용자가 첫 reference case로 `references/quad_01.inp`와 `references/quad_01_displacements.csv`를 제공했다. CSV는 사람이 검토하기 쉽고, 초기 parser/solver 검증 harness에서 HDF5 writer가 완성되기 전에도 `U` field 비교를 자동화하기 좋다. + +**트레이드오프**: CSV는 HDF5보다 metadata 표현력이 약하다. 따라서 Abaqus version, unit note, unsupported keyword note, tolerance는 `references/README.md`, case manifest, 또는 추후 metadata 파일에 보강해야 한다. `quad_01.inp`처럼 `S4R`, `Part/Assembly/Instance`, `NLGEOM=YES`를 포함하는 reference input은 저장 reference로 보존하되 Phase 1 parser 지원 범위를 자동으로 확장하지 않는다. diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 8d32c87..83000b9 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -5,6 +5,8 @@ FESA는 MITC4 Shell 요소 기반 구조해석에서 시작해 비선형 정적 초기 구현은 정확도와 테스트 가능성을 우선한다. 단, 대규모 모델을 목표로 하므로 자유도 관리, 희소 행렬 조립, 선형 솔버, 병렬 실행 계층은 초기부터 성능 확장이 가능하도록 분리한다. +문서 우선순위와 구현 전 준비 기준은 `docs/README.md`를 따른다. + ## 설계 원칙 - Domain 객체는 입력 모델의 의미를 보존하고 가능한 한 불변에 가깝게 유지한다. - 해석 중 변하는 물리량과 반복 상태는 AnalysisState에 명시적으로 분리한다. @@ -243,6 +245,18 @@ Abaqus input file -> 다음 step 진행 ``` +## Phase 1 실행 경계 +Phase 1 solver path는 다음 경계를 구현 단위로 삼는다. + +1. `InputParser`는 `docs/ABAQUS_INPUT_SUBSET.md`의 subset만 받아 `Domain`을 만든다. +2. `DomainValidator` 또는 동등한 검증 계층은 missing reference, unsupported feature, singular-prone model 상태를 조기에 진단한다. +3. `AnalysisModelBuilder`는 현재 step의 active element/load/boundary/property/material view를 구성한다. +4. `DofManager`는 6 DOF node model, constrained/free partition, equation numbering, sparse pattern input, full/reduced vector reconstruction을 소유한다. +5. `Assembler`는 full reaction recovery에 필요한 full-space stiffness/load 정보를 보존하거나 재구성 가능한 형태로 유지한다. +6. `LinearStaticAnalysis`는 reduced free-DOF system을 풀고 `AnalysisState`에 full `U`, `Fext`, `Fint`, `R`을 갱신한다. +7. `ResultsWriter`는 `docs/RESULTS_SCHEMA.md`의 최소 Phase 1 outputs를 쓴다. +8. `ReferenceComparator` 또는 테스트 harness는 `docs/VERIFICATION_PLAN.md`의 reference artifact와 비교한다. 초기 reference 입력은 `references/*.inp`와 Abaqus-exported `references/*_displacements.csv`이다. + ## Phase 1 구현 범위 - MITC4 Shell 요소 - 선형 탄성 재료 @@ -257,7 +271,7 @@ Abaqus input file - step/frame 기반 결과 저장의 최소 구조 - double precision과 int64 indexing - singular system 진단 -- reference 모델 결과 비교 테스트 +- `references/`의 Abaqus `.inp`와 `*_displacements.csv` 기반 reference 모델 결과 비교 테스트 ## 성능 확장 방향 - 행렬 조립은 element 단위 병렬화를 고려해 설계한다. @@ -268,8 +282,9 @@ Abaqus input file - 정확도 검증이 끝나기 전에는 MITC4 element formulation을 과도하게 최적화하지 않는다. ## 상세 설계 문서 +- `docs/README.md`: 문서 index, 우선순위, Phase 1 hard invariants, implementation readiness checklist - `docs/NUMERICAL_CONVENTIONS.md`: DOF, 좌표계, 단위, 부호, precision, reaction recovery, singular diagnostics - `docs/ABAQUS_INPUT_SUBSET.md`: Phase 1 Abaqus input keyword subset과 unsupported feature -- `docs/VERIFICATION_PLAN.md`: reference 폴더 구조, benchmark matrix, tolerance 정책 +- `docs/VERIFICATION_PLAN.md`: `references/` 폴더 구조, benchmark matrix, CSV reference result 형식, tolerance 정책 - `docs/RESULTS_SCHEMA.md`: HDF5 step/frame/field/history schema - `docs/MITC4_FORMULATION.md`: MITC4 baseline formulation 계약과 open decisions diff --git a/docs/HARNESS_ENGINEERING.md b/docs/HARNESS_ENGINEERING.md new file mode 100644 index 0000000..65f4b63 --- /dev/null +++ b/docs/HARNESS_ENGINEERING.md @@ -0,0 +1,169 @@ +# Harness Engineering + +## Purpose +This document defines how FESA uses long-running agent harnesses for planning, implementation, and evaluation. + +The goal is not to maximize agent count. The goal is to keep long solver work coherent, testable, and reference-verified across context resets and independent sessions. + +## Default Harness Shape +Use the smallest harness that can safely handle the task. + +For meaningful solver implementation or phase execution, use: + +```text +Planner -> Generator -> Evaluator +``` + +Roles: +- `Planner`: turns project docs and `PLAN.md` tasks into a testable sprint contract or phase step. +- `Generator`: implements exactly one accepted contract using TDD. +- `Evaluator`: independently checks the result against the contract, docs, tests, reference artifacts, and validation commands. + +Do not use multi-agent ceremony for tiny documentation edits or obvious mechanical changes. Do use the full harness when a task touches solver behavior, numerical conventions, reference comparison, parser compatibility, result schema, or phase execution. + +## Sprint Contract +Every implementation sprint must have a contract before code changes begin. + +Recommended location: +- `phases/{phase}/stepN.md` for phase execution. +- `phases/{phase}/contracts/stepN-contract.md` only when a separate negotiation artifact is useful. + +Required sections: + +````markdown +# Sprint Contract: {name} + +## Objective +{one concise outcome} + +## Required Reading +- /AGENTS.md +- /PROGRESS.md +- /PLAN.md +- /docs/README.md +- /docs/HARNESS_ENGINEERING.md +- {topic docs} + +## Scope +- {what may be changed} + +## Allowed Files +- {paths or modules} + +## Explicit Non-Goals +- {what must not be done} + +## Tests To Write First +- {test files or test cases} + +## Reference Artifacts +- {references/*.inp or references/*_displacements.csv, or "none"} + +## Acceptance Commands +```bash +python scripts/validate_workspace.py +``` + +## Evaluator Checklist +- {contract-specific checks} + +## Handoff Requirements +- Update PROGRESS.md for completed work. +- Update PLAN.md for future work or changed blockers. +```` + +Contract quality rules: +- The contract must be testable. +- The contract must identify unsupported Abaqus features rather than expanding support implicitly. +- The contract must state whether reference data is used. +- The contract must name file ownership boundaries to reduce conflicts. +- The contract must not prescribe formulas that are not present in `docs/MITC4_FORMULATION.md` or a cited source. + +## Generator Rules +The Generator implements one contract at a time. + +Required behavior: +- Read the contract and required docs before editing. +- Write or update tests before implementation. +- Keep changes inside allowed files unless the contract is updated first. +- Preserve architecture boundaries from `docs/ARCHITECTURE.md` and `docs/ADR.md`. +- Preserve numerical conventions from `docs/NUMERICAL_CONVENTIONS.md`. +- Run acceptance commands. +- Update `PROGRESS.md` and `PLAN.md` only for factual state changes. + +Generator failure modes to avoid: +- Broad refactors outside the contract. +- Implementing parser support because a stored reference `.inp` contains unsupported Abaqus features. +- Comparing only reduced vectors when full-vector reaction recovery is required. +- Treating a passing compile as sufficient without tests or reference checks. + +## Evaluator Rules +The Evaluator is independent from the Generator. + +Evaluation order: +1. Read the sprint contract. +2. Read `AGENTS.md`, `PROGRESS.md`, `PLAN.md`, and the topic docs. +3. Inspect the changed files. +4. Run or review the acceptance commands. +5. Check tests, reference artifacts, and documented conventions. +6. Return pass/fail findings with concrete file references. + +The Evaluator must fail the sprint if any of these are true: +- Required tests were not written first or are missing. +- `python scripts/validate_workspace.py` fails without explanation. +- A CRITICAL rule in `AGENTS.md` is violated. +- A change drifts from `docs/ARCHITECTURE.md`, `docs/ADR.md`, or `docs/NUMERICAL_CONVENTIONS.md`. +- `references/*_displacements.csv` comparison is required but not implemented or not checked. +- `RF` is computed from reduced quantities when full-vector recovery is required. +- Unsupported Abaqus features are silently accepted. +- Completed work is not recorded in `PROGRESS.md`, or future tasks are not recorded in `PLAN.md`. + +If the sprint fails, the Evaluator should produce a concise feedback artifact: + +```markdown +# Evaluation Feedback: {contract} + +## Verdict +fail + +## Findings +- {severity}: {file} - {risk} + +## Required Fixes +- {minimal fix} + +## Verification To Rerun +- {commands} +``` + +## FESA Evaluation Rubric +Use this rubric for implementation review. + +| Criterion | Pass Condition | +|---|---| +| Contract compliance | Changes stay within scope and allowed files | +| Architecture | Domain, AnalysisModel, AnalysisState, DofManager, adapters, and factories follow documented ownership | +| Numerical conventions | DOF order, units, signs, double precision, int64 ids, constrained/free mapping, and full-vector reactions are preserved | +| Reference verification | Stored `references/` artifacts are used when required; CSV column mapping is correct | +| Tests | Tests exist before implementation and cover failure modes, not only happy paths | +| Diagnostics | Unsupported input and singular systems produce actionable diagnostics | +| Results schema | Outputs follow step/frame/field/history and HDF5 schema rules | +| Handoff | `PLAN.md` and `PROGRESS.md` reflect the new state | + +## Harness Complexity Policy +Add harness complexity only when it catches real risk. + +Use a single agent for: +- small wording changes. +- mechanical docs updates. +- metadata-only corrections. + +Use Planner -> Generator -> Evaluator for: +- C++ solver implementation. +- parser behavior changes. +- result schema or HDF5 writer changes. +- reference comparator changes. +- MITC4 formulation-dependent work. +- phase generation or execution. + +Review the harness periodically. If an agent role no longer adds value, simplify it. diff --git a/docs/MITC4_FORMULATION.md b/docs/MITC4_FORMULATION.md index 21f98c7..84c7796 100644 --- a/docs/MITC4_FORMULATION.md +++ b/docs/MITC4_FORMULATION.md @@ -164,6 +164,17 @@ Before integration with the global solver: - bending-dominated sanity case. - drilling stiffness sensitivity check. +## Pre-Implementation Gate +Do not implement `MITC4Element` until these decisions are recorded in this document or a linked ADR: +- exact transverse shear tying point equations. +- exact local shell basis algorithm for flat and non-flat quadrilaterals. +- exact default drilling stiffness scale and parameter name. +- exact integration point ordering. +- whether Phase 1 reports only `U` and `RF`, or also element stress/strain/resultant fields. +- stress/strain recovery locations if `S`, `E`, or `SF` are included in Phase 1. + +If implementation starts before all optional stress/resultant decisions are closed, limit Phase 1 mandatory outputs to `U` and `RF`. + ## Reference Benchmarks MITC4 baseline acceptance should include: - single-element membrane test. @@ -176,6 +187,15 @@ MITC4 baseline acceptance should include: Distorted mesh tests should be added after the baseline passes, but Phase 1 does not implement general mesh quality diagnostics. +Current stored reference artifact: +- `references/quad_01.inp` +- `references/quad_01_displacements.csv` + +Compatibility note: +- `quad_01.inp` is an Abaqus-generated S4R/NLGEOM reference input and is not a Phase 1 MITC4 parser acceptance case. +- It should be used as an external reference artifact and future compatibility target unless a normalized Phase 1 `S4` input is added. +- The displacement CSV can still exercise `U` field comparison infrastructure once node ids and component mapping are supported. + ## Future Extensions Geometric nonlinearity: - Add updated geometry, current frame handling, tangent stiffness, and Newton-Raphson integration. diff --git a/docs/MULTI_AGENT_RESEARCH_PLAN.md b/docs/MULTI_AGENT_RESEARCH_PLAN.md index 9309009..ede8f16 100644 --- a/docs/MULTI_AGENT_RESEARCH_PLAN.md +++ b/docs/MULTI_AGENT_RESEARCH_PLAN.md @@ -8,10 +8,12 @@ No solver code should be implemented from this plan directly. Each agent should ## Project Context FESA is a C++17 finite element structural analysis solver. Phase 1 targets a linear static MITC4 shell solver with linear elastic material, nodal loads, fixed boundary conditions, an Abaqus input subset, HDF5-oriented results, and reference-result comparison. -The user will provide Abaqus input files and solved reference result files under a repository `reference/` folder. Abaqus is not available locally, so validation must compare against stored reference artifacts. +The user provides Abaqus input files and solved reference result files under the repository `references/` folder. Abaqus is not available locally, so validation must compare against stored reference artifacts. ## Current Architecture Constraints -- Follow `AGENTS.md`, `docs/ARCHITECTURE.md`, and `docs/ADR.md`. +- Follow `AGENTS.md`, `PROGRESS.md`, `PLAN.md`, `docs/README.md`, `docs/HARNESS_ENGINEERING.md`, `docs/ARCHITECTURE.md`, and `docs/ADR.md`. +- Use `PLAN.md` for future task ownership, priority, and open questions. +- Use `PROGRESS.md` for completed work, verification notes, blockers, and risks. - Follow the technical dossier documents: - `docs/NUMERICAL_CONVENTIONS.md` - `docs/ABAQUS_INPUT_SUBSET.md` @@ -36,6 +38,7 @@ The user will provide Abaqus input files and solved reference result files under - Require singular system diagnostics. - Defer mesh quality diagnostics in Phase 1. - Map Abaqus `S4` to FESA `MITC4`; defer `S4R`. +- Use the Planner -> Generator -> Evaluator harness from `docs/HARNESS_ENGINEERING.md` for nontrivial implementation and phase execution. ## Created Codex Agents The first recommended batch has been created under `.codex/agents/`. @@ -46,7 +49,7 @@ The first recommended batch has been created under `.codex/agents/`. 2. `verification_benchmark_researcher` - File: `.codex/agents/verification-benchmark-researcher.toml` - - Role: research benchmark cases, reference folder contracts, comparison methods, and acceptance criteria. + - Role: research benchmark cases, `references/` contracts, comparison methods, and acceptance criteria. 3. `mitc4_formulation_researcher` - File: `.codex/agents/mitc4-formulation-researcher.toml` @@ -56,6 +59,18 @@ The first recommended batch has been created under `.codex/agents/`. - File: `.codex/agents/abaqus-compatibility-researcher.toml` - Role: research the Phase 1 Abaqus input subset and parser compatibility rules. +5. `harness_sprint_planner` + - File: `.codex/agents/harness-sprint-planner.toml` + - Role: convert PLAN.md tasks and phase steps into testable sprint contracts. + +6. `implementation_generator` + - File: `.codex/agents/implementation-generator.toml` + - Role: implement exactly one accepted sprint contract using TDD. + +7. `harness_sprint_evaluator` + - File: `.codex/agents/harness-sprint-evaluator.toml` + - Role: independently pass/fail sprint output against the contract, docs, tests, and reference artifacts. + ## Recommended Agent Execution Order 1. Run `fem_literature_researcher`. 2. Run `verification_benchmark_researcher`. @@ -64,6 +79,8 @@ The first recommended batch has been created under `.codex/agents/`. This order keeps theory, verification targets, element formulation, and input compatibility aligned before implementation planning. +Before asking `phase_planner` or `harness_sprint_planner` to create implementation steps, review `PROGRESS.md`, `PLAN.md`, `docs/README.md`, and `docs/HARNESS_ENGINEERING.md`; list any unchecked Implementation Readiness Checklist items in the planning output. + ## Later Agent Candidates These agents should be created after the first four produce dossiers. @@ -85,16 +102,21 @@ These agents should be created after the first four produce dossiers. 6. `architecture_guardrail_reviewer` - Reviews dossiers, phase plans, and future implementation against project rules and ADRs. +7. `reference_artifact_curator` + - Reviews user-provided `references/` artifacts for CSV/manifest completeness, result schema consistency, source solver metadata, tolerance clarity, and comparison path validity. + +8. `numerical_conventions_reviewer` + - Reviews implementation plans for drift from DOF, unit, sign, precision, reaction recovery, and singular diagnostic rules. + ## User-Provided Inputs Needed The following inputs should be requested from the user as the research matures: -1. Confirmation or revision of the proposed `reference/` folder layout in `docs/VERIFICATION_PLAN.md`. -2. At least one simple Abaqus `.inp` file and its solved reference result artifact. -3. Preferred reference result format if available: `.dat`, `.rpt`, exported `.csv`, JSON, HDF5, or another structured format. -4. Preferred numerical tolerances for reference comparison, or permission for agents to propose initial tolerances per benchmark. -5. The Abaqus version used to generate reference artifacts. -6. Whether the first implementation plan should target CMake, another build system, or a project-specific build layout. -7. The final default scale for artificial drilling stiffness, after formulation research. +1. Additional small Abaqus `.inp` files and solved result artifacts under `references/`. +2. Reaction-force reference exports when available, preferably using a documented `*_reactions.csv` convention. +3. Preferred numerical tolerances for reference comparison, or permission for agents to propose initial tolerances per benchmark. +4. The Abaqus version used to generate each reference artifact when it is not evident from the `.inp` file header. +5. Whether the first implementation plan should target CMake, another build system, or a project-specific build layout. +6. The final default scale for artificial drilling stiffness, after formulation research. ## Seed Sources - Abaqus input syntax rules: https://abaqus-docs.mit.edu/2017/English/SIMACAEMODRefMap/simamod-c-inputsyntax.htm diff --git a/docs/NUMERICAL_CONVENTIONS.md b/docs/NUMERICAL_CONVENTIONS.md index 818008f..ecf96ac 100644 --- a/docs/NUMERICAL_CONVENTIONS.md +++ b/docs/NUMERICAL_CONVENTIONS.md @@ -19,7 +19,8 @@ When a convention here conflicts with a lower-level implementation note, this do - Result sign conventions follow Abaqus conventions. - Essential boundary conditions are applied by constrained DOF elimination. - Reaction forces are recovered from the full system vectors, not from the reduced system alone. -- Reference comparison uses stored Abaqus inputs and stored solved reference results under `reference/`. +- Reference comparison uses stored Abaqus inputs and stored solved reference results under `references/`. +- Initial displacement reference comparison uses Abaqus-exported `*_displacements.csv` files. - Mesh quality diagnostics are not part of Phase 1. - Singular system diagnostics are required. - Floating-point values use `double` by default. @@ -104,6 +105,25 @@ Stress and strain component ordering follows the Abaqus convention: Shear strain output should be documented as engineering shear strain when matched to Abaqus-style output. +## Abaqus Displacement CSV Mapping +The initial reference displacement CSV format maps Abaqus exported columns to FESA `U` components: + +| CSV Column | FESA Component | Meaning | +|---|---|---| +| `Node Label` | `entity_id` | Node id, stored as int64 | +| `U-U1` | `UX` | Translation in global 1/x direction | +| `U-U2` | `UY` | Translation in global 2/y direction | +| `U-U3` | `UZ` | Translation in global 3/z direction | +| `UR-UR1` | `RX` | Rotation about global 1/x direction, radians | +| `UR-UR2` | `RY` | Rotation about global 2/y direction, radians | +| `UR-UR3` | `RZ` | Rotation about global 3/z direction, radians | + +Rules: +- CSV numeric values are parsed as `double`. +- Node labels are matched to FESA result entity ids exactly. +- Missing nodes, duplicate node labels, missing columns, or nonnumeric values are reference artifact errors. +- CSV comparison uses the same absolute/relative tolerance policy as other reference artifacts. + ## Boundary Conditions Phase 1 uses constrained DOF elimination: @@ -178,8 +198,17 @@ pass if abs(actual - expected) <= abs_tol Initial defaults may be proposed per benchmark in `docs/VERIFICATION_PLAN.md`. Final tolerances should be tied to stored reference data and solver maturity. +## Implementation Gate +Before implementing solver modules that depend on numerical conventions: +- Define the `Real`, id, equation id, and sparse index aliases in one shared core header. +- Define a single DOF enum or equivalent mapping for `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. +- Add tests proving Abaqus DOF numbers `1..6` map to the same internal components. +- Add tests proving constrained/free vector reconstruction preserves original full-space DOF order. +- Add at least one reaction recovery test that computes `K_full * U_full - F_full`. +- Ensure singular diagnostics can reference node id, DOF component, element id, property id, and set name. + ## Open Decisions - The exact default drilling stiffness scale. - The final MITC4 local basis algorithm for warped quadrilateral elements. - Which shell stress/strain/resultant outputs are mandatory in Phase 1. -- The first accepted reference result file format under `reference/`. +- Optional non-displacement CSV formats, such as reaction force or stress/resultant exports. diff --git a/docs/PRD.md b/docs/PRD.md index bb746a1..098447a 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -6,12 +6,15 @@ MITC4 Shell 요소를 사용해 구조 해석을 하는 유한요소 솔버를 ## 사용자 구조해석을 원하는 엔지니어 +## 제품 방향 +FESA는 Abaqus input subset을 읽고 `references/`에 저장된 Abaqus reference 결과와 비교 가능한 구조해석 결과를 생성하는 검증 중심 solver이다. Phase 1은 "많은 기능"보다 "작은 선형 정적 MITC4 모델들을 정확하게 풀고 반복 검증할 수 있는 기반"을 목표로 한다. + ## 핵심 기능 1. MITC4 Shell 요소를 사용한 구조해석 2. Parallel 연산을 통한 계산 성능 향상 3. Abaqus Input format 사용을 통해 다른 상용 소프트웨어와 호환성 높음 4. step/frame/history 기반 해석 결과 관리 -5. reference 모델 결과 비교를 통한 정확도 검증 +5. `references/*.inp`와 `references/*_displacements.csv` 등 reference 모델 결과 비교를 통한 정확도 검증 6. singular system 진단을 통한 해석 실패 원인 추적 ## 개발 계획 @@ -23,13 +26,14 @@ MITC4 Shell 요소를 사용해 구조 해석을 하는 유한요소 솔버를 - Abaqus input subset: *Node, *Element, *Nset, *Elset, *Material, *Elastic, *Shell Section, *Boundary, *Cload, *Step - 선형 정적 해석 - step/frame 기반 결과 저장의 최소 구조 - - reference 모델 결과 비교 테스트 + - `references/`의 Abaqus input/result artifact 기반 reference 모델 결과 비교 테스트 - 6자유도 shell node: UX, UY, UZ, RX, RY, RZ - drilling 자유도에는 작은 인공 강성 적용 - constrained DOF 제거 방식 - full vector 기반 reaction force 계산 - double precision 및 int64 id/index/equation numbering - singular system 진단 + - Abaqus 실행 없이 저장된 reference artifact와 비교 2. Phase 2 - 압력하중 - RBE2, RBE3 경계조건 @@ -47,3 +51,23 @@ MITC4 Shell 요소를 사용해 구조 해석을 하는 유한요소 솔버를 5. Phase 5 - 1D, 3D 요소 구현 - 기타 하중, 경계조건 구현 + +## Phase 1 성공 기준 +- Phase 1 Abaqus input subset을 파싱하여 `Domain`과 `AnalysisModel`을 일관되게 구성할 수 있다. +- `DofManager`가 6자유도 shell node, constrained/free mapping, full/reduced vector reconstruction을 검증 가능한 방식으로 처리한다. +- 최소 MITC4 element-level test가 통과한다: shape function, stiffness symmetry, rigid body behavior, drilling stiffness sensitivity. +- 선형 정적 해석에서 `U`와 `RF`를 결과 schema에 맞게 저장한다. +- `RF = K_full * U_full - F_full` 기반 reaction recovery가 reference 또는 평형 테스트로 검증된다. +- singular system negative test가 원인을 설명하는 진단 메시지를 낸다. +- 최소 3개 stored reference case가 통과한다: single-element case, simple multi-element plate/shell case, curved shell benchmark. 초기 자동 displacement 비교 형식은 `*_displacements.csv`이다. + +## Phase 1 제외 범위 +- Abaqus `S4R` 및 hourglass control +- pressure load +- RBE2/RBE3 +- nonzero prescribed displacement +- geometric/material nonlinearity +- dynamic analysis +- heat transfer 및 thermal-stress coupling +- composite shell section +- mesh quality diagnostics diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e50420c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,100 @@ +# FESA Documentation Index + +## Purpose +This directory is the source of truth for FESA solver planning, architecture, numerical conventions, verification, and future implementation work. + +Before changing solver code, read this file, then read the documents listed under "Required Reading". + +## Required Reading +1. `../AGENTS.md` +2. `../PROGRESS.md` +3. `../PLAN.md` +4. `PRD.md` +5. `HARNESS_ENGINEERING.md` +6. `ARCHITECTURE.md` +7. `ADR.md` +8. `NUMERICAL_CONVENTIONS.md` +9. `ABAQUS_INPUT_SUBSET.md` +10. `VERIFICATION_PLAN.md` +11. `RESULTS_SCHEMA.md` +12. `MITC4_FORMULATION.md` + +`MULTI_AGENT_RESEARCH_PLAN.md` is required when planning delegated research or creating/updating Codex agents. + +## Document Roles +| Document | Role | +|---|---| +| `PRD.md` | Product scope, users, phase roadmap, and Phase 1 success criteria | +| `HARNESS_ENGINEERING.md` | Planner/Generator/Evaluator workflow, sprint contract format, and evaluator rubric | +| `ARCHITECTURE.md` | Solver architecture, ownership boundaries, data flow, and extension model | +| `ADR.md` | Durable architecture decisions and tradeoffs | +| `NUMERICAL_CONVENTIONS.md` | DOF, units, coordinate/sign conventions, precision, boundary/reaction policy | +| `ABAQUS_INPUT_SUBSET.md` | Phase 1 Abaqus `.inp` subset, parser behavior, and unsupported features | +| `VERIFICATION_PLAN.md` | Reference folder contract, benchmark matrix, tolerances, and negative tests | +| `RESULTS_SCHEMA.md` | Step/frame/field/history result model and HDF5 layout | +| `MITC4_FORMULATION.md` | MITC4 baseline formulation contract and pre-implementation open decisions | +| `MULTI_AGENT_RESEARCH_PLAN.md` | Codex agent roles, research sequence, and source map | + +Root-level coordination files: + +| Document | Role | +|---|---| +| `../PLAN.md` | Forward-looking task plan, priorities, owners, and open questions | +| `../PROGRESS.md` | Completed work, verification results, blockers, and current risks | + +## Precedence Rules +When documents conflict: + +1. `AGENTS.md` critical rules win. +2. `ADR.md` wins for accepted design decisions. +3. `NUMERICAL_CONVENTIONS.md` wins for DOF, units, precision, signs, and reaction recovery. +4. Domain-specific dossier documents win within their area: + - Abaqus parser: `ABAQUS_INPUT_SUBSET.md` + - Verification/reference data: `VERIFICATION_PLAN.md` + - HDF5 results: `RESULTS_SCHEMA.md` + - MITC4 element formulation: `MITC4_FORMULATION.md` +5. `ARCHITECTURE.md` provides system structure and should be updated when module responsibilities change. +6. `PRD.md` records scope and roadmap, not low-level implementation details. + +If a lower-precedence document needs to override a higher-precedence decision, update or add an ADR first. + +## Phase 1 Hard Invariants +- Use 6 shell DOFs per node: `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`. +- Retain drilling DOF and use a small artificial drilling stiffness. +- Use `double` for real values. +- Use signed int64 ids, indices, equation ids, and sparse indices. +- Do not enforce a unit system; require self-consistent Abaqus-style units. +- Follow Abaqus-compatible sign conventions for results. +- Apply essential boundary conditions by constrained DOF elimination. +- Recover reactions from full vectors: `R_full = K_full * U_full - F_full`. +- Map Abaqus `S4` to FESA `MITC4`. +- Defer `S4R`. +- Require singular system diagnostics. +- Defer mesh quality diagnostics. +- Validate against stored reference artifacts under `../references/`; do not require Abaqus execution. +- Treat Abaqus `*.inp` files plus `*_displacements.csv` result files as the initial accepted reference artifact contract. + +## Implementation Readiness Checklist +Before creating Phase 1 implementation steps: + +- Use `../references/` as the accepted reference artifact folder. +- Use Abaqus `.inp` files plus solved `*_displacements.csv` files as the first automated displacement reference format. +- Keep a compatibility note when a stored Abaqus reference input contains features outside the current Phase 1 parser subset. +- Finalize the MITC4 transverse shear tying-point equations. +- Finalize the MITC4 local shell basis algorithm. +- Finalize the default artificial drilling stiffness scale. +- Decide whether Phase 1 outputs only `U` and `RF`, or also `S`, `E`, and `SF`. +- Decide the build system, with CMake as the recommended default unless project constraints say otherwise. + +## Documentation Change Rules +- Keep changes narrow and update every affected document. +- When a change affects future work, update `../PLAN.md`. +- When a meaningful change is completed, update `../PROGRESS.md`. +- When a rule becomes binding, add or update an ADR. +- When a scope changes, update `PRD.md`. +- When module ownership changes, update `ARCHITECTURE.md`. +- When parser behavior changes, update `ABAQUS_INPUT_SUBSET.md`. +- When numerical conventions change, update `NUMERICAL_CONVENTIONS.md`. +- When output layout changes, update `RESULTS_SCHEMA.md`. +- When benchmark or tolerance policy changes, update `VERIFICATION_PLAN.md`. +- When MITC4 math or assumptions change, update `MITC4_FORMULATION.md`. diff --git a/docs/RESULTS_SCHEMA.md b/docs/RESULTS_SCHEMA.md index df62e1c..d6519ea 100644 --- a/docs/RESULTS_SCHEMA.md +++ b/docs/RESULTS_SCHEMA.md @@ -187,6 +187,20 @@ component_labels = ["SF1", "SF2", "SF12", "SM1", "SM2", "SM12", "SS13", "SS23"] The final component labels should be cross-checked with the accepted Abaqus reference output variables. +## Phase 1 Mandatory Outputs +The first complete linear static solver path must write: +- root metadata attributes: `schema_name`, `schema_version`, `solver_name`, `dof_convention`, `sign_convention`. +- `/model/nodes/ids` +- `/model/nodes/coordinates` +- `/model/elements/ids` +- `/model/elements/types` +- `/model/elements/connectivity` +- `/results/steps//frames/0/fieldOutputs/U` +- `/results/steps//frames/0/fieldOutputs/RF` +- frame attributes for `frame_id`, `step_time`, `total_time`, `increment`, `iteration`, and `converged`. + +Stress, strain, and section force outputs may remain optional until the MITC4 displacement/reaction benchmarks are stable. + ## Frame Attributes Attach these attributes to each frame group: @@ -248,6 +262,40 @@ Attributes: - `comparison_status` - `comparison_timestamp_utc` +## CSV Reference Input Mapping +FESA solver outputs remain HDF5-oriented, but early verification may compare HDF5 field outputs against stored Abaqus CSV artifacts under `references/`. + +Initial accepted displacement reference naming: + +```text +references/.inp +references/_displacements.csv +``` + +`*_displacements.csv` maps to: + +```text +/results/steps//frames//fieldOutputs/U +``` + +Required CSV columns: + +| CSV Column | HDF5 Field Component | +|---|---| +| `Node Label` | `entity_ids` | +| `U-U1` | `UX` | +| `U-U2` | `UY` | +| `U-U3` | `UZ` | +| `UR-UR1` | `RX` | +| `UR-UR2` | `RY` | +| `UR-UR3` | `RZ` | + +Rules: +- CSV files are reference inputs for tests, not the primary FESA result storage format. +- The comparator must preserve node-label matching and must not rely on row order alone. +- The comparison report may be stored under `/referenceComparison`. +- Reaction CSV, stress CSV, or section force CSV formats must be documented before automated use. + ## Naming Rules - Use stable ASCII group and dataset names. - Use original input labels as attributes when names contain spaces or nonportable characters. @@ -266,3 +314,4 @@ For large models: - Exact mandatory stress/strain/resultant output variables in Phase 1. - Whether result files always mirror the model or only store output entity ids. - Whether reference comparison results are stored in solver output files or separate reports. +- Exact naming and column contracts for non-displacement Abaqus CSV reference files. diff --git a/docs/VERIFICATION_PLAN.md b/docs/VERIFICATION_PLAN.md index 94c1e13..a8a56f8 100644 --- a/docs/VERIFICATION_PLAN.md +++ b/docs/VERIFICATION_PLAN.md @@ -19,7 +19,7 @@ FESA verification uses multiple layers: 3. Assembly tests for small known systems. 4. Solver tests for constrained/reduced systems and reaction recovery. 5. Input-to-result integration tests using Abaqus-style `.inp` files. -6. Reference comparisons against stored Abaqus result artifacts under `reference/`. +6. Reference comparisons against stored Abaqus result artifacts under `references/`. A single large benchmark is not enough. Phase 1 should use many small models that isolate failure causes. @@ -29,31 +29,56 @@ Abaqus is not available locally and must not be required by CI. Rules: - The user provides `.inp` files and solved reference result artifacts. - FESA tests compare against stored artifacts only. -- Reference artifacts are treated as the numerical source of truth once accepted into `reference/`. +- Reference artifacts are treated as the numerical source of truth once accepted into `references/`. -## Proposed Reference Folder Contract -Recommended layout: +## Accepted Reference Folder Contract +The repository uses `references/` as the durable root for stored Abaqus inputs and solved output artifacts. + +Initial flat-file convention: ```text -reference/ +references/ + README.md + .inp + _displacements.csv +``` + +Accepted initial case: + +```text +references/ + quad_01.inp + quad_01_displacements.csv +``` + +`quad_01_displacements.csv` contains 121 nodal rows with these columns: + +```text +Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3 +``` + +Future manifest-driven layout is still recommended as the case set grows: + +```text +references/ README.md phase1-linear-static/ manifest.json single-element-membrane/ model.inp - expected.json + displacements.csv notes.md single-element-bending/ model.inp - expected.json + displacements.csv notes.md cantilever-strip/ model.inp - expected.json + displacements.csv notes.md scordelis-lo-roof/ model.inp - expected.json + displacements.csv notes.md ``` @@ -66,47 +91,76 @@ reference/ { "name": "single-element-membrane", "input": "single-element-membrane/model.inp", - "expected": "single-element-membrane/expected.json", + "displacements": "single-element-membrane/displacements.csv", "analysis_type": "linear_static", "element": "MITC4", "source_solver": "Abaqus", "source_solver_version": "provided-by-user", "unit_system_note": "self-consistent", + "result_format": "abaqus_displacement_csv_v1", "tags": ["phase1", "element", "membrane"] } ] } ``` -## Expected Result Artifact -Preferred `expected.json` structure: +## Displacement CSV Artifact +Initial automated displacement comparison uses Abaqus-exported CSV files named: -```json -{ - "schema_version": 1, - "case_name": "single-element-membrane", - "source": { - "solver": "Abaqus", - "version": "provided-by-user", - "created_by": "provided-by-user" - }, - "units": { - "note": "self-consistent" - }, - "comparisons": [ - { - "path": "/results/steps/Step-1/frames/0/fieldOutputs/U", - "entity": {"type": "node", "id": 4}, - "component": "UX", - "expected": 0.0, - "abs_tol": 1e-9, - "rel_tol": 1e-7 - } - ] -} +```text +_displacements.csv ``` -CSV or `.rpt` files may be stored as raw source artifacts, but structured JSON or HDF5 comparison artifacts should be used by automated tests. +Required columns: + +| CSV Column | FESA Field | Component | +|---|---|---| +| `Node Label` | `U` | entity id | +| `U-U1` | `U` | `UX` | +| `U-U2` | `U` | `UY` | +| `U-U3` | `U` | `UZ` | +| `UR-UR1` | `U` | `RX` | +| `UR-UR2` | `U` | `RY` | +| `UR-UR3` | `U` | `RZ` | + +Rules: +- Column matching is by exact normalized header text after trimming whitespace. +- `Node Label` is parsed as int64. +- All displacement and rotation values are parsed as `double`. +- The comparator must match rows by node id, not by row order alone. +- Missing nodes in FESA output, duplicate CSV node labels, missing columns, or nonnumeric values are reference artifact errors. +- CSV displacement comparison maps to `/results/steps//frames//fieldOutputs/U`. +- If the `.inp` has multiple steps or frames, the case metadata must state which step/frame the CSV represents. + +Structured JSON or HDF5 comparison artifacts may be added later, but `*_displacements.csv` is the accepted first automated reference format. + +## Other Result Artifacts +Additional Abaqus result exports may be added as the solver grows. Recommended naming: + +| File Pattern | Purpose | Status | +|---|---|---| +| `*_displacements.csv` | Nodal `U` displacement/rotation comparison | Accepted initial format | +| `*_reactions.csv` | Nodal `RF` force/moment comparison | Recommended future format | +| `*_stresses.csv` | Stress output comparison | Future, after `S` output is documented | +| `*_strains.csv` | Strain output comparison | Future, after `E` output is documented | +| `*_section_forces.csv` | Shell resultant comparison | Future, after `SF` output is documented | + +Each new CSV type must define required columns, component mapping, position, basis, and tolerances before automated use. + +## Stored Reference Compatibility Notes +Stored Abaqus `.inp` files are preserved as generated, even when they include features outside the current FESA parser subset. This preserves provenance but does not expand Phase 1 support. + +Current initial case: + +| Case | Files | Notes | +|---|---|---| +| `quad_01` | `quad_01.inp`, `quad_01_displacements.csv` | Abaqus/CAE Learning Edition 2024 input; 121 displacement rows; includes `S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=YES`, which are outside the current Phase 1 parser/solver subset | + +Rules: +- Original `.inp` files under `references/` should not be modified just to fit FESA Phase 1. +- If a normalized Phase 1-compatible input is needed, add it as a separate file with a clear name and note its relationship to the original. +- Unsupported features in stored reference inputs must be reported by compatibility checks, not silently accepted by parser tests. +- A reference case may be useful for future compatibility even before it is executable by the current Phase 1 solver. ## Tolerance Policy Use absolute and relative tolerance: @@ -122,7 +176,7 @@ Initial guidance: - DOF mapping tests: exact integer match. - Small linear algebra tests: `abs_tol = 1e-12`, `rel_tol = 1e-10`. - Element stiffness symmetry: matrix norm tolerance around `1e-10` to `1e-9`, adjusted by stiffness scale. -- Reference displacement tests: start with `rel_tol = 1e-5` and refine after baseline agreement. +- Reference displacement CSV tests: start with `rel_tol = 1e-5` and refine after baseline agreement. - Reaction equilibrium tests: use force-scale-based tolerances. Final benchmark tolerances must be stored with each reference case. @@ -151,6 +205,20 @@ Before MITC4 Phase 1 is considered credible: - MITC4 element stiffness is symmetric within tolerance for linear elastic Phase 1. - Rigid body modes do not create artificial membrane/bending stiffness beyond documented drilling stabilization effects. - At least three stored Abaqus reference models pass: one single-element case, one simple multi-element plate/shell case, and one curved shell benchmark. +- At least one automated `*_displacements.csv` comparison passes against a stored Abaqus reference case. + +## Reference Onboarding Checklist +Every accepted reference case should include: +- an Abaqus `.inp` file. +- at least one solved result artifact, initially `*_displacements.csv`. +- raw Abaqus output when available, such as `.dat`, `.rpt`, `.csv`, or exported table files. +- `notes.md` describing model purpose, unit system note, Abaqus version, expected dominant behavior, and known limitations. +- comparison paths matching `docs/RESULTS_SCHEMA.md`. +- absolute and relative tolerances for each compared quantity. +- tags that identify phase, feature, benchmark family, and expected failure mode if negative. +- compatibility notes for unsupported Abaqus keywords or analysis options. + +Reference artifacts should not be overwritten silently. If reference values change, record why they changed in `notes.md` or the manifest. ## Singular System Verification Required negative tests: @@ -169,8 +237,8 @@ Required negative tests: - Thermal-stress coupling. ## User Inputs Needed -- First accepted `reference/` folder layout. -- At least one Abaqus `.inp` with solved displacement and reaction output. -- Preferred raw reference format: `.dat`, `.rpt`, `.csv`, `.json`, or `.h5`. -- Abaqus version used to generate the reference. -- Whether reference files are generated from Abaqus `S4` only for Phase 1. +- Additional small Abaqus `.inp` files and solved result CSV files under `references/`. +- Reaction output artifacts when available, preferably a documented `*_reactions.csv`. +- Abaqus version used to generate each reference when it is not evident from the `.inp`. +- Unit system notes and tolerances for each case. +- Whether future Phase 1-compatible reference files will use Abaqus `S4`, while `S4R` remains deferred. diff --git a/plugins/fesa-commands/.codex-plugin/plugin.json b/plugins/fesa-commands/.codex-plugin/plugin.json new file mode 100644 index 0000000..8d65e70 --- /dev/null +++ b/plugins/fesa-commands/.codex-plugin/plugin.json @@ -0,0 +1,30 @@ +{ + "name": "fesa-commands", + "version": "1.0.0", + "description": "Repo-local FESA slash commands for Codex project coordination, reference readiness, and documentation workflows.", + "repository": "https://teagit.mimi1011.synology.me/baram2584/FESADev.git", + "keywords": [ + "fesa", + "finite-element", + "codex-commands", + "workflow" + ], + "interface": { + "displayName": "FESA Commands", + "shortDescription": "FESA project workflow commands for this repository", + "longDescription": "Repo-local commands for checking FESA readiness, synchronizing PLAN/PROGRESS, onboarding reference artifacts, guarding documentation, drafting phases, and preparing handoffs.", + "developerName": "Local Repository", + "category": "Productivity", + "capabilities": [ + "Interactive", + "Read", + "Write" + ], + "defaultPrompt": [ + "Check whether FESA is ready for Phase 1.", + "Sync PLAN.md and PROGRESS.md.", + "Inspect stored reference artifacts." + ], + "brandColor": "#0F766E" + } +} diff --git a/plugins/fesa-commands/commands/adr.md b/plugins/fesa-commands/commands/adr.md new file mode 100644 index 0000000..c1833b3 --- /dev/null +++ b/plugins/fesa-commands/commands/adr.md @@ -0,0 +1,28 @@ +--- +description: Draft or update an ADR for a FESA architecture or numerical decision. +--- + +# /adr + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, `/docs/ARCHITECTURE.md`, `/docs/ADR.md`, and the topic-specific design docs. +- Use `$fesa-adr-update` when available. +- Identify whether this is a new decision, a revision, or a superseding ADR. + +## Task + +- Capture context, decision, consequences, alternatives considered, and affected docs. +- Update related docs only when needed to keep decisions consistent. +- Record follow-up tasks in `PLAN.md` and completed ADR work in `PROGRESS.md`. + +## Verification + +- Check links and decision numbering manually. +- Run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: drafted or updated ADR content +- **Status**: success | partial | blocked +- **Details**: ADR section changed, affected docs, and validation result diff --git a/plugins/fesa-commands/commands/benchmark-add.md b/plugins/fesa-commands/commands/benchmark-add.md new file mode 100644 index 0000000..3adf0e5 --- /dev/null +++ b/plugins/fesa-commands/commands/benchmark-add.md @@ -0,0 +1,29 @@ +--- +description: Guide or validate addition of a new stored reference benchmark. +--- + +# /benchmark-add + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, `/docs/VERIFICATION_PLAN.md`, `/docs/RESULTS_SCHEMA.md`, and `/docs/ABAQUS_INPUT_SUBSET.md`. +- Use `$fesa-reference-onboarding` when available. +- Do not run Abaqus locally. + +## Task + +- Help organize the benchmark input, solved reference values such as `*_displacements.csv`, tolerance metadata, unit notes, result fields, and provenance. +- Check that Abaqus keywords are within the Phase 1 subset or explicitly documented as unsupported. +- Ensure comparison values can be tied to step/frame/field/history result paths. + +## Verification + +- Parse any JSON metadata if present. +- For `*_displacements.csv`, check the required Abaqus displacement/rotation columns. +- Run `python scripts/validate_workspace.py` when files are changed. + +## Result + +- **Action**: added or validated benchmark artifact +- **Status**: ready | partial | blocked +- **Details**: benchmark name, files, missing metadata, and validation result diff --git a/plugins/fesa-commands/commands/doc-guard.md b/plugins/fesa-commands/commands/doc-guard.md new file mode 100644 index 0000000..3cd92d2 --- /dev/null +++ b/plugins/fesa-commands/commands/doc-guard.md @@ -0,0 +1,28 @@ +--- +description: Review FESA documentation for architecture, numerical, and coordination drift. +--- + +# /doc-guard + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, `/docs/README.md`, and the docs changed in the current work. +- Use `$fesa-doc-sync` and `$fesa-review` when available. +- If the user explicitly asks for delegated review, use `harness_reviewer` or `progress_plan_auditor`. + +## Task + +- Check consistency across architecture, ADRs, numerical conventions, Abaqus subset, verification plan, result schema, MITC4 formulation, PLAN.md, and PROGRESS.md. +- Lead with concrete drift findings and file references. +- Keep comments focused on correctness, missing decisions, and validation gaps. + +## Verification + +- If edits are made, run `python scripts/validate_workspace.py`. +- Confirm that future work stays in PLAN.md and completed work stays in PROGRESS.md. + +## Result + +- **Action**: reviewed documentation guardrails +- **Status**: success | partial | blocked +- **Details**: findings, edits if any, and validation result diff --git a/plugins/fesa-commands/commands/handoff.md b/plugins/fesa-commands/commands/handoff.md new file mode 100644 index 0000000..c2fe5e5 --- /dev/null +++ b/plugins/fesa-commands/commands/handoff.md @@ -0,0 +1,28 @@ +--- +description: Prepare a concise handoff for the next FESA agent session. +--- + +# /handoff + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, and changed files. +- Use `$fesa-doc-sync` when available. +- Identify what changed, what was verified, what remains blocked, and what should happen next. + +## Task + +- Add a factual `PROGRESS.md` entry for completed work. +- Update `PLAN.md` only for future tasks, changed ownership, open questions, or blockers. +- Keep the handoff concise enough that a fresh agent can act without private context. + +## Verification + +- Run `python scripts/validate_workspace.py`. +- Confirm that the next-session required reading remains current. + +## Result + +- **Action**: prepared handoff +- **Status**: success | partial | blocked +- **Details**: progress entry, plan deltas, blockers, and validation result diff --git a/plugins/fesa-commands/commands/phase-draft.md b/plugins/fesa-commands/commands/phase-draft.md new file mode 100644 index 0000000..e8023f5 --- /dev/null +++ b/plugins/fesa-commands/commands/phase-draft.md @@ -0,0 +1,31 @@ +--- +description: Draft Harness phase and step files for FESA implementation planning. +--- + +# /phase-draft + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, `/docs/README.md`, `/docs/HARNESS_ENGINEERING.md`, and all Phase 1 design docs. +- Use `$fesa-readiness` first. +- Use `$fesa-phase-planning` and the repo `harness-workflow` skill when file generation is requested. +- Do not spawn subagents unless the user explicitly asks for delegated work. + +## Task + +- Identify readiness blockers before drafting steps. +- Keep each phase step self-contained for a fresh Codex session. +- Include a sprint contract: objective, required reading, scope, allowed files, explicit non-goals, tests to write first, reference artifacts, acceptance commands, evaluator checklist, and handoff requirements. +- Do not hide unresolved formulation or reference decisions inside broad implementation steps. + +## Verification + +- Parse generated JSON phase files. +- Re-read generated `stepN.md` files for self-containment. +- Run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: drafted phase files +- **Status**: success | partial | blocked +- **Details**: phase directory, step count, blockers, and validation result diff --git a/plugins/fesa-commands/commands/plan-sync.md b/plugins/fesa-commands/commands/plan-sync.md new file mode 100644 index 0000000..770c951 --- /dev/null +++ b/plugins/fesa-commands/commands/plan-sync.md @@ -0,0 +1,29 @@ +--- +description: Reconcile PLAN.md and PROGRESS.md after documentation, planning, or implementation work. +--- + +# /plan-sync + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, and changed files. +- Use `$fesa-doc-sync` when available. +- Identify completed work, future tasks, blockers, and stale items. + +## Task + +- Move completed facts into `PROGRESS.md`. +- Keep future tasks and open decisions in `PLAN.md`. +- Preserve history unless the user explicitly asks for archival cleanup. +- Add changed files and verification notes to the progress entry. + +## Verification + +- Parse or inspect any file format touched. +- Run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: synchronized plan and progress +- **Status**: success | partial | blocked +- **Details**: entries changed, remaining blockers, validation result diff --git a/plugins/fesa-commands/commands/readiness.md b/plugins/fesa-commands/commands/readiness.md new file mode 100644 index 0000000..34b4967 --- /dev/null +++ b/plugins/fesa-commands/commands/readiness.md @@ -0,0 +1,28 @@ +--- +description: Check whether FESA is ready to start Phase 1 implementation planning or coding. +--- + +# /readiness + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, and `/docs/README.md`. +- Read the readiness-related docs listed by `/docs/README.md`. +- Use `$fesa-readiness` when available. + +## Task + +- Evaluate each Phase 1 readiness item in `/PLAN.md` and the Implementation Readiness Checklist in `/docs/README.md`. +- Classify each item as ready, blocked, deferred with explicit acceptance, or unknown. +- Do not start implementation from this command. + +## Verification + +- If files are unchanged, no repository validation is required. +- If readiness notes are written to `PLAN.md` or `PROGRESS.md`, run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: checked implementation readiness +- **Status**: ready | blocked | partial +- **Details**: readiness table, blockers, and recommended next decision diff --git a/plugins/fesa-commands/commands/reference-check.md b/plugins/fesa-commands/commands/reference-check.md new file mode 100644 index 0000000..5817dd6 --- /dev/null +++ b/plugins/fesa-commands/commands/reference-check.md @@ -0,0 +1,30 @@ +--- +description: Inspect stored Abaqus reference artifacts for Phase 1 verification readiness. +--- + +# /reference-check + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, `/docs/VERIFICATION_PLAN.md`, `/docs/RESULTS_SCHEMA.md`, and `/docs/ABAQUS_INPUT_SUBSET.md`. +- Use `$fesa-reference-onboarding` when available. +- If the user explicitly asks for delegated review, use the `reference_artifact_curator` agent. + +## Task + +- Inspect the `references/` folder when present. +- Check for `.inp` files, `*_displacements.csv` files, tolerance metadata, units notes, Abaqus version/provenance, and mapping to FESA result fields. +- For displacement CSV files, verify the required columns `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, `UR-UR3`. +- Flag unsupported Abaqus input features as compatibility notes; do not treat stored reference input as automatic Phase 1 parser support. +- Do not run Abaqus locally. + +## Verification + +- If no files are edited, summarize findings only. +- If manifests or docs are updated, run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: checked reference artifacts +- **Status**: ready | partial | blocked +- **Details**: artifacts found, missing metadata, and comparison-readiness notes diff --git a/plugins/fesa-commands/commands/status.md b/plugins/fesa-commands/commands/status.md new file mode 100644 index 0000000..08dae81 --- /dev/null +++ b/plugins/fesa-commands/commands/status.md @@ -0,0 +1,28 @@ +--- +description: Summarize the current FESA project status and next work from PLAN.md and PROGRESS.md. +--- + +# /status + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, and `/docs/README.md`. +- Check whether the user asked for status only or also wants edits. +- Do not modify files unless the user explicitly asks for synchronization or cleanup. + +## Task + +- Summarize current project status, blockers, risks, and the next actionable items. +- Mention whether solver implementation has started. +- Highlight unresolved Phase 1 readiness items and the current validation state. + +## Verification + +- If no edits were made, state that no validation command was required. +- If the user asked you to update files, run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: reported FESA status +- **Status**: success | partial | blocked +- **Details**: current objective, blockers, next tasks, and validation note diff --git a/plugins/fesa-commands/commands/verify-docs.md b/plugins/fesa-commands/commands/verify-docs.md new file mode 100644 index 0000000..3caf29f --- /dev/null +++ b/plugins/fesa-commands/commands/verify-docs.md @@ -0,0 +1,30 @@ +--- +description: Validate Codex extension files, plugin command metadata, and project documentation metadata. +--- + +# /verify-docs + +## Preflight + +- Read `/AGENTS.md`, `/PROGRESS.md`, `/PLAN.md`, and any changed `.codex`, `plugins/`, `.agents/plugins/`, or documentation files. +- Use `$fesa-doc-sync` when available. + +## Task + +- Parse `.codex/config.toml` and `.codex/agents/*.toml`. +- Parse `.codex/hooks.json`. +- Parse `plugins/*/.codex-plugin/plugin.json`. +- Parse `.agents/plugins/marketplace.json`. +- Check `.codex/skills/*/SKILL.md` frontmatter for `name` and `description`. +- Check `plugins/*/commands/*.md` command Markdown files for description frontmatter. + +## Verification + +- Run the format checks above. +- Run `python scripts/validate_workspace.py`. + +## Result + +- **Action**: verified docs and Codex extension files +- **Status**: success | partial | blocked +- **Details**: files checked, failures, and validation result diff --git a/references/README.md b/references/README.md new file mode 100644 index 0000000..d4d51df --- /dev/null +++ b/references/README.md @@ -0,0 +1,37 @@ +# FESA Reference Artifacts + +This folder stores Abaqus input files and solved reference result artifacts used to verify FESA. + +Abaqus is not run by the repository validation flow. Files here are treated as stored numerical references after they are accepted. + +## Initial Accepted Files + +| Case | Input | Result Artifact | Notes | +|---|---|---|---| +| `quad_01` | `quad_01.inp` | `quad_01_displacements.csv` | Abaqus/CAE Learning Edition 2024 source input; displacement CSV has 121 nodal rows | + +## Displacement CSV Format + +`*_displacements.csv` files use Abaqus-exported nodal displacement columns: + +```text +Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3 +``` + +Mapping to FESA: + +| CSV Column | FESA Component | +|---|---| +| `Node Label` | node id | +| `U-U1` | `UX` | +| `U-U2` | `UY` | +| `U-U3` | `UZ` | +| `UR-UR1` | `RX` | +| `UR-UR2` | `RY` | +| `UR-UR3` | `RZ` | + +## Compatibility Notes + +Stored Abaqus inputs may contain features outside the current FESA Phase 1 parser subset. Preserve the original files and document unsupported features instead of editing them in place. + +`quad_01.inp` currently includes `TYPE=S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=YES`. These are stored for reference provenance and future compatibility work; they are not Phase 1 parser acceptance requirements unless `docs/ABAQUS_INPUT_SUBSET.md` and `docs/ADR.md` are updated. diff --git a/references/quad_01.inp b/references/quad_01.inp new file mode 100644 index 0000000..ba810aa --- /dev/null +++ b/references/quad_01.inp @@ -0,0 +1,304 @@ +*Heading +** Job name: quad_01 Model name: Model-1 +** Generated by: Abaqus/CAE Learning Edition 2024 +*Preprint, echo=NO, model=NO, history=NO, contact=NO +** +** PARTS +** +*Part, name=Part-1 +*Node + 1, 10., 0., 0. + 2, 0., 0., 0. + 3, 0., -10., 0. + 4, 10., -10., 0. + 5, -10., 0., 0. + 6, -10., -10., 0. + 7, 0., 10., 0. + 8, -10., 10., 0. + 9, 10., 10., 0. + 10, 8., 0., 0. + 11, 6., 0., 0. + 12, 4., 0., 0. + 13, 2., 0., 0. + 14, 0., -2., 0. + 15, 0., -4., 0. + 16, 0., -6., 0. + 17, 0., -8., 0. + 18, 2., -10., 0. + 19, 4., -10., 0. + 20, 6., -10., 0. + 21, 8., -10., 0. + 22, 10., -8., 0. + 23, 10., -6., 0. + 24, 10., -4., 0. + 25, 10., -2., 0. + 26, -2., 0., 0. + 27, -4., 0., 0. + 28, -6., 0., 0. + 29, -8., 0., 0. + 30, -10., -2., 0. + 31, -10., -4., 0. + 32, -10., -6., 0. + 33, -10., -8., 0. + 34, -8., -10., 0. + 35, -6., -10., 0. + 36, -4., -10., 0. + 37, -2., -10., 0. + 38, 0., 2., 0. + 39, 0., 4., 0. + 40, 0., 6., 0. + 41, 0., 8., 0. + 42, -2., 10., 0. + 43, -4., 10., 0. + 44, -6., 10., 0. + 45, -8., 10., 0. + 46, -10., 8., 0. + 47, -10., 6., 0. + 48, -10., 4., 0. + 49, -10., 2., 0. + 50, 10., 2., 0. + 51, 10., 4., 0. + 52, 10., 6., 0. + 53, 10., 8., 0. + 54, 8., 10., 0. + 55, 6., 10., 0. + 56, 4., 10., 0. + 57, 2., 10., 0. + 58, 8., -2., 0. + 59, 6., -2., 0. + 60, 4., -2., 0. + 61, 2., -2., 0. + 62, 8., -4., 0. + 63, 6., -4., 0. + 64, 4., -4., 0. + 65, 2., -4., 0. + 66, 8., -6., 0. + 67, 6., -6., 0. + 68, 4., -6., 0. + 69, 2., -6., 0. + 70, 8., -8., 0. + 71, 6., -8., 0. + 72, 4., -8., 0. + 73, 2., -8., 0. + 74, -2., -2., 0. + 75, -4., -2., 0. + 76, -6., -2., 0. + 77, -8., -2., 0. + 78, -2., -4., 0. + 79, -4., -4., 0. + 80, -6., -4., 0. + 81, -8., -4., 0. + 82, -2., -6., 0. + 83, -4., -6., 0. + 84, -6., -6., 0. + 85, -8., -6., 0. + 86, -2., -8., 0. + 87, -4., -8., 0. + 88, -6., -8., 0. + 89, -8., -8., 0. + 90, -8., 2., 0. + 91, -6., 2., 0. + 92, -4., 2., 0. + 93, -2., 2., 0. + 94, -8., 4., 0. + 95, -6., 4., 0. + 96, -4., 4., 0. + 97, -2., 4., 0. + 98, -8., 6., 0. + 99, -6., 6., 0. + 100, -4., 6., 0. + 101, -2., 6., 0. + 102, -8., 8., 0. + 103, -6., 8., 0. + 104, -4., 8., 0. + 105, -2., 8., 0. + 106, 2., 2., 0. + 107, 4., 2., 0. + 108, 6., 2., 0. + 109, 8., 2., 0. + 110, 2., 4., 0. + 111, 4., 4., 0. + 112, 6., 4., 0. + 113, 8., 4., 0. + 114, 2., 6., 0. + 115, 4., 6., 0. + 116, 6., 6., 0. + 117, 8., 6., 0. + 118, 2., 8., 0. + 119, 4., 8., 0. + 120, 6., 8., 0. + 121, 8., 8., 0. +*Element, type=S4R + 1, 1, 10, 58, 25 + 2, 10, 11, 59, 58 + 3, 11, 12, 60, 59 + 4, 12, 13, 61, 60 + 5, 13, 2, 14, 61 + 6, 25, 58, 62, 24 + 7, 58, 59, 63, 62 + 8, 59, 60, 64, 63 + 9, 60, 61, 65, 64 +10, 61, 14, 15, 65 +11, 24, 62, 66, 23 +12, 62, 63, 67, 66 +13, 63, 64, 68, 67 +14, 64, 65, 69, 68 +15, 65, 15, 16, 69 +16, 23, 66, 70, 22 +17, 66, 67, 71, 70 +18, 67, 68, 72, 71 +19, 68, 69, 73, 72 +20, 69, 16, 17, 73 +21, 22, 70, 21, 4 +22, 70, 71, 20, 21 +23, 71, 72, 19, 20 +24, 72, 73, 18, 19 +25, 73, 17, 3, 18 +26, 2, 26, 74, 14 +27, 26, 27, 75, 74 +28, 27, 28, 76, 75 +29, 28, 29, 77, 76 +30, 29, 5, 30, 77 +31, 14, 74, 78, 15 +32, 74, 75, 79, 78 +33, 75, 76, 80, 79 +34, 76, 77, 81, 80 +35, 77, 30, 31, 81 +36, 15, 78, 82, 16 +37, 78, 79, 83, 82 +38, 79, 80, 84, 83 +39, 80, 81, 85, 84 +40, 81, 31, 32, 85 +41, 16, 82, 86, 17 +42, 82, 83, 87, 86 +43, 83, 84, 88, 87 +44, 84, 85, 89, 88 +45, 85, 32, 33, 89 +46, 17, 86, 37, 3 +47, 86, 87, 36, 37 +48, 87, 88, 35, 36 +49, 88, 89, 34, 35 +50, 89, 33, 6, 34 +51, 5, 29, 90, 49 +52, 29, 28, 91, 90 +53, 28, 27, 92, 91 +54, 27, 26, 93, 92 +55, 26, 2, 38, 93 +56, 49, 90, 94, 48 +57, 90, 91, 95, 94 +58, 91, 92, 96, 95 +59, 92, 93, 97, 96 +60, 93, 38, 39, 97 +61, 48, 94, 98, 47 +62, 94, 95, 99, 98 +63, 95, 96, 100, 99 +64, 96, 97, 101, 100 +65, 97, 39, 40, 101 +66, 47, 98, 102, 46 +67, 98, 99, 103, 102 +68, 99, 100, 104, 103 +69, 100, 101, 105, 104 +70, 101, 40, 41, 105 +71, 46, 102, 45, 8 +72, 102, 103, 44, 45 +73, 103, 104, 43, 44 +74, 104, 105, 42, 43 +75, 105, 41, 7, 42 + 76, 2, 13, 106, 38 + 77, 13, 12, 107, 106 + 78, 12, 11, 108, 107 + 79, 11, 10, 109, 108 + 80, 10, 1, 50, 109 + 81, 38, 106, 110, 39 + 82, 106, 107, 111, 110 + 83, 107, 108, 112, 111 + 84, 108, 109, 113, 112 + 85, 109, 50, 51, 113 + 86, 39, 110, 114, 40 + 87, 110, 111, 115, 114 + 88, 111, 112, 116, 115 + 89, 112, 113, 117, 116 + 90, 113, 51, 52, 117 + 91, 40, 114, 118, 41 + 92, 114, 115, 119, 118 + 93, 115, 116, 120, 119 + 94, 116, 117, 121, 120 + 95, 117, 52, 53, 121 + 96, 41, 118, 57, 7 + 97, 118, 119, 56, 57 + 98, 119, 120, 55, 56 + 99, 120, 121, 54, 55 +100, 121, 53, 9, 54 +*Nset, nset=Set-1, generate + 1, 121, 1 +*Elset, elset=Set-1, generate + 1, 100, 1 +** Section: Section-1 +*Shell Section, elset=Set-1, material=Material-1 +1., 5 +*End Part +** +** +** ASSEMBLY +** +*Assembly, name=Assembly +** +*Instance, name=Part-1-1, part=Part-1 +*End Instance +** +*Nset, nset=Set-1, instance=Part-1-1 + 1, 3, 4, 5, 6, 7, 8, 9, 18, 19, 20, 21, 22, 23, 24, 25 + 30, 31, 32, 33, 34, 35, 36, 37, 42, 43, 44, 45, 46, 47, 48, 49 + 50, 51, 52, 53, 54, 55, 56, 57 +*Elset, elset=Set-1, instance=Part-1-1 + 1, 6, 11, 16, 21, 22, 23, 24, 25, 30, 35, 40, 45, 46, 47, 48 + 49, 50, 51, 56, 61, 66, 71, 72, 73, 74, 75, 80, 85, 90, 95, 96 + 97, 98, 99, 100 +*Nset, nset=Set-2, instance=Part-1-1 + 2, +*End Assembly +** +** MATERIALS +** +*Material, name=Material-1 +*Density +2700., +*Elastic + 7e+10, 0.3 +** +** BOUNDARY CONDITIONS +** +** Name: BC-1 Type: Displacement/Rotation +*Boundary +Set-1, 1, 1 +Set-1, 2, 2 +Set-1, 3, 3 +Set-1, 4, 4 +Set-1, 5, 5 +Set-1, 6, 6 +** ---------------------------------------------------------------- +** +** STEP: Step-1 +** +*Step, name=Step-1, nlgeom=YES, inc=1000 +*Static +0.1, 1., 1e-05, 1. +** +** LOADS +** +** Name: Load-1 Type: Concentrated force +*Cload +Set-2, 3, -100000. +** +** OUTPUT REQUESTS +** +*Restart, write, frequency=0 +** +** FIELD OUTPUT: F-Output-1 +** +*Output, field, variable=PRESELECT +** +** HISTORY OUTPUT: H-Output-1 +** +*Output, history, variable=PRESELECT +*End Step diff --git a/references/quad_01_displacements.csv b/references/quad_01_displacements.csv new file mode 100644 index 0000000..3c4ae0f --- /dev/null +++ b/references/quad_01_displacements.csv @@ -0,0 +1,122 @@ + Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3 +1,-4.27E-37,5.71E-38,-3.64E-33,-7.31E-33,-3.72E-32,0 +2,-5.22E-23,6.10E-23,-3.79E-05,1.44E-23,-1.94E-22,-8.84E-17 +3,-5.71E-38,4.27E-37,-3.64E-33,-3.72E-32,-7.31E-33,0 +4,0,0,0,0,0,0 +5,4.27E-37,5.71E-38,-3.64E-33,-7.31E-33,3.72E-32,0 +6,0,0,0,0,0,0 +7,5.71E-38,-4.27E-37,-3.64E-33,3.72E-32,7.31E-33,0 +8,0,0,0,0,0,0 +9,0,0,0,0,0,0 +10,-9.95E-12,-1.14E-16,-3.29E-06,1.93E-22,-2.97E-06,6.72E-17 +11,-8.43E-12,-2.92E-16,-1.12E-05,-1.13E-21,-4.70E-06,1.65E-17 +12,-2.89E-13,-5.28E-17,-2.11E-05,-2.73E-22,-4.79E-06,4.86E-17 +13,7.04E-12,-4.18E-16,-3.10E-05,3.26E-22,-5.01E-06,-1.95E-17 +14,6.41E-17,-7.04E-12,-3.10E-05,-5.01E-06,-1.03E-21,6.70E-17 +15,1.02E-16,2.88E-13,-2.11E-05,-4.79E-06,-1.20E-21,3.38E-17 +16,-1.85E-16,8.43E-12,-1.12E-05,-4.70E-06,-1.53E-21,5.49E-17 +17,1.31E-16,9.95E-12,-3.29E-06,-2.97E-06,-1.18E-22,-2.64E-17 +18,-7.86E-38,4.75E-37,-2.69E-33,-3.92E-32,-6.35E-33,1.24E-38 +19,-1.22E-37,3.95E-37,-1.98E-33,-3.40E-32,-7.96E-33,1.19E-38 +20,-8.28E-38,2.40E-37,-4.25E-34,-2.24E-32,-5.61E-33,0 +21,-6.04E-38,1.25E-37,7.97E-34,-9.75E-33,-4.89E-33,0 +22,-6.52E-38,-6.09E-38,1.23E-34,1.92E-33,2.84E-34,0 +23,-1.50E-37,-5.42E-38,-2.56E-34,2.18E-33,-3.90E-33,0 +24,-2.46E-37,-7.69E-38,-1.92E-33,3.03E-33,-1.57E-32,0 +25,-3.61E-37,-5.05E-38,-2.82E-33,4.63E-33,-2.81E-32,0 +26,-7.04E-12,4.18E-16,-3.10E-05,9.30E-22,5.01E-06,-1.95E-17 +27,2.89E-13,5.28E-17,-2.11E-05,-7.12E-22,4.79E-06,4.86E-17 +28,8.43E-12,2.92E-16,-1.12E-05,1.49E-21,4.70E-06,1.65E-17 +29,9.95E-12,1.14E-16,-3.29E-06,-4.43E-22,2.97E-06,6.72E-17 +30,3.61E-37,-5.05E-38,-2.82E-33,4.63E-33,2.81E-32,0 +31,2.46E-37,-7.69E-38,-1.92E-33,3.03E-33,1.57E-32,0 +32,1.50E-37,-5.42E-38,-2.56E-34,2.18E-33,3.90E-33,0 +33,6.52E-38,-6.09E-38,1.23E-34,1.92E-33,-2.84E-34,0 +34,-6.09E-38,6.52E-38,1.23E-34,2.84E-34,-1.92E-33,0 +35,-5.42E-38,1.50E-37,-2.56E-34,-3.90E-33,-2.18E-33,0 +36,-7.69E-38,2.46E-37,-1.92E-33,-1.57E-32,-3.03E-33,0 +37,-5.05E-38,3.61E-37,-2.82E-33,-2.81E-32,-4.63E-33,0 +38,-6.41E-17,7.04E-12,-3.10E-05,5.01E-06,2.43E-21,6.70E-17 +39,-1.02E-16,-2.88E-13,-2.11E-05,4.79E-06,1.07E-21,3.38E-17 +40,1.85E-16,-8.43E-12,-1.12E-05,4.70E-06,1.66E-21,5.49E-17 +41,-1.31E-16,-9.95E-12,-3.29E-06,2.97E-06,4.45E-23,-2.64E-17 +42,7.86E-38,-4.75E-37,-2.69E-33,3.92E-32,6.35E-33,1.24E-38 +43,1.22E-37,-3.95E-37,-1.98E-33,3.40E-32,7.96E-33,1.19E-38 +44,8.28E-38,-2.40E-37,-4.25E-34,2.24E-32,5.61E-33,0 +45,6.04E-38,-1.25E-37,7.97E-34,9.75E-33,4.89E-33,0 +46,6.52E-38,6.09E-38,1.23E-34,-1.92E-33,-2.84E-34,0 +47,1.50E-37,5.42E-38,-2.56E-34,-2.18E-33,3.90E-33,0 +48,2.46E-37,7.69E-38,-1.92E-33,-3.03E-33,1.57E-32,0 +49,3.61E-37,5.05E-38,-2.82E-33,-4.63E-33,2.81E-32,0 +50,-3.61E-37,5.05E-38,-2.82E-33,-4.63E-33,-2.81E-32,0 +51,-2.46E-37,7.69E-38,-1.92E-33,-3.03E-33,-1.57E-32,0 +52,-1.50E-37,5.42E-38,-2.56E-34,-2.18E-33,-3.90E-33,0 +53,-6.52E-38,6.09E-38,1.23E-34,-1.92E-33,2.84E-34,0 +54,6.09E-38,-6.52E-38,1.23E-34,-2.84E-34,1.92E-33,0 +55,5.42E-38,-1.50E-37,-2.56E-34,3.90E-33,2.18E-33,0 +56,7.69E-38,-2.46E-37,-1.92E-33,1.57E-32,3.03E-33,0 +57,5.05E-38,-3.61E-37,-2.82E-33,2.81E-32,4.63E-33,0 +58,-8.31E-12,2.78E-12,-3.00E-06,-3.74E-07,-2.77E-06,5.78E-14 +59,-8.28E-12,2.53E-12,-1.01E-05,-9.51E-07,-4.03E-06,6.11E-13 +60,-1.97E-13,4.77E-13,-1.91E-05,-2.05E-06,-4.80E-06,9.50E-13 +61,6.72E-12,-6.72E-12,-2.77E-05,-3.23E-06,-3.23E-06,1.52E-16 +62,-7.42E-12,3.90E-12,-2.16E-06,-5.48E-07,-1.97E-06,1.02E-13 +63,-7.20E-12,5.25E-12,-7.40E-06,-1.70E-06,-3.17E-06,5.05E-13 +64,-3.03E-12,3.03E-12,-1.39E-05,-3.07E-06,-3.07E-06,3.16E-17 +65,-4.76E-13,1.97E-13,-1.91E-05,-4.80E-06,-2.05E-06,-9.50E-13 +66,-3.50E-12,3.57E-12,-1.12E-06,-6.15E-07,-1.11E-06,-7.75E-14 +67,-5.98E-12,5.98E-12,-3.99E-06,-1.65E-06,-1.65E-06,-1.48E-17 +68,-5.24E-12,7.20E-12,-7.40E-06,-3.17E-06,-1.70E-06,-5.05E-13 +69,-2.53E-12,8.29E-12,-1.01E-05,-4.03E-06,-9.51E-07,-6.11E-13 +70,-2.52E-12,2.52E-12,-2.70E-07,-3.36E-07,-3.36E-07,2.19E-17 +71,-3.57E-12,3.50E-12,-1.12E-06,-1.11E-06,-6.15E-07,7.74E-14 +72,-3.90E-12,7.42E-12,-2.16E-06,-1.97E-06,-5.48E-07,-1.02E-13 +73,-2.78E-12,8.31E-12,-3.00E-06,-2.77E-06,-3.74E-07,-5.78E-14 +74,-6.72E-12,-6.72E-12,-2.77E-05,-3.23E-06,3.23E-06,-1.63E-16 +75,1.98E-13,4.77E-13,-1.91E-05,-2.05E-06,4.80E-06,-9.50E-13 +76,8.28E-12,2.53E-12,-1.01E-05,-9.51E-07,4.03E-06,-6.11E-13 +77,8.31E-12,2.78E-12,-3.00E-06,-3.74E-07,2.77E-06,-5.78E-14 +78,4.76E-13,1.97E-13,-1.91E-05,-4.80E-06,2.05E-06,9.50E-13 +79,3.03E-12,3.03E-12,-1.39E-05,-3.07E-06,3.07E-06,-1.58E-16 +80,7.20E-12,5.25E-12,-7.40E-06,-1.70E-06,3.17E-06,-5.05E-13 +81,7.42E-12,3.90E-12,-2.16E-06,-5.48E-07,1.97E-06,-1.02E-13 +82,2.53E-12,8.28E-12,-1.01E-05,-4.03E-06,9.51E-07,6.10E-13 +83,5.24E-12,7.20E-12,-7.40E-06,-3.17E-06,1.70E-06,5.05E-13 +84,5.98E-12,5.98E-12,-3.99E-06,-1.65E-06,1.65E-06,8.86E-17 +85,3.50E-12,3.57E-12,-1.12E-06,-6.15E-07,1.11E-06,7.74E-14 +86,2.78E-12,8.31E-12,-3.00E-06,-2.77E-06,3.74E-07,5.77E-14 +87,3.90E-12,7.42E-12,-2.16E-06,-1.97E-06,5.48E-07,1.02E-13 +88,3.57E-12,3.50E-12,-1.12E-06,-1.11E-06,6.15E-07,-7.72E-14 +89,2.52E-12,2.52E-12,-2.70E-07,-3.36E-07,3.36E-07,-9.90E-17 +90,8.31E-12,-2.78E-12,-3.00E-06,3.74E-07,2.77E-06,5.78E-14 +91,8.28E-12,-2.53E-12,-1.01E-05,9.51E-07,4.03E-06,6.11E-13 +92,1.97E-13,-4.77E-13,-1.91E-05,2.05E-06,4.80E-06,9.50E-13 +93,-6.72E-12,6.72E-12,-2.77E-05,3.23E-06,3.23E-06,1.52E-16 +94,7.42E-12,-3.90E-12,-2.16E-06,5.48E-07,1.97E-06,1.02E-13 +95,7.20E-12,-5.25E-12,-7.40E-06,1.70E-06,3.17E-06,5.05E-13 +96,3.03E-12,-3.03E-12,-1.39E-05,3.07E-06,3.07E-06,3.16E-17 +97,4.76E-13,-1.97E-13,-1.91E-05,4.80E-06,2.05E-06,-9.50E-13 +98,3.50E-12,-3.57E-12,-1.12E-06,6.15E-07,1.11E-06,-7.75E-14 +99,5.98E-12,-5.98E-12,-3.99E-06,1.65E-06,1.65E-06,-1.48E-17 +100,5.24E-12,-7.20E-12,-7.40E-06,3.17E-06,1.70E-06,-5.05E-13 +101,2.53E-12,-8.29E-12,-1.01E-05,4.03E-06,9.51E-07,-6.11E-13 +102,2.52E-12,-2.52E-12,-2.70E-07,3.36E-07,3.36E-07,2.19E-17 +103,3.57E-12,-3.50E-12,-1.12E-06,1.11E-06,6.15E-07,7.74E-14 +104,3.90E-12,-7.42E-12,-2.16E-06,1.97E-06,5.48E-07,-1.02E-13 +105,2.78E-12,-8.31E-12,-3.00E-06,2.77E-06,3.74E-07,-5.78E-14 +106,6.72E-12,6.72E-12,-2.77E-05,3.23E-06,-3.23E-06,-1.63E-16 +107,-1.98E-13,-4.77E-13,-1.91E-05,2.05E-06,-4.80E-06,-9.50E-13 +108,-8.28E-12,-2.53E-12,-1.01E-05,9.51E-07,-4.03E-06,-6.11E-13 +109,-8.31E-12,-2.78E-12,-3.00E-06,3.74E-07,-2.77E-06,-5.78E-14 +110,-4.76E-13,-1.97E-13,-1.91E-05,4.80E-06,-2.05E-06,9.50E-13 +111,-3.03E-12,-3.03E-12,-1.39E-05,3.07E-06,-3.07E-06,-1.58E-16 +112,-7.20E-12,-5.25E-12,-7.40E-06,1.70E-06,-3.17E-06,-5.05E-13 +113,-7.42E-12,-3.90E-12,-2.16E-06,5.48E-07,-1.97E-06,-1.02E-13 +114,-2.53E-12,-8.28E-12,-1.01E-05,4.03E-06,-9.51E-07,6.10E-13 +115,-5.24E-12,-7.20E-12,-7.40E-06,3.17E-06,-1.70E-06,5.05E-13 +116,-5.98E-12,-5.98E-12,-3.99E-06,1.65E-06,-1.65E-06,8.86E-17 +117,-3.50E-12,-3.57E-12,-1.12E-06,6.15E-07,-1.11E-06,7.74E-14 +118,-2.78E-12,-8.31E-12,-3.00E-06,2.77E-06,-3.74E-07,5.77E-14 +119,-3.90E-12,-7.42E-12,-2.16E-06,1.97E-06,-5.48E-07,1.02E-13 +120,-3.57E-12,-3.50E-12,-1.12E-06,1.11E-06,-6.15E-07,-7.72E-14 +121,-2.52E-12,-2.52E-12,-2.70E-07,3.36E-07,-3.36E-07,-9.90E-17