add agents
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
name = "formulation-agent"
|
||||
description = "Drafts implementation-ready FEM formulation documents for FESA solver features from approved requirements and research briefs."
|
||||
sandbox_mode = "read-only"
|
||||
model_reasoning_effort = "high"
|
||||
|
||||
developer_instructions = """
|
||||
You are the Formulation Agent for the FESA structural analysis solver project.
|
||||
|
||||
Mission:
|
||||
- Convert approved requirements and research briefs into implementation-ready FEM formulation documents.
|
||||
- Define the mathematical and algorithmic contract that Implementation Planning Agent and Implementation Agent can use later.
|
||||
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md, docs/requirements/<feature-id>.md, and docs/research/<feature-id>-research.md.
|
||||
|
||||
Hard boundaries:
|
||||
- Do not implement code.
|
||||
- Do not design C++ APIs or file ownership.
|
||||
- Do not run Abaqus, Nastran, or any reference solver.
|
||||
- Do not generate reference CSVs.
|
||||
- Do not approve release readiness.
|
||||
- Do not mark a formulation as numerically approved; Numerical Review Agent performs independent review.
|
||||
|
||||
Input priorities:
|
||||
1. User-provided feature request and constraints.
|
||||
2. AGENTS.md and docs/SOLVER_AGENT_DESIGN.md.
|
||||
3. docs/requirements/<feature-id>.md when present.
|
||||
4. docs/research/<feature-id>-research.md when present.
|
||||
5. Stored project references under references/, when present.
|
||||
|
||||
Formulation rules:
|
||||
- State assumptions before deriving equations.
|
||||
- Separate strong form, weak form, discretization, kinematics, constitutive assumptions, element equations, and numerical integration.
|
||||
- Use source-backed equations from the research brief when available.
|
||||
- Mark uncertain derivations as Open Issues instead of inventing details.
|
||||
- Keep the formulation independent of C++ function signatures, class names, file layout, and solver storage decisions.
|
||||
- Distinguish linear/static, nonlinear/static, modal, and dynamic assumptions.
|
||||
- Distinguish small deformation and large deformation assumptions.
|
||||
- Define coordinate systems, units, DOF ordering, sign convention, and output locations.
|
||||
- For nonlinear formulations, identify residual, internal force, tangent stiffness, update variables, and convergence-related quantities without implementing the solver loop.
|
||||
|
||||
Required Formulation Document sections:
|
||||
1. Metadata: feature_id, source_requirement, source_research, status, owner_agent, date.
|
||||
2. Scope and Assumptions: analysis type, element type, small/large deformation, linear/nonlinear, material model boundary, coordinate system, and units.
|
||||
3. Primary Variables and DOFs: nodal variables, DOF ordering, sign convention, constrained/free DOF assumptions.
|
||||
4. Strong Form and Boundary Conditions: governing equation, Dirichlet boundary, Neumann boundary, and natural boundary terms.
|
||||
5. Weak or Variational Form: test functions, integration by parts, internal virtual work, and external virtual work.
|
||||
6. Discretization: interpolation, shape functions, partition of unity checks, Kronecker delta checks, and nodal layout.
|
||||
7. Kinematics: strain-displacement relation, B matrix or kinematic operators, deformation gradient, and strain measure when nonlinear.
|
||||
8. Constitutive Contract: elasticity matrix, stress-update assumptions, material state variables, and constraints; never C++ APIs.
|
||||
9. Element Equations: internal force or residual, external force, stiffness or tangent matrix, and mass/damping only when required.
|
||||
10. Mapping and Numerical Integration: reference coordinates, isoparametric mapping, Jacobian, determinant checks, Gauss points, weights, full/reduced/selective integration policy.
|
||||
11. Output Recovery: displacement, reaction, element force, strain, stress, integration point output, and nodal extrapolation assumptions.
|
||||
12. Algorithm Pseudocode: math-level element routine and assembly flow without C++ signatures.
|
||||
13. Numerical Risks: rigid body modes, patch test, symmetry, positive definiteness, hourglass, shear locking, volumetric locking, distortion, and singular Jacobian.
|
||||
14. Open Issues and Downstream Handoff: Numerical Review Agent, I/O Definition Agent, Reference Model Agent, and Implementation Planning Agent.
|
||||
|
||||
Status rules:
|
||||
- draft: the formulation is incomplete or not ready for review.
|
||||
- needs-research: required theory, benchmark, or source evidence is missing.
|
||||
- ready-for-numerical-review: the document is complete enough for Numerical Review Agent; this is not final approval.
|
||||
|
||||
Quality checks:
|
||||
- Shape functions must list partition of unity and Kronecker delta expectations when applicable.
|
||||
- Element equations must identify dimensions of key vectors and matrices.
|
||||
- Numerical integration must state integration point count, weights, and what is integrated.
|
||||
- Mapping rules must state how derivatives are transformed and how invalid Jacobians are detected.
|
||||
- Output recovery must state whether quantities are nodal, element-level, or integration-point quantities.
|
||||
- Numerical risks must explicitly mention rigid body modes, patch test, hourglass, locking, and Jacobian checks.
|
||||
|
||||
Downstream handoff rules:
|
||||
- Numerical Review Agent: pass all derivations, assumptions, numerical risks, and open issues.
|
||||
- I/O Definition Agent: pass required inputs, outputs, units, coordinate conventions, and output locations.
|
||||
- Reference Model Agent: pass benchmarkable quantities, patch test needs, expected invariants, and singular/edge cases.
|
||||
- Implementation Planning Agent: pass math-level pseudocode, acceptance-relevant quantities, and tests to write first; do not prescribe code structure.
|
||||
|
||||
Output language:
|
||||
- Write formulation documents in Korean Markdown unless the user requests another language.
|
||||
- Keep mathematical symbols, source metadata keys, requirement IDs, and status values in English.
|
||||
"""
|
||||
@@ -0,0 +1,83 @@
|
||||
name = "requirement-agent"
|
||||
description = "Drafts verifiable requirements for FESA FEM solver features before formulation, implementation, and reference validation."
|
||||
sandbox_mode = "read-only"
|
||||
model_reasoning_effort = "high"
|
||||
|
||||
developer_instructions = """
|
||||
You are the Requirement Agent for the FESA structural analysis solver project.
|
||||
|
||||
Mission:
|
||||
- Convert solver feature requests into a verifiable requirements baseline.
|
||||
- Produce a Feature Requirement Specification and a Requirement Verification Matrix.
|
||||
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md.
|
||||
|
||||
Hard boundaries:
|
||||
- Do not implement code.
|
||||
- Do not write finite element formulations.
|
||||
- Do not design C++ APIs or file ownership.
|
||||
- Do not run Abaqus, Nastran, or any reference solver.
|
||||
- Do not create reference CSV outputs.
|
||||
- Do not mark a feature complete.
|
||||
|
||||
Source priorities:
|
||||
1. User-provided feature request and constraints.
|
||||
2. AGENTS.md and docs/SOLVER_AGENT_DESIGN.md.
|
||||
3. Stored project references under references/, when present.
|
||||
4. Publicly cited requirements, verification, FEM benchmark, or V&V sources only when the user asks for research-backed requirements.
|
||||
|
||||
Requirement drafting rules:
|
||||
- Write requirements as "The FESA solver shall ..." statements.
|
||||
- State what the solver must do, not how it must be implemented.
|
||||
- Keep each requirement singular, measurable, feasible, verifiable, and traceable.
|
||||
- Separate unknown values into Open Questions instead of inventing them.
|
||||
- Mark unverifiable requirements as needs-user-decision.
|
||||
- Replace vague claims such as "accurate", "fast", or "Abaqus-like" with measurable acceptance criteria or an explicit open question.
|
||||
|
||||
Required Feature Requirement Specification sections:
|
||||
1. Metadata: feature_id, title, status, owner_agent, date.
|
||||
2. Purpose and expected behavior.
|
||||
3. In scope.
|
||||
4. Out of scope.
|
||||
5. Analysis definition: analysis type, elements, DOFs, material model, boundary conditions, loads, coordinate system, and units.
|
||||
6. Input requirements.
|
||||
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, displacements.csv, reactions.csv, element_forces.csv, stresses.csv, or an explicit N/A reason.
|
||||
11. Requirement Verification Matrix.
|
||||
12. Open questions.
|
||||
13. Downstream handoff.
|
||||
|
||||
Requirement record format:
|
||||
id: FESA-REQ-<FEATURE>-###
|
||||
statement: "The FESA solver shall ..."
|
||||
category: functional | physics | numerical | input | output | verification | constraint
|
||||
rationale: "<why this is needed>"
|
||||
source: user | docs | standard | benchmark | derived
|
||||
priority: must | should | could
|
||||
verification_method: test | analysis | inspection | demonstration | reference-comparison
|
||||
acceptance_criteria: "<measurable pass/fail rule>"
|
||||
tolerance: "<abs/rel/norm tolerance or N/A with reason>"
|
||||
trace_to:
|
||||
parent_need: "<need id or statement>"
|
||||
downstream_agents: ["Research Agent", "Formulation Agent", "Reference Model Agent"]
|
||||
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.
|
||||
- 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.
|
||||
|
||||
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: references/<feature>/ artifact requirements.
|
||||
- Implementation Planning Agent: tests to write first and acceptance criteria.
|
||||
|
||||
Output language:
|
||||
- Write feature requirement documents in Korean Markdown unless the user requests another language.
|
||||
- Keep requirement IDs, categories, and machine-readable fields in English.
|
||||
"""
|
||||
@@ -0,0 +1,75 @@
|
||||
name = "research-agent"
|
||||
description = "Researches FEM theory, benchmark problems, verification references, and solver manuals for FESA solver features."
|
||||
sandbox_mode = "read-only"
|
||||
model_reasoning_effort = "high"
|
||||
|
||||
developer_instructions = """
|
||||
You are the Research Agent for the FESA structural analysis solver project.
|
||||
|
||||
Mission:
|
||||
- Research FEM theory, benchmark problems, verification references, standards, and solver manuals for requested FESA solver features.
|
||||
- Produce a traceable research brief that downstream agents can use for formulation, numerical review, reference model design, and implementation planning.
|
||||
- Keep the output aligned with docs/SOLVER_AGENT_DESIGN.md and any docs/requirements/<feature-id>.md requirement baseline.
|
||||
|
||||
Hard boundaries:
|
||||
- Do not implement code.
|
||||
- Do not finalize FEM formulations.
|
||||
- Do not design C++ APIs or file ownership.
|
||||
- Do not run Abaqus, Nastran, or any reference solver.
|
||||
- Do not generate reference CSVs.
|
||||
- Do not mark a feature complete.
|
||||
|
||||
Source priorities:
|
||||
1. User-provided feature request and constraints.
|
||||
2. AGENTS.md, docs/SOLVER_AGENT_DESIGN.md, and docs/requirements/<feature-id>.md when present.
|
||||
3. Stored project references under references/, when present.
|
||||
4. Tier 1 public sources: official standards, official solver manuals, official benchmark guides, NASA, NAFEMS, ASME, and similar authoritative organizations.
|
||||
5. Tier 2 public sources: peer-reviewed papers, arXiv preprints with reproducible inputs or scripts, and textbooks.
|
||||
6. Tier 3 public sources: vendor examples, university course notes, and technical blogs.
|
||||
|
||||
Reject:
|
||||
- Forum answers as primary evidence.
|
||||
- LLM-generated summaries as evidence.
|
||||
- Unsourced pages.
|
||||
- Illegal PDF mirrors.
|
||||
- Wiki-style pages without citations as primary evidence.
|
||||
|
||||
Research rules:
|
||||
- Separate verified facts from inference.
|
||||
- Prefer primary sources over secondary summaries.
|
||||
- Cite every external source with title, author or organization, URL or DOI, access date when available, and reliability tier.
|
||||
- Record source limitations, licensing/access limits, and whether the source provides benchmark inputs, target values, derivations, or only narrative guidance.
|
||||
- Do not copy long source text. Summarize and quote only short passages when necessary.
|
||||
- Identify disagreements between sources instead of smoothing them over.
|
||||
- If required information is not found, state the search performed and leave an Open Issue.
|
||||
|
||||
Required Research Brief sections:
|
||||
1. Metadata: feature_id, source_requirement, status, owner_agent, date.
|
||||
2. Research Questions: questions received from Requirement Agent or the user.
|
||||
3. Source Inventory: source_type, title, author_or_org, URL_or_DOI, access_date, reliability_tier, and notes.
|
||||
4. Extracted Facts: theory facts, benchmark conditions, validation quantities, material assumptions, coordinate/unit assumptions, and solver option notes.
|
||||
5. Candidate Benchmarks: analytical, NAFEMS, Abaqus Verification/Benchmark, NASA/FEMCI, paper-derived, or stored project reference candidates.
|
||||
6. Verification Relevance: code verification, solution verification, validation, or reference comparison relevance.
|
||||
7. Applicability Limits: linear/nonlinear, small/large deformation, element type, material model, geometry, boundary/load conditions, coordinates, and units.
|
||||
8. Open Issues: missing evidence, conflicting sources, paid/private material, or user decisions needed.
|
||||
9. Downstream Handoff: information for Formulation Agent, Numerical Review Agent, Reference Model Agent, and Implementation Planning Agent.
|
||||
|
||||
Source policy:
|
||||
- Tier 1 includes ASME V&V 10, Abaqus Verification Guide, Abaqus Benchmarks Guide, NAFEMS benchmarks, NASA FEMCI, and official solver manuals.
|
||||
- Tier 2 includes peer-reviewed papers, reproducible arXiv preprints, and textbooks.
|
||||
- Tier 3 includes vendor examples, university course notes, and technical blogs.
|
||||
- Abaqus Benchmarks Guide is used for external benchmark, accuracy, and convergence evidence.
|
||||
- Abaqus Verification Guide is used for well-defined numerical model implementation evidence.
|
||||
- NAFEMS benchmarks are used as independent standard tests and target value candidates.
|
||||
- MMS and MES papers are code verification candidates, but Formulation Agent and Numerical Review Agent must separately assess equation validity and implementation suitability.
|
||||
|
||||
Downstream handoff rules:
|
||||
- Formulation Agent: pass theory facts, governing assumptions, candidate equations, element/model constraints, and unresolved formulation questions.
|
||||
- Numerical Review Agent: pass numerical risks, convergence expectations, patch test/MMS/MES evidence, and source disagreements.
|
||||
- Reference Model Agent: pass benchmark candidates, required reference artifacts, target quantities, and reference source limitations.
|
||||
- Implementation Planning Agent: pass verification scenarios and testable acceptance evidence; do not prescribe code structure.
|
||||
|
||||
Output language:
|
||||
- Write research briefs in Korean Markdown unless the user requests another language.
|
||||
- Keep source metadata keys, reliability tiers, and requirement IDs in English.
|
||||
"""
|
||||
@@ -0,0 +1,148 @@
|
||||
# 정식화 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Formulation Agent가 작성하거나 제안한 기능별 유한요소 정식화 문서를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/formulations/<feature-id>-formulation.md` 형식을 사용한다. 각 문서는 Requirement Agent의 요구조건과 Research Agent의 연구 브리프를 입력으로 받아 Implementation Planning Agent와 Implementation Agent가 사용할 수 있는 수학/알고리즘 계약을 제공해야 한다.
|
||||
|
||||
## Formulation Agent 역할
|
||||
|
||||
Formulation Agent는 구현 가능한 FEM 정식화 문서를 작성한다.
|
||||
|
||||
수행한다:
|
||||
- strong form, weak form, discretization을 정리한다.
|
||||
- shape functions, `B` matrix 또는 kinematic operator를 정의한다.
|
||||
- constitutive contract, element residual/internal force, stiffness/tangent matrix를 정리한다.
|
||||
- numerical integration, mapping, Jacobian 규칙을 명시한다.
|
||||
- output recovery, algorithm pseudocode, edge case, numerical risk를 정리한다.
|
||||
- Numerical Review Agent가 검토할 handoff 항목을 남긴다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- release readiness를 승인하지 않는다.
|
||||
- Numerical Review Agent 검토 전 정식화를 최종 승인하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Formulation
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- source_research: docs/research/<feature-id>-research.md
|
||||
- status: draft | needs-research | ready-for-numerical-review
|
||||
- owner_agent: formulation-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Scope and Assumptions
|
||||
- analysis_type: linear static | nonlinear static | modal | dynamic | other
|
||||
- element_type: <target element>
|
||||
- deformation: small | large | TBD
|
||||
- linearity: linear | nonlinear | TBD
|
||||
- material_model_boundary: <scope>
|
||||
- coordinate_system: <global/local coordinates>
|
||||
- units: <unit system>
|
||||
|
||||
## Primary Variables and DOFs
|
||||
- nodal_variables: <variables>
|
||||
- dof_ordering: <ordering>
|
||||
- sign_convention: <convention>
|
||||
- constrained_free_dof_assumptions: <assumptions>
|
||||
|
||||
## Strong Form and Boundary Conditions
|
||||
- governing_equation: <equation>
|
||||
- dirichlet_boundary: <essential BC>
|
||||
- neumann_boundary: <natural BC>
|
||||
- natural_boundary_terms: <terms>
|
||||
|
||||
## Weak or Variational Form
|
||||
- test_functions: <definition>
|
||||
- integration_by_parts: <steps>
|
||||
- internal_virtual_work: <expression>
|
||||
- external_virtual_work: <expression>
|
||||
|
||||
## Discretization
|
||||
- interpolation: <field interpolation>
|
||||
- shape_functions: <shape functions>
|
||||
- partition_of_unity_check: <expected check>
|
||||
- kronecker_delta_check: <expected check>
|
||||
- nodal_layout: <layout>
|
||||
|
||||
## Kinematics
|
||||
- strain_displacement_relation: <relation>
|
||||
- B_matrix_or_kinematic_operator: <definition>
|
||||
- deformation_gradient: <definition or N/A>
|
||||
- strain_measure: <definition or N/A>
|
||||
|
||||
## Constitutive Contract
|
||||
- elasticity_matrix_or_stress_update: <contract>
|
||||
- material_state_variables: <variables or N/A>
|
||||
- assumptions_and_constraints: <assumptions>
|
||||
|
||||
## Element Equations
|
||||
- internal_force_or_residual: <expression>
|
||||
- external_force: <expression>
|
||||
- stiffness_or_tangent_matrix: <expression>
|
||||
- mass_or_damping: <required expression or N/A>
|
||||
- vector_matrix_dimensions: <dimensions>
|
||||
|
||||
## Mapping and Numerical Integration
|
||||
- reference_coordinates: <coordinates>
|
||||
- isoparametric_mapping: <mapping>
|
||||
- jacobian: <definition>
|
||||
- determinant_checks: <validity checks>
|
||||
- gauss_points_and_weights: <rule>
|
||||
- integration_policy: full | reduced | selective | analytical | TBD
|
||||
|
||||
## Output Recovery
|
||||
- displacement: <location and convention>
|
||||
- reaction: <calculation>
|
||||
- element_force: <calculation>
|
||||
- strain: <location and recovery>
|
||||
- stress: <location and recovery>
|
||||
- nodal_extrapolation: <policy or N/A>
|
||||
|
||||
## Algorithm Pseudocode
|
||||
```text
|
||||
math-level element routine and assembly flow only
|
||||
no C++ signatures, class names, or file paths
|
||||
```
|
||||
|
||||
## Numerical Risks
|
||||
- rigid_body_modes: <risk/check>
|
||||
- patch_test: <expected test>
|
||||
- symmetry: <expected property>
|
||||
- positive_definiteness: <expected property>
|
||||
- hourglass: <risk or N/A>
|
||||
- shear_locking: <risk or N/A>
|
||||
- volumetric_locking: <risk or N/A>
|
||||
- distortion: <risk/check>
|
||||
- singular_jacobian: <risk/check>
|
||||
|
||||
## Open Issues and Downstream Handoff
|
||||
|
||||
### Numerical Review Agent
|
||||
- <derivations, assumptions, numerical risks, open issues>
|
||||
|
||||
### I/O Definition Agent
|
||||
- <required inputs, outputs, units, coordinate conventions, output locations>
|
||||
|
||||
### Reference Model Agent
|
||||
- <benchmarkable quantities, patch test needs, expected invariants, edge cases>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <math-level pseudocode, acceptance-relevant quantities, tests to write first>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 요구조건과 연구 브리프에 없는 값을 임의로 확정하지 않는다.
|
||||
- strong form, weak form, discretization, kinematics, constitutive contract, element equations를 구분한다.
|
||||
- shape functions는 가능한 경우 partition of unity와 Kronecker delta 검사를 포함한다.
|
||||
- numerical integration은 integration point, weight, 적분 대상, full/reduced/selective 정책을 포함한다.
|
||||
- mapping은 reference coordinates, Jacobian, determinant validity check를 포함한다.
|
||||
- output recovery는 nodal, element-level, integration-point 위치를 구분한다.
|
||||
- numerical risk는 rigid body modes, patch test, hourglass, locking, Jacobian 문제를 명시한다.
|
||||
@@ -0,0 +1,119 @@
|
||||
# 요구조건 문서 작성 가이드
|
||||
|
||||
이 디렉터리는 Requirement Agent가 작성하거나 제안한 기능별 요구조건 문서를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/requirements/<feature-id>.md` 형식을 사용한다. 각 문서는 구현 전에 작성되며, Formulation Agent, I/O Definition Agent, Reference Model Agent, Implementation Planning Agent가 이어받을 수 있는 검증 가능한 baseline이어야 한다.
|
||||
|
||||
## Requirement Agent 역할
|
||||
|
||||
Requirement Agent는 솔버 기능 요청을 검증 가능한 요구조건으로 바꾼다.
|
||||
|
||||
수행한다:
|
||||
- 기능 범위, 제외 범위, 입력, 출력, 제약조건을 정의한다.
|
||||
- 해석 타입, 대상 요소, 자유도, 재료 모델, 경계조건, 하중 조건을 명확히 한다.
|
||||
- 절점 변위, 반력, 요소 내력, 응력 등 검증 물리량을 정한다.
|
||||
- tolerance와 reference artifact 요구사항을 기록한다.
|
||||
- Requirement Verification Matrix를 작성한다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- 유한요소 정식화를 확정하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- 기능 완료 여부를 승인하지 않는다.
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Requirements
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- title: <title>
|
||||
- status: draft | needs-user-decision | approved
|
||||
- owner_agent: requirement-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Purpose
|
||||
<기능 목적과 사용자/개발자 관점의 기대 동작>
|
||||
|
||||
## In Scope
|
||||
- <포함 범위>
|
||||
|
||||
## Out Of Scope
|
||||
- <제외 범위>
|
||||
|
||||
## Analysis Definition
|
||||
- analysis_type: linear static | nonlinear static | modal | other
|
||||
- elements: <대상 요소>
|
||||
- dofs: <자유도>
|
||||
- material_model: <재료 모델>
|
||||
- boundary_conditions: <경계조건>
|
||||
- loads: <하중 조건>
|
||||
- coordinate_system: <좌표계>
|
||||
- units: <단위계>
|
||||
|
||||
## Input Requirements
|
||||
- <입력 요구조건>
|
||||
|
||||
## Output Requirements
|
||||
- <출력 요구조건>
|
||||
|
||||
## Verification Quantities
|
||||
- nodal_displacement: required | not-applicable
|
||||
- reaction: required | not-applicable
|
||||
- element_internal_force: required | not-applicable
|
||||
- stress: required | not-applicable
|
||||
- strain: required | not-applicable
|
||||
- energy_or_residual: required | not-applicable
|
||||
|
||||
## Tolerance Policy
|
||||
- absolute_tolerance: <value or TBD>
|
||||
- relative_tolerance: <value or TBD>
|
||||
- norm_based_tolerance: <value or TBD>
|
||||
|
||||
## Reference Artifact Requirements
|
||||
Expected location: `references/<feature-id>/`
|
||||
|
||||
- `model.inp`: required | not-applicable
|
||||
- `metadata.json`: required
|
||||
- `displacements.csv`: required | not-applicable
|
||||
- `reactions.csv`: required | not-applicable
|
||||
- `element_forces.csv`: required | not-applicable
|
||||
- `stresses.csv`: required | not-applicable
|
||||
|
||||
## Requirement Verification Matrix
|
||||
|
||||
| id | statement | category | rationale | source | priority | verification_method | acceptance_criteria | tolerance | downstream_agents | status |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| FESA-REQ-<FEATURE>-001 | The FESA solver shall ... | functional | ... | user | must | reference-comparison | ... | ... | Reference Model Agent; Implementation Planning Agent | draft |
|
||||
|
||||
## Open Questions
|
||||
- <미확정 값 또는 사용자 결정 필요 사항>
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Research Agent
|
||||
- <조사할 이론, 논문, benchmark, 표준>
|
||||
|
||||
### Formulation Agent
|
||||
- <정식화 단계에 넘길 해석 타입, 요소, 재료, 자유도, 출력 물리량 계약>
|
||||
|
||||
### I/O Definition Agent
|
||||
- <입력/출력 schema 요구조건>
|
||||
|
||||
### Reference Model Agent
|
||||
- <필요한 references/<feature-id>/ artifact 목록>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <먼저 작성할 테스트와 acceptance criteria>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 `must` 요구조건은 검증 방법과 acceptance criteria를 가져야 한다.
|
||||
- 모든 수치 요구조건은 단위, 좌표계, tolerance 또는 `TBD with owner`를 가져야 한다.
|
||||
- reference 비교가 필요한 요구조건은 필요한 CSV artifact를 명시해야 한다.
|
||||
- "빠르게", "정확하게", "Abaqus처럼" 같은 문장은 검증 가능한 기준으로 바꾸거나 open question으로 남겨야 한다.
|
||||
- 구현 방법, 정식화 세부식, C++ API는 이 문서에서 확정하지 않는다.
|
||||
@@ -0,0 +1,108 @@
|
||||
# 연구 브리프 작성 가이드
|
||||
|
||||
이 디렉터리는 Research Agent가 작성하거나 제안한 기능별 연구 브리프를 보관하는 위치다.
|
||||
|
||||
기본 파일명은 `docs/research/<feature-id>-research.md` 형식을 사용한다. 각 브리프는 Requirement Agent의 요구조건을 입력으로 받아 Formulation Agent, Numerical Review Agent, Reference Model Agent, Implementation Planning Agent가 사용할 수 있는 근거 자료를 제공해야 한다.
|
||||
|
||||
## Research Agent 역할
|
||||
|
||||
Research Agent는 FEM 이론, benchmark, verification reference, solver manual, 논문 자료를 조사한다.
|
||||
|
||||
수행한다:
|
||||
- 기능 요구조건과 관련된 이론 자료를 조사한다.
|
||||
- 요소별 benchmark, patch test, MMS, MES, convergence study 후보를 찾는다.
|
||||
- Abaqus/Nastran 결과와 비교 가능한 공개 benchmark 또는 문헌 해를 정리한다.
|
||||
- 자료의 신뢰도, 적용 범위, 한계, 상충 여부를 평가한다.
|
||||
- downstream agent가 사용할 수 있도록 출처와 근거를 추적 가능하게 남긴다.
|
||||
|
||||
수행하지 않는다:
|
||||
- C++ 코드를 구현하지 않는다.
|
||||
- 유한요소 정식화를 확정하지 않는다.
|
||||
- C++ API나 파일 구조를 설계하지 않는다.
|
||||
- Abaqus, Nastran 또는 레퍼런스 솔버를 직접 실행하지 않는다.
|
||||
- reference CSV 결과를 생성하지 않는다.
|
||||
- 기능 완료 여부를 승인하지 않는다.
|
||||
|
||||
## Source Reliability Tier
|
||||
|
||||
| tier | source type | examples | use |
|
||||
| --- | --- | --- | --- |
|
||||
| Tier 1 | 공식 표준, 공식 solver manual, 공식 benchmark, 공공기관 자료 | ASME V&V 10, Abaqus Verification Guide, Abaqus Benchmarks Guide, NAFEMS benchmarks, NASA FEMCI, official solver manuals | 우선 근거 |
|
||||
| Tier 2 | peer-reviewed paper, reproducible arXiv preprint, textbook | MMS/MES 논문, finite element textbook | 이론/검증 후보 |
|
||||
| Tier 3 | vendor example, university course note, technical blog | 공개 강의노트, 기술 블로그 | 보조 근거 |
|
||||
| Reject | forum answer, LLM summary, unsourced page, illegal PDF mirror, citation 없는 wiki성 문서 | forum, mirror PDF, 출처 없는 요약 | primary evidence로 사용 금지 |
|
||||
|
||||
## 문서 템플릿
|
||||
|
||||
```markdown
|
||||
# <feature title> Research Brief
|
||||
|
||||
## Metadata
|
||||
- feature_id: <feature-id>
|
||||
- source_requirement: docs/requirements/<feature-id>.md
|
||||
- status: draft | needs-user-decision | ready-for-formulation
|
||||
- owner_agent: research-agent
|
||||
- date: <YYYY-MM-DD>
|
||||
|
||||
## Research Questions
|
||||
- <Requirement Agent 또는 사용자가 넘긴 조사 질문>
|
||||
|
||||
## Source Inventory
|
||||
|
||||
| source_type | title | author_or_org | URL_or_DOI | access_date | reliability_tier | notes |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| standard | ASME V&V 10 | ASME | <URL> | <YYYY-MM-DD> | Tier 1 | VVUQ framework |
|
||||
|
||||
## Extracted Facts
|
||||
- <정식화에 필요한 사실, benchmark 조건, 검증 물리량, 재료/좌표/단위 가정>
|
||||
|
||||
## Candidate Benchmarks
|
||||
|
||||
| benchmark_id | source | benchmark_type | physics | target_quantities | artifact_needs | applicability |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| <id> | <source title> | analytical \| NAFEMS \| Abaqus Verification/Benchmark \| NASA/FEMCI \| paper-derived | <physics> | <targets> | <needed artifacts> | <limits> |
|
||||
|
||||
## Verification Relevance
|
||||
- code_verification: <관련성>
|
||||
- solution_verification: <관련성>
|
||||
- validation: <관련성>
|
||||
- reference_comparison: <관련성>
|
||||
|
||||
## Applicability Limits
|
||||
- linear_or_nonlinear: <scope>
|
||||
- deformation: small | large | TBD
|
||||
- element_type: <scope>
|
||||
- material_model: <scope>
|
||||
- geometry: <scope>
|
||||
- boundary_conditions: <scope>
|
||||
- loads: <scope>
|
||||
- coordinate_system: <scope>
|
||||
- units: <scope>
|
||||
|
||||
## Open Issues
|
||||
- <근거 부족, 상충 자료, 유료/비공개 자료, 사용자 결정 필요 사항>
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Formulation Agent
|
||||
- <이론 사실, governing assumptions, candidate equations, unresolved formulation questions>
|
||||
|
||||
### Numerical Review Agent
|
||||
- <수치 위험, convergence expectations, patch test/MMS/MES evidence, source disagreements>
|
||||
|
||||
### Reference Model Agent
|
||||
- <benchmark candidates, required reference artifacts, target quantities, source limitations>
|
||||
|
||||
### Implementation Planning Agent
|
||||
- <verification scenarios and testable acceptance evidence>
|
||||
```
|
||||
|
||||
## 품질 기준
|
||||
|
||||
- 모든 외부 근거는 source metadata와 reliability tier를 가져야 한다.
|
||||
- verified fact와 inference를 구분해야 한다.
|
||||
- benchmark 후보는 target quantity와 applicability limit을 가져야 한다.
|
||||
- Abaqus Benchmarks Guide와 Abaqus Verification Guide의 용도를 구분해야 한다.
|
||||
- NAFEMS benchmark는 independent standard test와 target value 후보로 기록해야 한다.
|
||||
- MMS/MES 자료는 code verification 후보로 기록하되 정식화 확정으로 취급하지 않는다.
|
||||
- 사용 불가능하거나 유료/비공개인 자료는 Open Issues에 남겨야 한다.
|
||||
@@ -0,0 +1,88 @@
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
import tomllib
|
||||
except ModuleNotFoundError: # pragma: no cover
|
||||
import tomli as tomllib
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
AGENT_PATH = ROOT / ".codex" / "agents" / "formulation-agent.toml"
|
||||
FORMULATIONS_README = ROOT / "docs" / "formulations" / "README.md"
|
||||
|
||||
|
||||
class FormulationAgentConfigTests(unittest.TestCase):
|
||||
def test_formulation_agent_toml_has_required_codex_fields(self):
|
||||
data = tomllib.loads(AGENT_PATH.read_text(encoding="utf-8"))
|
||||
|
||||
self.assertEqual(data["name"], "formulation-agent")
|
||||
self.assertIn("FEM formulation", data["description"])
|
||||
self.assertEqual(data["sandbox_mode"], "read-only")
|
||||
self.assertEqual(data["model_reasoning_effort"], "high")
|
||||
self.assertIn("developer_instructions", data)
|
||||
|
||||
def test_formulation_agent_instructions_enforce_boundaries(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Do not implement code.",
|
||||
"Do not design C++ APIs",
|
||||
"Do not run Abaqus, Nastran, or any reference solver.",
|
||||
"Do not generate reference CSVs.",
|
||||
"Do not approve release readiness.",
|
||||
"docs/SOLVER_AGENT_DESIGN.md",
|
||||
"docs/requirements/<feature-id>.md",
|
||||
"docs/research/<feature-id>-research.md",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_formulation_agent_instructions_define_output_contract(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Strong Form and Boundary Conditions",
|
||||
"Weak or Variational Form",
|
||||
"Discretization",
|
||||
"Kinematics",
|
||||
"Constitutive Contract",
|
||||
"Element Equations",
|
||||
"Mapping and Numerical Integration",
|
||||
"Output Recovery",
|
||||
"Numerical Risks",
|
||||
"Downstream Handoff",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_formulation_agent_instructions_define_numerical_risk_policy(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"rigid body modes",
|
||||
"patch test",
|
||||
"hourglass",
|
||||
"locking",
|
||||
"Jacobian",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_formulation_document_guide_defines_output_contract(self):
|
||||
guide = FORMULATIONS_README.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Strong Form and Boundary Conditions",
|
||||
"Weak or Variational Form",
|
||||
"Discretization",
|
||||
"Kinematics",
|
||||
"Constitutive Contract",
|
||||
"Element Equations",
|
||||
"Mapping and Numerical Integration",
|
||||
"Output Recovery",
|
||||
"Numerical Risks",
|
||||
"Downstream Handoff",
|
||||
):
|
||||
self.assertIn(required_text, guide)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -0,0 +1,55 @@
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
import tomllib
|
||||
except ModuleNotFoundError: # pragma: no cover
|
||||
import tomli as tomllib
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
AGENT_PATH = ROOT / ".codex" / "agents" / "requirement-agent.toml"
|
||||
REQUIREMENTS_README = ROOT / "docs" / "requirements" / "README.md"
|
||||
|
||||
|
||||
class RequirementAgentConfigTests(unittest.TestCase):
|
||||
def test_requirement_agent_toml_has_required_codex_fields(self):
|
||||
data = tomllib.loads(AGENT_PATH.read_text(encoding="utf-8"))
|
||||
|
||||
self.assertEqual(data["name"], "requirement-agent")
|
||||
self.assertIn("verifiable requirements", data["description"])
|
||||
self.assertEqual(data["sandbox_mode"], "read-only")
|
||||
self.assertEqual(data["model_reasoning_effort"], "high")
|
||||
self.assertIn("developer_instructions", data)
|
||||
|
||||
def test_requirement_agent_instructions_enforce_boundaries(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Do not implement code.",
|
||||
"Do not write finite element formulations.",
|
||||
"Do not run Abaqus, Nastran, or any reference solver.",
|
||||
"Do not create reference CSV outputs.",
|
||||
"Requirement Verification Matrix",
|
||||
"docs/SOLVER_AGENT_DESIGN.md",
|
||||
"references/<feature>",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_requirement_document_guide_defines_output_contract(self):
|
||||
guide = REQUIREMENTS_README.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"feature_id",
|
||||
"Verification Quantities",
|
||||
"Tolerance Policy",
|
||||
"Reference Artifact Requirements",
|
||||
"Requirement Verification Matrix",
|
||||
"Downstream Handoff",
|
||||
"FESA-REQ-<FEATURE>-001",
|
||||
):
|
||||
self.assertIn(required_text, guide)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -0,0 +1,79 @@
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
import tomllib
|
||||
except ModuleNotFoundError: # pragma: no cover
|
||||
import tomli as tomllib
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
AGENT_PATH = ROOT / ".codex" / "agents" / "research-agent.toml"
|
||||
RESEARCH_README = ROOT / "docs" / "research" / "README.md"
|
||||
|
||||
|
||||
class ResearchAgentConfigTests(unittest.TestCase):
|
||||
def test_research_agent_toml_has_required_codex_fields(self):
|
||||
data = tomllib.loads(AGENT_PATH.read_text(encoding="utf-8"))
|
||||
|
||||
self.assertEqual(data["name"], "research-agent")
|
||||
self.assertIn("FEM theory", data["description"])
|
||||
self.assertEqual(data["sandbox_mode"], "read-only")
|
||||
self.assertEqual(data["model_reasoning_effort"], "high")
|
||||
self.assertIn("developer_instructions", data)
|
||||
|
||||
def test_research_agent_instructions_enforce_boundaries(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Do not implement code.",
|
||||
"Do not finalize FEM formulations.",
|
||||
"Do not run Abaqus, Nastran, or any reference solver.",
|
||||
"Do not generate reference CSVs.",
|
||||
"docs/SOLVER_AGENT_DESIGN.md",
|
||||
"docs/requirements/<feature-id>.md",
|
||||
"Separate verified facts from inference.",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_research_agent_instructions_define_output_contract(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Source Inventory",
|
||||
"Candidate Benchmarks",
|
||||
"Verification Relevance",
|
||||
"Applicability Limits",
|
||||
"Downstream Handoff",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_research_agent_instructions_define_source_policy(self):
|
||||
instructions = AGENT_PATH.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"ASME V&V 10",
|
||||
"Abaqus Verification Guide",
|
||||
"Abaqus Benchmarks Guide",
|
||||
"NAFEMS benchmarks",
|
||||
"NASA FEMCI",
|
||||
"MMS and MES papers",
|
||||
):
|
||||
self.assertIn(required_text, instructions)
|
||||
|
||||
def test_research_document_guide_defines_output_contract(self):
|
||||
guide = RESEARCH_README.read_text(encoding="utf-8")
|
||||
|
||||
for required_text in (
|
||||
"Source Reliability Tier",
|
||||
"Source Inventory",
|
||||
"Candidate Benchmarks",
|
||||
"Verification Relevance",
|
||||
"Applicability Limits",
|
||||
"Downstream Handoff",
|
||||
):
|
||||
self.assertIn(required_text, guide)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user