# Reference Verification Report 문서 작성 가이드 이 디렉터리는 Reference Verification Agent가 작성하거나 제안하는 기능별 reference comparison report를 보관하는 위치다. 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/-reference-verification.md` 형식을 사용한다. ## Reference Verification Agent 역할 수행한다: - `reference//` 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 문서가 요구할 때만 `_strains.csv`, `_energy_or_residual.csv`, 또는 `_.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를 승인하지 않는다. ## 실행 순서 Reference Verification Agent는 항상 다음 순서를 따른다. ```text ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT ``` `ARTIFACT CHECK`에서 다음 항목이 없으면 비교를 시작하지 않는다. - `metadata.json` - `model.inp` - generated solver `results.h5` - `reference//_displacements.csv` - `reference//_reactions.csv` - `reference//_internalforces.csv` - `reference//_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 ## 비교 대상 | quantity | fesa_hdf5_dataset | reference_csv | | --- | --- | --- | | displacement | /steps//frames//field_outputs/U | reference//_displacements.csv | | reaction | /steps//frames//field_outputs/RF | reference//_reactions.csv | | internal force | /steps//frames//field_outputs/element_forces | reference//_internalforces.csv | | stress | /steps//frames//field_outputs/S | reference//_stresses.csv | 선택 Abaqus reference CSV: - `reference//_strains.csv`: strain이 acceptance criteria에 포함된 경우 - `reference//_energy_or_residual.csv`: energy, residual, convergence quantity가 acceptance criteria에 포함된 경우 - `reference//_.csv`: feature-specific quantity가 acceptance criteria에 포함된 경우 ## 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`: 로컬 실행 환경 문제로 비교가 불가능하다. ## 문서 템플릿 ```markdown # Reference Verification Report ## Metadata - feature_id: - source_build_test_report: docs/build-test-reports/-build-test.md - source_reference_models: docs/reference-models/-reference-models.md - source_io_definition: docs/io-definitions/-io.md - source_implementation_report: - status: pass-for-physics-evaluation | needs-correction | needs-reference-artifacts | needs-solver-results | needs-upstream-decision | blocked - owner_agent: reference-verification-agent - date: ## Artifact Inventory | item | path | status | notes | | --- | --- | --- | --- | | reference_model_dir | reference// | present | missing | | | reference_input | reference//model.inp | present | missing | | | metadata | reference//metadata.json | present | missing | | | reference_displacements_csv | reference//_displacements.csv | present | missing | | | reference_reactions_csv | reference//_reactions.csv | present | missing | | | reference_internalforces_csv | reference//_internalforces.csv | present | missing | | | reference_stresses_csv | reference//_stresses.csv | present | missing | | | solver_hdf5 | /results.h5 | present | missing | | | solver_debug_csv_view | /csv/ | present | missing | | ## Comparison Contract - hdf5_schema_version: - reference_csv_schema_version: - id_matching: node_id | element_id | step/frame | integration_point | component - units: - coordinate_system: - output_location: nodal | element | integration_point | centroid | recovery_location - component_naming: - row_sort_order: - tolerance_source: - tolerance_policy: absolute | relative | norm-based | combined - zero_reference_policy: ## 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 | | /steps//frames//field_outputs/U | reference//_displacements.csv | | | | | | | | | | pass | fail | | reaction | | /steps//frames//field_outputs/RF | reference//_reactions.csv | | | | | | | | | | pass | fail | | internal force | | /steps//frames//field_outputs/element_forces | reference//_internalforces.csv | | | | | | | | | | pass | fail | | stress | | /steps//frames//field_outputs/S | reference//_stresses.csv | | | | | | | | | | pass | fail | ## 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: - evidence: ## Handoff Recommendation | target_agent | reason | required_input | | --- | --- | --- | | Correction Agent | | | | Reference Model Agent | | | | I/O Definition Agent | | | | Physics Evaluation Agent | | | | Coordinator Agent | | | ## No-Change Assertion - source_files_modified: false - test_files_modified: false - cmake_files_modified: false - reference_artifacts_modified: false - tolerance_policies_modified: false - notes: ## Open Issues - ``` ## 상태 값 - `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//_*.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가 판정한다.