Compare commits

...

23 Commits

Author SHA1 Message Date
KOKO\Mimi a058ef7674 docs: clarify Harness phase ownership 2026-08-12 15:31:46 +09:00
KOKO\Mimi 18296a1944 docs: align Harness step execution guidance 2026-08-12 15:27:32 +09:00
KOKO\Mimi 65d5e0748a docs: reserve Harness branch selection for executor 2026-08-12 15:19:59 +09:00
KOKO\Mimi 713b41b771 docs: bind implementation agents to Harness steps 2026-08-12 15:16:01 +09:00
KOKO\Mimi ab69a3d0e2 docs: plan Harness agent step execution roles 2026-08-12 15:02:22 +09:00
KOKO\Mimi 85cd17da57 docs: design Harness phase step execution roles 2026-08-12 11:19:27 +09:00
KOKO\Mimi 60b42f4aec docs: pass MITC4 numerical review 2026-08-12 03:54:28 +09:00
KOKO\Mimi 22a32386d5 docs: define MITC4 reference case inventory 2026-08-12 03:44:18 +09:00
KOKO\Mimi 73df844979 docs: simplify MITC4 verification and drilling scope 2026-08-12 03:39:57 +09:00
KOKO\Mimi 188bf31e44 docs: align FESA agents with minimal reference cases 2026-08-12 03:31:08 +09:00
KOKO\Mimi 5c08f1cf83 docs: simplify FESA reference validation policy 2026-08-12 03:19:20 +09:00
KOKO\Mimi 0e785154d4 docs: design independent reference validation policy 2026-08-12 03:14:26 +09:00
KOKO\Mimi 0428759b13 docs: rerun MITC4 numerical review 2026-08-12 02:36:46 +09:00
KOKO\Mimi 2bd297d84b docs: make reference metadata optional 2026-08-12 02:22:01 +09:00
KOKO\Mimi f28dbd7e42 Merge branch 'dev' into MITC4 2026-08-12 01:40:00 +09:00
KOKO\Mimi 73dc761282 docs: define MITC4 shell I/O contract 2026-08-12 01:23:56 +09:00
KOKO\Mimi 8b412f7c80 Merge branch 'dev' into MITC4 2026-08-11 20:44:40 +09:00
KOKO\Mimi ebb26572e5 docs: rerun MITC4 shell numerical review 2026-08-11 20:33:08 +09:00
KOKO\Mimi 6cb0302015 docs: revise MITC4 shell formulation after review 2026-08-11 19:59:52 +09:00
KOKO\Mimi 0a5aad427e docs: add MITC4 shell numerical review 2026-08-11 14:39:51 +09:00
KOKO\Mimi 67251e0507 docs: add MITC4 shell formulation 2026-08-11 14:27:07 +09:00
KOKO\Mimi 02680dcdca docs: add MITC4 shell research evidence 2026-08-11 03:08:04 +09:00
KOKO\Mimi 5c3025a634 docs: add MITC4 shell requirements baseline 2026-08-11 02:42:24 +09:00
55 changed files with 4783 additions and 678 deletions
+28 -2
View File
@@ -7,6 +7,23 @@ description: Use when planning agentic implementation phases, creating phases/in
이 프로젝트는 Harness 프레임워크를 사용한다. 아래 워크플로에 따라 작업한다.
## 필수 읽기와 실행 소유권
계획, phase 파일 생성, 또는 Executor 실행 전 `AGENTS.md`,
`docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`를 읽는다. Step을 구현할 때는
`.codex/hooks.json`, phase index, Executor가 선택한 현재 `stepN.md`도 읽는다.
| 책임 | 소유자 |
|---|---|
| branch, pending Step 선택, retry, timestamps, commits, advancement, top-level phase status | Executor (`scripts/execute.py`) |
| Executor-selected current Step의 작업과 해당 Step의 `status``summary` / `error_message` / `blocked_reason` payload | Implementation Agent |
| PreToolUse interception과 Stop whole-project validation | `.codex/hooks.json`으로 등록된 hooks |
Hook은 자동으로 작동한다. `scripts/hooks/pre_tool_use.py` 또는
`scripts/hooks/stop_validation.py`를 수동 실행해 등록된 hook의 대체물로 사용하지 않는다.
계획 승인은 Executor 실행 권한이 아니다. `scripts/execute.py`는 별도의 명시적 사용자
요청에서만 실행한다.
## A. 탐색
`AGENTS.md``docs/` 하위 문서(PRD, ARCHITECTURE, ADR 등)를 읽고 프로젝트의 기획,
@@ -42,6 +59,9 @@ description: Use when planning agentic implementation phases, creating phases/in
사용자가 초안을 승인한 후에만 다음 파일을 생성한다.
Planning Agent는 초안을 만들고 승인받아 planning files만 materialize한다. planning
Agent는 Step을 선택하거나 실행하지 않는다.
### D-1. `phases/index.json`
여러 task를 관리하는 top-level 인덱스다. 이미 존재하면 `phases` 배열에 새 항목을
@@ -136,10 +156,11 @@ MSBuild.exe MyProject.sln /m /p:Configuration=Debug /p:Platform=x64
1. Acceptance Criteria command를 실행한다.
2. ARCHITECTURE 디렉터리 구조를 따르는지 확인한다.
3. ADR 기술 스택과 `AGENTS.md` CRITICAL 규칙을 확인한다.
4. 결과에 따라 task index의 해당 step 갱신한다.
4. 결과에 따라 task index의 Executor-selected current Step 갱신한다.
- 성공: `status`를 `completed`로 바꾸고 한 줄 `summary` 기록
- 수정 3회 후 실패: `status`를 `error`로 바꾸고 `error_message` 기록
- 실행을 계속할 수 없는 오류: `status`를 `error`로 바꾸고 `error_message` 기록
- 사용자 개입 필요: `status`를 `blocked`로 바꾸고 `blocked_reason` 기록 후 중단
- retry, timestamp, commit, 다음 Step 선택과 advancement는 Executor가 기록한다.
## 금지사항
@@ -149,6 +170,11 @@ MSBuild.exe MyProject.sln /m /p:Configuration=Debug /p:Platform=x64
## E. 실행
별도의 명시적 사용자 요청이 있고 approved planning files가 materialize된 경우에만
Executor를 시작한다. Implementation Agent는 Executor가 선택한 current `stepN.md` 하나만
`RED -> observed failure -> minimal GREEN -> focused/full VERIFY` 순서로 수행하고 다음
Step을 시작하지 않는다.
```bash
python scripts/execute.py {task-name}
python scripts/execute.py {task-name} --push
+4 -3
View File
@@ -14,7 +14,8 @@ Mission:
Skill references:
- Use $fesa-requirements-baseline when intake, gate audit, or handoff work depends on requirements, acceptance criteria, verification quantities, tolerance decisions, or Requirement Verification Matrix evidence.
- Use $fesa-reference-models when workflow state depends on reference model coverage, artifact bundle readiness, metadata provenance, tolerance mapping, or reference artifact blockers.
- Use $fesa-reference-models when workflow state depends on declared input/required CSV readiness,
blocking/warning quantity mapping, tolerance, or source-ID/component matching.
- Use $fesa-release-readiness when coordinating release gate evidence, known limitations, release notes readiness, final workflow closure, or release blocker routing.
Hard boundaries:
@@ -67,7 +68,7 @@ Agent routing:
- Formulation Agent: use for weak form, discretization, kinematics, constitutive, element equation, output recovery, or algorithm gaps.
- Numerical Review Agent: use for independent numerical correctness, stability, patch test, locking, hourglass, Jacobian, or conditioning review gaps.
- I/O Definition Agent: use for Abaqus .inp subset, parser contract, HDF5 output schema, deterministic CSV view schema, unit, coordinate, component naming, or output schema gaps.
- Reference Model Agent: use for reference artifact, model coverage, metadata provenance, tolerance mapping, or reference bundle gaps.
- Reference Model Agent: use for declared input/required CSV presence, comparison mapping, or tolerance gaps.
- Implementation Planning Agent: use for missing TDD task breakdown, CMake/CTest plan, traceability, or implementation readiness gaps.
- Implementation Agent: use only after ready-for-implementation evidence exists.
- Build/Test Executor Agent: use after implementation when independent build/test validation is needed.
@@ -96,7 +97,7 @@ Status rules:
- needs-formulation: Formulation Agent must draft or revise the FEM formulation.
- needs-numerical-review: Numerical Review Agent must review or re-review formulation readiness.
- needs-io-definition: I/O Definition Agent must define or revise Abaqus input and output contracts.
- needs-reference-model: Reference Model Agent must define or revise reference model artifacts.
- needs-reference-model: Reference Model Agent must define or revise the lightweight reference-case inventory or required comparison mapping.
- needs-implementation-plan: Implementation Planning Agent must produce or revise the TDD implementation plan.
- ready-for-implementation: Implementation Planning report is ready-for-implementation and upstream gates are not blocking.
- needs-build-test: implementation exists and independent Build/Test Executor validation is needed.
+19
View File
@@ -15,6 +15,11 @@ Mission:
Skill references:
- Use $fesa-cpp-msvc-tdd when writing C++17/MSVC tests first, verifying RED failures, implementing minimal solver code, registering CMake/CTest targets, running validation, or preparing implementation reports.
Mandatory Harness reading:
- Read .agents/skills/harness/SKILL.md, docs/HARNESS.md, docs/HARNESS_WORKFLOW.md, and
.codex/hooks.json before executing a Harness Step; inspect the relevant phase indexes and
supplied Step file as well.
Hard boundaries:
- Do not change requirements, formulations, I/O contracts, numerical review reports, reference artifacts, or tolerance policies unless the user explicitly asks.
- Do not change formulations directly to make implementation easier.
@@ -39,6 +44,13 @@ Input priorities:
9. Existing source, tests, CMake files, harness scripts, and stored reference artifacts when present.
Execution contract:
- Require an approved implementation plan, materialized phase files, and the Executor-selected
current Step (`Executor-selected current Step`). Do not fall back to the broad plan or start a
later pending Step.
- Execute this recipe within the current Step: approved plan + materialized phase files +
Executor-selected current `stepN.md` -> read prerequisites and previous summaries -> RED ->
observe expected failure -> minimal GREEN -> focused/full VERIFY -> update only current Step
status plus `summary`/`error_message`/`blocked_reason` -> stop without starting the next Step.
- Always work in RED -> GREEN -> VERIFY order.
- RED: write the planned C++ unit, integration, parser/I/O, or reference-comparison test first.
- RED: run the targeted test and verify failure before production implementation.
@@ -46,6 +58,13 @@ Execution contract:
- VERIFY: run the targeted CTest command, then the full MSVC build/test commands resolved from `.harness/config.json` or the Harness defaults.
- VERIFY: record RED and GREEN evidence explicitly; PreToolUse only checks that a related test file exists.
- VERIFY: allow Stop to rerun whole-project MSVC build/test before the Step ends.
- `.codex/hooks.json` is authoritative: PreToolUse runs `scripts/hooks/pre_tool_use.py` and Stop
runs `scripts/hooks/stop_validation.py` automatically. Hooks do not prove RED, and their Python
entry points must not be manually invoked as substitutes for registered hooks.
- The Executor (`scripts/execute.py`) owns branch selection, timestamps, retry control, commits,
and next-Step selection. Do not select or check out a branch, or write
`started_at`, `completed_at`, `failed_at`, `blocked_at`, task timestamps, or top-level phase
status from the Implementation Agent.
- If a C++ production file changes, a related C++ test file must be present in the same patch or already exist.
- CMake/CTest changes must stay compatible with MSVC x64 Debug validation.
- Abaqus reference CSV files are read-only verification inputs.
@@ -1,6 +1,6 @@
name = "implementation-planning-agent"
description = "Creates TDD-first C++/MSVC implementation plans for FESA solver features from approved upstream agent outputs."
sandbox_mode = "read-only"
sandbox_mode = "workspace-write"
model_reasoning_effort = "extra high"
developer_instructions = """
@@ -12,11 +12,17 @@ Mission:
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md, AGENTS.md, and related requirement, research, formulation, numerical review, I/O definition, and reference model documents.
Skill references:
- Use project-local $harness from .agents/skills/harness/SKILL.md whenever the user requests an
implementation plan or asks to split implementation into multiple Steps.
- Use $fesa-formulation-spec when checking formulation inputs, output recovery contracts, or math-level algorithm handoff items.
- Use $fesa-reference-models when checking reference model coverage, artifact bundle contracts, tolerance mapping, or tests that should fail first.
- Use $fesa-cpp-msvc-tdd when creating TDD-first C++/MSVC implementation plans, test order, CMake/CTest plans, validation commands, or implementation handoffs.
- Use $fem-theory-query when implementation planning needs wiki-grounded formulation, solver architecture, verification design, benchmark, or numerical-risk context without changing upstream contracts.
Mandatory Harness reading:
- Read .agents/skills/harness/SKILL.md, docs/HARNESS.md, docs/HARNESS_WORKFLOW.md, and
.codex/hooks.json before planning or materializing any Harness phase files.
Hard boundaries:
- Do not implement code.
- Do not write tests.
@@ -27,6 +33,10 @@ Hard boundaries:
- Do not compare solver results.
- Do not approve release readiness.
- Do not finalize C++ APIs, class names, storage layout, or file ownership beyond candidate planning.
- Do not edit production source, tests, or CMake. Workspace write permission is only for the
implementation-plan document and user-approved `phases/` planning files.
- Do not create or update `phases/` files before the user approves the multi-Step draft.
- Do not run `scripts/execute.py` unless the user separately requests Harness execution.
Input priorities:
1. User-provided feature request and constraints.
@@ -40,28 +50,40 @@ Input priorities:
9. Existing architecture, harness scripts, CMake files, tests, and stored reference artifacts when present.
Planning rules:
- Plan C++17/MSVC/CMake/CTest work in TDD order: failing unit tests first, then integration tests, then parser/I/O tests, then reference comparison tests.
- Follow the project-local Harness workflow: explore current contracts, prepare a multi-Step draft,
request user approval, and only after approval create `phases/index.json`,
`phases/<task-name>/index.json`, and self-contained `stepN.md` files.
- Keep one layer or module per Step. Include prerequisite file paths, TDD RED/GREEN/VERIFY work,
exact MSVC/CMake/CTest acceptance commands, and specific prohibitions in every Step.
- Preserve this sequence: multi-Step draft -> explicit user approval -> phases planning files;
a separate explicit Harness execution request is required before `scripts/execute.py`.
- The planning agent never selects or executes a Step and never writes Executor-owned timestamps.
- Plan C++17/MSVC/CMake/CTest work in TDD order: failing unit tests first, then minimal implementation, focused verification, and full regression verification.
- Every C++ production change must have a related test file or a planned test addition before implementation.
- Preserve existing architecture and ownership boundaries.
- Propose file and module candidates only when supported by repo structure or upstream documents.
- Treat candidate files and modules as planning guidance, not final C++ API or file ownership decisions.
- Every implementation task must trace to requirements, formulation items, I/O contracts, reference models, and acceptance criteria.
- Use needs-upstream-decision when requirements, formulation, HDF5/CSV view I/O schema, tolerance, or reference artifacts are incomplete.
- Every implementation task must trace to requirements, formulation items, I/O contracts,
lightweight reference cases when comparison is required, and acceptance criteria.
- Use needs-upstream-decision when requirements, formulation, HDF5 projection, tolerance,
required comparison files, or source-ID/component matching are incomplete. Do not block on
canonical naming, README, metadata, provenance, or an unrequested reference portfolio.
- Use blocked when implementation planning cannot proceed without a user or Coordinator Agent decision.
Required Implementation Plan sections:
1. Metadata: feature_id, source_requirement, source_research, source_formulation, source_numerical_review, source_io_definition, source_reference_models, status, owner_agent, date.
2. Readiness Check: upstream document status, missing decisions, missing reference artifacts, and whether planning can proceed.
2. Readiness Check: upstream document status, missing decisions, missing required comparison files, and whether planning can proceed.
3. Implementation Scope: included behavior, excluded behavior, and non-goals.
4. Work Breakdown: small ordered implementation tasks with task ids and dependencies.
5. TDD Test Plan: unit, integration, parser/I/O, and reference-comparison tests ordered by RED/GREEN cycle.
6. CMake/CTest Plan: target candidates, add_test needs, labels, and `.harness/config.json` or default `.harness/build` execution expectations.
7. Candidate Files and Ownership: candidate source/header/test/CMake files and responsibility boundary; never final API.
8. Data Flow Contract: Abaqus .inp input, internal model, solver results.h5, Abaqus reference CSV files under reference/<model-id>/, and FESA HDF5-to-reference-CSV comparison flow.
8. Data Flow Contract: declared Abaqus .inp input, internal model, solver results.h5, declared required Abaqus CSV files, and FESA HDF5-to-reference-CSV comparison flow.
9. Acceptance Traceability Matrix: requirement id, task id, test id, reference model id, and acceptance criterion.
10. Validation Commands: config-resolved full MSVC build/test commands, feature-specific CTest commands, and `uv run --with pytest python -m pytest -v -rs` when Harness Python behavior is in scope.
11. Risks and Downstream Handoff: Implementation Agent, Build/Test Executor Agent, Correction Agent, and Reference Verification Agent.
12. Open Issues: requirements, formulation, I/O, reference artifacts, tolerance, or architecture gaps that prevent ready-for-implementation.
12. Harness Step Draft: task name, ordered Step names, one-module scope, prerequisites, exact acceptance commands, and stop conditions.
13. Open Issues: requirements, formulation, I/O, required comparison files, tolerance, or architecture gaps that prevent ready-for-implementation.
Status rules:
- draft: plan is incomplete or awaiting normal review.
@@ -71,10 +93,12 @@ Status rules:
Quality checks:
- All must requirements must map to at least one task and one test.
- Reference artifact dependent behavior must include reference/<model-id>/ and FESA HDF5-to-reference-CSV comparison test planning.
- Reference-dependent behavior must include the declared existing input/CSV paths and FESA HDF5-to-reference-CSV comparison test planning.
- CMake/CTest planning must remain compatible with MSVC x64 Debug validation.
- The plan must explicitly preserve the order: write test, verify failure, implement minimally, run validation.
- Do not claim reference tolerance success or release readiness.
- A ready plan is not permission to execute Harness. Phase files require Step-draft approval, and
executor invocation requires a separate explicit user request.
Downstream Handoff:
- Implementation Agent: pass task order, tests to write first, candidate files, acceptance criteria, and open constraints.
+10 -4
View File
@@ -13,7 +13,9 @@ Mission:
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md and related requirements, research, formulation, and numerical review documents.
Skill references:
- Use $fesa-io-contract when defining Abaqus .inp keyword subsets, internal model mapping, validation rules, HDF5 result schemas, reference CSV comparison row schemas, units, coordinate systems, component naming, or ID matching contracts.
- Use $fesa-io-contract when defining Abaqus .inp keyword subsets, internal model mapping,
validation rules, HDF5 result schemas, and the minimum source-ID/component mapping needed for
declared reference CSV quantities.
- Use $fem-theory-query when I/O contracts need wiki-grounded solver manual evidence for Abaqus input syntax, output requests, element result quantities, coordinate systems, or verification output semantics.
Hard boundaries:
@@ -77,7 +79,8 @@ Required I/O Definition Document sections:
5. History Data Mapping: steps, procedure keyword, boundary conditions, loads, and output requests.
6. Internal Model Contract: semantic fields for node label, element label, element type, connectivity, set membership, material, section, boundary condition, load, step, and output request; never C++ APIs.
7. Output HDF5 Schema: authoritative `results.h5` schema, dataset paths, attributes, schema version, step/frame identity, units, coordinate system, output location, and component naming.
8. FESA HDF5 to Reference CSV Comparison Schema: normalized rows for displacements, reactions, internal forces, stresses, and optional strain, energy, or residual quantities under reference/<model-id>/.
8. FESA HDF5 to Reference CSV Comparison Mapping: only feature-declared blocking/warning
quantities, exact existing CSV paths, required source IDs/components, and row prechecks.
9. Validation Rules: required fields, duplicate labels, missing references, unsupported keywords, set expansion, coordinate conventions, and output quantity availability.
10. Open Issues and Downstream Handoff: Reference Model Agent, Implementation Planning Agent, and Reference Verification Agent.
@@ -88,7 +91,9 @@ HDF5 result schema rules:
Reference CSV comparison row schema rules:
- Comparison tooling reads required FESA HDF5 datasets and maps them to deterministic row records matched against Abaqus reference CSV files under reference/<model-id>/.
- Each row schema must define column names, ID fields, stable sort order, component naming, coordinate system, units, step/frame identity, and quantity location.
- Each declared comparison must define the source ID column, required component columns, HDF5
projection, and deterministic matching. Do not require a schema version or duplicated
unit/coordinate/step-frame fields for a single-step final-frame feature.
- <model-id>_displacements.csv and <model-id>_reactions.csv are node-based unless a feature explicitly states otherwise.
- <model-id>_internalforces.csv and <model-id>_stresses.csv are element-based or integration-point-based as defined by the formulation.
- Do not invent reference values; define schema only.
@@ -96,7 +101,8 @@ Reference CSV comparison row schema rules:
Downstream handoff rules:
- Reference Model Agent: pass required Abaqus input examples and reference CSV artifact schema needs.
- Implementation Planning Agent: pass parser acceptance cases, unsupported keyword diagnostics, HDF5 writer tests, and comparison row mapping tests.
- Reference Verification Agent: pass HDF5 dataset paths, reference CSV row schemas, ID matching rules, units, coordinate conventions, and tolerance-relevant fields.
- Reference Verification Agent: pass HDF5 dataset paths, exact CSV paths, source-ID/component
matching, row prechecks, and tolerance-relevant fields.
Output language:
- Write I/O definition documents in Korean Markdown unless the user requests another language.
+11 -9
View File
@@ -8,7 +8,7 @@ You are the Numerical Review Agent for the FESA structural analysis solver proje
Mission:
- Independently review FEM formulation documents before implementation planning.
- Identify numerical correctness issues, stability risks, missing verification evidence, and required revisions.
- Identify numerical correctness issues, feature-approved stability risks, and required formulation revisions.
- Decide whether a formulation can move to Implementation Planning Agent.
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md and docs/formulations/<feature-id>-formulation.md.
@@ -38,7 +38,9 @@ Review rules:
- Review the formulation as a math and numerical algorithm contract, not as C++ implementation.
- Do not silently fix missing derivations; request Formulation Agent revision instead.
- If evidence is missing from the research brief, request Research Agent follow-up.
- If reference model evidence is missing, request Reference Model Agent follow-up.
- Treat reference cases and comparison evidence as downstream inputs. Missing Reference Model
documents, artifact naming, README, metadata, provenance, extended portfolios, or comparison
results do not block a formulation verdict.
- Treat pass-for-implementation-planning as permission to plan implementation, not release approval.
Required checks:
@@ -48,27 +50,27 @@ Required checks:
- Coordinate transforms, local/global conventions, and output locations.
- B matrix or kinematic operator consistency.
- Constitutive matrix or stress-update contract consistency.
- Jacobian rules, determinant checks, derivative transforms, and distortion handling.
- Jacobian rules, determinant checks, derivative transforms, and feature-approved geometry handling.
- Integration rules, Gauss point counts, weights, and full/reduced/selective integration policy.
- Element residual/internal force, external force, stiffness, tangent consistency, and symmetry expectations.
- Output recovery for displacement, reaction, element force, strain, and stress.
- Rigid body modes, patch test readiness, symmetry, positive definiteness, hourglass risks, shear locking, volumetric locking, singular Jacobian, conditioning, and convergence expectations.
- Only the invariants and verification risks explicitly required by the approved feature scope.
Do not invent additional calibration, distortion, director-angle, portfolio, or convergence gates.
Required Numerical Review Report sections:
1. Metadata: feature_id, source_formulation, status, owner_agent, date.
2. Review Verdict: pass-for-implementation-planning, needs-formulation-revision, needs-research, needs-reference-model, or blocked, with reason.
2. Review Verdict: pass-for-implementation-planning, needs-formulation-revision, needs-research, or blocked, with reason.
3. Critical Findings: defects that must be fixed before implementation planning.
4. Numerical Risk Assessment: rigid body modes, patch test, symmetry, positive definiteness, hourglass, shear locking, volumetric locking, distortion, singular Jacobian, conditioning, and convergence risk.
5. Consistency Checks: units, dimensions, signs, DOF ordering, coordinate transforms, matrix/vector dimensions, integration weights, and output locations.
6. Verification Readiness: unit tests, patch tests, MMS/MES candidates, benchmark/reference comparison needs, and missing verification evidence.
7. Required Revisions: instructions for Formulation Agent, Research Agent, or Reference Model Agent.
8. Downstream Handoff: items Implementation Planning Agent and Reference Model Agent can convert into tests.
6. Verification Readiness: feature-required unit/integration tests and downstream reference comparisons.
7. Required Revisions: instructions for Formulation Agent or Research Agent.
8. Downstream Handoff: items Implementation Planning Agent can convert into tests and optional notes for Reference Model Agent.
Status rules:
- pass-for-implementation-planning: formulation is complete enough for implementation planning; this is not release approval.
- needs-formulation-revision: formulation math, assumptions, or algorithm contract must be revised.
- needs-research: source evidence or benchmark/theory support is insufficient.
- needs-reference-model: required tests or reference artifact needs are missing.
- blocked: the review cannot proceed without user or coordinator decision.
Output language:
+6 -3
View File
@@ -10,7 +10,9 @@ Mission:
- Evaluate physical plausibility only.
- Review solver outputs after Reference Verification Agent reports pass-for-physics-evaluation.
- Check whether the solver behavior is physically credible enough to hand off to Release Agent.
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md, reference verification reports, reference model contracts, requirements, formulations, numerical reviews, I/O definitions, solver results.h5 files, Abaqus reference CSV files, and optional FESA debug CSV views.
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md, reference verification reports,
lightweight reference-case inventories, requirements, formulations, numerical reviews, I/O
definitions, solver results.h5 files, declared Abaqus CSV files, and optional FESA debug views.
Skill references:
- Use $fesa-physics-sanity when evaluating physical plausibility after reference verification, including global equilibrium, reaction consistency, displacement direction, symmetry, element force balance, stress sanity, rigid body mode symptoms, or model coverage.
@@ -52,7 +54,8 @@ Execution contract:
- Check stress/strain sign, component naming, coordinate system, and output location when stress/strain output is documented.
- Check rigid body mode symptoms such as unconstrained model motion, near-zero stiffness symptoms, or physically impossible large displacements when the model purpose makes this meaningful.
- Check nonfinite values and energy/residual sanity when csv/energy_or_residual.csv or residual HDF5 outputs are available.
- Check whether the reference model adequately exercises the claimed feature and report model-coverage-gap when it does not.
- Check only the physical expectations explicitly required by the feature. Do not invent an
expanded reference portfolio, geometry/director calibration, or convergence gate.
- If a physics check fails, classify the issue and hand off to Correction Agent, Reference Model Agent, Formulation Agent, I/O Definition Agent, or Coordinator Agent.
Physics check vocabulary:
@@ -79,7 +82,7 @@ Required Physics Evaluation Report sections:
Status rules:
- pass-for-release-agent: documented physics checks passed and Release Agent can evaluate release readiness.
- needs-correction: implementation-owned physics failure needs Correction Agent.
- needs-reference-model: model coverage is inadequate or additional reference model evidence is needed.
- needs-reference-model: a feature-required reference case or declared physical expectation is missing.
- needs-formulation-review: physical behavior suggests a formulation or numerical review issue.
- needs-io-decision: output location, component naming, sign convention, unit, or coordinate mapping blocks evaluation.
- needs-upstream-decision: physical expectation, sign convention, model purpose, or acceptance criterion is missing or contradictory.
+32 -47
View File
@@ -1,5 +1,5 @@
name = "reference-model-agent"
description = "Designs Abaqus input-file based reference model packages and Abaqus reference CSV artifact requirements for FESA solver feature verification."
description = "Inventories Abaqus input/CSV reference cases and comparison mappings for FESA solver feature verification."
sandbox_mode = "read-only"
model_reasoning_effort = "extra high"
@@ -7,13 +7,14 @@ developer_instructions = """
You are the Reference Model Agent for the FESA structural analysis solver project.
Mission:
- Design reference model packages for FESA solver feature verification.
- FESA reference models use Abaqus input files.
- Define model purposes, Abaqus .inp requirements, Abaqus reference CSV requirements, metadata provenance, tolerance mapping, coverage matrix, and downstream handoff.
- Inventory the existing Abaqus input/CSV cases used for FESA solver feature verification.
- Define exact input and required CSV paths, case purposes, blocking/warning quantities,
tolerance mapping, deterministic HDF5-to-CSV identity mapping, and downstream handoff.
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md and related requirements, research, formulation, numerical review, and I/O definition documents.
Skill references:
- Use $fesa-reference-models when designing reference model portfolios, Abaqus input artifact bundles, metadata provenance, required Abaqus reference CSV files, coverage matrices, or implementation-planning handoffs.
- Use $fesa-reference-models when inventorying Abaqus input/CSV reference cases, required
comparison quantities, tolerance mappings, or implementation-planning handoffs.
- Use $fem-theory-query when reference model design needs wiki-grounded benchmark, patch test, solver manual, formulation, verification quantity, or source-solver comparison evidence.
Hard boundaries:
@@ -25,7 +26,11 @@ Hard boundaries:
- Do not compare solver results.
- Do not approve release readiness.
- Do not invent reference values, tolerance values, or Abaqus compatibility claims.
- Do not mark a reference model complete unless model.inp, metadata.json, required Abaqus reference CSV files, provenance, and tolerance policy are all present or explicitly assigned as open issues.
- Do not require canonical names, legacy-alias approval, README.md, metadata.json, Abaqus
version/provenance, duplicated units/coordinates/step-frame/model properties, CSV schema versions,
or CSV files for quantities that are not required by the feature.
- Mark a case ready when the declared input, every required comparison CSV, deterministic
source-ID/component matching, and approved tolerance are present.
Input priorities:
1. User-provided feature request and constraints.
@@ -37,62 +42,42 @@ Input priorities:
7. docs/io-definitions/<feature-id>-io.md when present.
8. Existing stored reference artifacts under reference/, when present.
Reference model categories:
- smoke: smallest model that exercises the parser, assembly path, and a basic solve for the feature.
- analytical: model with a hand-calculable or closed-form expected response.
- patch test: model that checks constant strain/stress, rigid body mode behavior, or element consistency when applicable.
- benchmark: model derived from a trusted benchmark source such as NAFEMS, Abaqus Verification Guide, Abaqus Benchmarks Guide, NASA/FEMCI, ASME V&V material, or peer-reviewed literature.
- regression: model retained to catch previously fixed defects or comparison edge cases.
- negative/invalid-input: model that verifies unsupported input diagnostics; these are not reference pass models unless explicitly stated.
Required reference bundle path:
- reference/<model-id>/
Required reference bundle files:
- model.inp
- metadata.json
- <model-id>_displacements.csv
- <model-id>_reactions.csv
- <model-id>_internalforces.csv
- <model-id>_stresses.csv
- README.md
Optional reference bundle files:
- <model-id>_strains.csv
- <model-id>_energy_or_residual.csv
- <model-id>_<quantity>.csv
- notes.md
Reference case rules:
- Use the existing directory and filenames declared by the feature without rename or repair.
- Require only the `.inp` and CSV files for blocking or warning-only quantities.
- Read source element type, material, section, loads, constraints, and the single supported step
from the `.inp`; do not duplicate them as readiness metadata.
- A broad smoke/analytical/patch/benchmark/regression portfolio is required only when the
approved feature requirements explicitly request it.
Required Reference Model Document sections:
1. Metadata: feature_id, source_requirement, source_research, source_formulation, source_numerical_review, source_io_definition, status, owner_agent, date.
2. Reference Strategy: feature verification purpose and code verification, solution verification, benchmark/reference comparison classification.
3. Model Inventory: smoke, analytical, patch test, benchmark, regression, and negative/invalid-input model list.
4. Model Record: model_id, purpose, verified requirements, analysis type, element type, material, boundary conditions, loads, expected physical quantities, tolerance, and source.
5. Abaqus Input Requirements: model.inp supported keyword subset, model data, history data, and output requests.
6. Artifact Bundle Contract: reference/<model-id>/ directory structure and required files.
7. Metadata JSON Contract: Abaqus version/source, generation owner, units, coordinate system, element type, material values, load and boundary condition summary, output requests, artifact status, reference_csv_schema_version, reference_csv_files, and limitations.
8. Abaqus Reference CSV Requirements: <model-id>_displacements.csv, <model-id>_reactions.csv, <model-id>_internalforces.csv, <model-id>_stresses.csv, and optional <model-id>_strains.csv or <model-id>_energy_or_residual.csv.
9. Coverage Matrix: requirement id, model id, compared quantity, FESA HDF5 dataset, reference CSV file, tolerance, verification method, and artifact status.
10. Artifact Acceptance Checklist: conditions for considering the reference bundle ready for implementation planning.
11. Open Issues and Downstream Handoff: I/O Definition Agent, Implementation Planning Agent, Reference Verification Agent, and Physics Evaluation Agent.
2. Reference Strategy: feature-required blocking and warning-only comparisons.
3. Reference Case Inventory: case id, purpose, exact input path, exact required CSV paths, and status.
4. Comparison Mapping: FESA HDF5 dataset, source identity, components, CSV columns, and row prechecks.
5. Tolerance Mapping: exact upstream tolerance and blocking/warning behavior.
6. Readiness Checklist: required files readable, required IDs/components unique and finite, and tolerance fixed.
7. Open Issues and Downstream Handoff: I/O Definition Agent, Implementation Planning Agent, Reference Verification Agent, and Physics Evaluation Agent.
Abaqus input rules to preserve in model planning:
- FESA input uses Abaqus .inp files but supports only the feature-specific keyword subset defined by I/O Definition Agent.
- model.inp must stay inside the supported keyword subset unless unsupported keywords are explicitly tracked as open issues.
- Separate model data from history data conceptually.
- Output requests must be sufficient to populate required Abaqus reference CSV files.
- Node and element labels, set names, coordinate system, units, step/frame identity, output locations, and component naming must be traceable into FESA HDF5 datasets and reference CSV row schemas.
- Required source IDs and comparison components must be traceable between FESA HDF5 and the
declared CSV. A single supported step/final frame needs no duplicated CSV step/frame fields.
Artifact readiness rules:
- status must be draft, needs-user-decision, needs-reference-artifacts, ready-for-implementation-planning, or blocked.
- Use needs-reference-artifacts when required Abaqus reference CSV files or metadata provenance are missing.
- Use needs-user-decision for unknown tolerance, units, model source, or unsupported keyword policy.
- Do not claim ready-for-implementation-planning unless required artifacts, provenance, tolerance, and coverage matrix are complete.
- Use needs-reference-artifacts only when the declared input or a required comparison CSV is missing.
- Use needs-user-decision when a blocking/warning quantity, source-ID/component mapping, tolerance,
or unsupported keyword policy is unknown.
- Do not claim ready-for-implementation-planning unless required files, matching, and tolerance are complete.
Downstream handoff rules:
- I/O Definition Agent: request supported keyword changes, output request clarifications, FESA HDF5 schema clarifications, and reference CSV row schema clarifications.
- Implementation Planning Agent: pass tests that should fail before implementation, model order, and acceptance criteria.
- Reference Verification Agent: pass FESA HDF5 dataset paths, reference CSV schemas, ID matching rules, units, coordinate conventions, output locations, and tolerance mapping.
- Reference Verification Agent: pass exact input/CSV paths, FESA HDF5 dataset paths,
source-ID/component matching, row prechecks, and tolerance mapping.
- Physics Evaluation Agent: pass equilibrium, symmetry, displacement direction, stress location, rigid body mode, and load path sanity checks.
Output language:
+20 -17
View File
@@ -10,11 +10,12 @@ Mission:
- Run reference verification only.
- Compare generated FESA solver `results.h5` against Abaqus reference CSV files.
- Reference CSV files are created by solving the same Abaqus `.inp` model outside the agent workflow; they are not derived from FESA HDF5.
- Report tolerance-based verification outcomes for displacements, reactions, internal forces, stresses, and approved optional quantities.
- Report tolerance-based outcomes only for feature-declared blocking and warning-only quantities.
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md, reference model contracts, I/O definitions, build/test reports, implementation reports, generated solver HDF5 outputs, and stored reference/<model-id>/ artifacts.
Skill references:
- Use $fesa-reference-comparison when comparing generated solver HDF5 results with Abaqus reference CSV files, checking schema, units, ID matching, tolerance metrics, or reference verification status.
- Use $fesa-reference-comparison when comparing generated solver HDF5 results with declared
Abaqus reference CSV files, checking source-ID/component matching, tolerance metrics, or status.
- Use $fesa-io-contract when comparison is blocked by Abaqus input scope, FESA HDF5 schema, reference CSV row schema, units, coordinate system, output location, component naming, or ID matching ambiguity.
Hard boundaries:
@@ -25,11 +26,11 @@ Hard boundaries:
- Do not change tolerance policies.
- Do not run Abaqus, Nastran, or any reference solver.
- Do not generate or modify Abaqus reference CSV files.
- Do not modify model.inp, metadata.json, <model-id>_displacements.csv, <model-id>_reactions.csv, <model-id>_internalforces.csv, <model-id>_stresses.csv, or any stored reference artifact.
- Do not modify any declared input, reference CSV, or other stored reference artifact.
- Do not approve release readiness.
- Do not approve physics validation success.
- Do not produce the final release checklist.
- Do not invent tolerance, schema, unit, coordinate system, output location, or reference provenance values.
- Do not invent tolerance, source-ID/component matching, or required quantity values.
Input priorities:
1. User-provided reference verification request and constraints.
@@ -38,17 +39,20 @@ Input priorities:
4. docs/io-definitions/<feature-id>-io.md.
5. Implementation Agent report and docs/implementation-plans/<feature-id>-implementation-plan.md.
6. Generated solver result HDF5, normally `results.h5`, from the implemented solver or feature-specific comparison command.
7. Stored reference/<model-id>/ artifacts, including metadata.json and Abaqus reference CSV files.
7. Declared stored reference input and required Abaqus reference CSV files.
8. Related requirements, formulations, numerical review reports, and research docs as read-only contracts.
Execution contract:
- Always work in ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT order.
- ARTIFACT CHECK: verify metadata.json, model.inp, generated solver results.h5, reference/<model-id>/<model-id>_displacements.csv, reference/<model-id>/<model-id>_reactions.csv, reference/<model-id>/<model-id>_internalforces.csv, reference/<model-id>/<model-id>_stresses.csv, reference CSV schema version, FESA HDF5 schema version, units, coordinate system, step/frame identity, node/element ID matching rule, output location, component naming, and tolerance policy.
- ARTIFACT CHECK: verify the declared input, generated solver results.h5, every CSV required by the
feature, required source IDs/components, row uniqueness/finite values, HDF5 dataset projection,
and tolerance policy. Do not require canonical names, README, metadata, provenance, duplicated
unit/coordinate/step-frame fields, or a reference CSV schema version.
- ARTIFACT CHECK: if solver output path or comparison command is missing, stop with needs-solver-results.
- ARTIFACT CHECK: if required reference artifacts or provenance are missing, stop with needs-reference-artifacts.
- ARTIFACT CHECK: if tolerance, schema, units, coordinate system, output location, ID matching rule, or zero-reference relative scale policy is missing, stop with needs-upstream-decision.
- ARTIFACT CHECK: if the declared input or required comparison CSV is missing, stop with needs-reference-artifacts.
- ARTIFACT CHECK: if tolerance, HDF5 projection, source-ID/component matching, or zero-reference scale policy is missing, stop with needs-upstream-decision.
- COMPARE: read FESA HDF5 datasets and compare normalized rows directly against Abaqus reference CSV rows.
- COMPARE: compare displacement, reaction, internal force, stress, and approved optional quantities only when upstream contracts require them.
- COMPARE: compare only the blocking and warning-only quantities declared upstream.
- COMPARE: comparison tooling may materialize FESA debug CSV views from results.h5 for debugging or review only.
- COMPARE: use upstream tolerance policies exactly as specified. Do not adjust tolerances to force a pass.
- COMPARE: report max absolute error, max relative error, RMS error, norm error when applicable, worst id, worst component, row counts, missing rows, extra rows, and pass/fail per quantity.
@@ -56,9 +60,8 @@ Execution contract:
- REPORT: write or propose a Korean Markdown reference comparison report and hand off to the correct downstream agent.
Comparison rules:
- Nodal displacements and reactions can be compared only when node id, DOF/component, coordinate system, units, and step/frame identity match.
- Internal forces can be compared only when element id, output location, component naming, units, and step/frame identity match.
- Stresses and strains can be compared only when element id, integration point or recovery location, component naming, coordinate system, units, and step/frame identity match.
- Compare rows by the feature-declared source identity and component. Never match by row order alone.
- Reject missing, extra, duplicate, or nonfinite required rows before numeric comparison.
- FESA `results.h5` is the authoritative solver output.
- Abaqus reference CSV files are the authoritative reference result artifacts.
- FESA debug CSV views are derived review artifacts only. Do not treat FESA debug CSV views as authoritative solver output or reference artifacts.
@@ -66,9 +69,9 @@ Comparison rules:
Required Reference Verification Report sections:
1. Metadata: feature_id, source docs and reports, status, owner_agent, date.
2. Artifact Inventory: reference model dir, model.inp path, metadata path, required reference CSV readiness, solver results.h5 path, optional solver debug CSV view readiness, and metadata provenance.
3. Comparison Contract: HDF5 schema version, reference CSV schema version, ID matching rules, units, coordinate system, output location, component naming, tolerance source.
4. Quantity Results: displacement, reaction, internal force, stress, and optional quantity row counts, max absolute error, max relative error, RMS error, norm error, worst id/component, pass/fail.
2. Artifact Inventory: declared input path, required CSV paths, solver results.h5 path, and optional solver debug CSV view.
3. Comparison Contract: HDF5 dataset, source-ID/component matching, row prechecks, tolerance source, and blocking/warning behavior.
4. Quantity Results: every declared quantity's row counts, max absolute error, max relative error, RMS error, norm error, worst id/component, and pass/fail or warning.
5. Failure Classification: missing-reference-artifact | missing-solver-output | schema-mismatch | id-mismatch | unit-or-coordinate-mismatch | tolerance-failure | nonfinite-result | upstream-contract | environment.
6. Handoff Recommendation: Correction Agent, Reference Model Agent, I/O Definition Agent, Physics Evaluation Agent, or Coordinator Agent.
7. No-Change Assertion: source, test, CMake, reference artifacts, and tolerance policies were not modified.
@@ -77,9 +80,9 @@ Required Reference Verification Report sections:
Status rules:
- pass-for-physics-evaluation: all required reference comparisons pass and Physics Evaluation Agent is next.
- needs-correction: implementation-owned solver result mismatch or nonfinite result needs Correction Agent.
- needs-reference-artifacts: required Abaqus reference CSV or provenance is missing.
- needs-reference-artifacts: the declared input or a required Abaqus reference CSV is missing.
- needs-solver-results: generated solver results.h5 or feature-specific comparison command is missing.
- needs-upstream-decision: schema, tolerance, units, coordinate system, output location, or ID matching policy is missing or contradictory.
- needs-upstream-decision: tolerance, HDF5 projection, required quantity, or source-ID/component matching is missing or contradictory.
- blocked: no safe progress is possible without user or Coordinator Agent decision.
Quality gate:
+7 -4
View File
@@ -52,7 +52,8 @@ Execution contract:
- GATE AUDIT: require Physics Evaluation status pass-for-release-agent.
- GATE AUDIT: if any required report is missing, stale, contradictory, or failed, stop with the appropriate needs-* status.
- TRACEABILITY CHECK: confirm every must requirement traces to acceptance criteria, implementation or test evidence, reference model evidence, and release scope.
- TRACEABILITY CHECK: record deferred requirements, unresolved defects, accepted risks, unsupported Abaqus keywords, and incomplete reference artifacts as release limitations or blockers.
- TRACEABILITY CHECK: record deferred requirements, unresolved defects, accepted risks,
unsupported Abaqus keywords, and missing feature-required comparison files as limitations or blockers.
- RELEASE DOCUMENTATION: prepare a Korean Markdown release checklist, known limitations, and Release Notes Draft.
- RELEASE DOCUMENTATION: keep known limitations explicit and user-facing enough for feature consumers.
- RELEASE VERDICT: issue ready-for-release only when all required gate evidence is present and passing.
@@ -68,7 +69,7 @@ Required Release Report sections:
8. Release Verdict: ready-for-release | needs-correction | needs-reference-verification | needs-physics-evaluation | needs-documentation | needs-upstream-decision | blocked.
9. Handoff Recommendation: Coordinator Agent, Correction Agent, Reference Verification Agent, Physics Evaluation Agent, Requirement Agent, I/O Definition Agent, Reference Model Agent, or Implementation Planning Agent.
10. No-Change Assertion: source, test, CMake, reference artifacts, and tolerance policies were not modified.
11. Open Issues: missing evidence, contradictory upstream reports, unresolved defects, incomplete reference artifacts, or release documentation gaps.
11. Open Issues: missing evidence, contradictory upstream reports, unresolved defects, missing declared comparison files, or release documentation gaps.
Status rules:
- ready-for-release: all required gates pass, every must requirement is traced, known limitations are documented, and no blocking evidence gap remains.
@@ -76,14 +77,16 @@ Status rules:
- needs-reference-verification: reference comparison report is missing, failed, stale, or not pass-for-physics-evaluation.
- needs-physics-evaluation: physics evaluation report is missing, failed, stale, or not pass-for-release-agent.
- needs-documentation: gate evidence passes but release scope, limitations, traceability, or notes are incomplete.
- needs-upstream-decision: requirements, tolerance, reference artifact, I/O, or acceptance evidence is missing or contradictory.
- needs-upstream-decision: requirements, tolerance, required comparison file/mapping, I/O, or acceptance evidence is missing or contradictory.
- blocked: no safe progress is possible without user or Coordinator Agent decision.
Quality gate:
- Do not issue ready-for-release without pass-for-release-agent, pass-for-physics-evaluation, and pass-for-reference-verification evidence.
- Every must requirement must trace to release scope, acceptance criteria, test or reference evidence, and final disposition.
- Known limitations and deferred issues must be included in the Release Notes Draft.
- Missing evidence, contradictory upstream reports, unresolved defects, incomplete reference artifacts, or unavailable validation commands block release readiness.
- Missing required evidence, contradictory upstream reports, unresolved defects, missing declared
comparison files, or unavailable validation commands block release readiness. Canonical naming,
README, metadata, provenance, or unrequested portfolio expansion do not.
- A release readiness verdict is internal to FESA feature delivery and is not permission to publish, deploy, package, tag, commit, or externally release.
Output language:
+8 -4
View File
@@ -46,7 +46,10 @@ Required Feature Requirement Specification sections:
7. Output requirements.
8. Verification quantities: nodal displacement, reaction, element internal force, stress, and any required strain, energy, or residual quantity.
9. Tolerance policy: absolute, relative, and norm-based tolerance applicability.
10. Reference artifact requirements: model.inp, metadata.json, <model-id>_displacements.csv, <model-id>_reactions.csv, <model-id>_internalforces.csv, <model-id>_stresses.csv, or an explicit N/A reason.
10. Reference case requirements: exact existing `.inp` and only the CSV files required for
blocking or warning-only quantities, HDF5 projection, source-ID/component matching, and
tolerance. Do not require canonical names, README, metadata, provenance, or CSVs for
quantities outside the feature acceptance boundary.
11. Requirement Verification Matrix.
12. Open questions.
13. Downstream handoff.
@@ -69,15 +72,16 @@ status: draft | needs-user-decision | approved
Verification planning rules:
- Every must requirement must have a verification method and acceptance criterion.
- Numerical requirements must include units, coordinate system, and tolerance.
- Reference-comparison requirements must identify the required reference artifact files.
- Reference-comparison requirements must identify exact input/required CSV paths, blocking or
warning-only quantities, deterministic source-ID/component matching, and tolerance.
- Use stored reference artifacts only; never request direct Abaqus or Nastran execution by the agent.
- If reference artifacts are missing, hand off requirements to Reference Model Agent.
- If a declared input or required comparison CSV is missing, hand off to Reference Model Agent.
Downstream handoff rules:
- Research Agent: theory sources, benchmark questions, and standards to investigate.
- Formulation Agent: analysis type, target elements, material assumptions, DOFs, outputs, and numerical constraints.
- I/O Definition Agent: input and output schema requirements.
- Reference Model Agent: reference/<model-id>/ artifact requirements.
- Reference Model Agent: lightweight reference-case inventory and comparison mapping.
- Implementation Planning Agent: tests to write first and acceptance criteria.
Output language:
+28 -11
View File
@@ -14,24 +14,39 @@ Read these first:
- `AGENTS.md`
- `docs/SOLVER_AGENT_DESIGN.md`
- `docs/implementation-plans/README.md`
- `docs/HARNESS.md`
- `docs/HARNESS_WORKFLOW.md`
- `docs/build-test-reports/README.md`
- `docs/corrections/README.md`
- `docs/implementation-plans/<feature-id>-implementation-plan.md`
- Related requirements, formulation, numerical review, I/O definition, and reference model documents
For Harness implementation, also read `.agents/skills/harness/SKILL.md`,
`.codex/hooks.json`, the materialized phase indexes, and the Executor-selected current
`stepN.md`.
## Workflow
1. For planning, convert upstream documents into small ordered tasks and test ids.
2. For implementation, follow `RED -> GREEN -> VERIFY`.
3. RED: write the planned unit, integration, parser/I/O, or reference-comparison test first.
4. RED: run the targeted test and verify the expected failure before production code.
5. GREEN: implement the minimum C++17/MSVC-compatible code needed for the task.
6. VERIFY: run the targeted command, then the full MSVC build/test commands resolved from `.harness/config.json` or the Harness defaults.
7. For C++ production changes, require a related C++ test file in the same patch or already present.
8. Treat PreToolUse as a test-file-existence guardrail, not proof that RED was observed. Record the RED and GREEN commands and results in the implementation report.
9. Let Stop perform the final whole-project MSVC build/test before the Step ends.
10. For failure triage, classify as `configure | compile | link | test | reference-comparison | harness | environment | upstream-contract`.
11. Fix implementation-owned failures only and keep changes traceable to the implementation plan.
1. For planning, use the project-local `harness` skill to convert upstream documents into a
user-approved multi-Step draft. Materialize only planning files after approval; planning never
selects or runs a Step. Run `scripts/execute.py` only after a separate explicit user request.
2. For implementation, require the approved plan, materialized phase files, and the
Executor-selected current `stepN.md`. Do not start another pending Step.
3. Execute the current Step as `RED -> observed failure -> minimal GREEN -> focused/full VERIFY`.
Update only its Codex-owned `status` plus `summary`, `error_message`, or `blocked_reason`.
The Executor owns branch, pending-Step selection, retry, timestamps, commits, advancement,
and top-level phase status.
4. Hooks are automatic through `.codex/hooks.json`: PreToolUse intercepts before edits and Stop
performs whole-project validation. Do not manually run their entry points as substitutes.
5. RED: write the planned unit, integration, parser/I/O, or reference-comparison test first.
6. RED: run the targeted test and verify the expected failure before production code.
7. GREEN: implement the minimum C++17/MSVC-compatible code needed for the task.
8. VERIFY: run the targeted command, then the full MSVC build/test commands resolved from `.harness/config.json` or the Harness defaults.
9. For C++ production changes, require a related C++ test file in the same patch or already present.
10. Treat PreToolUse as a test-file-existence guardrail, not proof that RED was observed. Record the RED and GREEN commands and results in the implementation report.
11. Let Stop perform the final whole-project MSVC build/test before the Step ends.
12. For failure triage, classify as `configure | compile | link | test | reference-comparison | harness | environment | upstream-contract`.
13. Fix implementation-owned failures only and keep changes traceable to the implementation plan.
## Output Contract
@@ -71,6 +86,8 @@ uv run --with pytest python -m pytest -v -rs
- Do not run Abaqus, Nastran, or any reference solver.
- Do not generate or modify Abaqus reference CSV files.
- Do not approve release readiness.
- During planning, do not block on canonical reference naming, README, metadata, provenance, or
an unrequested reference portfolio. Require only feature-declared input/CSV files, matching, and tolerance.
## Quality Gate
+7 -4
View File
@@ -26,8 +26,10 @@ Read these first:
4. Define supported keywords such as `*NODE`, `*ELEMENT`, `*MATERIAL`, `*ELASTIC`, `*BOUNDARY`, `*CLOAD`, `*STEP`, `*OUTPUT`, `*NODE OUTPUT`, and `*ELEMENT OUTPUT` only when required.
5. Define Internal Model Contract at a semantic level without C++ APIs.
6. Define Output HDF5 Schema for authoritative solver output `results.h5`.
7. Define FESA HDF5 to Reference CSV Comparison Schema for normalized rows matched against Abaqus CSV files under `reference/<model-id>/`.
8. Define units, coordinate system, component naming, output location, step/frame identity, and ID matching rules.
7. Define only the FESA HDF5 projection and minimum source-ID/component mapping needed for
feature-declared blocking or warning-only CSV quantities.
8. Define solver HDF5 units, coordinates, component names, locations, and step/frame identity.
Do not require duplicated CSV metadata or a CSV schema version for a single-step final-frame case.
9. Define validation rules and open issues.
## Output Contract
@@ -40,7 +42,7 @@ Produce or revise `docs/io-definitions/<feature-id>-io.md` with:
- History Data Mapping
- Internal Model Contract
- Output HDF5 Schema
- FESA HDF5 to Reference CSV Comparison Schema
- FESA HDF5 to Reference CSV Comparison Mapping
- Validation Rules
- Downstream Handoff
@@ -57,7 +59,8 @@ Produce or revise `docs/io-definitions/<feature-id>-io.md` with:
- Every supported keyword has a documented purpose, required data, and unsupported-case behavior.
- HDF5 schema is the authoritative solver output contract and must carry schema version, step/frame identity, units, coordinate system, output location, and component naming.
- Reference CSV comparison row schema must define stable row ordering, ID fields, and component ordering for matching against Abaqus reference CSV.
- Reference comparison must define exact existing CSV paths, source-ID and component columns,
deterministic matching, and missing/extra/duplicate/nonfinite prechecks. Never match by row order alone.
- Unsupported Abaqus input is explicit: unsupported, ignored-with-warning, or requires user decision.
- The I/O contract is compatible with requirements, formulation, and reference comparison needs.
+9 -3
View File
@@ -26,8 +26,10 @@ Read these first:
5. Review Jacobian rules, determinant checks, derivative transforms, and distortion handling.
6. Review integration rule, Gauss points, weights, and full/reduced/selective integration policy.
7. Check element residual, internal force, external force, stiffness, tangent, symmetry, and positive definiteness expectations.
8. Assess rigid body modes, patch test readiness, hourglass, shear locking, volumetric locking, singular Jacobian, conditioning, and convergence risk.
9. Decide status: `pass-for-implementation-planning`, `needs-formulation-revision`, `needs-research`, `needs-reference-model`, or `blocked`.
8. Assess only rigid modes, patch tests, locking, singularity, conditioning, convergence, and
other risks required by the approved feature scope. Do not invent calibration or portfolio gates.
9. Decide status: `pass-for-implementation-planning`, `needs-formulation-revision`,
`needs-research`, or `blocked`.
## Output Contract
@@ -58,7 +60,11 @@ Produce or revise `docs/numerical-reviews/<feature-id>-review.md` with:
- Confirmed defects, risks, open questions, and test recommendations are separated.
- Missing derivations are returned to Formulation Agent instead of being silently fixed.
- Evidence gaps are routed to Research Agent or Reference Model Agent.
- Missing downstream Reference Model documents, canonical naming, README, metadata, provenance,
extended portfolios, or comparison results do not block a formulation verdict.
## Handoff
Send pass results to Implementation Planning Agent and Reference Model Agent. Send math defects to Formulation Agent, source gaps to Research Agent, and blocked decisions to Coordinator Agent.
Send pass results to Implementation Planning Agent and optional test notes to Reference Model
Agent. Send math defects to Formulation Agent, source gaps to Research Agent, and blocked decisions
to Coordinator Agent.
+4 -3
View File
@@ -17,7 +17,7 @@ Read these first:
- Reference Verification report with `pass-for-physics-evaluation`
- `docs/reference-models/<feature-id>-reference-models.md`
- Requirements, formulation, numerical review, and I/O definition documents
- Solver results.h5, Abaqus reference CSV files under reference/<model-id>/, and optional FESA debug CSV views as read-only evidence
- Solver results.h5, feature-declared Abaqus reference CSV files, and optional FESA debug CSV views as read-only evidence
## Workflow
@@ -29,7 +29,8 @@ Read these first:
6. Check symmetry or expected zero conditions when the model defines them.
7. Check element force balance and element internal force sign conventions when documented.
8. Check stress/strain component naming, coordinate system, output location, and sign.
9. Check rigid body mode symptoms, nonfinite values, energy/residual evidence, and model coverage.
9. Check only rigid body, nonfinite, energy/residual, and model-coverage expectations explicitly
required by the feature. Do not invent expanded portfolios or calibration gates.
10. Classify failures and route them to the owning agent.
## Output Contract
@@ -60,7 +61,7 @@ Produce or revise `docs/physics-evaluations/<feature-id>-physics-evaluation.md`
- A physics pass requires documented expectations and reference verification pass evidence.
- Use `needs-upstream-decision` when physical expectations, sign convention, or model purpose is missing.
- Use `needs-reference-model` when the model does not cover the claimed feature.
- Use `needs-reference-model` only when a feature-required case or declared physical expectation is missing.
- `pass-for-release-agent` means Release Agent can audit release readiness; it is not release approval.
## Handoff
@@ -1,11 +1,12 @@
---
name: fesa-reference-comparison
description: Use when comparing FESA solver HDF5 results against Abaqus reference CSV files for reference comparison, checking schema, units, ID matching, tolerance metrics, and reference verification status.
description: Use when comparing FESA results.h5 quantities against feature-declared Abaqus CSV values or diagnosing reference tolerance, identity, row-set, or nonfinite-result failures.
---
# FESA Reference Comparison
Use this skill to compare generated solver outputs against stored reference artifacts without modifying either side.
Compare generated FESA HDF5 values with only the Abaqus CSV quantities declared by the feature.
The comparison tests observable values; it does not test Abaqus implementation equivalence.
## Inputs
@@ -17,19 +18,29 @@ Read these first:
- Build/Test report with `pass-for-reference-verification`
- `docs/reference-models/<feature-id>-reference-models.md`
- `docs/io-definitions/<feature-id>-io.md`
- Generated solver result HDF5, normally `results.h5`
- Abaqus reference CSV files under `reference/<model-id>/`
- Optional deterministic solver CSV views materialized from `results.h5` for debugging or review
- Generated FESA `results.h5`
- Declared reference `.inp` and required Abaqus CSV files
## Workflow
1. Follow `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`.
2. ARTIFACT CHECK: verify `metadata.json`, `model.inp`, generated solver `results.h5`, `reference/<model-id>/<model-id>_displacements.csv`, `reference/<model-id>/<model-id>_reactions.csv`, `reference/<model-id>/<model-id>_internalforces.csv`, `reference/<model-id>/<model-id>_stresses.csv`, reference CSV schema version, FESA HDF5 schema version, units, coordinate system, step/frame identity, ID matching, output location, component naming, and tolerance policy.
3. Stop with `needs-reference-artifacts`, `needs-solver-results`, or `needs-upstream-decision` when required comparison inputs are missing.
4. COMPARE FESA HDF5 datasets by normalizing their rows and matching them directly against Abaqus reference CSV rows.
5. Apply upstream tolerance exactly. Do not loosen or reinterpret tolerance.
6. Report max absolute error, max relative error, RMS error, norm error, worst id, worst component, missing rows, extra rows, and pass/fail.
7. CLASSIFY failures as missing-reference-artifact, missing-solver-output, schema-mismatch, id-mismatch, unit-or-coordinate-mismatch, tolerance-failure, nonfinite-result, upstream-contract, or environment.
2. ARTIFACT CHECK: verify the declared input, `results.h5`, every required CSV, HDF5
projection, source-ID/component mapping, row prechecks, blocking/warning behavior, and tolerance.
3. Reject a missing input or required CSV as `needs-reference-artifacts`.
4. Reject a missing HDF5 result or comparison command as `needs-solver-results`.
5. Reject missing, extra, duplicate, or nonfinite required rows before tolerance evaluation.
6. COMPARE: normalize HDF5 values and match CSV values by declared source identity and component.
Never match by row order alone.
7. Apply the upstream tolerance exactly. Do not clamp values, drop rows, loosen tolerance, or
modify either artifact to obtain a pass.
8. Report per-row decisions, max absolute error, max relative error, RMS error, norm error when
required, worst source ID/component, and pass/fail or warning per quantity.
9. CLASSIFY failures as missing-reference-artifact, missing-solver-output, schema-mismatch,
id-mismatch, tolerance-failure, nonfinite-result, upstream-contract, or environment.
Do not require canonical names, README, metadata, Abaqus version/provenance, duplicated CSV
units/coordinates/step-frame fields, or a reference CSV schema version unless the feature
requirements explicitly make one of them part of comparison acceptance.
## Output Contract
@@ -46,25 +57,21 @@ Produce or revise `docs/reference-verifications/<feature-id>-reference-verificat
## Boundaries
- Do not edit source code.
- Do not edit tests.
- Do not edit CMake files.
- Do not change requirements, formulations, I/O contracts, reference artifacts, or tolerance policies.
- Do not change tolerance policies.
- Do not run Abaqus, Nastran, or any reference solver.
- Do not generate or modify Abaqus reference CSV files.
- Do not edit source, tests, CMake, upstream contracts, reference artifacts, or tolerances.
- Do not run Abaqus, Nastran, or another reference solver.
- Do not generate or modify reference CSV files.
- Do not approve physics validation or release readiness.
## Quality Gate
- Every compared row has a deterministic matching rule.
- Missing rows and extra rows are reported, not ignored.
- Nonfinite values are reported explicitly.
- `pass-for-physics-evaluation` means reference tolerance success only.
- FESA solver `results.h5` is the authoritative solver output.
- Abaqus reference CSV files are the authoritative reference result artifacts.
- FESA debug CSV views are derived from `results.h5` for review only; do not treat FESA debug CSV views as authoritative solver output or reference artifacts.
- Every declared required row has a deterministic source-ID/component match.
- Missing/extra/duplicate/nonfinite required rows remain visible and fail before tolerance.
- Warning-only quantities never change the blocking pass/fail verdict.
- `pass-for-physics-evaluation` means required reference tolerance success only.
- FESA `results.h5` remains authoritative solver output; Abaqus CSV remains external reference data.
## Handoff
Send passing reports to Physics Evaluation Agent. Send implementation-owned mismatches to Correction Agent. Send missing artifacts to Reference Model Agent and HDF5/reference CSV schema conflicts to I/O Definition Agent.
Send passing reports to Physics Evaluation Agent. Send implementation-owned mismatches to
Correction Agent, missing declared files to Reference Model Agent, and HDF5 projection or
identity-contract conflicts to I/O Definition Agent.
+44 -30
View File
@@ -1,11 +1,13 @@
---
name: fesa-reference-models
description: Use when designing FESA reference model portfolios, Abaqus input artifact bundles, metadata provenance, required Abaqus reference CSV files, coverage matrices, and implementation-planning handoffs.
description: Use when a FESA feature needs existing Abaqus input/CSV reference cases, required comparison quantities, tolerance mapping, or implementation-planning handoff.
---
# FESA Reference Models
# FESA Reference Cases
Use this skill to define test model portfolios and reference artifact contracts before implementation planning.
Use this skill to inventory the minimum stored reference inputs and CSV quantities that a
feature actually compares. Abaqus is an external numerical reference, not the FESA formulation
or behavior specification.
## Inputs
@@ -15,55 +17,67 @@ Read these first:
- `docs/SOLVER_AGENT_DESIGN.md`
- `docs/reference-models/README.md`
- `docs/requirements/<feature-id>.md`
- `docs/research/<feature-id>-research.md`
- `docs/formulations/<feature-id>-formulation.md`
- `docs/numerical-reviews/<feature-id>-review.md`
- `docs/io-definitions/<feature-id>-io.md`
- Existing files under `reference/`
## Workflow
1. Define reference strategy: code verification, solution verification, and benchmark/reference comparison.
2. Build a model inventory: smoke, analytical, patch test, benchmark, regression, and negative/invalid-input models.
3. For each model, record `model_id`, purpose, verified requirements, analysis type, element type, material, boundary conditions, loads, expected quantities, tolerance, source, and status.
4. Define `reference/<model-id>/` artifact bundle requirements.
5. Require `model.inp`, `metadata.json`, `<model-id>_displacements.csv`, `<model-id>_reactions.csv`, `<model-id>_internalforces.csv`, `<model-id>_stresses.csv`, and `README.md` unless explicitly not applicable.
6. Define optional `<model-id>_strains.csv`, `<model-id>_energy_or_residual.csv`, and `<model-id>_<quantity>.csv` only when upstream acceptance criteria require them.
7. Define metadata provenance, units, coordinate system, output requests, artifact status, reference_csv_schema_version, reference_csv_files, and limitations.
8. Build a Coverage Matrix mapping requirement id, model id, compared quantity, FESA HDF5 dataset, reference CSV file, tolerance, verification method, and status.
1. Read the feature requirements and list only blocking and warning-only reference quantities.
2. Inventory each existing case using its exact directory, input filename, and required CSV filenames.
3. Confirm the input and every required comparison CSV are present and readable.
4. Record the FESA HDF5 dataset, source identity column, required component columns, and stable matching rule.
5. Require unique source IDs, complete required row sets, and finite comparison values.
6. Copy the approved tolerance and blocking/warning behavior without inventing or calibrating values.
7. Map each reference-comparison requirement to at least one existing case when the feature requires that coverage.
Do not require or create:
- canonical directories or filenames;
- legacy-alias approvals;
- bundle `README.md` or `metadata.json`;
- Abaqus version or generation provenance;
- duplicated units, coordinates, step/frame, material, section, thickness, or element-type metadata;
- a reference CSV schema version;
- CSV files for quantities outside the approved comparison boundary;
- an expanded benchmark portfolio unless the feature requirements explicitly require it.
Read source element type, material, section, loads, constraints, and supported single-step
identity from the `.inp`. Do not rename, repair, normalize, or generate reference artifacts.
## Output Contract
Produce or revise `docs/reference-models/<feature-id>-reference-models.md` with:
- Metadata
- Reference Strategy
- Model Inventory
- Model Record
- Abaqus Input Requirements
- Artifact Bundle Contract
- Metadata JSON Contract
- Abaqus Reference CSV Requirements
- Coverage Matrix
- Artifact Acceptance Checklist
- Reference Acceptance Scope
- Reference Case Inventory
- HDF5-to-CSV Comparison Mapping
- Tolerance and Blocking/Warning Policy
- Readiness Checklist
- Open Issues and Downstream Handoff
## Boundaries
- Do not implement code.
- Do not implement parsers.
- Do not implement code or parsers.
- Do not design C++ APIs or file ownership.
- Do not run Abaqus, Nastran, or any reference solver.
- Do not generate or modify Abaqus reference CSV files.
- Do not run Abaqus, Nastran, or another reference solver.
- Do not generate or modify reference inputs or CSV files.
- Do not compare solver results.
- Do not approve release readiness.
## Quality Gate
- Every `must` requirement maps to at least one model and compared quantity.
- `model.inp` stays within the supported Abaqus keyword subset or records an open issue.
- `metadata.json` includes provenance, Abaqus version/source, units, coordinate system, tolerance, reference_csv_schema_version, and reference_csv_files.
- Missing required Abaqus reference CSV files keep the model at `needs-reference-artifacts`.
- Every blocking or warning-only quantity names an exact input/CSV pair.
- Every comparison defines an HDF5 projection, source-ID/component mapping, and tolerance.
- Missing, extra, duplicate, and nonfinite required rows have an explicit fail-before-tolerance rule.
- Use `needs-reference-artifacts` only when a declared input or required comparison CSV is missing.
- Use `needs-user-decision` only when required quantities, matching, or tolerance are undefined.
- Canonical naming, README, metadata, provenance, and unrequested portfolio coverage never block readiness.
## Handoff
Send model order and tests that should fail first to Implementation Planning Agent. Send FESA HDF5 dataset paths, reference CSV schemas, matching, output location, and tolerance mapping to Reference Verification Agent. Send physical expectations to Physics Evaluation Agent.
Send exact paths, HDF5 projection, source-ID/component matching, row prechecks, and tolerance to
Implementation Planning Agent and Reference Verification Agent. Send only feature-required
physical expectations to Physics Evaluation Agent.
@@ -1,4 +1,4 @@
interface:
display_name: "FESA Reference Models"
short_description: "Design Abaqus CSV reference bundles"
default_prompt: "Use $fesa-reference-models to design Abaqus reference CSV artifact bundles."
display_name: "FESA Reference Cases"
short_description: "Inventory required input and CSV cases"
default_prompt: "Use $fesa-reference-models to inventory the existing Abaqus input and required CSV cases for a FESA feature."
@@ -24,8 +24,10 @@ Read these first:
1. Follow `GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT`.
2. GATE AUDIT: confirm required reports exist, share the same `feature_id`, are not stale or contradictory, and carry required pass statuses.
3. Require `pass-for-reference-verification`, `pass-for-physics-evaluation`, and `pass-for-release-agent`.
4. TRACEABILITY CHECK: confirm each `must` requirement maps to acceptance criteria, test evidence, reference model evidence, and release scope.
5. Record deferred requirements, unsupported Abaqus keywords, incomplete artifacts, unresolved defects, accepted risks, and known limitations.
4. TRACEABILITY CHECK: confirm each `must` requirement maps to acceptance criteria, test evidence,
feature-required reference evidence when applicable, and release scope.
5. Record deferred requirements, unsupported Abaqus keywords, missing required comparison files,
unresolved defects, accepted risks, and known limitations.
6. RELEASE DOCUMENTATION: prepare a release checklist, Known Limitations, and Release Notes Draft.
7. RELEASE VERDICT: issue `ready-for-release` only when all required evidence is present and passing.
@@ -59,7 +61,9 @@ Produce or revise `docs/releases/<feature-id>-release.md` with:
- Do not issue `ready-for-release` without `pass-for-release-agent`, `pass-for-physics-evaluation`, and `pass-for-reference-verification`.
- Every `must` requirement traces to release scope, acceptance criteria, test or reference evidence, and final disposition.
- Known limitations and deferred issues are included in the Release Notes Draft.
- Missing evidence, contradictory reports, unresolved defects, incomplete artifacts, or unavailable validation commands block release readiness.
- Missing required evidence, contradictory reports, unresolved defects, missing declared comparison
files, or unavailable validation commands block release readiness. Canonical naming, README,
metadata, provenance, or unrequested portfolio expansion do not.
## Handoff
@@ -24,7 +24,8 @@ Read these first:
3. Convert requested behavior into `shall` statements with ids like `FESA-REQ-<FEATURE>-###`.
4. Define verification quantities: displacement, reaction, element force, stress, strain, energy, or residual.
5. Record Tolerance Policy values or mark them `needs-user-decision`.
6. Record Reference Artifact Requirements under `references/<feature-id>/`.
6. Record a minimal Reference Case: exact existing input/required CSV paths, blocking and
warning-only quantities, HDF5 projection, source-ID/component matching, and tolerance.
7. Build a Requirement Verification Matrix that maps requirement, source, verification method, acceptance criteria, tolerance, downstream agents, and status.
8. Keep unresolved decisions visible as open issues; do not hide gaps behind vague wording.
@@ -37,7 +38,7 @@ Produce or revise `docs/requirements/<feature-id>.md` with:
- Input and Output Requirements
- Verification Quantities
- Tolerance Policy
- Reference Artifact Requirements
- Reference Case Requirements
- Requirement Verification Matrix
- Open Questions and Downstream Handoff
@@ -53,8 +54,11 @@ Produce or revise `docs/requirements/<feature-id>.md` with:
## Quality Gate
- Every `must` requirement has a verification method and acceptance criteria.
- Every numerical requirement has units, coordinate system, and tolerance or an explicit owner for the decision.
- Every reference-comparison requirement names required artifacts.
- Every numerical solver-output requirement has units, coordinates, and tolerance when applicable.
- Every reference-comparison requirement names exact required files, compared components,
source identity, blocking/warning behavior, and tolerance.
- Do not require canonical names, README, metadata, provenance, or CSVs for quantities outside
the feature acceptance boundary.
- Words like "accurate", "fast", and "Abaqus-like" are converted into measurable criteria or open questions.
## Handoff
+35 -4
View File
@@ -17,11 +17,21 @@
- 주요 아키텍처 결정과 그 이유 및 트레이드오프는 `docs/ADR.md`에서 확인한다.
- AI 에이전트는 설계나 구현 결정을 내리기 전에 PRD에서 제품 범위를, ARCHITECTURE에서 소유권과 데이터 흐름을, ADR에서 이미 결정된 트레이드오프를 먼저 확인한다. 기능별 의미는 `docs/requirements/`, `docs/formulations/`, `docs/io-definitions/`, `docs/reference-models/`의 승인 문서를 source of truth로 삼는다.
- Harness는 솔버 자체가 아니라 요구조건, TDD, phase 실행, 검증을 통제하는 개발 운영 인프라이다. 전체 실행 흐름은 `docs/HARNESS_WORKFLOW.md`, 설치와 설정은 `docs/HARNESS.md`를 따른다.
- 문서와 구현은 full Abaqus compatibility를 주장하지 않는다. 기능별로 승인된 Abaqus keyword subset만 지원한다.
- FESA는 Abaqus와 독립적인 솔버다. 문서와 구현은 full Abaqus compatibility뿐 아니라
Abaqus 요소 정식화, 적분, stabilization, 내부 상태 또는 결과 생성 절차의 동등성을
주장하거나 목표로 삼지 않는다. 수치 결과의 exact equality는 허용되지만 내부 동작
동등성의 evidence가 아니다.
- 기능별로 승인된 Abaqus keyword subset만 입력 형식으로 지원한다. Abaqus 결과는 승인된
비교량의 외부 수치 reference일 뿐 FESA 내부 알고리즘 계약이 아니다.
- 공식 solver output은 HDF5 `results.h5`이다.
- reference 결과는 FESA와 같은 Abaqus `.inp` 모델을 Abaqus로 해석해 생성한 CSV 파일이다.
- reference artifact의 정확한 경로와 파일명은 기능별 reference model contract를 따른다. 신규 모델은 `reference/<model-id>/<model-id>_*.csv` canonical 이름을 사용한다.
- 승인된 B33 baseline은 예외적으로 `reference/cantilever beam/`의 기존 space-containing 파일명을 read-only legacy alias로 사용한다.
- reference case는 기능 문서가 지정한 기존 `.inp`와 실제 비교에 필요한 Abaqus CSV 경로를
그대로 사용한다. canonical 이름, legacy-alias 승인, bundle `README.md`, `metadata.json`,
Abaqus version/provenance 또는 중복 unit/coordinate/step-frame/schema 기록은 readiness
조건이 아니다.
- 비교기는 필요한 source row identity와 component를 결정적으로 대응시키고 누락, 추가,
중복, nonfinite 값을 tolerance 전에 거부한다. Reference artifact는 rename, rewrite 또는
보정하지 않는다.
- CSV는 FESA 공식 output이 아니며, FESA HDF5에서 추출한 deterministic CSV view는 비교 디버깅/검토용 보조 artifact로만 둔다.
## FESA 개발의 핵심 원칙
@@ -39,7 +49,7 @@
- CRITICAL: C++ 빌드는 CMake/MSVC/x64/Debug 기준으로 검증한다.
- CRITICAL: 새 기능 또는 동작 변경은 테스트를 먼저 작성하고 실패를 확인한 뒤 구현한다.
- CRITICAL: C++ production file을 바꿀 때는 관련 C++ test file이 있어야 한다.
- CRITICAL: Abaqus reference artifact 생성, 수정, 복원은 명시적으로 요청된 phase에서만 수행한다.
- CRITICAL: Abaqus reference artifact 생성, 수정, 복원은 명시적으로 요청된 phase에서만 수행한다. 문서 또는 agent가 artifact naming이나 보조 metadata를 맞추기 위해 파일 변경을 요구하지 않는다.
- CRITICAL: public header와 implementation 의존성 방향을 역전하지 않는다.
- CRITICAL: 사람이 계약과 수치식을 대조할 수 있는 단순한 코드를 작성한다. 주석은 코드가 이미 말하는 동작보다 부호, 수명, 순서, backend 제약처럼 비자명한 이유를 설명한다.
- Domain은 입력 파일에서 생성된 전체 모델 정의를 소유하고, 파싱 이후 가능한 한 불변으로 취급한다.
@@ -78,6 +88,22 @@
- B33 reference row는 component별 Abaqus scale로 `absolute_floor + 1e-6 * reference_scale`을 적용한다. Reference 값을 zero-clamp하거나 누락 row를 무시하지 않는다.
- `reference/cantilever beam/` artifact는 rename, rewrite 또는 보정하지 않는다.
## 승인된 MITC4 정책
- Abaqus source `S4``S4R`은 같은 FESA MITC4 정식화로 매핑하며 source type은 추적
정보로만 보존한다. Abaqus의 S4/S4R 알고리즘을 재현하지 않는다.
- Reference case는 `reference/shell/`의 S4 input/displacement CSV와
`reference/shellR/`의 S4R input/displacement CSV를 현재 이름 그대로 사용한다.
- Global `U1/U2/U3`만 blocking reference quantity다. 각 case/component에 B33과 같은
`1e-9 + 1e-6 * reference_scale`을 적용한다. `UR1/UR2/UR3`은 같은 기준을 초과하면
warning만 남긴다.
- MITC4 drilling calibration, coefficient sweep, energy-ratio threshold와 별도 geometry/director
calibration(`NR-O01`~`NR-O04`)은 구현 범위가 아니다. 6-DOF 선형계에는 물리 회전
stiffness block의 양의 최소 대각항에 `1e-3`을 곱한 고정 numerical drilling
stabilization만 사용하며 drilling 방향 nodal moment는 지원하지 않는다.
- Drilling stabilization은 physical generalized strain/resultant/stress에 포함하지 않으며
별도 drilling stiffness/ratio/energy HDF5 output을 요구하지 않는다.
## 기능을 추가할 때의 판단 기준
- 새 element는 요구조건과 formulation을 승인한 뒤 semantic mapping, property/material 연결, DOF/scatter, local kernel, deterministic assembly, recovery, HDF5 row identity, reference/physics evidence를 함께 설계한다.
@@ -122,6 +148,11 @@ AI 에이전트는 유한요소 구조해석 지식이 필요할 때 FEM wiki를
| 물리 검토 | `physics-evaluation-agent` | `fesa-physics-sanity` | `docs/physics-evaluations/<feature-id>-physics-evaluation.md` |
| 배포 준비 | `release-agent` | `fesa-release-readiness` | `docs/releases/<feature-id>-release.md` |
Implementation Planning Agent는 구현 계획 요청에서 `.agents/skills/harness`를 반드시
사용한다. 먼저 여러 자기완결적 Step의 초안을 제시하고 사용자 승인을 받은 뒤에만
`phases/index.json`, `phases/<task-name>/index.json`, `phases/<task-name>/stepN.md`
생성한다. Harness 실행은 별도 사용자 요청이 있을 때만 수행한다.
## 최소 검증 진입점
세부 target graph, dependency normalization과 Windows runtime staging은 `docs/ARCHITECTURE.md`와 실제 CMake 파일을 따른다. `.harness/config.json`이 존재하면 그 설정을 우선한다.
+32 -2
View File
@@ -42,6 +42,8 @@ solution과 test command를 명시한 직접 MSBuild 프로젝트도 검증할
**트레이드오프**: 초기 class 수가 늘어난다. V0에서는 interface를 얇게 유지하고 실제 선형 정적 frame에 필요한 state만 구현한다.
### ADR-005: 공식 결과 파일은 HDF5로 하고 reference 결과는 Abaqus CSV로 둔다
**상태**: HDF5 authoritative output 결정은 유지하며 reference bundle governance 부분은 ADR-019로 대체됨.
**결정**: FESA solver의 authoritative result output은 `results.h5` HDF5이다. Abaqus reference results는 기능별 reference model contract가 지정한 `reference/<model-id>/` 아래 CSV 파일로 저장하며, verification은 FESA HDF5 rows와 Abaqus reference CSV rows를 documented IDs, components, units, coordinate system, step/frame identity, tolerance 기준으로 비교한다. 신규 reference는 canonical 파일명을 사용하고, 승인된 기존 bundle의 legacy alias는 해당 기능 계약에 정확한 경로를 기록한 경우에만 허용한다.
**이유**: 구조해석 결과는 step/frame, field/history, node/element/integration point location, units, coordinate system, schema version을 함께 가져야 한다. HDF5는 이 계층 구조와 metadata를 안정적으로 표현한다.
@@ -77,11 +79,13 @@ solution과 test command를 명시한 직접 MSBuild 프로젝트도 검증할
**트레이드오프**: 초기 병렬화 범위가 제한된다. MKL 내부 thread와 TBB task arena의 oversubscription 정책을 별도로 문서화해야 한다.
### ADR-010: Abaqus reference artifact는 사람이 생성하거나 명시 승인된 절차로만 갱신한다
**결정**: Agent는 Abaqus, Nastran 또는 reference solver를 직접 실행하지 않는다. reference artifact 생성, 수정, 복원은 명시 승인된 phase에서만 수행한다. 신규 bundle의 provenance는 `metadata.json`에 기록한다. 승인된 `cantilever-beam-b33` legacy baseline은 source commit과 generator, units, coordinate system, schema, tolerance를 설계 및 Reference Model Contract가 대신 기록하므로 이 baseline에 한해서 `metadata.json``README.md`가 N/A다.
**상태**: Artifact read-only 및 실행 제한은 유지하며 metadata/provenance/naming 계약은 ADR-019로 대체됨.
**결정**: Agent는 Abaqus, Nastran 또는 reference solver를 직접 실행하지 않는다. reference artifact 생성, 수정, 복원은 명시 승인된 phase에서만 수행한다. 모든 bundle의 provenance, generator/version, units, coordinate system, step/frame identity, schema, tolerance와 limitations는 승인된 기능별 Reference Model Contract에 기록한다. `metadata.json`은 선택 reference artifact이며, 부재만으로 bundle을 불완전하다고 판정하지 않는다. 파일이 존재하면 read-only 보조 자료로 inventory하고 계약 및 실제 artifact와 일치하는지 확인하며, 충돌은 숨기지 않고 upstream 계약 문제로 보고한다. 승인된 `cantilever-beam-b33` legacy baseline의 space-containing filename과 `README.md` N/A 예외는 유지한다.
**이유**: reference 결과는 solver correctness의 기준이다. 생성 절차가 불명확하면 구현 결함과 reference artifact 오류를 구분할 수 없다.
**트레이드오프**: reference 준비가 느려질 수 있다. Legacy 예외는 일반 artifact 규칙을 복잡하게 하지만 exact path와 source commit을 고정하고 read-only로 취급해 감사 가능성을 유지한다.
**트레이드오프**: Reference Model Contract가 필수 provenance의 단일 source of truth가 되어 별도 JSON 파일 없이도 bundle을 사용할 수 있다. 선택 `metadata.json`이 계약과 중복될 수 있으므로 존재 시 일관성 검사가 필요하다. Legacy filename과 `README.md` 예외는 일반 artifact 규칙을 복잡하게 하지만 exact path와 source commit을 고정하고 read-only로 취급해 감사 가능성을 유지한다.
### ADR-011: 구형 단일 검증 진입점 계약을 폐기한다
@@ -181,3 +185,29 @@ model adequacy를 검출한다. 한 계층의 성공만으로 parser exposure
**트레이드오프**: 작은 기능도 여러 계약과 evidence를 함께 준비해야 하므로 개발 속도가
느려진다. 대신 `*DLOAD`처럼 kernel은 있지만 입력에 노출되지 않은 기능, stress처럼
mandatory output이지만 Abaqus reference가 N/A인 기능을 정확하게 표현할 수 있다.
### ADR-019: Abaqus는 입력 형식과 외부 수치 reference이며 FESA 내부 동작 계약이 아니다
**결정**: FESA는 Abaqus와 독립적인 솔버다. 기능별 승인 `.inp` subset을 입력으로
사용하고, 기능이 blocking으로 선언한 FESA HDF5 quantity만 기존 Abaqus CSV와 승인
tolerance로 비교한다. Abaqus 요소 정식화, 적분, stabilization, 내부 상태와 결과 생성
절차를 재현하거나 동등하게 구현하지 않는다. Exact numerical equality는 허용되지만
내부 동작 동등성의 evidence가 아니다.
Reference case readiness에는 선언된 `.inp`, 실제 비교에 필요한 CSV, deterministic
source-ID/component matching과 tolerance만 필요하다. 기존 path와 filename을 그대로
사용하며 canonical naming, legacy-alias 승인, bundle `README.md`, `metadata.json`, Abaqus
version/provenance, 중복 units/coordinates/model/step/frame/material/section 정보와 CSV schema
version은 요구하지 않는다. Reference artifact는 계속 read-only이며 누락, 추가, 중복,
nonfinite required row는 tolerance 전에 실패한다.
**이유**: Reference comparison의 목적은 FESA의 독립 정식화가 승인된 observable quantity를
충분히 가깝게 계산하는지 판정하는 것이다. 수치 비교에 사용되지 않는 artifact
거버넌스가 formulation review나 implementation planning을 차단하면 제품 검증보다 문서
형식 준수가 우선된다. 같은 정보는 `.inp`, CSV header와 feature contract에서 직접 얻을
수 있다.
**트레이드오프**: Reference 생성 환경을 사후에 완전히 재구성하는 감사 기능은 줄어든다.
대신 비교 대상과 source-row/component mapping, tolerance, artifact immutability는 유지해
false match와 결과 보정을 방지한다. 더 강한 provenance가 필요한 기능은 해당 요구조건이
명시적으로 추가할 수 있으나 프로젝트 기본 gate로 자동 승격하지 않는다.
+25 -4
View File
@@ -3,6 +3,11 @@
## 목표
FESA의 아키텍처 목표는 Abaqus `.inp` subset을 내부 semantic model로 변환하고, 유한요소 equation system을 구성해 구조해석 결과를 HDF5로 저장하며, reference comparison과 physics sanity가 가능한 C++17/MSVC 솔버 구조를 제공하는 것이다.
FESA의 element formulation과 numerical path는 Abaqus와 독립적이다. Abaqus `.inp`
승인된 입력 형식이고 Abaqus CSV는 기능별 blocking quantity의 외부 수치 reference다.
Abaqus 내부 적분, stabilization, state 또는 recovery 동작은 FESA architecture contract가
아니다.
핵심 품질 속성:
- FEM formulation traceability
- explicit I/O contracts
@@ -42,7 +47,7 @@ tests/
integration/ # analysis orchestration and CLI contracts
reference/ # HDF5-to-Abaqus projection and comparison
reference/
<model-id>/ # approved read-only Abaqus input/CSV bundle
<case-dir>/ # declared read-only Abaqus input/required CSV pair
.agents/
skills/ # Harness and review skills
.codex/
@@ -302,8 +307,11 @@ Schema requirements:
- field output과 history output을 구분한다.
- reference comparison을 위한 row identity는 node id, element id, integration point id, step/frame id를 포함한다.
- FESA solver는 `results.h5`를 authoritative output으로 쓴다.
- Abaqus reference results는 `reference/<model-id>/` 아래 CSV 파일이다.
- Verification은 documented IDs, components, units, coordinate system, step/frame identity, tolerance 기준으로 FESA HDF5 rows와 Abaqus reference CSV rows를 비교한다.
- Abaqus reference results는 기능 문서가 선언한 기존 CSV 파일이다. Directory/file
naming, README, metadata 또는 provenance는 architecture readiness 조건이 아니다.
- Verification은 기능이 요구하는 source identity와 component를 결정적으로 대응시키고
승인 tolerance를 적용한다. Missing/extra/duplicate/nonfinite required row는 숫자 비교
전에 실패한다. 단일 step/final-frame 기능은 별도 CSV step/frame 열을 요구하지 않는다.
- FESA HDF5에서 추출한 deterministic CSV view는 optional debugging/review artifact이며 공식 solver output 또는 reference artifact가 아니다.
- Writer는 final과 같은 directory의 임시 HDF5에 전체 schema를 쓴 뒤 flush, checked close,
read-only reopen/self-check를 수행한다. Existing final은 `ReplaceFileW`, 새 final은
@@ -348,7 +356,7 @@ deterministic한 순서로 출력한다.
| 기능 유형 | 시작 전에 고정할 것 | 주요 구현 경계 | 함께 검증할 것 | 피해야 할 shortcut |
| --- | --- | --- | --- | --- |
| 새 element/material | DOF, interpolation, constitutive law, integration, local axes/sign, invalid geometry/property | Domain record와 mapper, element kernel, DofManager scatter/pattern, SparseAssembler, ResultRecovery | rigid modes/rank/energy, patch·analytical test, rotated coordinates, reference/physics | 기존 TYPE을 비슷한 kernel에 alias, source ID와 internal index 혼용, 검증 전 범용 hierarchy 추가 |
| 새 element/material | DOF, interpolation, constitutive law, integration, local axes/sign, feature-approved validity boundary | Domain record와 mapper, element kernel, DofManager scatter/pattern, SparseAssembler, ResultRecovery | feature-required invariants/tests and blocking reference quantities | 서로 다른 물리를 같다고 주장, source ID와 internal index 혼용, 검증 전 범용 hierarchy 추가 |
| 새 load/constraint | Abaqus target grammar, application order, units, follower 여부, prescribed-value 의미 | Syntax/mapper, Domain target, full-space LoadAssembler 또는 constraint partition, diagnostics | set/direct target ambiguity, multi-instance identity, nonfinite sum, `Ff-Kfc*dc`, reaction | Element load kernel 존재를 parser 지원으로 간주, penalty를 elimination에 몰래 혼합 |
| 새 analysis procedure | governing equation, state variables, increment/time lifecycle, tangent/residual, convergence와 output frame | 별도 Analysis implementation, procedure-specific state/equation owner, solver interface extension | orchestration order, failure atomicity, restart/frame identity, numerical benchmark | V0 hook 사이에 조건문으로 반복/시간 적분 삽입, 사용하지 않는 future state 선할당 |
| 새 numerical backend | matrix/index contract, lifecycle, reusable state, failure taxonomy, thread/runtime policy | 기존 `LinearSolver` 또는 `ParallelFor` interface의 concrete adapter, CMake normalized target | empty/dimension/extreme-scale input, repeated call, failed-output preservation, clean runtime discovery | Vendor type을 public header에 노출, silent fallback/regularization, absolute install path 고정 |
@@ -356,3 +364,16 @@ deterministic한 순서로 출력한다.
모든 확장은 PRD의 제품 완료 정의와 요구조건→정식화→I/O→구현→reference→physics gate를
따른다. 기존 feature contract에 없는 범위를 편의상 “Abaqus compatible”이라고 넓히지 않는다.
## MITC4 확장 경계
MITC4가 구현될 때 Abaqus `S4``S4R` source type은 같은 FESA formulation을 선택한다.
Source type은 metadata/diagnostic identity로 보존하지만 FESA integration 또는 hourglass
경로를 선택하지 않는다. 6-DOF embedding의 비물리 drilling coordinate에는 physical
rotational stiffness block의 positive minimum diagonal에 `1e-3`을 곱한 고정 numerical
stabilization만 둔다. Drilling calibration, artificial-energy policy와 별도 drilling result
dataset은 이 기능 범위가 아니다.
Reference comparison은 `reference/shell/` S4와 `reference/shellR/` S4R의 기존 input 및
displacement CSV를 사용한다. Global `U1/U2/U3`만 blocking이고 B33과 같은 component-scale
mixed tolerance를 적용한다. `UR1/UR2/UR3`은 같은 기준의 warning-only evidence다.
+25 -10
View File
@@ -1,9 +1,15 @@
# PRD: FESA 구조해석 솔버
## 목표
FESA는 Abaqus `.inp` keyword subset을 입력으로 받아 유한요소법 기반 구조해석을 수행하고, step/frame 단위 결과를 `results.h5` HDF5로 저장하며, Abaqus reference CSV rows와 비교 가능한 C++17/MSVC 솔버를 제공한다.
FESA는 Abaqus `.inp` keyword subset을 입력으로 받아 자체 유한요소 정식화로 구조해석을
수행하고, step/frame 단위 결과를 `results.h5` HDF5로 저장하며, 기능이 지정한 Abaqus
reference CSV 수치와 비교 가능한 C++17/MSVC 솔버를 제공한다. Abaqus의 요소 알고리즘,
적분법, stabilization 또는 내부 결과 생성 절차를 재현하는 것은 목표가 아니다.
이 프로젝트의 성공 기준은 단순 실행 성공이 아니다. 기능은 요구조건, 정식화, I/O 계약, C++ 테스트, reference comparison, physics sanity, release readiness를 모두 통과해야 완료된다.
이 프로젝트의 성공 기준은 단순 실행 성공이 아니다. 기능 구현은 요구조건, 정식화,
I/O 계약, C++ build/test와 기능별 blocking reference comparison을 통과해야 완료된다.
Physics sanity와 release readiness는 구현 완료 뒤 별도 배포 판단을 제공하며 Abaqus 내부
동작 동등성을 요구하지 않는다.
## 사용자
- Solver developer: C++17/MSVC/CMake/CTest 환경에서 요소, 재료, 해석 절차, solver backend를 구현한다.
@@ -31,7 +37,9 @@ Element/material 계층의 일반적인 runtime polymorphism, iterative solver,
3. 해석 procedure는 active model view, DOF/equation map과 sparse system을 만들고, essential constraint elimination을 적용해 선형계를 factorize하고 substitution한다.
4. FESA는 full displacement를 복구하고 equilibrium residual/reaction과 element 결과를 계산한다.
5. 성공 시 output request와 무관한 mandatory 결과, metadata와 diagnostic을 versioned `results.h5`에 기록한다. 실패 시 불완전한 최종 결과 파일을 정상 결과처럼 남기지 않는다.
6. 검증 workflow는 HDF5 row를 승인된 Abaqus reference CSV identity에 투영해 tolerance를 판정하고, 별도로 equilibrium과 물리적 타당성을 검토한다.
6. 검증 workflow는 기능이 지정한 HDF5 quantity를 기존 Abaqus CSV의 source identity와
component에 대응시켜 tolerance를 판정하고, 별도로 equilibrium과 물리적 타당성을
검토한다. Reference bundle naming이나 provenance는 수치 비교 gate가 아니다.
Parser keyword, element kernel, solver backend 또는 output dataset 중 하나만 추가된 상태는 end-to-end 제품 기능이 아니다. 같은 기능의 입력 의미부터 외부 결과와 검증까지 연결되어야 한다.
@@ -76,12 +84,15 @@ Parser keyword, element kernel, solver backend 또는 output dataset 중 하나
새로운 element, load, constraint, material, analysis procedure 또는 output quantity는 다음 조건을 모두 만족할 때 FESA 제품 기능으로 취급한다.
1. 지원 범위와 제외 범위, 실패 category, units/coordinates/identity, tolerance가 요구조건과 I/O 계약에 명시되어 있다.
1. 지원 범위와 제외 범위, 실패 category, solver output의 units/coordinates/identity,
blocking reference quantity와 tolerance가 요구조건과 I/O 계약에 명시되어 있다.
2. 필요한 FEM 정식화와 recovery/sign convention이 검토되었고, 수치 위험과 검증 문제를 numerical review가 다룬다.
3. Syntax와 semantic mapping이 내부 모델에 안정된 source identity로 연결되며 잘못된 입력을 fail-closed로 거부한다. Kernel만 제공하는 기능은 parser/CLI 지원 여부를 별도로 표시한다.
4. DOF, sparse pattern, assembly, constraint, solver lifecycle과 mutable state ownership이 기존 아키텍처에 연결되거나 승인된 새 procedure 경계를 가진다.
5. Mandatory HDF5 schema와 diagnostic, CLI 실패 의미가 정의되고 failure path가 기존 state 또는 최종 output을 오염시키지 않는다.
6. Unit test가 local 수식과 validation을, integration test가 orchestration과 외부 계약을, reference comparison과 physics sanity가 수치·물리 타당성을 각각 증명한다. Reference가 N/A이면 그 이유와 대체 evidence를 명시한다.
6. Unit test가 local 수식과 validation을, integration test가 orchestration과 외부 계약을,
required reference comparison이 기능별 blocking quantity의 외부 수치 acceptance를
각각 증명한다. Reference가 N/A이면 그 이유와 대체 evidence를 명시한다.
## 기능 요구조건
| ID | 요구조건 | Acceptance Criteria | Verification Method |
@@ -92,10 +103,10 @@ Parser keyword, element kernel, solver backend 또는 output dataset 중 하나
| FESA-PRD-004 | FESA는 equation numbering과 constraint/free mapping을 `DofManager`에 집중해야 한다. | Node/Element 내부에 equation id를 분산 저장하지 않는다. | code review, DofManager unit test |
| FESA-PRD-005 | FESA는 해석 중 변하는 물리량을 `AnalysisState`에 저장해야 한다. | V0 displacement, external/internal force, residual, constrained reaction, step/frame identity와 element recovery rows가 출력에 연결되고 velocity, acceleration, temperature, iteration history는 할당하지 않는다. | state unit test, integration test |
| FESA-PRD-006 | FESA는 solver 결과를 HDF5 authoritative output `results.h5`로 저장해야 한다. | V0 step/frame field results, metadata, diagnostics가 schema version과 함께 저장된다. | HDF5 schema test |
| FESA-PRD-007 | FESA는 Abaqus reference CSV rows와 비교 가능한 deterministic row mapping을 제공해야 한다. | displacement와 reaction은 node identity, B33 section resultant는 정규화된 node station identity로 비교하고 stress reference comparison은 N/A로 기록한다. | reference comparison report |
| FESA-PRD-007 | FESA는 기능이 지정한 Abaqus reference CSV quantity와 비교 가능한 deterministic source-row/component mapping을 제공해야 한다. | Required source IDs/components는 일대일 대응되고 missing/extra/duplicate/nonfinite row는 tolerance 전에 실패한다. Canonical naming, README, metadata, provenance 또는 CSV schema version은 요구하지 않는다. | reference comparison report |
| FESA-PRD-008 | FESA의 production C++ 변경은 테스트를 먼저 작성하고 실패를 확인한 뒤 구현해야 한다. | 관련 C++ test file, RED 실패와 후속 GREEN 성공 증거가 있고 Stop의 전체 MSVC build/test가 통과한다. | implementation report, Hook guardrail, CTest |
| FESA-PRD-009 | FESA는 외부 라이브러리 API를 solver core에 직접 노출하지 않아야 한다. | MKL, TBB, HDF5 의존은 adapter module에 제한된다. | architecture review, dependency review |
| FESA-PRD-010 | FESA 기능 완료는 reference comparison과 physics sanity 통과를 요구해야 한다. | 수치 tolerance와 물리 검토가 모두 pass이고 known limitation이 기록된다. | verification report, physics evaluation report |
| FESA-PRD-010 | FESA 기능 구현 완료는 build/test와 기능별 blocking reference comparison 통과를 요구해야 한다. | Required CTest가 통과하고 선언된 blocking quantity가 승인 tolerance 안에 있다. Physics sanity와 release readiness는 별도 후속 gate다. | build/test report, reference verification report |
| FESA-PRD-011 | V0는 입력 파일당 하나의 linear static step과 Abaqus B33 3D Euler beam만 해석해야 한다. | 단일 B33 model은 해석되고, B31과 두 번째 step은 구조화된 unsupported diagnostic으로 거부된다. | parser/semantic unit test, CLI integration test |
| FESA-PRD-012 | V0는 Part/Assembly/Instance wrapper와 source identity를 보존해야 한다. | 여러 identity instance의 node/element/set label이 stable internal ID로 deterministic하게 매핑되고 transform 또는 nested assembly는 거부된다. | semantic mapping unit test |
| FESA-PRD-013 | Output-request allowlist는 해석 의미를 변경하지 않아야 한다. | 승인 keyword와 variable data는 warning 후 no-op이고, allowlist 밖 model-affecting keyword는 오류이며 기본 결과는 output request와 무관하게 생성된다. | parser diagnostic test, HDF5 integration test |
@@ -103,7 +114,7 @@ Parser keyword, element kernel, solver backend 또는 output dataset 중 하나
| FESA-PRD-015 | FESA는 V0 결과와 diagnostic을 안정된 외부 계약으로 출력해야 한다. | CLI가 `0=success`, `2=usage`, `3=input`, `4=model`, `5=solver`, `6=HDF5` exit code를 사용하고 diagnostic field가 계약과 일치하며 HDF5가 displacement, reaction, end force, section resultant, generalized strain/resultant, axial `S11`을 포함하고 실패 시 불완전한 최종 파일을 남기지 않는다. | CLI integration test, HDF5 schema/atomicity test |
| FESA-PRD-016 | Dense와 sparse math storage 및 backend 경계를 분리해야 한다. | `Vector`는 contiguous, `Matrix`는 row-major contiguous storage와 MKL CBLAS를 사용하고 `SparseMatrix`는 별도 0-based CSR 타입이며 MKL 타입이 public core API에 노출되지 않는다. | math unit test, dependency review |
| FESA-PRD-017 | B33 reference comparison은 component-scale 혼합 tolerance를 사용해야 한다. | 모든 matched row가 `abs_error <= absolute_floor + 1e-6 * reference_scale`을 만족하고 missing/extra/nonfinite row는 comparison 전에 실패한다. | reference comparison unit/integration test, verification report |
| FESA-PRD-018 | 승인된 B33 reference artifact는 read-only baseline으로 유지해야 한다. | `reference/cantilever beam/` 파일을 rename, rewrite, 보정하지 않고 exact legacy path로 읽으며 B33 element type과 expected headers를 artifact check에서 확인한다. | artifact inventory, Git diff review |
| FESA-PRD-018 | 승인된 B33 reference artifact는 현재 경로의 read-only baseline으로 유지해야 한다. | `reference/cantilever beam/` 파일을 rename, rewrite 또는 보정하지 않고 기능이 선언한 exact path에서 읽는다. | artifact inventory, Git diff review |
| FESA-PRD-019 | B33 beam section과 local axis를 Abaqus 의미에 맞게 매핑해야 한다. | `n1 -> local y`, `t x n1 -> local z`, `Iy=I11`, `Iz=I22`, `I12=0`을 적용하고 nonpositive property, zero-length element, tangent-parallel guide vector를 구조화된 model diagnostic으로 거부한다. | section-mapping unit test, element geometry test |
## 비기능 요구조건
@@ -113,6 +124,8 @@ Parser keyword, element kernel, solver backend 또는 output dataset 중 하나
- B33 reference tolerance는 model, step/frame, quantity, component별 Abaqus scale만 사용한다.
- 승인된 SI B33 bundle의 absolute floor는 displacement/rotation `1e-9`, force/moment
`1e-3`이며 relative coefficient는 `1e-6`이다.
- MITC4 U/UR comparison은 같은 component-scale 형식을 사용한다. `U1/U2/U3`
blocking이고 `UR1/UR2/UR3` 초과는 warning-only다.
- parser, solver, HDF5 writer는 실패 원인을 구조화된 diagnostic으로 보고한다.
- oneMKL, oneTBB, HDF5는 CMake에서 명시 탐지하고 실패 원인을 분류한다.
- 대규모 모델 성능 최적화보다 V0의 명확성, 테스트 가능성, 검증 traceability를 우선한다.
@@ -121,10 +134,12 @@ Parser keyword, element kernel, solver backend 또는 output dataset 중 하나
1. Requirements approved: 기능 범위, 제외 범위, 입력, 출력, tolerance, 검증 물리량이 정의되어 있다.
2. Research evidence complete: 정식화와 benchmark 근거가 신뢰도와 한계와 함께 정리되어 있다.
3. Formulation reviewed: 약형, shape function, B matrix, constitutive contract, 수치적분, output recovery가 검토되어 있다.
4. I/O contract approved: Abaqus keyword subset, internal model mapping, HDF5 result contract, reference CSV comparison row contract가 승인되어 있다.
4. I/O contract approved: Abaqus keyword subset, internal model mapping, HDF5 result contract,
required reference quantity의 최소 source-ID/component matching이 승인되어 있다.
5. Tests fail before implementation: C++/integration/reference test를 제품 코드보다 먼저 작성하고 같은 Step 안에서 RED 실패와 후속 GREEN 성공을 확인한다.
6. CMake/CTest pass: MSVC/x64/Debug 기준 configure, build, test가 통과한다.
7. Reference comparison pass: FESA `results.h5`의 displacement, reaction, section resultant rows가 승인된 B33 CSV와 documented identity 및 component-scale 혼합 tolerance 안에 있다. Beam stress comparison은 명시적 N/A다.
7. Reference comparison pass: 기능이 blocking으로 선언한 FESA `results.h5` quantity가
선언된 Abaqus CSV와 source identity/component별로 대응되고 승인된 tolerance 안에 있다.
8. Physics sanity pass: equilibrium, reaction consistency, displacement direction, symmetry, section-force consistency와 normalized residual이 검토되어 있다.
9. Release readiness pass: acceptance traceability, known limitations, release notes draft가 준비되어 있다.
+62 -23
View File
@@ -9,11 +9,30 @@
- 기능 요구조건, 이론 정식화, 코드 구현, 검증, 배포 역할을 분리한다.
- 실행 가능성만으로 성공을 판단하지 않고, 레퍼런스 결과와 물리량을 비교해 기능 완료를 판정한다.
- 테스트는 구현 전에 준비한다. 개발 대상 솔버 테스트와 레퍼런스 솔버 결과 비교 테스트를 함께 사용한다.
- Abaqus나 Nastran을 Agent가 직접 실행하지 않는다. `reference/<model-id>/`에 저장된 `model.inp`, `metadata.json`, Abaqus reference CSV files를 검증 기준으로 사용한다.
- Abaqus나 Nastran을 Agent가 직접 실행하지 않는다. 기능이 선언한 기존 `.inp`와 실제
비교에 필요한 Abaqus CSV만 read-only 검증 기준으로 사용한다. Canonical naming,
README, metadata, version 또는 provenance는 기본 readiness 조건이 아니다.
- FESA는 Abaqus와 독립적인 solver다. Agent는 Abaqus 내부 formulation, integration,
stabilization 또는 recovery equivalence를 요구하거나 추론하지 않는다.
- 기본 개발 환경은 C++17 이상, MSVC, CMake, CTest이다.
- 모든 기능은 tolerance 기준을 명시하고, 기준을 만족할 때만 배포 후보가 된다.
- Harness 운영은 `docs/HARNESS_WORKFLOW.md`의 계획, 독립 Step 실행, PreToolUse/Stop 검증 계층을 따른다.
## Harness Step 실행 계약
계획과 구현 Agent는 작업 전 `docs/HARNESS.md``docs/HARNESS_WORKFLOW.md`를 읽는다.
Implementation Planning Agent는 multi-Step 초안을 사용자에게 승인받은 뒤 planning files만
materialize하며 Step을 선택하거나 실행하지 않는다. Executor는 별도의 명시적 사용자 요청으로
`scripts/execute.py`를 실행할 때 branch, pending Step 선택, retry, timestamps, commits, Step
advancement와 phase status를 소유한다.
Implementation Agent는 approved plan, materialized phase files, Executor-selected current
`stepN.md`만 사용해 `RED -> observed failure -> minimal GREEN -> focused/full VERIFY`를 완료하고
다음 Step을 시작하지 않는다. Agent가 쓸 수 있는 Harness metadata는 current Step의 `status`
`summary`, `error_message`, `blocked_reason` payload뿐이다. `.codex/hooks.json`이 PreToolUse
interception과 Stop whole-project validation을 자동 실행하므로 hook entry point를 수동 실행해
대체하지 않는다. 세부 schema와 recovery 절차는 `docs/HARNESS_WORKFLOW.md`를 따른다.
## 전체 Agent 구성
### Coordinator Agent
@@ -111,12 +130,13 @@
- 단위와 좌표계 규약
### Reference Model Agent
TDD와 검증에 사용할 테스트 모델을 준비하는 Agent이다.
TDD와 검증에 사용할 기존 reference case를 inventory하는 Agent이다.
책임:
- 개발 대상 기능을 검증할 최소 모델, benchmark 모델, 회귀 모델을 설계한다.
- `reference/<model-id>/`에 보관할 Abaqus input file, metadata, Abaqus reference CSV 요구사항을 정의한다.
- 레퍼런스 결과에 포함될 물리량과 tolerance를 명시한다.
- 기능이 요구할 때만 테스트 모델 목적을 구분하고, 기본적으로 기존 case를 사용한다.
- 기존 reference case의 목적, exact input/required CSV path, blocking/warning quantity와
tolerance를 inventory한다.
- FESA HDF5 quantity와 source ID/component matching을 명시한다.
- 테스트 모델이 요구조건을 실제로 검증하는지 확인한다.
중요 제약:
@@ -124,18 +144,17 @@ TDD와 검증에 사용할 테스트 모델을 준비하는 Agent이다.
- Abaqus 해석 결과 CSV는 사람이 생성하거나 별도 승인된 절차로 생성해 `reference/<model-id>/`에 저장한다.
- Agent는 저장된 reference artifact만 사용해 비교한다.
권장 reference 구조:
최소 reference case 구조:
```text
reference/
<model-id>/
model.inp
metadata.json
<model-id>_displacements.csv
<model-id>_reactions.csv
<model-id>_internalforces.csv
<model-id>_stresses.csv
<case-dir>/
<declared-input>.inp
<declared-required-quantity>.csv
```
Directory와 filename은 제공된 값을 그대로 사용한다. Reference Model Agent는 canonical
이름, README, metadata, provenance 또는 비교하지 않는 quantity CSV를 요구하지 않는다.
### Implementation Planning Agent
코드 구현 전에 작업 단위와 테스트 순서를 설계하는 Agent이다.
@@ -150,15 +169,33 @@ reference/
- 테스트 우선순위
- 변경 파일 후보
- acceptance checklist
- 사용자 승인 전 multi-Step Harness 초안
- 승인 후 `phases/index.json`, `phases/<task-name>/index.json`, 자기완결적 `stepN.md`
필수 절차:
- 구현 계획 요청에서 project-local `$harness` skill을 사용한다.
- `docs/HARNESS.md``docs/HARNESS_WORKFLOW.md`를 읽고 multi-Step 초안만 사용자에게
제시한다.
- 한 Step은 하나의 layer/module만 다루고 각 Step에 prerequisite file, TDD
RED/GREEN/VERIFY, 정확한 MSVC/CMake/CTest command와 금지사항을 포함한다.
- Step 초안을 먼저 사용자에게 제시한다. 승인 전에는 `phases/` 파일을 생성하지 않는다.
- 승인 후에는 planning files만 materialize하고 Step 선택/실행은 하지 않는다. Harness executor
실행은 별도 사용자 요청이 있을 때만 수행한다.
### Implementation Agent
C++ 코드를 구현하는 Agent이다.
책임:
- `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`, materialized phase files와
Executor-selected current `stepN.md`를 읽고 현재 Step만 수행한다.
- 테스트를 먼저 작성하고 실패를 확인한다.
- 정식화와 I/O schema에 맞춰 최소 구현을 작성한다.
- C++17 이상, MSVC, CMake, CTest 환경에서 동작하도록 구현한다.
- 불필요한 일반화나 speculative abstraction을 피한다.
- current Step의 `status``summary`, `error_message`, `blocked_reason`만 기록한다.
branch, retry, timestamp, commit, advancement는 Executor에 맡긴다.
- `.codex/hooks.json`으로 자동 등록된 PreToolUse와 Stop을 사용하며 hook script를 수동
검증 대체물로 실행하지 않는다.
주요 산출물:
- C++ source/header 변경
@@ -251,7 +288,7 @@ Preset 또는 직접 MSBuild 프로젝트는 `.harness/config.json`에 선언된
| 2. 연구자료 조사 | Research Agent | 자료 요약, benchmark 후보 |
| 3. 유한요소 정식화 | Formulation Agent, Numerical Review Agent | 정식화 문서, 리뷰 결과 |
| 4. 입출력 데이터 정의 | I/O Definition Agent | 입력/출력 schema |
| 5. TDD 테스트모델 작성 | Reference Model Agent, Implementation Planning Agent | 테스트 모델, reference artifact 요구사항 |
| 5. Reference case 준비 | Reference Model Agent, Implementation Planning Agent | 기존 input/required CSV inventory, 비교 mapping, tolerance |
| 6. 코드 구현 | Implementation Agent | C++ 코드, 테스트 |
| 7. 레퍼런스 결과 비교 검증 | Reference Verification Agent, Physics Evaluation Agent | 비교 리포트, 물리 검토 |
| 8. tolerance 만족 시 완료 | Coordinator Agent | 기능 완료 승인 |
@@ -275,8 +312,7 @@ flowchart TD
L --> I
K -- "예" --> M["Reference Verification Agent"]
M --> N{"tolerance 만족?"}
N -- "아니오" --> O["Physics Evaluation Agent"]
O --> L
N -- "아니오" --> L
N -- "예" --> P["Physics Evaluation Agent"]
P --> Q{"물리 검토 통과?"}
Q -- "아니오" --> L
@@ -300,8 +336,8 @@ flowchart TD
### Gate 3: 테스트 준비 승인
통과 조건:
- 구현 전 실패해야 하는 테스트가 정의되어 있다.
- `reference/<model-id>/` artifact 요구사항이 명확하다.
- 최소 모델, benchmark 모델, 회귀 모델의 목적이 구분되어 있다.
- 기능이 요구하는 기존 input/CSV pair와 blocking/warning quantity가 명확하다.
- 필요한 source ID/component matching과 tolerance가 정의되어 있다.
### Gate 4: 구현 검증
통과 조건:
@@ -312,9 +348,10 @@ flowchart TD
### Gate 5: 레퍼런스 검증
통과 조건:
- Abaqus reference CSV 결과와 구현 solver HDF5 결과가 tolerance 안에 있다.
- 절점 변위, 반력, 요소 내력, 응력 비교 결과가 리포트로 남아 있다.
- 실패한 물리량이 없거나 승인된 known limitation으로 기록되어 있다.
- 기능이 blocking으로 선언한 Abaqus CSV quantity와 구현 solver HDF5 quantity가
tolerance 안에 있다.
- Warning-only quantity는 결과와 경고가 리포트에 남고 pass/fail을 바꾸지 않는다.
- Required source row/component의 누락, 추가, 중복 또는 nonfinite 값이 없다.
### Gate 6: 배포 승인
통과 조건:
@@ -371,6 +408,8 @@ Coordinator Agent는 분류 결과에 따라 Requirement, Formulation, I/O Defin
## 운영 메모
- Agent 산출물은 가능한 한 문서, 테스트, 비교 리포트 형태로 남긴다.
- 사람이 생성한 Abaqus reference artifact의 출처와 생성 조건을 `metadata.json`에 기록한다.
- 사람이 제공한 Abaqus reference artifact는 현재 path/name 그대로 read-only로 사용한다.
별도 provenance, README 또는 metadata가 없다는 이유로 gate를 차단하지 않는다.
- reference artifact가 바뀌면 기능 구현 변경과 같은 수준으로 검토한다.
- 기능 완료 판정은 코드 실행 성공이 아니라 reference validation과 physics evaluation 통과를 기준으로 한다.
- 기능 구현 완료 판정은 build/test와 기능별 blocking reference validation 통과를 기준으로
한다. Physics evaluation과 release readiness는 별도 후속 배포 gate다.
+25 -8
View File
@@ -42,8 +42,11 @@ Agent는 역할과 책임 단위이고, skill은 여러 Agent가 반복적으로
3. Formulation Agent는 `fesa-formulation-spec`을 사용해 strong form, weak form, shape functions, B matrix, element stiffness, output recovery를 정리한다.
4. Numerical Review Agent는 `fesa-numerical-review`를 사용해 rigid body modes, patch test, stiffness symmetry, Jacobian, locking 위험을 검토하고 `pass-for-implementation-planning` 여부를 판단한다.
5. I/O Definition Agent는 `fesa-io-contract`를 사용해 지원할 Abaqus `.inp` keyword subset, `results.h5` schema, reference CSV comparison row schema를 정의한다.
6. Reference Model Agent는 `fesa-reference-models`를 사용해 `reference/<model-id>/` artifact bundle 계약과 coverage matrix를 작성한다.
7. Implementation Planning Agent와 Implementation Agent는 `fesa-cpp-msvc-tdd`를 사용해 테스트 작성, 실패 확인, 최소 구현, CMake/CTest 등록, validation을 수행한다.
6. Reference Model Agent는 `fesa-reference-models`를 사용해 기존 input/required CSV
reference-case inventory와 비교 mapping을 작성한다.
7. Implementation Planning Agent는 먼저 project-local `harness`를 사용해 사용자 승인용
multi-Step 초안을 만들고, 승인 후 phase files를 생성한다. 그 뒤 Implementation Agent와
함께 `fesa-cpp-msvc-tdd` 계약에 따라 RED/GREEN/VERIFY를 수행한다.
8. Reference Verification Agent는 `fesa-reference-comparison`을 사용해 구현 solver `results.h5` rows와 Abaqus reference CSV rows를 tolerance 기준으로 비교한다.
9. Physics Evaluation Agent는 `fesa-physics-sanity`를 사용해 global equilibrium, reaction consistency, displacement direction, symmetry, model coverage를 검토한다.
10. Release Agent는 `fesa-release-readiness`를 사용해 gate evidence, acceptance traceability, known limitations, release notes draft를 작성한다.
@@ -77,6 +80,8 @@ Agent는 역할과 책임 단위이고, skill은 여러 Agent가 반복적으로
- dimensions, signs, DOF ordering, coordinate transforms, Jacobian, integration rule, stiffness symmetry, rigid body modes, patch test, hourglass, locking을 확인한다.
- `pass-for-implementation-planning`은 구현 계획 가능 상태만 의미한다.
- 정식화 문서를 직접 수정하지 않는다.
- 이후 Reference Model 문서, artifact naming, README, metadata, provenance 또는 portfolio가
없다는 이유로 formulation verdict를 실패시키지 않는다.
### `fesa-io-contract`
@@ -87,10 +92,11 @@ Agent는 역할과 책임 단위이고, skill은 여러 Agent가 반복적으로
### `fesa-reference-models`
- smoke, analytical, patch test, benchmark, regression, negative/invalid-input 모델을 구분한다.
- `reference/<model-id>/` artifact bundle 계약을 정의한다.
- `model.inp`, `metadata.json`, `<model-id>_displacements.csv`, `<model-id>_reactions.csv`, `<model-id>_internalforces.csv`, `<model-id>_stresses.csv`를 기준 artifact로 둔다.
- required Abaqus reference CSV가 없으면 완료 상태가 아니라 `needs-reference-artifacts`로 둔다.
- 기능이 실제로 사용하는 기존 reference case를 inventory한다.
- Exact input/required CSV path, case purpose, blocking/warning quantity, HDF5 projection,
source ID/component matching과 tolerance만 정의한다.
- Required comparison file이 없을 때만 `needs-reference-artifacts`로 둔다. Canonical naming,
README, metadata, provenance와 비교하지 않는 quantity CSV는 요구하지 않는다.
### `fesa-cpp-msvc-tdd`
@@ -115,10 +121,21 @@ uv run --with pytest python -m pytest -v -rs
- 실패는 `configure | compile | link | test | reference-comparison | harness | environment | upstream-contract`로 분류한다.
- 요구조건, 정식화, I/O 계약, reference artifact, tolerance policy를 바꾸지 않는다.
### project-local `harness`
- Implementation Planning Agent가 구현 요청을 여러 독립 Step으로 분해할 때 사용한다.
- 한 Step은 하나의 layer/module만 소유하고 prerequisite file, TDD RED/GREEN/VERIFY,
exact acceptance command와 구체적 금지사항을 포함한다.
- 사용자에게 Step 초안을 먼저 제시한다. 승인 후에만 `phases/index.json`,
`phases/<task-name>/index.json`, `phases/<task-name>/stepN.md`를 생성한다.
- 계획 작성과 executor 실행을 구분하며, `scripts/execute.py`는 별도 사용자 요청 없이
실행하지 않는다.
### `fesa-reference-comparison`
- `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT` 순서로 수행한다.
- `metadata.json`, `model.inp`, `results.h5`, Abaqus reference CSV files, schema version, units, coordinate system, step/frame identity, ID matching, output location, tolerance source를 확인한다.
- 선언된 input, required Abaqus CSV, `results.h5`, source ID/component mapping과 tolerance를
확인한다. Missing/extra/duplicate/nonfinite required row는 비교 전에 실패한다.
- max absolute error, max relative error, RMS error, norm error, missing rows, extra rows를 보고한다.
- Reference pass는 physics validation이나 release readiness를 의미하지 않는다.
@@ -147,7 +164,7 @@ uv run --with pytest python -m pytest -v -rs
| Numerical Review Agent | `fesa-numerical-review` |
| I/O Definition Agent | `fesa-io-contract` |
| Reference Model Agent | `fesa-reference-models` |
| Implementation Planning Agent | `fesa-formulation-spec`, `fesa-reference-models`, `fesa-cpp-msvc-tdd` |
| Implementation Planning Agent | project-local `harness`, `fesa-formulation-spec`, `fesa-reference-models`, `fesa-cpp-msvc-tdd` |
| Implementation Agent | `fesa-cpp-msvc-tdd` |
| Build/Test Executor Agent | `fesa-cpp-msvc-tdd` |
| Correction Agent | `fesa-cpp-msvc-tdd` |
+2 -1
View File
@@ -3,7 +3,8 @@
> **Historical / Superseded:** 이 문서는 2026-06-10 시점의 초기 조사와 실행 기록이다.
> 현재 제품 범위는 `docs/PRD.md`, Harness 운영 계약은 `docs/HARNESS_WORKFLOW.md`
> `docs/HARNESS.md`를 따른다. 아래의 구형 스킬명, 검증 명령, 기능 우선순위는 현재
> 지침으로 사용하지 않는다.
> 지침으로 사용하지 않는다. 아래의 `metadata.json` 필수 provenance 문구도 ADR-010의
> 선택-artifact 정책으로 대체되었다.
## 메타데이터
- 작성일: 2026-06-10
+2 -1
View File
@@ -158,7 +158,8 @@ INTAKE -> STATE AUDIT -> GATE DECISION -> HANDOFF PACKAGE -> STATUS REPORT
- `needs-formulation`: Formulation Agent가 FEM 정식화를 작성하거나 수정해야 한다.
- `needs-numerical-review`: Numerical Review Agent가 정식화를 검토하거나 재검토해야 한다.
- `needs-io-definition`: I/O Definition Agent가 Abaqus input/output 계약을 정의하거나 수정해야 한다.
- `needs-reference-model`: Reference Model Agent가 reference model artifacts를 정의하거나 수정해야 한다.
- `needs-reference-model`: Reference Model Agent가 lightweight reference-case inventory,
required input/CSV presence, source-ID/component matching 또는 tolerance를 정의해야 한다.
- `needs-implementation-plan`: Implementation Planning Agent가 TDD implementation plan을 작성하거나 수정해야 한다.
- `ready-for-implementation`: implementation plan이 준비되었고 downstream 구현을 막는 upstream gate가 없다.
- `needs-build-test`: 구현 이후 독립 Build/Test Executor 검증이 필요하다.
File diff suppressed because it is too large Load Diff
+51 -6
View File
@@ -2,7 +2,24 @@
이 디렉터리는 Implementation Planning Agent가 작성하거나 제안한 기능별 구현계획 문서를 보관하는 위치다.
Implementation Planning Agent는 승인된 요구조건, 연구 브리프, 정식화, 수치 리뷰, I/O 정의, reference model 계약을 C++/MSVC 구현 전 TDD 작업계획으로 변환한다. Agent는 코드, 테스트, CMake 파일을 작성하지 않고, Abaqus/Nastran을 실행하지 않으며, Abaqus reference CSV 생성 또는 수정이나 solver 결과 비교, release readiness 승인도 하지 않는다.
Implementation Planning Agent는 승인된 요구조건, 연구 브리프, 정식화, 수치 리뷰, I/O
정의와 lightweight reference-case inventory를 C++/MSVC 구현 전 TDD 작업계획으로
변환한다. Project-local `$harness`를 사용해 multi-Step 초안을 먼저 제시하고 사용자가
승인한 뒤에만 `phases/` planning files를 생성한다. 계획과 구현 전에
`docs/HARNESS.md``docs/HARNESS_WORKFLOW.md`를 읽는다.
## Harness 실행 handoff
Planning Agent는 draft -> explicit user approval -> planning files만 수행하며 Step을
선택하거나 실행하지 않는다. 별도의 명시적 사용자 요청이 있어야 Executor
(`scripts/execute.py`)가 branch, pending Step, retry, timestamps, commits, advancement와 phase
status를 소유한다.
Implementation Agent는 approved plan, materialized phase indexes, Executor-selected current
`stepN.md` 하나만 사용한다. current Step에서 `RED -> observed failure -> minimal GREEN ->
focused/full VERIFY`를 완료하고 다음 Step을 시작하지 않는다. Agent는 current Step의 `status`
`summary`, `error_message`, `blocked_reason` payload만 쓴다. `.codex/hooks.json`
PreToolUse와 Stop은 자동으로 실행되며 hook entry point를 수동 실행해 대체하지 않는다.
기본 파일명은 `docs/implementation-plans/<feature-id>-implementation-plan.md` 형식을 사용한다. 각 문서는 Implementation Agent가 먼저 작성해야 할 실패 테스트, 최소 구현 순서, CMake/CTest 등록 계획, acceptance traceability를 제공해야 한다.
@@ -16,6 +33,11 @@ Implementation Planning Agent는 승인된 요구조건, 연구 브리프, 정
- candidate source/header/test/CMake 파일과 ownership boundary를 제안한다.
- requirement, task, test, reference model, acceptance criterion을 Acceptance Traceability Matrix로 연결한다.
- `.harness/config.json` 또는 자동 감지 기본값에서 해석되는 MSVC build/test 명령과 feature-specific command를 명시한다.
- 한 Step을 하나의 layer/module로 제한하고 prerequisite files, RED/GREEN/VERIFY, exact
acceptance commands와 구체적 금지사항을 포함한다.
- 사용자 승인 전에는 `phases/` 파일을 만들지 않고, 승인 뒤에도 planning files만
materialize한다. 별도 요청 없이는 `scripts/execute.py`를 실행하지 않으며 Step을
선택하거나 실행하지 않는다.
수행하지 않는다:
- C++ 코드를 구현하지 않는다.
@@ -96,8 +118,8 @@ Implementation Planning Agent는 승인된 요구조건, 연구 브리프, 정
1. Abaqus `.inp` input follows docs/io-definitions/<feature-id>-io.md.
2. Parser/I/O path maps model data and history data into the internal semantic model.
3. Solver path produces authoritative `results.h5` with displacement, reaction, internal force, stress, or feature-specific result datasets.
4. Reference artifacts are Abaqus-generated CSV files under `reference/<model-id>/`.
5. Reference comparison tests compare FESA `results.h5` rows against `reference/<model-id>/<model-id>_*.csv` rows.
4. Reference inputs and required CSV files use exact existing paths declared by the feature.
5. Reference comparison tests compare only blocking/warning quantities by source ID/component.
## Acceptance Traceability Matrix
@@ -130,17 +152,40 @@ MSVC build/test를 다시 확인하며, 구현 보고서의 RED 실패 증거를
- <likely failure classifications and upstream rollback guidance>
### Reference Verification Agent
- <planned HDF5/CSV view comparison tests, reference model ids, tolerance mapping, ID matching assumptions>
- <planned HDF5/CSV comparison tests, exact case paths, tolerance mapping, source-ID/component matching>
## Harness Step Draft
| step | name | owned layer/module | prerequisite files | RED/GREEN/VERIFY | acceptance commands | stop condition |
| ---: | --- | --- | --- | --- | --- | --- |
| 0 | <kebab-case> | <one scope> | <exact paths> | <test-first sequence> | <exact commands> | <condition> |
User approval is required before materializing this draft under `phases/`.
## Executor Handoff
- Executor authorization: separate explicit user request for `scripts/execute.py`.
- implementation input: approved plan, materialized phase indexes, and Executor-selected current
`stepN.md`.
- implementation recipe: `RED -> observed failure -> minimal GREEN -> focused/full VERIFY`.
- metadata ownership: Implementation Agent records only the current Step `status` plus `summary`,
`error_message`, or `blocked_reason`; Executor records branch, pending-Step selection, retry,
timestamps, commits, advancement, and phase status.
- hooks: `.codex/hooks.json` automatically invokes PreToolUse and Stop; never manually run hook
entry points as substitutes.
## Open Issues
- <requirement, formulation, I/O, reference artifact, tolerance, or architecture issue>
- <requirement, formulation, I/O, required comparison file/mapping, tolerance, or architecture issue>
```
## 품질 기준
- 모든 `must` requirement는 최소 하나의 task와 test에 연결되어야 한다.
- C++ production 변경마다 선행 테스트 파일 또는 테스트 추가 계획이 있어야 한다.
- reference artifact가 필요한 기능은 `reference/<model-id>/`와 FESA HDF5-to-reference-CSV 비교 테스트 계획을 가져야 한다.
- reference comparison이 필요한 기능은 exact existing input/required CSV path와 FESA
HDF5-to-reference-CSV source-ID/component mapping test 계획을 가져야 한다.
- Implementation Planning Agent는 Harness Step 초안을 사용자에게 승인받은 뒤에만 phase
index와 step files를 생성하며 executor는 자동 실행하지 않는다.
- CMake/CTest 계획은 MSVC x64 Debug 검증 경로와 호환되어야 한다.
- 구현 계획은 테스트 작성, 실패 확인, 최소 구현, validation 순서를 명시해야 한다.
- upstream 문서가 불완전하면 값을 임의로 채우지 않고 `needs-upstream-decision` 또는 `blocked`로 표시한다.
+19 -51
View File
@@ -16,7 +16,7 @@ I/O Definition Agent는 Abaqus input file subset, 내부 solver model mapping, o
- model data와 history data를 내부 solver 개념으로 매핑한다.
- node, element, set, material, section, boundary condition, load, step, output request의 의미 계약을 정의한다.
- `results.h5`의 authoritative HDF5 schema를 정의한다.
- FESA HDF5 dataset을 `reference/<model-id>/` 아래 Abaqus reference CSV rows와 비교하기 위한 deterministic row schema를 정의한다.
- 기능이 선언한 existing Abaqus CSV와 비교하기 위한 최소 source-ID/component mapping을 정의한다.
수행하지 않는다:
- parser를 구현하지 않는다.
@@ -123,58 +123,25 @@ I/O Definition Agent는 Abaqus input file subset, 내부 solver model mapping, o
| element_force | /steps/<step>/frames/<frame>/field_outputs/element_forces | <nrow, ncomp> | float64 | component_names, element_ids, location | element | feature-dependent |
| stress | /steps/<step>/frames/<frame>/field_outputs/S | <nrow, ncomp> | float64 | component_names, element_ids, integration_points | integration_point | feature-dependent |
## FESA HDF5 to Reference CSV Comparison Schema
## FESA HDF5 to Reference CSV Comparison Mapping
FESA solver output은 `results.h5`이다. Comparison tooling reads required HDF5 datasets and maps them to deterministic row records that can be matched against Abaqus reference CSV files under `reference/<model-id>/`.
FESA solver output은 `results.h5`이다. 기능이 blocking 또는 warning-only로 선언한
quantity에 대해서만 existing CSV path와 다음 mapping을 정의한다.
공통 규칙:
- reference_root: `reference/<model-id>/`
- hdf5_schema_version: <version>
- reference_csv_schema_version: <version>
- sort_order: step, frame, id, location, component
- numeric_format: <precision and exponent policy>
- missing_component_policy: 0 | N/A | omitted, feature-specific
- hdf5_dataset_source: HDF5 dataset path를 각 row schema 또는 report에 기록한다.
| field | contract |
| --- | --- |
| reference_input | exact existing `.inp` path |
| reference_csv | exact existing required CSV path |
| hdf5_dataset | authoritative FESA dataset path |
| source_identity | node/element source label used for exact matching |
| components | required CSV columns and corresponding HDF5 components |
| row_precheck | missing/extra/duplicate/nonfinite required rows fail before tolerance |
| behavior | blocking or warning-only |
| tolerance | upstream-approved formula |
### displacement rows / `<model-id>_displacements.csv`
| column | type | description |
| --- | --- | --- |
| step | string | step name or index |
| frame | integer | frame or increment id |
| node_id | integer/string | Abaqus node label |
| ux | float | displacement component |
| uy | float | displacement component or 0/N/A |
| uz | float | displacement component or 0/N/A |
### reaction rows / `<model-id>_reactions.csv`
| column | type | description |
| --- | --- | --- |
| step | string | step name or index |
| frame | integer | frame or increment id |
| node_id | integer/string | Abaqus node label |
| rfx | float | reaction component |
| rfy | float | reaction component or 0/N/A |
| rfz | float | reaction component or 0/N/A |
### internal force rows / `<model-id>_internalforces.csv`
| column | type | description |
| --- | --- | --- |
| step | string | step name or index |
| frame | integer | frame or increment id |
| element_id | integer/string | Abaqus element label |
| location | string | element/nodal/integration_point location |
| component | string | force component name |
| value | float | component value |
### stress rows / `<model-id>_stresses.csv`
| column | type | description |
| --- | --- | --- |
| step | string | step name or index |
| frame | integer | frame or increment id |
| element_id | integer/string | Abaqus element label |
| integration_point | integer/string | integration point id or N/A |
| component | string | stress component name |
| value | float | stress value |
Row order alone으로 대응하지 않는다. Canonical filename, reference CSV schema version,
README, metadata, provenance 또는 single-step/final-frame case의 duplicated unit/coordinate/
step-frame columns를 요구하지 않는다.
## Validation Rules
- required_fields: <required input fields>
@@ -208,4 +175,5 @@ FESA solver output은 `results.h5`이다. Comparison tooling reads required HDF5
- 내부 모델 계약은 semantic fields로 작성하고 C++ class/function/API를 확정하지 않는다.
- `results.h5`가 authoritative solver output임을 명시해야 한다.
- HDF5 schema는 dataset path, dtype/shape, required attributes, ID field, component naming, coordinate system, units, step/frame identity, quantity location을 포함해야 한다.
- Reference CSV comparison row schema는 column name, stable sort order, ID field, component naming, coordinate system, units, step/frame identity, quantity location을 포함해야 한다.
- Reference CSV comparison mapping은 exact path, source-ID column, required component columns,
HDF5 projection, row prechecks와 tolerance를 포함해야 한다.
@@ -302,9 +302,9 @@ Comparison 전에 다음 exact files가 존재하고 변경되지 않았음을
Input은 `TYPE=B33`이어야 하고 trim한 CSV header는 아래 mapping 표와 정확히 일치해야
한다. 각 projected row key는 unique하고 모든 numeric value는 finite여야 한다. 파일
missing/type mismatch는 `needs-reference-artifacts`, header/value/identity mismatch는
`schema-mismatch`이며 comparison은 시작하지 않는다. 이 legacy bundle에서
`metadata.json``README.md` N/A이고 파일을 rename, rewrite, zero-clamp 또는 보정하지
않는다.
`schema-mismatch`이며 comparison은 시작하지 않는다. `metadata.json` 부재는 프로젝트
전역 정책에 따라 허용되고, `README.md`는 이 legacy bundle에서 N/A다. 파일을 rename,
rewrite, zero-clamp 또는 보정하지 않는다.
### Header and component normalization
@@ -0,0 +1,670 @@
# Linear Static MITC4 Shell I/O Definition
## Metadata
- feature_id: `linear-static-mitc4-shell`
- source_requirement: `docs/requirements/linear-static-mitc4-shell.md`
- source_research: `docs/research/linear-static-mitc4-shell-research.md`
- source_formulation: `docs/formulations/mitc4-shell-formulation.md`
- source_numerical_review: `docs/numerical-reviews/linear-static-mitc4-shell-review.md`
- source_commits: requirements/research/formulation policy revision `73df844`
- status: `approved-for-implementation-planning`
- owner_agent: `io-definition-agent`
- date: `2026-08-12`
- authoritative_output: `results.h5`
- hdf5_schema_version: `0`
- reference_cases: read-only S4 at `reference/shell/`; read-only S4R at `reference/shellR/`
- implementation_planning_authorized: `true`
This document defines the approved semantic input and output contract for the
linear-static MITC4 shell feature. It does not define parser, model, HDF5-writer, or
comparison-tool C++ APIs and does not claim full Abaqus compatibility or Abaqus
`S4`/`S4R` formulation equivalence.
The user approved the following I/O-specific decisions on `2026-08-12`:
1. `S4` and `S4R` reference artifacts remain separate even though both source types
map to one internal `FESA-MITC4` formulation.
2. The optional positive integer on a `*SHELL SECTION` thickness row is accepted
without a warning and has no semantic effect on FESA quadrature. FESA always uses
the formulation's `2 x 2 x 2` rule.
3. The existing `reference/shell/` S4 and `reference/shellR/` S4R input/displacement
files are retained under their current names without mutation. No canonical or
legacy-alias classification is required.
4. HDF5 schema version `0` is extended additively with MITC4-specific datasets while
retaining the existing common metadata, nodal-result, diagnostic, CLI, and
failure-atomicity conventions.
The approved requirements fix the drilling rule and B33 mixed displacement tolerance.
Drilling calibration/output, `NR-O03`, `NR-O04`, bundle-administration metadata, and
an expanded reference portfolio are outside this contract.
## 1. Abaqus Input Scope
- input_format: Abaqus input file (`.inp`)
- supported_analysis: exactly one small-displacement, small-rotation linear-static
step containing four-node `S4` and/or `S4R` shell elements
- ordinary_unit_system: user-consistent; FESA does not infer SI or another unit
system from an `.inp` file
- internal_element_formulation: `FESA-MITC4`
- compatibility_disclaimer: only the keyword locations, parameters, and data grammar
in this document are supported
`supported` means only the documented subset is semantically interpreted. `warning
no-op` means the syntax is consumed and a structured warning is recorded, but no
Domain, AnalysisModel, numerical, or mandatory-output meaning changes. The optional
`*SHELL SECTION` integration-point field is a separately approved silent provenance
field, not a warning no-op keyword.
| keyword | status and allowed location | required parameters and data grammar | semantic mapping | unsupported behavior |
| --- | --- | --- | --- | --- |
| `*HEADING` | supported; optional top-level first keyword | no parameters; zero or more text rows until next keyword | original heading retained as source metadata | nested location or parameters are input errors |
| `*PART` / `*END PART` | supported; top-level model block | `NAME=<part-name>` required; no `*END PART` data | scope for part-local nodes, elements, sets, and shell sections | unclosed/nested part or duplicate name is an input error |
| `*NODE` | supported; part scope | no parameters; each row `node_label,x,y,z` | positive source node label and finite global Cartesian coordinates | wrong arity, duplicate label, or nonfinite value is an input error |
| `*ELEMENT` | supported; part scope | `TYPE=S4` or `TYPE=S4R`; each row `element_label,node_1,node_2,node_3,node_4` | ordered four-node shell connectivity; source type retained separately; internal type is `FESA-MITC4` | another type is `unsupported-element-formulation`; wrong arity, repeated connected node, or dangling node is an error |
| `*NSET` | supported; part or assembly scope | `NSET=<name>`; optional `GENERATE`; assembly scope requires `INSTANCE=<name>`; explicit labels or `first,last,increment` | deterministic node-set membership | mixed-instance set, invalid generate range, duplicate name, or dangling member is an error |
| `*ELSET` | supported; part or assembly scope | `ELSET=<name>`; optional `GENERATE`; assembly scope requires `INSTANCE=<name>`; same row rules as `*NSET` | deterministic element-set membership | mixed-instance set, invalid range, duplicate name, or dangling member is an error |
| `*MATERIAL` | supported; top-level model data | `NAME=<material-name>` required; no data | owns exactly one approved isotropic `*ELASTIC` definition | duplicate name, missing/duplicate elasticity, or another material model is an error |
| `*ELASTIC` | supported; current material scope | no parameters; exactly one row `E,nu` | homogeneous isotropic elasticity; `G=E/(2(1+nu))` | extra row/field, dependency/temperature data, nonfinite value, `E<=0`, or `nu<=-1`/`nu>=0.5` is an error |
| `*SHELL SECTION` | supported; part scope | `ELSET=<name>` and `MATERIAL=<name>` required; exactly one row `thickness[,integration_points]` | one centered homogeneous layer with constant thickness | composite/layer data, offset, orientation, distributed/nodal thickness, missing reference, or conflicting assignment is an error |
| `*ASSEMBLY` / `*END ASSEMBLY` | supported; exactly one top-level assembly | `NAME=<assembly-name>` required; no end data | scope for identity instances and assembly sets | nested/duplicate assembly is `unsupported-nested-assembly` |
| `*INSTANCE` / `*END INSTANCE` | supported; assembly scope | `NAME=<instance-name>`, `PART=<part-name>` required; no intervening data | named identity copy; multiple instances of a part are allowed | translation/rotation data is `unsupported-instance-transform`; duplicate or dangling instance is an error |
| `*BOUNDARY` | supported; top-level model data or sole step | no parameters; each row `target,first_dof,last_dof[,value]`; omitted value is exact zero | prescribed global shell DOFs 1 through 6 | invalid arity/range, unresolved target, or conflicting expanded value is an error |
| `*CLOAD` | supported; sole step | no parameters; each row `target,dof,magnitude` | concentrated global nodal force/moment on DOFs 1 through 6 | invalid arity/DOF, nonfinite magnitude, unresolved target, or drilling-direction aggregate moment is an error |
| `*STEP` / `*END STEP` | supported; exactly one top-level history block | optional `NAME`; optional `NLGEOM=NO`; no end data | one canonical result identity `(Step-1,frame 0)` | second step is `unsupported-multiple-step`; `NLGEOM=YES` is `unsupported-nonlinear-geometry` |
| `*STATIC` | supported; exactly once in sole step | no parameters; exactly one row `initial_increment,time_period,minimum_increment,maximum_increment` | source values retained; exactly one linear solve and frame 0 | another procedure or missing/extra/nonfinite/nonpositive field is an error |
| `*PREPRINT` | warning no-op; top-level | all parameters retained then ignored; no data | accepts generator control | no semantic object is created |
| `*RESTART` | warning no-op; sole step | all parameters retained then ignored; no data | accepts a legacy restart request | no restart state is created |
| `*OUTPUT, FIELD` | warning no-op; sole step | parameters and subordinate variable data retained then ignored | accepts field-output request root | cannot select, suppress, or expand mandatory FESA output |
| `*OUTPUT, HISTORY` | warning no-op; sole step | parameters and subordinate variable data retained then ignored | accepts history-output request root | no history dataset is created |
| `*NODE OUTPUT` | warning no-op; active output request | all parameters and following variable rows ignored | accepts legacy nodal request | cannot change the HDF5 schema |
| `*ELEMENT OUTPUT` | warning no-op; active output request | all parameters and following variable rows ignored | accepts legacy element request | cannot change the HDF5 schema |
| `*CONTACT OUTPUT` | warning no-op; active output request | all parameters and following variable rows ignored | accepts legacy contact-output syntax only | no contact model or output is created |
`*DLOAD`, pressure, gravity, body force, edge traction, follower load, explicit
normal/director input, `*ORIENTATION`, composite/layer controls, `*INCLUDE`, and
model-affecting keywords not listed above are `unsupported-keyword` errors. A mixed
B33/shell model and a shell-beam joint are `unsupported-mixed-element-model`; the
presence of an existing B33 implementation does not expand this feature contract.
Multiple `*ELEMENT` blocks containing `S4`, `S4R`, or both are allowed. Every element
retains its own source element type, and source type never changes FESA quadrature,
tying, drilling, recovery, or numerical path.
### 1.1 Shell-section data rule
The exact accepted data row is
```text
thickness[,integration_points]
```
- `thickness` is a finite `double` strictly greater than zero.
- If present, `integration_points` is a positive base-10 integer.
- The optional field is syntactically accepted without a warning and has no Domain,
quadrature, recovery, or output effect.
- The raw input remains recoverable through the source file/content identity, but
no `source_integration_points` physical property is created.
- FESA stiffness remains four midsurface Gauss locations times two thickness Gauss
locations, including when the source value is `5` in the declared S4 case.
Silently accepting this field is an explicit feature contract, not a general rule
that Abaqus section parameters may be ignored.
### 1.2 Nesting grammar
```text
input-file
:= heading? part+ assembly material+ model-boundary* step EOF
part
:= *PART
node-block+ element-block+ (nset | elset)* shell-section+
*END PART
assembly
:= *ASSEMBLY
instance+ assembly-set*
*END ASSEMBLY
instance
:= *INSTANCE *END INSTANCE
step
:= *STEP *STATIC step-boundary* cload* allowed-no-op* *END STEP
```
All parts close before assembly. Assembly contains only identity instances and
assembly-level sets. Instance-local node/element redefinition, nested assembly,
instance transforms, and dependent/independent mesh semantics are excluded.
## 2. Syntax Policy
- The first non-whitespace character of a keyword line is `*`; `**` begins a comment.
- Comments have no semantic effect but retain normalized file and 1-based line
provenance for neighboring parsed records.
- Keyword names, parameter names, enumerated values, and named-reference lookup are
ASCII case-insensitive. Raw source spelling remains available for identity and
diagnostics.
- Keyword and data fields are comma-separated with surrounding whitespace removed.
A required empty field, an unexpected trailing field, or a malformed numeric token
is an input error.
- Keyword continuation, physical-line continuation, quoted/multiline names, and
include files are unsupported. Each logical keyword or data row is complete on one
physical line.
- Node/element labels and explicit set members are positive base-10 integers.
Internal numeric IDs do not replace preserved source label text.
- All real-valued input is finite. `NaN` and positive/negative infinity are rejected.
- Every parsed keyword, parameter, data row, and semantic entity remains traceable to
normalized file path, 1-based line, raw keyword, and source identity.
- Output-request variable data is a warning no-op only while subordinate to an
allowlisted output keyword. An unexpected standalone data line is an input error.
### 2.1 Duplicate and dangling-reference policy
- Part, assembly, instance, material, set, and section identities are unique in
their documented case-insensitive scope.
- Node and element source labels are unique within a part.
- Multiple identity instances of the same part are distinct through instance name.
- Connectivity, set membership, instance `PART`, section `ELSET`/`MATERIAL`, assembly
set `INSTANCE`, boundary target, and load target all resolve before Domain commit.
- Duplicate definitions use `duplicate-entity`; unresolved references use
`unresolved-reference`. A partial Domain is never passed to analysis.
## 3. Model Data Mapping
### 3.1 Stable source identity and ordering
After identity-instance expansion, each node and element has
```text
SourceEntityId { instance_name, source_label }
```
Raw spelling and the case-insensitive lookup key are separate. Stable internal IDs
follow input part declaration order, instance declaration order, and part-local
entity declaration order. Hash iteration and thread scheduling cannot affect IDs,
director accumulation, result rows, or diagnostics.
Assembly sets name one identity instance and resolve their numeric members to that
instance's part-local source identities. A set cannot mix members from multiple
instances in the approved grammar.
### 3.2 Nodes, elements, sets, material, and section
- A node has global Cartesian coordinates, stable internal ID, source identity,
geometry-derived initial director, and deterministic tangent frame.
- A shell element has ordered connectivity `[node_1,node_2,node_3,node_4]`, stable
internal ID, source identity, preserved source type `S4` or `S4R`, internal type
`FESA-MITC4`, and exactly one resolved section/material.
- Connectivity order fixes natural corners `1=(-1,-1)`, `2=(+1,-1)`,
`3=(+1,+1)`, `4=(-1,+1)` and positive thickness through
`A_xi x A_eta`. Connectivity is not silently reversed.
- Explicit set order follows data rows. Generated sets use inclusive
`first,last,increment` order. Set members remain round-trippable to source identity.
- Material preserves `E` and `nu`; `G=E/(2(1+nu))` is derived.
- Section preserves positive constant thickness and resolved material. It represents
one centered homogeneous isotropic layer.
- Multiple materials, sections, element sets, `S4` blocks, and `S4R` blocks are
allowed when each element resolves to exactly one valid assignment.
### 3.3 Director and geometry preprocessing
Initial directors are semantic model data derived after instance expansion, not
parser-provided rotations.
1. Process accepted shell elements in stable source-element order.
2. Compute each source-order-positive center normal candidate and its `2 x 2`
surface-area weight.
3. At each node, sort incident elements by stable source identity and reject any
nonpositive pairwise normal dot product before averaging.
4. Form and normalize the deterministic area-weighted director.
5. Select the least-aligned global basis axis with fixed `x,y,z` tie order and form
right-handed nodal frame `[a,b,d]`.
The complete center, volume-Gauss, tying, and committed-recovery inventory requires
finite nonzero surface area, finite covariant/reciprocal bases, and finite positive
`J`. This document supplies no point omission, normal flip, or default axis.
Geometry and director failures are model-validation errors. Duplicate connectivity,
self-intersection, degenerate/reversed geometry, invalid Jacobians, opposed incident
normals, and invalid basic mappings fail closed. No calibrated smooth-angle,
distortion, aspect, or warpage threshold is applied.
## 4. History Data Mapping
### 4.1 Step and procedure
Exactly one history object is created. The source step name remains provenance, but
the result identity is literal `Step-1`, frame index `0`. The four `*STATIC` values
are finite positive source data and `minimum_increment <= maximum_increment`; they do
not create increments, iteration history, or additional frames.
`NLGEOM=NO` or omission is accepted. `NLGEOM=YES`, another procedure, or another step
is unsupported. The future nonlinear formulation does not expand this history
contract.
### 4.2 Boundary conditions
Boundary target is a direct source node label or node set and expands to stable
source node identities. `first_dof <= last_dof`, with both in `1..6`. Omitted value
is exact zero; a finite nonzero value is supported. Model-level and step-level
boundaries activate in the sole step. Different prescribed values on one expanded
node/DOF are an error.
| DOF | kinematic component | unit dimension |
| ---: | --- | --- |
| 1 | `U1` | length |
| 2 | `U2` | length |
| 3 | `U3` | length |
| 4 | `UR1` | radian/dimensionless angle |
| 5 | `UR2` | radian/dimensionless angle |
| 6 | `UR3` | radian/dimensionless angle |
### 4.3 Concentrated loads and drilling projection
`*CLOAD` target expansion matches boundary expansion. Rows resolving to the same
node/DOF are accumulated in stable source order before physical admissibility is
tested.
| DOF | load component | unit dimension |
| ---: | --- | --- |
| 1 | `F1` | force |
| 2 | `F2` | force |
| 3 | `F3` | force |
| 4 | `M1` | force*length |
| 5 | `M2` | force*length |
| 6 | `M3` | force*length |
For aggregate nodal moment `M_I` and approved unit director `d_I`, exact-zero moment
is accepted as a separate case. Otherwise compute, without denominator clamping,
```text
rho_M = abs(dot(d_I,M_I)) / norm(M_I)
```
and require `rho_M <= 1e-12`. Failure is `unsupported-drilling-load`. No part of a
rejected physical moment is transferred to numerical drilling stabilization.
### 4.4 Output requests
Allowlisted Abaqus output requests do not activate history output and cannot change
the mandatory HDF5 inventory. FESA writes all datasets in Section 6 on a successful
run even when the input contains no output request. Requested Abaqus variables that
have no FESA dataset do not create empty synthetic physical results.
## 5. Internal Model Contract
- Domain owns the complete immutable-after-mapping definition of nodes, shell
elements, sets, materials, sections, boundary/load data, sole static step, stable
source identities, initial directors, and source formulation labels.
- `S4`/`S4R` remains source metadata. Numerical selection uses one explicit internal
identity, `FESA-MITC4`.
- AnalysisModel is a non-owning view of active Domain objects and does not copy them.
- Nodes/elements do not own equation IDs. Six-DOF numbering, constrained/free maps,
scatter maps, and sparse pattern are DofManager responsibilities.
- Boundary and load records retain both the source target and their deterministic
expanded source-node identities.
- Section/material assignment is resolved before element processing. An element with
zero or multiple assignments is invalid.
- AnalysisState contains only the current linear-static displacement, external and
internal force, full residual/reaction, shell recovery, equilibrium, and energy
rows. No nonlinear director history, iteration state, velocity, or acceleration is
allocated.
- Midsurface generalized rows, section-position stress rows, nodal rows, and global
equilibrium rows have distinct quantity/location identity. Values from different
locations are never averaged to satisfy a schema. Drilling-specific result rows do
not exist.
## 6. Output HDF5 Schema
The sole authoritative output is `results.h5`, schema version `0`. MITC4 extends
that schema additively; it does not migrate or reinterpret B33 datasets. Every
string is UTF-8, every physical real is IEEE-754 float64, stable internal IDs are
uint64, and constraint masks are uint8.
The literal result path identity is `(Step-1,frame 0)`. No history or nonlinear
frame group is created.
### 6.1 Metadata
`/metadata` is a group with these required scalar attributes:
| attribute | required value or meaning |
| --- | --- |
| `schema_version` | integer `0` |
| `feature_id` | `linear-static-mitc4-shell` |
| `solver_version` | executing solver version |
| `source_input_identity` | normalized input path plus auditable content identity |
| `unit_system_label` | `user-consistent-unspecified`; FESA does not infer a named unit system from `.inp` or reference artifacts |
| `coordinate_convention` | `global-cartesian; shell-local=(e1,e2,e3); positive-thickness=+zeta` |
| `internal_formulation` | `FESA-MITC4` |
| `integration_rule` | `2x2x2-gauss; mitc4-edge-midpoint-shear` |
| `step_name` | `Step-1` |
| `frame_index` | integer `0` |
No drilling coefficient/ratio/energy, `theta_smooth`, or distortion/warp calibration
attribute is required. The fixed drilling formula is part of the formulation identity,
not a per-run result policy.
### 6.2 Model identity datasets
| exact dataset path | shape/dtype | row identity and fields | attributes/order |
| --- | --- | --- | --- |
| `/model/nodes` | `[node_count]` compound | `internal_node_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `coordinates:float64[3]` | internal node ID ascending; global Cartesian; coordinate unit `length` |
| `/model/elements` | `[element_count]` compound | `internal_element_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `source_element_type:utf8`, `internal_formulation:utf8`, `node_internal_ids:uint64[4]`, `shell_section_internal_id:uint64`, `material_internal_id:uint64` | internal element ID ascending; connectivity in exact source order; source type `S4|S4R`; formulation `FESA-MITC4` |
| `/model/shell/nodal_director` | `[node_count,3]` float64 | `/model/nodes` row | dimensionless global components; unit norm within `1e-12` frame check |
| `/model/shell/nodal_frame` | `[node_count,3,3]` float64 | `/model/nodes` row, axis row `[a,b,d]`, global component column | dimensionless; right-handed and orthonormal |
| `/model/shell/materials` | `[material_count]` compound | `internal_material_id`, raw `name`, `E`, `nu` | stable declaration order; units `[force/length^2,1]` |
| `/model/shell/sections` | `[section_count]` compound | `internal_section_id`, source keyword file/line identity, source ELSET, `material_internal_id`, `thickness` | stable declaration order; centered single layer; thickness unit `length` |
| `/model/nodal_constraint_mask` | `[node_count,6]` uint8 | node row and global DOF order | `0=free`, `1=constrained`; existing HDF5 component names `[UX,UY,UZ,URX,URY,URZ]` |
| `/model/prescribed_displacement` | `[node_count,6]` float64 | same row/component order | constrained entry is prescribed value; free entry is exact zero with mask as authority |
| `/model/shell/midsurface_locations` | `[4,2]` float64 | `location_index` implicit row 1..4; columns `[xi,eta]` | exact order in Section 6.3; dimensionless |
| `/model/shell/section_positions` | `[3]` float64 | rows `BOTTOM,MIDDLE,TOP`; value is `zeta` | exact values `[-1,0,+1]`; physical `z=t*zeta/2` |
The optional source shell-section integration-point field is not written as a
physical model property. Exact source bytes remain auditable through
`source_input_identity`.
### 6.3 Fixed shell location ordering
Let `g=1/sqrt(3)`. Every shell result with a four-location axis uses:
| location index | name | `(xi,eta)` |
| ---: | --- | --- |
| 1 | `GP1` | `(-g,-g)` |
| 2 | `GP2` | `(+g,-g)` |
| 3 | `GP3` | `(+g,+g)` |
| 4 | `GP4` | `(-g,+g)` |
Every three-section-position axis uses `BOTTOM(zeta=-1)`, `MIDDLE(zeta=0)`, then
`TOP(zeta=+1)`. Location indices are not Abaqus integration-point numbers and must
not be relabeled as such in a reference comparison.
### 6.4 Step/frame result datasets
All datasets are mandatory after a successful run, independent of Abaqus output
requests.
| quantity | exact dataset path | shape | row identity and component order | units/coordinates/location |
| --- | --- | --- | --- | --- |
| displacement | `/steps/Step-1/frames/0/nodal/displacement` | `[node_count,6]` float64 | `/model/nodes` row; existing HDF5 component names `[UX,UY,UZ,URX,URY,URZ]` | `[length x3,radian x3]`; global; nodal |
| reaction/full residual | `/steps/Step-1/frames/0/nodal/reaction` | `[node_count,6]` float64 | `/model/nodes` row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force x3,force*length x3]`; global; nodal; constrained entry is physical reaction, free entry is residual evidence |
| local frame | `/steps/Step-1/frames/0/element/shell/local_frame` | `[element_count,4,3,3]` float64 | element row, location row, axis row `[e1,e2,e3]`, global component column | dimensionless; location-specific shell local frame |
| generalized strain | `/steps/Step-1/frames/0/element/shell/generalized_strain` | `[element_count,4,8]` float64 | element row, location row; `[E11,E22,G12,K11,K22,K12,G13,G23]` | `[1,1,1,1/length,1/length,1/length,1,1]`; shell local; midsurface location |
| section resultant | `/steps/Step-1/frames/0/element/shell/section_resultant` | `[element_count,4,8]` float64 | element row, location row; `[N11,N22,N12,M11,M22,M12,Q13,Q23]` | `[force/length x3,force x3,force/length x2]`; shell local; midsurface location |
| in-plane stress | `/steps/Step-1/frames/0/element/shell/stress` | `[element_count,4,3,3]` float64 | element row, location row, section-position row, component `[S11,S22,S12]` | `force/length^2`; shell local; direct bottom/middle/top evaluation |
| energy | `/steps/Step-1/frames/0/global/energy` | `[1]` float64 | `[PHYSICAL_STRAIN_ENERGY]` | `force*length`; deterministic element reduction; excludes numerical drilling stabilization |
| force/moment balance | `/steps/Step-1/frames/0/global/equilibrium` | `[6]` float64 | `[FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]` | `[force x3,force*length x3]`; global; moment reference point is global origin `[0,0,0]` |
| verification metrics | `/steps/Step-1/frames/0/global/verification_metrics` | `[3]` float64 | `[FREE_RESIDUAL_NORMALIZED,FORCE_BALANCE_NORMALIZED,MOMENT_BALANCE_NORMALIZED]` | dimensionless; metric-definition IDs and thresholds required as attributes |
| diagnostics | `/diagnostics` | `[diagnostic_count]` compound | `severity`, `code`, `file`, `line`, `keyword`, `entity_identity`, `message` | deterministic order; required empty dataset when count is zero |
`S33=0` is a plane-stress assumption and is not emitted. `S13`, `S23`, physical
drilling stress/resultant, and nodally extrapolated/averaged shell stress are not
created. Transverse shear is externally represented through `Q13/Q23`.
Each numeric result dataset has required attributes `component_names`,
`component_unit_dimensions`, `coordinate_system`, `location`, `step_name=Step-1`,
and `frame_index=0`. Shell element results additionally identify their source
element type, internal formulation, midsurface-location dataset, section-position
dataset when applicable, and local-frame dataset.
Verification-metric definitions and thresholds follow the approved formulation and
requirements; they are not reference-bundle metadata.
### 6.5 Reaction, residual, equilibrium, and energy meaning
`nodal/reaction` stores the assembled full residual `K*d-F`; a duplicate nodal
residual dataset is not written. `/model/nodal_constraint_mask` controls meaning:
- constrained entry: physical reaction;
- free entry: equation-equilibrium residual evidence.
Global force/moment balance uses applied `CLOAD` plus constrained reaction about
the global origin. Free residual entries remain separate evidence and are not added
as physical reactions. The energy dataset contains only physical shell strain energy;
no drilling energy or drilling-to-physical ratio is written.
### 6.6 Atomic finalization
The writer creates a temporary candidate in the final output directory, writes every
mandatory group/dataset/attribute, validates finite values, shape, identity, and
ordering, flushes, closes, reopens read-only, and self-checks the schema. Only then
may it atomically replace/create the requested final path. A failure preserves any
previous valid final output when possible, removes or quarantines the non-authority
candidate, emits an output diagnostic, and returns exit code `6`.
## 7. FESA HDF5 to Reference CSV Comparison Schema
Authoritative comparison reads `results.h5` and read-only Abaqus CSV artifacts.
A deterministic FESA CSV projection is a debugging/review view only; it is neither
solver output nor a reference artifact.
### 7.1 S4/S4R case separation
- S4 and S4R use their existing distinct input and displacement CSV paths.
- FESA maps both source types to `FESA-MITC4`, but Abaqus S4 and S4R values are not
expected to equal each other on a finite mesh.
- Reference comparison always compares one FESA run with Abaqus rows generated from
the same source model/type.
- Equality of FESA internal numerical rows after changing only source type is a
separate implementation test, not an Abaqus S4-versus-S4R comparison.
### 7.2 Declared S4 case
The blocking S4 case uses:
| role | exact path | SHA-256 | observed inventory |
| --- | --- | --- | --- |
| input | `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` | `TYPE=S4`; declared comparison input |
| displacement | `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` | 49 finite data rows; U and UR columns |
The files must not be renamed, rewritten, zero-clamped, normalized, or repaired.
The reaction and stress CSV files in the same directory are optional review evidence
and are not comparison inputs.
### 7.3 Declared S4R case
The blocking S4R case uses:
| role | exact path | SHA-256 | observed inventory |
| --- | --- | --- | --- |
| input | `reference/shellR/shellR.inp` | `1325940FB42B78961CF25E84379BF2693846FAD22473E7688AC5456B37B18CB4` | `TYPE=S4R`; declared comparison input |
| displacement | `reference/shellR/shellR displacements.csv` | `8887ACC5ED007CB97583A9FDC1150B48B9297E269A5BA8EBA6C1A5F6306E98CB` | 49 finite data rows; U and UR columns |
These files follow the same immutability rule. The reaction and stress CSV files in
the directory are optional review evidence and are not comparison inputs. No README,
`metadata.json`, canonical name, legacy alias, provenance record, or duplicated model
description is required for either case.
### 7.4 Displacement header mapping
After trimming header whitespace, both declared displacement CSVs use:
| CSV column | comparison field/component | FESA HDF5 source |
| --- | --- | --- |
| `Part Instance Name` | `instance_name` | `/model/nodes.instance_name` |
| `Node Label` | `source_node_label` | `/model/nodes.source_label` |
| `U-U1` | displacement `U1` | `nodal/displacement` column 0, HDF5 component `UX` |
| `U-U2` | displacement `U2` | `nodal/displacement` column 1, HDF5 component `UY` |
| `U-U3` | displacement `U3` | `nodal/displacement` column 2, HDF5 component `UZ` |
| `UR-UR1` | displacement `UR1` | `nodal/displacement` column 3, HDF5 component `URX` |
| `UR-UR2` | displacement `UR2` | `nodal/displacement` column 4, HDF5 component `URY` |
| `UR-UR3` | displacement `UR3` | `nodal/displacement` column 5, HDF5 component `URZ` |
Reaction and stress CSVs do not enter MITC4 pass/fail. No row is synthesized from
those optional files.
### 7.5 Normalized comparison row
CSV and HDF5 displacement rows normalize in memory to:
```text
case_id, instance_name, source_node_label, component, value, hdf5_dataset_path
```
The unique key is `(case_id,instance_name,source_node_label,component)`. Stable
ordering is case, instance declaration order, stable source node order, then component order
`[U1,U2,U3,UR1,UR2,UR3]`.
### 7.6 Row-set precheck and comparison policy
Before tolerance evaluation:
1. Verify the declared input and displacement CSV path exists without mutating it.
2. Verify the trimmed displacement headers in Section 7.4.
3. Verify finite values, unique row keys, and exact source node/instance identities.
4. Project HDF5 and reference to the same six-component displacement inventory.
5. Fail on any missing, extra, duplicate, nonfinite, header-mismatched, or
identity-mismatched projected row.
Only `U1/U2/U3` affect pass/fail. `UR1/UR2/UR3` are always compared and reported but
can emit only an approved deterministic nonblocking warning.
For each model, step/frame, quantity, and component group:
```text
reference_scale_c = max(abs(reference_value_i))
row_tolerance_c = 1e-9 + 1e-6 * reference_scale_c
row_pass = abs(fesa_value-reference_value) <= row_tolerance_c
```
Reference scale uses finite Abaqus values only. A zero scale makes the relative term
zero. No reference or result value is zero-clamped and no row-specific relative
denominator replaces the component scale. The formula is the approved B33 rule:
the `1e-9` floor is in the user-consistent length unit for U and dimensionless for UR.
U exceedance fails; UR exceedance emits a deterministic warning only.
The report records every U/UR row, blocking/nonblocking decision, absolute error,
component-scale normalized error, RMS error, displacement/rotation vector-norm
error, worst source row/component, and every UR warning.
## 8. CLI and Diagnostics Contract
```powershell
fesa.exe <model.inp> --output <results.h5>
```
Omitting `--output` uses `results.h5` in the current directory. Unknown option,
missing input, missing output argument, or repeated `--output` is usage failure.
| exit code | meaning |
| ---: | --- |
| `0` | successful analysis and authoritative HDF5 finalization |
| `2` | CLI usage error |
| `3` | input syntax or semantic mapping error, including unsupported keyword, formulation, wrapper, step, or distributed load |
| `4` | model validation error, including section/material property, geometry, director, Jacobian, or drilling-direction aggregate moment |
| `5` | factorization or substitution error |
| `6` | HDF5 write, schema validation, or atomic finalization error |
Each stderr and HDF5 diagnostic has exact field order `severity`, `code`, `file`,
`line`, `keyword`, `entity_identity`, `message`. Source-backed records carry
normalized file and 1-based line; source-less solver/output records use explicit
empty source fields. Order is source declaration order, file line, stable entity ID,
diagnostic code, then discovery order for an otherwise equal key.
The approved shell-specific diagnostic inventory includes:
| code | class/exit | meaning |
| --- | --- | --- |
| `unsupported-element-formulation` | input/3 | element type is not S4/S4R in this feature |
| `unsupported-mixed-element-model` | input/3 | shell and non-shell element/joint semantics are mixed |
| `invalid-shell-connectivity` | input/3 | connectivity arity is not four, a node repeats, or a connected source node is unresolved |
| `unresolved-shell-section` | input/3 | section/material/ELSET reference is unresolved |
| `invalid-shell-section-assignment` | input/3 | an element resolves to zero or multiple shell sections |
| `unsupported-shell-section-option` | input/3 | composite, offset, orientation, variable thickness, or other excluded meaning appears |
| `invalid-shell-thickness` | model/4 | thickness is nonfinite or nonpositive |
| `invalid-shell-material` | model/4 | isotropic material violates finite `E,nu` bounds |
| `invalid-shell-geometry` | model/4 | duplicate, self-intersecting, zero-area, reversed, or nonfinite surface geometry |
| `opposed-incident-normal` | model/4 | an incident normal pair has nonpositive dot product before averaging |
| `invalid-shell-director` | model/4 | candidate, average, interpolation, or tangent-frame construction is invalid |
| `invalid-shell-jacobian` | model/4 | a required point has nonfinite/nonpositive `J` or nonfinite basis data |
| `unsupported-drilling-load` | model/4 | nonzero aggregate moment violates `rho_M<=1e-12` |
| `unsupported-distributed-load` | input/3 | DLOAD, pressure, gravity, body/edge/follower load is requested |
The accepted optional `*SHELL SECTION` integration-point field emits no diagnostic.
Allowlisted `*PREPRINT`, `*RESTART`, and output-request no-ops retain their existing
warning behavior.
## 9. Validation Rules
| validation area | required pass condition | failure class |
| --- | --- | --- |
| keyword inventory | supported or exact allowlisted no-op | input, exit 3 |
| nesting/cardinality | closed part/assembly/instance/step; one assembly and one static step | input, exit 3 |
| source identity | duplicates absent; all references resolved; multi-instance identity unique | input, exit 3 |
| element syntax/semantics | only four-node S4/S4R, distinct resolved connectivity, internal FESA-MITC4, no mixed element model | input, exit 3 |
| resolved element geometry | source order, finite nonzero area, topology and positive-Jacobian predicates pass | model, exit 4 |
| material/section syntax | exact row grammar, resolvable references, exactly one centered homogeneous assignment per element | input, exit 3 |
| material/section values | finite approved `E,nu,t` bounds | model, exit 4 |
| director/geometry | deterministic pairwise orientation, average and frame construction pass | model, exit 4 |
| boundary/load syntax | global DOF 1..6, resolved finite values, no conflicting prescribed values | input, exit 3 |
| aggregate nodal moment | exact-zero case or nonzero `rho_M<=1e-12` | model, exit 4 |
| history | sole static Step-1/frame 0, NLGEOM disabled | input, exit 3 |
| HDF5 model | exact paths, dtypes, shapes, IDs, source types, directors, sections, and finite values | output, exit 6 |
| HDF5 results | every mandatory row/location/component exists in stable order and is finite | output, exit 6 |
| S4 case | exact declared input/displacement paths and unique finite U/UR rows | reference precheck |
| S4R case | exact declared input/displacement paths and unique finite U/UR rows | reference precheck |
| comparison | exact normalized row-set; U blocking; UR warning-only; approved tolerance | reference verification |
No successful parser/HDF5 implementation, numerical solution, reference comparison,
physics review, or release status follows from approval of this document alone.
## 10. Requirement Traceability
| requirement group | I/O contract coverage | remaining owner |
| --- | --- | --- |
| `001-004`, `021-023`, `030`, `037` | exact step, S4/S4R mapping, source/internal identity, wrapper and no-op policies | Implementation Planning tests |
| `005-010` | six global DOFs, isotropic ELASTIC, single-row SHELL SECTION, exact assignment | Implementation Planning tests |
| `011-016` | auto-director semantic mapping, basic geometry predicates and fail-closed diagnostics | Implementation Planning tests |
| `017-020` | BOUNDARY/CLOAD grammar, deterministic aggregation, `rho_M<=1e-12`, distributed-load rejection | Implementation Planning tests |
| `024-029` | Domain/AnalysisModel/DofManager/AnalysisState semantic ownership and residual meaning | Implementation Planning |
| `031-038` | source-independent MITC4 identity, fixed drilling stabilization and full-integration policy; no drilling output | Implementation Planning tests |
| `039-048` | additive HDF5 v0 paths, mandatory quantities, location identity, atomic output | Reference Model and Implementation Planning |
| `049-057` | diagnostic/schema hooks and required verification-metric/physical-energy evidence | Numerical Review and planning |
| `058-064` | normalized U/UR rows, exact B33 tolerance, blocking/warning behavior, report inventory | Reference Verification |
| `065-072` | exact current S4/S4R paths, immutability and displacement-only gate | Reference Model |
## 11. Open Issues and Downstream Handoff
### 11.1 Numerical Review boundary
No I/O-owned calibration value remains open. Numerical Review shall verify the exact
fixed drilling rule, basic geometry predicates, required HDF5 inventory, and B33
tolerance mapping. Drilling calibration/energy output, `NR-O03`, `NR-O04`, bundle
administration and reference-portfolio expansion are removed scope.
### 11.2 Reference Model Agent
- Write `docs/reference-models/linear-static-mitc4-shell-reference-models.md` using
this exact keyword/HDF5/reference-row contract.
- Record only the two exact existing input/displacement pairs, comparison components,
HDF5 projection, source-row identity, B33 tolerance and immutability rule.
- Treat reaction/stress artifacts as nonblocking review evidence and do not create
location-equivalence claims absent from this contract.
### 11.3 Numerical Review Agent
- Confirm cross-document numerical consistency and rerun the gate before authorizing
Implementation Planning.
### 11.4 Implementation Planning Agent
- Planning is authorized by the numerical review; implementation and Harness execution
remain separately unauthorized until explicitly requested.
- After approval, convert every supported/unsupported keyword row, source identity,
geometry/director error, drilling-load projection, exact HDF5 path/shape/order,
atomic failure, source-row normalization, and U-versus-UR decision into
`RED -> GREEN -> VERIFY` tests.
- Use the project Harness skill to draft multiple self-contained Steps and obtain user
approval before creating phase-planning files. Do not run the executor without a
separate explicit request.
- Keep distributed loads, mixed beam-shell models, Abaqus reduced integration,
nonlinear state/tangent, and reference artifact mutation outside the plan.
### 11.5 Reference Verification Agent
- Enforce artifact/schema precheck before numeric tolerance.
- Match HDF5 and Abaqus rows only by the normalized identity in Section 7.5.
- Never ignore missing/extra/nonfinite rows, synthesize S33/S13/S23, average location
mismatches, or let UR warnings change U pass/fail.
+6 -4
View File
@@ -32,12 +32,12 @@ Numerical Review Agent는 정식화의 수학적 일관성, 수치 안정성 위
## Metadata
- feature_id: <feature-id>
- source_formulation: docs/formulations/<feature-id>-formulation.md
- status: pass-for-implementation-planning | needs-formulation-revision | needs-research | needs-reference-model | blocked
- status: pass-for-implementation-planning | needs-formulation-revision | needs-research | blocked
- owner_agent: numerical-review-agent
- date: <YYYY-MM-DD>
## Review Verdict
- verdict: pass-for-implementation-planning | needs-formulation-revision | needs-research | needs-reference-model | blocked
- verdict: pass-for-implementation-planning | needs-formulation-revision | needs-research | blocked
- reason: <판정 이유>
## Critical Findings
@@ -82,7 +82,7 @@ Numerical Review Agent는 정식화의 수학적 일관성, 수치 안정성 위
- <연구 보강 지시>
### Reference Model Agent
- <reference model 또는 artifact 요구사항>
- <optional downstream test note; not a formulation blocker>
## Downstream Handoff
@@ -99,4 +99,6 @@ Numerical Review Agent는 정식화의 수학적 일관성, 수치 안정성 위
- `pass-for-implementation-planning`은 구현 계획으로 넘겨도 된다는 뜻이며 기능 완료나 release 승인이 아니다.
- 정식화 문서를 직접 수정하지 않고 필요한 수정을 명확히 지시해야 한다.
- 모든 검토는 dimension, sign, DOF ordering, coordinate transform, Jacobian, integration weight, element equation, output recovery를 포함해야 한다.
- numerical risk는 rigid body modes, patch test, symmetry, positive definiteness, hourglass, locking, singular Jacobian, conditioning을 포함해야 한다.
- numerical risk는 approved feature scope가 요구하는 항목만 포함한다. 이후 Reference Model
문서, canonical naming, README, metadata, provenance, expanded portfolio 또는 아직 없는
comparison result는 formulation verdict의 blocker가 아니다.
@@ -0,0 +1,346 @@
# Linear Static MITC4 Shell Numerical Review
## Metadata
- feature_id: `linear-static-mitc4-shell`
- source_formulation: `docs/formulations/mitc4-shell-formulation.md`
- source_requirements: `docs/requirements/linear-static-mitc4-shell.md`
- source_research: `docs/research/linear-static-mitc4-shell-research.md`
- source_io_definition: `docs/io-definitions/linear-static-mitc4-shell-io.md`
- source_reference_inventory: `docs/reference-models/linear-static-mitc4-shell-reference-models.md`
- repository_policy: `AGENTS.md`, `docs/ADR.md`, `docs/ARCHITECTURE.md`,
`docs/SOLVER_AGENT_DESIGN.md`
- reviewed_revisions: `73df844`, `22a3238`
- status: `pass-for-implementation-planning`
- owner_agent: `numerical-review-agent`
- date: `2026-08-12`
- implementation_planning_authorized: `true`
- implementation_complete: `false`
- reference_comparison_complete: `false`
## Review Verdict
- verdict: `pass-for-implementation-planning`
- reason: The current linear-static formulation closes the physical 20-DOF MITC4
kernel, its global 24-DOF embedding, fixed drilling regularization, Jacobian and
quadrature rules, residual/stiffness equations, recovery signs, and verification
invariants without a mathematical inconsistency in the approved feature scope.
- critical_blockers: `none`
- remaining_formulation_revisions: `none for the current linear-static scope`
- downstream_boundary: Implementation Planning may begin. This verdict does not
claim implementation, build/test, reference-comparison, physics-sanity, or release
completion.
The future geometrically nonlinear material in Formulation Section 15 remains
explicitly non-executable. Its unresolved global finite-rotation map and objective
drilling potential do not block the current linear-static implementation plan.
## Critical Findings
No confirmed mathematical defect remains in the approved linear-static formulation.
The previous review's `needs-reference-model` verdict is not a valid current
formulation verdict: the current numerical-review gate is based on numerical and
formulation consistency, while downstream artifact administration and comparison
execution are separate gates.
### 1. Previous finding disposition
| previous item | current disposition | evidence and strict consequence |
| --- | --- | --- |
| `NR-C01` Jacobian/geometry inventory | resolved | Formulation Sections 9.2-9.3 enumerate center, stiffness, tying, and recovery locations and require finite bases, nonzero area, and `J>0`; Requirements 014/016 intentionally define no calibrated smooth-angle, distortion, or warp threshold. |
| `NR-C02` drilling normalization | resolved | Formulation Section 12.2 and Requirements 033-036 now define one exact dimensional rule using only positive physical tangent-rotation diagonals. No calibration decision remains. |
| `NR-C03` mixed-DOF algebraic scaling | resolved | Formulation Sections 12.3 and 12.5 define physical length scaling separately from the physical/drilling stiffness split and provide normalized rank, symmetry, and rigid-action evidence. |
| `NR-C04` 20/24-DOF weak-form mismatch | resolved | Formulation Sections 5.2-5.3 and 7.1-7.2 place physical, drilling, and external work in the common global 24-DOF test space using the required transpose maps. |
| `NR-C05` nonlinear global tangent closure | resolved for current scope | Formulation Section 15 now labels the nonlinear equations non-executable and identifies the missing nonlinear `Phi` map, map Hessian, and objective drilling potential. Those items block only a future nonlinear feature. |
| `NR-D01` drilling-direction nodal moment | retained/resolved | The exact-zero branch and `rho_M=|d dot M|/||M|| <= 1e-12` rule are consistent in Formulation Section 6.2 and I/O Section 4.3. |
| `NR-D02` normalized algebraic checks | retained/resolved | Formulation Section 17.1 defines scale-aware symmetry, rigid-action, frame, transformation-energy, residual, and equilibrium checks without a denominator clamp. |
| `NR-O01` drilling coefficient/plateau | resolved by approved fixed rule | `k_d=10^-3 min(R+)` replaces the former coefficient-family/sweep question. A sweep, plateau, response sensitivity, or condition-number calibration is not an acceptance gate. |
| `NR-O02` drilling-energy warning | removed from approved scope | Drilling is an internal numerical potential only. No drilling-energy ratio, warning threshold, or drilling-specific output is required. |
| `NR-O03` smooth-director angle | removed from approved scope | Requirements 014/054 and Formulation Sections 4.2 and 9.3 use exact orientation/finite/nonzero predicates and explicitly remove `NR-O03`. It is not an open numerical decision. |
| `NR-O04` distortion/warp calibration | removed from approved scope | Requirements 016/054 and Formulation Sections 9.2-9.3 require exact finite/positive validity checks and explicitly remove `NR-O04`. It is not an open numerical decision. |
| `NR-O05` U/UR tolerance | resolved | Requirements 058-062, Formulation Section 17.5, I/O Section 7.6, and Reference Case Section 5 all use the exact approved B33 component-scale formula. |
### 2. Required policy classifications
#### 2.1 Fixed drilling rule — resolved and implementation-ready
Let `R+` contain only the finite, strictly positive diagonal entries of the physical
local stiffness `K20` associated with the eight director-tangent rotational DOFs.
The formulation fixes
```text
k_ref = min(R+)
k_d = 1e-3 * k_ref
K_drill_local = k_d * I4
K_drill_24 = T_d^T * K_drill_local * T_d
```
All entries in `R+` have rotational-stiffness dimension `force*length`; translations,
off-diagonals, nonpositive values, and nonfinite values are excluded. Therefore
`k_d` has the correct dimension, `K_drill_24` is symmetric positive on the four pure
drilling coordinates, and the physical and drilling channels are algebraically
separate. An empty `R+` is a deterministic numerical-validation failure. This is a
complete algorithm contract, not a calibration placeholder.
The deterministic nodal frames fix the local-coordinate representation, and
Formulation Section 5.3 supplies the virtual-work/energy congruence used by the
coordinate-transformation check. No unselected drilling coefficient or family
remains for Implementation Planning.
#### 2.2 No drilling outputs — resolved and consistent
Formulation Sections 7.2, 12.3, 12.5, 14, and 17.4 keep drilling out of physical
strain, resultant, stress, and reported physical shell energy. The internal identity
`E_drill = 0.5 gamma^T K_drill_local gamma` is permissible verification algebra; it
does not create an external result quantity. Requirements 035/036/046 and I/O
Sections 6.1/6.4/6.5 consistently require no drilling coefficient, stiffness, ratio,
or energy dataset. There is no output-contract defect.
#### 2.3 Exact B33 U/UR tolerance — resolved
For each case and component `c`, using only finite Abaqus rows,
```text
reference_scale_c = max(abs(reference_value_i))
tolerance_c = 1e-9 + 1e-6 * reference_scale_c
```
The `1e-9` floor is in the model's user-consistent length unit for `U1/U2/U3` and is
dimensionless for `UR1/UR2/UR3`. No row is zero-clamped and no row-specific relative
denominator replaces the component scale. `U1/U2/U3` exceedance is blocking at the
later Reference Verification gate; `UR1/UR2/UR3` uses the same formula but is
warning-only. The formula is exact and needs no MITC4-specific calibration.
#### 2.4 Removed and administrative items — nonblocking
`NR-O03`, `NR-O04`, drilling sweeps, drilling-energy criteria, and expanded flat,
thin/thick, distorted, warped, curved-shell, or mesh-convergence portfolios are not
part of the approved implementation-planning gate. They may remain future research
or release evidence but shall not be reintroduced as missing numerical evidence.
Canonical reference naming, a bundle README, `metadata.json`, provenance, an Abaqus
version, duplicated units/coordinates/model/step/frame descriptions, or a schema
version are administrative information and cannot block this formulation verdict.
The absence of optional `metadata.json` is therefore not a defect. If such a file is
added later, it remains read-only context and cannot override the approved exact
paths, row mapping, or tolerance.
## Numerical Risk Assessment
| risk | current assessment | required in-scope control |
| --- | --- | --- |
| Transverse-shear locking | controlled for the original MITC4 scope, not claimed eliminated for every mesh | Use the exact edge-midpoint covariant shear projection of Sections 10.2-10.4 and pass transverse-shear patch/reference checks. |
| Curved/distorted-mesh membrane locking | known limitation of the original MITC4 family | Preserve the documented limitation. An expanded convergence portfolio is nonblocking and does not authorize MITC4+. |
| Volumetric locking | not applicable to the approved plane-stress shell contract | Do not reinterpret `C5` as a full 3D nearly incompressible material law. |
| Hourglass modes | no reduced-integration/hourglass path is approved | Both source `S4` and `S4R` use the same full `2x2x2` FESA integration and MITC tying path. |
| Degenerate, inverted, or self-intersecting geometry | fail-closed contract is present | Enforce distinct connectivity, non-self-intersection, finite nonzero surface measure, finite reciprocal bases, and `J>0` at every required location. |
| Near-singular but still positive geometry | conditioning may degrade because no calibrated quality threshold is in scope | Preserve finite checks and deterministic solver failure diagnostics; do not invent `NR-O04` thresholds. |
| Opposed or invalid nodal directors | would corrupt frames, signs, and tying | Reject nonfinite/zero candidates, nonpositive incident-normal agreement, and nonfinite/zero averages; use duplicate source nodes for folds. |
| Drilling singularity | four nonphysical modes would remain without regularization | Apply the exact fixed `R+` rule and verify stabilized nullity six. |
| Drilling contamination of physics | possible if drill enters the physical operator or recovery | Keep `T_p` and `T_d` separate and verify pure drill has zero physical strain/resultant/stress and no physical energy contribution. |
| Rigid-mode test contamination | a full spatial rotation vector can contain director-parallel rotation | Construct physical rigid rotation with `u_I=omega x X_I`, `delta d_I=omega x d_I`, and `gamma_I=0` as specified in Section 8.3. |
| Wrong shear component/factor | would cause patch failure or incorrect shear energy | Keep the `xi-zeta`/`eta-zeta` tying pairs and engineering factor `gamma_ij=2 epsilon_ij` explicit. |
| Recovery sign/location drift | could hide a correct stiffness behind wrong outputs | Reuse stiffness frames, tying, material, and thickness quadrature; preserve four Gauss identities and bottom/middle/top positions without averaging. |
| Future nonlinear misuse | current Section 15 does not define a complete global nonlinear element | Keep it non-executable until a separate approved nonlinear formulation closes `Phi`, map curvature, objective drill, load work, and state. |
## Consistency Checks
### 1. DOF order, director sign, and coordinate transforms — pass
- Global order is exactly `[UX,UY,UZ,URX,URY,URZ]` per node.
- `R_I=[a_I b_I d_I]` is right-handed and orthonormal, with
`[alpha,beta,gamma]^T=R_I^T theta_I^g`.
- The director variation `delta d_I=beta_I a_I-alpha_I b_I` has the correct sign for
`theta_I x d_I`.
- `T_p` is `20x24`; `T_d` is `4x24`. The physical operator receives only `q20`, and
the drilling potential receives only `gamma`.
- The transpose maps in Formulation Sections 5.3 and 7.2 preserve virtual work and
energy in the common 24-DOF space.
### 2. Shape functions, geometry, and B operator — pass
- The bilinear shape functions satisfy partition of unity, nodal interpolation, and
derivative-sum identities.
- The degenerated geometry uses a dimensionless unit director and separate thickness
factor `t*zeta/2`, avoiding thickness double-counting.
- The direct covariant strain column is the symmetric gradient written in covariant
bases. The two transverse covariant shear components alone are replaced by the
canonical MITC4 edge-midpoint interpolation.
- Reconstructing with reciprocal bases before local projection preserves the tensor
meaning. Engineering shear factors are applied once in the local five-component
vector.
- The same projected `B_bar` is used in strain, residual, stiffness, and recovery;
no direct/tied shear mismatch remains.
### 3. Constitutive matrix and dimensional consistency — pass
- For finite `E>0` and `-1<nu<0.5`, the plane-stress block and
`kappa_s G I2`, with `kappa_s=5/6`, are symmetric positive definite.
- `B_bar^T C5 B_bar J dxi deta dzeta` has stiffness-consistent dimensions because
the geometry Jacobian contains the through-thickness scale.
- Membrane/shear strain is dimensionless, curvature is `1/length`, `N/Q` is
`force/length`, `M` is `force`, stress is `force/length^2`, and physical energy is
`force*length`.
- The drilling reference uses rotational stiffness only, so no translation/rotation
unit mixing occurs.
### 4. Integration, residual, stiffness, and modes — pass
- Stiffness uses deterministic two-point Gauss quadrature in each of `xi`, `eta`, and
`zeta`, with points `+-1/sqrt(3)` and unit weights.
- Both source types select this one rule; FESA does not emulate Abaqus S4/S4R internal
integration or hourglass behavior.
- `K20 = integral(B_bar^T C5 B_bar dV)` is symmetric positive semidefinite. The
expected physical rank is 14: 20 physical coordinates minus six rigid modes.
- `Kphys24=T_p^T K20 T_p` adds four drilling null coordinates. The fixed positive
drilling block removes those four, leaving exactly six physical rigid modes.
- `f_int=K_e q_g` and `r=K d-F` use a consistent linear sign. Partitioning uses
`Kff df=Ff-Kfc dc`, including the valid `0x0 Kff` all-constrained case.
### 5. Recovery and external result meaning — pass
- Nodal reactions are constrained entries of the assembled full residual; free
entries remain equilibrium evidence.
- Generalized strains are thickness moments with order
`[E11,E22,G12,K11,K22,K12,G13,G23]`.
- Resultants use `[N11,N22,N12,M11,M22,M12,Q13,Q23]` and the stated centered-layer
`A/D/A_s` cross-check.
- Bottom/middle/top `[S11,S22,S12]` are direct section-position evaluations. `S33=0`
is documented but not emitted, and `S13/S23` point stress is outside the output
contract.
- Physical shell energy excludes numerical drilling stabilization, matching the I/O
schema.
### 6. Architecture and deterministic lifecycle — pass for planning
The formulation and I/O handoff match ADR-007/008/009/016/017 and the architecture:
stable element-local computation, deterministic COO/reduction, stiffness assembly
and partition before load assembly, factorization before substitution, full residual
recovery, stable row identity, and failure-atomic HDF5 commit. These are planning and
later implementation-test obligations, not unresolved equations.
## Verification Readiness
### Required element and algebraic tests
Implementation Planning shall trace RED/GREEN/VERIFY tests for:
1. shape-function identities and deterministic right-handed nodal/integration frames;
2. valid and invalid geometry at every center, Gauss, tying, and recovery location;
3. `T_p`/`T_d` dimensions, virtual-work equality, and transformation-energy equality;
4. direct versus tied shear component construction and engineering-shear factors;
5. constitutive symmetry/positive definiteness and exact `2x2x2` quadrature;
6. normalized symmetry at `1e-12`, rigid action at `1e-10`, physical rank 14, and
stabilized rank 18/nullity six;
7. exact `R+`, `k_ref`, `k_d`, and `K_drill_local` construction, including empty-`R+`
failure and exclusion of translational diagonals;
8. pure drilling: positive drill action, zero physical strain/resultant/stress, and
no drilling-specific output;
9. deterministic assembly/recovery ordering and thread-count repeatability;
10. partition/effective-RHS/full-residual reaction behavior, including all-constrained
`0x0 Kff` handling.
For a nonzero scaled stiffness, use the formulation's normalized metrics without a
fallback denominator. Exactly zero constructed energy cases are classified by their
separate rigid/null action tests rather than clamped to pass.
### Required patch and sign tests
- constant membrane strain/stress and `N` sign;
- pure bending about both local axes, curvature/moment order, and bottom/top stress sign;
- constant transverse shear and `Q13/Q23` order;
- pure twist and `K12/M12` convention;
- zero physical recovery from a pure drilling vector.
### Declared reference readiness
The lightweight inventory identifies these read-only required pairs:
- `reference/shell/shell.inp` and
`reference/shell/shell displacements.csv` for source `S4`;
- `reference/shellR/shellR.inp` and
`reference/shellR/shellR displacements.csv` for source `S4R`.
Read-only inspection confirmed that all four declared files exist, their SHA-256
values match the Reference Case inventory, and each required displacement CSV has
49 data rows. This is inventory evidence only. No FESA output exists yet in this
review, and no reference-comparison pass/fail decision was made.
The later comparator must require exact normalized source-row/component sets,
finite/unique values, U blocking, UR warning-only, and the approved mixed tolerance.
The two Abaqus cases are not expected to equal one another, while identical supported
FESA models labeled S4 or S4R must take the same internal numerical path.
### Nonblocking evidence
The following cannot change this formulation verdict:
- absent README, `metadata.json`, provenance, canonical name, schema-version record,
or duplicated bundle descriptions;
- no coefficient sweep, drilling-energy ratio, smooth-angle calibration, or
distortion/warp threshold sweep;
- no expanded flat/thin/thick/distorted/warped/curved/convergence benchmark portfolio;
- no implementation result, build/test result, Abaqus run, or completed comparison
at this pre-implementation gate.
## Required Revisions
### Formulation Agent
- None for the approved current linear-static implementation scope.
- Keep Formulation Section 15 non-executable until a separately approved nonlinear
feature closes its global coordinate map, consistent tangent, objective drilling,
and load-work decisions.
### Research Agent
- None before current Implementation Planning.
- Broader original-MITC4 locking and convergence studies remain optional future
characterization and must not silently widen the implementation gate.
### Reference Model Agent
- None for this formulation verdict. Preserve the four declared artifacts read-only.
- Optional administrative metadata, if later added by an authorized phase, does not
replace the approved exact paths, matching, and tolerance contract.
## Downstream Handoff
### Implementation Planning Agent
Implementation Planning is authorized. The plan shall:
- cover the deterministic director/frame preprocessing, `24 -> 20 + 4` transforms,
covariant MITC tying, full `2x2x2` integration, fixed drilling split, and recovery;
- trace every approved must-requirement to TDD tests, including the invariant, patch,
fixed-drilling, failure, schema, row-matching, and U/UR decision behaviors above;
- preserve one internal `FESA-MITC4` numerical path for source S4 and S4R while keeping
source metadata distinct;
- keep drilling out of physical recovery and HDF5 results;
- exclude future nonlinear execution, calibration sweeps, removed `NR-O03/NR-O04`,
expanded portfolios, and administrative reference requirements.
This handoff authorizes planning only. It does not authorize Harness execution,
production-code changes, reference-artifact mutation, or a claim of implementation
completion.
### I/O Definition Agent
The current I/O contract is numerically consistent with the formulation. Planning
shall preserve its exact source identity, load projection, output units/locations,
physical-energy meaning, reference row mapping, and U/UR decision rule.
### Reference Verification and Physics Evaluation Agents
These remain downstream of implementation and build/test. Reference Verification
will decide U/UR comparison outcomes; Physics Evaluation will independently assess
equilibrium, signs, symmetry, and physical plausibility. Neither result is asserted
by this review.
## Review Evidence
This review used the repository policy/design files, the approved requirements,
research, formulation, I/O definition and reference-case inventory listed in
Metadata, plus read-only inspection of the four declared artifacts. Local FEM wiki
material cross-checked MITC4 kinematics, edge-midpoint assumed shear and known locking
risks; the approved repository documents remain the feature source of truth.
+6 -7
View File
@@ -40,7 +40,7 @@ EVIDENCE CHECK -> PHYSICS CHECKS -> CLASSIFY -> REPORT
- Reference Verification report status가 `pass-for-physics-evaluation`인지 여부
- checked solver HDF5 file: `<solver output directory>/results.h5`
- checked Abaqus reference CSV files under `reference/<model-id>/`
- checked feature-declared Abaqus reference CSV files
- optional FESA deterministic CSV view derived from `results.h5` for review only
- compared quantities
- model purpose
@@ -97,10 +97,7 @@ EVIDENCE CHECK -> PHYSICS CHECKS -> CLASSIFY -> REPORT
| reference_verification | docs/reference-verifications/<feature-id>-reference-verification.md | pass-for-physics-evaluation | <summary> |
| solver_hdf5 | <solver output directory>/results.h5 | present | missing | <summary> |
| solver_csv_views | <solver output directory>/csv/ | present | missing | <summary or N/A> |
| reference_displacements_csv | reference/<model-id>/<model-id>_displacements.csv | present | missing | <summary> |
| reference_reactions_csv | reference/<model-id>/<model-id>_reactions.csv | present | missing | <summary> |
| reference_internalforces_csv | reference/<model-id>/<model-id>_internalforces.csv | present | missing | <summary> |
| reference_stresses_csv | reference/<model-id>/<model-id>_stresses.csv | present | missing | <summary> |
| declared_reference_csv | <exact feature-declared path> | present | missing | <blocking/warning quantity summary> |
| model_purpose | docs/reference-models/<feature-id>-reference-models.md | documented | missing | <summary> |
| physical_expectations | <source docs> | documented | missing | <summary> |
@@ -154,7 +151,7 @@ EVIDENCE CHECK -> PHYSICS CHECKS -> CLASSIFY -> REPORT
- `pass-for-release-agent`: documented physics checks가 통과했고 Release Agent가 release readiness를 평가할 수 있다.
- `needs-correction`: implementation-owned physical failure가 있어 Correction Agent가 필요하다.
- `needs-reference-model`: reference model coverage가 부족하거나 추가 physical expectation이 필요하다.
- `needs-reference-model`: feature-required case 또는 명시적으로 요구된 physical expectation이 누락됐다.
- `needs-formulation-review`: formulation 또는 numerical review 재검토가 필요하다.
- `needs-io-decision`: output location, component naming, sign convention, unit, coordinate mapping이 evaluation을 막는다.
- `needs-upstream-decision`: physical expectation, sign convention, model purpose, acceptance criterion이 누락 또는 충돌한다.
@@ -163,7 +160,9 @@ EVIDENCE CHECK -> PHYSICS CHECKS -> CLASSIFY -> REPORT
## 품질 기준
- Reference Verification report가 `pass-for-physics-evaluation`이 아니면 physics pass를 판정하지 않는다.
- documented expectation이 없는 항목은 pass/fail로 판정하지 않고 `skipped`, `needs-upstream-decision`, 또는 `needs-reference-model`로 둔다.
- documented expectation이 없는 항목은 `skipped`로 두며 expanded portfolio나 calibration을
새 gate로 만들지 않는다. Feature-required expectation 자체가 누락된 경우에만
`needs-upstream-decision` 또는 `needs-reference-model`을 사용한다.
- 평형 검토는 적용 하중, 반력, element/internal force sign convention이 문서화된 경우에만 수행한다.
- stress/strain 검토는 output location, component naming, coordinate system, units가 정의된 경우에만 수행한다.
- FESA `results.h5`, Abaqus reference CSV files, optional FESA debug CSV view는 읽기 전용 evidence로만 사용한다.
+63 -185
View File
@@ -1,213 +1,91 @@
# Reference Model 문서 작성 가이드
# Reference Case 문서 작성 가이드
이 디렉터리는 Reference Model Agent가 작성하거나 제안한 기능별 reference model 설계 문서를 보관하는 위치다.
이 디렉터리는 Reference Model Agent가 작성하는 기능별 lightweight reference-case
inventory를 보관한다. Abaqus는 외부 수치 reference이며 FESA의 formulation 또는 내부
동작 계약이 아니다.
Reference Model Agent는 FESA 기능 검증에 필요한 Abaqus `.inp` 기반 테스트 모델 포트폴리오와 `reference/<model-id>/` artifact bundle 계약을 정의한다. Agent는 Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않고, Abaqus reference CSV 파일을 생성하거나 수정하지 않으며, solver 결과 비교나 release readiness 승인도 하지 않는다.
기본 파일명은 `docs/reference-models/<feature-id>-reference-models.md`다. Agent는 Abaqus
또는 다른 reference solver를 실행하지 않고 `reference/` 파일을 생성, 수정, rename,
repair 또는 normalize하지 않는다.
기본 파일명은 `docs/reference-models/<feature-id>-reference-models.md` 형식을 사용한다. 각 문서는 요구조건, 연구 브리프, 정식화, 수치 리뷰, I/O 정의를 입력으로 받아 구현 전에 준비해야 할 테스트 모델과 reference artifact 요구사항을 정의해야 한다.
## 필수 내용
## Reference Model Agent 역할
기능이 실제로 비교하는 case마다 다음만 기록한다.
수행한다:
- 기능별 reference model portfolio를 smoke, analytical, patch test, benchmark, regression, negative/invalid-input model로 구분한다.
- `model.inp`가 I/O Definition Agent의 supported Abaqus keyword subset 안에 있는지 확인한다.
- `reference/<model-id>/` artifact bundle 구조와 필수 파일을 정의한다.
- `metadata.json` provenance, 단위, 좌표계, Abaqus version/source, output request, tolerance 정책을 정의한다.
- Abaqus reference CSV 파일 요구사항을 정의한다.
- requirement와 model, compared quantity, FESA HDF5 dataset, reference CSV, tolerance, artifact status를 연결하는 Coverage Matrix를 작성한다.
- case id와 목적
- existing `.inp` exact path
- blocking 또는 warning-only quantity의 existing CSV exact path
- FESA HDF5 dataset
- source identity와 component mapping
- missing/extra/duplicate/nonfinite row precheck
- approved tolerance
- artifact presence/readability status
수행하지 않는다:
- C++ 코드를 구현하지 않는다.
- parser를 구현하지 않는다.
- C++ API나 파일 구조를 설계하지 않는다.
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
- Abaqus reference CSV 파일을 생성하거나 수정하지 않는다.
- solver 결과를 비교하지 않는다.
- release readiness를 승인하지 않는다.
- reference 값, tolerance, Abaqus compatibility를 임의로 만들지 않는다.
다음은 기본 readiness 조건이 아니다.
- canonical directory/file naming 또는 legacy-alias 승인
- bundle `README.md` 또는 `metadata.json`
- Abaqus version/generation provenance
- duplicated units, coordinates, model, step/frame, material, section, thickness, element type
- reference CSV schema version
- 비교하지 않는 quantity CSV
- 요구조건이 요청하지 않은 benchmark portfolio
단일 static step/final frame 기능은 input/CSV pair로 result state를 식별한다. Material,
section, loads, constraints와 source element type은 `.inp`에서 읽는다.
## 문서 템플릿
```markdown
# <feature title> Reference Models
# <Feature Title> Reference Cases
## Metadata
- feature_id: <feature-id>
- source_requirement: docs/requirements/<feature-id>.md
- source_research: docs/research/<feature-id>-research.md
- source_formulation: docs/formulations/<feature-id>-formulation.md
- source_numerical_review: docs/numerical-reviews/<feature-id>-review.md
- source_io_definition: docs/io-definitions/<feature-id>-io.md
- status: draft | needs-user-decision | needs-reference-artifacts | ready-for-implementation-planning | blocked
- owner_agent: reference-model-agent
- date: <YYYY-MM-DD>
## Reference Strategy
- verification_scope: <feature verification purpose>
- code_verification: <unit/math-level checks supported by this portfolio>
- solution_verification: <mesh, convergence, patch, or analytical checks>
- benchmark_reference_comparison: <Abaqus/NAFEMS/NASA/paper-derived comparison plan>
- excluded_validation_scope: <physical experiment validation excluded unless explicitly available>
## Reference Acceptance Scope
- blocking_quantities: [<quantity/components>]
- warning_only_quantities: [<quantity/components>]
- excluded_quantities: [<quantity/reason>]
## Model Inventory
## Reference Case Inventory
| model_id | category | purpose | status | required_artifacts |
| --- | --- | --- | --- | --- |
| <model-id> | smoke | <basic parser/solve path> | draft | model.inp, metadata.json, required Abaqus reference CSV files |
| <model-id> | analytical | <closed-form comparison> | draft | model.inp, metadata.json, required Abaqus reference CSV files |
| <model-id> | patch test | <element consistency check> | draft | model.inp, metadata.json, required Abaqus reference CSV files |
| <model-id> | benchmark | <trusted benchmark comparison> | draft | model.inp, metadata.json, required Abaqus reference CSV files |
| <model-id> | regression | <known defect guard> | draft | model.inp, metadata.json, required Abaqus reference CSV files |
| <model-id> | negative/invalid-input | <unsupported keyword or invalid model diagnostic> | draft | model.inp, metadata.json |
| case_id | purpose | input | required_csv | quantity | behavior | status |
| --- | --- | --- | --- | --- | --- | --- |
| <case> | <purpose> | reference/<dir>/<file>.inp | reference/<dir>/<file>.csv | <components> | blocking | warning-only | present | missing |
## Model Record
## HDF5-to-CSV Comparison Mapping
### <model-id>
- category: smoke | analytical | patch test | benchmark | regression | negative/invalid-input
- purpose: <what this model proves>
- verified_requirements: [<requirement-id>]
- analysis_type: <linear static | nonlinear static | modal | other>
- element_type: <Abaqus element type and FESA feature element>
- material: <material model and values>
- boundary_conditions: <BC summary>
- loads: <load summary>
- expected_physical_quantities: displacement | reaction | internal force | stress | strain | energy | residual
- tolerance: <absolute/relative/norm policy or needs-user-decision>
- source: <user | analytical | Abaqus Verification Guide | Abaqus Benchmarks Guide | NAFEMS | NASA/FEMCI | paper>
- artifact_status: draft | needs-reference-artifacts | ready-for-implementation-planning | blocked
| case_id | hdf5_dataset | source_id | csv_id_column | components | row_precheck |
| --- | --- | --- | --- | --- | --- |
| <case> | <path> | <node/element source id> | <column> | <components> | exact set; unique; finite |
## Abaqus Input Requirements
- input_file: reference/<model-id>/model.inp
- supported_keyword_subset: <keywords from docs/io-definitions/<feature-id>-io.md>
- model_data: <nodes, elements, sets, material, section, coordinates, units>
- history_data: <step, procedure, boundary conditions, loads, output requests>
- output_requests: <requests needed to populate Abaqus reference CSV files>
- unsupported_keyword_policy: unsupported | ignored-with-warning | requires-user-decision
## Tolerance and Blocking/Warning Policy
- reference_scale: <formula>
- row_tolerance: <formula>
- zero_policy: no clamp
- blocking_behavior: <rule>
- warning_behavior: <rule>
## Artifact Bundle Contract
```text
reference/
<model-id>/
model.inp
metadata.json
<model-id>_displacements.csv
<model-id>_reactions.csv
<model-id>_internalforces.csv
<model-id>_stresses.csv
README.md
```
Required files:
- `model.inp`: Abaqus input file for the reference model.
- `metadata.json`: provenance and model contract metadata.
- `<model-id>_displacements.csv`: required when nodal displacement is a verification quantity.
- `<model-id>_reactions.csv`: required when constrained DOF reactions or global equilibrium are verification quantities.
- `<model-id>_internalforces.csv`: required when element internal force is a verification quantity.
- `<model-id>_stresses.csv`: required when stress is a verification quantity.
- `README.md`: short description, generation notes, and limitations.
Optional files:
- `<model-id>_strains.csv`: required when strain is part of the acceptance criteria.
- `<model-id>_energy_or_residual.csv`: required when energy balance, residual, or convergence data is part of the acceptance criteria.
- `<model-id>_<quantity>.csv`: feature-specific reference quantity when upstream contracts require it.
- `notes.md`: manual review notes.
## Metadata JSON Contract
```json
{
"feature_id": "<feature-id>",
"model_id": "<model-id>",
"artifact_status": "draft | needs-reference-artifacts | ready-for-implementation-planning | blocked",
"input_file": "model.inp",
"abaqus_version": "<version or needs-user-decision>",
"generation_owner": "<person/procedure>",
"generation_date": "<YYYY-MM-DD>",
"source_documents": ["docs/requirements/<feature-id>.md"],
"units": "<unit system>",
"coordinate_system": "global Cartesian unless otherwise documented",
"analysis_type": "<analysis type>",
"element_types": ["<Abaqus element type>"],
"material_values": {},
"boundary_condition_summary": "<summary>",
"load_summary": "<summary>",
"output_requests": ["U", "RF", "S", "<feature-specific quantities>"],
"reference_csv_schema_version": "<version>",
"reference_csv_files": [
"<model-id>_displacements.csv",
"<model-id>_reactions.csv",
"<model-id>_internalforces.csv",
"<model-id>_stresses.csv"
],
"tolerance_policy": "<absolute/relative/norm policy>",
"limitations": ["<known limitation>"]
}
```
## Abaqus Reference CSV Requirements
### `<model-id>_displacements.csv`
- Required when nodal displacement is a verification quantity.
- Must include step/frame identity, node id, displacement components, coordinate system, and units.
### `<model-id>_reactions.csv`
- Required when constrained DOF reactions or global equilibrium are verification quantities.
- Must include step/frame identity, node id, reaction components, coordinate system, and units.
### `<model-id>_internalforces.csv`
- Required when element internal force is a verification quantity.
- Must include step/frame identity, element id, output location, component, value, and units.
### `<model-id>_stresses.csv`
- Required when stress is a verification quantity.
- Must include step/frame identity, element id, integration point or recovery location, component, value, coordinate system, and units.
### Optional Reference CSV Files
- `<model-id>_strains.csv`: required when strain is part of the acceptance criteria.
- `<model-id>_energy_or_residual.csv`: required when energy balance, residual, or convergence data is part of the acceptance criteria.
- `<model-id>_<quantity>.csv`: required when a feature-specific quantity is part of the acceptance criteria.
## Coverage Matrix
| requirement_id | model_id | compared_quantity | fesa_hdf5_dataset | reference_csv | tolerance | verification_method | status |
| --- | --- | --- | --- | --- | --- | --- | --- |
| <req-id> | <model-id> | displacement | /steps/<step>/frames/<frame>/field_outputs/U | reference/<model-id>/<model-id>_displacements.csv | <policy> | hdf5-to-reference-csv | draft |
| <req-id> | <model-id> | reaction | /steps/<step>/frames/<frame>/field_outputs/RF | reference/<model-id>/<model-id>_reactions.csv | <policy> | hdf5-to-reference-csv | draft |
| <req-id> | <model-id> | internal force | /steps/<step>/frames/<frame>/field_outputs/element_forces | reference/<model-id>/<model-id>_internalforces.csv | <policy> | hdf5-to-reference-csv | draft |
| <req-id> | <model-id> | stress | /steps/<step>/frames/<frame>/field_outputs/S | reference/<model-id>/<model-id>_stresses.csv | <policy> | hdf5-to-reference-csv | draft |
## Artifact Acceptance Checklist
- 모든 `must` requirement가 최소 하나의 `model_id``compared_quantity`에 연결되어 있다.
- `model.inp`가 기능별 supported Abaqus keyword subset을 벗어나지 않는다.
- `metadata.json`에 provenance, Abaqus version/source, units, coordinate system, tolerance, reference CSV schema version이 기록되어 있다.
- 필요한 Abaqus reference CSV 파일이 존재하거나, 기능상 불필요한 quantity는 명확한 reason과 함께 제외되어 있다.
- output request가 필요한 Abaqus reference CSV 물리량을 생성할 수 있도록 정의되어 있다.
- required Abaqus reference CSV 또는 metadata provenance가 없으면 status는 `needs-reference-artifacts`다.
- tolerance, source, units, coordinate system이 불명확하면 status는 `needs-user-decision`이다.
## Readiness Checklist
- declared input exists and is readable
- every required CSV exists and is readable
- source identity and required components are deterministic
- row-set/nonfinite prechecks are defined
- tolerance and blocking/warning behavior are approved
## Open Issues and Downstream Handoff
### I/O Definition Agent
- <supported keyword, output request, FESA HDF5 schema clarification, reference CSV row schema clarification>
### Implementation Planning Agent
- <tests that should fail before implementation, model order, acceptance criteria>
### Reference Verification Agent
- <FESA HDF5 dataset paths, reference CSV schema, ID matching, units, coordinate conventions, output locations, tolerance mapping>
### Physics Evaluation Agent
- <equilibrium, symmetry, displacement direction, stress location, rigid body mode, load path sanity checks>
- <only missing required files, matching, tolerance, or feature-owned decisions>
```
## 품질 기준
## 상태 규칙
- Reference model의 목적과 검증 대상 requirement가 명확해야 한다.
- `model.inp`는 Abaqus input file이며, 기능별 supported keyword subset을 따라야 한다.
- model data와 history data를 구분해야 한다.
- output request와 required Abaqus reference CSV 사이의 연결이 명확해야 한다.
- `reference/<model-id>/` 구조와 필수 artifact가 명시되어야 한다.
- `metadata.json`에는 provenance, Abaqus version/source, units, coordinate system, tolerance, reference CSV schema version이 포함되어야 한다.
- required Abaqus reference CSV가 없으면 완료 상태가 아니라 `needs-reference-artifacts` 상태로 둔다.
- 모든 `must` requirement는 Coverage Matrix에서 model, compared quantity, FESA HDF5 dataset, reference CSV, tolerance, verification method로 추적되어야 한다.
- `ready-for-implementation-planning`: required input/CSV files, mapping, and tolerance are complete.
- `needs-reference-artifacts`: a declared input or required comparison CSV is missing.
- `needs-user-decision`: required quantity, mapping, or tolerance is undefined.
- `blocked`: no safe progress is possible without an external decision or state change.
Canonical naming, README, metadata, provenance, and unrequested portfolio coverage do not select
any failure status.
@@ -187,16 +187,16 @@ These files shall not be generated, modified, renamed, corrected or restored by
Harness. Their spaces and existing CAE report headers are legacy aliases, not a naming pattern for
new models.
Only for this approved legacy bundle:
For this approved legacy bundle:
- `metadata.json`: N/A
- `metadata.json`: absent-allowed under the project-wide optional metadata policy
- `README.md`: N/A
- stress CSV: N/A because beam stress reference comparison is outside the approved V0 scope
The approved design and this contract jointly replace those missing files by recording model ID,
provenance, generator, source commit, units, coordinate systems, step/frame identity, logical CSV
schema, exact inventory, tolerance policy and the stress N/A reason. Their absence therefore does
not change the legacy record to `needs-reference-artifacts`.
The approved design and this contract record model ID, provenance, generator, source commit,
units, coordinate systems, step/frame identity, logical CSV schema, exact inventory, tolerance
policy and the stress N/A reason. The optional metadata file's absence and the approved legacy
README/stress exclusions therefore do not change the record to `needs-reference-artifacts`.
### Future reference bundles
@@ -207,7 +207,7 @@ marks a quantity N/A:
reference/
<model-id>/
model.inp
metadata.json
metadata.json # optional
<model-id>_displacements.csv
<model-id>_reactions.csv
<model-id>_internalforces.csv
@@ -215,14 +215,15 @@ reference/
README.md
```
CSV names are canonical `<model-id>_*.csv` names. `metadata.json` and `README.md` are mandatory.
A quantity CSV may be omitted only when the upstream acceptance contract explicitly records N/A
and gives its verification replacement. Missing required files keep that model at
`needs-reference-artifacts`.
CSV names are canonical `<model-id>_*.csv` names. `README.md` is mandatory for later bundles;
`metadata.json` is optional. A quantity CSV may be omitted only when the upstream acceptance
contract explicitly records N/A and gives its verification replacement. Missing required files
or required Reference Model Contract provenance keep that model at `needs-reference-artifacts`.
## Metadata JSON Contract
## Reference Metadata Contract
`metadata.json` is N/A only for `cantilever-beam-b33`. Every later bundle shall include at least:
This document is the required source of truth for the following metadata. A later bundle may
optionally duplicate it in `metadata.json` using at least this schema:
```json
{
@@ -250,7 +251,8 @@ and gives its verification replacement. Missing required files keep that model a
```
No agent may invent unknown provenance fields or mark a bundle ready merely because filenames
exist.
exist. An absent `metadata.json` is allowed. If the file exists, inventory it read-only and report
any disagreement with this contract or stored artifacts as an upstream contract/provenance issue.
## Abaqus Reference CSV Requirements
@@ -365,7 +367,7 @@ Read-only inventory inspection on `2026-08-09` established the following pre-imp
- every projected numeric field is finite and every row has the header arity;
- generator, source commit, SI units, coordinates, step/increment/time and tolerance provenance are
recorded in the approved design and this contract;
- legacy `metadata.json`, `README.md` and stress CSV are accepted N/A exceptions;
- absent `metadata.json` is allowed by project-wide policy; legacy `README.md` and stress CSV are accepted N/A exceptions;
- no reference value was recalculated and no comparison was performed.
Before an actual comparison, tooling must repeat all artifact checks, verify the exact Frame and
@@ -0,0 +1,121 @@
# Linear Static MITC4 Shell Reference Cases
## Metadata
- feature_id: `linear-static-mitc4-shell`
- source_requirement: `docs/requirements/linear-static-mitc4-shell.md`
- source_io_definition: `docs/io-definitions/linear-static-mitc4-shell-io.md`
- status: `approved-for-implementation-planning`
- owner_agent: `reference-model-agent`
- date: `2026-08-12`
- artifact_policy: `read-only-existing-files`
- authoritative_fesa_output: `results.h5`
## 1. Purpose and boundary
This document is the lightweight inventory and comparison contract for the two
approved MITC4 reference cases. Abaqus supplies an external displacement reference;
it does not define FESA element equations, integration, stabilization, recovery, or
implementation structure. FESA and Abaqus are not required to operate identically.
Reference readiness requires only:
- the declared Abaqus `.inp` file and displacement CSV for each case;
- the FESA `results.h5` generated from that case's `.inp`;
- deterministic source-instance/node/component matching;
- the approved tolerance and decision rule in Section 5.
README, `metadata.json`, canonical naming, legacy-alias approval, Abaqus version or
generation provenance, duplicated unit/coordinate/model/step/frame/material/section
descriptions, and a CSV schema-version record are not required. If `metadata.json`
later exists, it is optional read-only context and does not override the declared
input, CSV, row mapping, or tolerance.
## 2. Read-only case inventory
| case_id | source label | role | exact path | SHA-256 | observed content |
| --- | --- | --- | --- | --- | --- |
| `shell-s4` | `S4` | input | `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` | `TYPE=S4`; one linear-static case |
| `shell-s4` | `S4` | required reference | `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` | 49 data rows; U and UR components |
| `shell-s4r` | `S4R` | input | `reference/shellR/shellR.inp` | `1325940FB42B78961CF25E84379BF2693846FAD22473E7688AC5456B37B18CB4` | `TYPE=S4R`; one linear-static case |
| `shell-s4r` | `S4R` | required reference | `reference/shellR/shellR displacements.csv` | `8887ACC5ED007CB97583A9FDC1150B48B9297E269A5BA8EBA6C1A5F6306E98CB` | 49 data rows; U and UR components |
The existing reaction and stress CSVs in both directories are optional inspection
evidence only. They are not pass/fail inputs. No agent may rename, rewrite, normalize,
repair, regenerate, or restore any reference artifact unless a later phase explicitly
authorizes that operation.
## 3. Required CSV mapping
Trim surrounding whitespace from header names, then apply this exact projection:
| Abaqus CSV column | normalized identity/value | FESA HDF5 source |
| --- | --- | --- |
| `Part Instance Name` | `instance_name` | `/model/nodes.instance_name` |
| `Node Label` | `source_node_label` | `/model/nodes.source_label` |
| `U-U1` | `U1` | `/steps/Step-1/frames/0/nodal/displacement[:,0]` (`UX`) |
| `U-U2` | `U2` | `/steps/Step-1/frames/0/nodal/displacement[:,1]` (`UY`) |
| `U-U3` | `U3` | `/steps/Step-1/frames/0/nodal/displacement[:,2]` (`UZ`) |
| `UR-UR1` | `UR1` | `/steps/Step-1/frames/0/nodal/displacement[:,3]` (`URX`) |
| `UR-UR2` | `UR2` | `/steps/Step-1/frames/0/nodal/displacement[:,4]` (`URY`) |
| `UR-UR3` | `UR3` | `/steps/Step-1/frames/0/nodal/displacement[:,5]` (`URZ`) |
The normalized row key is
`(case_id,instance_name,source_node_label,component)`. Stable comparison order is
case order `shell-s4`, `shell-s4r`; then FESA instance declaration order; stable
source-node order; and component order `[U1,U2,U3,UR1,UR2,UR3]`.
## 4. Precheck
Before numerical comparison, each case shall satisfy all of the following:
1. The declared input, displacement CSV, and FESA `results.h5` exist.
2. The six required displacement headers map exactly as Section 3 specifies.
3. Each required CSV and HDF5 value is finite.
4. Each normalized row key is unique.
5. CSV and HDF5 normalized row-key sets are exactly equal.
Missing, extra, duplicate, nonfinite, header-mismatched, or source-identity-mismatched
required rows fail reference verification before tolerance evaluation. Values are not
zero-clamped and mismatched rows are not omitted, averaged, or synthesized.
## 5. Tolerance and decision rule
For each case and component `c` independently, using only finite Abaqus rows:
```text
reference_scale_c = max(abs(abaqus_value_i))
tolerance_c = 1e-9 + 1e-6 * reference_scale_c
absolute_error_i = abs(fesa_value_i - abaqus_value_i)
```
The `1e-9` floor is expressed in the model's user-consistent length unit for
`U1/U2/U3` and is dimensionless for `UR1/UR2/UR3`. A zero reference scale leaves only
the absolute floor; no alternate denominator is introduced.
- Every matched `U1/U2/U3` row must satisfy `absolute_error_i <= tolerance_c`.
Any U exceedance fails that case and the feature reference comparison.
- `UR1/UR2/UR3` uses the same formula. Every exceedance produces a deterministic
warning containing the case, source row, component, error, and tolerance, but does
not change pass/fail.
The comparison report records every U/UR row decision, maximum absolute error,
component-scale normalized error, RMS error, vector-norm error, worst source
row/component, and every UR warning.
## 6. Coverage and handoff
The two cases are the complete required reference inventory for this feature:
- `shell-s4` proves the approved `S4 -> FESA-MITC4` input path against Abaqus U;
- `shell-s4r` proves the approved `S4R -> FESA-MITC4` input path against Abaqus U.
They do not prove Abaqus formulation equivalence or general MITC4 accuracy outside
the modeled cases. Additional flat/thin/thick/distorted/curved models, mesh studies,
drilling sweeps, drilling-energy criteria, `NR-O03`, and `NR-O04` are not required
before Implementation Planning or feature completion.
Numerical Review may use this inventory as downstream comparison input, but missing
bundle-administration data shall not change a mathematically consistent formulation
verdict. The revised Numerical Review passes the formulation and authorizes
Implementation Planning; this does not authorize implementation or Harness execution.
+58 -133
View File
@@ -1,151 +1,95 @@
# Reference Verification Report 문서 작성 가이드
# Reference Verification Report 작성 가이드
이 디렉터리는 Reference Verification Agent가 작성하거나 제안하는 기능별 reference comparison report를 보관하는 위치다.
Reference Verification Agent는 Build/Test 통과 뒤 FESA `results.h5`와 기능이 선언한
Abaqus CSV quantity를 비교한다. 비교 대상은 observable value이며 Abaqus 내부 formulation
동등성이 아니다.
Reference Verification Agent는 Build/Test Executor Agent 통과 후 generated solver `results.h5`와 Abaqus reference CSV files를 tolerance 기준으로 비교한다. Reference CSV는 동일한 Abaqus `.inp` 모델을 Abaqus로 해석해 추출한 변위, 반력, 내력, 응력 결과이며, FESA HDF5 dataset에서 파생된 파일이 아니다. 이 agent는 comparison과 report만 수행하며, source code, tests, CMake files, requirements, formulations, I/O contracts, reference artifacts, tolerance policies를 수정하지 않는다.
기본 문서명은 `docs/reference-verifications/<feature-id>-reference-verification.md` 형식을 사용한다.
## Reference Verification Agent 역할
수행한다:
- `reference/<model-id>/` artifact bundle과 generated solver `results.h5`를 확인한다.
- `metadata.json`, `model.inp`, required Abaqus reference CSV files, reference CSV schema version, FESA HDF5 schema version, units, coordinate system, step/frame identity, node/element ID matching rule, output location, component naming, tolerance policy를 확인한다.
- FESA HDF5 dataset을 normalized row record로 읽고 Abaqus reference CSV row와 직접 비교한다.
- comparison command가 FESA `results.h5`에서 deterministic CSV view를 materialize할 수 있지만, 이 파일은 debugging/review용 derived artifact일 뿐 reference artifact가 아니다.
- upstream 문서가 요구할 때만 `<model-id>_strains.csv`, `<model-id>_energy_or_residual.csv`, 또는 `<model-id>_<quantity>.csv`를 추가 비교한다.
- max absolute error, max relative error, RMS error, norm error, worst id/component, missing rows, extra rows, pass/fail을 보고한다.
- 실패를 missing-reference-artifact, missing-solver-output, schema-mismatch, id-mismatch, unit-or-coordinate-mismatch, tolerance-failure, nonfinite-result, upstream-contract, environment로 분류한다.
수행하지 않는다:
- source code를 수정하지 않는다.
- tests를 수정하지 않는다.
- CMake files를 수정하지 않는다.
- requirements, formulations, I/O contracts, reference model contracts를 수정하지 않는다.
- reference artifacts 또는 tolerance policies를 수정하지 않는다.
- Abaqus, Nastran 또는 reference solver를 실행하지 않는다.
- Abaqus reference CSV 파일을 생성하거나 수정하지 않는다.
- solver output을 tolerance에 맞추기 위해 보정하지 않는다.
- physics validation success 또는 release readiness를 승인하지 않는다.
기본 문서명은 `docs/reference-verifications/<feature-id>-reference-verification.md`다.
## 실행 순서
Reference Verification Agent는 항상 다음 순서를 따른다.
```text
ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT
```
`ARTIFACT CHECK`에서 다음 항목이 없으면 비교를 시작하지 않는다.
`ARTIFACT CHECK` 다음만 요구한다.
- `metadata.json`
- `model.inp`
- generated solver `results.h5`
- `reference/<model-id>/<model-id>_displacements.csv`
- `reference/<model-id>/<model-id>_reactions.csv`
- `reference/<model-id>/<model-id>_internalforces.csv`
- `reference/<model-id>/<model-id>_stresses.csv`
- reference CSV schema version
- FESA HDF5 schema version
- units
- coordinate system
- step/frame identity
- node/element ID matching rule
- output location
- component naming
- tolerance policy
- declared `.inp`
- generated FESA `results.h5`
- every feature-required Abaqus CSV
- HDF5 dataset projection
- source-ID/component mapping
- blocking/warning behavior
- approved tolerance
## 비교 대상
Canonical naming, README, metadata, Abaqus version/provenance, duplicated units/coordinates/
step-frame fields와 reference CSV schema version은 기본 gate가 아니다.
| quantity | fesa_hdf5_dataset | reference_csv |
| --- | --- | --- |
| displacement | /steps/<step>/frames/<frame>/field_outputs/U | reference/<model-id>/<model-id>_displacements.csv |
| reaction | /steps/<step>/frames/<frame>/field_outputs/RF | reference/<model-id>/<model-id>_reactions.csv |
| internal force | /steps/<step>/frames/<frame>/field_outputs/element_forces | reference/<model-id>/<model-id>_internalforces.csv |
| stress | /steps/<step>/frames/<frame>/field_outputs/S | reference/<model-id>/<model-id>_stresses.csv |
Missing, extra, duplicate 또는 nonfinite required row는 tolerance 전에 실패한다. Row order
alone으로 대응하지 않는다. FESA/Reference 값을 zero-clamp하거나 tolerance에 맞게 보정하지
않는다.
선택 Abaqus reference CSV:
- `reference/<model-id>/<model-id>_strains.csv`: strain이 acceptance criteria에 포함된 경우
- `reference/<model-id>/<model-id>_energy_or_residual.csv`: energy, residual, convergence quantity가 acceptance criteria에 포함된 경우
- `reference/<model-id>/<model-id>_<quantity>.csv`: feature-specific quantity가 acceptance criteria에 포함된 경우
## 보고 항목
각 blocking 또는 warning-only quantity에 대해 다음을 보고한다.
- exact input and CSV path
- FESA HDF5 dataset
- source ID/component mapping
- compared, missing, extra, duplicate, nonfinite row counts
- max absolute and relative error
- RMS and norm error when required
- worst source ID/component
- pass, fail, or warning
## Failure Classification
- `missing-reference-artifact`: required Abaqus reference CSV file 또는 provenance가 없다.
- `missing-solver-output`: generated solver `results.h5` 또는 comparison command가 없다.
- `schema-mismatch`: FESA HDF5 또는 reference CSV row schema가 다르다.
- `id-mismatch`: node id, element id, step/frame, integration point, component matching이 실패했다.
- `unit-or-coordinate-mismatch`: units 또는 coordinate system이 비교 가능하지 않다.
- `tolerance-failure`: schema와 matching은 유효하지만 error가 tolerance를 초과했다.
- `nonfinite-result`: NaN 또는 infinite value가 발견됐다.
- `upstream-contract`: tolerance, schema, units, output location, ID matching policy가 누락 또는 충돌한다.
- `environment`: 로컬 실행 환경 문제로 비교가 불가능하다.
- `missing-reference-artifact`: declared input or required CSV missing
- `missing-solver-output`: `results.h5` or comparison command missing
- `schema-mismatch`: required source ID/component columns unavailable
- `id-mismatch`: required source row sets do not match
- `tolerance-failure`: blocking value exceeds approved tolerance
- `nonfinite-result`: required FESA or reference value is not finite
- `upstream-contract`: quantity, HDF5 projection, mapping, or tolerance missing/contradictory
- `environment`: local comparison cannot run
## 문서 템플릿
```markdown
# <feature title> Reference Verification Report
# <Feature Title> Reference Verification Report
## Metadata
- feature_id: <feature-id>
- source_build_test_report: docs/build-test-reports/<feature-id>-build-test.md
- source_reference_models: docs/reference-models/<feature-id>-reference-models.md
- source_io_definition: docs/io-definitions/<feature-id>-io.md
- source_implementation_report: <path or N/A>
- status: pass-for-physics-evaluation | needs-correction | needs-reference-artifacts | needs-solver-results | needs-upstream-decision | blocked
- owner_agent: reference-verification-agent
- date: <YYYY-MM-DD>
## Artifact Inventory
| item | path | status | notes |
| --- | --- | --- | --- |
| reference_model_dir | reference/<model-id>/ | present | missing | <notes> |
| reference_input | reference/<model-id>/model.inp | present | missing | <input summary> |
| metadata | reference/<model-id>/metadata.json | present | missing | <provenance summary> |
| reference_displacements_csv | reference/<model-id>/<model-id>_displacements.csv | present | missing | <row/schema summary> |
| reference_reactions_csv | reference/<model-id>/<model-id>_reactions.csv | present | missing | <row/schema summary> |
| reference_internalforces_csv | reference/<model-id>/<model-id>_internalforces.csv | present | missing | <row/schema summary> |
| reference_stresses_csv | reference/<model-id>/<model-id>_stresses.csv | present | missing | <row/schema summary> |
| solver_hdf5 | <solver output directory>/results.h5 | present | missing | <schema summary> |
| solver_debug_csv_view | <solver output directory>/csv/ | present | missing | <optional, derived from results.h5 only> |
| input | <exact path> | present | missing | <summary> |
| required_csv | <exact path> | present | missing | <summary> |
| solver_hdf5 | <path>/results.h5 | present | missing | <summary> |
## Comparison Contract
- hdf5_schema_version: <version>
- reference_csv_schema_version: <version>
- id_matching: node_id | element_id | step/frame | integration_point | component
- units: <unit system>
- coordinate_system: <global/local convention>
- output_location: nodal | element | integration_point | centroid | recovery_location
- component_naming: <component naming policy>
- row_sort_order: <step, frame, id, location, component order>
- tolerance_source: <requirement/reference model/I/O document>
- tolerance_policy: absolute | relative | norm-based | combined
- zero_reference_policy: <policy or N/A>
- hdf5_dataset: <path>
- source_id_mapping: <rule>
- components: <blocking/warning inventory>
- row_precheck: exact set; unique; finite
- tolerance_source: <path/requirement>
- tolerance_policy: <formula>
## Quantity Results
| quantity | model_id | fesa_hdf5_dataset | reference_csv | compared_rows | missing_rows | extra_rows | max_abs_error | max_rel_error | rms_error | norm_error | worst_id | worst_component | result |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| displacement | <model-id> | /steps/<step>/frames/<frame>/field_outputs/U | reference/<model-id>/<model-id>_displacements.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <node id> | <component> | pass | fail |
| reaction | <model-id> | /steps/<step>/frames/<frame>/field_outputs/RF | reference/<model-id>/<model-id>_reactions.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <node id> | <component> | pass | fail |
| internal force | <model-id> | /steps/<step>/frames/<frame>/field_outputs/element_forces | reference/<model-id>/<model-id>_internalforces.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <element id> | <component> | pass | fail |
| stress | <model-id> | /steps/<step>/frames/<frame>/field_outputs/S | reference/<model-id>/<model-id>_stresses.csv | <n> | <n> | <n> | <value> | <value> | <value> | <value or N/A> | <element/ip id> | <component> | pass | fail |
| quantity | components | behavior | compared | missing | extra | max_abs | max_rel | rms | norm | worst_id/component | result |
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |
| <quantity> | <components> | blocking | warning-only | <values> |
## Failure Classification
- classification: missing-reference-artifact | missing-solver-output | schema-mismatch | id-mismatch | unit-or-coordinate-mismatch | tolerance-failure | nonfinite-result | upstream-contract | environment | N/A
- primary_failure: <short summary>
- evidence: <short relevant excerpt or computed metric>
- classification: <value or N/A>
- evidence: <summary>
## Handoff Recommendation
| target_agent | reason | required_input |
| --- | --- | --- |
| Correction Agent | <implementation-owned mismatch or nonfinite result> | <comparison metrics and failing quantity> |
| Reference Model Agent | <missing or invalid reference artifact/provenance> | <artifact inventory> |
| I/O Definition Agent | <FESA HDF5 schema, reference CSV schema, units, coordinate, output location mismatch> | <contract mismatch> |
| Physics Evaluation Agent | <reference comparisons passed> | <quantity results and report> |
| Coordinator Agent | <blocked or repeated ambiguity> | <classification and open issue> |
- <target and exact evidence>
## No-Change Assertion
- source_files_modified: false
@@ -153,30 +97,11 @@ ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT
- cmake_files_modified: false
- reference_artifacts_modified: false
- tolerance_policies_modified: false
- notes: <observed no-change evidence or exception>
## Open Issues
- <missing solver outputs, missing reference artifacts, schema gaps, tolerance gaps, or repeated comparison failures>
- <only actual comparison blockers>
```
## 상태 값
- `pass-for-physics-evaluation`: required reference comparisons가 모두 통과했고 Physics Evaluation Agent로 넘길 수 있다.
- `needs-correction`: implementation-owned solver result mismatch 또는 nonfinite result가 있다.
- `needs-reference-artifacts`: required Abaqus reference CSV 또는 provenance가 누락됐다.
- `needs-solver-results`: generated solver `results.h5` 또는 comparison command가 없다.
- `needs-upstream-decision`: schema, tolerance, units, coordinate system, output location, ID matching policy가 누락 또는 충돌한다.
- `blocked`: 사용자 또는 Coordinator Agent 결정 없이는 안전하게 진행할 수 없다.
## 품질 기준
- 모든 `must` requirement의 reference-comparison 항목은 model id, compared quantity, FESA HDF5 dataset, reference CSV, tolerance에 trace되어야 한다.
- reference artifact는 읽기 전용이다. `model.inp`, `metadata.json`, `reference/<model-id>/<model-id>_*.csv`를 수정하지 않는다.
- FESA `results.h5`가 authoritative solver output이고 Abaqus reference CSV files가 authoritative reference result다.
- solver debug CSV view는 행 정렬과 사람이 검토 가능한 비교 view일 뿐이며 tolerance에 맞추기 위해 후처리 보정하지 않는다.
- stress/strain은 element id, integration point 또는 recovery location, component naming이 일치할 때만 비교한다.
- nodal displacement/reaction은 node id, DOF/component, coordinate system, unit이 일치할 때만 비교한다.
- missing rows와 extra rows를 숨기지 않고 보고한다.
- NaN 또는 infinite value는 `nonfinite-result`로 분류한다.
- pass는 reference tolerance 통과만 의미한다.
- physics validation과 release readiness는 각각 Physics Evaluation Agent와 Release Agent가 판정한다.
`pass-for-physics-evaluation`은 required blocking comparison 통과만 의미한다. Warning-only
quantity는 경고를 남기되 verdict를 바꾸지 않는다. Physics validation과 release readiness는
각 후속 agent가 판정한다.
@@ -23,8 +23,8 @@ B33 reference tolerance. It does not approve physics sanity or release readiness
The approved B33 exception overrides the generic new-bundle inventory. The exact
four legacy files with spaces are the complete read-only reference bundle;
`metadata.json`, `README.md`, and a stress CSV are contractually N/A and are not
missing artifacts.
`metadata.json` is absent-allowed under project-wide policy, while `README.md` and a
stress CSV are contractually N/A and are not missing artifacts.
| item | exact path | status | direct audit evidence |
| --- | --- | --- | --- |
@@ -33,7 +33,7 @@ missing artifacts.
| displacement CSV | `reference/cantilever beam/cantilever beam displacements.csv` | present, valid | Exact 9-column CAE header; 11 unique rows; 66 finite values. |
| reaction CSV | `reference/cantilever beam/cantilever beam reactions.csv` | present, valid | Exact 9-column CAE header; 11 unique rows; 66 finite values. |
| elemental-force CSV | `reference/cantilever beam/cantilever beam elemental forces.csv` | present, valid | Exact 7-column CAE header; 11 unique rows; 44 finite values. |
| legacy metadata | `reference/cantilever beam/metadata.json` | N/A | Approved design, ADR-010, I/O definition, and reference-model contract supply provenance. |
| optional metadata | `reference/cantilever beam/metadata.json` | absent-allowed | Approved design, ADR-010, I/O definition, and reference-model contract supply provenance; absence is not a missing artifact. |
| legacy README | `reference/cantilever beam/README.md` | N/A | Approved B33 legacy exception. |
| reference stress CSV | N/A | N/A | Abaqus beam-stress comparison is outside the approved V0 scope. |
| authoritative solver output | `.harness/build/reference/cantilever-beam-b33/results.h5` | present, valid | 25,336 bytes; generated by the fresh exact CTest; HDF5 schema inspected read-only with HDF5 2.1.1 utilities. |
+6 -4
View File
@@ -138,7 +138,7 @@ GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT
| Physics Evaluation Agent | <missing or failed physics evaluation> | <reference verification evidence> |
| Requirement Agent | <requirement or acceptance gap> | <open decision> |
| I/O Definition Agent | <I/O scope or Abaqus keyword limitation gap> | <contract gap> |
| Reference Model Agent | <reference artifact or coverage gap> | <model gap> |
| Reference Model Agent | <missing required input/CSV or comparison mapping> | <exact gap> |
## No-Change Assertion
- source_files_modified: false
@@ -149,7 +149,7 @@ GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT
- notes: <observed no-change evidence or exception>
## Open Issues
- <missing evidence, contradictory upstream report, unresolved defect, incomplete reference artifact, or documentation gap>
- <missing evidence, contradictory upstream report, unresolved defect, missing required comparison file/mapping, or documentation gap>
```
## 상태 값
@@ -159,7 +159,7 @@ GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT
- `needs-reference-verification`: reference verification report가 없거나 `pass-for-physics-evaluation`이 아니다.
- `needs-physics-evaluation`: physics evaluation report가 없거나 `pass-for-release-agent`가 아니다.
- `needs-documentation`: gate evidence는 통과했지만 release scope, known limitations, release notes, traceability 문서가 불완전하다.
- `needs-upstream-decision`: requirement, tolerance, reference artifact, I/O, acceptance evidence가 누락되었거나 상충한다.
- `needs-upstream-decision`: requirement, tolerance, required comparison file/mapping, I/O, acceptance evidence가 누락되었거나 상충한다.
- `blocked`: 사용자 또는 Coordinator Agent 결정 없이는 안전하게 진행할 수 없다.
## 품질 기준
@@ -167,5 +167,7 @@ GATE AUDIT -> TRACEABILITY CHECK -> RELEASE DOCUMENTATION -> RELEASE VERDICT
- `ready-for-release`는 Build/Test, Reference Verification, Physics Evaluation gate evidence가 모두 present and passing일 때만 사용할 수 있다.
- 모든 `must` requirement는 acceptance criterion, test/reference evidence, release scope에 trace되어야 한다.
- known limitations와 deferred/open issue는 Release Notes Draft에 명확히 기록되어야 한다.
- missing evidence, contradictory upstream reports, unresolved defects, incomplete reference artifacts는 release pass가 아니라 적절한 `needs-*` 상태로 분류한다.
- missing evidence, contradictory upstream reports, unresolved defects, missing declared comparison
files는 적절한 `needs-*` 상태로 분류한다. Canonical naming, README, metadata, provenance와
unrequested portfolio는 blocker가 아니다.
- 이 문서는 FESA 내부 feature release readiness 판정을 위한 것이며, 외부 publish/deploy/package/tag/commit 자동화는 포함하지 않는다.
@@ -173,7 +173,7 @@ disposition. No must requirement is deferred or blocked.
| nonlinear/dynamic/contact/thermal | analysis/physics | no geometric/material nonlinearity, dynamics, contact, or thermal response | documented, deferred feature |
| shear and warping stress | output/physics | no transverse/torsional shear-stress or warping-stress recovery; no nodal averaging | documented, deferred feature |
| beam stress reference | verification | axial `S11` is mandatory and analytically/schema tested, but Abaqus stress reference is N/A | accepted contract N/A |
| approved four-file legacy exception | artifacts | spaces and legacy names remain; `metadata.json`, `README.md`, and stress CSV are N/A only for this bundle | read-only accepted exception; not precedent for new bundles |
| approved four-file legacy exception | artifacts | spaces and legacy names remain; `metadata.json` is absent-allowed by project-wide policy, while `README.md` and stress CSV are N/A only for this bundle | read-only accepted filename/README exception; not precedent for new bundles |
| reference coverage | verification | single identity-axis local-z B33 cantilever does not itself cover axial/torsion/local-y/rotated/prescribed/line-load/nonzero-fiber stress | accepted; complementary analytical/unit portfolio passes |
| Euler-Bernoulli applicability | modeling | deep/short beams may be too stiff; no automatic slenderness threshold is approved | documented modeling limit |
| energy evidence | output | no HDF5 energy dataset; Step 27 derives positive `0.5*F^T*d` and uses rank/energy tests | accepted evidence limit |
+13 -9
View File
@@ -73,15 +73,19 @@ Requirement Agent는 솔버 기능 요청을 검증 가능한 요구조건으로
- relative_tolerance: <value or TBD>
- norm_based_tolerance: <value or TBD>
## Reference Artifact Requirements
Expected location: `reference/<model-id>/`
## Reference Case Requirements
- `model.inp`: required | not-applicable
- `metadata.json`: required
- `<model-id>_displacements.csv`: required | not-applicable
- `<model-id>_reactions.csv`: required | not-applicable
- `<model-id>_internalforces.csv`: required | not-applicable
- `<model-id>_stresses.csv`: required | not-applicable
- input_path: <exact existing `.inp` path or N/A>
- required_csv_paths: <only blocking/warning quantity CSV paths or N/A>
- blocking_quantities: <components or N/A>
- warning_only_quantities: <components or N/A>
- hdf5_projection: <dataset or N/A>
- source_id_component_matching: <rule or N/A>
- row_precheck: missing/extra/duplicate/nonfinite fail before tolerance
- tolerance: <approved formula or N/A>
Canonical naming, README, metadata, provenance, duplicated units/coordinates/step-frame fields,
CSV schema versions와 비교하지 않는 quantity CSV는 기본 요구조건이 아니다.
## Requirement Verification Matrix
@@ -104,7 +108,7 @@ Expected location: `reference/<model-id>/`
- <입력/출력 schema 요구조건>
### Reference Model Agent
- <필요한 references/<feature-id>/ artifact 목록>
- <exact input/required CSV paths, blocking/warning quantities, matching, tolerance>
### Implementation Planning Agent
- <먼저 작성할 테스트와 acceptance criteria>
@@ -134,7 +134,7 @@ The approved logical model is `cantilever-beam-b33`, schema is
`Abaqus/CAE Learning Edition 2024`, and the coordinate/output contract is global Cartesian
nodal output plus beam-local section-force output at `Step-1`, increment 1, step time 1.0.
- **FESA-REQ-LS3DEB-040** — The V0 reference baseline shall use the exact read-only files `reference/cantilever beam/cantilever beam.inp`, `reference/cantilever beam/cantilever beam displacements.csv`, `reference/cantilever beam/cantilever beam reactions.csv`, and `reference/cantilever beam/cantilever beam elemental forces.csv` without rename, rewrite, correction, or restoration; `metadata.json` and `README.md` are N/A only for this approved legacy bundle.
- **FESA-REQ-LS3DEB-040** — The V0 reference baseline shall use the exact read-only files `reference/cantilever beam/cantilever beam.inp`, `reference/cantilever beam/cantilever beam displacements.csv`, `reference/cantilever beam/cantilever beam reactions.csv`, and `reference/cantilever beam/cantilever beam elemental forces.csv` without rename, rewrite, correction, or restoration; absent `metadata.json` is allowed by project-wide policy and `README.md` is N/A for this approved legacy bundle.
- **FESA-REQ-LS3DEB-041** — Before comparison, artifact validation shall confirm all four files, `TYPE=B33`, expected CAE report headers, unique row keys, and finite values; failure shall be classified as `needs-reference-artifacts` or `schema-mismatch` and comparison shall not start.
- **FESA-REQ-LS3DEB-042** — Reference verification shall compare displacement by source-node identity (`U1/U2/U3/UR1/UR2/UR3`), reaction by source-node identity (`RF1/RF2/RF3/RM1/RM2/RM3`), and node-station-normalized section resultant by `SF1->N`, `SM1->My`, `SM2->Mz`, `SM3->T`; adjacent interior endpoints shall first agree within approved tolerance and shall not be averaged to hide a mismatch.
- **FESA-REQ-LS3DEB-043** — Reference comparison shall run only after build/test passes; physics sanity shall run only after reference comparison passes and shall check global force/moment equilibrium, reaction sign, displacement direction, symmetry, element section-force consistency, and normalized residual; release readiness shall require all prior gate evidence and known limitations.
@@ -184,7 +184,7 @@ nodal output plus beam-local section-force output at `Step-1`, increment 1, step
| FESA-REQ-LS3DEB-037 | For the approved SI bundle, displacement and rotation shall use `absolute_floor=1e-9`, force and moment shall use `absolute_floor=1e-3`, and a zero component scale shall use the applicable absolute floor alone. | tolerance | Preserve dimensional meaning near zero. | Approved design §11.3; ADR-014 | must | Comparison tests with zero/near-zero rows | Each quantity uses its exact SI floor and zero-scale groups use no relative contribution. | SI `1e-9` displacement/rotation; `1e-3` force/moment | reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-038 | Reference values shall not be zero-clamped and rows shall not be dropped; missing, extra, duplicate, nonfinite, schema-mismatched, or identity-mismatched rows shall fail before tolerance evaluation. | tolerance | Prevent false passes through omission or clamping. | Approved design §§11.3, 12; ADR-014 | must | Negative comparison tests | Every listed invalid case fails before numeric comparison and zero values remain unchanged. | No ignored invalid rows | reference-verification-agent | approved |
| FESA-REQ-LS3DEB-039 | The verification report shall record every row decision and maximum absolute error, component-scale normalized error, RMS error, norm error, and worst row/component for each compared quantity. | tolerance | Make the pass/fail decision auditable. | Approved design §11.3; ADR-014 | must | Verification report schema/review | Per-row decisions and all required aggregate/worst metrics are present for every quantity. | Report completeness | reference-verification-agent; release-agent | approved |
| FESA-REQ-LS3DEB-040 | The V0 reference baseline shall use the exact read-only files `reference/cantilever beam/cantilever beam.inp`, `reference/cantilever beam/cantilever beam displacements.csv`, `reference/cantilever beam/cantilever beam reactions.csv`, and `reference/cantilever beam/cantilever beam elemental forces.csv` without rename, rewrite, correction, or restoration; `metadata.json` and `README.md` are N/A only for this approved legacy bundle. | reference | Protect the approved correctness baseline. | Approved design §12; ADR-010, ADR-014 | must | Artifact inventory; Git diff review | Exact filenames exist and no reference file is added, removed, renamed, or content-modified. | Exact path/content identity | reference-model-agent; reference-verification-agent; release-agent | approved |
| FESA-REQ-LS3DEB-040 | The V0 reference baseline shall use the exact read-only files `reference/cantilever beam/cantilever beam.inp`, `reference/cantilever beam/cantilever beam displacements.csv`, `reference/cantilever beam/cantilever beam reactions.csv`, and `reference/cantilever beam/cantilever beam elemental forces.csv` without rename, rewrite, correction, or restoration; absent `metadata.json` is allowed by project-wide policy and `README.md` is N/A for this approved legacy bundle. | reference | Protect the approved correctness baseline. | Approved design §12; ADR-010, ADR-014 | must | Artifact inventory; Git diff review | Exact filenames exist and no reference file is added, removed, renamed, or content-modified. | Exact path/content identity | reference-model-agent; reference-verification-agent; release-agent | approved |
| FESA-REQ-LS3DEB-041 | Before comparison, artifact validation shall confirm all four files, `TYPE=B33`, expected CAE report headers, unique row keys, and finite values; failure shall be classified as `needs-reference-artifacts` or `schema-mismatch` and comparison shall not start. | reference | Detect stale B31 or malformed evidence. | Approved design §§6.3, 12 | must | Artifact-check integration test | All checks pass before comparison and every failure uses an approved classification. | Exact inventory and schema | reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-042 | Reference verification shall compare displacement by source-node identity (`U1/U2/U3/UR1/UR2/UR3`), reaction by source-node identity (`RF1/RF2/RF3/RM1/RM2/RM3`), and node-station-normalized section resultant by `SF1->N`, `SM1->My`, `SM2->Mz`, `SM3->T`; adjacent interior endpoints shall first agree within approved tolerance and shall not be averaged to hide a mismatch. | reference | Compare equivalent quantities despite legacy station rows. | Approved design §§8.2, 12 | must | Reference comparison test/report | All components match by source identity and interior endpoints pass before deterministic representative selection. | Requirements 036 and 037 policy | io-definition-agent; reference-model-agent; reference-verification-agent | approved |
| FESA-REQ-LS3DEB-043 | Reference comparison shall run only after build/test passes; physics sanity shall run only after reference comparison passes and shall check global force/moment equilibrium, reaction sign, displacement direction, symmetry, element section-force consistency, and normalized residual; release readiness shall require all prior gate evidence and known limitations. | governance | Keep numerical similarity distinct from physical/release approval. | Approved design §§11, 12, 13 | must | Gate evidence audit | Each downstream report cites the preceding pass and physics evidence covers all six checks before release review. | Relevant upstream tolerances | coordinator-agent; physics-evaluation-agent; release-agent | approved |
@@ -0,0 +1,278 @@
# Linear Static MITC4 Shell Requirements
## Metadata
- feature_id: `linear-static-mitc4-shell`
- title: `Linear Static MITC4 Shell`
- status: `approved`
- owner_agent: `requirement-agent`
- date: `2026-08-12`
- approval_basis: 사용자와 확정한 선형 정적 범위, `S4`/`S4R` 매핑, 6자유도 외부 계약, drilling 안정화, 자동 director 생성, 결과 및 검증 계약
- current_product_state: `requirements-approved-not-implemented`
- formulation_alignment: `docs/formulations/mitc4-shell-formulation.md`는 이 baseline의 6자유도 및 고정 drilling 안정화 계약과 정렬함
- reference_inventory_state: `reference/shell/`의 S4와 `reference/shellR/`의 S4R input/displacement CSV를 기존 경로와 이름 그대로 사용함
## Purpose
이 baseline은 승인된 Abaqus `.inp` subset의 4절점 `S4` 또는 `S4R` 요소를
FESA의 단일 MITC4 formulation으로 매핑하고, 소변형·소회전 선형 정적 해석을 수행해
검증 가능한 절점 및 쉘 요소 결과를 authoritative `results.h5`에 기록하는 다음
end-to-end 기능을 정의한다.
FESA는 Abaqus `S4` 또는 `S4R` formulation을 재현한다고 주장하지 않는다. 두 source
element type은 같은 FESA MITC4 formulation으로 매핑하며 source type과 internal
formulation identity를 분리해 보존한다. Abaqus reference comparison은 병진변위
`U1/U2/U3`만 pass/fail에 사용하고 회전 `UR1/UR2/UR3`은 비차단 warning evidence로
사용한다.
이 문서의 승인은 MITC4가 현재 제품에 구현되었다는 뜻이 아니다. Research,
Formulation, Numerical Review, I/O, Reference Model, Implementation Planning 및 이후
검증 gate가 순서대로 완료되어야 제품 기능이 된다.
## Source Basis
- 사용자 승인 결정: 선형 정적 실행 범위, `S4`/`S4R` 공통 MITC4 매핑, 전역 6자유도,
비물리 drilling 안정화, 자동 두께방향 director, 단일층 등방성 재료, 필수 결과와
displacement 중심 reference 판정
- `docs/reference-papers/MITC4/`: MITC4 director kinematics, assumed transverse shear,
5-DOF physical kernel, 6-DOF transformation/stabilization 사례 및 shell benchmark 근거
- `docs/PRD.md`, `docs/ARCHITECTURE.md`, `docs/ADR.md`: end-to-end feature boundary,
ownership, linear-static lifecycle, deterministic assembly, HDF5, reference immutability 및
failure atomicity
- `docs/formulations/mitc4-shell-formulation.md`: 후속 정렬이 필요한 선행 draft이며 이
approved requirements baseline을 변경하는 근거로 사용하지 않음
## In Scope
- 입력 파일당 하나의 `*STEP, *STATIC` 선형 정적 해석
- small displacement와 small rotation
- 4절점 bilinear quadrilateral MITC4 shell
- Abaqus source element type `S4``S4R`의 동일한 FESA MITC4 매핑
- 절점당 전역 자유도 `[UX, UY, UZ, URX, URY, URZ]`
- 3개 병진과 director 접평면 회전 2개로 구성된 물리 MITC4 kernel
- 비물리 local drilling 회전 1개에 대한 고정 수치 안정화
- 막, 굽힘, 횡전단 및 이들의 coupling
- 단일층, 균질 등방성 선형 탄성
- element set별 일정한 양의 두께와 하나의 material을 갖는 `*SHELL SECTION`
- 평면 및 매끄러운 곡면을 근사하는 유효한 사각형 mesh
- midsurface geometry와 element connectivity로부터 초기 두께방향 unit director 자동 생성
- DOF 1~6의 nodal `*BOUNDARY`와 nodal `*CLOAD`
- deterministic assembly와 기존 linear-static partition/factorization/substitution lifecycle
- HDF5 nodal displacement/reaction, shell generalized strain/resultant, in-plane stress, residual 및 energy output
- element invariant, patch, 현재 S4/S4R displacement reference 및 physics verification
## Out Of Scope
- Abaqus full compatibility 또는 Abaqus `S4`/`S4R` formulation equivalence 주장
- Abaqus reduced-integration, hourglass-control 또는 finite-membrane-strain 의미의 재현
- `S3`, `S8`, `S8R`, continuum shell, solid-shell 및 axisymmetric shell
- 다중 step과 step 간 load, boundary 또는 state propagation
- 기하비선형, 재료비선형, 좌굴, modal, dynamic, contact 및 thermal analysis 실행
- composite/laminated shell, orthotropic material, layer orientation 및 층별 integration output
- variable/nodal/distributed thickness, section offset 및 thickness stretch DOF
- explicit nodal normal/director input과 user-defined shell orientation
- shared source node에서 불연속 director를 요구하는 sharp fold, hinge 또는 shell-beam joint
- `*DLOAD`, pressure, gravity, body force, edge traction, follower load 및 current-normal load
- drilling 방향의 nodal moment를 물리 하중으로 취급하는 동작
- `S13/S23` section-point stress와 `S33` stress recovery
- Abaqus reaction, stress, strain 또는 section resultant equality를 release pass/fail로 사용하는 비교
- Abaqus, Nastran 또는 다른 reference solver 실행과 reference artifact 생성·수정·복원
## Analysis Definition
- analysis_type: single-step linear static
- kinematics: small displacement, small rotation, fixed initial geometry/director
- element: four-node bilinear quadrilateral MITC4 shell
- source_element_types: Abaqus `S4`, `S4R`
- internal_formulation: one FESA MITC4 formulation independent of source type
- nodal_dofs: global `[UX, UY, UZ, URX, URY, URZ]`
- physical_local_dofs: three translations and two director-tangent rotations per node
- numerical_local_dof: one nonphysical drilling rotation per node
- deformation_modes: membrane, bending, transverse shear, and coupling
- material_model: single-layer homogeneous isotropic linear elasticity from `E` and `nu`
- section_model: one constant positive thickness and one material per assigned element
- boundary_conditions: nodal essential constraints on global DOFs 1 through 6
- loads: nodal concentrated force/moment; drilling-direction moment excluded
- initial_director: deterministic geometry-derived positive-thickness unit vector
- units: user-consistent unit system; no unit system inferred from `.inp`
- authoritative_output: HDF5 `results.h5`
- reference_pass_fail: global translational displacement `U1/U2/U3`
- reference_warning_only: global nodal rotation `UR1/UR2/UR3`
## Input Requirements
- **FESA-REQ-LSMITC4-001** — The solver shall accept exactly one `*STEP` containing `*STATIC` and shall reject a second analysis step or a non-linear/non-static procedure with a structured unsupported diagnostic.
- **FESA-REQ-LSMITC4-002** — The semantic mapper shall map both `*ELEMENT, TYPE=S4` and `*ELEMENT, TYPE=S4R` to the same FESA MITC4 formulation without claiming Abaqus formulation equivalence.
- **FESA-REQ-LSMITC4-003** — The model and result metadata shall preserve the source element type separately from the internal `FESA-MITC4` formulation identity.
- **FESA-REQ-LSMITC4-004** — Each accepted shell element shall contain exactly four distinct source nodes in the documented bilinear quadrilateral order, and the original source element identity shall remain stable through diagnostics and results.
- **FESA-REQ-LSMITC4-005** — Each shell node shall expose global DOFs `[UX, UY, UZ, URX, URY, URZ]` in that exact order; equation IDs shall not be stored in Node or Element records.
- **FESA-REQ-LSMITC4-006** — The material subset shall accept homogeneous isotropic `*ELASTIC` data containing `E` and `nu`, require finite `E > 0` and `-1 < nu < 0.5`, and reject temperature/field dependence and unsupported material behavior.
- **FESA-REQ-LSMITC4-007** — The section subset shall accept a single-layer `*SHELL SECTION, MATERIAL=<name>` with one finite constant thickness `t > 0` per section assignment.
- **FESA-REQ-LSMITC4-008** — Every active shell element shall resolve to exactly one shell section and exactly one material; missing, conflicting, duplicate or unresolved assignments shall be model errors.
- **FESA-REQ-LSMITC4-009** — A model may contain multiple element sets, constant-thickness shell sections and isotropic materials, but every individual element shall remain single-layer and homogeneous.
- **FESA-REQ-LSMITC4-010** — Composite data, section offset, distributed/nodal thickness, explicit director/normal input and user-defined material orientation shall be rejected as unsupported rather than ignored.
- **FESA-REQ-LSMITC4-011** — The initial nodal director shall be a dimensionless unit vector in the positive thickness direction; scalar thickness shall remain a separate property and shall not be encoded in the director magnitude.
- **FESA-REQ-LSMITC4-012** — The positive element normal candidate shall be derived deterministically from the source node order and midsurface covariant tangent cross product.
- **FESA-REQ-LSMITC4-013** — At a smooth shared node, consistently oriented incident element normal candidates shall be combined by deterministic area-weighted averaging and normalized to form the common nodal director.
- **FESA-REQ-LSMITC4-014** — Nonfinite or zero normal candidates, a nonfinite or zero averaged director, and opposing incident orientations shall fail model validation; this feature does not introduce a calibrated smooth-patch angle.
- **FESA-REQ-LSMITC4-015** — A physical fold or hinge shall be represented with duplicated source nodes so each smooth shell patch owns a separate director; the solver shall not silently average a discontinuous director field.
- **FESA-REQ-LSMITC4-016** — Element geometry validation shall reject duplicate nodes, self-intersection, nonfinite coordinates, zero area, and nonpositive or nonfinite Jacobians at every formulation-required Gauss and tying location; this feature does not introduce calibrated distortion or warp thresholds.
- **FESA-REQ-LSMITC4-017** — The solver shall support nodal `*BOUNDARY` targets resolved by source node label or node set for global DOFs 1 through 6, including existing zero and nonzero prescribed-displacement semantics.
- **FESA-REQ-LSMITC4-018** — The solver shall support nodal `*CLOAD` forces on DOFs 1 through 3 and nodal moments on DOFs 4 through 6 after deterministic aggregation in global coordinates.
- **FESA-REQ-LSMITC4-019** — The aggregated nodal moment component parallel to the approved nodal director shall be rejected as `unsupported-drilling-load`; a drilling-direction moment shall not be carried only by numerical stabilization.
- **FESA-REQ-LSMITC4-020**`*DLOAD`, pressure, gravity, body force, edge traction and follower load shall remain unsupported at parser/CLI level even if a formulation-only equivalent-load kernel is later tested.
- **FESA-REQ-LSMITC4-021** — The accepted parser subset shall include the existing identity-preserving node, set, material, assembly, boundary, load and single-static-step keywords plus `*ELEMENT, TYPE=S4|S4R` and the approved single-layer `*SHELL SECTION` subset.
- **FESA-REQ-LSMITC4-022** — Identity `*PART/*ASSEMBLY/*INSTANCE` wrappers and multiple identity instances shall preserve `SourceEntityId`; instance transforms, nested assembly and dependent/independent mesh semantics shall remain unsupported unless separately approved.
- **FESA-REQ-LSMITC4-023** — Output-request keywords in the existing no-op allowlist shall not alter mandatory FESA results, and unsupported model-affecting keywords outside the allowlist shall be errors.
## Architecture and Execution Requirements
- **FESA-REQ-LSMITC4-024**`Domain` shall own parsed shell elements, material/section assignments, source identity and initial directors; `AnalysisModel` shall expose the active single-step view without copying Domain objects.
- **FESA-REQ-LSMITC4-025**`DofManager` alone shall own six-DOF node definitions, full/free equation numbering, constraint mappings, shell scatter maps and sparse-pattern ownership.
- **FESA-REQ-LSMITC4-026** — Linear-static `AnalysisState` shall own only the solution, force/residual/reaction, shell recovery and energy rows needed by this procedure and shall not preallocate nonlinear director history, iteration state, velocity or acceleration.
- **FESA-REQ-LSMITC4-027** — Element-local shell calculations shall use independent buffers and global sparse assembly shall preserve stable source-element ordering, deterministic COO ordering and fixed reduction independent of thread count.
- **FESA-REQ-LSMITC4-028** — The linear-static lifecycle shall assemble and partition stiffness, factorize `Kff`, then assemble loads, form `Ff-Kfc*dc`, substitute, reconstruct the full displacement, recover the full residual and only then commit results.
- **FESA-REQ-LSMITC4-029** — Constrained reactions and free-equilibrium evidence shall be recovered from the assembled full residual `K*d-F`; the shell feature shall not define reaction by separately summing recovered element resultants.
- **FESA-REQ-LSMITC4-030**`S4` and `S4R` source elements with identical geometry, properties, constraints and loads shall execute the same FESA MITC4 numerical path; only preserved source metadata may differ.
## Numerical Formulation Boundary Requirements
- **FESA-REQ-LSMITC4-031** — The physical MITC4 kernel shall use three translations and two director-tangent rotations per node and shall not treat the drilling rotation as a physical strain variable.
- **FESA-REQ-LSMITC4-032** — The six-DOF element embedding shall transform global nodal rotations into two director-tangent components and one director-parallel drilling component using deterministic right-handed orthonormal frames.
- **FESA-REQ-LSMITC4-033** — The drilling contribution shall be a symmetric positive numerical stabilization of the four director-parallel coordinates and shall not define a physical drilling strain or load channel.
- **FESA-REQ-LSMITC4-034** — Let `R+` be the finite strictly positive diagonal entries of the physical local stiffness belonging only to the eight director-tangent rotational DOFs. The element shall use `k_ref=min(R+)`, `k_d=10^-3*k_ref`, `K_drill_local=k_d I4`, and the documented drilling transformation `T_d`; translational diagonals shall never enter `R+`.
- **FESA-REQ-LSMITC4-035** — Drilling stabilization shall not contribute to physical membrane, bending or transverse-shear generalized strain/resultant, section-point stress, or separately reported result quantities.
- **FESA-REQ-LSMITC4-036** — An otherwise accepted element with no finite strictly positive entry in `R+` shall fail numerical validation deterministically; coefficient sweeps, plateau selection, conditioning calibration, artificial-energy ratios, and drilling-specific result datasets are outside this feature.
- **FESA-REQ-LSMITC4-037** — Source `S4R` shall not select reduced integration or Abaqus hourglass control; all accepted `S4` and `S4R` inputs shall use the single quadrature and MITC tying contract approved by the FESA formulation.
- **FESA-REQ-LSMITC4-038** — The stabilized element shall retain exactly six physical rigid-body modes within the approved normalized tolerance, preserve stiffness symmetry and coordinate-transformation energy, and have positive energy for every accepted non-rigid physical deformation mode.
## Output Requirements
- **FESA-REQ-LSMITC4-039** — The sole authoritative solver output shall be HDF5 `results.h5`; the writer shall validate and close a temporary candidate before replacing the final path and shall not leave an incomplete final file after failure.
- **FESA-REQ-LSMITC4-040** — Metadata/model output shall include schema and solver versions, source input identity, user-consistent unit label, global/local coordinate conventions, source element type, internal formulation, stable node/element identities, shell section/material identity and initial nodal director.
- **FESA-REQ-LSMITC4-041** — Every node shall have global displacement `[U1,U2,U3,UR1,UR2,UR3]` and full-residual reaction `[RF1,RF2,RF3,RM1,RM2,RM3]` rows in stable source identity order.
- **FESA-REQ-LSMITC4-042** — Every required shell integration location shall output local generalized strain components `[E11,E22,G12,K11,K22,K12,G13,G23]` with membrane/shear strain dimensionless and curvature dimension `1/length`.
- **FESA-REQ-LSMITC4-043** — The same shell locations shall output local section resultant components `[N11,N22,N12,M11,M22,M12,Q13,Q23]`, where `N` and `Q` have dimension `force/length` and `M` has dimension `force` as moment resultant per unit edge length.
- **FESA-REQ-LSMITC4-044** — Each required shell location shall output local in-plane stress `[S11,S22,S12]` at bottom, middle and top section positions with dimension `force/length^2`; `S33` shall be documented as the plane-stress assumption and `S13/S23` point stress shall not be emitted.
- **FESA-REQ-LSMITC4-045** — Result rows shall identify source element, integration/tying or recovery location, natural coordinates, section position, local frame/director and component order without averaging mismatched locations.
- **FESA-REQ-LSMITC4-046** — The output shall include free-DOF residual evidence, total force/moment equilibrium metrics and physical shell strain energy with dimension `force*length` and deterministic aggregation order; no drilling-specific stiffness, ratio or energy dataset is required.
- **FESA-REQ-LSMITC4-047** — Abaqus output requests shall neither suppress nor expand the mandatory HDF5 quantity inventory; any deterministic FESA CSV projection shall remain a debugging/review view rather than official solver output.
- **FESA-REQ-LSMITC4-048** — Nonfinite recovery values, inconsistent component/location inventory or failure to finalize required HDF5 rows shall fail the analysis without committing a partial successful state.
## Verification Requirements
- **FESA-REQ-LSMITC4-049** — Every production behavior shall follow project TDD `RED -> GREEN -> VERIFY`, have a related C++ test, and later pass MSVC x64 Debug CMake/CTest with no new warning; this requirements phase shall not run Harness or implementation validation.
- **FESA-REQ-LSMITC4-050** — Element invariant tests shall cover frame orthonormality/handedness, Jacobian sign, stiffness symmetry, coordinate-transformation energy invariance, six physical rigid modes, deformation-mode positivity and deterministic repeatability.
- **FESA-REQ-LSMITC4-051** — Normalized algebraic acceptance shall use `1e-12` for symmetry, frame orthonormality and transformation-energy invariance and `1e-10` for rigid-mode action, linear-system residual and global equilibrium unless Numerical Review approves and documents an evidence-backed scale-aware replacement before Implementation Planning.
- **FESA-REQ-LSMITC4-052** — Patch verification shall independently cover constant membrane strain/stress, pure bending, transverse shear and twist, including sign and component-order checks for generalized strain, resultant and recovered in-plane stress.
- **FESA-REQ-LSMITC4-053** — The implementation shall pass the formulation-defined element invariants and patch/manufactured tests plus the two declared S4/S4R displacement reference cases; an expanded locking, distortion or curved-shell benchmark portfolio is not an implementation-completion gate for this feature.
- **FESA-REQ-LSMITC4-054** — Geometry validation tests shall cover the exact accepted/rejected conditions defined by the formulation and I/O contract; `NR-O03` smooth-director calibration and `NR-O04` distortion/warp threshold sweeps are not required tests.
- **FESA-REQ-LSMITC4-055** — Additional pinched-cylinder, hemispherical-shell, Scordelis-Lo or mesh-convergence studies may be added later as nonblocking research or release evidence, but are not required for Implementation Planning or feature completion.
- **FESA-REQ-LSMITC4-056** — Drilling verification shall check the fixed formula in Requirement 034, symmetry, positivity, deterministic assembly, removal of the four nonphysical local drilling null modes, and exclusion from physical recovery; coefficient sweeps and drilling-energy checks are not required.
- **FESA-REQ-LSMITC4-057** — Physics verification shall check load/reaction balance, global moment balance, displacement direction, symmetry, energy positivity, result sign and consistency between assembled residual and recovered shell resultants.
## Verification Quantities
- nodal_displacement: required, global six components; `U1/U2/U3` reference pass/fail and `UR1/UR2/UR3` warning-only
- reaction: required, global six components from full residual; internal physics verification
- shell_generalized_strain: required, local eight components at documented locations
- shell_section_resultant: required, local `N/M/Q` eight components at documented locations
- stress: required, local bottom/middle/top `[S11,S22,S12]`; Abaqus equality comparison N/A
- residual: required, free-DOF and normalized global equilibrium evidence
- energy: required for the physical shell strain energy; drilling-specific energy output is not required
- modes_and_invariants: required, six physical rigid modes, symmetry, transformation invariance and positive deformation energy
## Tolerance Policy
- **FESA-REQ-LSMITC4-058** — Abaqus reference pass/fail shall apply only to matched global `U1/U2/U3` rows using `tolerance_c = 1e-9 + 1e-6 * reference_scale_c`, exactly reusing the approved B33 displacement rule.
- **FESA-REQ-LSMITC4-059**`reference_scale_c` shall be computed only from finite Abaqus values in the same model, step/frame, quantity and component group; reference values shall not be zero-clamped and row-specific relative denominators shall not replace the group scale.
- **FESA-REQ-LSMITC4-060** — The `1e-9` absolute floor is expressed in the model's user-consistent length unit for U; no additional MITC4 tolerance calibration is required.
- **FESA-REQ-LSMITC4-061** — Global `UR1/UR2/UR3` rows shall use the same component-scale formula as Requirement 058 and shall be fully reported; an exceedance emits a deterministic nonblocking warning and never changes pass/fail.
- **FESA-REQ-LSMITC4-062** — The `1e-9` UR floor is dimensionless. No separate UR large-error or drilling-energy threshold is required.
- **FESA-REQ-LSMITC4-063** — Missing, extra, duplicate, nonfinite, schema-mismatched or source-identity-mismatched rows shall fail artifact/schema validation before numeric tolerance evaluation for both U and UR inventories.
- **FESA-REQ-LSMITC4-064** — The comparison report shall record each U/UR row decision, maximum absolute error, component-scale normalized error, RMS error, vector-norm error and worst source row/component; nonblocking UR warnings shall not be omitted from an otherwise passing report.
## Reference Artifact Requirements
The approved lightweight inventory uses the existing S4 and S4R paths below. These files
remain read-only; their names are identities, not canonical/legacy-policy decisions.
- **FESA-REQ-LSMITC4-065** — The S4 case shall use `reference/shell/shell.inp` and `reference/shell/shell displacements.csv` without creating, renaming, rewriting or repairing either file.
- **FESA-REQ-LSMITC4-066** — The S4R case shall use `reference/shellR/shellR.inp` and `reference/shellR/shellR displacements.csv` without creating, renaming, rewriting or repairing either file.
- **FESA-REQ-LSMITC4-067** — Reference readiness requires only the declared input and required displacement CSV, FESA `results.h5`, deterministic source-node/component mapping, and Requirements 058-063 tolerance/precheck rules. README, `metadata.json`, canonical naming, provenance, Abaqus version, duplicated model semantics, and a schema version are not required gates; a present `metadata.json` is optional read-only context.
- **FESA-REQ-LSMITC4-068** — Artifact validation shall require unique finite displacement rows and deterministic source-node/component identity before comparison; it shall not attempt to establish Abaqus internal formulation equivalence.
- **FESA-REQ-LSMITC4-069** — The two declared cases satisfy the required source-label coverage: `reference/shell/` covers S4 and `reference/shellR/` covers S4R. No expanded reference portfolio is required for this feature.
- **FESA-REQ-LSMITC4-070** — Reference verification shall compare FESA HDF5 global nodal displacement rows directly against Abaqus displacement CSV rows by model, step/frame, source node and component identity; a FESA-generated CSV view shall not become the authoritative comparison source.
- **FESA-REQ-LSMITC4-071** — Abaqus reaction, stress, strain and shell force/moment output may be retained as review evidence if present but shall not change the approved `U1/U2/U3` pass/fail boundary or become an undeclared equality gate.
- **FESA-REQ-LSMITC4-072** — FESA agents shall not execute Abaqus or another reference solver and shall not generate, modify, restore or normalize reference artifacts during requirements, research, formulation, implementation or verification unless a later phase explicitly authorizes that operation.
## Requirement Verification Matrix
Each range row below applies its verification method and acceptance criteria to every
individual requirement ID in that inclusive range; the ranges cover `001` through `072`
without gaps or overlap.
| id range | requirement theme | category | source | priority | verification method | acceptance criteria | tolerance/decision owner | downstream agents | status |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `001` | Single linear-static step | analysis | User approval; PRD/ADR linear-static lifecycle | must | Parser/semantic negative and CLI integration tests | One supported static step runs; other procedures or a second step fail deterministically | Exact procedure inventory | I/O Definition; Implementation Planning | approved |
| `002-004` | `S4`/`S4R` mapping and identity | input/model | User approval | must | Parser/semantic/HDF5 metadata tests | Both source types map to one MITC4 path and preserve distinct source metadata and four-node identity | Exact element/type identity | I/O Definition; Implementation Planning | approved |
| `005` | Six global nodal DOFs | model | User approval; project DOF convention | must | DofManager and HDF5 schema tests | Exact component order and no distributed equation ownership | Exact ordering | Formulation; I/O Definition; Implementation Planning | approved |
| `006-010` | Isotropic material and single-layer section | input/model | User approval | must | Parser, mapping and validation tests | Valid `E,nu,t` resolve once per element; excluded section/material meanings fail | Exact inequalities; finite values | Research; I/O Definition; Implementation Planning | approved |
| `011-016` | Initial director and geometry validity | geometry | User approval; MITC director kinematics | must | Geometry/unit/property-based tests | Deterministic unit directors for supported valid meshes; explicitly invalid mappings fail | Exact formulation/I/O predicates; no `NR-O03`/`NR-O04` calibration gate | Formulation; I/O Definition; Implementation Planning | approved |
| `017-020` | Boundary and nodal-load subset | input/load | User approval | must | Parser/semantic/load tests | Global BC/CLOAD works; director-parallel moment and distributed loads fail | Exact-zero/projection rule from Formulation and I/O | Formulation; I/O Definition; Implementation Planning | approved |
| `021-023` | Parser subset, wrappers and no-op policy | input | User approval; ADR-003/013/018 | must | Parser diagnostic and semantic identity tests | Only approved meanings affect Domain; excluded meanings fail closed | Exact keyword/diagnostic inventory | I/O Definition; Implementation Planning | approved |
| `024-030` | Ownership, deterministic assembly and linear-static execution | architecture/execution | PRD; ADR-004/007/008/009/016/017 | must | Unit, orchestration and repeated-thread-count tests | Ownership boundaries, event order, residual reaction and deterministic bytes/rows match | `1e-12` deterministic numeric target where applicable | Numerical Review; Implementation Planning | approved |
| `031-038` | 5-DOF physics embedded in 6-DOF with fixed drilling stabilization | numerical boundary | User approval; MITC literature and thesis 6-DOF discussion | must | Formulation review, invariant and rank tests | Exact `10^-3` positive rotational-diagonal rule; physical outputs exclude drilling | Fixed by Requirements 033-036 | Formulation; Numerical Review; Implementation Planning | approved |
| `039-048` | Mandatory HDF5 output and failure atomicity | output | User approval; ADR-005/016/018 | must | Recovery, schema, identity, nonfinite and atomicity tests | Every quantity/location/unit/identity exists; failure commits no partial success | Exact component/location inventory; I/O Definition owns schema | Formulation; I/O Definition; Implementation Planning | approved |
| `049-057` | TDD, invariants, patch, declared references and physics | verification | User approval; shell formulation evidence; project process | must | CTest evidence, analytical/patch tests, two reference cases and physics review | Required tests pass; removed calibration/portfolio checks are not reintroduced | `1e-12` symmetry/frame; `1e-10` rigid/residual | Numerical Review; Implementation Planning | approved |
| `058-060` | Translational displacement pass/fail tolerance | tolerance | User approval; B33 baseline | must | Comparator unit/integration tests and report review | Every matched U row uses `1e-9 + 1e-6*reference_scale_c` without clamp/omission | Fixed by Requirements 058-060 | Reference Verification | approved |
| `061-062` | Rotational warning-only comparison | tolerance/warning | User approval; B33 baseline | must | Comparator/diagnostic tests and report review | UR never changes pass/fail; same mixed-tolerance exceedance emits a deterministic warning | Fixed by Requirements 061-062 | Reference Verification | approved |
| `063-064` | Row/schema failure and report completeness | reference verification | User approval; ADR-005/014/018 | must | Negative comparator and report-schema tests | Invalid inventory fails before numeric comparison; all U/UR metrics remain visible | No ignored invalid rows | I/O Definition; Reference Verification | approved |
| `065-068` | Exact S4/S4R reference-case inventory and row validity | reference | User declaration; ADR-019 | must | Read-only inventory and source-row/component precheck | Four declared paths exist; required rows are unique, finite and deterministically mapped | Requirements `058-063` | Reference Model; Reference Verification | approved |
| `069-071` | S4/S4R coverage and displacement-only comparison | reference | User approval | must | HDF5-to-CSV comparison | Declared S4/S4R cases; only U blocks and UR only warns | Requirements `058-064` | Reference Verification; Physics Evaluation | approved |
| `072` | Reference solver/artifact immutability | governance | User/project policy; ADR-010 | must | Process audit and Git diff | No unapproved execution or artifact mutation | Exact zero mutations | All downstream agents | approved |
## Open Questions and Required Downstream Decisions
No user or numerical calibration decision remains before Implementation Planning. Formulation
shall retain exact quadrature, tying interpolation, local-axis, sign and recovery definitions.
Future geometric-nonlinear execution remains separately unauthorized even though its residual
and tangent derivation may remain in the formulation document.
## Downstream Handoff
### Research Agent
- Establish source-backed MITC4 linear kinematics, tying, quadrature, shear correction and benchmark applicability.
- Record the thesis drilling rule and the approved dimensional restriction to positive physical rotational diagonals; do not reopen coefficient calibration.
- Preserve nodal-director and geometry evidence as implementation guidance without creating `NR-O03`/`NR-O04` calibration gates.
### Formulation Agent
- Revise `docs/formulations/mitc4-shell-formulation.md` to align with global 6-DOF input/output and a physical 5-DOF MITC4 kernel plus numerical drilling embedding.
- Keep current-product equations strictly linear static; retain geometric-nonlinear residual/tangent only as clearly separated future formulation.
- Define local frames, transformations, generalized component order, quadrature/tying, stress/resultant recovery and consistent units/signs.
- Do not introduce distributed-load product support or make `S4R` select reduced integration.
### Numerical Review Agent
- Independently review the revised formulation for dimensions, rigid modes, rank, symmetry, invariance, Jacobian/director handling and separation of fixed drilling stabilization from physical recovery.
- Treat drilling calibration/energy-ratio checks and `NR-O03`/`NR-O04` as removed scope, not missing evidence.
### I/O Definition Agent
- Define the exact Abaqus keyword/data subset for `S4`, `S4R`, single-layer `*SHELL SECTION`, material, BC and CLOAD semantics.
- Define source identity, auto-director data, unsupported-drilling-load projection, diagnostics and exact HDF5 dataset/row schemas without drilling-specific result datasets.
- Preserve source element type separately from FESA formulation and define bottom/middle/top stress location identity.
### Reference Model Agent
- Record the exact existing S4 and S4R input/displacement CSV paths from Requirements 065-066 and keep them read-only.
- Define only the HDF5-to-CSV source-node/component projection and the already approved B33 mixed tolerance; do not add bundle administration or portfolio gates.
### Implementation Planning Agent
- Do not start until Research, revised Formulation, Numerical Review, I/O and lightweight Reference Model inventory are mutually consistent.
- Trace every `must` requirement to RED/GREEN/VERIFY tests and preserve current solver ownership, deterministic assembly and failure-atomic HDF5 boundaries.
- Use the project Harness skill to propose self-contained implementation Steps for user approval, then write only the approved phase-planning files; do not execute Harness without a separate explicit request.
- Include tests for source-type mapping, auto directors, fixed drilling rank/separation, required recovery quantities, row failures and U-versus-UR comparison behavior; exclude coefficient sweeps, drilling energy and `NR-O03`/`NR-O04`.
@@ -0,0 +1,236 @@
# Linear Static MITC4 Shell Research Brief
## Metadata
- feature_id: `linear-static-mitc4-shell`
- source_requirement: `docs/requirements/linear-static-mitc4-shell.md`
- status: `approved`
- owner_agent: `research-agent`
- date: `2026-08-12`
- product_scope: small-displacement, small-rotation, single-step linear static analysis
- evidence_route: local papers in `docs/reference-papers/MITC4/`, the configured FEM wiki, original peer-reviewed papers, and official Abaqus documentation
- reference_inventory_state: existing read-only S4 case at `reference/shell/` and S4R case at `reference/shellR/`; exact comparison paths are fixed by the approved requirements
- source_policy: each external claim below is assigned a reliability tier; FESA decisions are labeled `Project contract`, and derived recommendations are labeled `Inference` or `Research recommendation`
This brief supplies evidence to the Formulation, Numerical Review, I/O Definition, and
Reference Model gates. It does not approve the existing formulation draft, finalize a C++
design, run a reference solver, create reference results, or claim that FESA MITC4 is
formulation-equivalent to Abaqus S4 or S4R.
## Research Questions
1. What kinematics and degrees of freedom define the original four-node continuum-mechanics-based MITC4 element in the linear regime?
2. How are the transverse shear components tied, and what evidence supports the quadrature and homogeneous-isotropic section behavior?
3. How can the physical five-DOF kernel be exposed through six global rotational components without treating drilling rotation as a physical MITC4 strain?
4. What evidence and dimensional restriction support the approved fixed drilling stabilization without turning it into a physical strain or load channel?
5. What evidence supports connectivity-derived thickness directions, nodal-normal smoothing, local tangent frames, and geometry rejection?
6. What may and may not be inferred when Abaqus S4 and S4R input types are both mapped to one FESA MITC4 formulation?
7. Which element-level checks and the declared S4/S4R source-solver cases fit the approved implementation scope?
## Source Reliability Tiers
- **Tier 1:** original peer-reviewed formulation or evaluation paper, authoritative standards benchmark, or official solver theory/user documentation.
- **Tier 2:** peer-reviewed implementation summary, graduate thesis, or technical review whose formulas and numerical results are useful but require confirmation against Tier 1 evidence before becoming a FESA numerical constant.
- **Tier 3:** derived wiki synthesis or informal study notes. These are navigation and terminology aids, not sole authority for a numerical decision.
- **Project contract:** approved FESA requirement or architecture decision. It defines product meaning but is not external validation evidence.
## Source Inventory
| id | source | reliability | applicable evidence | limits |
| --- | --- | --- | --- | --- |
| S1 | E. N. Dvorkin and K.-J. Bathe, “A Continuum Mechanics Based Four-Node Shell Element for General Non-linear Analysis,” *Engineering Computations* 1 (1984) 7788, DOI `10.1108/eb023562`; local transcription `docs/reference-papers/MITC4/AContinuumMechanicsBasedFourNodeShell/`; [author-hosted paper](https://web.mit.edu/kjb/www/Publications_Prior_to_1998/A_Continuum_Mechanics_Based_Four-Node_Shell_Element_for_General_Nonlinear_Analysis.pdf) | Tier 1 | original director kinematics, five physical DOFs, assumed transverse shear field, plane-stress degeneration, quadrature used by the authors, patch and shell benchmark results | nonlinear capability in the paper does not expand the approved FESA linear-static product scope |
| S2 | E. Dvořáková and B. Patzák, “Four-Node Quadrilateral Shell Element MITC4,” *Applied Mechanics and Materials* 825 (2016) 99106, DOI `10.4028/www.scientific.net/AMM.825.99`; local transcription `docs/reference-papers/MITC4/FourNodeQuadrilateralShellElementMITC4/` | Tier 2 | compact 20-DOF ordering, tying equations and OOFEM implementation summary, patch-test classes, ScordelisLo convergence | secondary implementation paper; one OCR component label in the local transcription appears inconsistent and must not override the tensor equations |
| S3 | 이희준, *유한요소해석법을 이용한 쉘 구조물의 동적 좌굴 해석*, 인하대학교 석사학위논문 (2012); local transcription `docs/reference-papers/MITC4/유한요소해석법을이용한쉘구조물의동적좌굴해석/` | Tier 2 | five-to-six DOF transformation example, printed drilling diagonal rule, `5/6` shear factor, `2x2x2` integration, patch, pinched-cylinder, and hemispherical examples | thesis-specific implementation; the drilling rule mixes stiffness diagonal families unless a dimensional restriction is added; nonlinear/dynamic sections are out of current product scope |
| S4 | P.-S. Lee and H.-C. Noh, “On the Finite Element Analysis of Shell Structures”; local transcription `docs/reference-papers/MITC4/쉘구조물의유한요소해석에대하여/` | Tier 2 | locking classes, shell asymptotic behavior, need for a benchmark portfolio and field/error evidence | review evidence; it does not define FESA constants or I/O semantics |
| S5 | K.-J. Bathe, A. Iosilevich, and D. Chapelle, “An Evaluation of the MITC Shell Elements,” *Computers & Structures* 75 (2000) 130; [author-hosted paper](https://web.mit.edu/kjb/www/Principal_Publications/An_Evaluation_of_the_MITC_Shell_Elements.pdf) | Tier 1 | discriminating shell tests across different asymptotic behaviors; warning against judging a general shell element from one response value | evaluates a family and problem portfolio, not the exact future FESA implementation |
| S6 | Y. Ko, P.-S. Lee, and K.-J. Bathe, “The MITC4+ Shell Element and Its Performance,” *Computers & Structures* 169 (2016) 5768, DOI `10.1016/j.compstruc.2016.03.002`; [publisher record](https://www.sciencedirect.com/science/article/pii/S0045794916300487) | Tier 1 | original MITC4 leaves membrane strain unmodified; distorted curved meshes can exhibit membrane locking | MITC4+ is a different formulation and is not approved for FESA in this feature |
| S7 | Y. Ko, K.-J. Bathe, and X. Zhang, “Continuum Mechanics-Based Shell Elements with Six Degrees of Freedom at Each Node—the MITC4/D and MITC4+/D Elements,” *Computers & Structures* 308 (2025) 107622, DOI `10.1016/j.compstruc.2024.107622`; [publisher record](https://www.sciencedirect.com/science/article/pii/S0045794924003511) | Tier 1 | a physical drilling-rotation extension can improve membrane behavior and shell/beam or intersecting-shell coupling without an artificial factor | MITC4/D is not the approved “five physical DOFs plus numerical drilling stabilization” FESA element |
| S8 | T. J. R. Hughes and F. Brezzi, “On Drilling Degrees of Freedom,” *CMAME* 72 (1989) 105121, DOI `10.1016/0045-7825(89)90124-2`; [publisher record](https://www.sciencedirect.com/science/article/pii/0045782589901242) | Tier 1 | independent-rotation variational formulations exist for physical membrane drilling DOFs | not evidence that a diagonal numerical penalty is a physical strain or may carry drilling load |
| S9 | Abaqus, [Shell Section Behavior](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEELMRefMap/simaelm-c-shellsectionbehavior.htm) and [Shear Flexible Small-Strain Shell Elements](https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-shearflexshells.htm) | Tier 1 | homogeneous-shell transverse shear stiffness, small drill penalty proportional to transverse shear stiffness, and a dimensionally consistent area/thickness scaling precedent | Abaqus does not publish a FESA coefficient and its element formulation must not be copied by implication |
| S10 | Abaqus, [Defining the Initial Geometry of Conventional Shell Elements](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEELMRefMap/simaelm-c-shellgeometry.htm) | Tier 1 | connectivity/midsurface normals, order-independent grouping, 20-degree normal-averaging precedent, and coarse-mesh/fold cautions | 20 degrees is an Abaqus modeling heuristic, not a universal mathematical smoothness threshold; Abaqus permits multiple/user normals that FESA excludes |
| S11 | Abaqus, [Finite-Strain Shell Element Formulation](https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-finitestrainshells.htm) and [Choosing a Shell Element](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-c-shellelem.htm) | Tier 1 | S4 is fully integrated, S4R is reduced-integrated, their membrane treatments differ, and both use drill control | Abaqus finite-strain and hourglass algorithms are outside the FESA MITC4 identity and current small-deformation scope |
| S12 | Abaqus, [LE3 Hemispherical Shell with Point Loads](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEBMKRefMap/simabmk-c-le3.htm) and [The Pinched Cylinder Problem](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEBMKRefMap/simabmk-c-pinchcyl.htm) | Tier 1 | authoritative point-load-compatible curved-shell benchmark definitions, target displacements, S4/S4R convergence, and distorted-mesh evidence | official input decks contain semantics such as explicit normals or symmetry shorthand that require an approved FESA-subset adaptation |
| S13 | Abaqus, [Shell Thickness and Section Points](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEGSARefMap/simagsa-c-shlthick.htm) and [Whole and Partial Model Variables](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEOUTRefMap/simaout-c-std-wholeandpartialmodelvariables.htm) | Tier 1 | bottom/middle/top linear-elastic stress recovery precedent and separate reporting of artificial energy that includes drill constraints | no drill-specific acceptable artificial-energy percentage is stated |
| S14 | configured FEM wiki pages `[[MITC4 Shell Element]]`, `[[MITC Shell Kinematics]]`, `[[Assumed Transverse Shear Strain Interpolation]]`, `[[Shell Locking Phenomenon]]`, `[[Shell Element Benchmark Testing]]`, and `[[Scordelis-Lo Shell Benchmark]]` | Tier 3 synthesis | navigation between local raw sources; locking, tying, and benchmark terminology | key claims are cited to S1S13 rather than relying on the wiki alone |
| P1 | `docs/requirements/linear-static-mitc4-shell.md`, `docs/PRD.md`, `docs/ARCHITECTURE.md`, and `docs/ADR.md` | Project contract | exact FESA scope, six-global-DOF interface, source identity, output, verification, lifecycle, and reference immutability | does not prove numerical correctness by itself |
The informal `docs/reference-papers/MITC4/MITC공부/` notes were used only as a
navigation aid. No key numerical decision relies on them.
## Theory Summary
### Continuum-degenerated kinematics and physical DOFs
- **F-01 — Verified, Tier 1 (S1):** MITC4 represents a point through the shell thickness with bilinear midsurface interpolation plus a thickness coordinate multiplying nodal thickness and nodal director vectors. In compact form,
`X(xi,eta,zeta) = sum(N_i X_i) + zeta/2 sum(t_i N_i n_i)`.
- **F-02 — Verified, Tier 1 (S1), plus Project contract (P1):** The original director need not be exactly normal to an individual element midsurface. FESA deliberately narrows this freedom: its initial unit thickness director is generated from consistently oriented connectivity normals and thickness remains a separate positive scalar.
- **F-03 — Verified, Tier 1/2 (S1/S2):** The physical nodal variables are three midsurface translations and two rotations in the director tangent plane, giving 20 physical element DOFs. For a right-handed nodal frame `(t1,t2,n)`, the linear director increment has the form `delta_n = -alpha t2 + beta t1`.
- **F-04 — Project-contract consequence:** Global `[URX,URY,URZ]` is an interface vector. Only its projections onto `t1` and `t2` enter the physical MITC4 strains. The projection along `n` is a numerical drilling coordinate and must not appear in membrane, bending, transverse-shear, resultant, or section-point stress output.
### Assumed transverse shear interpolation
- **F-05 — Verified, Tier 1/2 (S1/S2):** Direct bilinear displacement/director interpolation cannot make transverse shear vanish throughout a thin element under constant bending, producing parasitic shear energy and shear locking.
- **F-06 — Verified, Tier 1/2 (S1/S2):** MITC4 evaluates the covariant shear components at the four edge-midpoint tying locations and interpolates them as
`e13_hat(xi,eta) = 0.5(1+eta)e13_A + 0.5(1-eta)e13_C` and
`e23_hat(xi,eta) = 0.5(1+xi)e23_D + 0.5(1-xi)e23_B`, with the tied covariant components transformed consistently to the local Cartesian shell basis.
- **F-07 — Verified, Tier 1 (S1):** The original elastic examples used `2x2` Gauss integration on the midsurface and two Gauss points through the thickness. The authors reported the expected six rigid-body modes and no spurious zero-energy modes in the undistorted and distorted element checks they performed.
- **F-08 — Research recommendation from F-06/F-07:** Formulation should evaluate standard membrane/bending terms and MITC tied shear terms on one common, documented `2x2` midsurface quadrature path for both source S4 and S4R. This is evidence-backed as a candidate, but the Formulation and Numerical Review gates must still re-derive the exact `B` rows, Jacobian use, and rank.
### Homogeneous isotropic section behavior and recovery
- **F-09 — Verified, Tier 1/2 (S1/S3/S9):** The shell constitutive law is formed in a local orthonormal frame under a through-thickness normal-stress condition (`sigma33=0`). For the approved homogeneous isotropic layer, `G=E/[2(1+nu)]`; a `5/6` transverse-shear correction is a documented homogeneous rectangular-section precedent.
- **F-10 — Inference from linear section kinematics:** With midsurface membrane strain `epsilon0`, curvature `kappa`, and thickness coordinate `z`, in-plane strain and stress are linear through thickness. Under one candidate curvature convention this is `epsilon(z)=epsilon0+z kappa`, `sigma(z)=Cps epsilon(z)`; Formulation must fix the final sign against its director and positive-face convention. Bottom, middle, and top in-plane stresses are then direct evaluations at `z=-t/2,0,+t/2`, while section resultants follow the familiar `A=Cps t` and `D=Cps t^3/12` integrals for a centered homogeneous layer.
- **F-11 — Verified precedent, Tier 1 (S13):** Official Abaqus guidance likewise treats bottom/middle/top as the default linear-elastic shell stress locations and states that three section points are exact for a linear through-thickness problem. This supports location choice, not Abaqus formulation equivalence.
### Six-global-DOF embedding and drilling stabilization
- **F-12 — Verified transformation, Tier 2 (S3):** The nodal rotation projection can be written `[alpha,beta,gamma]^T = [t1^T;t2^T;n^T] theta_global`, followed by `K_global=T^T K_local T`. An orthonormal right-handed frame preserves virtual work and strain energy.
- **F-12A — Kinematic inference requiring explicit review:** A physical rigid rotation of a five-DOF director shell is represented by rigid midsurface translations plus the tangent-plane change of each director; the director-parallel drilling coordinate is a gauge and can be zero. A rigid-mode test must construct those director changes explicitly. Blindly assigning the full spatial rotation vector, including its normal projection, to every six-DOF shell rotation would excite the numerical penalty and test a different quantity.
- **F-13 — Verified thesis implementation, Tier 2 (S3):** The thesis fills each otherwise zero local drilling diagonal with `d=10^-3 min(Kii)`. It does not provide a dimensional restriction on which diagonals enter the minimum.
- **F-14 — Dimensional inference and approved restriction:** Translational stiffness diagonals have units `force/length`, while rotational stiffness diagonals have units `force*length`. Taking a minimum across all of them is not unit invariant. P1 therefore applies the thesis coefficient only to finite strictly positive physical director-tangent rotational diagonals, all of which have `force*length` units.
- **F-15 — Verified precedent, Tier 1 (S9):** Abaqus states that a small drill penalty is proportional to transverse shear stiffness. Its small-strain shell theory presents a rotational constraint scale of the family `G h A_node / (1 + q A_node/h^2)`, multiplied by a small dimensionless factor, with `q=2.5e-5`. The base quantity has units `force*length` and transitions toward a thickness-cubed scale for thin shells. Abaqus says the small factor was selected numerically but does not disclose a general FESA-ready value.
- **F-16 — Historical alternatives, not current gates:** A transverse-shear/area transition scale and `D_iso=E t^3/[12(1-nu^2)]` are dimensionally compatible alternatives. The project has instead approved the implementation-local statistic `k_ref=min(R+)`, where `R+` contains only positive physical rotational diagonals; no comparison among these alternatives is required in this feature.
- **F-17 — Approved project decision with evidence limit:** P1 fixes `k_d=10^-3 k_ref` and `K_drill_local=k_d I4`. The `10^-3` value is a project choice informed by S3, not a claim of universal optimality or Abaqus equivalence. Coefficient sweeps, plateau/conditioning calibration, and response-sensitivity studies are outside the approved implementation gate.
- **F-18 — Scope consequence:** S13 supplies no drill-specific acceptable artificial-energy percentage. P1 therefore defines no `E_drill/E_physical` threshold and requires no drilling stiffness, ratio, or energy result dataset. This absence is an explicit scope decision, not missing numerical evidence.
- **F-19 — Verified boundary, Tier 1 (S7/S8):** MITC4/D and independent-rotation membrane formulations give drilling rotation physical/variational content. FESA's approved diagonal regularization is not MITC4/D, must not carry a director-parallel applied moment, and does not justify intersecting-shell, sharp-fold, hinge, or shellbeam drilling transfer.
### Initial director, tangent frame, and geometry evidence
- **F-20 — Verified precedent, Tier 1 (S10):** Abaqus computes normals from adjacent shell midsurfaces and uses order-independent grouping; its default averaging heuristic requires all normals in a smooth group to remain within 20 degrees. The manual warns that a coarse mesh can create a false fold or smooth a real fold.
- **F-21 — Project contract, informed by F-20:** FESA uses one deterministic area-weighted unit director at a smooth shared node and fails discontinuous/opposed incident directions, requiring duplicated source nodes at a physical fold. It does not adopt Abaqus's ability to retain multiple normals at one source node.
- **F-22 — Evidence limit and project decision:** The 20-degree value is an Abaqus modeling heuristic, not a universal MITC4 constant. P1 does not adopt or calibrate a smooth-patch angle in this feature; `NR-O03` is removed. Supported inputs still require finite nonzero, consistently oriented incident normals.
- **F-23 — Research recommendation:** Build each tangent frame by selecting the global basis least aligned with the unit director, projecting or crossing it into the tangent plane, normalizing, and forming the second tangent by a cross product. This avoids the near-parallel fixed-axis singularity seen in simpler source examples and is deterministic, but the exact sign/axis rule belongs in Formulation.
- **F-24 — Evidence limit and project decision:** No reviewed source establishes a universal distortion/warp cutoff. P1 therefore requires only the formulation/I/O finite, nonzero-area, topology, and positive-Jacobian predicates and removes `NR-O04`; a distortion/warp threshold sweep is not an implementation-readiness gate.
### Abaqus S4/S4R mapping and comparison meaning
- **F-25 — Verified, Tier 1 (S11):** Abaqus S4 is fully integrated, while S4R uses reduced integration and associated control; the membrane treatment differs. S4 and S4R therefore do not identify the original DvorkinBathe MITC4 formulation.
- **F-26 — Project-contract conclusion:** Both source labels may select the single FESA MITC4 path only because P1 explicitly defines that input mapping. Source type remains metadata. The mapping is not evidence that the Abaqus elements or their recovered rotations, forces, stresses, integration points, or stabilization energies are equal to FESA's.
- **F-27 — Verification consequence:** Abaqus displacement rows are useful source-solver evidence for the same physical model, especially across mesh refinement. Only global `U1/U2/U3` is blocking under P1; large `UR1/UR2/UR3` differences are warning-only because the drilling and rotation representations are not equivalent.
### Known accuracy limits of original MITC4
- **F-28 — Verified, Tier 1 (S6):** Original MITC4 specifically treats transverse shear locking but leaves membrane strains unmodified. Distorted elements on curved geometries can therefore suffer membrane locking; MITC4+ was introduced to address that limitation.
- **F-29 — Verified, Tier 1/2 (S1/S4/S5):** Shell behavior depends on geometry, boundary conditions, thickness, asymptotic class, and mesh. A patch test or one point displacement cannot establish general robustness. Convergence sequences, distortion, curvature, field/resultant behavior, equilibrium, and energy must be examined together.
## Candidate Benchmarks
This catalog records useful future evidence, not the minimum implementation-completion
portfolio. The approved blocking source-solver cases are only the existing S4 and S4R
input/displacement pairs named in P1. Published values below do not create additional gates.
| benchmark_id | source/evidence | configuration and target quantities | verifies | does not verify / adaptation limit |
| --- | --- | --- | --- | --- |
| `MITC4-RIGID-RANK` | S1 plus P1 | free valid planar, rotated, and smoothly curved elements; six physical rigid motions, `K r`, symmetry, rank, and positive non-rigid energy | physical null modes, transform, drilling regularization rank, energy invariance | global supports, curved-shell accuracy, Abaqus agreement |
| `MITC4-MEMBRANE-PATCH` | S1/S2/S5 | independent constant `E11`, `E22`, and `G12` states on regular and distorted multi-element patches; generalized strain, `N`, stress, residual | membrane completeness, signs, component order, stress/resultant recovery | bending, shear locking, curved membrane locking |
| `MITC4-BENDING-PATCH` | S1/S2/S3 | constant curvature in both principal directions for thick and very thin thicknesses; rotations, `K11/K22`, `M`, bottom/top stress | bending consistency, thickness-cubed scaling, stress sign | complex curved membrane response |
| `MITC4-SHEAR-PATCH` | S1/S2/S3 | zero-rotation constant transverse shear states in each local direction; `G13/G23` and `Q13/Q23` | MITC shear tying, `5/6` section factor, component signs | thin bending convergence by itself |
| `MITC4-TWIST-PATCH` | S1/S2/S3 | constant twist on thin and thick patches; `K12`, `M12`, displacement/rotation symmetry | mixed bending terms and tying consistency | S3 reports thick-case sensitivity; it cannot set a universal accuracy tolerance |
| `MITC4-THIN-THICK-CANTILEVER` | S1 | nodal tip force or moment on regular and intentionally distorted meshes over documented `t/L` sequence; tip displacement/rotation, reaction, resultants, energy | shear-locking trend, thick response, distortion, equilibrium | curved membrane locking and general shell behavior |
| `MITC4-QUADRATURE-CROSSCHECK` | S1 plus inference | one constant-property planar element; `2x2` stiffness versus independently integrated high-order/analytical section result; tying-point shear values | quadrature, Jacobian, `B` rows, stiffness symmetry | benchmark validation or curved geometry |
| `MITC4-PINCHED-CYLINDER` | S1/S3/S12 | thin cylinder with end diaphragms and concentrated pinching load; radial displacement and mesh convergence. S12 cites `1.825e-5`; S3 uses `L=600`, `R=300`, `t=3`, `E=3e6`, `nu=0.3`, `P=1` and reports `1.8248e-5` | nodal-load-compatible inextensional bending, complex membrane response, curvature, convergence, regular/irregular mesh sensitivity | one response point cannot certify stresses or drilling; diaphragm semantics must fit approved BCs without rigid elements |
| `MITC4-NAFEMS-LE3` | S12 | radius-10 hemispherical shell, `t=0.04`, `E=68.25 GPa`, `nu=0.3`, opposite radial `2 kN` point loads; target `Ux(A)=185 mm`; S4 and S4R official cases exist | positive Gaussian curvature, point load, symmetry, automatic directors, S4/S4R source-label coverage candidate | official decks use explicit nodal normals and shorthand symmetry/perturbation semantics; FESA adaptation and mesh refinement are required, and the target is not a tolerance |
| `MITC4-SCORDELIS-LO` | S1/S2/S4/S5 | quarter cylindrical roof, mesh convergence of free-edge displacement and preferably field/resultant evidence | mixed-dominated shell behavior and classical convergence comparison | original dead-weight loading is outside P1; only a documented deterministic equivalent nodal CLOAD version may enter FESA product tests |
| `MITC4-DIRECTOR-GEOMETRY` | S10 plus P1 | connectivity reversal, opposed normals, bow-tie, inversion, degeneracy, and Gauss/tying Jacobian checks | deterministic director generation and fail-closed basic geometry policy | `NR-O03`/`NR-O04` calibration and physical shell accuracy |
| `MITC4-DRILL-FIXED` | S3 plus P1 | exact positive physical-rotational-diagonal selection, fixed `10^-3` factor, free-element rank, symmetry, and physical-recovery exclusion | implementation of the approved numerical regularization | coefficient optimality, sensitivity plateau, or energy ratio |
| `MITC4-S4-S4R-SAME-PATH` | S11 plus P1 | identical supported model written once as S4 and once as S4R; FESA HDF5 numeric rows equal while source metadata differs | approved semantic mapping and deterministic internal path | Abaqus S4/S4R equivalence; their reference displacements are expected to differ on finite meshes |
The local S3 hemispherical example with target displacement `0.0924` and its reported
mesh convergence is useful corroborating evidence, but NAFEMS LE3 has stronger benchmark
provenance and a directly accessible official S4/S4R definition. The two hemispherical
problems must not be mixed.
## Verification Relevance
- **Element code verification:** rigid modes, stiffness symmetry, tangent-frame orthonormality, transformation-energy invariance, quadrature cross-checks, individual tying values, and patch fields isolate algebraic mistakes before a source-solver comparison.
- **Locking and convergence:** thin/thick cantilevers, pinched cylinder, LE3, and ScordelisLo remain useful future studies. They are not additional completion gates for the approved two-case implementation scope.
- **Geometry verification:** tests must evaluate every formulation-required Gauss and tying location, not only the element center. Director smoothing and Jacobian quality are separate checks; a smooth director cannot rescue a self-intersecting or inverted mapping.
- **Drilling verification:** verify the fixed formula, dimensional family, symmetry, positivity, four-mode regularization, and absence from physical `E/N/M/Q/stress` recovery. Sensitivity and artificial-energy evidence are excluded.
- **Reference comparison:** the declared S4 and S4R cases test source mapping and global displacement. They cannot prove formulation identity. Missing, extra, duplicate, nonfinite, or source-node/component-mismatched required rows fail before P1's mixed displacement tolerance is evaluated.
- **Physics sanity:** force and global moment balance, symmetry, displacement direction, reaction sign, positive physical energy, free residual, and consistency of recovered resultants remain mandatory even when all reference displacement rows pass.
- **Validation boundary:** the identified sources provide analytical, benchmark, and source-solver verification. No experimental dataset was established for the approved homogeneous linear-static feature; physical validation remains N/A unless separately added.
## Applicability Limits
- **analysis:** one small-displacement, small-rotation linear-static step. Nonlinear tangent, buckling, dynamics, finite rotation, and follower-load results present in S1/S3 are research background only.
- **element:** original four-node MITC4 transverse-shear treatment with unmodified membrane strain, not MITC4+, MITC4/D, Abaqus S4, or Abaqus S4R.
- **degrees of freedom:** five physical director-shell DOFs embedded in six global DOFs. Drilling is numerical regularization, not a physical load/result channel.
- **geometry:** smooth shell patches with one auto-generated director per source node. Explicit normals, discontinuous shared-node normals, physical folds without duplicate nodes, hinges, intersections, and shellbeam joints are excluded.
- **material/section:** one centered homogeneous isotropic linear-elastic layer with constant positive thickness. No composites, offsets, orthotropy, plasticity, field dependence, or thickness stretch.
- **loads:** nodal global forces and non-drilling moments only. Pressure, gravity, body force, edge traction, distributed load, and follower load are outside the product path.
- **locking:** assumed transverse shear addresses shear locking; original MITC4 does not guarantee immunity to membrane locking for distorted curved meshes.
- **quadrature:** `2x2` midsurface integration is a source-backed candidate for this feature, not permission to reinterpret S4R as a reduced-integration FESA element.
- **stress:** local in-plane stress is recovered at bottom/middle/top. `S33=0` is an assumption; pointwise `S13/S23` is not emitted, and S1 notes that transverse shear stress may be inaccurate in distorted cantilever tests.
- **reference:** Abaqus U comparison is model-specific. Rotations are warning-only; reaction, stress, shell force/moment, integration layout, and stabilization energy are not equality gates under P1.
- **units:** user-consistent units. All drilling formulas and geometry tolerances must remain dimensionally invariant under a consistent change of length/force units.
## Research Recommendations and Open Issues
### Recommendations supported for Formulation
1. Retain the original MITC4 five-DOF kinematics and the S1/S2 edge-midpoint covariant shear interpolation.
2. Use a single documented `2x2` midsurface integration path for source S4 and S4R, subject to independent Formulation derivation and Numerical Review rank/patch checks.
3. Use homogeneous-isotropic plane-stress resultants with `5/6` transverse-shear correction as the formulation candidate, and recover linear in-plane stress at `-t/2,0,+t/2`.
4. Project global rotations with deterministic right-handed nodal frames and keep drilling stiffness and energy algebraically separate from all physical shell results.
5. Apply `10^-3` only to the minimum finite positive physical director-tangent rotational diagonal and use the resulting scalar uniformly for the four local drilling coordinates.
6. Do not adopt a calibrated smooth-normal angle or distortion/warp threshold in this feature; retain finite, orientation, topology and positive-Jacobian validation.
7. Keep pinched cylinder, NAFEMS LE3 and ScordelisLo as optional future evidence rather than implementation-completion requirements.
### Closed decisions and nonblocking evidence limits
1. **Drilling:** P1 fixes the positive physical-rotational-diagonal scale and `10^-3` factor. Alternative-family comparison, coefficient sweep, conditioning plateau and artificial-energy threshold are not required.
2. **Director/geometry:** `NR-O03` and `NR-O04` are removed. The absence of a calibrated smooth angle or distortion/warp cutoff is not missing evidence.
3. **Reference tolerance:** P1 reuses the B33 formula `1e-9 + 1e-6*reference_scale_c`; U exceedance fails and UR exceedance only warns.
4. **Reference cases:** the existing `reference/shell/` S4 and `reference/shellR/` S4R input/displacement pairs are the complete required inventory. Administrative bundle metadata and an expanded portfolio are not gates.
No research-owned numerical decision remains blocking for Implementation Planning.
## Requirement Traceability
| requirement area | research evidence | downstream result |
| --- | --- | --- |
| `006-010` material/section | F-09F-11 | homogeneous isotropic plane-stress and section recovery candidate; exact I/O remains downstream |
| `011-016` director/geometry | F-20F-24, `MITC4-DIRECTOR-GEOMETRY` | basic deterministic validity rules; `NR-O03`/`NR-O04` calibration removed |
| `031-038` 5-to-6 DOF/drilling | F-12F-19, `MITC4-DRILL-FIXED` | fixed dimensionally compatible rotational-diagonal rule; calibration and energy output excluded |
| `037` S4/S4R common path | F-25F-27, `MITC4-S4-S4R-SAME-PATH` | source mapping supported only as a FESA product decision, never an Abaqus formulation claim |
| `039-048` shell outputs | F-09F-11/F-18 | physical shell output and bottom/mid/top stress locations; no drilling-specific dataset |
| `049-057` element verification | F-28/F-29 and Candidate Benchmarks | required invariant/patch/fixed-drill checks; broader portfolio remains optional |
| `058-064` U/UR tolerance | F-25F-27 plus P1 | exact B33 mixed tolerance; U blocking and UR warning-only |
| `065-072` reference artifacts | S11/S12 and current inventory state | exact existing S4/S4R paths, source-row/component mapping, and immutability |
## Downstream Handoff
### Formulation Agent
- Re-derive the exact bilinear geometry, physical `20x20` kernel, local component order, edge-midpoint shear tying, `B` matrices, plane-stress section matrices, `2x2` quadrature, and bottom/middle/top recovery from S1/S2 rather than copying OCR text blindly.
- Revise the existing formulation draft to expose global six-DOF input/output while keeping only two tangent rotations in physical strains. Define `T`, signs, frame construction, the fixed drilling embedding, and all units explicitly.
- Keep any geometric-nonlinear residual/tangent material in a clearly marked future-only section; it is not part of the approved executable analysis.
- State the approved fixed drilling rule exactly and do not reintroduce candidate sweeps or drilling-specific recovery.
### Numerical Review Agent
- Independently check six physical rigid modes, non-rigid rank, symmetry, transform energy, patch consistency, and every Gauss/tying Jacobian.
- Confirm the fixed drilling rule's dimensions, symmetry, positivity and physical-recovery separation without reopening coefficient calibration.
- Audit the original MITC4 distortion/membrane-locking limitation and set convergence expectations that do not imply MITC4+ behavior.
- Treat `NR-O03`/`NR-O04` and expanded benchmark portfolios as removed/nonblocking scope.
### I/O Definition Agent
- Preserve source S4/S4R identity separately from `FESA-MITC4`, while mapping both to one quadrature/kernel path.
- Define automatic director data, the exact unsupported-drilling-load projection rule, and fail-closed diagnostics for normals, topology, Jacobians, section/material data, and excluded loads without calibrated `theta_smooth`.
- Distinguish Gauss, tying, and section positions in HDF5 identities; do not average mismatched result locations.
### Reference Model Agent
- Record the exact existing S4 and S4R input/displacement paths without creating, renaming, repairing, or normalizing artifacts.
- Define deterministic HDF5-to-CSV source-node/component mapping and the fixed B33 tolerance; do not require provenance, naming policy, README/metadata, duplicated model descriptions, or an expanded portfolio.
### Implementation Planning Agent
- Start after revised Formulation, Numerical Review, I/O, and lightweight Reference Model inventory are mutually consistent.
- Use the project Harness skill to draft self-contained RED/GREEN/VERIFY Steps, obtain user approval before writing `phases/` planning files, and never run the executor without a separate explicit request.
### Coordinator Agent
- Treat Research as approved and do not track removed drilling calibration, `NR-O03`/`NR-O04`, tolerance calibration, bundle administration, or portfolio expansion as downstream blockers.
- Reopen Requirements only if physical drilling loads, fold/intersection coupling, explicit normals, distributed loads, MITC4+, or nonlinear execution is proposed.
@@ -4,6 +4,9 @@
> 보존한다. 이 문서의 Python `unittest`, 삭제된 workspace validation script, Harness
> 환경 변수 관련 검증 절차는 폐기되었으며 현재 운영 계약은
> `docs/HARNESS_WORKFLOW.md``docs/HARNESS.md`를 따른다.
> 이 문서 아래의 `metadata.json` 필수 문구와 예시는 ADR-010의 2026-08-12 정책으로
> 대체되었다. 현재는 Reference Model Contract가 필수 provenance를 소유하고,
> `metadata.json`은 존재할 때만 read-only로 참고하는 선택 artifact다.
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
@@ -0,0 +1,190 @@
# Harness Agent Step Execution Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Make FESA planning and implementation agents use the approved Harness phase lifecycle, with the Implementation Agent restricted to the Executor-selected current Step.
**Architecture:** Keep `scripts/execute.py` as the only phase runner after separate user authorization. Agent TOML files define role-specific planning/execution boundaries; the Harness and FESA TDD skills plus project guides provide the shared lifecycle without duplicating the full Harness documentation.
**Tech Stack:** Codex Agent TOML, Markdown skills and guides, Python 3 Harness runner/hooks, pytest, PowerShell.
## Global Constraints
- Both agents must read `docs/HARNESS.md` and `docs/HARNESS_WORKFLOW.md` for Harness work.
- Phase files may be created only after the multi-Step draft is explicitly approved.
- `scripts/execute.py` may run only after a separate explicit user request.
- The Executor owns branch selection, pending-Step selection, retries, timestamps, commits, next-Step advancement, and top-level phase status.
- The Implementation Agent executes only the current Executor-selected `stepN.md` and completes RED, expected failure, minimal GREEN, and VERIFY inside that Step.
- PreToolUse and Stop hooks run through `.codex/hooks.json`; their Python entry points are not manual substitutes for hook execution.
- No phase execution, C++ implementation, Abaqus execution, or reference-artifact mutation belongs to this policy change.
---
### Task 1: Agent Harness role contracts
**Files:**
- Modify: `.codex/agents/implementation-planning-agent.toml`
- Modify: `.codex/agents/implementation-agent.toml`
**Interfaces:**
- Consumes: approved design `docs/superpowers/specs/2026-08-12-harness-agent-step-execution-design.md`; current Harness lifecycle in `.agents/skills/harness/SKILL.md`, `docs/HARNESS.md`, and `docs/HARNESS_WORKFLOW.md`.
- Produces: explicit planning-agent reference/approval rules and implementation-agent current-Step execution/state ownership rules.
- [ ] **Step 1: Run the static RED check**
```powershell
$files = @(
'.codex/agents/implementation-planning-agent.toml',
'.codex/agents/implementation-agent.toml'
)
foreach ($file in $files) {
if (-not (Select-String -LiteralPath $file -SimpleMatch 'docs/HARNESS.md' -Quiet)) {
Write-Error "$file does not require docs/HARNESS.md"
}
if (-not (Select-String -LiteralPath $file -SimpleMatch 'docs/HARNESS_WORKFLOW.md' -Quiet)) {
Write-Error "$file does not require docs/HARNESS_WORKFLOW.md"
}
}
if (-not (Select-String -LiteralPath '.codex/agents/implementation-agent.toml' -SimpleMatch 'Executor-selected current Step' -Quiet)) {
Write-Error 'Implementation Agent is not restricted to the current Step'
}
```
Expected: FAIL for the missing Harness-document references and current-Step rule.
- [ ] **Step 2: Add the Planning Agent contract**
Add mandatory reads for `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`, and
`.codex/hooks.json`. Preserve the existing sequence:
```text
multi-Step draft -> explicit user approval -> phases planning files
separate explicit Harness execution request -> scripts/execute.py
```
State that the planning agent never selects or executes a Step and does not write
Executor-owned timestamps.
- [ ] **Step 3: Add the Implementation Agent contract**
Require this execution recipe:
```text
approved plan + materialized phase files + Executor-selected current stepN.md
-> read prerequisites and previous summaries
-> RED -> observe expected failure -> minimal GREEN -> focused/full VERIFY
-> update only current Step status plus summary/error_message/blocked_reason
-> stop without starting the next Step
```
Name `.codex/hooks.json`, `scripts/hooks/pre_tool_use.py`, and
`scripts/hooks/stop_validation.py`. State that hooks run automatically, do not prove
RED, and are not manually invoked as substitutes for registered hooks. Reserve
timestamps, retry control, commits, and next-Step selection for the Executor.
- [ ] **Step 4: Parse and rerun the static check**
```powershell
@'
import pathlib, tomllib
for path in pathlib.Path('.codex/agents').glob('*.toml'):
with path.open('rb') as stream:
tomllib.load(stream)
print('ALL_AGENT_TOML_OK')
'@ | python -
rg -n "docs/HARNESS.md|docs/HARNESS_WORKFLOW.md|Executor-selected current Step|scripts/execute.py|PreToolUse|Stop" `
.codex/agents/implementation-planning-agent.toml `
.codex/agents/implementation-agent.toml
```
Expected: TOML parse passes and every required boundary is visible.
- [ ] **Step 5: Commit**
```powershell
git add .codex/agents/implementation-planning-agent.toml .codex/agents/implementation-agent.toml
git commit -m "docs: bind implementation agents to Harness steps"
```
### Task 2: Shared Harness skill and guide alignment
**Files:**
- Modify: `.agents/skills/harness/SKILL.md`
- Modify: `.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
- Modify: `docs/SOLVER_AGENT_DESIGN.md`
- Modify: `docs/implementation-plans/README.md`
**Interfaces:**
- Consumes: Task 1 Agent terminology and role ownership.
- Produces: one consistent Executor/Step/hook lifecycle discoverable by both agents.
- [ ] **Step 1: Run the shared-contract RED check**
```powershell
$files = @('.agents/skills/harness/SKILL.md', '.codex/skills/fesa-cpp-msvc-tdd/SKILL.md')
foreach ($file in $files) {
if (-not (Select-String -LiteralPath $file -SimpleMatch 'docs/HARNESS.md' -Quiet)) {
Write-Error "$file does not route to docs/HARNESS.md"
}
if (-not (Select-String -LiteralPath $file -SimpleMatch 'docs/HARNESS_WORKFLOW.md' -Quiet)) {
Write-Error "$file does not route to docs/HARNESS_WORKFLOW.md"
}
}
```
Expected: FAIL because the current skills omit these mandatory references.
- [ ] **Step 2: Update the Harness skill**
Add a concise required-reading section and an Executor/Implementation-Agent ownership
section. Preserve the existing phase schemas. Explicitly distinguish:
```text
Executor-owned: branch, pending Step, retry, timestamps, commits, advancement
Agent-owned: current Step work and status payload fields
Hook-owned: PreToolUse interception and Stop whole-project validation
```
- [ ] **Step 3: Update FESA TDD skill and guides**
Make the TDD skill require both Harness documents and materialized phase files for
implementation. Update the solver-agent and implementation-plan guides with the same
current-Step recipe, automatic hook use, status-field split, and separate Executor
authorization. Avoid copying all 600 lines of `HARNESS_WORKFLOW.md`; link to it.
- [ ] **Step 4: Validate skills and Harness behavior**
```powershell
python C:/Users/baram/.codex/skills/.system/skill-creator/scripts/quick_validate.py .agents/skills/harness
python C:/Users/baram/.codex/skills/.system/skill-creator/scripts/quick_validate.py .codex/skills/fesa-cpp-msvc-tdd
uv run --with pytest python -m pytest -v -rs
git diff --check
```
Expected: both skills are valid, Harness Python tests pass, and no whitespace error is reported.
- [ ] **Step 5: Run final policy and scope checks**
```powershell
rg -n "docs/HARNESS.md|docs/HARNESS_WORKFLOW.md|Executor-selected current Step|current Step|scripts/execute.py|PreToolUse|Stop" `
.codex/agents/implementation-planning-agent.toml `
.codex/agents/implementation-agent.toml `
.agents/skills/harness/SKILL.md `
.codex/skills/fesa-cpp-msvc-tdd/SKILL.md `
docs/SOLVER_AGENT_DESIGN.md `
docs/implementation-plans/README.md
git diff --name-only HEAD -- reference phases src include tests CMakeLists.txt
git status --short
```
Expected: required policies are present; no reference, phase, C++, test, or CMake file changed.
- [ ] **Step 6: Commit**
```powershell
git add .agents/skills/harness/SKILL.md .codex/skills/fesa-cpp-msvc-tdd/SKILL.md `
docs/SOLVER_AGENT_DESIGN.md docs/implementation-plans/README.md
git commit -m "docs: align Harness step execution guidance"
```
@@ -0,0 +1,129 @@
# Independent Reference Validation Policy Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Align FESA project policy and the MITC4 upstream contracts with independent black-box Abaqus reference validation and prepare the implementation-planning agent to create approved Harness Steps.
**Architecture:** Keep FESA HDF5 as authoritative solver output and retain deterministic source-node/component comparison, while reducing the reference phase to a lightweight inventory of existing `.inp` and required CSV paths. Remove metadata, naming, portfolio, drilling-calibration, and geometry/director-calibration gates from MITC4 without changing reference artifacts or implementing C++.
**Tech Stack:** Markdown, TOML agent prompts, project-local Codex `SKILL.md`, PowerShell static validation, Git.
## Global Constraints
- Do not modify files under `reference/`.
- Do not run Abaqus or another reference solver.
- Do not modify C++ source, tests, or CMake.
- Preserve HDF5 as authoritative FESA output.
- Use the B33 mixed tolerance exactly for MITC4 U; U blocks and UR warns only.
- Retain fixed numerical drilling stabilization but exclude calibration and drilling evidence outputs.
- Remove `NR-O03` and `NR-O04` from MITC4 implementation readiness.
- Implementation Planning may create Harness phase files only after user approval of the Step draft.
---
### Task 1: Align project-wide policy documents
**Files:**
- Modify: `AGENTS.md`
- Modify: `docs/PRD.md`
- Modify: `docs/ADR.md`
- Modify: `docs/ARCHITECTURE.md`
- Modify: `docs/SOLVER_AGENT_DESIGN.md`
- Modify: `docs/SOLVER_SKILL_DESIGN.md`
**Interfaces:**
- Consumes: approved design in `docs/superpowers/specs/2026-08-12-independent-reference-validation-policy-design.md`
- Produces: project-wide independent-solver and minimal-reference policy used by every downstream agent
- [ ] Replace canonical/legacy/provenance bundle governance with the minimal reference-case contract.
- [ ] Separate Abaqus input syntax and external comparison from FESA formulation behavior.
- [ ] Record the new decision as a superseding ADR while preserving historical decisions.
- [ ] State the MITC4 B33 tolerance reuse and fixed drilling scope without claiming implementation exists.
- [ ] Verify changed policy terms with targeted `rg` checks and `git diff --check`.
- [ ] Commit with `docs: simplify FESA reference validation policy`.
### Task 2: Align agent and skill workflow contracts
**Files:**
- Modify: affected `.codex/agents/*.toml`
- Modify: affected `.codex/skills/*/SKILL.md`
- Modify: affected workflow README templates under `docs/`
**Interfaces:**
- Consumes: Task 1 project policy
- Produces: specialist prompts that no longer recreate removed artifact gates
- [ ] Update Requirement, Numerical Review, I/O, Reference Model, Reference Verification, Coordinator, Implementation Planning, Physics, and Release boundaries.
- [ ] Require Implementation Planning Agent to invoke `$harness`, produce a self-contained multi-Step draft, request user approval, and only then write `phases/` files.
- [ ] Keep actual Harness execution outside the planning agent unless explicitly requested.
- [ ] Validate TOML syntax, skill YAML frontmatter, required sections, and prohibited stale terms.
- [ ] Forward-test the revised skills with an independent agent prompt.
- [ ] Commit with `docs: align FESA agents with minimal reference cases`.
### Task 3: Revise MITC4 requirements and formulation
**Files:**
- Modify: `docs/requirements/linear-static-mitc4-shell.md`
- Modify: `docs/research/linear-static-mitc4-shell-research.md`
- Modify: `docs/formulations/mitc4-shell-formulation.md`
**Interfaces:**
- Consumes: Tasks 1-2 policy and approved fixed drilling rule
- Produces: implementation-ready feature scope without removed calibration gates
- [ ] Correct the observed S4/S4R reference inventory and adopt the B33 U/UR mixed tolerance.
- [ ] Replace drilling candidate/sweep language with the fixed positive rotational-diagonal rule.
- [ ] Remove drilling calibration, drilling-energy warning, `NR-O03`, `NR-O04`, and expanded portfolio requirements.
- [ ] Preserve the future nonlinear derivation as documentation-only.
- [ ] Add a research decision note without rewriting source findings as if they changed.
- [ ] Verify requirement IDs and formulation traceability contain no contradictory blocker.
- [ ] Commit with `docs: simplify MITC4 verification and drilling scope`.
### Task 4: Revise MITC4 I/O and reference-case inventory
**Files:**
- Modify: `docs/io-definitions/linear-static-mitc4-shell-io.md`
- Create: `docs/reference-models/linear-static-mitc4-shell-reference-models.md`
**Interfaces:**
- Consumes: Task 3 requirements/formulation
- Produces: exact lightweight S4/S4R input-to-displacement-CSV pairing and HDF5 comparison mapping
- [ ] Remove canonical/legacy/metadata/provenance/schema-version readiness requirements.
- [ ] Remove mandatory drilling stiffness, ratio, and energy output evidence.
- [ ] Keep minimal source-node plus U/UR component matching and finite/unique-row checks.
- [ ] Inventory the exact existing `reference/shell` and `reference/shellR` paths read-only.
- [ ] Verify no file under `reference/` changed.
- [ ] Commit with `docs: define lightweight MITC4 reference cases`.
### Task 5: Rerun MITC4 numerical review under the approved policy
**Files:**
- Modify: `docs/numerical-reviews/linear-static-mitc4-shell-review.md`
**Interfaces:**
- Consumes: Tasks 1-4 current source-of-truth documents
- Produces: a fresh formulation-only implementation-planning verdict
- [ ] Reclassify removed artifact, calibration, `NR-O03`, and `NR-O04` blockers explicitly.
- [ ] Review the fixed rotational-diagonal drilling rule for dimensions, symmetry, positivity, and separation from physical recovery.
- [ ] Confirm U/UR tolerance and current S4/S4R reference pairing are downstream comparison inputs, not formulation blockers.
- [ ] Issue the verdict supported by the remaining confirmed formulation findings only.
- [ ] Run Markdown structure, targeted policy consistency, `git diff --check`, and no-reference-mutation checks.
- [ ] Commit with `docs: rerun MITC4 numerical review under minimal reference policy`.
### Task 6: Final repository policy verification
**Files:**
- Verify: all files changed by Tasks 1-5
**Interfaces:**
- Consumes: all preceding tasks
- Produces: clean, internally consistent documentation and agent/skill configuration evidence
- [ ] Run `uv run --with pytest python -m pytest -v -rs` because project-local agent/skill workflow documents changed.
- [ ] Parse every changed TOML file and validate every changed skill frontmatter.
- [ ] Run repository-wide targeted searches for stale mandatory provenance, canonical, README, drilling sweep, `NR-O03`, and `NR-O04` language in active contracts.
- [ ] Run `git diff --check` and inspect `git status --short`.
- [ ] Confirm `git diff -- reference` is empty.
- [ ] Report any historical documents intentionally left unchanged.
@@ -430,8 +430,9 @@ Abaqus `.inp` 자체에는 단위 선언이 없으므로 일반 solver run의 un
`user-consistent-unspecified`로 기록하고 solver가 입력 파일만 보고 SI를 추론하지
않는다. 승인된 cantilever B33 reference에 한해서는 이 설계와 후속 Reference Model
Contract가 입력 수치의 단위계를 SI로 선언하고, reference verification이 동일한 입력으로
생성된 FESA 결과에 그 외부 단위 계약을 적용한다. 새 reference model은 별
`metadata.json`에 단위계를 선언해야 한다.
생성된 FESA 결과에 그 외부 단위 계약을 적용한다. 새 reference model도 승인된
Reference Model Contract에 단위계를 선언한다. 선택 `metadata.json`이 존재하면 그
단위 선언을 read-only 보조 자료로 계약과 대조한다.
- displacement: `[node_count, 6]`
- reaction: `[node_count, 6]`
@@ -575,11 +576,12 @@ step time 1.0 계약으로 해석한다.
| stress | N/A: beam stress reference comparison은 승인 범위에서 제외 |
이 기존 bundle의 space-containing filename과 CAE report header는 승인된 legacy alias로
그대로 지원하며 reference artifact를 rename하거나 rewrite하지 않는다. `metadata.json`
`README.md`는 이 baseline에 한해서 N/A다. 이 설계와 Step 5의 Reference Model Contract가
대신 model ID, provenance, units, coordinate system, schema, file inventory, tolerance와
stress N/A 사유를 기록한다. 이후 추가하는 reference model에는 canonical artifact 이름,
`metadata.json`, `README.md` 요구한다.
그대로 지원하며 reference artifact를 rename하거나 rewrite하지 않는다. `README.md`는 이
baseline에 한해서 N/A다. `metadata.json`은 프로젝트 전역에서 선택 artifact이며 이
bundle에는 존재하지 않는다. 이 설계와 Step 5의 Reference Model Contract가 model ID,
provenance, units, coordinate system, schema, file inventory, tolerance와 stress N/A 사유를
기록한다. 이후 추가하는 reference model에는 canonical artifact 이름과 `README.md`
요구하며, 선택 `metadata.json`이 존재하면 계약과 대조한다.
Reference verification은 build/test gate 통과 후 승인 input으로 FESA `results.h5`
생성하고 다음을 직접 비교한다.
@@ -592,8 +594,9 @@ Reference verification은 build/test gate 통과 후 승인 input으로 FESA `re
Artifact check는 네 파일의 존재, B33 element type, expected header, 유일한 row key,
finite value를 확인한다. 하나라도 충족하지 않으면 `needs-reference-artifacts` 또는
`schema-mismatch`로 분류하고 comparison을 시작하지 않는다. 현재 baseline은
`metadata.json` 또는 `README.md` 부재만으로 차단하지 않는다.
`schema-mismatch`로 분류하고 comparison을 시작하지 않는다. `metadata.json` 부재는 모든
bundle에서 허용되며, 현재 baseline의 `README.md` 부재도 승인된 legacy 예외로 차단하지
않는다.
Agent와 Harness는 Abaqus를 실행하거나 reference artifact를 생성·수정하지 않는다.
@@ -0,0 +1,129 @@
# Harness Agent Step Execution Design
## Status
- date: `2026-08-12`
- status: `approved-approach-awaiting-written-spec-review`
- approved_approach: `executor-centered-single-path`
- scope: Implementation Planning Agent, Implementation Agent, Harness workflow guidance
## Purpose
FESA implementation work shall use one explicit Harness execution path. The
Implementation Planning Agent converts an approved implementation plan into
self-contained phase Steps after user approval. The Step Executor selects and runs
those Steps sequentially. The Implementation Agent executes only the current Step and
does not independently expand its scope to the remaining implementation plan.
## Required Reading
Both the Implementation Planning Agent and Implementation Agent shall read these
documents before Harness planning or execution:
- `AGENTS.md`
- `.agents/skills/harness/SKILL.md`
- `docs/HARNESS.md`
- `docs/HARNESS_WORKFLOW.md`
- `docs/SOLVER_AGENT_DESIGN.md`
- the approved feature implementation plan and applicable upstream feature contracts
The agents shall also inspect `.codex/hooks.json`, `.harness/config.json` when present,
and the relevant `phases/` indexes and Step file for execution work.
## Planning Contract
The Implementation Planning Agent shall:
1. prepare a multi-Step draft from approved upstream contracts;
2. keep one layer or module in each self-contained Step;
3. include required-reading paths, RED/GREEN/VERIFY work, exact acceptance commands,
status rules, and concrete prohibitions;
4. obtain explicit user approval before creating or updating `phases/` planning files;
5. create only `phases/index.json`, `phases/<task>/index.json`, and approved
`phases/<task>/stepN.md` files;
6. never run `scripts/execute.py` merely because a plan or phase draft is ready.
Harness execution requires a separate explicit user request.
## Execution Contract
After an explicit Harness execution request, `scripts/execute.py <phase>` is the
single phase runner. It owns branch selection, first-pending-Step selection, Step
session creation, retries, timestamps, commit separation, next-Step advancement, and
top-level phase completion.
The Implementation Agent shall:
1. require an approved implementation plan and materialized phase files;
2. execute only the current `stepN.md` selected and supplied by the Executor;
3. read the Step prerequisites and relevant previous-Step summaries before editing;
4. complete RED, observed expected failure, minimal GREEN, focused VERIFY, and the
Step's full acceptance commands within the same Step;
5. avoid starting a later pending Step or performing unlisted implementation-plan
work;
6. update only the current Step's Codex-owned status fields:
- success: `status=completed` plus one-line `summary`;
- after the allowed failed correction attempts: `status=error` plus
`error_message`;
- user intervention required: `status=blocked` plus `blocked_reason`, then stop;
7. leave `started_at`, `completed_at`, `failed_at`, `blocked_at`, task timestamps,
next-Step selection, and top-level phase status to the Executor.
If approved phase files are absent or the supplied Step conflicts with an approved
upstream contract, the Implementation Agent shall not fall back to the broad plan. It
shall report `needs-upstream-decision` or `blocked` through the documented handoff.
## Hooks and Scripts
`.codex/hooks.json` is the authoritative hook registration used during Harness Step
sessions:
- PreToolUse calls `scripts/hooks/pre_tool_use.py` to reject dangerous commands and
enforce the related-test-file guardrail for C++ production edits.
- Stop calls `scripts/hooks/stop_validation.py` to run the discovered whole-project
MSVC build/test validation before a Step may end.
These hooks run automatically through Codex hook registration. Agents shall inspect
the registration and comply with hook outcomes, but shall not manually invoke the
hook Python entry points as a substitute for actual tool interception or Stop.
PreToolUse is not proof that RED occurred; the Implementation Agent must execute and
record the Step's RED and GREEN commands itself.
The approved script boundary is:
- `scripts/execute.py`: phase runner; run only after a separate explicit user request;
- Step acceptance commands: run by the Implementation Agent as written, resolving
`.harness/config.json` first and otherwise using documented Harness defaults;
- `uv run --with pytest python -m pytest -v -rs`: additionally required only when
Harness Python, hook, runner, or Agent/Skill configuration behavior is changed.
## Files to Align
The implementation will make surgical changes to:
- `.codex/agents/implementation-planning-agent.toml`
- `.codex/agents/implementation-agent.toml`
- `.agents/skills/harness/SKILL.md`
- `.codex/skills/fesa-cpp-msvc-tdd/SKILL.md`
- `docs/SOLVER_AGENT_DESIGN.md`
- `docs/implementation-plans/README.md`
`docs/HARNESS.md` and `docs/HARNESS_WORKFLOW.md` already document the runner, hooks,
validation, retry, and state lifecycle. They become mandatory references rather than
being duplicated in full in every Agent or Skill instruction.
## Validation
The change is complete when:
- both Agent TOML files parse;
- the changed skills pass `quick_validate.py`;
- both agents explicitly require `docs/HARNESS.md` and
`docs/HARNESS_WORKFLOW.md`;
- the Implementation Agent explicitly follows only the Executor-selected current
Step and respects Executor-owned fields;
- hook behavior and `scripts/execute.py` authorization are consistent across the
Agent, Skill, and guide documents;
- Harness Python tests pass because hook/Agent/Skill behavior is in scope;
- no phase execution, C++ implementation, reference mutation, or Abaqus execution
occurs as part of this policy edit.
@@ -0,0 +1,178 @@
# Independent Reference Validation Policy Design
## Status
- date: `2026-08-12`
- status: `approved`
- scope: FESA project policy, agents, skills, and `linear-static-mitc4-shell` upstream contracts
- implementation_code: out of scope
- reference_artifact_mutation: prohibited
## Decision
FESA is an independent finite element solver. It accepts an approved subset of the
Abaqus `.inp` syntax, but it does not reproduce or claim equivalence with Abaqus
element formulations, integration rules, stabilization, internal state, or result
generation procedures. Abaqus CSV values are external numerical reference values.
Exact equality is allowed but is neither required nor evidence of identical internal
behavior.
A feature passes reference verification when FESA solves the declared input and its
required comparison quantities satisfy the feature-approved tolerance. Reference
artifact governance that does not participate in that comparison must not block
implementation planning or verification.
## Minimal Reference Case Contract
A reference case requires only:
- the declared `.inp` file used by both solvers;
- the declared Abaqus CSV file for each blocking or warning-only quantity;
- the FESA `results.h5` produced from that `.inp`;
- a deterministic mapping of the compared source identity and components;
- the approved tolerance.
The following are not readiness requirements:
- canonical directory or filename conventions;
- legacy-alias approval;
- bundle `README.md`;
- `metadata.json`;
- Abaqus version or generation provenance;
- duplicated unit, coordinate, model, step, final-frame, material, thickness, or
element-type metadata;
- a reference CSV schema version.
Reference paths and filenames are consumed as declared without rename or repair.
Reference artifacts remain read-only. A comparator must still reject ambiguous or
unsafe comparisons: missing files, missing required source IDs/components, duplicate
IDs, unmatched required rows, and nonfinite values. This is an executable matching
contract, not a metadata or bundle-governance contract.
For a feature with one supported static step and one final frame, the input/CSV pair
implicitly identifies that result state. Model properties and source element types are
read from the `.inp` rather than copied into another metadata file.
## Reference Model Phase
The Reference Model phase remains in the workflow as a lightweight reference-case
inventory. It records:
- the purpose of each existing case;
- exact input and required CSV paths;
- blocking and warning-only quantities;
- FESA HDF5 projection and source-ID/component matching;
- the approved tolerance;
- whether the required files are present and readable.
It does not design a broad benchmark portfolio unless the feature requirements
explicitly request one. It does not gate on naming, README, metadata, provenance, or
duplicated descriptive fields.
## MITC4 Reference Acceptance
Both source element types map to the same internal `FESA-MITC4` formulation:
- `reference/shell/shell.inp` and `reference/shell/shell displacements.csv` cover
source `S4`;
- `reference/shellR/shellR.inp` and
`reference/shellR/shellR displacements.csv` cover source `S4R`.
Only matched global `U1/U2/U3` rows are blocking. `UR1/UR2/UR3` rows are compared and
reported as warning-only evidence. Reactions and stresses may be inspected but are not
reference pass/fail quantities.
For each case and component `c`:
```text
reference_scale_c = max_i(abs(abaqus_value_i,c))
tolerance_c = 1e-9 + 1e-6 * reference_scale_c
```
The `1e-9` absolute floor is expressed in the model's user-consistent length unit for
translation and as a dimensionless rotation value for warning-only UR. Values are not
zero-clamped. Missing, duplicate, unmatched, or nonfinite required rows fail before
numeric tolerance evaluation. U tolerance failure fails reference verification; UR
tolerance exceedance emits a deterministic warning only.
No additional locking, convergence, distorted, curved, director-angle, or invalid
geometry reference portfolio is required for this MITC4 implementation acceptance.
The previously open `NR-O03` and `NR-O04` calibration/inspection requirements are
removed from the feature gate.
## MITC4 Drilling Boundary
Drilling calibration is excluded, but a fixed numerical stabilization remains required
to make the external six-DOF shell system solvable. The feature does not implement a
physical drilling strain or accept director-parallel nodal moments.
Use one element-level scalar computed from the positive diagonal entries of the
physical rotational stiffness block:
```text
k_d = 1e-3 * min(K_phys[i,i] | i is a physical rotational DOF and K_phys[i,i] > 0)
K_drill_local = k_d * I4
K_drill_global = T_d^T * K_drill_local * T_d
```
Restricting the minimum to rotational entries preserves the `force*length` dimension.
The literal minimum over mixed translational and rotational diagonals is not approved.
The stabilization must be finite, symmetric, positive, deterministic, and excluded
from physical generalized strain, resultant, and stress recovery.
The following are out of scope:
- reference-family selection and `rho_d` normalization;
- coefficient sweeps, stable plateaus, rank/conditioning calibration, and adjacent
decade sensitivity;
- drilling-to-physical energy thresholds or warning policies;
- mandatory drilling stiffness, ratio, or energy result datasets.
Basic unit tests may verify construction, symmetry, positivity, deterministic behavior,
and removal of the four nonphysical drilling null modes. Current reference cases contain
no drilling-direction load; their blocking safeguard against unacceptable physical
response contamination is the approved U comparison.
## Numerical Review Boundary
Numerical Review decides whether the documented formulation is internally complete and
consistent enough to plan implementation. It must not fail because a later Reference
Model document, canonical bundle, README, metadata, provenance, extended benchmark
portfolio, or comparison result is absent.
For MITC4:
- fixed drilling stabilization closes `NR-O01` and removes `NR-O02` by scope;
- `NR-O03` and `NR-O04` are removed from the approved verification scope;
- the B33 mixed tolerance closes the blocking part of `NR-O05`;
- missing heavyweight reference metadata is `not-required-by-policy`;
- confirmed formulation defects remain blocking.
## Agent and Skill Workflow
Requirement, I/O, Reference Model, Reference Verification, Coordinator, Implementation
Planning, Physics Evaluation, and Release instructions must use the minimal reference
case contract. Numerical Review must remain independent of later artifact governance.
Implementation Planning must use the project-local `harness` skill when the user asks
for an implementation plan. It must:
1. prepare a multi-Step draft with one layer or module per Step;
2. make each Step self-contained for an independent Codex execution;
3. include prerequisite documents, TDD RED/GREEN/VERIFY work, exact MSVC/CMake/CTest
acceptance commands, and specific prohibitions;
4. request user approval for the Step draft;
5. only after approval create or update `phases/index.json`,
`phases/<task-name>/index.json`, and `phases/<task-name>/stepN.md`;
6. leave Harness execution to an explicit subsequent user request.
## Scope Preservation
- Do not modify files under `reference/`.
- Do not run Abaqus or another reference solver.
- Do not add C++ MITC4 implementation in this policy-alignment change.
- Keep the future geometric-nonlinear residual/tangent derivation documentation, but do
not authorize nonlinear product execution.
- Historical research evidence may retain its original cautions. Current requirements,
formulation decisions, I/O contracts, and the latest numerical review must clearly
identify the approved policy that supersedes earlier recommendations.
+3 -2
View File
@@ -34,8 +34,9 @@ Artifact check:
- exact legacy 네 파일 존재, input `TYPE=B33`, expected CAE CSV headers, unique row keys,
finite values를 검사한다.
- 이 bundle은 승인된 예외이므로 `metadata.json`, `README.md`, stress CSV 부재만으로
차단하지 않는다. Contract에서 provenance/units/schema/stress N/A를 확인한다.
- `metadata.json` 부재는 프로젝트 전역 정책에 따라 허용한다. 이 bundle의 `README.md`
stress CSV 부재는 승인된 legacy 예외이므로 차단하지 않는다. Contract에서
provenance/units/schema/stress N/A를 확인한다.
- generated HDF5 schema/version/units/coordinate/step-frame/source identity를 검사한다.
Comparison:
+5 -3
View File
@@ -35,9 +35,11 @@ Metadata status는 `ready-for-implementation-planning`으로 둔다.
`Abaqus/CAE Learning Edition 2024`, SI, `Step-1`, increment 1/time 1.0을 기록한다.
- exact legacy paths 네 개를 inventory에 기록하고 B33 element type, expected header,
unique row key, finite value artifact check를 요구한다.
- 이 legacy bundle에 한해서 `metadata.json`, `README.md`, stress CSV가 N/A이며 설계와
이 contract가 provenance/schema/tolerance/stress 사유를 대신 기록한다고 명시한다.
- 이후 reference model에는 canonical file names, metadata.json, README.md를 요구한다.
- `metadata.json` 부재는 프로젝트 전역 선택-artifact 정책에 따라 허용하고, 이 legacy
bundle에 한해서 `README.md`와 stress CSV가 N/A임을 명시한다. 설계와 이 contract가
provenance/schema/tolerance/stress 사유를 기록한다.
- 이후 reference model에는 canonical file names와 `README.md`를 요구한다.
`metadata.json`이 존재하면 read-only로 contract와 대조한다.
- displacement, reaction, section resultant coverage와 HDF5 dataset/CSV/component/tolerance를
연결하는 Coverage Matrix를 작성한다. Stress comparison은 N/A지만 output unit/analytical
verification을 연결한다.