chore: merge nonlinear static Newton-Raphson feature
# Conflicts: # docs/nonlinear-static-newton-raphson/coordination.md # docs/nonlinear-static-newton-raphson/formulation.md # docs/nonlinear-static-newton-raphson/implementation-plan.md # docs/nonlinear-static-newton-raphson/io.md # docs/nonlinear-static-newton-raphson/numerical-review.md # docs/nonlinear-static-newton-raphson/reference-model.md # phases/index.json # phases/nonlinear-static-newton-raphson/index.json # phases/nonlinear-static-newton-raphson/step0.md # phases/nonlinear-static-newton-raphson/step1.md # phases/nonlinear-static-newton-raphson/step10.md # phases/nonlinear-static-newton-raphson/step11.md # phases/nonlinear-static-newton-raphson/step12.md # phases/nonlinear-static-newton-raphson/step2.md # phases/nonlinear-static-newton-raphson/step3.md # phases/nonlinear-static-newton-raphson/step4.md # phases/nonlinear-static-newton-raphson/step5.md # phases/nonlinear-static-newton-raphson/step6.md # phases/nonlinear-static-newton-raphson/step7.md # phases/nonlinear-static-newton-raphson/step8.md # phases/nonlinear-static-newton-raphson/step9.md
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Nonlinear Static Newton-Raphson Build and Test Report
|
||||
|
||||
## Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| owner_agent | `implementation-agent` |
|
||||
| working directory | `C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson` |
|
||||
| configuration | `windows-msvc-ninja-debug`, x64 Debug |
|
||||
| compiler | MSVC `cl.exe` from VS 18, toolset `14.51.36231` |
|
||||
| generator | Ninja |
|
||||
| dependency configuration | `FESA_GTEST_SOURCE_DIR=C:/git/googletest`; MKL `2026.1`; TBB `2023.1`; HDF5 `2.1.1` |
|
||||
| final classification | none; all commands passed |
|
||||
|
||||
## Fresh command log
|
||||
|
||||
| stage | command | exit | duration | output tail |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | 0 | 1.066 s | `Configuring done`; `Generating done`; build files written to `.harness/build-ninja-msvc-debug` |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | 0 | 0.113 s | `ninja: no work to do.` |
|
||||
| discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | 0 | 0.219 s | 302 tests discovered |
|
||||
| focused control/log | `ctest --preset windows-msvc-ninja-debug -R "^(NonlinearConvergence|NewtonIterationLog)\." --output-on-failure` | 0 | 0.471 s | 14/14 passed |
|
||||
| focused procedure/writer | `ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticProcedure|NonlinearHdf5ResultsWriter)\." --output-on-failure` | 0 | 2.524 s | 7/7 passed |
|
||||
| nonlinear reference | `ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure` | 0 | 905.404 s | 9/9 passed |
|
||||
| extended reference | `ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure` | 0 | 930.617 s | 9/9 matched tests passed |
|
||||
| full CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | 0 | 956.498 s | 302/302 passed; integration 16, unit 256, reference 30 |
|
||||
|
||||
The full CTest output reported no failed-test inventory. The build emitted no compiler/linker
|
||||
output beyond `ninja: no work to do.`; the build tree audit found no new `warning C####` or
|
||||
`: warning:` record. The only diagnostic setup issue was that standalone HDF5 inspection tools
|
||||
need Intel `libmmd.dll` on `PATH`; this did not affect the staged test executables, CMake build, or
|
||||
CTest and is not a product failure.
|
||||
|
||||
## Results and handoff
|
||||
|
||||
The selected `.harness/config.json` preset was used throughout. All commands were run from the
|
||||
repository root in an x64 VsDevCmd environment. The final status is
|
||||
`pass-for-physics-evaluation`; no Harness Python command was required because this Step did not
|
||||
change Python, hooks, or agent configuration.
|
||||
|
||||
This Step changed documentation and its own phase status only. It did not modify C++ production,
|
||||
tests, CMake, Harness configuration, tolerance, reference artifacts, or output data. The immutable
|
||||
reference artifact audit before and after comparison was identical; see `reference-comparison.md`.
|
||||
@@ -3,77 +3,72 @@
|
||||
## 1. Metadata and Feature Scope
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- workflow_state: `needs-implementation`
|
||||
- workflow_state: `completed`
|
||||
- owner_agent: `coordinator-agent`
|
||||
- request_date: `2026-08-18`
|
||||
- last_updated: `2026-08-24` (Harness attempt 1 timed out before Step 0 evidence; Step 0 retry dispatch package ready)
|
||||
- last_updated: `2026-08-28` (STAGE8-RELEASE-001 return audited; eight-stage workflow completed)
|
||||
- process_classification: `architectural`
|
||||
- requested_capability: Newton–Raphson 방법을 사용하는 새 nonlinear static analysis procedure
|
||||
- proposed_scope_boundary: 첫 release는 initial configuration 기준 Total Lagrangian, materially linear + geometrically nonlinear MITC4로 제한한다. 요구조건 인터뷰와 8단계 evidence gate를 먼저 완료하며, 승인 전에는 상세 수치·I/O·구현 범위를 확정하거나 기존 linear-static lifecycle을 변경하지 않는다.
|
||||
- naming_note: 사용자 표현 `Newton-Rhapson`은 표준 명칭 `Newton–Raphson`으로 정규화했다.
|
||||
- current_goal: Retry the user-authorized no-push Harness execution of materialized phase `nonlinear-static-newton-raphson`; Step 0 `cli-output-lease-and-derived-names` remains the only current Step after attempt 1 failed before Step evidence.
|
||||
- constraints: 승인된 Stage 1-5 hashes, physics/scope/tolerance/authoritative output/public compatibility, `rho_M <= 1e-12`, fixed-global source identity, no drilling load channel과 Stage 6 materialization evidence를 보존한다. Retry `python scripts/execute.py nonlinear-static-newton-raphson` without `--push`; do not run `--push`, force-push, or use `danger-full-access`. Attempt 1 failure is classified as `harness-uncaught-step-codex-timeout-no-retry` attempt 1; if the same classification reaches attempt 2, stop automatic rework and route to `needs-user-decision` or `blocked`. `scripts/execute.py` owns branch, pending-Step selection, retry, timestamps, commits, advancement and top-level phase status. Each Implementation Agent session owns only the Executor-selected current `stepN.md` and must perform `RED -> observed failure -> minimal GREEN -> VERIFY`, updating only that Step status plus summary/error/blocked payload. Do not advance Physics/Release until `implementation-report.md`, `build-test.md`, `reference-comparison.md` and passing implementation evidence exist. Stress CSVs are optional inspection/order evidence only with no comparison projection; `RM3` is excluded; shellNL `U` is blocking, `UR` warning-only, constrained `RF` families and physical spatial `RM1/RM2` are blocking; exact source-ID prechecks and `docs/TOLERANCE.md` are preserved. Reference input/CSV 생성·수정·rename·정규화와 Abaqus/Nastran/reference solver 실행을 금지한다.
|
||||
- current_goal: Stage 8 `ready-for-release` is audited and the eight-stage workflow is closed. Root retains the user's requested final commit/push; no external release action is authorized.
|
||||
- constraints: 승인된 physics/scope/tolerance/authoritative output/public compatibility, `rho_M <= 1e-12`, fixed-global source identity, no drilling load channel, thresholds `1e-2`/typed absolute `1e-3`, four-channel AND, Full Newton, fixed stepping, no line search, 100-iteration limit, `docs/TOLERANCE.md`, reference artifact filenames/hashes, stress optional inspection and `RM3` exclusion을 유지한다. USER-DECISION-004 option 1 keeps local nodal `RF1/RF2/RF3` and physical spatial `RM1/RM2` review-only/nonblocking, with blocking factor-one global applied-plus-reaction resultant force `[3]`, global resultant moment `[3]` and accepted free-DOF residual gates/evidence; global resultant semantics are global origin `[0,0,0]`, current force arms and spatial physical nodal moments. USER-DECISION-006 supersedes/retire prior moment-only `1e-9` and all `fesa.env`/runtime-config discussion: do not add `fesa.env`, config parsing, runtime API, or product behavior. Current authoritative decision fixes both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8` while preserving exact formulas, sum-of-contribution scales, zero-scale rule, quantities/source identity, blocking/review/warning dispositions, NSNR-069 free-residual gates, HDF5 schema, reference artifacts and `docs/TOLERANCE.md` separation. Sequential reapproval is delegated to Coordinator without intermediate user approval through Stage 4 Numerical/reference, Stage 5 I/O and Stage 6 Implementation Planning materialization; Steps `11` and `12` are completed under the approved Codex CLI `0.150.1`/Ninja/MSVC envelope. Stage 8 may create only `release.md`; no push, no `danger-full-access`, no reference mutation/solver, no source/tests/CMake/upstream/tolerance edit, and no publish/deploy/package/tag/external release. Any required contract change beyond the fixed `1e-8` global balance threshold stops as blocker.
|
||||
- repository_audit: 기존 worktree에는 `.codex/agents/*.toml`과 `AGENTS.md`의 사용자 변경이 있으며 이를 보존한다.
|
||||
|
||||
## 2. Eight-Stage Worklist
|
||||
|
||||
| stage | owner | status | output paths | acceptance gate | evidence summary | blockers | attempt count |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 1. Requirements | `requirement-agent` | `passed` | `docs/nonlinear-static-newton-raphson/requirements.md` | `<=400` lines, 24 canonical shall requirements, exact 24-row Matrix, approved semantic loss 0, Stage-1 user question 0 | Approved compact content 395 lines; approval metadata 2 lines, current 397; 24↔24 exact ID sets, duplicate/missing/orphan 0, OQ/questions/trivia/placeholders 0; core semantics and NSNR-083 public precedence retained; forbidden changes 0; user explicitly approved on 2026-08-23. | 없음 | 40 |
|
||||
| 1. Requirements | `requirement-agent` | `passed` | `docs/nonlinear-static-newton-raphson/requirements.md` | USER-DECISION-004 option 1을 requirements/reference acceptance contract에 최소 반영하고 compact requirements contract, existing thresholds, four-channel AND, Full Newton, 100-iteration limit, `docs/TOLERANCE.md`, approved semantic loss 0을 보존함 | Requirement Agent returned revised `requirements.md` status `draft`, ready for Coordinator/user re-approval, SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`. Coordinator audit passed: hash matched, 401 lines, 24 requirement records, 24 Matrix rows, duplicate/missing/orphan IDs 0, USER-DECISION-004 option 1 expressed, local RF/RM review-only, blocking global applied-plus-reaction force/moment plus accepted free residual present, formulation semantics preserved, AUDIT-001 Stage5/6 handoff present, no tolerance/reference/HDF5/public-scope expansion. User explicitly re-approved this hash on 2026-08-27. | 없음 | 43 |
|
||||
| 2. Research | `research-agent` | `passed` | `docs/nonlinear-static-newton-raphson/research.md` | 필요한 이론·benchmark·source reliability·applicability limit가 충분함 | Owner/Coordinator pass와 2026-08-23 사용자 명시 승인; 10 required sections, S1–S17, 12 benchmark candidates, 11 research-relevant requirement IDs, 14 unique open issues; nonlinear stored reference gap explicit; SHA-256 `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`; forbidden changes 0. | 없음 | 1 |
|
||||
| 3. Formulation | `formulation-agent` | `passed` | `docs/nonlinear-static-newton-raphson/formulation.md` | strong/weak form, kinematics, tangent/residual, integration, state/recovery가 구현 가능한 계약이며 O-ROT/O-MAP/O-DRILL/O-MOM/O-BC가 승인 scope 안에서 해소됨 | Rework attempt 2 owner/Coordinator pass와 사용자 명시 승인: reaction force/generalized moment/spatial moment symbols와 dimensions가 rotation matrix `R_I`와 분리됨; immutable fixed-global source, `rho_M <= 1e-12` admissibility, exact projected physical-work covector, `DP`/`DJ_l`/map-Hessian residual-tangent identity가 §§4.4/5/11.2–11.3/13.1/13.4/17에서 일치함; 18 sections와 7 closures 보존; SHA-256 `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`. | 없음 | 2 |
|
||||
| 4. Numerical/reference review | `numerical-review-agent` | `passed` | `docs/nonlinear-static-newton-raphson/numerical-review.md`; `docs/nonlinear-static-newton-raphson/reference-model.md` | 두 문서가 함께 `pass-for-io-definition`이며 수치 안정성과 exact reference contract가 준비됨 | Corrected owner return, Coordinator audit pass and user explicit approval: status `pass-for-io-definition`; approved formulation hash matched; shellNL/shell artifacts inspected read-only with row counts `49/49/288`, duplicate required wide keys 0 and nonfinite required values 0; stress CSVs are optional read-only inspection/order evidence only; `RM3` excluded; required external comparison uses displacement, reaction force and physical spatial `RM1/RM2`; exact prechecks and `docs/TOLERANCE.md` policy retained. Current hashes: numerical-review `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01`, reference-model `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3`. | 없음 | 2 |
|
||||
| 5. I/O definition | `io-definition-agent` | `passed` | `docs/nonlinear-static-newton-raphson/io.md` | Abaqus subset, semantic mapping, HDF5 schema, diagnostics, CSV projection이 승인됨 | Bounded rework owner status `ready-for-coordinator-review`, SHA-256 `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28`; Coordinator audit passed and user explicitly approved the same hash. REWORK-002 defects are corrected: every argv token containing literal `--output` fails pre-input/pre-log/pre-output with one `cli-usage` diagnostic; `nsnr-log-v1` uses UTF-8 no BOM/LF/TAB fixed fields with four-channel gates, typed thresholds, branch identity, early-failure `not-evaluated(reason)`, round-trip numerics and escaping; log open/write/flush/close is fail-closed with zero-byte non-Newton success logs; exact `VARIABLE=PRESELECT` output requests are ignored-with-warning; lexical path/stem derivation, single-writer/candidate collision rules, HDF5 schema v1, reference projection, stress/RM3 exclusions and `docs/TOLERANCE.md` policy are preserved. | 없음 | 2 |
|
||||
| 6. Implementation | `implementation-planning-agent`; `implementation-agent` | `in-progress` | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `docs/nonlinear-static-newton-raphson/implementation-report.md`; `docs/nonlinear-static-newton-raphson/build-test.md`; `docs/nonlinear-static-newton-raphson/reference-comparison.md` | 상세 인터뷰와 계획 승인 후 TDD, MSVC/x64/Debug CMake/CTest, blocking reference comparison이 통과함 | User explicitly requested `Harness/Implementation` execution on `2026-08-24`. Attempt 1 of no-push `python scripts/execute.py nonlinear-static-newton-raphson` failed before Step 0 edits/evidence: `codex exec --json --sandbox workspace-write ...` timed out at `1800.7s`, `_invoke_codex` raised uncaught `subprocess.TimeoutExpired`, no `step0-output.json` was produced and Executor did not enter `MAX_RETRIES`. Root evidence also reports workspace-write smoke pass `HARNESS_SMOKE_OK` in `20.4s`, MSVC baseline build pass and CTest `214/214`; the Python baseline `xhigh` vs `extra high` failure is pre-existing/unrelated. This is normalized as `harness-uncaught-step-codex-timeout-no-retry` attempt 1 and routes back to Implementation/Harness retry, not Correction Agent. | 없음; same-class attempt 1 is below stop limit | 4 |
|
||||
| 7. Physics evaluation | `physics-evaluation-agent` | `pending` | `docs/nonlinear-static-newton-raphson/physics-evaluation.md` | equilibrium, reaction, direction, path/history, energy, symmetry, model coverage가 `pass-for-release-agent`임 | 없음 | Stage 6 passing evidence 필요 | 0 |
|
||||
| 8. Release readiness | `release-agent` | `pending` | `docs/nonlinear-static-newton-raphson/release.md` | `ready-for-release` recommendation과 acceptance traceability가 완전함 | 없음 | Stage 7 passing evidence 필요 | 0 |
|
||||
| 3. Formulation | `formulation-agent` | `passed` | `docs/nonlinear-static-newton-raphson/formulation.md` | §14.1만 USER-DECISION-003 option 1로 갱신하고 strong/weak form, kinematics, tangent/residual, integration, state/recovery, O-ROT/O-MAP/O-DRILL/O-MOM/O-BC closure를 보존함 | Owner returned `ready-for-coordinator-and-user-reapproval`, SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`, §14.1-only diff `34` additions/`5` deletions, revised requirements hash matched, 13/13 contract assertions and diff check passed, no other owner file changes. Coordinator audit passed and user explicitly re-approved this hash on 2026-08-24: exact-zero branch selector is matching external residual-channel scale, nonzero external scale retains relative `max(internal, external)` denominator and `1e-2`, typed absolutes remain `1e-3`, correction gates/four-channel AND/lifecycle/reference disposition unchanged. | 없음 | 3 |
|
||||
| 4. Numerical/reference review | `numerical-review-agent` | `passed` | `docs/nonlinear-static-newton-raphson/numerical-review.md`; `docs/nonlinear-static-newton-raphson/reference-model.md` | USER-DECISION-006 delegated reapproval: both normalized factor-one global FORCE and MOMENT balance gates are fixed `<=1e-8`, with exact formulas, sum-of-contribution scales, zero-scale rule, source identity and USER-DECISION-004 dispositions preserved | Owner returned `pass-for-io-definition`, blockers none. Coordinator audit verified hashes `numerical-review.md` `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` and `reference-model.md` `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`; both reports record global force/moment normalized gate `<=1e-8`, unchanged formulas/scales/exact-zero/current-arm/spatial moment/factor-one/NSNR-069/`docs/TOLERANCE.md` boundaries, 12 reference hashes/length/mtime unchanged, fine primary/coarse companion, U blocking, UR warning-only, local RF/RM review-only and `RM3`/stress excluded. Root independently verified hashes, target occurrences and `git diff --check` with only LF/CRLF warnings. | 없음 | 6 |
|
||||
| 5. I/O definition | `io-definition-agent` | `passed` | `docs/nonlinear-static-newton-raphson/io.md` | USER-DECISION-006 fixed both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8` while preserving HDF5 schema/projections/reference paths and `docs/TOLERANCE.md` separation | Owner returned `ready-for-coordinator-review`, blockers none. Coordinator verified raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`; owner/root LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`. `io.md` records both coarse/fine global force and moment internal gates as dimension-separated normalized `<=1e-8`, preserves `/global/equilibrium` schema version/path/shape/source identity, constrained reaction/free residual projections, zero-scale rule, NSNR-069, local RF/RM review-only, U blocking, UR warning-only, `RM3`/stress exclusions, reference paths and external-only `docs/TOLERANCE.md`. | 없음 | 7 |
|
||||
| 6. Implementation | `implementation-planning-agent`; `implementation-agent` | `passed` | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `docs/nonlinear-static-newton-raphson/implementation-report.md`; `docs/nonlinear-static-newton-raphson/build-test.md`; `docs/nonlinear-static-newton-raphson/reference-comparison.md`; `docs/nonlinear-static-newton-raphson/corrections.md`; `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` | Add one unambiguous overall handoff status `pass-for-physics-evaluation` to `reference-comparison.md` while preserving detailed verdict `blocking-pass-with-review-only-findings`, all evidence/dispositions and no-change assertions | Owner returned `pass-for-physics-evaluation`, blockers none, SHA-256 `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241`. Coordinator verified exact `4`-line status-only diff, both required status/verdict tokens, all six review-only findings and `<=1e-8` metrics retained, whitespace clean, and no reference artifact or other owner-path change. | 없음 | 38 |
|
||||
| 7. Physics evaluation | `physics-evaluation-agent` | `passed` | `docs/nonlinear-static-newton-raphson/physics-evaluation.md` | equilibrium, reaction, direction, path/history, energy, symmetry, model coverage가 `pass-for-release-agent`임 | STAGE7-PHYSICS-002 returned `pass-for-release-agent`, blockers none, SHA-256 `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538`. Corrected Stage 6 hash/status resolved PHYS-STATUS-001. Prior fresh focused CTest `23/23`, canonical reference hash audit, and physical checks remain passing; historical requirements metadata is nonblocking; four declared open items are nonblocking/known limitations. Coordinator verified all eight sections, exact corrected input hash, pass/handoff boundaries, whitespace, no Release file/dispatch, and no forbidden change. | 없음 | 2 |
|
||||
| 8. Release readiness | `release-agent` | `passed` | `docs/nonlinear-static-newton-raphson/release.md` | `ready-for-release` recommendation과 acceptance traceability가 완전함 | Owner returned `ready-for-release`, blockers none, SHA-256 `0DA80387B137DAA7629D4B0A0C1E5442F90E17F142345379669B2E1D1962E1D1`. Coordinator verified all 11 required sections, exact current gate hashes/pass statuses, 24/24 unique must IDs with acceptance/test-or-reference/release disposition `included-pass`, 12/12 reference hashes, complete known limitations/release notes, transparent requirements metadata and reference-comparison feature-id omissions, whitespace/scope/no-change boundaries, and no external release action. | 없음 | 1 |
|
||||
|
||||
## 3. Active Dispatch Package and Latest Sub-Agent Return
|
||||
|
||||
### Active Dispatch Package
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- current_dispatch: `stage-6-harness-implementation-execution-step0-retry-1`
|
||||
- target_sub_agent: `implementation-agent` via `scripts/execute.py nonlinear-static-newton-raphson`
|
||||
- required_inputs:
|
||||
- User explicit execution request on `2026-08-24`: `Harness/Implementation를 실행해주세요.`
|
||||
- Attempt 1 failure evidence: no-push Harness command `python scripts/execute.py nonlinear-static-newton-raphson`; `codex exec --json --sandbox workspace-write ...` timed out at `1800.7s`; `_invoke_codex` raised uncaught `subprocess.TimeoutExpired`; no Step 0 source/test edits, no `step0-output.json`, no `MAX_RETRIES` handling.
|
||||
- Root execution context evidence: workspace-write Codex smoke passed with `HARNESS_SMOKE_OK` in `20.4s`; MSVC baseline build passed; baseline CTest passed `214/214`; Python baseline has pre-existing unrelated HEAD `41816c8` contract failure `xhigh` actual vs `extra high` expected.
|
||||
- `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`, `.agents/skills/harness/SKILL.md`, `.codex/hooks.json`
|
||||
- `docs/nonlinear-static-newton-raphson/implementation-plan.md` SHA-256 `BF4FC7A5CFDEEC19D62A36E1DF7CC34C0B9F614FA0A0FD8D0A321ADC73E69580`
|
||||
- `phases/index.json` SHA-256 `F8BE89D579C303410BD1D2CD17AF33FCAD72BF68D9E10C3F644A39D1AA7331FB`
|
||||
- `phases/nonlinear-static-newton-raphson/index.json` SHA-256 `439B67E1DED442D828EB5C31DAB35D28F32DBA6F66537512CAFFB5616956C137`
|
||||
- Executor-selected initial current Step: `phases/nonlinear-static-newton-raphson/step0.md`, Step 0 `cli-output-lease-and-derived-names`, status `pending`
|
||||
- Approved Stage 1-5 hashes: requirements `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2`; research `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`; formulation `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`; numerical-review `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01`; reference-model `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3`; io `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28`.
|
||||
- Preserved materialization evidence: exactly one pending phase entry, 13/13 pending steps, no executor metadata, no evidence docs yet.
|
||||
- expected_outputs:
|
||||
- Retry Harness execution command: `python scripts/execute.py nonlinear-static-newton-raphson`
|
||||
- No `--push`.
|
||||
- Executor-managed phase/step status, timestamps, commits and advancement.
|
||||
- Implementation Agent per selected Step: RED evidence, observed failure, minimal GREEN changes, focused/full VERIFY and Step status payload.
|
||||
- If all Steps complete, Stage 6 evidence docs: `docs/nonlinear-static-newton-raphson/implementation-report.md`, `docs/nonlinear-static-newton-raphson/build-test.md`, `docs/nonlinear-static-newton-raphson/reference-comparison.md`.
|
||||
- acceptance_gate: Stage 6 can pass only after the materialized phase completes and Coordinator audits implementation-report, build-test, reference-comparison, full MSVC x64 Debug build/CTest, blocking reference comparison and no forbidden reference/upstream/tolerance mutation. Attempt 1 is a clear first `harness` failure, so the next bounded dispatch remains Implementation/Harness retry.
|
||||
- stop_condition: Run only the no-push Harness executor for this phase. Do not dispatch Correction Agent for this first clear harness failure. If `harness-uncaught-step-codex-timeout-no-retry` recurs and reaches attempt 2, stop automatic rework and set workflow to `needs-user-decision` or `blocked`. Do not dispatch Physics Evaluation or Release. Do not run Abaqus/Nastran/reference solvers or generate/modify reference CSVs. Do not manually bypass Executor ownership of branch, pending selection, retry, timestamps, commits or advancement.
|
||||
- missing_evidence: Successful Step 0 Harness/Implementation return with RED/observed failure/minimal GREEN/VERIFY evidence and Executor-managed Step status, or a new classified failure return from `scripts/execute.py nonlinear-static-newton-raphson`.
|
||||
- current_dispatch: `none`
|
||||
- target_sub_agent: `none`
|
||||
- required_inputs: 없음
|
||||
- expected_outputs: 없음
|
||||
- acceptance_gate: All eight stages passed and `release.md` recommends `ready-for-release`; Coordinator closure is recorded.
|
||||
- stop_condition: Workflow is closed. Do not publish, deploy, package, tag or externally release without separate explicit authority; root may perform only the already requested final commit/push.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Latest Sub-Agent Return
|
||||
|
||||
- target_sub_agent: `implementation-agent` via Harness Executor
|
||||
- target_sub_agent: `release-agent`
|
||||
- output_paths:
|
||||
- 없음: attempt 1 failed before Step evidence; `step0-output.json`, `implementation-report.md`, `build-test.md`, and `reference-comparison.md` were not produced.
|
||||
- status: `failed-before-step-evidence` (Harness uncaught timeout); Coordinator classification `needs-implementation-retry`
|
||||
- `docs/nonlinear-static-newton-raphson/release.md`
|
||||
- status: owner `ready-for-release`; Coordinator decision `passed`
|
||||
- evidence_summary:
|
||||
- Root reported no-push execution attempt 1 on an isolated branch/worktree: `python scripts/execute.py nonlinear-static-newton-raphson`.
|
||||
- During Step 0 dispatch, `codex exec --json --sandbox workspace-write ...` remained active without source/test edits and timed out at `1800.7s`.
|
||||
- `scripts/execute.py::_invoke_codex` raised uncaught `subprocess.TimeoutExpired`, so Executor did not produce `step0-output.json`, did not enter `MAX_RETRIES`, and Step 0 remains pending with no implementation evidence.
|
||||
- Workspace-write smoke passed with `HARNESS_SMOKE_OK` in `20.4s`; root therefore classified sandbox helper/auth as functional and `danger-full-access` as unjustified.
|
||||
- MSVC baseline build passed and CTest passed `214/214`; Python baseline has a pre-existing unrelated contract failure in HEAD `41816c8` (`xhigh` actual vs `extra high` expected).
|
||||
- Coordinator records normalized failure classification `harness-uncaught-step-codex-timeout-no-retry`: attempt 1. Because this is the first clear harness failure, the next bounded dispatch remains `implementation-agent` via no-push Harness retry; `correction-agent` is not selected.
|
||||
- `release.md` SHA-256 `0DA80387B137DAA7629D4B0A0C1E5442F90E17F142345379669B2E1D1962E1D1`; all 11 required sections and `ready-for-release` verdict are present.
|
||||
- Gate inventory hashes match current Stage 1..7 files; full CTest `302/302`, reference `9/9`, `pass-for-physics-evaluation`, and `pass-for-release-agent` are recorded.
|
||||
- Requirement/release sets are exactly 24/24 unique IDs, missing/extra/duplicate `0`, all `included-pass` with acceptance, test or reference evidence and release disposition.
|
||||
- Known limitations and Release Notes include local RF/RM review-only, UR warning-only, `RM3`/stress exclusion, malformed optional stress row, weak stored nonlinear response, MITC4 locking risk and no external-solver equivalence claim.
|
||||
- Requirements draft/pending metadata and missing literal reference-comparison feature_id are transparent nonblocking documentation issues tied to authoritative exact path/hash/approval evidence; upstream files were not edited.
|
||||
- blockers:
|
||||
- 없음.
|
||||
- self_audit_findings: Coordinator recorded root execution evidence only, verified the local phase index still lists Step 0 as `pending`, did not run Harness/build/tests, and changed only `coordination.md`.
|
||||
- return_contract_check: status, evidence summary, blockers, failed-output absence and retry dispatch decision are present.
|
||||
- acceptance_evidence_check: Stage 6 remains `in-progress`; no Stage 6 pass evidence exists.
|
||||
- 없음
|
||||
- self_audit_findings: Release owner created only `release.md`; no source/test/CMake/Harness/upstream/reference/tolerance mutation, build/test/reference solver, publish/deploy/package/tag/external release, commit or push.
|
||||
- return_contract_check: Output path, `ready-for-release`, gate/traceability/validation/limitation evidence, blockers, SHA-256, no-change assertion and closure recommendation are complete; Coordinator audit passed.
|
||||
- acceptance_evidence_check: Stage 8 passes and Coordinator closes the workflow as `completed`; this does not authorize an external release action.
|
||||
|
||||
### USER-DECISION-004 Selected Path
|
||||
|
||||
- selected: User explicitly approved option 1 on `2026-08-26`.
|
||||
- meaning: exact local nodal `RF1/RF2/RF3` and physical spatial `RM1/RM2` rows remain deterministic source-key/schema/finite/inventory/error-reporting evidence but become review-only/nonblocking; `RM3` remains excluded.
|
||||
- blocking evidence: factor-one global resultant force `[3]`, factor-one global resultant moment `[3]`, and accepted free-DOF residual gates/evidence. Resultant moment uses the existing I/O global-equilibrium contract: global origin `[0,0,0]`, current force arms and spatial physical nodal moments.
|
||||
- unchanged: displacement comparison remains blocking, `UR1/UR2/UR3` remains warning-only, stress CSVs remain optional inspection/no comparison projection, `docs/TOLERANCE.md` applies where external comparison remains, and exact source-ID prechecks are preserved.
|
||||
- prohibited: no averaging/collapse/zero clamp, no tolerance relaxation, no comparator weakening, no reference artifact edit, and no Abaqus S4 internal-equivalence claim.
|
||||
- re-approval path: Stage 1 requirements, Stage 4 Numerical/reference and Stage 5 I/O are re-approved. Stage 6 implementation-planning revision draft is returned, Coordinator-audited, user-approved and materialized by MATERIALIZATION-003. DECISION-042 now supplies the separate explicit Step 11 Harness/Implementation request. Stage 3 formulation has no immediate dispatch because current §11.4 and §13.4 already define full residual/reactions and global resultant identities.
|
||||
|
||||
`MESH-REFINEMENT-SPIKE-001` remains diagnostic evidence that option 3 is not met by the current Abaqus S4 coarse/fine pair. `TRANSLATION-REPORT-001` remains translation-only diagnostic evidence and does not authorize final reference-model, tolerance, comparator, HDF5 schema, implementation, Harness, Step 12, Physics or Release changes.
|
||||
|
||||
### Compact Migration Evidence
|
||||
|
||||
@@ -177,11 +172,78 @@
|
||||
| 2026-08-24 | Implementation Planning materialization dispatch package | `in-progress` | Coordinator authorized only `implementation-plan.md`, append pending phase entry, create phase index and `step0.md`..`step12.md` pending with no executor timestamps; source/tests/CMake/upstream/reference/tolerance/evidence docs and Harness/build/test execution remain forbidden. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; await materialization return |
|
||||
| 2026-08-24 | Implementation Planning materialization owner return and Coordinator audit | `passed` | `implementation-plan.md`, `phases/index.json`, phase index and `step0.md`..`step12.md` are materialized after user approval. Coordinator/root audit passed phase uniqueness, 13/13 pending steps without executor metadata, 151 root assertions, reference hashes/row counts and no unauthorized evidence docs/execution/source/test/CMake/reference edits. | `ready-for-implementation` | Await separate explicit Harness/implementation execution request; do not run Executor automatically |
|
||||
| 2026-08-24 | Harness/Implementation execution authorization and dispatch package | `in-progress` | User explicitly requested Harness/Implementation execution. Coordinator verified materialized phase still has Step 0 `cli-output-lease-and-derived-names` as the first pending Step, preserved Stage 1-5 hashes and materialization evidence, and prepared no-push `scripts/execute.py nonlinear-static-newton-raphson` dispatch. | `needs-implementation` | Run no-push Harness executor; await Implementation/Harness return before any physics/release transition |
|
||||
| 2026-08-24 | Harness/Implementation execution attempt 1 | `needs-rework` | No-push Harness attempt failed before Step 0 evidence: `codex exec --json --sandbox workspace-write ...` timed out at `1800.7s`; `_invoke_codex` raised uncaught `subprocess.TimeoutExpired`; no source/test edits, `step0-output.json`, `MAX_RETRIES`, or Step evidence. Workspace-write smoke passed, MSVC baseline build passed and CTest passed `214/214`; Python baseline failure is pre-existing/unrelated. Normalized classification `harness-uncaught-step-codex-timeout-no-retry` attempt 1. | `needs-implementation` | Retry Step 0 through no-push `scripts/execute.py nonlinear-static-newton-raphson`; if the same classification reaches attempt 2, stop automatic rework and route to `needs-user-decision` or `blocked` |
|
||||
| 2026-08-24 | Harness/Implementation execution attempt 1 | `needs-rework` | No-push Harness attempt failed before Step 0 evidence: `codex exec --json --sandbox workspace-write ...` timed out at `1800.7s`; `_invoke_codex` raised uncaught `subprocess.TimeoutExpired`; no source/test edits, `step0-output.json`, `MAX_RETRIES`, or Step evidence. Normalized classification `harness-uncaught-step-codex-timeout-no-retry` attempt 1. | `needs-implementation` | Bounded Harness repair before retry; do not route to Correction Agent for first clear harness failure |
|
||||
| 2026-08-24 | Harness repair after attempt 1 | `passed` | Implementation Agent repaired Harness timeout/profile handling in `scripts/execute.py` with tests in `tests/test_execute.py`; RED 3 expected failures, GREEN 3 passed, focused 10/10 passed, full pytest 23 passed/1 pre-existing `xhigh` vs `extra high` mismatch. Root review found no new defect and reproduced the same evidence. No phase execution, phase/source/CMake/reference/evidence docs edit, or reference solver activity. | `needs-implementation` | Retry no-push Harness attempt 2 for Executor-selected Step 0 in workspace-write; if the same normalized timeout recurs, stop automatic rework and route to `needs-user-decision` or `blocked` |
|
||||
| 2026-08-24 | Harness/Implementation execution attempt 2 | `blocked` | Repaired Executor produced `step0-output.json` with `exitCode` 124 and stderr `Codex timed out after 1800 seconds.`. The Implementation Agent turn completed, but every nested shell `command_execution` remained `status=in_progress` even for `Get-Date`, `cmd echo`, and `exit 0`; Step 0 stayed pending with no production/test changes. Root cause is `harness-nested-codex-windows-shell-tool-execution-hang` attempt 2. | `blocked` | Stop remaining automatic retries; no workaround/further Harness execution until explicit user/root decision or external runtime fix |
|
||||
| 2026-08-24 | Root correction-cycle authorization | `in-progress` | Root authorized one bounded Correction Agent diagnostic/rework cycle for the repeated infrastructure/runtime failure; unauthorized retry PIDs have been terminated and none remain. Coordinator prepared a correction package limited to no-op/tool smoke reproduction, local Codex CLI/config option inspection, documented flag hypothesis testing, and optional TDD runner changes in `scripts/execute.py`/`tests/test_execute.py`. | `needs-correction` | Root profile dispatch to `correction-agent` is required because this Coordinator runtime exposes no callable `spawn_agent` tool |
|
||||
| 2026-08-24 | Correction Agent return and Coordinator audit | `blocked` | Correction Agent returned `blocked` and created only `docs/nonlinear-static-newton-raphson/corrections.md` SHA-256 `C9F93AC99225725C88BB7F0BABC8F7D75D3E05082070090328203DB3776BEFE6`. Baseline smoke reproduced no nested shell completion; `--disable code_mode_host` failed closed; `--enable unified_exec` hung; combined flags failed closed. Root verified no nonlinear Harness/Codex processes remain, all 13 steps pending, Python 23 passed/1 pre-existing failure, MSVC build exit 0, discovery 214 and CTest 214/214. | `blocked` | No further Harness retry until external Codex runtime update/repair plus bounded shell smoke success |
|
||||
| 2026-08-24 | Codex `0.149.1` smoke pass and runner preflight | `needs-rework` | User/root authorized Codex CLI update, bounded smoke and Harness rerun. Smoke passed only with aligned `CODEX_HOME`, filtered WindowsApps PATH entries and `--disable unified_exec`; current `scripts/execute.py` does not pass that flag to nested `codex exec`, while local `codex exec --help` confirms `--disable <FEATURE>` support. | `needs-correction` | Dispatch bounded runner-option correction before any no-push Harness phase rerun |
|
||||
| 2026-08-24 | REWORK-004 Correction return and Coordinator audit | `passed` | Correction returned `corrected-for-implementation-rerun`; runner now passes adjacent `--disable`, `unified_exec` after `codex exec`; regression test asserts the command contract; `corrections.md` SHA-256 `82572437689B41323B6533C2361F2F12BF07B5ED305825AA84C56AEEDC729930`; focused tests 10/10, full pytest only known pre-existing mismatch, MSVC build and 214/214 CTest pass per owner/root evidence. | `needs-implementation` | Root is authorized to run no-push `python scripts/execute.py nonlinear-static-newton-raphson` with Codex `0.149.1`, aligned `CODEX_HOME`, filtered child PATH, `workspace-write`, hooks retained and no `danger-full-access` |
|
||||
| 2026-08-24 | Harness rerun Step 1 safe block | `needs-rework` | No-push Harness rerun under the approved Codex `0.149.1` envelope exited 2 safely, not by nested shell hang. Step 0 completed and committed (`fc16ef6`, metadata `e7c6932`). Step 1 is `blocked` because Visual Studio 18 CMake configure hit MSBuild `FileTracker` `E_ACCESSDENIED` in `workspace-write`; root reports clean Ninja/MSVC build and all 228 CTest cases passed. Top phase hash `E5AB831A326AA361B1C3491DA2DA09AC2CA8D66D9A3BCEE8E771D78C6352EC45`, phase index hash `5CD3B4E2BD50BF03A105CAC645F7F48F5A1360414E085B08C9D75BF6D46317A8`, Step 1 output hash `B04B25E8C2D1E0CD54E712B086623E1741FC563A70F0582FD6DC813F660CD6D7`. | `needs-correction` | Root profile dispatch to bounded `correction-agent` for FileTracker diagnosis under `workspace-write`; `danger-full-access` requires explicit new user approval and is not authorized |
|
||||
| 2026-08-24 | REWORK-005 FileTracker Correction return and Coordinator audit | `blocked` | Correction returned `blocked` / `needs-user-decision`, changed only `docs/nonlinear-static-newton-raphson/corrections.md` SHA-256 `BCA9DEE6F6F262A70FB5C7A49B2BF06CA3FF8BC6C6838FB20A8B48071CF9D420`. VS18/MSBuild `18.8.2` fails in FESA and gtest at `FileTracker..cctor()` -> `GetLongFilePath` with `E_ACCESSDENIED`; inherited `TEMP`/`TMP` is outside workspace; `/p:TrackFileAccess=false` and `:workspace` echo were not proven; exact process trees were cleaned; Ninja/MSVC 27/27 focused and 228/228 full evidence is preserved but not an approved substitute. | `needs-user-decision` | User must choose A Ninja/MSVC evidence substitution, B isolated `danger-full-access` fallback, or C stop pending external Codex sandbox Temp/FileTracker repair |
|
||||
| 2026-08-24 | USER-DECISION-002 option A and REWORK-006 dispatch | `in-progress` | User explicitly approved option A: Ninja/MSVC is the accepted Stage 6 validation contract. Coordinator/root audit found `.harness/config.json` ignored/absent, CMake presets absent, and adapter preset triplets sufficient to route Stop hook to Ninja without Harness Python production changes. Root dispatched `correction-agent` for preset/config plumbing, preset-contract RED test, planning/phase command rewrite, blocker-clear evidence, and phase reset only after evidence. | `needs-correction` | Await REWORK-006 Correction return; no Harness rerun, Step 2, `danger-full-access`, push, reference solver or reference artifact change |
|
||||
| 2026-08-24 | REWORK-006 Correction return and Coordinator audit | `passed` | Correction returned `corrected-for-implementation-rerun`; `corrections.md` SHA-256 `7FA66A14E694D0451B4422BB5A233E117F2100231A9644771EFD428AF7AD6B81`; Ninja/MSVC Debug configure/build/discovery/full CTest passed with 228/228, Stop-hook `codex exec` exit 0, focused contract test 1/1, full Python 24 passed plus pre-existing `xhigh`/`extra high`; reference hashes unchanged; top phase and Step 1 reset to `pending` only after evidence; root independent review found no blocking issue. | `needs-implementation` | Root is authorized to rerun no-push `python scripts/execute.py nonlinear-static-newton-raphson` from Step 1 under approved Ninja/MSVC workspace-write envelope |
|
||||
| 2026-08-24 | Harness Step 11 reference-comparison block and REWORK-007 dispatch | `needs-rework` | Harness Steps 0..10 completed. Step 11 owner added reference comparator/test files but blocked because copied `shellNL.inp` reaches `nonlinear-nonconvergence` after 100 Newton iterations; `shellNL_results.h5` is absent, `git diff -- reference` is clean, and Step 12 remains pending. Log evidence shows force/correction channels passing while residual moment remains failing; approved convergence contract must not be relaxed silently. | `needs-correction` | Root profile dispatch to bounded `correction-agent`: diagnose/fix only implementation-owned nonlinear solver/convergence defect under approved contracts, or return `upstream-contract` / `needs-user-decision` if the approved moment-denominator contract is the blocker |
|
||||
| 2026-08-24 | REWORK-007 upstream-contract return and Coordinator audit | `blocked` | Correction returned `needs-upstream-decision`, `corrections.md` SHA-256 `63E0FF45AF44F564B276C2400B2D1A9AB5F90FC9E1470F4F8246ED57231B175B`, changed only that report. Proof: shellNL has no external rotational generalized force, so approved `D_M=max(||f_int||inf,||f_ext||inf)` gives `eta_M=1` for every nonzero rotational residual; focused CTest #288 reproduced the failure and 100/100 log records have numerator=denominator, relative branch, pass=0. | `needs-user-decision` | USER-DECISION-003: choose a residual-moment convergence contract path before requirements/formulation/numerical-review/io/planning rework or stop the feature |
|
||||
| 2026-08-24 | USER-DECISION-003 option 1 and Requirements rework dispatch | `in-progress` | User approved option 1: if the matching external residual-channel scale is exact zero, apply the existing typed absolute residual gate; otherwise retain the current relative denominator. Coordinator recorded required re-approval sequence and bounded Stage 1 rework to NSNR-069 in `requirements.md` only. | `needs-requirements` | Root profile dispatch to `requirement-agent`; await revised `requirements.md` return and Coordinator audit before explicit Stage 1 re-approval |
|
||||
| 2026-08-24 | Requirements NSNR-069 option 1 return and Coordinator audit | `passed` | Requirement Agent returned `draft`, `ready-for-coordinator-review`, `requirements.md` SHA-256 `89B6AEC25BD6AF5B79D328EEF63359A82DDB9402AE9482E3082A70C474A7B8B8`. Coordinator verified hash, `git diff --check`, 397 lines, 24/24 records/Matrix rows, scoped NSNR-069/status/tolerance/matrix/handoff diff, unchanged thresholds/four-channel AND/Full Newton/100 iterations/reference disposition, and no forbidden execution or artifact change. | `needs-user-decision` | Ask user to explicitly approve revised `requirements.md`; do not dispatch formulation yet |
|
||||
| 2026-08-24 | Revised Stage 1 approval and Formulation §14.1 dispatch | `in-progress` | User explicitly approved revised `requirements.md` SHA-256 `89B6AEC25BD6AF5B79D328EEF63359A82DDB9402AE9482E3082A70C474A7B8B8`. Coordinator closed the Stage 1 re-approval item and prepared a bounded `formulation-agent` package for `formulation.md` §14.1 only under USER-DECISION-003 option 1. | `needs-formulation` | Root profile dispatch to `formulation-agent`; await §14.1-only return and Coordinator audit; do not start numerical-review/I/O/planning/implementation |
|
||||
| 2026-08-24 | Formulation §14.1 option 1 return and Coordinator audit | `passed` | Formulation Agent returned `ready-for-coordinator-and-user-reapproval`, `formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`. Coordinator verified hash, §14.1-only diff `34` additions/`5` deletions, revised requirements hash alignment, external-scale exact-zero selector, retained nonzero-external relative gate, unchanged thresholds/correction gates/four-channel AND/lifecycle/reference disposition, and no forbidden execution or artifact change. | `needs-user-decision` | Ask user to explicitly approve revised `formulation.md`; do not dispatch numerical-review yet |
|
||||
| 2026-08-24 | Revised Stage 3 approval and Numerical/reference dispatch | `in-progress` | User explicitly approved revised `formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`. Coordinator closed REAPPROVAL-002 and prepared a bounded `numerical-review-agent` package to validate USER-DECISION-003 option 1, dimensions/predicates, shellNL readiness and reference disposition. | `needs-numerical-review` | Root profile dispatch to `numerical-review-agent`; await owner return and Coordinator audit; do not start I/O/planning/implementation |
|
||||
| 2026-08-24 | Numerical/reference option 1 return and Coordinator audit | `passed` | Numerical Review Agent returned `pass-for-io-definition`; `numerical-review.md` SHA-256 `E93E0DEF1FD5ECDF956D50C6F8B8F1C073E21650E14EDC97A683DCA4688FE153`, diff `+49/-11`; `reference-model.md` byte-identical SHA-256 `44B619BE2494007D8F2F51F34B9D974F934C26818F5AB8AF2DAA288ABF78D2FC`. Coordinator verified revised branch coverage, unchanged reference disposition, reference hashes/row counts, no concrete HDF5 dataset paths, no forbidden artifact/execution scope and diff check pass. | `needs-user-decision` | Ask user to explicitly approve revised Stage 4 artifacts; do not dispatch I/O yet |
|
||||
| 2026-08-24 | Revised Stage 4 approval and I/O dispatch | `in-progress` | User explicitly approved revised `numerical-review.md` SHA-256 `E93E0DEF1FD5ECDF956D50C6F8B8F1C073E21650E14EDC97A683DCA4688FE153` and unchanged `reference-model.md` SHA-256 `44B619BE2494007D8F2F51F34B9D974F934C26818F5AB8AF2DAA288ABF78D2FC`. Coordinator closed REAPPROVAL-003 and prepared a bounded `io-definition-agent` package for `io.md` only. | `needs-io-definition` | Root profile dispatch to `io-definition-agent`; await owner return and Coordinator audit; do not start planning/implementation/Harness |
|
||||
| 2026-08-24 | I/O option 1 return and Coordinator audit | `passed` | I/O Definition Agent returned `ready-for-coordinator-review`; `io.md` raw SHA-256 `DB0BD8339172FD05712D2B7469966DEB0A6A82CB5A0052817F4725319E741334`, LF-normalized SHA-256 `E0C42775FF5C3963A37DF70B00044DDA244A463A6DD222975C2903A1BFA205AF`, diff `+37/-20`. Coordinator verified approved source hash alignment, residual matching-external-scale exact-zero/nonzero selector, retained nonzero relative denominator, unchanged 39-field `nsnr-log-v1` labels/order, unchanged HDF5/reference projection and dispositions, stress optional/RM3 excluded, diff check pass and reference diff clean. | `needs-user-decision` | Ask user to explicitly approve revised `io.md`; do not dispatch planning/implementation/Harness |
|
||||
| 2026-08-24 | Revised Stage 5 approval and Implementation Planning revision-draft dispatch | `in-progress` | User explicitly approved revised `io.md` raw SHA-256 `DB0BD8339172FD05712D2B7469966DEB0A6A82CB5A0052817F4725319E741334`, LF-normalized SHA-256 `E0C42775FF5C3963A37DF70B00044DDA244A463A6DD222975C2903A1BFA205AF`. Coordinator closed REAPPROVAL-004 and prepared a bounded `implementation-planning-agent` package to draft exact plan/phase revisions for USER-DECISION-003 option 1 while preserving Steps 0..10 history and Step 11 blocked comparator work. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; owner returns concise revision draft only; do not materialize planning files or run Harness until user approves the draft |
|
||||
| 2026-08-25 | Implementation Planning option 1 revision draft return and Coordinator audit | `passed` | Implementation Planning owner returned `draft-ready-for-user-review`, no files changed/executed. Draft proposes minimal updates to `implementation-plan.md`, Step `5/7/10/11/12` and phase indexes; Step 11 owns RED-first `NSNR-CTRL-018..021` and `NSNR-LOG-012`, minimal `nonlinear_static_control.cpp` update, comparator preservation, copied `shellNL` reference comparison and full CTest. Coordinator verified approved upstream semantics and Harness ownership boundaries. | `needs-user-decision` | Ask user to explicitly approve the planning revision draft; do not materialize or run Harness |
|
||||
| 2026-08-25 | Implementation Planning revision draft approval and materialization dispatch | `in-progress` | User explicitly approved the audited Implementation Planning revision draft and requested materialization. Coordinator closed REAPPROVAL-005 and prepared bounded materialization dispatch limited to `implementation-plan.md`, Step `5/7/10/11/12`, feature index and top index. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; await materialization return and Coordinator audit; do not run Harness/CTest/code/reference/push |
|
||||
| 2026-08-25 | Implementation Planning materialization return and Coordinator audit | `passed` | Owner returned `ready-for-implementation`; approved 8 outputs materialized, Step 11 reset to `pending`, top phase reset to `pending`, Steps 0..10 completed history and Step 11 partial comparator files preserved, Step 12 pending, forbidden source/include/reference/tolerance diff empty, HEAD unchanged and no execution/commit/push. | `ready-for-implementation` | Await separate explicit no-push Harness/Implementation execution request; current Executor-selected pending Step is Step 11 |
|
||||
| 2026-08-25 | Step 11 no-push Harness/Implementation execution authorization | `in-progress` | User explicitly requested no-push Harness/Implementation rerun from Step 11. Coordinator preflight verified isolated linked worktree, branch `feat-nonlinear-static-newton-raphson`, HEAD `65b56b1`, Step 11 `pending` with historical `started_at`, Step 12 `pending`, Codex CLI `0.149.1`, approved `windows-msvc-ninja-debug` preset/config, runner `--disable unified_exec`, and approved dirty state with preserved comparator files. | `needs-implementation` | Launch no-push Harness Executor under DECISION-038/039 envelope; await Step 11 return; no `danger-full-access`, push, reference mutation, reference solver, Step 12, Physics or Release |
|
||||
| 2026-08-25 | Step 11 reference-comparison return and REWORK-008 dispatch package | `needs-rework` | Harness exit `2`; Step 11 blocked; Step 12 pending; `step11-output.json` SHA-256 `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91`. Selector/control/log fix passed and factor-one HDF5 exists, but reference gate `15/16` failed on blocking reaction RMS. Additional read-only diagnosis shows deterministic key mapping and global equilibrium but local reaction redistribution mismatch already present in linear-limit reactions, so Correction must audit implementation-vs-upstream-contract before any production edit. | `needs-correction` | Root profile dispatch to `correction-agent` for REWORK-008 diagnostic; no tolerance/reference/HDF5 schema contract change, reference solver, reference mutation, `danger-full-access`, push, Step 12, Physics or Release |
|
||||
| 2026-08-25 | REWORK-008 upstream-contract return and USER-DECISION-004 gate | `blocked` | Correction returned `needs-upstream-decision`, classification `upstream-contract` / `reference-blocking-model-adequacy-conflict`, Section 13 SHA-256 `C8AC5A5015E5F9622E2964F514F2C06572F953B5244F006044DEDDF0F3D0A194`. It found no reaction computation/storage/mapping defect: residual→reaction→HDF5 mapping exact, constrained `phi=0`, global resultant matches, and local RF/RM mismatch already exists in FESA-linear versus Abaqus-linear while each solver NL≈linear. No forbidden files changed by correction; reference diff clean and HEAD unchanged. | `needs-user-decision` | USER-DECISION-004: choose local nodal reactions review-only with global equilibrium blocking, global resultant-only blocking, or independent formulation-appropriate local-reaction benchmark; do not dispatch further work before explicit choice |
|
||||
| 2026-08-25 | MESH-REFINEMENT-SPIKE-001 numerical-review dispatch | `in-progress` | User added untracked main-checkout `reference/shellNL-meshfine` artifacts and explicitly approved a spike design for USER-DECISION-004 option 3 candidate validation. Coordinator verified read-only hashes/rows and feature-worktree missing state, then recorded a bounded `numerical-review-agent` package for artifact/input-equivalence/row-identity readiness only. | `needs-user-decision` | Root profile dispatch to `numerical-review-agent`; no final option selection, reference solver, artifact mutation, tolerance/comparator/HDF5 schema/implementation/Harness/Step 12/Physics/Release change |
|
||||
| 2026-08-25 | MESH-REFINEMENT-SPIKE-001 diagnostic return and Coordinator audit | `passed` | Fine artifacts copied byte-identically; required displacement/reaction artifacts are valid, stress is optional inventory only with one malformed optional key. Existing executable run exited `0` and produced H5/log hashes. Translation/rotation pass common tolerance, but local RF/RM rows still fail per-row gates; inplane reaction worsens under refinement. Global resultants and free residuals are sound. The same Abaqus S4 coarse/fine pair is not an independent formulation-appropriate local-reaction benchmark. | `needs-user-decision` | Ask user to choose USER-DECISION-004; Coordinator recommends option 1 review-only local nodal rows plus blocking global equilibrium/resultants; no Harness/Step 11 rerun before approval |
|
||||
| 2026-08-26 | TRANSLATION-REPORT-001 focused reporting dispatch | `in-progress` | User approved bounded focused report design for `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md`: coarse/fine U1/U2/U3 translation-only comparison with exact artifact/HDF5 identity, source-key prechecks, `docs/TOLERANCE.md`, metrics, worst rows, mesh trend and exclusions. | `needs-user-decision` | Root profile dispatch to `implementation-agent`; only the focused report may be created; do not create canonical `reference-comparison.md`, run solver/Harness/reference solver, edit code/comparator/tolerance/reference artifacts, change USER-DECISION-004, or advance Step 11/12 |
|
||||
| 2026-08-26 | TRANSLATION-REPORT-001 return and Coordinator audit | `passed` | Implementation Agent returned `translation-diagnostic-pass-not-a-gate` and created only `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` SHA-256 `597D923FB1943CCB2BCF9D9FFC13FD904F795DFEB9CB71B097FF168B78694338`. Coordinator/root audit verified exact artifact hashes, coarse/fine U-key prechecks, `docs/TOLERANCE.md` pass metrics, explicit exclusions, diff check pass, tracked reference diff clean and canonical evidence docs absent. | `needs-user-decision` | Historical pre-decision state; superseded by USER-DECISION-004 option 1 entry below. No Step 11 rerun, Step 12, Physics or Release before required upstream re-approval |
|
||||
| 2026-08-26 | USER-DECISION-004 option 1 approval and requirements dispatch package | `in-progress` | User explicitly selected option 1. Coordinator recorded local nodal RF/RM as review-only/nonblocking, global resultant force/moment plus accepted free residual as blocking reaction/equilibrium evidence, verified Stage 3 formulation has no immediate semantic rework need because §11.4/§13.4 already define reactions/global resultants, and recorded the Stage 5/6 projection audit item for current-position/spatial-moment global equilibrium versus raw-residual implementation helper. | `needs-requirements` | Root profile dispatch to bounded `requirement-agent` for `requirements.md` only; after owner return, Coordinator audit and explicit user approval are required before Stage 4 |
|
||||
| 2026-08-27 | REAPPROVAL-006 Requirements return and Coordinator audit | `passed` | Requirement Agent returned revised `requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`, status `draft`. Coordinator verified hash, 24/24 requirement and matrix preservation, USER-DECISION-004 option 1 semantics, AUDIT-001 Stage5/6 handoff, preserved formulation meaning, unchanged thresholds/reference immutability and no forbidden gate advancement. | `needs-user-decision` | Ask user to explicitly approve revised `requirements.md`; do not dispatch Stage 4 Numerical/reference until approval |
|
||||
| 2026-08-27 | Revised Stage 1 approval and Stage 4 Numerical/reference dispatch package | `in-progress` | User explicitly approved revised `requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`. Coordinator closed Stage 1 re-approval and prepared bounded `numerical-review-agent` package requiring `fesa-numerical-review`, USER-DECISION-004 option 1 reaction disposition, coarse/fine reference role review and AUDIT-001 downstream separation. | `needs-numerical-review` | Root profile dispatch to `numerical-review-agent`; allowed outputs only `numerical-review.md` and `reference-model.md`; do not start Stage 5 |
|
||||
| 2026-08-27 | REAPPROVAL-007 Numerical/reference return and Coordinator audit | `passed` | Numerical Review Agent returned `pass-for-io-definition`, blockers none; `numerical-review.md` SHA-256 `0A7224003CFF706E9B4D9F55BA2624805299FAC8F42ECD2BC37E429B26DF0091`, `reference-model.md` SHA-256 `81A82D3B367FF501F3C355F81D4E5DD4677BE58E4182E4EB8EEDBB2462FEA2CE`. Coordinator verified requirements/formulation alignment, fine-primary/coarse-companion roles, local RF/RM review-only with `RM3`/stress excluded, U blocking/UR warning-only, internal normalized `1e-10` global balance gate separated from external `docs/TOLERANCE.md`, NSNR-069 free residual gate and AUDIT-001 Stage5/6 handoff. | `needs-user-decision` | Ask user to explicitly approve revised Stage 4 artifacts; do not dispatch Stage 5 I/O yet |
|
||||
| 2026-08-27 | Revised Stage 4 approval and Stage 5 I/O dispatch package | `in-progress` | User explicitly approved revised `numerical-review.md` SHA-256 `0A7224003CFF706E9B4D9F55BA2624805299FAC8F42ECD2BC37E429B26DF0091` and `reference-model.md` SHA-256 `81A82D3B367FF501F3C355F81D4E5DD4677BE58E4182E4EB8EEDBB2462FEA2CE`. Coordinator closed REAPPROVAL-007 and prepared bounded `io-definition-agent` package requiring `fesa-io-contract`, USER-DECISION-004 option 1 HDF5/reference projection update, AUDIT-001 logical quantity separation and no parser/API/code/reference changes. | `needs-io-definition` | Root profile dispatch to `io-definition-agent`; expected output only `io.md`; await owner return and Coordinator audit; do not start Stage 6/Harness |
|
||||
| 2026-08-27 | REAPPROVAL-008 I/O return and Coordinator audit | `passed` | I/O Definition Agent returned `ready-for-coordinator-review`, blockers none; `io.md` raw SHA-256 `C7400C2B1454BE7287EE22D18BB28DA7AFB27FE6F8287783BB83769A4AB8D83C`, LF-normalized SHA-256 `BF775990D83D95B470F814BE57C9676305119D97E48225E231D4926E7809029F`. Coordinator verified approved source hashes, HDF5 schema v1 authority, `/global/equilibrium` applied-plus-reaction current-position/spatial-moment semantics, distinct free-residual/constrained-resultant/balance-error projections, local RF/RM review-only, `RM3`/stress excluded, U blocking/UR warning-only, fine primary/coarse companion and internal `1e-10` versus external `docs/TOLERANCE.md` boundary. | `needs-user-decision` | Ask user to explicitly approve revised `io.md`; do not start Stage 6 planning/materialization/Harness before approval |
|
||||
| 2026-08-27 | Revised Stage 5 approval and Stage 6 planning re-entry draft dispatch | `in-progress` | User explicitly approved revised `io.md` raw SHA-256 `C7400C2B1454BE7287EE22D18BB28DA7AFB27FE6F8287783BB83769A4AB8D83C`. Coordinator closed REAPPROVAL-008 and prepared bounded DRAFT ONLY `implementation-planning-agent` package requiring `fesa-cpp-msvc-tdd` plus project-local `harness`; the owner must audit existing Step 11+ plan/phase state and return a chat draft only. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; no planning-file materialization, Harness, build, CTest, solver, reference solver, source/test/CMake/reference/tolerance edit, commit or push before draft approval |
|
||||
| 2026-08-27 | REAPPROVAL-009 Planning draft return and Coordinator audit | `passed` | Planning Agent returned `draft-ready-for-user-review`, blockers none, no files changed/executed. Coordinator verified the draft is a minimal Step 11/12 revision: preserve Steps `0..10`, reset/rename only Step `11` after approval, keep Step `12` pending, cover AUDIT-001 current-arm/spatial-moment projections, no new HDF5 dataset/public header, internal/external tolerance separation, fine primary/coarse companion and approved Ninja/MSVC commands. | `needs-user-decision` | Ask user to approve or reject the Stage 6 revision draft; do not materialize planning files or run Harness until explicit approval |
|
||||
| 2026-08-27 | REAPPROVAL-009 draft approval and MATERIALIZATION-003 dispatch package | `in-progress` | User explicitly approved the Coordinator-audited 2-Step draft. Coordinator prepared materialization-only dispatch to `implementation-planning-agent`, required `fesa-cpp-msvc-tdd` plus project-local `harness`, fixed current input hashes and allowed only `implementation-plan.md`, `phases/index.json`, phase index, `step11.md` and `step12.md` as outputs. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; no Harness/build/CTest/solver/reference solver, code/tests/CMake/upstream/reference/tolerance edit, evidence-doc creation, commit or push |
|
||||
| 2026-08-27 | MATERIALIZATION-003 return and Coordinator audit | `passed` | Planning Agent materialized exactly the allowed five outputs: `implementation-plan.md` `758F8F5BB224E88864338C48221D53D4BD2F8633E04C9F2136FFF9E2D1BADFB8`, `phases/index.json` `536D4BF9427792ECCCE4C9A2980210E050035D0202DB8A700BDD671E0DB218C7`, phase index `D808D5C0F389B444A529FC81A48B5726E4CF282CA51B62F3AECAC4D89EA6A5BF`, `step11.md` `D324F7E1495A25B3B8CEA7A2A6C68D559F8336C3A527A164ECD2D0A82C20A526`, `step12.md` `F2831F7E802A40631C91E638C9079508EF1A97CFE46FACC51DCBB4EC55337452`. Coordinator verified JSON parse, 24/24 requirements mapping, clean placeholder scan, scoped `git diff --check` pass, `NSNR-PROC-019` collision handling, Step `11` pending, Step `12` pending, Steps `0..10` preserved, canonical evidence docs absent, tracked reference diff clean, and no execution/commit/push. | `needs-implementation` | Await separate explicit no-push Step 11 Harness/Implementation request; do not run Harness automatically |
|
||||
| 2026-08-27 | Step 11 no-push Harness/Implementation execution approval | `in-progress` | User explicitly approved `Harness/Implementation 시작`. Coordinator verified current runner CLI takes slug `nonlinear-static-newton-raphson`, current phase has Step `11` pending and Step `12` pending, and prepared a no-push `implementation-agent` via Harness dispatch for Step `11` only under DECISION-038/039. Step `12` is outside this approval; current runner loops over pending steps, so root/Executor must enforce the one-step boundary or stop before Step `12`. | `needs-implementation` | Root may run `python scripts/execute.py nonlinear-static-newton-raphson` only under the recorded no-push Step 11 envelope; await Step `11` return |
|
||||
| 2026-08-27 | Step 11 execution recurrent runtime block | `blocked` | DECISION-042 Step11-only execution used the approved no-push envelope but timed out after `1800s`; `step11-output.json` SHA-256 `9FCBC5CE10E2C1B931EC16CADFADF7684C45FBB0B11D9A404922D607EB16706D`, exit `124`, stderr `Codex timed out after 1800 seconds.`, stdout nested command executions stuck `in_progress`. Retry was prevented by secondary CP949 `UnicodeEncodeError` printing `↻`. Read-only shell smokes under tested flag/env variants did not complete. Step `11` and Step `12` remain pending; no production/test/reference edits, commit or push. | `needs-user-decision` | No automatic correction dispatch; user must choose a runtime/runner route before any Step `11` rerun |
|
||||
| 2026-08-28 | USER-DECISION-005 option A and Step 11 runtime-smoke dispatch | `in-progress` | User approved option A: use official current Codex CLI `0.150.1` to restore the runtime/update path, prove same `workspace-write`/filtered WindowsApps PATH/`CODEX_HOME`/VsDevCmd/hooks/Terra-xhigh/`--disable unified_exec` envelope with a bounded nested shell smoke, then rerun only Step `11` no-push if the smoke passes. | `needs-implementation` | Root may perform the Codex `0.150.1` smoke preflight and, only on pass, launch Step `11` Harness/Implementation under the active dispatch; Step `12`, push, `danger-full-access`, reference solver/artifact mutation and manual hooks remain forbidden |
|
||||
| 2026-08-28 | USER-DECISION-005A smoke pass and Step 11 dispatch confirmation | `passed` | Root supplied smoke success evidence: Codex CLI `0.150.1`, app SHA-256 `CBD657DDFE151D1A6EBAD660BEFFDBD3265DC5AFF4B3A6095124D3E2F0156F2F`, doctor `20 ok/0 fail`, same-envelope smoke `93.621s`, nested exit `0`, command_execution completed, command exit `0`, output `CODEX_SHELL_SMOKE_OK`, stderr empty. Coordinator updated `BLOCKER-002` to smoke-passed and confirmed Step `11` dispatch. | `needs-implementation` | Historical smoke gate pass; superseded by the Step `11` blocked return below |
|
||||
| 2026-08-28 | USER-DECISION-005A Step 11 blocked return | `blocked` | Step `11` only no-push Harness ran after smoke pass; runner exit `2`; Step `11` blocked at `2026-08-28T02:03:23+09:00`; Step `12` pending. Current-arm/spatial projection reproduced and NSNR-069 free residual accepted, but coarse/fine factor-one global moment balance metrics `1.413750912531167e-10`/`2.7454660159924086e-10` exceed approved `1e-10`; CTest `295` and `299` failed. `step11-output.json` SHA-256 `D56EB816DDD63E71D8880CA5AF39C10A38E2BF562A28207D26417716154F1872`; no commits/push; reference hashes/length/mtimes unchanged and `git diff -- reference` empty. | `needs-user-decision` | USER-DECISION-006: choose an upstream convergence-acceptance/global-balance-gate path before any rework, Step `11` retry, Step `12`, Physics or Release |
|
||||
| 2026-08-28 | USER-DECISION-006 superseding global balance threshold and Stage 4 dispatch package | `in-progress` | User withdrew the entire `fesa.env`/runtime-config discussion and superseded the prior moment-only `1e-9` decision. Current authoritative decision fixes both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8`; all formulas, sum-of-contribution scales, zero-scale rule, quantities/source identity, blocking/review/warning dispositions, NSNR-069, HDF5 schema, reference artifacts and `docs/TOLERANCE.md` separation are preserved. User delegated Stage 4/5/6 reapproval and Step `11` completion without intermediate approval waits, bounded to this threshold-only change. | `needs-numerical-review` | Root/profile dispatch to `numerical-review-agent` with `fesa-numerical-review`; allowed outputs only `numerical-review.md` and `reference-model.md`; do not start Stage 5, planning, Harness, Step `11` retry, Step `12`, reference solver, push or `danger-full-access` before owner return and Coordinator audit |
|
||||
| 2026-08-28 | REAPPROVAL-010 Stage 4 return and Coordinator audit | `passed` | Numerical Review Agent returned `pass-for-io-definition`, blockers none; `numerical-review.md` SHA-256 `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C`, `reference-model.md` SHA-256 `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`. Coordinator verified required output paths/status, both normalized factor-one global force/moment gates `<=1e-8`, unchanged formulas/scales/exact-zero/current-arm/spatial moment/factor-one/NSNR-069/`docs/TOLERANCE.md` boundaries, unchanged dispositions and no forbidden Stage 5/6/source/reference advancement. | `needs-io-definition` | Prepare bounded Stage 5 `io-definition-agent` dispatch; expected output only `io.md` |
|
||||
| 2026-08-28 | REAPPROVAL-011 Stage 5 I/O dispatch package | `in-progress` | Coordinator prepared bounded `io-definition-agent` package requiring `fesa-io-contract` and the passed Stage 4 hashes. Scope is limited to `io.md` global balance gate literals/diagnostics/handoff for force and moment `<=1e-8`; HDF5 schema/projections/reference paths/dispositions and `docs/TOLERANCE.md` separation must be preserved. | `needs-io-definition` | Root/profile dispatch to `io-definition-agent`; await owner return and Coordinator audit; do not start Stage 6 planning/Harness/Step 11 retry |
|
||||
| 2026-08-28 | REAPPROVAL-011 Stage 5 I/O return and Coordinator audit | `passed` | I/O Definition Agent returned `ready-for-coordinator-review`, blockers none; `io.md` raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`. Coordinator verified both coarse/fine global force and moment internal gates `<=1e-8`, unchanged HDF5 schema/projections/identities/scales/zero-scale/NSNR-069/reference paths and external-only `docs/TOLERANCE.md`, and no `fesa.env`/runtime-config direction. | `needs-implementation-plan` | Prepare bounded Stage 6 `implementation-planning-agent` materialization dispatch; do not run Harness or edit planning files as Coordinator |
|
||||
| 2026-08-28 | REAPPROVAL-012 Stage 6 planning materialization dispatch package | `in-progress` | Coordinator prepared bounded `implementation-planning-agent` package requiring `fesa-cpp-msvc-tdd` plus project-local `harness`. Scope is limited to `implementation-plan.md`, `phases/index.json`, phase index, `step11.md` and `step12.md`; update only obsolete `1e-10` global balance references to force/moment `<=1e-8`, preserve Steps `0..10` and dirty Step `11` implementation work, reset top/Step `11` for rerun only after materialization evidence, and keep Step `12` pending. | `needs-implementation-plan` | Root/profile dispatch to `implementation-planning-agent`; await materialization return and Coordinator audit; no Harness/build/CTest/solver/reference solver, implementation, commit or push |
|
||||
| 2026-08-28 | REAPPROVAL-012 Stage 6 planning materialization return and Coordinator audit | `passed` | Planning owner returned `ready-for-implementation`, blockers none; hashes verified for `implementation-plan.md` `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, `phases/index.json` `307D8041537D73B579E53F96B052BA035774B65ABF071BB230AAE20CFCF966A7`, phase index `E707372018A7F5DE86CDB40277AE567FE86915C47EFDB38A687E71DD65A2C9EB`, `step11.md` `F0DFD7BF2A473F47BCF7F6195DD41569B349474BF93F5D5B642882A037DBB8F8`, and `step12.md` `191432020B9C774BF153EECFD8F9A2EF74AF0014E2405478F541D85B517D7DD0`. Coordinator/root verified JSON parse, top/Step `11` pending, Step `12` pending, Steps `0..10` completed metadata retained, Step `11.started_at` retained, `NSNR-REF-024..025` gate requirements present, and no execution. | `needs-implementation` | Prepare Step `11` only no-push `implementation-agent` Harness package under USER-DECISION-005A; do not start Step `12` |
|
||||
| 2026-08-28 | STEP11-EXECUTION-003 global balance `1e-8` no-push dispatch package | `in-progress` | Coordinator prepared bounded Step `11` only package for `implementation-agent` via Harness. Runner/Executor owns branch, pending selection, retry, timestamps, commits, advancement and top-level phase status; Implementation Agent owns only Step `11` RED -> observed failure -> minimal GREEN -> VERIFY. Package requires `NSNR-REF-022` old-gate RED plus test-first `NSNR-REF-024..025`, no `fesa.env`/product config, reference immutability, no push and no Step `12` auto-advance. | `needs-implementation` | Root/Executor may launch Step `11` only under USER-DECISION-005A; await owner return and stop before Step `12` |
|
||||
| 2026-08-28 | STEP11-EXECUTION-003 runtime/environment return and Coordinator audit | `needs-rework` | Step `11` only wrapper attempt 1 timed out and attempt 2 selected user-local WindowsApps `pwsh.exe`, producing `CreateProcessAsUserW failed: 5 (Access denied)` on every exec. Stop-hook CTest evidence nevertheless passed all `302/302`, including the Step `11` global balance/reference tests; Step `11` remains pending because the agent did not update status/summary and Executor did not commit. Root stopped retry 3 and cleaned PIDs `4240`/`12000`/`16924`. | `needs-correction` | Dispatch bounded report-only `correction-agent` for launch PATH filter diagnosis; no Step `11` rerun or Step `12` before correction return |
|
||||
| 2026-08-28 | REWORK-009 user-local WindowsApps `pwsh.exe` launch filter return and Coordinator audit | `passed` | Correction Agent returned `corrected-for-implementation-rerun`, blockers none, `corrections.md` SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`. Coordinator/root verified Section 14: all PATH entries matching `\\WindowsApps(?:\\|$)` filtered, `pwsh` unresolved, system Windows PowerShell selected, exact `FESA_CODEX_SHELL_SMOKE_OK`, recovered RED->GREEN, focused passes, Stop `302/302`, no forbidden edits/execution/commit/push/reference mutation. | `needs-implementation` | Issue one bounded Step `11` only no-push rerun package using corrected launch PATH filter |
|
||||
| 2026-08-28 | STEP11-EXECUTION-004 all-WindowsApps-filter Step 11 rerun package | `in-progress` | Coordinator prepared bounded `implementation-agent`/Harness package: run only Step `11`, preserve fixed `<=1e-8` force/moment gates and all Stage 4/5/6 contracts, use Codex CLI `0.150.1` with `CODEX_HOME`, `workspace-write`, hooks, Terra/`xhigh`, `--disable unified_exec`, VsDevCmd x64/deps, Ninja/MSVC Debug preset and child PATH filtered by `\\WindowsApps(?:\\|$)`. | `needs-implementation` | Root/Executor may launch Step `11` only; hard-stop before Step `12`; no push, `danger-full-access`, reference mutation/solver or manual hooks |
|
||||
| 2026-08-28 | STEP11-EXECUTION-004 return and Coordinator audit | `passed` | Harness Step `11` completed with implementation commit `6dbf1b2`, metadata commit `c58ba9f`, phase completion `2026-08-28T09:22:33+0900`, Step `12` pending, clean worktree before Coordinator update, no push. Fresh LastTest.log mtime `2026-08-28 09:22:32` has `302/302` pass; focused procedure/HDF5 `7/7` and threshold `2/2` pass; stale LastTestsFailed.log is from prior RED; reference diff clean and reference artifacts unchanged by supplied hash/mtime evidence. | `needs-implementation` | Stop before Step `12`; await explicit Step `12` Harness/Implementation request |
|
||||
| 2026-08-28 | STEP12-EXECUTION-001 evidence-doc closure dispatch package | `in-progress` | User explicitly approved Step `12` execution. Coordinator verified clean worktree, HEAD `af5d72233c2bcd00edc087531d10eb92f7232d3e`, Step `11` completed, Step `12` pending, canonical reports absent and Step `12` scope: create actual-evidence-only `implementation-report.md`, `build-test.md`, `reference-comparison.md`, plus minimal directly-superseded PRD/ARCHITECTURE/ADR sync only. | `needs-implementation` | Root/Executor may run Step `12` under the prior successful Codex `0.150.1` all-WindowsApps-filter envelope; C++/tests/CMake/Harness/reference/tolerance changes, reference solver, Physics/Release dispatch and Coordinator execution remain forbidden |
|
||||
| 2026-08-28 | STEP12-EXECUTION-001 return and Coordinator code-review audit | `passed` | Implementation Agent/Harness returned Step `12` completed, exitCode `0`, owner classification `pass-for-physics-evaluation`. Coordinator reviewed reports, phase metadata and diff range `d275e844f27107cfab52309025e259f2156345d2..624807a13543454ffbb6b0301e06bf8f79fbeeb9`; changed paths are allowed reports/global docs/phase metadata only, `git diff --check` for the range exits `0`, source/tests/CMake/Harness/tolerance/reference/upstream feature docs are unchanged, and no tracked-file Critical/Important/Minor finding was found. | `needs-physics-evaluation` | Stage 6 passed; next eligible action is bounded Stage 7 Physics Evaluation dispatch, not started by this audit |
|
||||
| 2026-08-28 | STAGE7-PHYSICS-001 dispatch package | `in-progress` | User explicitly requested Stage 7 only. Coordinator state audit verified HEAD `014f6a7926f00950c62f8109226b2d4ab93efd36`, clean worktree before coordination update, Stage 6 passed, `implementation-report.md`/`build-test.md` classification `pass-for-physics-evaluation`, `reference-comparison.md` SHA-256 `5CFFB39BBDB323196461A54FCCFF8EE6E66866103D0931D4D3A94D2B3D644328`, and absent `physics-evaluation.md`. Dispatch requires `physics-evaluation-agent` with `fesa-physics-sanity`; it must audit the `reference-comparison.md` verdict wording and historical `requirements.md` draft/pending metadata against authoritative Coordinator/user approvals before issuing any pass. | `needs-physics-evaluation` | Await Physics owner return; do not dispatch Release, commit, push, run Harness/build/CTest/solver/reference solver, or edit source/tests/CMake/upstream contracts/reference/tolerance |
|
||||
| 2026-08-28 | STAGE7-PHYSICS-001 return and Coordinator audit | `needs-rework` | Physics owner created only `physics-evaluation.md`, SHA-256 `01BDD1EB986E2F227A8830495B464B4DA7A977D8B9248CFD87351A415E03A10B`, and returned `needs-upstream-decision`. Fresh focused physics CTest `23/23` and 12-reference hash audit passed; no documented physical failure was found. Coordinator verified all required sections, hash, `git diff --check`, no forbidden changed path, and accepted the single upstream report-contract blocker `PHYS-STATUS-001`: required `reference-comparison.md` lacks `pass-for-physics-evaluation`. Historical requirements draft/pending metadata is nonblocking under the recorded explicit user approval of the current hash. | `needs-implementation` | Route one bounded report-only status reconciliation to `implementation-agent`, then rerun Physics; Release remains ineligible and was not dispatched |
|
||||
| 2026-08-28 | PHYS-STATUS-001-IMPLEMENTATION-001 dispatch package | `in-progress` | User authorized both Stage 7/8 gates and Coordinator rework routing. Package assigns exactly one `implementation-agent` to edit only `reference-comparison.md`: add overall handoff `pass-for-physics-evaluation` while preserving detailed `blocking-pass-with-review-only-findings`, all values/dispositions/findings/hashes/no-change assertions. | `needs-implementation` | Await owner return; no tests/solver/evidence regeneration or other file edit; do not rerun Physics or dispatch Release before audit |
|
||||
| 2026-08-28 | PHYS-STATUS-001-IMPLEMENTATION-001 return and Coordinator audit | `passed` | Implementation owner returned `pass-for-physics-evaluation`, blockers none, changed only `reference-comparison.md`, SHA-256 `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241`. Coordinator verified an exact four-line handoff addition, retained detailed verdict/six review-only findings/all metrics and artifact evidence, clean whitespace, no reference diff, and no forbidden owner change. | `needs-physics-evaluation` | Rerun Stage 7 with corrected exact status; do not dispatch Release before Physics owner pass |
|
||||
| 2026-08-28 | STAGE7-PHYSICS-002 rerun package | `in-progress` | Same Physics owner must revise only `physics-evaluation.md` against corrected Stage 6 hash, retain prior audited physical evidence, independently resolve `PHYS-STATUS-001`, and return `pass-for-release-agent` only if no remaining blocker exists. | `needs-physics-evaluation` | Await Physics owner return; no Release dispatch, commit/push or other file mutation |
|
||||
| 2026-08-28 | STAGE7-PHYSICS-002 return and Coordinator audit | `passed` | Physics owner returned `pass-for-release-agent`, blockers none, revised only `physics-evaluation.md`, SHA-256 `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538`. Coordinator verified corrected Stage 6 hash/status, resolved PHYS-STATUS-001, eight required sections, prior fresh focused CTest `23/23` and reference hash evidence, all physics checks pass, only nonblocking/known-limit open items, explicit non-Release meaning, whitespace clean, no forbidden path/reference diff and no Release file. | `needs-release` | Stop before Release; root owns requested Stage 7 commit/push, then Stage 8 becomes the next bounded dispatch |
|
||||
| 2026-08-28 | STAGE8-RELEASE-001 dispatch package | `in-progress` | User-requested Stage 7 commit/push is verified at clean local/origin HEAD `06861608da5ffa4c09b786c3f5052dc7c6604e1b`. Coordinator inventoried all required Stage 1..7 reports and pass statuses, 24 must requirements, full CTest `302/302`, reference `9/9`, `pass-for-physics-evaluation` and `pass-for-release-agent`. One release-agent must independently audit freshness/contradictions/traceability/known limitations and create only `release.md`. | `needs-release` | Await owner return; no other edit, external solver, publish/deploy/package/tag, commit or push |
|
||||
| 2026-08-28 | STAGE8-RELEASE-001 return and Coordinator audit | `passed` | Release owner returned `ready-for-release`, blockers none, created only `release.md`, final SHA-256 `0DA80387B137DAA7629D4B0A0C1E5442F90E17F142345379669B2E1D1962E1D1`. Coordinator verified required sections/status, current gate hashes, 24/24 exact must traceability, 12/12 canonical reference hashes, all required known limitations/notes, transparent metadata omissions, whitespace/scope/no-change assertion and no external release action. | `completed` | Eight-stage workflow closed; root owns requested final commit/push only |
|
||||
|
||||
- current_dispatch: `stage-6-harness-implementation-execution-step0-retry-1`
|
||||
- current_workflow_state: `needs-implementation`
|
||||
- next_gate_requires_user_approval: `false` (Harness/Implementation execution owner evidence 선행)
|
||||
- current_dispatch: `none`
|
||||
- current_workflow_state: `completed`
|
||||
- next_gate_requires_user_approval: no next gate; the eight-stage workflow is completed. Root may perform the already requested final commit/push. Any numerical value/disposition/source/tests/CMake/Harness/reference/tolerance change, external solver/artifact mutation or publish/deploy/package/tag/external release requires separate explicit authority.
|
||||
|
||||
## 5. Risk, Blocker, and User-Decision Register
|
||||
|
||||
@@ -190,7 +252,49 @@
|
||||
| BLOCKER-001 | dispatch | Stage 4 requires a valid `numerical-review-agent` child dispatch. Root supplied the valid profile dispatch and owner return, so this runtime-tooling blocker no longer blocks the gate. | `coordinator-agent` / runtime tooling | closed |
|
||||
| REWORK-001 | report-contract | Stage 4 returned evidence had a cross-report contradiction on stress CSV and `RM3` comparison disposition. Corrected reports now consistently treat stress CSVs as optional read-only inspection/order evidence only and exclude `RM3` from comparison. | `numerical-review-agent` | closed |
|
||||
| REWORK-002 | io-contract | Stage 5 `io.md` bounded correction completed: public CLI `--output` substring rejection, Newton iteration log schema, exact `VARIABLE=PRESELECT` ignored-with-warning handling, repository-wide non-Newton log lifecycle, DECISION-028/029/030 path/log lifecycle and collision semantics are now recorded in `io.md`. | `io-definition-agent` | closed |
|
||||
| REWORK-003 | harness | Stage 6 Harness attempt 1 failed before Step 0 evidence because `_invoke_codex` did not catch `subprocess.TimeoutExpired` after `1800.7s`; no retry loop, `step0-output.json`, source/test edit, or implementation evidence was produced. Workspace-write smoke passed and `danger-full-access` is not justified. First same-class attempt routes back to no-push Implementation/Harness retry. | `implementation-agent` via Harness Executor | open |
|
||||
| REWORK-003 | harness | Stage 6 attempt 1 timeout/no-retry defect is repaired in Harness infrastructure: timeouts now return structured exit `124` through `MAX_RETRIES`, and implementation-agent profile settings are passed to Codex. Same normalized failure attempt count remains 1; attempt 2 is authorized and same-class recurrence stops automatic rework. | `implementation-agent` via Harness Executor | closed |
|
||||
| BLOCKER-002 | harness-runtime | Closed for USER-DECISION-005A route: nested Codex Windows shell tool execution hung under the approved Codex CLI `0.149.1` envelope in DECISION-042, but Codex CLI `0.150.1` same-envelope smoke passed and the Step `11` Harness rerun reached deterministic CTest/reference-gate failures instead of a shell hang. Recurrence of nested command `in_progress` timeout reopens this blocker. | external Codex runtime / user-root decision | closed-smoke-passed-step11-executed |
|
||||
| BLOCKER-003 | dispatch-runtime | This Coordinator runtime exposed no callable `spawn_agent` tool, but root successfully performed the required Correction Agent profile dispatch. | coordinator/root tooling | closed |
|
||||
| REWORK-004 | harness | Corrected: `scripts/execute.py` now passes adjacent `--disable`, `unified_exec` immediately after `codex exec`; `tests/test_execute.py` asserts this while preserving terra/xhigh routing; `corrections.md` records RED/GREEN/VERIFY and no Harness phase/source C++/CMake/reference edits. | `correction-agent` | closed |
|
||||
| REWORK-005 | harness | FileTracker Correction returned `blocked`: VS18/MSBuild `FileTracker` `E_ACCESSDENIED` is classified as environment-owned sandbox/MSBuild interaction; no safe Visual Studio `workspace-write` workaround was proven. User resolved the route by approving option A Ninja/MSVC validation. | `correction-agent` | closed-by-USER-DECISION-002A |
|
||||
| REWORK-006 | harness | Corrected: approved option A is expressed through tracked `CMakePresets.json`, ignored `.harness/config.json`, preset-based implementation-plan/step verification commands, RED-first contract test, workspace-write Ninja/MSVC blocker-clear evidence, and blocked-to-pending phase reset only after pass. | `correction-agent` | closed |
|
||||
| REWORK-007 | upstream-contract | Step 11 reference comparison is blocked because the approved residual-moment convergence denominator makes no-applied-moment shellNL structurally nonconvergent for any nonzero rotational residual. Correction changed only `corrections.md` and returned `needs-upstream-decision`. | `correction-agent` | closed-upstream-contract |
|
||||
| REWORK-008 | upstream-contract | Correction returned `needs-upstream-decision`, classification `reference-blocking-model-adequacy-conflict`: local nodal RF/RM blocking assumes unsupported Abaqus S4 versus FESA MITC4 distribution adequacy, while reaction pipeline/global equilibrium evidence is sound. Section 13 SHA-256 `C8AC5A5015E5F9622E2964F514F2C06572F953B5244F006044DEDDF0F3D0A194`. | `correction-agent` | closed-upstream-contract |
|
||||
| USER-DECISION-004 | user decision | User explicitly approved option 1 on `2026-08-26`: local nodal `RF1/RF2/RF3` and physical spatial `RM1/RM2` rows are review-only/nonblocking with deterministic source-key/schema/finite/inventory/error reporting; `RM3` remains excluded; blocking reaction/equilibrium evidence is factor-one global resultant force `[3]`, global resultant moment `[3]` and accepted free-DOF residual gates/evidence. No tolerance/comparator/reference relaxation is authorized. | user via Coordinator | closed |
|
||||
| REAPPROVAL-006 | upstream-reapproval | USER-DECISION-004 option 1 Stage 1 propagation completed: requirements owner/Coordinator audit passed for `requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`, and the user explicitly re-approved that hash on `2026-08-27`. Stage 3 formulation has no immediate dispatch because §11.4/§13.4 already define residual/reaction/global-resultant semantics. | `requirement-agent` / Coordinator / user | closed |
|
||||
| REAPPROVAL-007 | upstream-reapproval | USER-DECISION-004 option 1 Stage 4 propagation completed: `numerical-review.md` SHA-256 `0A7224003CFF706E9B4D9F55BA2624805299FAC8F42ECD2BC37E429B26DF0091`, `reference-model.md` SHA-256 `81A82D3B367FF501F3C355F81D4E5DD4677BE58E4182E4EB8EEDBB2462FEA2CE`, owner status `pass-for-io-definition`, Coordinator audit passed, blockers none, and the user explicitly approved both hashes on `2026-08-27`. | `numerical-review-agent` / Coordinator / user | closed |
|
||||
| REAPPROVAL-008 | upstream-reapproval | USER-DECISION-004 option 1 Stage 5 propagation completed: `io.md` raw SHA-256 `C7400C2B1454BE7287EE22D18BB28DA7AFB27FE6F8287783BB83769A4AB8D83C`, LF-normalized SHA-256 `BF775990D83D95B470F814BE57C9676305119D97E48225E231D4926E7809029F`; owner/Coordinator audit passed and the user explicitly approved the raw hash on `2026-08-27`. | `io-definition-agent` / Coordinator / user | closed |
|
||||
| REAPPROVAL-009 | planning-reapproval | Stage 6 implementation planning re-entry draft returned `draft-ready-for-user-review`; Coordinator audit passed; user explicitly approved the draft on `2026-08-27`. Draft proposes only Step `11`/`12` replanning for USER-DECISION-004 option 1 and AUDIT-001 while preserving Steps `0..10`, current uncommitted Step 11 work, approved contracts, no-new-dataset semantics and no execution. | `implementation-planning-agent` / Coordinator / user | closed |
|
||||
| MATERIALIZATION-003 | planning-materialization | Passed: Planning Agent materialized exactly `implementation-plan.md` SHA-256 `758F8F5BB224E88864338C48221D53D4BD2F8633E04C9F2136FFF9E2D1BADFB8`, `phases/index.json` SHA-256 `536D4BF9427792ECCCE4C9A2980210E050035D0202DB8A700BDD671E0DB218C7`, `phases/nonlinear-static-newton-raphson/index.json` SHA-256 `D808D5C0F389B444A529FC81A48B5726E4CF282CA51B62F3AECAC4D89EA6A5BF`, `step11.md` SHA-256 `D324F7E1495A25B3B8CEA7A2A6C68D559F8336C3A527A164ECD2D0A82C20A526`, and `step12.md` SHA-256 `F2831F7E802A40631C91E638C9079508EF1A97CFE46FACC51DCBB4EC55337452`. Coordinator audit found JSON parse clean, no placeholders, scoped `git diff --check` pass, changed planning outputs within allowlist, Step `11`/top phase pending, Steps `0..10` preserved, Step `12` pending, reference diff clean and no Harness/build/solver execution. | `implementation-planning-agent` / Coordinator | passed |
|
||||
| DECISION-042 | user approval | User explicitly approved `Harness/Implementation 시작` for no-push Step `11` execution only. The verified command is `python scripts/execute.py nonlinear-static-newton-raphson`; Step `12` is not authorized and must not start before Coordinator audit. | user via Coordinator | closed |
|
||||
| USER-DECISION-005 | user decision | User approved option A on `2026-08-28`: use official current Codex CLI `0.150.1` to repair/validate the runtime route, run a bounded same-envelope nested shell smoke, and only if it passes rerun Step `11` no-push. Smoke passed with app SHA-256 `CBD657DDFE151D1A6EBAD660BEFFDBD3265DC5AFF4B3A6095124D3E2F0156F2F`, doctor `20 ok/0 fail`, duration `93.621s`, nested exit `0`, command_execution completed and output `CODEX_SHELL_SMOKE_OK`. This does not authorize `danger-full-access`, reference solver/artifact changes, push, Step `12`, manual hooks or runner/source/test/phase edits outside the Step `11` contract. | user via Coordinator | closed-option-A-smoke-passed |
|
||||
| USER-DECISION-006 | user decision | Closed/delegated superseding decision on `2026-08-28`: withdraw the entire `fesa.env`/runtime-config discussion; do not add `fesa.env`, config parsing, runtime API or product behavior. Current authoritative contract fixes both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8`, preserving exact formulas, sum-of-contribution scales, zero-scale rule, quantities/source identity, blocking/review/warning dispositions, NSNR-069 free-residual gates, HDF5 schema, reference artifacts and `docs/TOLERANCE.md` separation. Coordinator is delegated to run Stage 4/5/6 reapproval and Step `11` no-push completion without intermediate approval waits, but must stop on any change beyond this fixed threshold. | user via Coordinator | closed-delegated |
|
||||
| REAPPROVAL-010 | upstream-reapproval | Passed under delegated USER-DECISION-006 authority: Stage 4 owner returned `pass-for-io-definition`, blockers none, `numerical-review.md` SHA-256 `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` and `reference-model.md` SHA-256 `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`; Coordinator audit passed against the threshold-only package. | `numerical-review-agent` / Coordinator | passed |
|
||||
| REAPPROVAL-011 | upstream-reapproval | Passed under delegated USER-DECISION-006 authority: Stage 5 owner returned `ready-for-coordinator-review`, blockers none, `io.md` raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`; Coordinator audit passed against the threshold-only package with schema/projection/reference/TOLERANCE boundaries preserved. | `io-definition-agent` / Coordinator | passed |
|
||||
| REAPPROVAL-012 | planning-materialization | Passed under delegated USER-DECISION-006 authority: Planning owner returned `ready-for-implementation`, blockers none; `implementation-plan.md` SHA-256 `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, `phases/index.json` `307D8041537D73B579E53F96B052BA035774B65ABF071BB230AAE20CFCF966A7`, phase index `E707372018A7F5DE86CDB40277AE567FE86915C47EFDB38A687E71DD65A2C9EB`, `step11.md` `F0DFD7BF2A473F47BCF7F6195DD41569B349474BF93F5D5B642882A037DBB8F8`, `step12.md` `191432020B9C774BF153EECFD8F9A2EF74AF0014E2405478F541D85B517D7DD0`; Coordinator audit passed. | `implementation-planning-agent` / Coordinator | passed |
|
||||
| STEP11-EXECUTION-003 | implementation-dispatch | Needs rework: Step `11` only no-push wrapper attempt 1 timed out and attempt 2 hit inaccessible `C:\Users\baram\AppData\Local\Microsoft\WindowsApps\pwsh.exe` with `CreateProcessAsUserW failed: 5`; Stop-hook CTest evidence passed `302/302`, but Step `11` status/summary/commit are absent. | `implementation-agent` / Harness Executor / Coordinator | needs-rework |
|
||||
| REWORK-009 | harness-environment | Passed: Correction Agent diagnosed the user-local WindowsApps `pwsh.exe` launch filter miss and proved an all-`WindowsApps` PATH-filter same-envelope shell smoke. Output `corrections.md` SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`; changed `corrections.md` only; no runner/source/test/CMake/phase/upstream/reference/tolerance edits. | `correction-agent` / Coordinator | passed |
|
||||
| STEP11-EXECUTION-004 | implementation-dispatch | Passed: Step `11` completed and committed under corrected all-WindowsApps child PATH filter. Implementation commit `6dbf1b2`; metadata commit `c58ba9f`; focused and Stop evidence passed; Step `12` remains pending and unstarted. | `implementation-agent` / Harness Executor / Coordinator | passed |
|
||||
| STEP12-EXECUTION-001 | implementation-dispatch | Passed: Step `12` evidence-doc closure completed with canonical Stage 6 reports, minimal PRD/ARCHITECTURE/ADR sync, Executor-owned phase metadata/output and local commits. Coordinator code-review audit found no tracked-file Critical/Important/Minor finding and no forbidden source/tests/CMake/Harness/reference/tolerance change. | `implementation-agent` / Harness Executor / Coordinator | passed |
|
||||
| BLOCKER-005 | dispatch-runtime | This Coordinator runtime exposes no callable collaboration `spawn_agent` tool and `tool_search` found no dispatch tool. Root completed prior profile/Harness dispatches through Step `12`; no active dispatch remains. Future Stage 7 dispatch still requires root/profile launch if this runtime remains unchanged. | coordinator/root tooling | closed-no-current-dispatch |
|
||||
| PUSH-001 | external-push | Closed before Stage 7 intake: branch HEAD `014f6a7926f00950c62f8109226b2d4ab93efd36` matched `origin/feat-nonlinear-static-newton-raphson` with no ahead/behind marker. Stage 7 commit/push remains root-owned after this audit. | root/user remote auth | closed |
|
||||
| STAGE7-PHYSICS-001 | physics-evaluation-dispatch | Needs rework: owner found no physical failure but withheld `pass-for-release-agent` because required `reference-comparison.md` has no `pass-for-physics-evaluation` handoff status. | `physics-evaluation-agent` / Coordinator | needs-rework |
|
||||
| PHYS-STATUS-001 | upstream-report-contract | Resolved: Implementation owner added unambiguous overall `pass-for-physics-evaluation` while preserving detailed `blocking-pass-with-review-only-findings` and all evidence. Coordinator verified corrected SHA-256 `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241` and exact status-only diff. | `implementation-agent` through Coordinator | passed |
|
||||
| STAGE7-PHYSICS-002 | physics-evaluation-dispatch | Passed: owner returned `pass-for-release-agent`, blockers none; Coordinator audit verified SHA-256 `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538`, corrected input hash, physics evidence and no-change/Release boundaries. | `physics-evaluation-agent` / Coordinator | passed |
|
||||
| STAGE8-RELEASE-001 | release-readiness-dispatch | Passed: owner returned `ready-for-release`, blockers none; Coordinator verified release SHA-256 `0DA80387B137DAA7629D4B0A0C1E5442F90E17F142345379669B2E1D1962E1D1`, 24/24 traceability, gate/validation inventory, known limitations, release notes and authority boundaries. | `release-agent` / Coordinator | passed |
|
||||
| AUDIT-001 | projection-implementation | Passed by STEP11-EXECUTION-004: `/global/equilibrium` and reference comparator tests cover current nodal positions, spatial physical nodal moments about global origin, distinct global balance/free residual projections, and nonzero prescribed motion without raw full residual/initial-coordinate shortcut. | `implementation-planning-agent` / `implementation-agent` | passed |
|
||||
| MESH-REFINEMENT-SPIKE-001 | diagnostic-spike | Completed read-only numerical/reference spike for `reference/shellNL-meshfine`: artifacts copied byte-identically, required rows readable, existing executable run successful, primary displacement/rotation passed common tolerance, local RF/RM per-row gates failed, and current coarse/fine Abaqus S4 pair did not meet option 3 independent benchmark condition. | `numerical-review-agent` | passed |
|
||||
| TRANSLATION-REPORT-001 | focused-report | Completed bounded report for coarse/fine `U1/U2/U3` translation displacement only. Output `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` SHA-256 `597D923FB1943CCB2BCF9D9FFC13FD904F795DFEB9CB71B097FF168B78694338`; diagnostic non-gate, not canonical `reference-comparison.md`, and does not alter reaction/rotation/stress or USER-DECISION-004 disposition. | `implementation-agent` | passed |
|
||||
| USER-DECISION-002 | user decision | User explicitly chose option A: approve Ninja/MSVC evidence contract for Stage 6 continuation. Option B `danger-full-access` and option C external sandbox wait are not selected. | user via Coordinator | closed |
|
||||
| USER-DECISION-003 | user decision | User approved option 1: if the matching external residual-channel scale is exact zero, use the existing typed absolute residual gate; keep current relative denominator when the external scale is nonzero. This starts required upstream re-approval in order: requirements NSNR-069, formulation §14.1, numerical-review, I/O, then implementation-plan/phase steps before implementation rerun. | user via Coordinator | closed |
|
||||
| REAPPROVAL-001 | upstream-reapproval | USER-DECISION-003 option 1 Stage 1 propagation completed: requirements owner return and Coordinator audit passed for `requirements.md` SHA-256 `89B6AEC25BD6AF5B79D328EEF63359A82DDB9402AE9482E3082A70C474A7B8B8`, and the user explicitly re-approved that hash. | `requirement-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-002 | upstream-reapproval | USER-DECISION-003 option 1 Stage 3 propagation completed: formulation owner return and Coordinator audit passed for `formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`, and the user explicitly re-approved that hash. | `formulation-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-003 | upstream-reapproval | USER-DECISION-003 option 1 Stage 4 propagation completed: Numerical Review owner return and Coordinator audit passed for `numerical-review.md` SHA-256 `E93E0DEF1FD5ECDF956D50C6F8B8F1C073E21650E14EDC97A683DCA4688FE153`, `reference-model.md` remained byte-identical at SHA-256 `44B619BE2494007D8F2F51F34B9D974F934C26818F5AB8AF2DAA288ABF78D2FC`, and the user explicitly re-approved both hashes. | `numerical-review-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-004 | upstream-reapproval | USER-DECISION-003 option 1 Stage 5 propagation completed: I/O owner return and Coordinator audit passed for `io.md` raw SHA-256 `DB0BD8339172FD05712D2B7469966DEB0A6A82CB5A0052817F4725319E741334`, LF-normalized SHA-256 `E0C42775FF5C3963A37DF70B00044DDA244A463A6DD222975C2903A1BFA205AF`, and the user explicitly re-approved both hashes. | `io-definition-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-005 | planning-reapproval | USER-DECISION-003 option 1 Stage 6 planning propagation draft passed Coordinator audit and the user explicitly approved materialization on `2026-08-25`. | `implementation-planning-agent` / user via Coordinator | closed |
|
||||
| MATERIALIZATION-002 | planning-materialization | User-approved Stage 6 planning revision materialized only in `implementation-plan.md`, `step5.md`, `step7.md`, `step10.md`, `step11.md`, `step12.md`, feature index and top index; Steps 0..10 history/commits and partial Step 11 comparator files are preserved, Step 11/top status reset to `pending`, and Step 12 remains `pending`. | `implementation-planning-agent` | closed |
|
||||
| DECISION-040 | user approval | User explicitly approved the audited Implementation Planning revision draft and requested materialization. This approval does not authorize Harness, CTest, code/test/CMake/source edits, reference artifact changes, commit, or push. | user via Coordinator | closed |
|
||||
| DECISION-041 | user approval | User explicitly requested no-push Harness/Implementation rerun from Step 11 under DECISION-038/039: Codex CLI `0.149.1`, aligned `CODEX_HOME`, launch-env WindowsApps PATH filtering, `workspace-write`, hooks retained, `--disable unified_exec`, VsDevCmd x64, dependency env vars, approved Ninja/MSVC Debug preset, no `danger-full-access`, no push, no reference solver and no reference artifact mutation. | user via Coordinator | closed |
|
||||
| RISK-001 | architecture | 기존 `LinearStaticAnalysis` private lifecycle은 단일 factorization/substitution과 final frame만 소유하므로 nonlinear increment/iteration/state commit을 삽입하면 ADR 경계를 위반한다. | `coordinator-agent` routing | open |
|
||||
| RISK-002 | scope | `Newton–Raphson`은 solution algorithm이고 geometric/material/contact nonlinearity 범위를 단독으로 결정하지 않는다. | `requirement-agent` | mitigated by DECISION-001 |
|
||||
| RISK-003 | contract | 현재 `Element`는 displacement-dependent residual/consistent tangent/trial state 계약이 없고 `AnalysisState`는 nonlinear history를 소유하지 않는다. | downstream formulation/architecture gates | open |
|
||||
@@ -233,28 +337,35 @@
|
||||
| DECISION-035 | user approval | User explicitly approved Stage 5 `docs/nonlinear-static-newton-raphson/io.md` SHA-256 `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28` and requested Implementation Planning. | user via Coordinator | closed |
|
||||
| DECISION-036 | user approval | User explicitly approved the Stage 6 Implementation Planning 13-Step draft on `2026-08-24` and authorized creation of `implementation-plan.md` plus pending Harness phase files. | user via Coordinator | closed |
|
||||
| DECISION-037 | user approval | User explicitly requested no-push Harness/Implementation execution for materialized phase `nonlinear-static-newton-raphson` on `2026-08-24`. | user via Coordinator | closed |
|
||||
| DECISION-038 | user/root runtime approval | User/root authorized Codex CLI update, shell smoke and no-push Harness rerun. Accepted runtime envelope is Codex CLI `0.149.1`, `CODEX_HOME=C:\Users\baram\.codex`, launch-env-only WindowsApps PATH filtering, `workspace-write`, hooks retained, implementation-agent `gpt-5.6-terra`/`xhigh`, no `danger-full-access`, and `--disable unified_exec`. | user/root via Coordinator | closed |
|
||||
| DECISION-039 | user decision | Stage 6 FileTracker blocker route: user approved option A, making Ninja/MSVC x64 Debug with full CTest the accepted validation contract for continuation. `danger-full-access`, Visual Studio fallback, reference solver activity, push and Step 2 advancement remain unauthorized. | user via Coordinator | closed |
|
||||
| USER-DECISION-001 | user decision | Stage 6 Implementation Planning draft Steps `0..12` were approved on `2026-08-24`; materialization is authorized for `implementation-planning-agent`. | user via Coordinator | closed |
|
||||
|
||||
## 6. Rework-Loop Control and Stop Condition
|
||||
|
||||
- normalized_failure_attempts: `requirements-next-question-routing-mismatch`: 1; `requirements-output-failure-atomicity-scope-ambiguity`: 1; `requirements-compact-public-contract-omission`: 1; `formulation-equilibrium-reaction-symbol-collision`: 1; `formulation-moment-admissibility-work-inconsistency`: 1; `numerical-review-cross-report-disposition-contradiction`: 1; `io-contract-public-cli-log-output-request-gap`: 1; `harness-uncaught-step-codex-timeout-no-retry`: 1
|
||||
- normalized_failure_attempts: `requirements-next-question-routing-mismatch`: 1; `requirements-output-failure-atomicity-scope-ambiguity`: 1; `requirements-compact-public-contract-omission`: 1; `formulation-equilibrium-reaction-symbol-collision`: 1; `formulation-moment-admissibility-work-inconsistency`: 1; `numerical-review-cross-report-disposition-contradiction`: 1; `io-contract-public-cli-log-output-request-gap`: 1; `harness-nested-codex-windows-shell-tool-execution-hang`: 3; `harness-console-cp949-retry-glyph-unicodeencodeerror`: 1; `harness-msbuild-filetracker-eaccessdenied-workspace-write`: 2; `implementation-shellnl-nonlinear-nonconvergence-no-hdf5`: 1; `reference-blocking-model-adequacy-conflict`: 1; `upstream-global-moment-balance-gate-threshold-conflict`: 1; `harness-launch-path-filter-missed-user-windowsapps-pwsh-access-denied`: 2; `physics-reference-comparison-handoff-status-mismatch`: 1
|
||||
- automatic_rework_limit: 동일 normalized failure classification `2`회
|
||||
- correction_agent_policy: 명확한 implementation failure는 먼저 `implementation-agent`에 반환하고, 반복되거나 원인이 불명확할 때만 `correction-agent`를 dispatch한다.
|
||||
- stop_condition: 동일 classification이 두 번이면 자동 rework를 중단하고 workflow를 `needs-user-decision` 또는 `blocked`로 전환한다.
|
||||
- correction_cycle_authorization: REWORK-008 is closed as `upstream-contract`. MATERIALIZATION-003 and REAPPROVAL-012 are closed as `passed`. USER-DECISION-006 resolves the prior `upstream-global-moment-balance-gate-threshold-conflict` by fixing both normalized global balance gates at `<=1e-8`. STEP11-EXECUTION-003 reached normalized environment failure count `2`, automatic retry was stopped, REWORK-009 passed, STEP11-EXECUTION-004 passed, and STEP12-EXECUTION-001 passed. No correction loop is active.
|
||||
- upstream_reapproval_sequence: Prior USER-DECISION-003/004/006 sequences remain closed. PHYS-STATUS-001 passed on first attempt, Stage 7 returned `pass-for-release-agent`, Stage 8 returned `ready-for-release`, and all Coordinator audits passed. No rework loop remains active.
|
||||
|
||||
## 7. Final Workflow Closure
|
||||
|
||||
- closure_status: `not-eligible`
|
||||
- required_evidence: `docs/nonlinear-static-newton-raphson/release.md`의 `ready-for-release` recommendation
|
||||
- closure_record: 없음
|
||||
- closure_status: `completed`
|
||||
- required_evidence: satisfied by `docs/nonlinear-static-newton-raphson/release.md` SHA-256 `0DA80387B137DAA7629D4B0A0C1E5442F90E17F142345379669B2E1D1962E1D1`, owner verdict `ready-for-release`, blockers none
|
||||
- closure_record: Eight stages are `passed`; Stage 6 `pass-for-physics-evaluation`, Stage 7 `pass-for-release-agent`, full CTest `302/302`, reference `9/9`, 24/24 must traceability and disclosed known limitations are audited. Closure means internal feature workflow readiness only and does not publish, deploy, package, tag or externally release.
|
||||
|
||||
## 8. No-Change Assertion
|
||||
|
||||
- source_code: 변경 없음
|
||||
- tests: 변경 없음
|
||||
- CMake: 변경 없음
|
||||
- reference_artifacts: 생성·수정·rename 없음
|
||||
- source_code: Steps 0..11 implementation source changes are committed through Harness; Step `11` implementation commit is `6dbf1b2`. Step `12` range contains no source-code diff. Coordinator did not edit source code.
|
||||
- tests: Step `11` comparator/test changes are committed through Harness. Step `12` range contains no test diff; owner reports focused commands and full CTest `302/302` passed. Coordinator did not edit tests.
|
||||
- CMake: Step `11` owner committed `tests/CMakeLists.txt` changes; REWORK-006 added tracked `CMakePresets.json` for DECISION-039 Ninja/MSVC validation. Coordinator did not edit CMake configuration.
|
||||
- reference_artifacts: Root copied four `reference/shellNL-meshfine` artifacts byte-identically into the feature worktree for the approved spike; SHA-256 values match the recorded main-checkout hashes and row counts `729/729/5408`. No reference artifact was generated, renamed, normalized, repaired or modified by Coordinator.
|
||||
- tolerance_policies: 변경 없음
|
||||
- phase_files: user-approved planning owner가 `phases/index.json` pending entry와 `phases/nonlinear-static-newton-raphson/index.json`, `step0.md`..`step12.md`를 materialize함; Coordinator는 수정하지 않았고 Step 0은 implementation evidence 없이 pending으로 남아 있음
|
||||
- Harness: Root-reported attempt 1 evidence만 기록함; Coordinator는 실행하지 않았고 no-push `scripts/execute.py nonlinear-static-newton-raphson` retry dispatch package만 기록함
|
||||
- feature_documents: 이번 coordinator update에서는 `coordination.md`만 갱신함; `implementation-plan.md`는 user-approved planning owner가 materialize했고 `implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 생성되지 않음
|
||||
- phase_files: Step `12` metadata commit `624807a` records phase completion; `phases/index.json` SHA-256 `5FA3225F73E4B4FB6A7CFCD049DD66FF21715DFB41A91BB14F47ABDFE45378BD` and phase index SHA-256 `B941B903746DA19F1460C1022FE3501DFC44CE09E5D72CCCCCB7E38D7D55FD22`; Steps 0..12 are completed and top phase is completed. Coordinator did not edit phase files.
|
||||
- Harness: STEP12-EXECUTION-001 completed under the approved envelope with owner-reported exitCode `0`, fresh configure/build/discovery/focused/full CTest and reference gate pass. Physics owner additionally ran focused CTest `23/23`; Release owner and Coordinator did not run Harness/build/test, use `danger-full-access`, clean outputs, publish/deploy/package/tag/external release, commit or push.
|
||||
- feature_documents: REWORK-008 Correction updated `docs/nonlinear-static-newton-raphson/corrections.md` Section 13 SHA-256 `C8AC5A5015E5F9622E2964F514F2C06572F953B5244F006044DEDDF0F3D0A194`; Requirement Agent updated only `docs/nonlinear-static-newton-raphson/requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`; Formulation Agent updated only `docs/nonlinear-static-newton-raphson/formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`; REAPPROVAL-010 Numerical Review Agent updated Stage 4 reports to `docs/nonlinear-static-newton-raphson/numerical-review.md` SHA-256 `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` and `docs/nonlinear-static-newton-raphson/reference-model.md` SHA-256 `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`; REAPPROVAL-011 I/O Definition Agent updated only `docs/nonlinear-static-newton-raphson/io.md` raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`; REAPPROVAL-012 Planning owner materialized `docs/nonlinear-static-newton-raphson/implementation-plan.md` SHA-256 `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, `step11.md` SHA-256 `F0DFD7BF2A473F47BCF7F6195DD41569B349474BF93F5D5B642882A037DBB8F8` and `step12.md` SHA-256 `191432020B9C774BF153EECFD8F9A2EF74AF0014E2405478F541D85B517D7DD0`. STEP12-EXECUTION-001 created `implementation-report.md` SHA-256 `D75C8B5922C9EEF7C7262B01BFB12D5F7609B1A6DB3A7C6D5AE47CB45ADAD578`, `build-test.md` SHA-256 `ED6B1B6CFD9478B09B92E7ADE3891622FEA1AA521AD29550D6F4C78C952E8DDA`, `reference-comparison.md` SHA-256 `5CFFB39BBDB323196461A54FCCFF8EE6E66866103D0931D4D3A94D2B3D644328` and minimal `docs/PRD.md`/`docs/ARCHITECTURE.md`/`docs/ADR.md` sync. This coordinator update changed only isolated `coordination.md`.
|
||||
- stage7_rework_documents: PHYS-STATUS-001-IMPLEMENTATION-001 changed only `reference-comparison.md` to SHA-256 `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241`; STAGE7-PHYSICS-002 revised only `physics-evaluation.md` to SHA-256 `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538`; Coordinator changed only `coordination.md`.
|
||||
- release_document: STAGE8-RELEASE-001 created only `docs/nonlinear-static-newton-raphson/release.md`, SHA-256 `0DA80387B137DAA7629D4B0A0C1E5442F90E17F142345379669B2E1D1962E1D1`; Coordinator changed only `coordination.md`.
|
||||
- correction_reports: REWORK-009 Correction Agent updated current `docs/nonlinear-static-newton-raphson/corrections.md` Section 14, SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`. Coordinator did not edit `corrections.md`.
|
||||
|
||||
@@ -0,0 +1,644 @@
|
||||
# Nonlinear Static Newton-Raphson Correction Report
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `docs/nonlinear-static-newton-raphson/coordination.md`; `phases/nonlinear-static-newton-raphson/step0-output.json`; `phases/nonlinear-static-newton-raphson/step1-output.json` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 생성되지 않았으므로 현재 Coordinator failure evidence와 Executor의 `step0-output.json` 및 `step1-output.json`을 source failure report로 사용했다.
|
||||
|
||||
Sections 2-6의 Codex `0.147.0` 내용은 initial correction history이고 Sections 7-9는 REWORK-004 history다. Section 10은 FileTracker diagnosis history이고 Sections 11-13은 이전 correction history다. Current correction과 status는 Section 14가 supersede한다.
|
||||
|
||||
## 2. Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-nested-codex-windows-shell-tool-execution-hang`
|
||||
- first failed command:
|
||||
|
||||
```powershell
|
||||
codex exec --json --model gpt-5.6-terra --config 'model_reasoning_effort="xhigh"' --sandbox workspace-write --dangerously-bypass-hook-trust --cd C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson -
|
||||
```
|
||||
|
||||
- failed target or test: nested shell smoke `cmd.exe /d /c echo CODEX_SHELL_SMOKE_OK`
|
||||
- evidence tail: baseline diagnostic는 45초 안에 종료되지 않았다. JSONL에는 `item.started`, `type=command_execution`, `status=in_progress`가 기록됐지만 대응하는 completion event와 `CODEX_SHELL_SMOKE_OK` 출력이 없었다. 진단 root PID `11292`와 관찰된 descendant PID tree를 `taskkill /PID 11292 /T /F`로 종료한 뒤 `remainingPids=[]`를 확인했다.
|
||||
- historical evidence: `step0-output.json`도 exit code `124`, stderr `Codex timed out after 1800 seconds.`를 기록했고 `Get-Date`, `cmd.exe /d /c echo test`, `exit 0` 등의 nested command가 `status=in_progress`에 머물렀다.
|
||||
|
||||
## 3. Root Cause Summary
|
||||
|
||||
실패 경계는 repaired Python Executor의 timeout/retry 처리나 FESA C++ 구현이 아니라 local `codex-cli 0.147.0`의 nested command execution runtime이다. 같은 worktree에서 direct PowerShell과 `cmd.exe`는 정상 실행되고, focused Harness Python test도 통과하며, runner-equivalent Codex baseline만 nested shell completion을 반환하지 않았다.
|
||||
|
||||
Local CLI help는 `--disable <FEATURE>`와 `--enable <FEATURE>`를 문서화하고, `codex features list`는 `code_mode_host`를 `stable true`, `shell_tool`을 `stable true`, `unified_exec`를 `stable false`, `hooks`를 `stable true`로 보고했다. 다음 좁은 가설을 한 변수씩 검사했다.
|
||||
|
||||
| variant | result | command completion evidence |
|
||||
| --- | --- | --- |
|
||||
| baseline | 45.318초 timeout 후 exact PID tree cleanup | `item.started/status=in_progress`; completion 및 echo output 없음 |
|
||||
| `--disable code_mode_host` | exit `0`, 33.322초 | shell 미실행; stderr `code-mode host is disabled`; completion event 없음 |
|
||||
| `--enable unified_exec` | 45.299초 timeout 후 exact PID tree cleanup | completion event 및 echo output 없음 |
|
||||
| `--disable code_mode_host --enable unified_exec` | exit `0`, 25.922초 | shell 미실행; 동일한 fail-closed host-disabled error |
|
||||
|
||||
따라서 `--disable code_mode_host`는 shell execution을 복구하지 않고 tool host를 fail-closed로 제거한다. `unified_exec`도 단독 또는 조합에서 실제 shell completion을 만들지 못했다. Codex 내부 결함의 더 세부 원인은 repository evidence로 확정할 수 없으며, 안전한 documented runner flag workaround는 입증되지 않았다. 이는 implementation defect, test defect 또는 CMake registration issue가 아니라 external Codex runtime blocker다.
|
||||
|
||||
## 4. Correction Scope
|
||||
|
||||
- changed source files: `scripts/execute.py` (`codex exec` argv에 adjacent `--disable`, `unified_exec` 추가)
|
||||
- changed header files: 없음
|
||||
- changed test files: `tests/test_execute.py` (Implementation Agent command contract regression assertion 추가)
|
||||
- changed CMake files: 없음
|
||||
- changed report files: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- excluded upstream contract files: `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`
|
||||
- excluded artifacts/policies: phase definition/index, production C++, reference inputs/CSV, `docs/TOLERANCE.md`
|
||||
|
||||
초기 correction cycle에서는 safe workaround가 입증되지 않아 runner/test를 변경하지 않았다. 이후 user/root가 Codex `0.149.1`의 bounded smoke로 `--disable unified_exec` runtime envelope를 입증했고, REWORK-004에서 그 pair만 TDD로 추가했다. 기존 Harness-repair 변경과 다른 owner의 dirty-worktree 변경은 그대로 보존했다.
|
||||
|
||||
## 5. Verification Evidence
|
||||
|
||||
| purpose | command | result |
|
||||
| --- | --- | --- |
|
||||
| installed CLI | `codex --version` | exit `0`; `codex-cli 0.147.0` |
|
||||
| documented options | `codex exec --help`; `codex features list` | exit `0`; `--enable/--disable`, `code_mode_host`, `unified_exec`, `shell_tool`, `hooks` 확인 |
|
||||
| targeted reproduction | runner-equivalent `codex exec ... --sandbox workspace-write ...` + one echo tool request | 45초 timeout; command started, completion/output 없음; exact tree cleanup 후 remaining PID 0 |
|
||||
| focused Harness Python | `uv run --with pytest python -m pytest -v -rs tests/test_execute.py` | exit `0`; 10 passed |
|
||||
| full Harness Python | `uv run --with pytest python -m pytest -v -rs` | exit `1`; 23 passed, 1 failed |
|
||||
| MSVC Debug build | `cmake --build .harness/build --config Debug` | exit `0`; solver/CLI/unit/integration/reference targets built |
|
||||
| CTest discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | exit `0`; 214 tests discovered |
|
||||
| full CTest | `ctest --test-dir .harness/build -C Debug --output-on-failure` | exit `0`; 214/214 passed |
|
||||
|
||||
`.harness/config.json`은 없었다. Existing `.harness/build/CMakeCache.txt`는 `Visual Studio 18 2026`, `x64`, approved local GoogleTest/MKL/TBB/HDF5 paths를 사용하므로 Harness auto-detected build tree를 재사용했다.
|
||||
|
||||
Full Python failure는 pre-existing out-of-scope contract mismatch다: `test_agent_toml_and_limited_skill_yaml_schemas_are_parseable`가 actual `xhigh`와 expected `extra high`를 비교한다. Dispatch 지시에 따라 이 test, `AGENTS.md`, agent profile을 변경하지 않았다.
|
||||
|
||||
Stop hook은 Harness Step 실행을 금지한 이번 correction session에서 별도 Codex Step 종료 evidence를 생성하지 않았다. Hook entry point의 수동 실행은 project contract가 금지하므로 대신 config-resolved full MSVC build와 full CTest를 직접 실행해 결과를 위에 기록했다.
|
||||
|
||||
## 6. Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-083` | Step 0 `cli-output-lease-and-derived-names` | `CORR-HARNESS-SMOKE-001` | runner-equivalent `codex exec` invoking `cmd.exe /d /c echo CODEX_SHELL_SMOKE_OK` | 없음 | workspace-write, hooks, `gpt-5.6-terra`/`xhigh`, no-push, no `danger-full-access`를 유지한 실제 shell completion과 exact echo output; 실패 |
|
||||
| `FESA-REQ-NSNR-083` | Step 0 `cli-output-lease-and-derived-names` | `CORR-HARNESS-SMOKE-002` | same smoke with `--disable code_mode_host` | 없음 | shell completion 복구; 실패 (`code-mode host is disabled`) |
|
||||
|
||||
Runner correction acceptance criterion이 충족되지 않았으므로 Implementation Step 0의 `NSNR-CLI-*` RED/GREEN은 시작되지 않았고 Step 0 status는 `pending`으로 유지된다.
|
||||
|
||||
## 7. Handoff Recommendation
|
||||
|
||||
- recommendation: Coordinator Agent를 통해 Implementation Agent에 `needs-implementation-rerun` 요청.
|
||||
- corrected runner contract: nested command는 `codex exec --disable unified_exec --json ...` 순서로 실행된다.
|
||||
- preserved execution contract: Coordinator가 관리하는 rerun launch environment는 Codex `0.149.1`, aligned `CODEX_HOME`, approved WindowsApps PATH filtering, `workspace-write`, project hooks, `gpt-5.6-terra`, `xhigh`, no-push, no `danger-full-access`를 유지해야 한다.
|
||||
- scope boundary: 이 correction은 runner option gate만 복구했다. Harness phase, Implementation Step 0, reference comparison 또는 physics success를 주장하지 않는다.
|
||||
|
||||
## 8. Stop Condition
|
||||
|
||||
- repeated failure: normalized classification attempt `2`는 초기 Codex `0.147.0` failure history로 보존한다.
|
||||
- external mitigation: user/root의 Codex `0.149.1` bounded smoke와 `DECISION-038`이 새 좁은 runner correction을 승인했다.
|
||||
- correction result: required adjacent `--disable unified_exec` pair와 regression test가 GREEN이다.
|
||||
- residual blocker: runner correction 자체 blocker는 없음. Full Python suite의 pre-existing `xhigh` actual 대 `extra high` expected mismatch는 변경하지 않았다.
|
||||
- upstream ambiguity/reference artifact gap: 없음; reference artifact는 읽기/수정/생성하지 않았다.
|
||||
- final stop: correction-owned edits와 검증이 끝났으므로 여기서 중단하고, phase rerun 판단과 실행은 Coordinator/Implementation Agent에 반환한다.
|
||||
|
||||
## 9. REWORK-004 TDD And Verification Evidence
|
||||
|
||||
### Failure and Minimal Correction
|
||||
|
||||
- classification: `harness`
|
||||
- implementation defect: Codex `0.149.1`에서 통과한 runtime envelope의 `--disable unified_exec` option을 `scripts/execute.py`가 nested `codex exec`에 전달하지 않았다.
|
||||
- RED test: `test_invoke_codex_uses_implementation_agent_command_contract`
|
||||
- minimal GREEN: command vector에서 `"codex", "exec"` 바로 뒤에 `"--disable", "unified_exec"` 두 argument만 추가했다.
|
||||
- preserved behavior: `workspace-write` default/validated override, `--dangerously-bypass-hook-trust`, `gpt-5.6-terra`, `model_reasoning_effort="xhigh"`, 1800-second structured timeout, no-push default, `danger-full-access` 비사용 정책은 변경하지 않았다.
|
||||
|
||||
### RED / GREEN / VERIFY
|
||||
|
||||
| stage | command | exit | duration | evidence tail |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| RED | `uv run --with pytest python -m pytest -v -rs tests/test_execute.py::test_invoke_codex_uses_implementation_agent_command_contract` | `1` | 1.2초 | `assert ('--disable', 'unified_exec') in adjacent_arguments`; 1 failed |
|
||||
| GREEN | same targeted command | `0` | 1.1초 | 1 passed |
|
||||
| focused VERIFY | `uv run --with pytest python -m pytest -v -rs tests/test_execute.py` | `0` | 1.1초 | 10 passed |
|
||||
| full Harness Python | `uv run --with pytest python -m pytest -v -rs` | `1` | 1.3초 | 23 passed, 1 pre-existing failure |
|
||||
| MSVC Debug build | `cmake --build .harness/build --config Debug` | `0` | 3.8초 | solver/CLI/unit/integration/reference targets built |
|
||||
| CTest discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | `0` | 0.7초 | 214 tests discovered |
|
||||
| full CTest | `ctest --test-dir .harness/build -C Debug --output-on-failure` | `0` | 10.2초 | 214/214 passed |
|
||||
|
||||
Full Python failure는 기존 `test_agent_toml_and_limited_skill_yaml_schemas_are_parseable`의 `assert 'xhigh' == 'extra high'` 한 건이다. REWORK-004의 command-contract test를 포함한 `tests/test_execute.py`는 10/10 통과하며, dispatch 경계에 따라 pre-existing mismatch를 수정하지 않았다.
|
||||
|
||||
### REWORK-004 Traceability
|
||||
|
||||
| requirement id | task id | test id | corrected files | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-083` | Harness runner correction `REWORK-004`; blocks Step 0 `cli-output-lease-and-derived-names` | `test_invoke_codex_uses_implementation_agent_command_contract` | `scripts/execute.py`; `tests/test_execute.py` | nested Codex argv가 adjacent `--disable`, `unified_exec`를 포함하면서 Terra/xhigh routing을 보존함; passed |
|
||||
|
||||
## 10. FileTracker Workspace-Write Diagnosis
|
||||
|
||||
### 10.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step1-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step1.md` |
|
||||
| status | `blocked` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
### 10.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-msbuild-filetracker-eaccessdenied-workspace-write`
|
||||
- attempt: `1`
|
||||
- first failed stage command:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug
|
||||
```
|
||||
|
||||
- failed target or test: Visual Studio 18 generator의 `fesa_solver.vcxproj`와 GoogleTest `gtest.vcxproj` CL task
|
||||
- evidence tail: MSBuild `18.8.2`가 `Microsoft.CppCommon.targets(790,5)`에서 `MSB4018`을 냈다. Inner exception은 `System.UnauthorizedAccessException`, HRESULT `0x80070005 (E_ACCESSDENIED)`이며 stack은 `NativeMethods.GetLongFilePath` -> `FileTracker..cctor()` -> `FileTracker.FileIsExcludedFromDependencies` -> `CanonicalTrackedInputFiles.ConstructDependencyTable` -> `CL.ComputeOutOfDateSources`다.
|
||||
- command-result caveat: `step1-output.json`의 item 25는 build와 CTest를 세미콜론으로 연결해 aggregate exit `0`을 기록했지만, 그 내부 `cmake --build`는 exit `1`로 실패했다. 뒤따른 stale-build CTest 성공은 Visual Studio build 성공 evidence가 아니다.
|
||||
- configure boundary: 보존된 `.harness/build/CMakeCache.txt`는 `CMAKE_GENERATOR=Visual Studio 18 2026`, platform `x64`다. CMake generation 자체가 아니라 생성된 MSBuild project의 CL dependency-tracking 단계가 실패했다.
|
||||
|
||||
### 10.3 Root Cause Summary
|
||||
|
||||
FESA source, Step 1 test 또는 CMake registration이 원인이 아니다. 서로 독립적인 FESA와 GoogleTest project가 동일한 `FileTracker` static initializer에서 실패하므로 project-local input보다 sandbox/environment boundary다.
|
||||
|
||||
Microsoft의 `FileTracker.cs`는 static initialization에서 `Path.GetTempPath()`를 구한 뒤 그 경로에 `GetShortFilePath`와 `GetLongFilePath`를 적용한다. 관찰 stack의 첫 failing native call과 정확히 일치한다. 현재 inherited `TEMP`/`TMP`는 `C:\Users\baram\AppData\Local\Temp`이고 runner는 이를 재지정하지 않는다. 따라서 Codex Windows `workspace-write` restricted token이 workspace 밖 user Temp의 long-path normalization을 거부한 것이 가장 좁은 root-cause inference다.
|
||||
|
||||
- boundary confidence: `high` — 두 project에서 같은 FileTracker initializer/`E_ACCESSDENIED`가 재현됨.
|
||||
- exact denied-path confidence: `medium-high` — Microsoft source의 static field order와 inherited Temp가 일치하지만 failing API가 path argument를 log하지는 않음.
|
||||
- implementation classification: environment-owned sandbox/MSBuild interaction; implementation defect, test defect, CMake registration issue가 아님.
|
||||
|
||||
검토한 primary vendor evidence:
|
||||
|
||||
- Microsoft MSBuild source: `https://github.com/dotnet/msbuild/blob/main/src/Utilities/TrackedDependencies/FileTracker.cs`
|
||||
- Microsoft CL task documentation: `https://learn.microsoft.com/en-us/visualstudio/msbuild/cl-task?view=visualstudio`
|
||||
- installed Visual Studio target: `C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v180\Microsoft.CppCommon.targets` lines 48-49 and 764-771
|
||||
- OpenAI Codex sandbox CLI source: `https://github.com/openai/codex/blob/main/codex-rs/cli/src/lib.rs`; built-in writable profile name은 `:workspace`
|
||||
|
||||
### 10.4 Correction Scope
|
||||
|
||||
- changed report files: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed source/header/test/CMake/runner files: 없음
|
||||
- preserved dirty Step 1 files: `include/fesa/model/domain.h`, `include/fesa/model/model_types.h`, `src/fesa/io/abaqus/domain_mapping_context.cpp`, `src/fesa/model/domain.cpp`와 관련 unit tests
|
||||
- preserved workflow files: `docs/nonlinear-static-newton-raphson/coordination.md`, `phases/index.json`, `phases/nonlinear-static-newton-raphson/index.json`
|
||||
- excluded files: C++/CMake, phase definition/index, coordination, runner, upstream contracts, reference/tolerance artifacts
|
||||
- prohibited actions not performed: Harness phase rerun, Step 2, build cleanup/deletion, Abaqus/Nastran/reference solver, `danger-full-access`, commit, push
|
||||
|
||||
### 10.5 Workaround Evaluation And Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| preserved failure | `cmake --build .harness/build --config Debug` in `step1-output.json` | internal build exit `1`; `FileTracker..cctor()` `E_ACCESSDENIED` in both FESA and gtest |
|
||||
| supported property inspection | installed `Microsoft.CppCommon.targets`; Microsoft CL task docs | `TrackFileAccess` defaults to `true` and is passed to CL; property is vendor-defined for incremental file-access tracking |
|
||||
| narrow property smoke | nested `codex exec --sandbox workspace-write ...` requesting exactly `cmake --build .harness/build --config Debug -- /p:TrackFileAccess=false` | 60-second diagnostic timeout before a command completion event; no pass/fail conclusion; exact root PID `13720` and descendants cleaned, then absent |
|
||||
| direct sandbox launcher check | `codex sandbox -P :workspace -C C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson cmd.exe /d /c echo SANDBOX_OK` | 10-second timeout; no `SANDBOX_OK`; exact root PID `16708` tree cleaned, then absent |
|
||||
| workspace-write alternative evidence | Visual Studio-bundled Ninja/MSVC build in `step1-output.json` | focused CTest 27/27 and full CTest 228/228 passed |
|
||||
|
||||
`/p:TrackFileAccess=false`는 vendor-defined 후보지만 동일 `workspace-write`에서 build completion이 관찰되지 않아 safe workaround로 채택할 수 없다. `TEMP`/`TMP`를 worktree로 재지정하는 후보도 FileTracker가 system-wide Temp를 dependency exclusion 기준으로 사용한다는 Microsoft source comment 때문에 tracking semantics 보존을 입증하지 않고 자동 적용하지 않았다.
|
||||
|
||||
Ninja/MSVC는 같은 sandbox에서 implementation/test 건전성을 입증하지만 Step 1 VERIFY가 명시한 `Visual Studio 18 2026` generator acceptance criterion을 대체하지 않는다. 따라서 correction-agent가 phase/upstream contract 변경 없이 자동 채택할 수 없다. `danger-full-access`는 지시대로 실행하거나 시험하지 않았다.
|
||||
|
||||
### 10.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-083` | Step 1 `nonlinear-static-domain-contract`; FileTracker correction attempt 1 | `CORR-HARNESS-FILETRACKER-001` | `cmake --build .harness/build --config Debug` | report only | approved `workspace-write`에서 Visual Studio 18/MSBuild build completion; not met |
|
||||
| `FESA-REQ-NSNR-083` | same | `CORR-HARNESS-FILETRACKER-002` | same build with `/p:TrackFileAccess=false` | 없음 | vendor-defined property가 FileTracker denial을 제거하고 build를 완료함; completion evidence 없음 |
|
||||
|
||||
### 10.7 Handoff Recommendation
|
||||
|
||||
- recommendation: `needs-user-decision`; Coordinator Agent에 `blocked` 반환.
|
||||
- safe automatic correction: 없음. Runner/CMake/Step 1 source를 변경하지 않는다.
|
||||
- decision option 1: approved implementation plan/phase owner가 Ninja+MSVC를 Visual Studio generator 대체 evidence로 명시적으로 승인한다. 이는 correction-agent 범위 밖의 upstream acceptance 변경이다.
|
||||
- decision option 2: 사용자가 `docs/HARNESS.md`의 isolated clean-worktree `danger-full-access` fallback을 명시적으로 승인한다. 이번 진단에서는 broader privilege를 사용하거나 시험하지 않았다.
|
||||
- decision option 3: Codex/Windows sandbox 환경 소유자가 direct `:workspace` launcher와 user Temp long-path access 문제를 수정한 뒤 동일 Visual Studio build를 재검증한다.
|
||||
|
||||
### 10.8 Stop Condition
|
||||
|
||||
- repeated failure: normalized classification attempt `1`; 같은 classification의 두 번째 자동 rework는 아직 수행하지 않았다.
|
||||
- environment blocker: direct `:workspace` no-op도 bounded completion을 내지 않아 workspace-only workaround를 신뢰성 있게 검증할 수 없다.
|
||||
- upstream ambiguity: Ninja acceptance 또는 broader sandbox 권한은 사용자/Coordinator 결정이 필요하다.
|
||||
- reference artifact gap: 없음; reference artifact는 읽기/수정/생성하지 않았다.
|
||||
- final stop: safe, vendor-supported, contract-preserving `workspace-write` workaround가 입증되지 않아 code change 없이 `blocked`로 중단한다.
|
||||
|
||||
## 11. REWORK-006 Ninja/MSVC Validation Contract Correction
|
||||
|
||||
### 11.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step1-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` USER-DECISION-002 option A / REWORK-006 |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step0.md`..`step12.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
### 11.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-msbuild-filetracker-eaccessdenied-workspace-write`
|
||||
- attempt: `2`, resolved by USER-DECISION-002 option A의 approved validation-contract change
|
||||
- first failed command: `cmake --build .harness/build --config Debug`
|
||||
- failed target: Visual Studio generator/MSBuild `FileTracker..cctor()`; Section 10의 `E_ACCESSDENIED`
|
||||
- replacement acceptance: `workspace-write` 안에서 VsDevCmd x64를 상속한 Ninja/MSVC Debug configure/build, CTest discovery, full CTest가 모두 통과해야 한다.
|
||||
|
||||
### 11.3 Root Cause Summary
|
||||
|
||||
FESA C++/test/CMake target defect가 아니라 Visual Studio generator의 MSBuild FileTracker와 `workspace-write` sandbox 사이 environment failure였다. User가 option A를 승인했으므로 tracked root `CMakePresets.json`과 existing Harness preset adapter를 사용해 동일 MSVC x64 Debug compiler를 Ninja로 구동한다. Harness Python은 이미 complete preset triplet과 parent environment copy를 지원하므로 production Python 변경은 필요하지 않았다.
|
||||
|
||||
### 11.4 Correction Scope
|
||||
|
||||
- validation plumbing: `CMakePresets.json`, `.harness/config.example.json`, `.gitignore`, ignored local `.harness/config.json`, `tests/test_harness_preset_contract.py`
|
||||
- approved validation commands: `docs/nonlinear-static-newton-raphson/implementation-plan.md`, `phases/nonlinear-static-newton-raphson/step0.md`..`step12.md`
|
||||
- report/status: `docs/nonlinear-static-newton-raphson/corrections.md`, `phases/nonlinear-static-newton-raphson/index.json`; top `phases/index.json`은 blocked payload 제거 후 HEAD와 같은 `pending` 의미로 복원됨
|
||||
- generated/ignored build output: `.harness/build-ninja-msvc-debug/`; 삭제하거나 cleanup하지 않았다.
|
||||
- production Harness Python, runner, C++, CMakeLists, upstream physics/I/O/reference/tolerance contract: 변경 없음
|
||||
- preserved others' dirty files: Step 1 C++/unit tests와 Coordinator-owned `coordination.md`를 되돌리거나 덮어쓰지 않았다.
|
||||
|
||||
### 11.5 RED -> GREEN Evidence
|
||||
|
||||
| stage | command | result |
|
||||
| --- | --- | --- |
|
||||
| RED-1 | `uv run --with pytest python -m pytest -v -rs tests/test_harness_preset_contract.py` | exit `1`; `CMakePresets.json` `FileNotFoundError` |
|
||||
| GREEN-1 | same focused command after preset/example/local config | exit `0`; 1 passed |
|
||||
| RED-2 | `uv run --with pytest python -m pytest -q tests/test_harness_preset_contract.py` after adding generated-build ignore assertion | exit `1`; `.harness/build-ninja-msvc-debug/` rule absent |
|
||||
| GREEN-2 | focused verbose command after `.gitignore` update | exit `0`; 1 passed; `git check-ignore` confirms config and build output |
|
||||
|
||||
Contract details:
|
||||
|
||||
- preset: `windows-msvc-ninja-debug`
|
||||
- generator/configuration: `Ninja`, `CMAKE_BUILD_TYPE=Debug`
|
||||
- binary directory: `.harness/build-ninja-msvc-debug`
|
||||
- cache variables: `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, `HDF5_DIR` use `$env{...}` and therefore fail closed when the parent launch envelope is incomplete.
|
||||
- `.harness/config.json` is ignored and byte-identical to `.harness/config.example.json`; both SHA-256 `D07429860D472AE37D02D6CD638900FA46175085AF47F179E98601227F8D3C43` at verification.
|
||||
|
||||
### 11.6 Verification Evidence
|
||||
|
||||
Exact nested launch envelope:
|
||||
|
||||
```powershell
|
||||
VsDevCmd.bat -arch=x64 -host_arch=x64
|
||||
$env:FESA_GTEST_SOURCE_DIR='C:/git/googletest'
|
||||
$env:MKL_DIR='C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl'
|
||||
$env:TBB_DIR='C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb'
|
||||
$env:HDF5_DIR='C:/Program Files/HDF_Group/HDF5/2.1.1/cmake'
|
||||
codex exec --ephemeral --json --sandbox workspace-write --disable unified_exec --dangerously-bypass-hook-trust -m gpt-5.6-terra -c 'model_reasoning_effort="xhigh"' -C C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson <bounded-validation-prompt>
|
||||
```
|
||||
|
||||
`CODEX_HOME=C:\Users\baram\.codex`를 상속하고 approved WindowsApps PATH entries를 child launch에서만 제거했다. `danger-full-access`와 sandbox bypass option은 사용하지 않았고 project hooks는 유지했다.
|
||||
|
||||
| verify item | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| environment preflight | nested shell prints architecture, four variables, `cl.exe`, `ninja.exe` | exit `0`; target/host `x64`; `cl.exe` Hostx64/x64; VS-bundled Ninja; all dependency paths exist |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | exit `0` |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | exit `0` |
|
||||
| discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | exit `0`; 228 tests |
|
||||
| full CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | exit `0`; 228/228 passed; 10.69초 |
|
||||
| generated metadata | `.harness/build-ninja-msvc-debug/CMakeCache.txt`와 `CMakeCXXCompiler.cmake` | `Ninja`; `Debug`; compiler ID `MSVC`; Hostx64/x64 `cl.exe` |
|
||||
| Stop | hooks-retained nested `codex exec` completion | overall exit `0`; no Stop blocking response; automatic Stop uses ignored config's same preset plan |
|
||||
| full Harness Python | `uv run --with pytest python -m pytest -v -rs` | 24 passed, 1 pre-existing out-of-scope failure: actual `xhigh` vs expected `extra high` |
|
||||
|
||||
첫 cold workspace run은 full CTest에서 temporary `fesa_reference_tests_NOT_BUILT`로 207/208만 통과해 blocker-clear로 사용하지 않았고 phase도 reset하지 않았다. Automatic hooks가 missing target build를 완료한 뒤 두 번째 independent nested `workspace-write` run에서 위 228/228 evidence를 확보한 다음에만 phase를 reset했다.
|
||||
|
||||
Reference artifact no-change evidence: `git diff --name-only -- reference`는 empty였다. `shellNL.inp`, shellNL displacement/reaction/stress CSV와 shell input/displacement/reaction/stress CSV의 SHA-256은 implementation-plan inventory와 모두 일치한다. Reference solver와 feature Harness phase는 실행하지 않았다.
|
||||
|
||||
### 11.7 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-083` | `REWORK-006`; Steps 0..12 validation contract | `CORR-HARNESS-PRESET-001` | Visual Studio/MSBuild build | `CMakePresets.json`; `.harness/config.example.json`; `.gitignore`; `tests/test_harness_preset_contract.py` | tracked Ninja/MSVC preset and Harness plan select MSVC/x64/Debug under `workspace-write` |
|
||||
| `FESA-REQ-NSNR-083` | same | `CORR-HARNESS-PRESET-VERIFY-001` | preset configure/build/discovery/full CTest | implementation plan and `step0.md`..`step12.md` | nested env preflight plus 228/228 CTest pass |
|
||||
|
||||
### 11.8 Handoff Recommendation And Stop Condition
|
||||
|
||||
- recommendation: Coordinator를 통해 Implementation Agent에 Step 1 no-push rerun을 요청한다; Step 2로 advance하지 않는다.
|
||||
- phase state after evidence: top phase `pending`; Step 1 `pending`, historical `started_at` 보존; `blocked_reason`과 `blocked_at`만 제거; Steps 2..12 remain `pending`.
|
||||
- status: `corrected-for-implementation-rerun`.
|
||||
- blockers: 이 correction 범위에는 없음. Existing Python `xhigh`/`extra high` mismatch는 명시된 out-of-scope pre-existing failure다.
|
||||
- prohibited actions not performed: Harness phase rerun, Step 2, `danger-full-access`, push, commit, reference solver/artifact mutation, build cleanup/deletion.
|
||||
|
||||
## 12. REWORK-007 Step 11 Nonlinear Nonconvergence Contract Triage
|
||||
|
||||
### 12.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` REWORK-007 |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `needs-upstream-decision` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
### 12.2 Failure Triage
|
||||
|
||||
- classification: `upstream-contract`
|
||||
- normalized classification: `implementation-shellnl-nonlinear-nonconvergence-no-hdf5`
|
||||
- attempt: `1`
|
||||
- first failed command:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R "NonlinearStaticReference|ReferenceTolerance|Mitc4Reference" --output-on-failure
|
||||
```
|
||||
|
||||
- failed target or test: `NonlinearStaticReference.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory` (CTest test 288)
|
||||
- evidence tail: copied build-local `shellNL.inp` reaches `severity=error`, `code=nonlinear-nonconvergence` after iteration 100. `generated.HasValue()` is false because no authoritative copied-sibling `shellNL_results.h5` is committed.
|
||||
- correction-agent reproduction: the exact focused test alone failed deterministically in 103.84 seconds with the same diagnostic. The original reference input was not passed to FESA.
|
||||
|
||||
### 12.3 Root Cause Summary
|
||||
|
||||
This is not an implementation defect in the observed convergence calculation. The implementation in `src/fesa/analysis/nonlinear_static_procedure.cpp` supplies same-trial free rotational residual, internal moment and external moment to `EvaluateNewtonConvergence`. `src/fesa/analysis/nonlinear_static_control.cpp` then implements the approved `NSNR-069` and formulation Section 14.1 literally:
|
||||
|
||||
\[
|
||||
D_M=\max(\|f_{int,f}^{\phi}\|_\infty,
|
||||
\|f_{ext,f}^{\phi}\|_\infty),\qquad
|
||||
\eta_M=\frac{\|r_f^{\phi}\|_\infty}{D_M}
|
||||
\]
|
||||
|
||||
for every nonzero \(D_M\), with the typed absolute `1e-3 force-length` branch available only when \(D_M=0\) exactly.
|
||||
|
||||
The approved `reference/shellNL/shellNL.inp` contains only `Set-1, 3, -100000.` under `*CLOAD`; it applies no rotational moment component. Therefore the free rotational external vector is exactly zero and
|
||||
|
||||
\[
|
||||
r_f^{\phi}=f_{int,f}^{\phi}-0=f_{int,f}^{\phi},
|
||||
\qquad
|
||||
D_M=\|f_{int,f}^{\phi}\|_\infty=\|r_f^{\phi}\|_\infty.
|
||||
\]
|
||||
|
||||
For every nonzero rotational residual, \(\eta_M=1>10^{-2}\). The channel can pass only if floating-point assembly produces the exact zero vector, at which point and only then the exact-zero branch is selected. Thus the current approved denominator structurally prevents practical convergence for a no-applied-moment shell case even when its residual is well below the approved typed absolute threshold.
|
||||
|
||||
The reproduced log contains 100/100 parsed iteration records with exact printed equality between `residual_moment_numerator_norm` and `residual_moment_denominator_scale`; all 100 use `branch=relative` and `pass=0`. Representative values are:
|
||||
|
||||
| iteration | numerator | denominator | branch | pass |
|
||||
| ---: | ---: | ---: | --- | ---: |
|
||||
| 1 | `2.363968570753043e-09` | `2.363968570753043e-09` | `relative` | 0 |
|
||||
| 2 | `1.4372536725204554e-06` | `1.4372536725204554e-06` | `relative` | 0 |
|
||||
| 3 | `3.138301877925187e-06` | `3.138301877925187e-06` | `relative` | 0 |
|
||||
| 99 | `3.8876064110127118e-06` | `3.8876064110127118e-06` | `relative` | 0 |
|
||||
| 100 | `4.6441010823627948e-06` | `4.6441010823627948e-06` | `relative` | 0 |
|
||||
|
||||
Every listed numerator is below `1e-3 force-length`, but the approved exact-zero-denominator predicate forbids use of that absolute branch. Changing the implementation alone would contradict the approved requirement and formulation.
|
||||
|
||||
### 12.4 Correction Scope
|
||||
|
||||
- changed report file: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed production source/header/test/CMake files: none
|
||||
- preserved dirty Step 11 files: `tests/CMakeLists.txt`, `tests/reference/nonlinear_static_reference_cases_test.cpp`, `tests/reference/nonlinear_static_reference_comparison.cpp`, `tests/reference/nonlinear_static_reference_comparison.h`
|
||||
- excluded upstream files: `requirements.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `docs/TOLERANCE.md`
|
||||
- excluded workflow/final reports: phase indexes/status, `implementation-report.md`, `build-test.md`, `reference-comparison.md`
|
||||
- prohibited actions not performed: production/test/CMake change, threshold or denominator relaxation, Step 11 completion, Step 12 advancement, Abaqus/Nastran/reference solver, reference artifact generation/modification, `danger-full-access`, commit, push
|
||||
|
||||
No RED test was added because no implementation correction is authorized: a test requiring this case to pass would encode a new convergence contract before user/upstream approval. The existing focused reference test already provides the failing integration evidence.
|
||||
|
||||
### 12.5 Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| focused reproduction | `ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure` | exit `1`; 0/1 passed; test 288 failed in 103.84 s with 100-iteration `nonlinear-nonconvergence` |
|
||||
| iteration-log audit | parse latest copied-run `shellNL_log.txt` fields for every iteration | 100 records; numerator equals denominator in 100/100; `relative` in 100/100; `residual_moment_pass=0` in 100/100 |
|
||||
| implementation trace | `nonlinear_static_procedure.cpp` residual/internal/external channel construction plus `nonlinear_static_control.cpp` denominator evaluation | matches `NSNR-069` and formulation Section 14.1 exactly |
|
||||
| input trace | `reference/shellNL/shellNL.inp` lines 149-151 | one translational direction-3 force; no applied rotational moment |
|
||||
| reference preservation | pre/post SHA-256 plus `git diff -- reference` | all eight declared hashes unchanged; reference diff empty |
|
||||
| full Ninja/MSVC build/CTest | not run | intentionally stopped at decisive `upstream-contract`; no implementation correction exists to verify |
|
||||
| Stop | not applicable | Correction was not a Harness Step and made no production/test/CMake change |
|
||||
| Harness Python pytest | not applicable | no Harness/Hook/agent-config behavior changed |
|
||||
|
||||
### 12.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-069` | Step 5 `load-boundary-path-and-convergence-gates`; REWORK-007 | `CORR-NSNR-CONTRACT-001` log audit | focused test 288 | report only | no-applied-moment free rotational residual must have a reachable approved convergence decision; not met by current contract |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 `reference-comparison-gate` | `NSNR-REF-002`, `NSNR-REF-004` via test 288 | focused test 288 | report only | copied shellNL run produces authoritative HDF5 before comparison; blocked by NSNR-069 contract |
|
||||
|
||||
### 12.7 Handoff Recommendation
|
||||
|
||||
- recommendation: return `upstream-contract` / `needs-user-decision` to Coordinator Agent. Do not request an Implementation Agent rerun yet.
|
||||
- narrowest contract alternative: when the matching external residual-channel scale is exactly zero, select the existing typed absolute gate (`||r_f^phi||inf <= 1e-3 force-length`) even if the internal residual is nonzero; retain the current relative denominator when matching external scale is nonzero.
|
||||
- broader contract alternative: make residual convergence pass when either its typed absolute gate or its current relative gate passes. This is simpler and symmetric across force/moment channels but changes acceptance for all load-scale regimes.
|
||||
- scale-based contract alternative: define an explicit nonzero model force-length reference scale for moment residual normalization, including its deterministic characteristic-length source. This is more general but expands the numerical contract and needs formulation/numerical review.
|
||||
- non-solution: changing the reference deck to add an applied moment would not correct the same structural failure for supported no-moment load cases and would also violate immutable reference ownership in this correction.
|
||||
|
||||
Any selected alternative requires the owning upstream documents and tests to be revised and approved before production code changes. Correction Agent does not choose among them.
|
||||
|
||||
### 12.8 Stop Condition
|
||||
|
||||
- upstream ambiguity: the exact approved `max(internal, external)` denominator and exact-zero branch are the demonstrated cause.
|
||||
- implementation stop: any code-only pass would relax/reinterpret `NSNR-069` and formulation Section 14.1.
|
||||
- reference artifact gap: none; all declared reference artifacts exist and remain unchanged.
|
||||
- repeated failure: normalized classification attempt `1`; no automatic second implementation correction is safe before an upstream decision.
|
||||
- final stop: status `needs-upstream-decision`; Step 11 remains blocked and Step 12 remains pending.
|
||||
|
||||
## 13. REWORK-008 Nonlinear Reaction Reference Mismatch Triage
|
||||
|
||||
### 13.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` dispatch `REWORK-008-nonlinear-reaction-reference-mismatch` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `needs-upstream-decision` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-25` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 존재하지 않는다. 따라서 immutable `step11-output.json` SHA-256 `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91`, Coordinator dispatch, current implementation/CTest와 read-only result/reference audit를 source evidence로 사용했다.
|
||||
|
||||
### 13.2 Failure Triage
|
||||
|
||||
- initial failure classification: `reference-comparison`
|
||||
- final classification: `upstream-contract`
|
||||
- normalized classification: `reference-blocking-model-adequacy-conflict`
|
||||
- attempt: `1` for `REWORK-008`; 이전 `REWORK-007`은 별도 nonlinear convergence classification이다.
|
||||
- first failed command in Step 11:
|
||||
|
||||
```powershell
|
||||
cmake --build --preset windows-msvc-ninja-debug; ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure
|
||||
```
|
||||
|
||||
- correction-agent reproduction:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure
|
||||
```
|
||||
|
||||
- failed target or test: `NonlinearStaticReference.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory` (fresh CTest test 293)
|
||||
- evidence tail: exit `8`, 0/1 passed, 16.88 s. Row identity/schema/nonfinite prechecks passed before the common tolerance gate reported exactly three failed blocking families: in-plane RF RMS `0.11437709952897851`, transverse RF RMS `0.048448360241294064`, physical spatial RM RMS `0.02746412616679237`, each above `0.01`.
|
||||
|
||||
### 13.3 Root Cause Summary
|
||||
|
||||
Observed reaction computation/storage/mapping path에는 implementation defect evidence가 없다.
|
||||
|
||||
1. `nonlinear_static_procedure.cpp`는 같은 accepted state에서 `residual = internal.force - external.generalized_external_force`를 만들고 `trial.reaction = trial.residual`로 저장한다. `nonlinear_analysis_state.cpp`는 모든 DOF에서 이 두 identity를 검증한다.
|
||||
2. `nonlinear_hdf5_results_writer.cpp`는 translation reaction을 그대로 쓰고 rotational reaction만 승인식 `J_l(phi)^(-T)`로 physical spatial moment에 변환한다. 24 constrained nodes에서 `phi=0`이므로 이 변환은 identity다. Full-precision HDF5 audit에서 constrained translation과 generalized residual의 차이, constrained moment 변환 차이, constrained `phi`가 모두 exact `0`이었다.
|
||||
3. Comparator는 `/model/nodal_constraint_mask`와 `(case, state, instance, node label, component)` exact key를 사용한다. 이번 실행이 schema/missing/extra/duplicate/nonfinite failure가 아니라 family tolerance report까지 도달했으므로 storage와 row mapping precheck도 통과했다.
|
||||
4. Dominant RF3/RM1/RM2 mismatch는 nonlinear 전용 경로에서 생기지 않는다. FESA nonlinear-linear 최대 차이는 RF3 `2.9441580409184098e-06`, RM1 `1.3046948879491538e-05`, RM2 `1.2039316061418504e-05`이고, Abaqus nonlinear-linear 차이는 각각 `0`, `5.0022208599999994e-12`, `1.1141310098e-11`이다. 그럼에도 FESA linear와 Abaqus linear 사이에는 nonlinear과 동일한 local RF3/RM mismatch가 이미 존재한다. 예를 들어 node 31 RF3는 FESA `1059.5675655371299`, reference `339.61334199999999`; node 22 RM1은 FESA `-1564.1175318019484`, reference `-515.62542699999995`다.
|
||||
5. 전체 constrained reaction 합은 FESA nonlinear `[7.9591888635377472e-12, 7.2906680692597092e-12, 100000.00000082512]`, Abaqus nonlinear `[4.5008441418303846e-13, -1.7997131562808022e-12, 99999.999592799955]`로 global balance와 sign이 일치한다. Stored `/global/equilibrium`도 `[-5.2007287365540833e-12, 2.1302730413008675e-11, 99999.999999999985, 1.5669833723712425e-11, 6.4043503405991029e-12, -3.0183203934097235e-11]`다.
|
||||
6. RF1/RF2는 nonlinear에서 새로 생기는 weak geometric membrane reaction이지만 FESA extrema `±1.3774894254907935`와 Abaqus extrema `±1.9166318200000001`의 차이는 storage/mapping 오류가 아니다. Linear Abaqus reaction은 거의 zero이고, independent FESA MITC4와 Abaqus S4가 서로 다른 local nodal support-force redistribution을 만들 수 있다는 approved formulation/model limitation 안에 있다.
|
||||
|
||||
따라서 demonstrated cause는 nonlinear reaction implementation이 아니라 reference blocking quantity의 model-adequacy 전제다. Approved `reference-model.md`는 linear reaction CSV를 review-only로 두면서, 같은 local RF3/RM distribution을 nonlinear에서 blocking으로 승격한다. Project contract는 FESA MITC4의 integration/stabilization/internal behavior가 Abaqus S4와 동등하다고 주장하지 않는다. Global equilibrium은 맞지만 formulation-sensitive local nodal reaction 분포가 1% RMS를 만족해야 한다는 분석적 또는 독립 benchmark 근거는 없다. 이를 code-only로 Abaqus 값에 맞추는 것은 formulation/model adequacy 또는 reference acceptance contract 변경이며 Correction Agent 범위를 벗어난다.
|
||||
|
||||
### 13.4 Correction Scope
|
||||
|
||||
- changed report file in this rework: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed production source/header/test/CMake files in this rework: none
|
||||
- preserved pre-existing dirty Step 11 files, including selector/control/log tests, comparator/reference tests, plan/phase/coordination and upstream approval edits
|
||||
- excluded upstream contract files: `requirements.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `docs/TOLERANCE.md`
|
||||
- excluded immutable/reference files: `reference/**`, stored Abaqus CSV, HDF5 schema and tolerance policy
|
||||
- prohibited actions not performed: new RED test without an implementation defect, production/comparator/test/CMake change, tolerance weakening, reference artifact generation/modification, Abaqus/Nastran/reference solver, Harness phase execution, Step 12/Physics/Release advancement, `danger-full-access`, commit, push
|
||||
|
||||
No focused RED test was added because the dataflow audit disproved a bounded nonlinear computation/storage/mapping defect. The existing focused integration test is already RED for an upstream blocking/model-adequacy assumption; encoding a replacement expected result before upstream approval would itself change that contract.
|
||||
|
||||
### 13.5 Verification Evidence
|
||||
|
||||
Visual Studio environment는 `VsDevCmd.bat -arch=x64 -host_arch=x64`로 설정했고, `.harness/config.json`/preset가 요구한 `FESA_GTEST_SOURCE_DIR=C:/git/googletest`, `MKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl`, `TBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb`, `HDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake`를 사용했다.
|
||||
|
||||
| purpose | exact command/evidence | exit/result |
|
||||
| --- | --- | --- |
|
||||
| focused reproduction | `ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure` | exit `8`; 0/1 passed; only three reaction-family RMS gates failed |
|
||||
| reaction dataflow audit | `nonlinear_static_procedure.cpp` residual/reaction assignment, `nonlinear_analysis_state.cpp` identities, `nonlinear_hdf5_results_writer.cpp` physical-moment projection and comparator exact-key prechecks; build-local datasets dumped with `$hdf5Bin='C:\Program Files\HDF_Group\HDF5\2.1.1\bin'; $env:PATH="$hdf5Bin;$env:PATH"; & "$hdf5Bin\h5dump.exe" -m %.17g -d <dataset> <results.h5>` | exit `0`; constrained pipeline differences and constrained rotation were exact zero |
|
||||
| nonlinear/linear audit | join build-local FESA HDF5 and immutable CSV rows by exact `(instance, node label, component)` in read-only PowerShell | exit `0`; dominant mismatch is already present in both solvers' linear results and survives nonlinear unchanged |
|
||||
| targeted nonlinear output | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-441332835013800-0/shellNL_results.h5` | SHA-256 `A82349F1AABDC2B042A7DBF643D0D917B04245B64E5D73F9507B83A2D67FDE91` |
|
||||
| targeted linear output | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-441349319977100-1/shell_results.h5` | SHA-256 `167248AB523484FB6F515AE6A309C7380B4A1226B74BE03B207F4532C3064B66` |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | exit `0`; 0.342 s; configure/generate complete |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | exit `0`; 0.116 s; `ninja: no work to do.` |
|
||||
| CTest discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | exit `0`; 294 tests discovered |
|
||||
| full MSVC CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | exit `8`; 293/294 passed; only test 293 failed with the same three RMS values; test 294 comparator invalid-HDF5/warning checks passed |
|
||||
| source failure hash | `Get-FileHash phases/nonlinear-static-newton-raphson/step11-output.json -Algorithm SHA256` | exit `0`; `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91` |
|
||||
| reference preservation | `git diff -- reference` | exit `0`; empty diff |
|
||||
| repository identity | `git rev-parse HEAD` | exit `0`; `65b56b1755e4537b48b44476375b6235da732648` |
|
||||
| Stop | not applicable | Correction Agent session은 Harness Step이 아니며 production/test/CMake를 변경하지 않았다. Full preset build/CTest를 직접 실행했다. |
|
||||
| Harness Python pytest | not applicable | Harness Python, Hook, agent config behavior를 변경하지 않았다. |
|
||||
|
||||
### 13.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-019` | Step 10 reaction/HDF5 path; REWORK-008 | `CORR-NSNR-REACTION-PIPELINE-001` read-only audit | focused test 293 | report only | accepted full residual, constrained reaction and HDF5 physical moment mapping are identical at constrained zero-rotation DOFs; met |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 `reference-comparison-gate`; REWORK-008 | `NSNR-REF-015`, `NSNR-REF-017` via test 293 | focused test 293 and full CTest | report only | exact keys/prechecks pass, but three local reaction families exceed blocking RMS `0.01`; not met because approved reference quantity assumes unsupported local S4/MITC4 distribution agreement |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 model-adequacy audit | `CORR-NSNR-LINEAR-CROSSCHECK-001` | read-only HDF5/CSV audit | report only | distinguish nonlinear reaction implementation error from pre-existing formulation-sensitive local redistribution; implementation-error hypothesis rejected |
|
||||
|
||||
### 13.7 Handoff Recommendation
|
||||
|
||||
- recommendation: return `upstream-contract` / `needs-user-decision` to Coordinator Agent. Do not request an Implementation Agent rerun and do not advance Step 12 until an upstream alternative is explicitly selected and approved.
|
||||
- recommended narrow alternative: align nonlinear local nodal RF/RM disposition with the approved linear reference contract—keep local rows as read-only model-adequacy/physics-review evidence, while blocking reaction evidence is global force/moment equilibrium plus free-residual checks. Blocking displacement comparison remains unchanged.
|
||||
- local-to-global alternative: retain reaction as a blocking external quantity only after projecting it to formulation-independent global resultant force/moment families; keep exact local nodal rows as warning/characterization evidence.
|
||||
- local-blocking alternative: if exact local RF/RM rows must remain blocking, Numerical Review/Reference Model owners must supply an analytical or independent formulation-appropriate benchmark, or explicitly approve Abaqus S4 local nodal reaction distribution as an FESA MITC4 model-adequacy target after a mesh/formulation study. Implementation must not calibrate reactions to Abaqus without that decision.
|
||||
- excluded alternative: tolerance relaxation, row averaging/collapse, comparator weakening or reference artifact rewriting is not acceptable.
|
||||
|
||||
Each viable alternative changes blocking quantity/model-adequacy ownership in `requirements.md`, `numerical-review.md`, `reference-model.md`, `io.md` and the implementation/reference plan. Correction Agent does not select or edit those contracts.
|
||||
|
||||
### 13.8 Stop Condition
|
||||
|
||||
- upstream ambiguity: current contracts simultaneously disclaim Abaqus S4 internal equivalence, make linear local reaction review-only, and require the same formulation-sensitive local distribution as nonlinear blocking evidence.
|
||||
- implementation stop: no nonlinear reaction computation, storage or exact-key mapping defect was reproduced; a code-only pass would alter formulation/reference meaning.
|
||||
- reference artifact gap: none; required artifacts exist, remained read-only and have empty reference diff.
|
||||
- environment blocker: none; configure/build/discovery completed and full CTest reproduced only the intended reference failure.
|
||||
- repeated failure: `REWORK-008` classification attempt `1`; no automatic implementation correction is safe before the upstream decision.
|
||||
- final stop: status `needs-upstream-decision`; Step 11 remains blocked, Step 12 remains pending, and Physics/Release remain ineligible.
|
||||
|
||||
## 14. REWORK-009 User-local WindowsApps PowerShell Launch Correction
|
||||
|
||||
### 14.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` dispatch `REWORK-009-user-windowsapps-pwsh-launch-filter-root-dispatch-required` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-28` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 존재하지 않는다. 따라서 current `step11-output.json` SHA-256 `BF3A1CA6DD35EA8414710018D7F1644A1D2C6C2BCF87C11F74DA2A01BBEAB3AD`, Coordinator dispatch, preserved attempt-1 TDD evidence와 attempt-2 Stop evidence를 source evidence로 사용했다.
|
||||
|
||||
### 14.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-launch-path-filter-missed-user-windowsapps-pwsh-access-denied`
|
||||
- attempt: `2` under `STEP11-EXECUTION-003`; attempt 1은 1,800초 timeout이고 attempt 2는 아래 shell launch failure다.
|
||||
- first failed command boundary:
|
||||
|
||||
```powershell
|
||||
codex exec --json --model gpt-5.6-terra --config 'model_reasoning_effort="xhigh"' --sandbox workspace-write --dangerously-bypass-hook-trust --cd C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson --disable unified_exec -
|
||||
```
|
||||
|
||||
- failed target: attempt-2 nested Codex의 첫 PowerShell tool launch.
|
||||
- evidence tail: nested Codex `0.150.1`이 `C:\Users\baram\AppData\Local\Microsoft\WindowsApps\pwsh.exe`를 선택했다. `workspace-write` runner가 `CreateProcessAsUserW failed: 5 (Access denied)`로 이를 거부해 소스 확인, RED/VERIFY 명령과 Step status update가 실행되지 않았다. Codex process 자체는 `exitCode=0`이지만 blocker agent message만 반환했으므로 Step 성공 evidence가 아니다.
|
||||
- state evidence: `HEAD=65b56b1755e4537b48b44476375b6235da732648`; Step 11 `pending`; Step 12 `pending`.
|
||||
|
||||
### 14.3 Root Cause Summary
|
||||
|
||||
이번 실패는 solver, comparator 또는 `1e-8` gate defect가 아니라 Harness child launch environment defect다.
|
||||
|
||||
1. 이전 launcher filter는 `C:\Program Files\WindowsApps\Microsoft.PowerShell_*` entry만 제거했다.
|
||||
2. 따라서 `C:\Users\baram\AppData\Local\Microsoft\WindowsApps` entry와 그 아래 `pwsh.exe` execution alias가 PATH에 남았다.
|
||||
3. Nested Codex shell resolver는 남은 user-local alias를 선택했고, Windows native `workspace-write` sandbox는 그 alias의 child process 생성을 Windows error 5로 거부했다.
|
||||
4. PATH에서 `\\WindowsApps(?:\\|$)`에 일치하는 모든 entry를 제거하면 현재 환경의 Program Files entry 세 개와 user-local entry 한 개가 함께 제거된다. 이때 `pwsh`는 resolve되지 않고 `powershell`은 `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`로 resolve된다.
|
||||
5. Root가 같은 Codex CLI `0.150.1`, `gpt-5.6-terra`, `xhigh`, `--disable unified_exec`, `workspace-write`, `CODEX_HOME=C:\Users\baram\.codex` envelope에서 이 filter를 적용한 nested smoke는 위 Windows PowerShell을 선택해 exact `FESA_CODEX_SHELL_SMOKE_OK`를 출력하고 exit `0`으로 끝났다. Correction audit의 독립 direct smoke도 같은 executable, exact output과 exit `0`을 확인했다.
|
||||
|
||||
따라서 repository runner나 Step 11 implementation을 고칠 필요가 없다. Rerun launch에서 PATH predicate만 전체 WindowsApps entry를 제거하도록 바로잡으면 된다.
|
||||
|
||||
### 14.4 Correction Scope
|
||||
|
||||
- changed report file: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed source/header/test/CMake/runner/phase files: none
|
||||
- excluded upstream contracts: `requirements.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`, `docs/TOLERANCE.md`
|
||||
- excluded immutable evidence: `reference/**`, stored CSVs and reference inputs
|
||||
- preserved dirty implementation: all existing Step 11 source, test, comparator, CMake and phase changes
|
||||
- prohibited actions not performed: Harness phase execution, Step 11 implementation, Step 12, full build/CTest rerun, manual Hook execution, commit, push, `danger-full-access`, reference solver or artifact mutation
|
||||
|
||||
Correction은 repository code 변경이 아니라 corrected child-launch envelope와 재실행 경계를 확정한다. Production C++ 변경이 없으므로 새 RED test는 필요하지 않다.
|
||||
|
||||
### 14.5 Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | exit/result |
|
||||
| --- | --- | --- |
|
||||
| failure artifact audit | `Get-FileHash phases/nonlinear-static-newton-raphson/step11-output.json -Algorithm SHA256`; JSON `exitCode`, `stderr`, blocker message 검사 | exit `0`; SHA-256 `BF3A1CA6DD35EA8414710018D7F1644A1D2C6C2BCF87C11F74DA2A01BBEAB3AD`; nested process path와 `CreateProcessAsUserW failed: 5` 확인 |
|
||||
| filter audit | `($env:PATH -split ';') \| Where-Object { $_ -notmatch '\\WindowsApps(?:\\|$)' }`를 child-only PATH로 적용한 뒤 `Get-Command codex,pwsh,powershell` 확인 | four WindowsApps entries removed; Codex `codex-cli 0.150.1`; `pwsh=<none>`; `powershell=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe` |
|
||||
| independent direct smoke | filtered PATH에서 `powershell.exe -NoProfile -Command '[Console]::WriteLine($PSHOME); [Console]::WriteLine("FESA_CODEX_SHELL_SMOKE_OK")'` | exit `0`; `$PSHOME=C:\Windows\System32\WindowsPowerShell\v1.0`; exact `FESA_CODEX_SHELL_SMOKE_OK` |
|
||||
| same-envelope nested Codex smoke | Coordinator/root evidence: Codex `0.150.1`, Terra/xhigh, `--disable unified_exec`, `workspace-write`, aligned `CODEX_HOME`, all-WindowsApps filter | exit `0`; selected system Windows PowerShell and printed exact `FESA_CODEX_SHELL_SMOKE_OK` |
|
||||
| recovered attempt-1 RED | `ctest --preset windows-msvc-ninja-debug -R 'GlobalForceAndMoment' --output-on-failure` before comparator GREEN | exit `8`; preserved old `<=1e-10` rejected both `5e-9` and exact `1e-8` in `NSNR-REF-024` |
|
||||
| recovered attempt-1 GREEN | same focused GlobalForceAndMoment CTest after comparator-only shared gate became `1e-8` | exit `0`; 2/2 passed, including inclusive boundary and exact-zero-scale tests |
|
||||
| focused implementation evidence | attempt-1 focused procedure, HDF5 and global-balance runs; attempt-2 `LastTest.log` named-test audit | `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024`, `NSNR-REF-025` all present as passed |
|
||||
| attempt-2 Stop full CTest | `.harness/build-ninja-msvc-debug/Testing/Temporary/LastTest.log`, SHA-256 `41CA3D4E410F7BFD55E50FC7D40A79D00D26116945C468E74F0E38720E676447` | 302 `Testing` rows, 0 failure markers, final `302/302`; root/Coordinator records full `302/302` pass |
|
||||
| new full build/CTest | not run | existing evidence was sufficient and dispatch prohibited unnecessary Harness/build/CTest rerun |
|
||||
| Stop | not applicable | Correction Agent session은 Harness Step이 아니며 code/test/CMake를 변경하지 않았다. |
|
||||
| Harness Python pytest | not applicable | runner, Hook 또는 agent config를 변경하지 않았다. |
|
||||
|
||||
Attempt-1 RED/GREEN은 recovered immutable execution evidence이며 이 correction에서 재현하거나 새로 주장한 RED가 아니다. Current code를 old threshold로 되돌리지 않았고 reference artifact도 실행·수정하지 않았다.
|
||||
|
||||
### 14.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-019` | Step 11 `equilibrium-projection-and-reference-gate`; REWORK-009 | `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024..025` | nested `codex exec` first shell launch | `corrections.md` report-only launch correction | Step 11 agent can read/run the preserved current-arm, spatial-moment and distinct global force/moment evidence under `workspace-write` |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 reference gate; REWORK-009 | `NSNR-REF-020..025` | nested `codex exec` first shell launch | `corrections.md` report-only launch correction | implementation-owned reference checks can complete without changing disposition, reference artifacts or tolerance |
|
||||
| Harness Step execution contract | `STEP11-EXECUTION-003`; `REWORK-009` | `CORR-HARNESS-SHELL-002` | user-local WindowsApps `pwsh.exe` launch | `corrections.md` | all PATH entries matching `\\WindowsApps(?:\\|$)` are absent; system Windows PowerShell launches and exact smoke exits `0` |
|
||||
|
||||
### 14.7 Handoff Recommendation
|
||||
|
||||
- recommendation: return `corrected-for-implementation-rerun` to Coordinator Agent and request one bounded Implementation Agent rerun of Step 11 only.
|
||||
- exact launch correction: reuse the approved `STEP11-EXECUTION-003` Step11-only wrapper and change only the launch PATH filter to the following predicate after VsDevCmd x64/dependency environment setup and before `codex exec`:
|
||||
|
||||
```powershell
|
||||
$step11PathEntries = $env:PATH -split ';' | Where-Object {
|
||||
$_ -and $_ -notmatch '\\WindowsApps(?:\\|$)'
|
||||
}
|
||||
$env:PATH = $step11PathEntries -join ';'
|
||||
$env:CODEX_HOME = 'C:\Users\baram\.codex'
|
||||
$env:FESA_HARNESS_CODEX_SANDBOX = 'workspace-write'
|
||||
```
|
||||
|
||||
- preserve exact runtime: Codex CLI `0.150.1`; implementation-agent `gpt-5.6-terra`/`xhigh`; `--disable unified_exec`; project PreToolUse/Stop hooks; VsDevCmd x64; approved `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, `HDF5_DIR`.
|
||||
- preflight must resolve `powershell` to `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`, leave `pwsh` unresolved, and print exact `FESA_CODEX_SHELL_SMOKE_OK` with exit `0`.
|
||||
- run only Executor-selected Step 11, no `--push`; hard-stop before Step 12. Do not use `danger-full-access`, run a reference solver, mutate reference artifacts or alter runner/source/test/CMake/phase/upstream/tolerance files as part of this launch correction.
|
||||
|
||||
### 14.8 Stop Condition
|
||||
|
||||
- repeated failure: normalized classification count is already `2`; if the corrected all-WindowsApps filter still produces the same `CreateProcessAsUserW` failure, do not start another automatic retry. Return `needs-environment-fix` to Coordinator with the new output artifact.
|
||||
- environment blocker: cleared for one bounded Step 11 rerun by the same-envelope smoke; no repository-local code fix is required.
|
||||
- upstream ambiguity: none introduced by this correction; fixed `1e-8` force/moment gate and all approved contracts remain unchanged.
|
||||
- reference artifact gap: none examined or changed in this correction.
|
||||
- final stop: status `corrected-for-implementation-rerun`; Step 11 and Step 12 remain `pending` until Executor/Implementation owner action.
|
||||
@@ -1599,7 +1599,15 @@ on any increment/recovery/output failure:
|
||||
### 14.1 Four convergence channels
|
||||
|
||||
Let free translation and rotation-coordinate subvectors carry superscripts \(u\)
|
||||
and \(\phi\). Residual channels use
|
||||
and \(\phi\). Define the matching external residual-channel scales
|
||||
|
||||
\[
|
||||
S_{ext}^u=\|\mathbf f_{ext,f}^u\|_\infty,
|
||||
\qquad
|
||||
S_{ext}^\phi=\|\mathbf f_{ext,f}^\phi\|_\infty.
|
||||
\]
|
||||
|
||||
When the matching external scale is nonzero, residual channels retain
|
||||
|
||||
\[
|
||||
\eta_R^u=
|
||||
@@ -1615,10 +1623,31 @@ and \(\phi\). Residual channels use
|
||||
\|\mathbf f_{ext,f}^\phi\|_\infty)}
|
||||
\]
|
||||
|
||||
when the matching denominator is nonzero. They pass iff
|
||||
\(\eta_R^u\le10^{-2}\) and \(\eta_R^\phi\le10^{-2}\).
|
||||
An exact-zero denominator instead passes iff the numerator is at most
|
||||
\(10^{-3}\) model-consistent force or \(10^{-3}\) model-consistent force-length.
|
||||
for \(S_{ext}^u>0\) and for \(S_{ext}^\phi>0\), respectively. Each nonzero-external-scale
|
||||
channel passes iff its ratio is \(\le10^{-2}\). An exact-zero matching external
|
||||
scale instead selects the existing typed absolute residual gate:
|
||||
|
||||
\[
|
||||
\boxed{
|
||||
S_{ext}^u=0
|
||||
\ \Longrightarrow
|
||||
\|\mathbf r_f^u\|_\infty\le10^{-3}
|
||||
\quad\text{model-consistent force},}
|
||||
\]
|
||||
|
||||
\[
|
||||
\boxed{
|
||||
S_{ext}^\phi=0
|
||||
\ \Longrightarrow
|
||||
\|\mathbf r_f^\phi\|_\infty\le10^{-3}
|
||||
\quad\text{model-consistent force-length}.}
|
||||
\]
|
||||
|
||||
The exact-zero branch selector is the matching external scale itself, not
|
||||
\(\max(\|\mathbf f_{int,f}\|_\infty,
|
||||
\|\mathbf f_{ext,f}\|_\infty)\). Therefore a nonzero internal residual does not
|
||||
select the relative branch when its matching external scale is exactly zero. When
|
||||
the external scale is nonzero, only the retained relative gate applies.
|
||||
|
||||
Let
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
> For Harness workers: this plan is an approved Stage 6 planning artifact. It authorizes planning files only. It does not authorize `scripts/execute.py`, C++ implementation, build, CTest, reference solver execution, or evidence-document creation.
|
||||
|
||||
**Goal:** `nonlinear-static-newton-raphson` 기능을 C++17/MSVC/CMake/CTest TDD 순서로 구현하고, 승인된 nonlinear MITC4 Newton-Raphson 절차, HDF5 schema v1, log lifecycle, shellNL/shell reference comparison을 검증한다.
|
||||
**Goal:** `nonlinear-static-newton-raphson` 기능을 C++17/MSVC/CMake/CTest TDD 순서로 완결하고, current-position/spatial-moment global equilibrium, accepted free residual, fine-primary/coarse-companion reference gate와 HDF5 schema v1을 검증한다.
|
||||
|
||||
**Architecture:** App layer가 argv 검증, lexical output path derivation, move-only `OutputWriteLease`, log open/close와 final HDF5 writer 호출 순서를 소유한다. 입력 parse/map은 정확히 한 번 수행하고, `StepDefinition::ProcedureKind()`로 linear와 nonlinear procedure executor를 분리한다. `LinearStaticAnalysis`의 기존 private lifecycle에는 nonlinear 조건문을 넣지 않고, 기존 linear numerical/HDF5 의미는 repository-wide output name/log lifecycle 변경만 제외하고 보존한다.
|
||||
**Architecture:** App layer가 argv 검증, lexical output path derivation, move-only `OutputWriteLease`, log open/close와 final HDF5 writer 호출 순서를 소유한다. 입력 parse/map은 정확히 한 번 수행하고, `StepDefinition::ProcedureKind()`로 linear와 nonlinear procedure executor를 분리한다. Nonlinear accepted state는 current arm과 spatial physical moment로 applied-plus-reaction balance error를 만들고 기존 `/global/equilibrium`에 저장하며, comparator는 existing schema-v1 nodal datasets에서 constrained reaction resultant와 accepted free residual을 별도로 재구성한다. `LinearStaticAnalysis`의 기존 private lifecycle에는 nonlinear 조건문을 넣지 않는다.
|
||||
|
||||
**Tech Stack:** C++17, MSVC on Windows, CMake, CTest, GoogleTest, Intel oneAPI MKL/TBB, HDF5, Abaqus `.inp` approved subset, Python 3 Harness scripts.
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| status | `approved-planning-files-materialized` |
|
||||
| status | `ready-for-implementation` |
|
||||
| owner_agent | `implementation-planning-agent` |
|
||||
| date | `2026-08-24` |
|
||||
| approval | User approved the final 13-Step draft on `2026-08-24`; Coordinator recorded `DECISION-036`. |
|
||||
| date | `2026-08-28` |
|
||||
| approval | User approved the original 13-Step draft on `2026-08-24`, USER-DECISION-003 revision, and delegated the Coordinator-audited REAPPROVAL-012 Stage 6 reapproval/materialization with both normalized factor-one global force and moment balance gates fixed at `<=1e-8` on `2026-08-28`. |
|
||||
| source_requirement | `docs/nonlinear-static-newton-raphson/requirements.md` |
|
||||
| source_research | `docs/nonlinear-static-newton-raphson/research.md` |
|
||||
| source_formulation | `docs/nonlinear-static-newton-raphson/formulation.md` |
|
||||
@@ -30,20 +30,51 @@
|
||||
|
||||
| document | SHA-256 |
|
||||
| --- | --- |
|
||||
| `requirements.md` | `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2` |
|
||||
| `research.md` | `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE` |
|
||||
| `formulation.md` | `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0` |
|
||||
| `numerical-review.md` | `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01` |
|
||||
| `reference-model.md` | `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3` |
|
||||
| `io.md` | `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28` |
|
||||
| `requirements.md` | `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E` |
|
||||
| `research.md` raw | `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570` |
|
||||
| `formulation.md` | `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9` |
|
||||
| `numerical-review.md` | `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` |
|
||||
| `reference-model.md` | `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA` |
|
||||
| `io.md` raw | `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9` |
|
||||
| `io.md` LF-normalized | `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB` |
|
||||
|
||||
## Readiness Check
|
||||
|
||||
- Upstream document status: Stage 1 requirements approved, Stage 2 research passed, Stage 3 formulation ready for numerical review and approved downstream, Stage 4 numerical/reference review passed for I/O definition, Stage 5 I/O definition approved.
|
||||
- Upstream document status: Stage 1 requirements, Stage 4 numerical/reference review and Stage 5 I/O definition are complete; REAPPROVAL-012 fixes both factor-one normalized global force and moment balance gates at `<=1e-8`. Stage 3 formulation §§11.4/13.4 already supplies the accepted residual/reaction/global-resultant meaning.
|
||||
- Missing decisions: none.
|
||||
- Missing required comparison files: none for declared blocking/reference families.
|
||||
- Missing required comparison files: none. Fine primary, coarse companion and linear-control exact inputs/CSVs are present; stress files are optional inventory only.
|
||||
- Planning can proceed: yes.
|
||||
- `.harness/config.json`: absent during planning inspection. Each Step must recheck at execution time and use it first if it appears.
|
||||
- REWORK-008의 local reaction blocking conflict는 USER-DECISION-004 option 1로 해소되었다. Local nodal RF/RM은 review-only이고 factor-one global force/moment balance와 accepted free residual이 blocking이다. `AUDIT-001` current-arm/spatial-moment implementation seam은 Step 11에서 RED-first로 닫는다.
|
||||
- Step 11에는 보존해야 할 uncommitted `NSNR-CTRL-018..021`, `NSNR-LOG-012`, `NSNR-PROC-019`,
|
||||
`NSNR-HDF5-014`, `NSNR-REF-001..023`, residual-selector GREEN과 comparator/CMake 작업이 있다.
|
||||
새 계획은 이를 reset/replay하지 않는다.
|
||||
- `implementation-report.md`, `build-test.md`, canonical `reference-comparison.md`는 아직 없고 Step 12가 actual evidence에서만 생성한다.
|
||||
- `CMakePresets.json` tracks the approved `windows-msvc-ninja-debug` contract. The ignored `.harness/config.json` selects the matching configure/build/test presets and `.harness/build-ninja-msvc-debug` binary directory.
|
||||
|
||||
## Implementation Scope
|
||||
|
||||
Included behavior:
|
||||
|
||||
- Existing schema-v1 `/global/equilibrium [6]`에 global origin `[0,0,0]`, accepted current
|
||||
position `X+u`, independently spatial-converted applied/reaction moments를 사용하는
|
||||
applied-plus-reaction balance error를 기록한다.
|
||||
- Existing schema-v1 nodal datasets와 exact constraint mask에서 accepted free residual,
|
||||
constrained reaction resultant와 global balance error를 서로 다른 evidence로 재구성한다.
|
||||
- Fine nonlinear primary, coarse nonlinear companion와 linear control을 exact read-only artifact로
|
||||
비교한다. U는 blocking, UR은 warning-only, local RF/RM은 review-only, RM3/stress는 excluded다.
|
||||
- Internal global force/moment는 dimension-separated normalized `1e-8`, accepted free residual은
|
||||
NSNR-069으로 blocking 검증하고 external families만 `docs/TOLERANCE.md`를 사용한다.
|
||||
|
||||
Excluded behavior and non-goals:
|
||||
|
||||
- New HDF5 dataset/schema version, public header/API, tolerance, reference artifact 또는 solver scope
|
||||
추가가 아니다.
|
||||
- `fesa.env`, runtime configuration, CLI option 또는 product solver acceptance behavior를 추가하지
|
||||
않는다. `1e-8`은 comparator-owned internal verification gate의 fixed value다.
|
||||
- Local nodal reaction을 global sum으로 대체하거나 Abaqus S4와 FESA MITC4 내부 정식화
|
||||
동등성을 주장하지 않는다.
|
||||
- Steps 0–10 구현/history replay, selector RED 재현, Abaqus/reference solver 실행, Physics/Release
|
||||
판정은 포함하지 않는다.
|
||||
|
||||
## Global Constraints
|
||||
|
||||
@@ -54,8 +85,13 @@
|
||||
- Do not create `implementation-report.md`, `build-test.md`, or `reference-comparison.md` before Step 12 produces actual command evidence.
|
||||
- Do not run Harness from this planning approval. `scripts/execute.py` requires a separate explicit request.
|
||||
- Implementation and Harness execution remain unauthorized by this materialized plan until the user separately requests Executor execution.
|
||||
- Preserve source label/instance identity, deterministic row order, deterministic diagnostics, finite checks, and docs/TOLERANCE.md exactly.
|
||||
- Preserve `U1/U2/U3` blocking and `UR1/UR2/UR3` warning-only. For shellNL, preserve constrained `RF1/RF2`, `RF3`, physical spatial `RM1/RM2` blocking, and exclude `RM3` plus stress from numeric comparison.
|
||||
- Preserve source label/instance identity, deterministic row order, deterministic diagnostics, finite checks, and `docs/TOLERANCE.md` exactly.
|
||||
- Residual force/moment channel은 finite-first 검사 뒤 matching external scale 자체로 분기한다. Exact zero이면 denominator output exact `0`과 typed absolute `1.0e-3`; nonzero이면 retained `max(internal,external)` denominator와 dimensionless relative `1.0e-2`만 사용한다. Tolerance band, zero clamp, `max(1,...)`, absolute/relative OR는 금지한다.
|
||||
- Correction gates, four-channel logical AND, Full Newton, fixed load-factor stepping, maximum 100 iterations와 `nsnr-log-v1` 39-field label/order/TAB schema는 변경하지 않는다.
|
||||
- Preserve `U1/U2/U3` blocking and `UR1/UR2/UR3` warning-only. Fine/coarse constrained `RF1/RF2`, `RF3`, physical spatial `RM1/RM2` remain review-only with complete deterministic precheck/error reporting; exclude `RM3` and stress from numeric comparison.
|
||||
- Preserve schema version 1 and all existing HDF5 paths/shapes/components. Do not add a summary dataset or public header.
|
||||
- Keep internal global balance/free-residual gates separate from external `docs/TOLERANCE.md`; do not add a floor, `max(1,S)`, zero clamp, averaging or collapse.
|
||||
- Launch every Harness process from VsDevCmd with `-arch=x64 -host_arch=x64` and inherit `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, and `HDF5_DIR`. The tracked preset selects Ninja and MSVC Debug without hard-coding machine-local dependency paths.
|
||||
|
||||
## Repository Seam Map
|
||||
|
||||
@@ -67,11 +103,12 @@
|
||||
| Domain | `StaticStepDefinition` in `include/fesa/model/model_types.h`; `StepDefinition` in `include/fesa/model/domain.h`. | Store procedure identity, `NLGEOM`, raw four `*STATIC` values and provenance. Do not store derived factor sequence or PRESELECT state. |
|
||||
| Parser mapping | `src/fesa/io/abaqus/domain_mapping_context.cpp`, `step_definition_mapper.cpp`. | Accept nonlinear static subset, warning no-op PRESELECT, reject unsupported procedure fail-closed. |
|
||||
| MITC4 | `include/fesa/elements/mitc4_shell.h`, `src/fesa/elements/mitc4_shell.cpp` are linear small-rotation. | Add separate nonlinear MITC4 files with `Create(...)` from four nodes, four initial frames, `ShellSection`, and `LinearElasticMaterial`; element kernels compute internal residual/tangent/recovery only. |
|
||||
| Loads/control | Current loads are assembled for linear static RHS. | Step 5 owns global-once fixed CLOAD external vector `f_ext` and exact external load tangent `K_ext`, including projected moment `J_l`/map-Hessian terms, with no incident-element multiplication. Step 5 also owns exact convergence constants: relative `1.0e-2`, zero-scale `1.0e-3` with channel-specific units. Step 10 forms `r = f_int - f_ext` and `K_T = K_int - K_ext`. |
|
||||
| Loads/control | Preserved partial Step 11 work already changes residual selection to matching external scale exact-zero/nonzero and adds `NSNR-CTRL-018..021`/`NSNR-LOG-012`. | Preserve without replay/redesign; run focused regression before the new equilibrium/reference gate. |
|
||||
| Equilibrium projection | `src/fesa/analysis/nonlinear_static_procedure.cpp` currently sums raw full residual with initial Domain coordinates and raw rotational covectors. | Apply the constraint mask before rotational conversion; use accepted `X+u`; convert applied and constrained-reaction rotational covectors independently with `InverseTransposeLeftJacobianSO3(phi)`; store applied-plus-reaction balance only. |
|
||||
| Source identity | `SourceEntityId { instance_name, source_label, source_label_text }` and `EntityIndex` exist in `include/fesa/core/source_identity.h`; nodes are stored in stable Domain order. | Step 8 baseline uses both `EntityIndex` and full `SourceEntityId`, requires one node baseline per Domain node in stable internal order, rejects label-only or mismatched identities, and preserves identity into HDF5/reference mapping. |
|
||||
| Solver | `MklPardisoSolver` uses SPD `mtype=2` and upper-triangle copy. | Preserve unchanged; add `TangentSolver` and MKL unsymmetric full CSR `mtype=11`. |
|
||||
| Results writer | `ResultsWriter` is the backend-neutral linear writer; `Hdf5ResultsWriter` writes schema-v0 single-frame linear output. | Add `NonlinearResultsWriter` backend-neutral boundary and `NonlinearHdf5ResultsWriter` schema-v1 implementation with delayed finalization after log close. |
|
||||
| Tests | `fesa_unit_tests`, `fesa_integration_tests`, `fesa_reference_tests` use executable-wide labels. | Add focused test sources and use `ctest -R` regex; do not globally relabel existing tests as nonlinear. |
|
||||
| Results writer | `NonlinearHdf5ResultsWriter` already writes schema-v1 `/global/equilibrium`, but its location attribute is `global-origin`. | Preserve dataset path/shape/components and change exact location identity to `global-balance-error`; no new dataset or public writer boundary. |
|
||||
| Tests | Existing integration/HDF5 tests and partial nonlinear comparator are registered in existing executables. | Add RED to existing sources; preserve the current CMake registration and use focused `ctest -R` regex without a new target or global relabel. |
|
||||
|
||||
## Work Breakdown
|
||||
|
||||
@@ -88,7 +125,7 @@
|
||||
| 8 | `nonlinear-state-commit-rollback` | 3-7 | Factor-zero baseline construction with `EntityIndex` plus `SourceEntityId`, trial/committed nonlinear state, accepted frames, rollback/preservation. |
|
||||
| 9 | `nonlinear-hdf5-schema-v1-writer` | 8 | Nonlinear HDF5 schema v1 writer using `std::vector<Diagnostic>`. |
|
||||
| 10 | `prepared-analysis-flow-and-full-procedure` | 0-9 | Single parse/map prepared analysis flow, separate linear/nonlinear executors, delayed writer finalization. |
|
||||
| 11 | `reference-comparison-gate` | 0-10 | shellNL nonlinear and shell linear real-input reference comparison. |
|
||||
| 11 | `equilibrium-projection-and-reference-gate` | 0-10 | Preserve partial selector/comparator work; add new current-arm/spatial-moment, HDF5 location, fine/coarse disposition/internal-gate RED tests; make minimal procedure/writer/comparator GREEN; run focused/full verification. |
|
||||
| 12 | `execution-closure-and-evidence-docs` | 0-11 | Fresh MSVC evidence, deterministic repeat/reference audit, actual-output evidence docs. |
|
||||
|
||||
## TDD Test Plan
|
||||
@@ -100,34 +137,42 @@
|
||||
| `NSNR-ROT-*` | finite rotation invariants, `J_l`, branch margin, director update. | 2 |
|
||||
| `NSNR-ELEM-KIN-*` | nonlinear MITC4 creation inputs, TL shell kinematics, fixed-size four-GP recovery rows, degeneracy fail-closed, linear limit. | 3 |
|
||||
| `NSNR-ELEM-TAN-*` | same-trial internal residual/tangent, directional derivative, objectivity, symmetry only for internal/no-external cases. | 4 |
|
||||
| `NSNR-CTRL-*` | load factor path, absolute boundary path, global-once fixed loads and load tangent, moment admissibility, typed four convergence gates with `relative`/`zero-scale` branches and non-injectable exact thresholds/units. | 5 |
|
||||
| `NSNR-CTRL-*` | Existing coverage plus preserved partial `NSNR-CTRL-018..021`: matching-external exact-zero absolute boundaries, retained nonzero relative boundaries, nonfinite-first/no-clamp selection, unchanged correction gates/four-channel AND. Do not replay/fabricate selector RED. | 5,11 |
|
||||
| `NSNR-SOLVER-*` | nonsymmetric tangent solve, 0x0, nonfinite/failure translation, SPD solver unchanged. | 6 |
|
||||
| `NSNR-LOG-*` | serializer-owned 39-field UTF-8/LF/TAB Newton log from explicit stage/failure/channel records and fail-closed write/flush/close. | 7 |
|
||||
| `NSNR-LOG-*` | Existing serializer coverage plus preserved partial `NSNR-LOG-012`: evaluator-produced zero/nonzero-external decisions retain exact denominator, branch, threshold, unit and 39 fields. | 7,11 |
|
||||
| `NSNR-STATE-*` | factor-zero baseline creation with stable node order and full source identity, trial/committed separation, accepted frame order, full schema-v1 state inventory, finite atomic commit, rollback. | 8 |
|
||||
| `NSNR-HDF5-*` | `NonlinearResultsWriter` boundary, schema v1 metadata/model/frame datasets, factor-zero metadata, atomic finalization. | 9 |
|
||||
| `NSNR-PROC-*` | full procedure orchestration, single parse/map, log close before HDF5, deterministic repeat. | 10 |
|
||||
| `NSNR-REF-*` | original artifact snapshot, temp input copy run, HDF5-to-original-CSV identity mapping, tolerance, classification, report data. | 11 |
|
||||
| `NSNR-EVID-*` | fresh evidence docs and diff/hash/warning audits from actual command outputs. | 12 |
|
||||
| `NSNR-HDF5-*` | Existing schema-v1 coverage plus `NSNR-HDF5-014` exact `/global/equilibrium` `location=global-balance-error`; path/shape/components/version unchanged. | 9,11 |
|
||||
| `NSNR-PROC-*` | Existing procedure coverage plus collision-resolved `NSNR-PROC-019` exact test `NonlinearStaticProcedure.NonzeroPrescribedMotionWritesCurrentArmSpatialAppliedPlusReactionBalance`. Approved draft label `NSNR-PROC-011` is not reused because completed Step 10 already owns it. | 10,11 |
|
||||
| `NSNR-REF-*` | Preserve `NSNR-REF-001..023`, including the current-case old-gate RED in `022`; add `024` inclusive `1e-8` force/moment boundary plus approved between-threshold regression and `025` exact-zero-scale force/moment regression before changing the comparator gate. | 11 |
|
||||
| `NSNR-EVID-*` | `001..007` freshness, disposition, fine/internal inventory, AUDIT-001, command/provenance and actual-output report checks. | 12 |
|
||||
|
||||
## CMake And CTest Plan
|
||||
|
||||
- Add C++ sources to `src/fesa/CMakeLists.txt` under existing `fesa_solver`.
|
||||
- Add unit tests to `fesa_unit_tests`, integration tests to `fesa_integration_tests`, reference tests to `fesa_reference_tests`.
|
||||
- Preserve current executable-wide labels. Use focused regex such as `ctest --test-dir .harness/build -C Debug -R "NonlinearStaticReference|ReferenceTolerance|Mitc4Reference" --output-on-failure`.
|
||||
- Preserve current executable-wide labels. Use focused regex such as `ctest --preset windows-msvc-ninja-debug -R "NonlinearStaticReference|ReferenceTolerance|Mitc4Reference" --output-on-failure`.
|
||||
- Step 11 adds no target or `add_test`: procedure/HDF5 tests use existing executables and current partial `tests/CMakeLists.txt` comparator registration is preserved without unrelated edits.
|
||||
- If scoped per-test labels are introduced, the Step that introduces the mechanism must test it and avoid changing labels for unrelated discovered tests.
|
||||
- Configure/build/test commands:
|
||||
|
||||
```powershell
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 `
|
||||
"-DFESA_GTEST_SOURCE_DIR=$gtestSource" `
|
||||
"-DMKL_DIR=$mklDir" `
|
||||
"-DTBB_DIR=$tbbDir" `
|
||||
"-DHDF5_DIR=$hdf5Dir"
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
cmake --preset windows-msvc-ninja-debug
|
||||
cmake --build --preset windows-msvc-ninja-debug
|
||||
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
## Candidate Files and Ownership
|
||||
|
||||
Candidate paths guide the Implementation Agent and do not finalize a new public API.
|
||||
|
||||
| Step | candidate files | responsibility boundary |
|
||||
| --- | --- | --- |
|
||||
| 11 RED | `tests/integration/analysis/nonlinear_static_procedure_test.cpp`; `tests/unit/io/hdf5/nonlinear_hdf5_results_writer_test.cpp`; existing partial `tests/reference/nonlinear_static_reference_{comparison.h,comparison.cpp,cases_test.cpp}` | New behavior must fail before production edits; comparator extensions remain test-private. |
|
||||
| 11 GREEN | `src/fesa/analysis/nonlinear_static_procedure.cpp`; `src/fesa/io/hdf5/nonlinear_hdf5_results_writer.cpp` | Current-arm/spatial-moment balance and exact dataset location only; no public header/state/schema expansion. |
|
||||
| 11 preserve | `src/fesa/analysis/nonlinear_static_control.cpp`; `tests/unit/analysis/nonlinear_static_control_test.cpp`; `tests/unit/analysis/newton_iteration_log_test.cpp`; `tests/CMakeLists.txt` | Preserve uncommitted selector/tests/registration and verify them; do not reset, recreate or redesign. |
|
||||
| 12 evidence | `docs/PRD.md`; `docs/ARCHITECTURE.md`; `docs/ADR.md`; feature `implementation-report.md`, `build-test.md`, `reference-comparison.md` | Directly superseded global statements and actual evidence only; no C++/test/CMake ownership. |
|
||||
|
||||
## Data Flow Contract
|
||||
|
||||
1. CLI receives `fesa.exe <model.inp>`.
|
||||
@@ -135,40 +180,55 @@ ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
3. App derives `<stem>_results.h5` and `<stem>_log.txt` beside the lexically normalized user-addressed `.inp`.
|
||||
4. App acquires move-only `OutputWriteLease` and retains it until all log and HDF5 work ends.
|
||||
5. App opens/truncates the log, then `PrepareAnalysisInput(input_path)` parses/maps once into `Domain`.
|
||||
6. Procedure executor receives injected `ParallelFor` plus `LinearSolver` or `TangentSolver` and computes a fully validated linear or nonlinear state without opening HDF5. Nonlinear assembly forms `r = f_int - f_ext` and `K_T = K_int - K_ext` from Step 4 internal quantities and Step 5 global-once external quantities. Nonlinear state construction preserves each node's stable `EntityIndex` and full `SourceEntityId`; source label alone is never a row identity.
|
||||
6. Procedure executor receives injected `ParallelFor` plus `LinearSolver` or `TangentSolver` and computes a fully validated state without opening HDF5. Nonlinear assembly forms `r=f_int-f_ext` and `K_T=K_int-K_ext`, preserves the existing convergence decisions, then computes accepted global balance in stable node order. For each node it sets `x=X+u`, masks constrained residual components before converting reaction rotation, converts applied and reaction rotational covectors independently with `InverseTransposeLeftJacobianSO3(phi)`, and accumulates `applied+reaction` force and `x cross force + spatial moment` about `[0,0,0]`.
|
||||
7. App closes the log successfully before invoking injected `ResultsWriter` or `NonlinearResultsWriter`.
|
||||
8. HDF5 is the authoritative solver output. CSV views are comparison/debug artifacts only.
|
||||
8. HDF5 is authoritative. Existing schema-v1 `/global/equilibrium [6]` stores only the applied-plus-reaction balance error with `location=global-balance-error`; existing nodal datasets/mask reconstruct accepted free residual and constrained reaction resultant without new datasets.
|
||||
9. Comparator copies exact inputs to unique build-local directories, runs only the copies, and executes `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`. CSV views are comparison/debug artifacts only.
|
||||
|
||||
## Reference Inventory
|
||||
|
||||
| path | role | rows | SHA-256 |
|
||||
| --- | --- | ---: | --- |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine.inp` | primary nonlinear input | input | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning CSV | 729 | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | required review-only CSV | 729 | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional inventory artifact | 5,408 | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
| `reference/shellNL/shellNL.inp` | nonlinear input | input | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | required displacement CSV | 49 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | required reaction CSV | 49 | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | nonblocking inventory artifact | 288 | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | required blocking/warning CSV | 49 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | required review-only CSV | 49 | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | optional inventory artifact | 288 | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shell/shell.inp` | linear input | input | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| `reference/shell/shell displacements.csv` | required displacement CSV | 49 | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| `reference/shell/shell reactions.csv` | nonblocking inventory artifact | 49 | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| `reference/shell/shell stresses.csv` | nonblocking inventory artifact | 288 | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
|
||||
Blocking and warning families:
|
||||
External comparison families:
|
||||
|
||||
| family | components | rows | disposition |
|
||||
| --- | --- | ---: | --- |
|
||||
| `linear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | blocking |
|
||||
| `linear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | warning-only |
|
||||
| `nonlinear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | blocking |
|
||||
| `nonlinear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | warning-only |
|
||||
| `nonlinear.reaction_inplane_force` | `RF1,RF2`, constrained nodes | 48 | blocking |
|
||||
| `nonlinear.reaction_transverse_force` | `RF3`, constrained nodes | 24 | blocking |
|
||||
| `nonlinear.reaction_physical_moment` | `RM1,RM2`, constrained nodes | 48 | blocking |
|
||||
| `coarse.translation` | `U1,U2,U3`, nodes `1..49` | 147 | blocking |
|
||||
| `coarse.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | warning-only |
|
||||
| `coarse.local_reaction_inplane_force` | `RF1,RF2`, 24 constrained nodes | 48 | review-only |
|
||||
| `coarse.local_reaction_transverse_force` | `RF3`, 24 constrained nodes | 24 | review-only |
|
||||
| `coarse.local_reaction_physical_moment` | `RM1,RM2`, 24 constrained nodes | 48 | review-only |
|
||||
| `fine.translation` | `U1,U2,U3`, nodes `1..729` | 2,187 | blocking |
|
||||
| `fine.rotation` | `UR1,UR2,UR3`, nodes `1..729` | 2,187 | warning-only |
|
||||
| `fine.local_reaction_inplane_force` | `RF1,RF2`, 104 constrained nodes | 208 | review-only |
|
||||
| `fine.local_reaction_transverse_force` | `RF3`, 104 constrained nodes | 104 | review-only |
|
||||
| `fine.local_reaction_physical_moment` | `RM1,RM2`, 104 constrained nodes | 208 | review-only |
|
||||
|
||||
Constrained node labels for shellNL reactions: `1,3,4,5,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,33`.
|
||||
Internal blocking families for each fine/coarse accepted factor-one state are free force residual,
|
||||
free moment residual, global force balance and global moment balance. Global force/moment use separate
|
||||
normalized `<=1e-8` gates; free residual uses NSNR-069. Constrained reaction resultant force `[3]`
|
||||
and moment `[3]` is a distinct review-only summary.
|
||||
|
||||
Exact shellNL `Frame`: `Increment 10: Step Time = 1.000`.
|
||||
Constrained labels: coarse `1,3..9,14..17,22..33`; fine `1,3..9,34..57,82..153`.
|
||||
|
||||
Step 11 must not run original reference input paths directly. It snapshots exact original artifact inventory, copies input bytes unchanged into a unique build-local temp case directory, runs `FesaApplication` on the copied `.inp`, consumes copied-sibling `_results.h5` and `_log.txt`, compares generated HDF5 to original read-only CSVs, and then verifies original reference directory inventory, bytes, timestamps, and hashes are unchanged. HDF5 source path identity matches the copied user-addressed input; source content identity matches the approved input hash.
|
||||
Exact fine and coarse nonlinear `Frame`: `Increment 10: Step Time = 1.000`.
|
||||
|
||||
Step 11 must not run original reference input paths directly. It snapshots each exact original artifact inventory, copies input bytes unchanged into a unique build-local case directory, runs `FesaApplication` on the copy, consumes copied-sibling `_results.h5` and `_log.txt`, compares generated HDF5 to original read-only CSVs, and verifies original inventory, bytes, timestamps and hashes are unchanged. HDF5 path identity matches the copied input and source content identity matches the approved input hash.
|
||||
|
||||
## Acceptance Traceability Matrix
|
||||
|
||||
@@ -179,10 +239,10 @@ Step 11 must not run original reference input paths directly. It snapshots exact
|
||||
| `FESA-REQ-NSNR-041` | 1,3,10 | `NSNR-IO-*`, `NSNR-ELEM-KIN-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-074` | 2,8,10 | `NSNR-ROT-*`, `NSNR-STATE-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-006` | 4,6,10 | `NSNR-ELEM-TAN-*`, `NSNR-SOLVER-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-007` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-069` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-070` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-008` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-007` | 5,10,11 | `NSNR-CTRL-021`, `NSNR-PROC-*`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-069` | 5,10,11 | `NSNR-CTRL-018..020`, `NSNR-LOG-012`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-070` | 5,10,11 | `NSNR-CTRL-021`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-008` | 5,10,11 | `NSNR-CTRL-020`, `NSNR-PROC-*`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-014` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-046` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-048` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
@@ -190,14 +250,14 @@ Step 11 must not run original reference input paths directly. It snapshots exact
|
||||
| `FESA-REQ-NSNR-063` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-016` | 1,5 | `NSNR-IO-*`, `NSNR-CTRL-*` |
|
||||
| `FESA-REQ-NSNR-011` | 8,9,10 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-019` | 4,8,10 | `NSNR-ELEM-TAN-*`, `NSNR-STATE-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-019` | 4,8,10,11 | `NSNR-ELEM-TAN-*`, `NSNR-STATE-*`, `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024..025` |
|
||||
| `FESA-REQ-NSNR-020` | 1 | `NSNR-IO-*` |
|
||||
| `FESA-REQ-NSNR-021` | 8,9,10 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-024` | 7,10 | `NSNR-LOG-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-021` | 8,9,10,11 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*`, `NSNR-HDF5-014` |
|
||||
| `FESA-REQ-NSNR-024` | 7,10,11 | `NSNR-LOG-012`, `NSNR-PROC-*`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-083` | 0,10,12 | `NSNR-CLI-*`, `NSNR-PROC-*`, `NSNR-EVID-*` |
|
||||
| `FESA-REQ-NSNR-026` | 8,10,11,12 | `NSNR-STATE-*`, `NSNR-PROC-*`, `NSNR-REF-*`, `NSNR-EVID-*` |
|
||||
| `FESA-REQ-NSNR-030` | 2,3,4,5,6,7,8,9,10,11 | `NSNR-ROT-*`, `NSNR-ELEM-*`, `NSNR-CTRL-*`, `NSNR-SOLVER-*`, `NSNR-LOG-*`, `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*`, `NSNR-REF-*` |
|
||||
| `FESA-REQ-NSNR-034` | 11 | `NSNR-REF-*` |
|
||||
| `FESA-REQ-NSNR-026` | 8,10,11,12 | `NSNR-STATE-*`, `NSNR-PROC-*`, `NSNR-REF-020..023`, `NSNR-EVID-*` |
|
||||
| `FESA-REQ-NSNR-030` | 2,3,4,5,6,7,8,9,10,11 | `NSNR-ROT-*`, `NSNR-ELEM-*`, `NSNR-CTRL-*`, `NSNR-SOLVER-*`, `NSNR-LOG-*`, `NSNR-STATE-*`, `NSNR-HDF5-014`, `NSNR-PROC-019`, `NSNR-REF-022`, `NSNR-REF-024..025` |
|
||||
| `FESA-REQ-NSNR-034` | 11,12 | `NSNR-REF-020..023`, `NSNR-EVID-003..007` |
|
||||
|
||||
## Numerical Review Coverage
|
||||
|
||||
@@ -211,42 +271,71 @@ Step 11 must not run original reference input paths directly. It snapshots exact
|
||||
| patch/sign recovery | 3,4 |
|
||||
| load/boundary path and `rho_M` | 5,10 |
|
||||
| Newton factor/iteration lifecycle | 5,7,10 |
|
||||
| four convergence gates | 5,7,10 |
|
||||
| four convergence gates | 5,7,10,11; preserved partial selector/control/log work is regression-verified in Step 11 |
|
||||
| global balance/current-arm/spatial moment | 11 |
|
||||
| review-only local reaction and fine/coarse reference | 11,12 |
|
||||
| commit/rollback/determinism | 8,10,11,12 |
|
||||
|
||||
## Validation Commands
|
||||
|
||||
Each Step must:
|
||||
|
||||
1. Recheck `.harness/config.json`. If present, use the configured Harness build/test commands.
|
||||
2. If absent, use:
|
||||
1. Use the ignored `.harness/config.json` preset contract and tracked `CMakePresets.json`.
|
||||
2. Confirm the Harness parent environment was initialized by VsDevCmd x64 and contains `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, and `HDF5_DIR`.
|
||||
3. Run:
|
||||
|
||||
```powershell
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 `
|
||||
"-DFESA_GTEST_SOURCE_DIR=$gtestSource" `
|
||||
"-DMKL_DIR=$mklDir" `
|
||||
"-DTBB_DIR=$tbbDir" `
|
||||
"-DHDF5_DIR=$hdf5Dir"
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
cmake --preset windows-msvc-ninja-debug
|
||||
cmake --build --preset windows-msvc-ninja-debug
|
||||
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
Focused CTest commands are written explicitly in each `stepN.md`.
|
||||
Step 11 focused commands additionally include:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearConvergence|NewtonIterationLog)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticProcedure|NonlinearHdf5ResultsWriter)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure
|
||||
```
|
||||
|
||||
Harness Python validation is not in scope unless a Step changes Harness Python behavior, hook behavior, or agent configuration.
|
||||
|
||||
## Risks And Downstream Handoff
|
||||
|
||||
- Main implementation risk: current `LinearStaticAnalysis` owns parse/map and HDF5 write internally. Step 10 must refactor through prepared analysis flow so log close precedes HDF5 finalization for both linear and nonlinear runs.
|
||||
- Main numerical risk: nonlinear MITC4 tangent and finite rotation derivatives must pass internal derivative/objectivity tests before reference comparison can be meaningful.
|
||||
- Main backend risk: nonlinear tangent can be nonsymmetric. Preserve SPD `MklPardisoSolver` unchanged and add separate `TangentSolver`.
|
||||
- Handoff to Implementation Agent through Coordinator: execute Steps 0..12 in order, one current Step at a time, with RED observed failure evidence before GREEN implementation, then focused/full CTest. Final reference gate is Step 11; evidence-document closure is Step 12.
|
||||
- Current numerical risk: nonzero prescribed motion exposes the existing raw-residual/initial-arm
|
||||
shortcut. The minimal fix must preserve same-state, stable-order and mask-before-spatial-conversion
|
||||
semantics; passing zero-prescribed shellNL cases alone is insufficient evidence.
|
||||
- Current reference risk: fine/coarse U and internal balance/free-residual are blocking, but local RF/RM
|
||||
may still show large review-only errors. Do not convert those findings into omitted rows, relaxed
|
||||
tolerance or a blocking gate.
|
||||
- Current worktree risk: Step 11 contains partial selector/comparator/CMake edits. Preserve and continue
|
||||
those files; do not delete, reset, replay selector RED or replace the comparator design wholesale.
|
||||
- Handoff to Implementation Agent through Coordinator: after a separate explicit Harness request,
|
||||
resume only Executor-selected Step 11. Preserve existing `NSNR-PROC-019`, `NSNR-HDF5-014` and
|
||||
`NSNR-REF-020..023`; first re-observe the current-case old-gate RED, then add `NSNR-REF-024..025`
|
||||
before changing the comparator-only shared force/moment gate to `1e-8`. Verify preserved
|
||||
selector/log tests, then run focused/full preset validation.
|
||||
Step 12 remains actual-evidence closure.
|
||||
|
||||
## Harness Step Draft
|
||||
|
||||
| Step | name | one-module scope | prerequisites | stop condition |
|
||||
| ---: | --- | --- | --- | --- |
|
||||
| 11 | `equilibrium-projection-and-reference-gate` | Nonlinear accepted equilibrium projection, exact HDF5 location and test-private reference gate | Steps 0–10 completed; approved upstream hashes; partial Step 11 work preserved; VsDevCmd/preset dependency environment | Stop on unexpected RED, public API/schema/tolerance/reference change, reference mutation, or any focused/full failure. |
|
||||
| 12 | `execution-closure-and-evidence-docs` | Fresh evidence reports plus directly superseded PRD/ARCH/ADR statements | Step 11 completed with actual command/reference evidence | Stop if Step 11 is incomplete, evidence is stale/untraceable, a code/test/CMake change is needed, or any final command fails. |
|
||||
|
||||
Both Step files contain exact commands, file ownership, RED/GREEN/VERIFY order and prohibitions.
|
||||
Materialization does not select or execute either Step.
|
||||
|
||||
## Open Issues
|
||||
|
||||
None.
|
||||
None blocking planning. Revised upstream contracts and exact required artifacts are complete; actual
|
||||
RED/GREEN/build/reference outcomes remain Step 11/12 evidence and are not pre-claimed.
|
||||
|
||||
## Plan Approval Boundary
|
||||
|
||||
The user-approved plan and pending phase files do not authorize Harness execution. `scripts/execute.py nonlinear-static-newton-raphson` requires a separate explicit user request.
|
||||
The Coordinator-audited REAPPROVAL-012 revision authorizes this planning/phase materialization and
|
||||
blocked-to-pending recovery. It does not itself execute Harness; Executor invocation remains under
|
||||
the Coordinator's separately audited execution authority.
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# Nonlinear Static Newton-Raphson Implementation Report
|
||||
|
||||
## Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| phase step | `12: execution-closure-and-evidence-docs` |
|
||||
| owner_agent | `implementation-agent` |
|
||||
| evidence date | `2026-08-28` |
|
||||
| repository HEAD before this Step's documentation edits | `d275e844f27107cfab52309025e259f2156345d2` |
|
||||
| classification | `pass-for-physics-evaluation` |
|
||||
|
||||
## Freshness audit (RED)
|
||||
|
||||
Before any build or reference command, `NSNR-EVID-001..007` failed as expected.
|
||||
`implementation-report.md`, `build-test.md`, and `reference-comparison.md` were absent. The
|
||||
global documents still advertised `--output`, only the prior linear output path, and did not state
|
||||
the approved nonlinear current-arm/reaction and fine/coarse reference dispositions. This was an
|
||||
evidence freshness failure, not a solver failure. No report was created until the fresh commands
|
||||
below completed.
|
||||
|
||||
## Approved inputs and preserved Step history
|
||||
|
||||
The consumed upstream document SHA-256 values were: requirements
|
||||
`89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`, research
|
||||
`4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`, formulation
|
||||
`878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`, numerical review
|
||||
`C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C`, reference model
|
||||
`B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`, I/O
|
||||
`ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, implementation plan
|
||||
`CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, and corrections
|
||||
`4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`.
|
||||
|
||||
Steps 0--10 remain unchanged: derived output/log lease; NLGEOM Domain controls; finite rotations;
|
||||
nonlinear MITC4 kinematics/recovery; residual/tangent; load/BC/convergence gates; tangent solver;
|
||||
iteration log; transactional state; nonlinear HDF5 v1; and prepared parse-once dispatch/finalization.
|
||||
|
||||
## Step 11 RED to GREEN evidence
|
||||
|
||||
The preserved Step 11 transcript SHA-256 is
|
||||
`292FE06B7F97B1CBE267A36D875342B300E82486B76BDCBCD31EE2192A87ACE3`.
|
||||
Its RED evidence covered: initial-arm/raw rotation balance (`NSNR-PROC-019`), obsolete
|
||||
`location=global-origin` (`NSNR-HDF5-014`), missing fine inventory (`NSNR-REF-020`), blocking
|
||||
local RF/RM (`NSNR-REF-021`), obsolete `1e-10` balance rejection (`NSNR-REF-022`), pre-tolerance
|
||||
row rejection (`NSNR-REF-023`), inclusive `1e-8` boundary (`NSNR-REF-024`), and exact-zero scale
|
||||
(`NSNR-REF-025`).
|
||||
|
||||
The minimal GREEN slice was limited to the nonlinear procedure current-arm/spatial balance
|
||||
projection, HDF5 location metadata/self-check, and test-private reference comparator/case
|
||||
inventory. The relevant production files were `nonlinear_static_procedure.cpp`,
|
||||
`nonlinear_hdf5_results_writer.cpp`, and `hdf5_self_check.cpp`; test changes remained in the
|
||||
procedure, writer, convergence/log, and reference-comparator tests. This Step made no C++, test,
|
||||
CMake, Harness, tolerance, or reference-artifact change.
|
||||
|
||||
Fresh VERIFY reran the preserved controls. The focused `NonlinearStaticProcedure` and
|
||||
`NonlinearHdf5ResultsWriter` command passed 7/7, including
|
||||
`NonzeroPrescribedMotionWritesCurrentArmSpatialAppliedPlusReactionBalance` and
|
||||
`WritesSchemaV1GlobalBalanceErrorLocation`. The reference command passed the inclusive and
|
||||
exact-zero global gate tests. This closes `AUDIT-001`: the tests exercise nonzero prescribed
|
||||
translation and rotation, `x=X+u`, component-mask-before-conversion, independently converted
|
||||
applied and constrained rotation covectors, and `location=global-balance-error`.
|
||||
|
||||
## Requirement and test traceability
|
||||
|
||||
| evidence | fresh result |
|
||||
| --- | --- |
|
||||
| `NSNR-CTRL-018..021` convergence controls | 6/6 `NonlinearConvergence.*` passed |
|
||||
| `NSNR-LOG-012` iteration-log contract | 8/8 `NewtonIterationLog.*` passed |
|
||||
| `NSNR-PROC-019` current-arm balance | passed in focused 7-test procedure/writer run |
|
||||
| `NSNR-HDF5-014` v1 equilibrium location | passed in focused 7-test procedure/writer run |
|
||||
| `NSNR-REF-020..025` portfolio, dispositions, prechecks, 1e-8 and zero-scale | 9/9 `NonlinearStaticReference.*` passed twice and in full CTest |
|
||||
| blocking external/internal final gate | all 302 CTest tests passed; detailed metrics are in `reference-comparison.md` |
|
||||
|
||||
## Handoff and open issues
|
||||
|
||||
Implementation-owned classification is `pass-for-physics-evaluation`. The only numerical
|
||||
differences retained are six deterministic local RF/RM review-only findings; they do not alter
|
||||
the blocking verdict. No warning-only UR family failed. This report does not claim physics or
|
||||
release readiness, and numerical agreement does not assert Abaqus S4 internal formulation
|
||||
equivalence.
|
||||
|
||||
No Step 12 production behavior changed. Reference inputs and CSV files were read-only and their
|
||||
pre/post inventory, byte sizes, timestamps, and SHA-256 values were identical.
|
||||
@@ -4,20 +4,22 @@
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirement: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirement_sha256: `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2`
|
||||
- source_requirement_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_research_sha256: `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`
|
||||
- source_research_sha256: `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_formulation_sha256: `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`
|
||||
- source_formulation_sha256: `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`
|
||||
- source_numerical_review: `docs/nonlinear-static-newton-raphson/numerical-review.md`
|
||||
- source_numerical_review_sha256: `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01`
|
||||
- source_numerical_review_sha256: `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C`
|
||||
- source_reference_model: `docs/nonlinear-static-newton-raphson/reference-model.md`
|
||||
- source_reference_model_sha256: `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3`
|
||||
- source_reference_model_sha256: `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/PRD.md`,
|
||||
`docs/ARCHITECTURE.md`, `docs/ADR.md`, `docs/TOLERANCE.md`
|
||||
- status: `ready-for-coordinator-review`
|
||||
- owner_agent: `io-definition-agent`
|
||||
- date: `2026-08-23`
|
||||
- date: `2026-08-28`
|
||||
- authoritative_output: input sibling `<stem>_results.h5`
|
||||
- diagnostic_log: input sibling `<stem>_log.txt`
|
||||
- hdf5_schema_version: `1`
|
||||
@@ -386,15 +388,15 @@ failure도 entered iteration이 없으면 iteration record가 없는 log file만
|
||||
| 7 | `failing_stage` | `none` for completed gate records, otherwise failing stage enum |
|
||||
| 8 | `residual_force_channel` | literal `residual_force` or `not-evaluated(reason)` |
|
||||
| 9 | `residual_force_numerator_norm` | `||r_f^u||_inf` or `not-evaluated(reason)` |
|
||||
| 10 | `residual_force_denominator_scale` | `max(||f_int,f^u||_inf,||f_ext,f^u||_inf)` or `not-evaluated(reason)` |
|
||||
| 11 | `residual_force_branch` | `relative`, `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 10 | `residual_force_denominator_scale` | matching `||f_ext,f^u||_inf`가 exact zero이면 exact `0`; nonzero이면 `max(||f_int,f^u||_inf,||f_ext,f^u||_inf)`; 또는 `not-evaluated(reason)` |
|
||||
| 11 | `residual_force_branch` | matching external scale이 nonzero이면 `relative`, exact zero이면 `zero-scale`, 또는 `not-evaluated(reason)` |
|
||||
| 12 | `residual_force_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 13 | `residual_force_threshold_unit` | `1`, `force`, or `not-evaluated(reason)` |
|
||||
| 14 | `residual_force_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
| 15 | `residual_moment_channel` | literal `residual_moment` or `not-evaluated(reason)` |
|
||||
| 16 | `residual_moment_numerator_norm` | `||r_f^phi||_inf` or `not-evaluated(reason)` |
|
||||
| 17 | `residual_moment_denominator_scale` | `max(||f_int,f^phi||_inf,||f_ext,f^phi||_inf)` or `not-evaluated(reason)` |
|
||||
| 18 | `residual_moment_branch` | `relative`, `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 17 | `residual_moment_denominator_scale` | matching `||f_ext,f^phi||_inf`가 exact zero이면 exact `0`; nonzero이면 `max(||f_int,f^phi||_inf,||f_ext,f^phi||_inf)`; 또는 `not-evaluated(reason)` |
|
||||
| 18 | `residual_moment_branch` | matching external scale이 nonzero이면 `relative`, exact zero이면 `zero-scale`, 또는 `not-evaluated(reason)` |
|
||||
| 19 | `residual_moment_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 20 | `residual_moment_threshold_unit` | `1`, `force*length`, or `not-evaluated(reason)` |
|
||||
| 21 | `residual_moment_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
@@ -417,13 +419,29 @@ failure도 entered iteration이 없으면 iteration record가 없는 log file만
|
||||
| 38 | `outcome` | `accepted`, `continue`, `nonconverged`, or `failed` |
|
||||
| 39 | `diagnostic_code` | `none` or approved diagnostic code |
|
||||
|
||||
Completed gate record는 `failing_stage=none`이고 네 channel의 identity, numerator/norm,
|
||||
denominator/scale, branch, typed threshold, pass를 모두 finite 또는 enum value로 노출한다.
|
||||
Denominator가 exact zero이면 branch는 `zero-scale`이고 typed threshold는 residual force
|
||||
`1e-3 force`, residual moment `1e-3 force*length`, correction translation `1e-3 length`,
|
||||
correction rotation `1e-3 dimensionless`다. Denominator가 nonzero이면 branch는 `relative`이고
|
||||
threshold는 dimensionless `1e-2`다. Empty free channel은 numerator와 denominator가 exact zero인
|
||||
`zero-scale` branch로 평가한다.
|
||||
`nsnr-log-v1`의 39개 field label, order와 TAB-separated `label=value` serialization은
|
||||
변경하지 않는다. Completed gate record는 `failing_stage=none`이고 네 channel의 identity,
|
||||
numerator/norm, denominator/scale, branch, typed threshold, pass를 모두 finite 또는 enum
|
||||
value로 노출한다.
|
||||
|
||||
Residual channel은 required residual/internal/external vector와 그 infinity norm을 모두 finite로
|
||||
확인한 뒤 matching external scale `S_ext^u=||f_ext,f^u||_inf` 또는
|
||||
`S_ext^phi=||f_ext,f^phi||_inf` 자체로 branch를 선택한다. Matching external scale이 exact
|
||||
zero이면 `residual_*_denominator_scale=0`, `residual_*_branch=zero-scale`로 직렬화하고 numerator에
|
||||
typed absolute `1e-3 force` 또는 `1e-3 force*length`를 inclusive `<=`로 직접 적용한다.
|
||||
이 exact `0`은 matching external selector를 직렬화하며 divisor 또는 internal-inclusive max가
|
||||
아니다. Selector predicate는 `S_ext==0`이고 tolerance band, zero clamp, `max(1,...)`를 쓰지 않는다.
|
||||
Internal scale 또는 residual numerator가 nonzero여도 이 branch를 `relative`로 바꾸지 않는다.
|
||||
Matching external scale이 nonzero이면 `residual_*_denominator_scale`은 retained
|
||||
`max(||f_int,f||_inf,||f_ext,f||_inf)`이고 `residual_*_branch=relative`이며, numerator/denominator
|
||||
ratio에 dimensionless `1e-2`를 inclusive `<=`로 적용한다. 이 branch에 typed absolute gate를
|
||||
OR로 추가하지 않는다.
|
||||
|
||||
Correction channel은 기존 계약 그대로 current-trial incremental-solution denominator가 exact
|
||||
zero이면 `zero-scale`과 typed `1e-3 length` 또는 `1e-3 dimensionless`를, nonzero이면
|
||||
`relative`와 dimensionless `1e-2`를 사용한다. Empty free channel은 exact-zero numerator/scale의
|
||||
typed `zero-scale` branch로 평가한다. 네 channel의 pass는 `combined_pass`에서 logical AND로만
|
||||
결합한다.
|
||||
|
||||
Early failure record는 entered iteration 하나에 대응한다. 이미 계산된 earlier fields는 실제
|
||||
finite value를 기록하고, 실패 stage 뒤의 모든 later field는 `not-evaluated(reason)`을 기록한다.
|
||||
@@ -523,19 +541,43 @@ row는 정확히 하나다. Factor zero는 이 dataset에 row를 갖지 않고 `
|
||||
| generalized internal force | `/steps/Step-1/frames/<frame>/nodal/generalized_internal_force` | `[node_count,6]` float64 | node row; `[FI1,FI2,FI3,MI_PHI1,MI_PHI2,MI_PHI3]` | `[force x3,force*length x3]`; work-conjugate to `[u,phi]`; nodal |
|
||||
| generalized external force | `/steps/Step-1/frames/<frame>/nodal/generalized_external_force` | `[node_count,6]` float64 | node row; `[FE1,FE2,FE3,ME_PHI1,ME_PHI2,ME_PHI3]` | `[force x3,force*length x3]`; work-conjugate to `[u,phi]`; approved physical moment projection 후 fixed-global dead loads; nodal |
|
||||
| generalized residual | `/steps/Step-1/frames/<frame>/nodal/generalized_residual` | `[node_count,6]` float64 | node row; `[RU1,RU2,RU3,RPHI1,RPHI2,RPHI3]` | `[force x3,force*length x3]`; nonlinear solution coordinate의 full assembled `f_int-f_ext`; nodal |
|
||||
| reaction / physical residual projection | `/steps/Step-1/frames/<frame>/nodal/reaction` | `[node_count,6]` float64 | node row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force x3,force*length x3]`; global; constrained entry는 physical reaction, free entry는 same-state equilibrium evidence; rotational columns는 `J_l(phi)^(-T)` spatial moment conversion |
|
||||
| reaction / spatial full-residual projection | `/steps/Step-1/frames/<frame>/nodal/reaction` | `[node_count,6]` float64 | node row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force x3,force*length x3]`; global; translation은 full generalized residual과 같고 rotation은 `J_l(phi)^(-T)` spatial moment conversion. Constrained reaction은 mask를 generalized residual에 먼저 적용한 뒤 변환하며 accepted free residual의 authority는 이 dataset이 아니라 `nodal/generalized_residual`이다. |
|
||||
| shell local frame | `/steps/Step-1/frames/<frame>/element/shell/local_frame` | `[element_count,4,3,3]` float64 | element row, midsurface location row `GP1..GP4`, axis row `[E1,E2,E3]`, global component column `[X,Y,Z]` | dimensionless; physical recovery용 fixed-initial shell local frame; rotating Abaqus output frame이 아님 |
|
||||
| generalized strain | `/steps/Step-1/frames/<frame>/element/shell/generalized_strain` | `[element_count,4,8]` float64 | element row, `GP1..GP4`; `[E11,E22,G12,K11,K22,K12,G13,G23]` | `[1,1,1,1/length,1/length,1/length,1,1]`; fixed-reference shell local; midsurface |
|
||||
| section resultant | `/steps/Step-1/frames/<frame>/element/shell/section_resultant` | `[element_count,4,8]` float64 | element row, `GP1..GP4`; `[N11,N22,N12,M11,M22,M12,Q13,Q23]` | `[force/length x3,force x3,force/length x2]`; fixed-reference shell local; midsurface |
|
||||
| in-plane stress | `/steps/Step-1/frames/<frame>/element/shell/stress` | `[element_count,4,3,3]` float64 | element row, `GP1..GP4`, section position `[BOTTOM,MIDDLE,TOP]`, component `[S11,S22,S12]` | `force/length^2`; fixed-reference shell local; direct bottom/middle/top evaluation |
|
||||
| physical strain energy | `/steps/Step-1/frames/<frame>/global/energy` | `[1]` float64 | `[PHYSICAL_STRAIN_ENERGY]` | `force*length`; deterministic element reduction; numerical drilling stabilization 제외 |
|
||||
| global equilibrium | `/steps/Step-1/frames/<frame>/global/equilibrium` | `[6]` float64 | `[FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]` | `[force x3,force*length x3]`; global Cartesian; moment about global origin `[0,0,0]`, current force arms와 spatial physical nodal moments 사용 |
|
||||
| global applied-plus-reaction balance error | `/steps/Step-1/frames/<frame>/global/equilibrium` | `[6]` float64 | `[FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]` | `[force x3,force*length x3]`; global Cartesian; formulation §13.4의 applied-plus-constrained-reaction balance error; moment about global origin `[0,0,0]`, current force arms와 spatial physical nodal moments 사용; `location=global-balance-error` |
|
||||
|
||||
Trial Newton state, iteration history, line search, cutback attempt, damping, automatic
|
||||
stabilization, numerical drilling stress, drilling energy ratio, `S33`, `S13`, `S23`,
|
||||
nodal stress extrapolation, element-corner stress, averaged stress, Abaqus integration-point
|
||||
number에 대한 HDF5 dataset은 만들지 않는다.
|
||||
|
||||
#### 7.5.1 Equilibrium Projection and Schema Compatibility
|
||||
|
||||
Schema version `1`과 기존 `/global/equilibrium` path/shape는 유지한다. 기존 계약이 이미
|
||||
global origin `[0,0,0]`, current force arm과 spatial physical nodal moment를 지정했으므로 이
|
||||
dataset의 authoritative meaning은 처음부터 formulation §13.4의 **global
|
||||
applied-plus-reaction balance error**다. Raw full-residual sum, initial-coordinate arm 또는 raw
|
||||
rotation-coordinate covector를 이 path에 쓰는 것은 schema-compatible implementation이 아니다.
|
||||
이 의미 명확화는 path, shape 또는 component를 바꾸지 않으므로 schema version을 올리지 않는다.
|
||||
|
||||
같은 accepted frame의 세 equilibrium quantity는 다음처럼 서로 다른 HDF5 projection으로
|
||||
재구성된다. 별도 중복 summary dataset은 만들지 않는다.
|
||||
|
||||
| logical quantity | authoritative HDF5 projection | coordinates / units | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| accepted free residual | `/model/nodal_constraint_mask==0`인 component를 `/nodal/generalized_residual`에서 선택한다. NSNR-069 scale은 같은 free component의 `/nodal/generalized_internal_force`와 `/nodal/generalized_external_force`에서 계산한다. | translation channel은 global force, rotation-coordinate channel은 generalized force-length | `blocking-internal` |
|
||||
| constrained reaction resultant | `/model/nodal_constraint_mask`를 `/nodal/generalized_residual`에 먼저 적용해 constrained generalized reaction을 만들고, rotation block만 accepted `phi`의 `J_l(phi)^(-T)`로 spatial moment로 변환한다. Current position은 `/model/nodes.coordinates + /nodal/displacement[UX,UY,UZ]`다. Stable node order로 `sum(F_react)`와 `sum(x cross F_react + M_react)`를 계산한다. | global force `[3]`, global spatial force-length moment `[3]` about `[0,0,0]` | `review-only-summary` |
|
||||
| applied-plus-reaction balance error | required dataset `/global/equilibrium`; applied contribution은 accepted `/nodal/generalized_external_force`의 translation block과 `J_l(phi)^(-T)`로 변환한 rotational block, reaction contribution은 바로 위 constrained projection을 사용한다. Stable node order로 formulation §13.4의 합을 계산한다. | global force `[3]`, global spatial force-length moment `[3]` about `[0,0,0]` | `blocking-internal` |
|
||||
|
||||
Componentwise constraint selection은 spatial moment 변환보다 먼저 수행한다. 따라서 partial
|
||||
rotational constraint나 nonzero prescribed rotation에서도 constrained reaction resultant에 free
|
||||
generalized residual이 섞이지 않는다. Local `/nodal/reaction` display나 full residual sum을 위 세
|
||||
quantity 중 다른 하나의 substitute로 사용하지 않는다. Nonzero prescribed translation에서는
|
||||
initial position이 아니라 accepted current position을 force arm으로 사용한다.
|
||||
|
||||
### 7.6 Diagnostics Dataset
|
||||
|
||||
`/diagnostics`는 mandatory이며 row가 0개일 수 있다.
|
||||
@@ -568,9 +610,13 @@ CSV는 FESA output이 아니다. HDF5에서 추출한 deterministic CSV view는
|
||||
|
||||
| case id | role | exact path | comparison disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `shellnl-s4-final` | nonlinear input | `reference/shellNL/shellNL.inp` | required source input |
|
||||
| `shellnl-s4-final` | displacement CSV | `reference/shellNL/shellNL displacements.csv` | required comparison |
|
||||
| `shellnl-s4-final` | reaction CSV | `reference/shellNL/shellNL reactions.csv` | constrained nodes/components only required comparison |
|
||||
| `shellnl-meshfine-s4-final` | primary nonlinear input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | required source input |
|
||||
| `shellnl-meshfine-s4-final` | displacement CSV | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning comparison |
|
||||
| `shellnl-meshfine-s4-final` | reaction CSV | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | constrained nodes/components only required review |
|
||||
| `shellnl-meshfine-s4-final` | stress CSV | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional read-only inspection/order evidence only |
|
||||
| `shellnl-s4-final` | companion nonlinear input | `reference/shellNL/shellNL.inp` | required source input |
|
||||
| `shellnl-s4-final` | displacement CSV | `reference/shellNL/shellNL displacements.csv` | required blocking/warning comparison |
|
||||
| `shellnl-s4-final` | reaction CSV | `reference/shellNL/shellNL reactions.csv` | constrained nodes/components only required review |
|
||||
| `shellnl-s4-final` | stress CSV | `reference/shellNL/shellNL stresses.csv` | optional read-only inspection/order evidence only |
|
||||
| `shell-s4-linear-limit` | linear control input | `reference/shell/shell.inp` | existing linear MITC4 contract의 required regression input |
|
||||
| `shell-s4-linear-limit` | displacement CSV | `reference/shell/shell displacements.csv` | required regression comparison |
|
||||
@@ -578,21 +624,22 @@ CSV는 FESA output이 아니다. HDF5에서 추출한 deterministic CSV view는
|
||||
| `shell-s4-linear-limit` | stress CSV | `reference/shell/shell stresses.csv` | optional read-only inspection/order evidence only |
|
||||
|
||||
Reference artifact file은 workflow에서 rename, rewrite, normalize, zero-clamp, repair,
|
||||
regenerate하지 않는다.
|
||||
regenerate하지 않는다. Fine과 coarse nonlinear case는 각각 자기 input/CSV에 독립적으로
|
||||
비교하며 cross-mesh row mapping이나 interpolation을 만들지 않는다.
|
||||
|
||||
### 8.2 Accepted-State and Frame Mapping
|
||||
|
||||
- `shellnl-s4-final`은 accepted factor-one HDF5 frame만 비교한다. 해당 frame은
|
||||
`/steps/Step-1/accepted_frames`에서 `is_factor_one=1`이고 `load_factor=1.0`인 unique row다.
|
||||
그 `frame_index`가 `/steps/Step-1/frames/<frame>`를 선택한다.
|
||||
- Required `shellNL` CSV row는 exact `Frame` value
|
||||
`Increment 10: Step Time = 1.000`만 가져야 하며, 이는 accepted factor-one state로
|
||||
논리 매핑한다. Required row에 다른 `Frame` 값이 있으면 schema mismatch다.
|
||||
- `shellnl-meshfine-s4-final`과 `shellnl-s4-final`은 각각 accepted factor-one HDF5 frame만
|
||||
비교한다. 해당 frame은 `/steps/Step-1/accepted_frames`에서 `is_factor_one=1`이고
|
||||
`load_factor=1.0`인 unique row다. 그 `frame_index`가
|
||||
`/steps/Step-1/frames/<frame>`를 선택한다.
|
||||
- 두 nonlinear case의 required CSV row는 exact `Frame` value
|
||||
`Increment 10: Step Time = 1.000`만 가져야 하며, 이는 각 case의 accepted
|
||||
factor-one state로 논리 매핑한다. Required row에 다른 `Frame` 값이 있으면 schema mismatch다.
|
||||
- `shell-s4-linear-limit` CSV에는 `Frame` column이 없으며
|
||||
`docs/linear-static-mitc4-shell/io.md`의 existing linear MITC4 final frame
|
||||
`/steps/Step-1/frames/0`에 매핑한다.
|
||||
- Trial Newton state, iteration log line, optional stress inventory row는 reference row가
|
||||
아니다.
|
||||
- Trial Newton state, iteration log line, optional stress inventory row는 reference row가 아니다.
|
||||
|
||||
### 8.3 Nodal Displacement Projection
|
||||
|
||||
@@ -602,93 +649,141 @@ Required logical key는 다음과 같다.
|
||||
(case_id, accepted_state, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
두 case 모두 instance `PART-1-1`에서 node label `1..49`가 정확히 한 번씩 필요하다.
|
||||
Instance matching은 case-insensitive로 수행하되 report에는 raw spelling을 보존한다.
|
||||
Instance `PART-1-1`에서 linear/coarse case는 node label `1..49`, fine case는 `1..729`를
|
||||
각각 정확히 한 번 요구한다. Instance matching은 case-insensitive로 수행하되 report에는 raw
|
||||
spelling을 보존한다. Row order는 identity가 아니다.
|
||||
|
||||
| CSV column | comparison component | nonlinear HDF5 source | linear regression HDF5 source |
|
||||
| --- | --- | --- | --- |
|
||||
| `U-U1` | `U1` | `nodal/displacement` column `UX` | `nodal/displacement` column `UX` |
|
||||
| `U-U2` | `U2` | `nodal/displacement` column `UY` | `nodal/displacement` column `UY` |
|
||||
| `U-U3` | `U3` | `nodal/displacement` column `UZ` | `nodal/displacement` column `UZ` |
|
||||
| `UR-UR1` | `UR1` | `nodal/displacement` column `URX` | `nodal/displacement` column `URX` |
|
||||
| `UR-UR2` | `UR2` | `nodal/displacement` column `URY` | `nodal/displacement` column `URY` |
|
||||
| `UR-UR3` | `UR3` | `nodal/displacement` column `URZ` | `nodal/displacement` column `URZ` |
|
||||
| `U-U1` | `U1` | factor-one `nodal/displacement` column `UX` | final `nodal/displacement` column `UX` |
|
||||
| `U-U2` | `U2` | factor-one `nodal/displacement` column `UY` | final `nodal/displacement` column `UY` |
|
||||
| `U-U3` | `U3` | factor-one `nodal/displacement` column `UZ` | final `nodal/displacement` column `UZ` |
|
||||
| `UR-UR1` | `UR1` | factor-one `nodal/displacement` column `URX` | final `nodal/displacement` column `URX` |
|
||||
| `UR-UR2` | `UR2` | factor-one `nodal/displacement` column `URY` | final `nodal/displacement` column `URY` |
|
||||
| `UR-UR3` | `UR3` | factor-one `nodal/displacement` column `URZ` | final `nodal/displacement` column `URZ` |
|
||||
|
||||
`U1/U2/U3`는 blocking이다. `UR1/UR2/UR3`는 두 case 모두 warning-only다. UR warning
|
||||
`U1/U2/U3`는 blocking이다. `UR1/UR2/UR3`는 모든 case에서 warning-only다. UR warning
|
||||
exceedance는 blocking verdict를 바꾸지 않는다.
|
||||
|
||||
### 8.4 Nonlinear Constrained Reaction Projection
|
||||
### 8.4 Nonlinear Local Reaction Review Projection
|
||||
|
||||
Reaction comparison은 `shellnl-s4-final`에만 적용하며 input boundary mask의 constrained node
|
||||
중 아래 24개 node에만 적용한다.
|
||||
Reaction review row는 input boundary mask로 선택한다.
|
||||
|
||||
```text
|
||||
1,3,4,5,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,33
|
||||
```
|
||||
- coarse `shellnl-s4-final`: `1,3..9,14..17,22..33` — 24 nodes;
|
||||
- fine `shellnl-meshfine-s4-final`: `1,3..9,34..57,82..153` — 104 nodes.
|
||||
|
||||
승인 input에서 이 24개 node는 여섯 global DOF가 모두 constrained다. Comparator는 required
|
||||
HDF5 reaction row eligibility를 CSV zero value가 아니라 `/model/nodal_constraint_mask`와
|
||||
source node identity에서 도출한다.
|
||||
승인 input에서 위 node들은 여섯 global DOF가 모두 constrained다. Comparator는 row
|
||||
eligibility를 CSV zero value나 row position이 아니라 `/model/nodal_constraint_mask`와 source
|
||||
node identity에서 도출한다. Translation reaction은 factor-one
|
||||
`nodal/generalized_residual`의 constrained `RU1..RU3`이고, rotational reaction은 constrained
|
||||
`RPHI1..RPHI3`를 먼저 선택한 뒤 accepted `phi`의 `J_l(phi)^(-T)`로 변환한 spatial physical
|
||||
moment다. Stored all-six-constrained rows에서는 factor-one `/nodal/reaction`의 대응 column과
|
||||
동일해야 한다.
|
||||
|
||||
| CSV columns | logical family | HDF5 source | disposition |
|
||||
| CSV columns | coarse family | fine family | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `RF-RF1`, `RF-RF2` | `nonlinear.reaction_inplane_force` | factor-one `/nodal/reaction` columns `RF1,RF2` | blocking |
|
||||
| `RF-RF3` | `nonlinear.reaction_transverse_force` | factor-one `/nodal/reaction` column `RF3` | blocking |
|
||||
| `RM-RM1`, `RM-RM2` | `nonlinear.reaction_physical_moment` | factor-one `/nodal/reaction` columns `RM1,RM2`; `J_l(phi)^(-T)` 변환 뒤 spatial physical moment | blocking |
|
||||
| `RM-RM3` | excluded | comparison projection 없음 | blocking 및 warning-only family에서 제외 |
|
||||
| `RF-RF1`, `RF-RF2` | `coarse.local_reaction_inplane_force` | `fine.local_reaction_inplane_force` | `review-only` |
|
||||
| `RF-RF3` | `coarse.local_reaction_transverse_force` | `fine.local_reaction_transverse_force` | `review-only` |
|
||||
| `RM-RM1`, `RM-RM2` | `coarse.local_reaction_physical_moment` | `fine.local_reaction_physical_moment` | `review-only` |
|
||||
| `RM-RM3` | comparison projection 없음 | comparison projection 없음 | `excluded` |
|
||||
|
||||
Raw generalized rotation-coordinate residual column은 Abaqus `RM` CSV column과 직접 비교하지
|
||||
않는다.
|
||||
Raw generalized rotation-coordinate residual은 Abaqus `RM` CSV column과 직접 비교하지 않는다.
|
||||
Review-only family도 source key, schema, inventory, finite value와 모든 row/common-policy error를
|
||||
보고한다. 그 precheck 또는 numerical finding은 blocking verdict를 바꾸지 않는다.
|
||||
|
||||
### 8.5 Comparison Families
|
||||
### 8.5 Internal Factor-One Equilibrium Projection
|
||||
|
||||
Internal equilibrium은 Abaqus CSV comparison이 아니다. Fine primary와 coarse companion의
|
||||
각 accepted factor-one HDF5 frame에서 Section 7.5.1의 projection을 사용한다.
|
||||
|
||||
| family id | exact HDF5 rows/components | gate |
|
||||
| --- | --- | --- |
|
||||
| `coarse.accepted_free_force_residual` | 75 free `RU1/RU2/RU3` rows와 같은 rows의 internal/external force | NSNR-069 force channel |
|
||||
| `coarse.accepted_free_moment_residual` | 75 free `RPHI1/RPHI2/RPHI3` rows와 같은 rows의 internal/external generalized moment | NSNR-069 moment channel |
|
||||
| `coarse.global_force_balance` | factor-one `/global/equilibrium` `FORCE_1..3` | normalized `<=1e-8` |
|
||||
| `coarse.global_moment_balance` | factor-one `/global/equilibrium` `MOMENT_1..3` | normalized `<=1e-8` |
|
||||
| `fine.accepted_free_force_residual` | 1,875 free `RU1/RU2/RU3` rows와 같은 rows의 internal/external force | NSNR-069 force channel |
|
||||
| `fine.accepted_free_moment_residual` | 1,875 free `RPHI1/RPHI2/RPHI3` rows와 같은 rows의 internal/external generalized moment | NSNR-069 moment channel |
|
||||
| `fine.global_force_balance` | factor-one `/global/equilibrium` `FORCE_1..3` | normalized `<=1e-8` |
|
||||
| `fine.global_moment_balance` | factor-one `/global/equilibrium` `MOMENT_1..3` | normalized `<=1e-8` |
|
||||
|
||||
Global balance의 force scale은 applied/reaction nodal force contribution의 2-norm 합 중 큰
|
||||
값, moment scale은 current-arm force moment와 spatial physical nodal moment contribution의
|
||||
2-norm 합 중 큰 값이다. Force와 moment를 분리해 `norm(balance_error)/scale<=1e-8`을
|
||||
적용한다. Scale이 exact zero이면 balance error도 exact zero일 때만 pass한다. Absolute floor,
|
||||
`max(1,S)` 또는 zero clamp는 없다. Accepted free residual은 NSNR-069의 external-channel exact-zero/
|
||||
nonzero branch를 그대로 재현한다. 이 internal gate에는 `docs/TOLERANCE.md`, Abaqus value 또는
|
||||
local reaction error를 적용하지 않는다.
|
||||
|
||||
Constrained reaction resultant force `[3]`와 moment `[3]`는 Section 7.5.1의 distinct
|
||||
`review-only-summary`로 함께 계산·보고한다. `/global/equilibrium`, constrained reaction
|
||||
resultant와 accepted free residual 중 어느 하나를 다른 quantity의 대체 dataset으로 쓰지 않는다.
|
||||
|
||||
### 8.6 External Comparison Families
|
||||
|
||||
External tolerance source는 정확히 `docs/TOLERANCE.md`다. 별도 absolute floor, `max(1,S)`
|
||||
clamp, row averaging, source-order matching, component calibration, zero clamp는 허용하지
|
||||
clamp, row averaging, source-order matching, component calibration 또는 zero clamp는 허용하지
|
||||
않는다.
|
||||
|
||||
| family id | case | components | required row count | units / coordinates | disposition |
|
||||
| --- | --- | --- | ---: | --- | --- |
|
||||
| `linear.translation` | `shell-s4-linear-limit` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking regression |
|
||||
| `linear.rotation` | `shell-s4-linear-limit` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.translation` | `shellnl-s4-final` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking |
|
||||
| `nonlinear.rotation` | `shellnl-s4-final` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.reaction_inplane_force` | `shellnl-s4-final` | `RF1,RF2` on constrained nodes | 48 | force / fixed-initial global plane | blocking |
|
||||
| `nonlinear.reaction_transverse_force` | `shellnl-s4-final` | `RF3` on constrained nodes | 24 | force / fixed-initial global transverse | blocking |
|
||||
| `nonlinear.reaction_physical_moment` | `shellnl-s4-final` | `RM1,RM2` on constrained nodes | 48 | force*length / global spatial | blocking |
|
||||
| `coarse.translation` | `shellnl-s4-final` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking |
|
||||
| `coarse.rotation` | `shellnl-s4-final` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `coarse.local_reaction_inplane_force` | `shellnl-s4-final` | `RF1,RF2` on constrained nodes | 48 | force / global shell plane | review-only |
|
||||
| `coarse.local_reaction_transverse_force` | `shellnl-s4-final` | `RF3` on constrained nodes | 24 | force / global transverse | review-only |
|
||||
| `coarse.local_reaction_physical_moment` | `shellnl-s4-final` | `RM1,RM2` on constrained nodes | 48 | force*length / global spatial | review-only |
|
||||
| `fine.translation` | `shellnl-meshfine-s4-final` | `U1,U2,U3` on nodes `1..729` | 2,187 | length / global | blocking |
|
||||
| `fine.rotation` | `shellnl-meshfine-s4-final` | `UR1,UR2,UR3` on nodes `1..729` | 2,187 | dimensionless / fixed-initial global | warning-only |
|
||||
| `fine.local_reaction_inplane_force` | `shellnl-meshfine-s4-final` | `RF1,RF2` on constrained nodes | 208 | force / global shell plane | review-only |
|
||||
| `fine.local_reaction_transverse_force` | `shellnl-meshfine-s4-final` | `RF3` on constrained nodes | 104 | force / global transverse | review-only |
|
||||
| `fine.local_reaction_physical_moment` | `shellnl-meshfine-s4-final` | `RM1,RM2` on constrained nodes | 208 | force*length / global spatial | review-only |
|
||||
|
||||
Reference-model read-only scale audit value는 다음과 같다.
|
||||
Reference-model read-only scale audit value는 다음과 같다. 이 값은 calibration 상수가 아니다.
|
||||
|
||||
| family id | `S=max(abs(reference))` | `0.01*S` |
|
||||
| --- | ---: | ---: |
|
||||
| `linear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `nonlinear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `nonlinear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `nonlinear.reaction_inplane_force` | `1.91663182` | `1.91663182e-2` |
|
||||
| `nonlinear.reaction_transverse_force` | `1.17769805e4` | `1.17769805e2` |
|
||||
| `nonlinear.reaction_physical_moment` | `1.95418418e4` | `1.95418418e2` |
|
||||
| `coarse.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `coarse.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.local_reaction_inplane_force` | `1.91663182` | `1.91663182e-2` |
|
||||
| `coarse.local_reaction_transverse_force` | `1.17769805e4` | `1.17769805e2` |
|
||||
| `coarse.local_reaction_physical_moment` | `1.95418418e4` | `1.95418418e2` |
|
||||
| `fine.translation` | `2.57957054e-5` | `2.57957054e-7` |
|
||||
| `fine.rotation` | `6.58704994e-6` | `6.58704994e-8` |
|
||||
| `fine.local_reaction_inplane_force` | `5.38827419e-1` | `5.38827419e-3` |
|
||||
| `fine.local_reaction_transverse_force` | `2.78506128e3` | `2.78506128e1` |
|
||||
| `fine.local_reaction_physical_moment` | `4.71557520e3` | `4.71557520e1` |
|
||||
|
||||
### 8.6 Row Prechecks
|
||||
### 8.7 Row Prechecks
|
||||
|
||||
아래 조건 중 하나라도 거짓이면 comparator는 tolerance 계산 전에 실패한다.
|
||||
Tolerance 또는 internal metric 전에 다음을 검사한다.
|
||||
|
||||
1. Exact declared input path와 required CSV path가 존재하고 readable이다.
|
||||
1. 각 case의 exact declared input과 해당 disposition에 필요한 CSV가 존재하고 readable이다.
|
||||
2. Reference CSV header는 surrounding whitespace trim 뒤 필요한 column을 가진다.
|
||||
3. `shellnl-s4-final` required row는 exact approved `Frame` value만 포함한다.
|
||||
3. 두 nonlinear case required row는 exact approved `Frame` value만 포함한다.
|
||||
4. HDF5 metadata, model rows, accepted-frame table, factor-one frame, required result dataset이
|
||||
문서화된 shape, component name, finite value를 가진다.
|
||||
5. Wide CSV row는 이 문서의 component mapping으로 component row로 expand한다.
|
||||
6. Required source wide key와 expanded component key는 unique하다. Duplicate reference 또는
|
||||
HDF5 key는 실패다.
|
||||
7. 각 declared family에서 FESA와 reference projected key set은 정확히 같아야 한다. Missing row와
|
||||
extra row는 모두 실패다.
|
||||
8. 모든 required numeric value는 finite다. Nonfinite HDF5 또는 CSV value는 tolerance 전 실패다.
|
||||
9. `shellNL` reaction row는 constrained mask와 exact 24-node list에서 선택한다. Free-node CSV
|
||||
row는 inventory only이며 zero reaction target으로 해석하지 않는다.
|
||||
10. Required row를 omit, synthesize, average, substitute identity로 sort, normalize, zero-clamp,
|
||||
repair하지 않는다.
|
||||
문서화된 shape, component name, attributes와 finite value를 가진다.
|
||||
5. Wide CSV row는 이 문서의 component mapping으로 component row로 deterministically expand한다.
|
||||
6. Source wide key와 expanded component key는 unique하다. Duplicate reference 또는 HDF5 key는
|
||||
affected family를 tolerance 전에 fail한다.
|
||||
7. Input node inventory와 source constraint mask로 expected key set을 만든다. CSV zero value나 row
|
||||
position으로 reaction identity를 추론하지 않는다.
|
||||
8. 각 declared external family에서 FESA와 reference projected key set은 exact equal해야 한다.
|
||||
Missing row와 extra row를 모두 fail한다.
|
||||
9. Required HDF5/CSV value, derived scale, norm과 metric은 모두 finite여야 한다.
|
||||
10. Internal free residual은 exact free mask와 force/moment channel을 보존한다. Global balance는 모든
|
||||
applied source와 constrained reaction을 stable source order로 정확히 한 번 사용한다.
|
||||
11. Local review row를 global resultant로 collapse하거나 대체하지 않는다. Review-only precheck/error는
|
||||
deterministic review failure로 기록하지만 blocking verdict를 변경하지 않는다.
|
||||
12. Warning-only precheck/tolerance failure는 deterministic warning을 만들고 blocking verdict를
|
||||
변경하지 않는다. Blocking precheck failure만 전체 external comparison을 fail한다.
|
||||
13. Row omission/synthesis, averaging, source-order matching, clamp, normalization 또는 artifact repair를
|
||||
허용하지 않는다.
|
||||
|
||||
### 8.7 Stress CSV Disposition
|
||||
### 8.8 Stress CSV Disposition
|
||||
|
||||
Optional stress CSV identity는 다음과 같다.
|
||||
|
||||
@@ -697,13 +792,16 @@ Optional stress CSV identity는 다음과 같다.
|
||||
element_corner_node_label, section_surface, component)
|
||||
```
|
||||
|
||||
현재 stress CSV는 element-corner node row와 `SPOS/SNEG` section surface에서 `S-S11`,
|
||||
`S-S22`, `S-S33`, `S-S12`를 포함하며, 저장된 ascending element-label block `1..36` 순서를
|
||||
갖는다. FESA HDF5는 `GP1..GP4`와 `BOTTOM/MIDDLE/TOP`에서 direct `[S11,S22,S12]`만 emit한다.
|
||||
Stored stress CSV는 element-corner node row와 `SPOS/SNEG` section surface에서 `S-S11`,
|
||||
`S-S22`, `S-S33`, `S-S12`를 포함한다. `reference/shell/shell stresses.csv`는 사용자가
|
||||
변경한 ascending element-label block `1..36` 순서를 갖지만 row order는 identity가 아니다.
|
||||
Fine stress CSV의 element `1`, `SNEG`, `Node Label=ss` 한 행은 optional excluded artifact
|
||||
finding으로만 기록한다. Artifact를 수정하지 않는다.
|
||||
|
||||
따라서 두 case의 stress CSV는 optional read-only inspection 및 order evidence only다. HDF5
|
||||
comparison projection, `S33` synthesis, nodal extrapolation, corner averaging, Gauss-to-corner
|
||||
matching, element-label-order identity는 없다.
|
||||
FESA HDF5는 `GP1..GP4`와 `BOTTOM/MIDDLE/TOP`에서 direct `[S11,S22,S12]`만 emit한다.
|
||||
따라서 모든 stored stress CSV는 optional read-only inspection/order evidence only다. HDF5
|
||||
numerical-comparison projection, `S33` synthesis, nodal extrapolation, corner averaging,
|
||||
Gauss-to-corner matching 또는 element-label-order matching은 없다.
|
||||
|
||||
## 9. Validation Rules
|
||||
|
||||
@@ -723,13 +821,14 @@ matching, element-label-order identity는 없다.
|
||||
| aggregate moment | exact-zero case 또는 preprocessing 및 모든 entered trial에서 `rho_M<=1e-12` | model/solver, exit `4` 또는 `5` |
|
||||
| nonlinear static data | 네 positive finite values, endpoint `1.0`, fixed increment sequence with final exact factor one | input, exit `3` |
|
||||
| Newton iteration | iteration identity `1..100`; iteration `100` acceptance 가능; iteration `101` 없음; line search/cutback/retry/fallback 없음 | solver, exit `5` |
|
||||
| convergence channels | residual force, residual moment, correction translation, correction rotation이 모두 inclusive `<=` rule 또는 typed zero-scale threshold 통과 | solver, exit `5` |
|
||||
| convergence channels | finite-first 평가 뒤 residual force/moment는 matching external scale exact-zero이면 typed absolute `1e-3`, nonzero이면 retained `max(internal,external)` relative `1e-2`; correction translation/rotation은 기존 denominator branch; 네 channel 모두 inclusive `<=`이고 logical AND | solver, exit `5` |
|
||||
| nonfinite data | required residual, tangent, correction, state, load, recovery, output value가 acceptance 전 finite | solver/output, exit `5` 또는 `6` |
|
||||
| commit/rollback | complete converged candidate만 commit; failure는 prior committed state와 prior authoritative final HDF5 보존 | solver/output, exit `5` 또는 `6` |
|
||||
| HDF5 schema | exact paths, shapes, attributes, schema version, row identities, finite values, accepted-frame table, diagnostics; final replace는 log close success 뒤에만 허용 | output, exit `6` |
|
||||
| HDF5 schema | exact paths, shapes, attributes, schema version, row identities, finite values, accepted-frame table, diagnostics; `/global/equilibrium`은 applied-plus-reaction balance error이고 accepted free residual/constrained reaction resultant와 분리됨; final replace는 log close success 뒤에만 허용 | output, exit `6` |
|
||||
| equilibrium projection | accepted free rows는 generalized residual과 exact free mask, constrained reaction은 mask-before-spatial-conversion, global balance는 applied plus constrained reaction/current arm/origin `[0,0,0]`; factor-one global force와 moment는 각각 dimension-separated normalized `<=1e-8`; 세 quantity가 같은 accepted state를 공유하되 서로 대체되지 않음 | solver/output/reference internal gate |
|
||||
| log | UTF-8 no BOM, LF, TAB-separated fixed `label=value` schema; entered Newton iteration마다 record 하나; no per-iteration stderr duplication; no-Newton procedure는 zero-byte empty log; open/write/flush/close fail-closed | output, exit `6` |
|
||||
| reference rows | exact required artifacts, headers, row keys, component keys, finite values, factor-one frame mapping | reference precheck |
|
||||
| tolerance | exact `docs/TOLERANCE.md` family-scale row/RMS policy; blocking/warning disposition 보존 | reference verification |
|
||||
| reference rows | fine primary/coarse companion/linear-control exact artifacts, headers, row keys, component keys, finite values, factor-one frame mapping과 disposition별 precheck | reference precheck |
|
||||
| tolerance | external family에만 exact `docs/TOLERANCE.md` row/RMS policy 적용; U blocking, UR warning-only, local RF/RM review-only 보존; internal global balance/free residual gate와 혼합 금지 | reference/internal verification |
|
||||
|
||||
Downstream test가 다뤄야 하는 approved diagnostic code는 다음을 포함한다.
|
||||
|
||||
@@ -785,21 +884,34 @@ Downstream handoff to Implementation Planning Agent through Coordinator:
|
||||
MITC4 contract의 regression으로 남는지 test한다.
|
||||
- HDF5 schema version `1`을 위 accepted-frame schema 그대로 구현한다. Factor-zero non-frame
|
||||
handling, unique factor-one frame selection, triad/director projection, no
|
||||
compression/chunking, no trial-state HDF5 history를 포함한다.
|
||||
compression/chunking, no trial-state HDF5 history를 포함한다. `/global/equilibrium` path/shape는
|
||||
유지하되 authoritative meaning을 applied-plus-reaction balance error로 검증한다.
|
||||
- `AUDIT-001`을 별도 test로 닫는다. Accepted free residual은 generalized residual/internal/external
|
||||
force와 exact free mask, constrained reaction resultant는 mask-before-`J_l(phi)^(-T)`와 accepted
|
||||
current arm, global balance는 applied plus constrained reaction을 사용한다. Nonzero prescribed
|
||||
translation/rotation case에서도 initial arm, raw rotational covector 또는 raw full-residual sum을
|
||||
세 quantity의 공통 substitute로 쓰지 않는다.
|
||||
- 비대칭 lifecycle을 보존한다. Log는 usage validation, lexical path derivation, single-writer
|
||||
lock 뒤 live current-run audit이고, log create/open/truncate는 Analysis 전 abort, write/flush는
|
||||
즉시 abort, close failure는 HDF5 commit을 block한다. HDF5 final은 log close와 candidate
|
||||
self-check 성공 뒤에만 replace하며 failure는 prior valid final과 current log를 손상하지 않는다.
|
||||
- Newton log parser/schema test는 UTF-8 no BOM, LF, physical TAB-separated fixed
|
||||
`label=value` field order, finite round-trip numerics, escaping, completed-gate four-channel
|
||||
metrics, early-failure `not-evaluated(reason)`, no-Newton zero-byte log, zero per-iteration
|
||||
stderr duplication, flush-before-next/return을 포함한다.
|
||||
- Exact CSV paths, trimmed headers, exact `shellNL` `Frame` value, source node/component
|
||||
identity, constrained reaction mask, missing/extra/duplicate rows, nonfinite values를
|
||||
tolerance 전에 precheck한다.
|
||||
- Declared family에는 `docs/TOLERANCE.md`만 적용한다. `U`는 blocking, `UR`은 warning-only,
|
||||
`RF1/RF2`, `RF3`, physical spatial `RM1/RM2`는 blocking으로 유지하고 `RM3`와 모든 stress
|
||||
CSV value는 제외한다.
|
||||
`label=value` 39-field order, finite round-trip numerics, escaping, completed-gate four-channel
|
||||
metrics, residual matching-external-scale exact-zero/nonzero branch와 retained nonzero-scale
|
||||
denominator, typed thresholds, four-channel AND, early-failure `not-evaluated(reason)`, no-Newton
|
||||
zero-byte log, zero per-iteration stderr duplication, flush-before-next/return을 포함한다.
|
||||
- Fine primary, coarse companion과 linear control의 exact CSV path, trimmed header, 두 nonlinear
|
||||
case의 exact factor-one `Frame`, source node/component identity, constrained reaction mask,
|
||||
missing/extra/duplicate row와 nonfinite value를 tolerance 전에 precheck한다. Row order를 identity로
|
||||
쓰지 않는다.
|
||||
- External declared family에는 `docs/TOLERANCE.md`만 적용한다. `U1/U2/U3`는 blocking,
|
||||
`UR1/UR2/UR3`는 warning-only, local `RF1/RF2/RF3`와 spatial physical `RM1/RM2`는
|
||||
review-only다. Local `RM3`와 모든 stress CSV value는 제외한다. Review-only row의
|
||||
schema/inventory/error report를 생략하거나 blocking으로 되돌리지 않는다.
|
||||
- Fine/coarse factor-one global force/moment balance는 dimension-separated normalized `<=1e-8`,
|
||||
accepted free force/moment residual은 NSNR-069으로 blocking 검증한다. 이 internal gate에
|
||||
Abaqus CSV나 `docs/TOLERANCE.md` scale을 사용하지 않는다. Constrained reaction resultant는
|
||||
distinct review-only summary로 보고한다.
|
||||
- Optional stress CSV는 read-only inventory/order evidence only로 유지한다. Nodal stress
|
||||
extrapolation, corner averaging, `S33` synthesis, element-label-order matching을 추가하지
|
||||
않는다.
|
||||
|
||||
@@ -1,188 +1,261 @@
|
||||
# Nonlinear Static Newton-Raphson 수치 검토
|
||||
|
||||
## 1. Metadata and source formulation
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_formulation_status: `ready-for-numerical-review`
|
||||
- source_formulation_sha256: `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`
|
||||
- source_formulation_sha256: `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`
|
||||
- source_requirements: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirements_sha256: `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2`
|
||||
- source_requirements_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_research_sha256: `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`
|
||||
- source_research_sha256: `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/TOLERANCE.md`
|
||||
- related_linear_contracts: `docs/linear-static-mitc4-shell/numerical-review.md`,
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- diagnostic_evidence: `docs/nonlinear-static-newton-raphson/corrections.md` §13,
|
||||
`docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md`
|
||||
- status: `pass-for-io-definition`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-23`
|
||||
- date: `2026-08-28`
|
||||
- post_closure_addendum_date: `2026-08-29`
|
||||
- post_closure_additive_case: `shellnl-meshfine-02-s4-final`
|
||||
|
||||
이 검토는 정식화를 수학 및 수치 알고리즘 계약으로만 검토했다. C++ API, HDF5 schema,
|
||||
implementation plan, reference solver 실행, reference artifact 생성/수정은 수행하지 않았다.
|
||||
이 검토는 정식화를 수학·수치 알고리즘 계약으로 검토하고 기존 reference artifact를
|
||||
읽기 전용으로 조사했다. C++ API, 최종 HDF5 dataset path, implementation plan 또는
|
||||
reference artifact를 설계·실행·생성·수정하지 않았다.
|
||||
|
||||
## 2. Review Verdict
|
||||
|
||||
- verdict: `pass-for-io-definition`
|
||||
- reason: 승인 정식화는 fixed-initial-reference Total Lagrangian MITC4, finite rotation
|
||||
state, nonlinear `24 -> 20` map, objective drilling, fixed-global load work,
|
||||
same-trial residual/tangent, Full Newton convergence, recovery와 state commit/rollback
|
||||
의미를 구현 가능한 수치 계약으로 닫고 있다. 차원, 부호, DOF 순서, 적분, reaction
|
||||
의미 또는 reference identity와 충돌하는 blocking defect는 확인되지 않았다.
|
||||
- reference readiness: `reference/shellNL` 및 `reference/shell`의 선언 파일과 CSV는
|
||||
읽을 수 있고 row identity/precheck/tolerance 계약을 정의할 수 있다.
|
||||
- boundary: 이 verdict는 I/O Definition 진입 허가이며 implementation, reference comparison
|
||||
pass, physics evaluation 또는 release readiness 승인이 아니다.
|
||||
|
||||
`reference/shellNL`은 `nlgeom=YES`와 factor-one final frame을 갖는 저장 reference로 사용할 수
|
||||
있지만, 주요 `U3`와 stress 값은 선형 `reference/shell`과 거의 같다. 관찰된 nonlinear 신호는
|
||||
주로 약한 in-plane coupling이다(`RF1/RF2` 최대 약 `1.9166`, `U1/U2` 최대 약
|
||||
`1.29e-11`). 따라서 이 CSV 세트만으로 finite-rotation objectivity, exact tangent,
|
||||
rollback 또는 큰 변위 benchmark를 통과했다고 판단하지 않는다. 해당 항목은 아래의
|
||||
blocking internal tests로 분리한다.
|
||||
- reason: 승인 정식화는 fixed-initial-reference Total Lagrangian MITC4, finite rotation,
|
||||
nonlinear `24 -> 20` map, objective drilling, same-trial residual/tangent, reaction의
|
||||
spatial-moment 변환과 current-arm global balance를 구현 가능한 수치 계약으로 정의한다.
|
||||
Revised requirements와 충돌하는 formulation defect는 없다.
|
||||
- reaction disposition: local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`는 exact
|
||||
source-key/schema/inventory/finite/error evidence를 유지하는 `review-only`다. 이 값은
|
||||
formulation-sensitive nodal redistribution이므로 blocking verdict를 결정하지 않는다.
|
||||
Local `RM3`는 계속 제외한다.
|
||||
- blocking equilibrium: 각 nonlinear case의 factor-one accepted state에서 `(a)` global
|
||||
applied-plus-reaction force balance, `(b)` global applied-plus-reaction moment balance,
|
||||
`(c)` accepted free-DOF force/moment residual evidence가 blocking이다. `(d)` constrained
|
||||
reaction resultant는 별도 quantity로 보존하지만 balance error를 대신하지 않는다.
|
||||
- reference readiness: `reference/shell`, `reference/shellNL`와
|
||||
`reference/shellNL-meshfine`의 선언 input 및 필요한 displacement/reaction CSV가 존재하고
|
||||
읽을 수 있다. Fine case는 사용자가 요청한 mesh-refined nonlinear evidence이며 coarse
|
||||
case와 서로의 reference에 독립적으로 비교한다. Merge 후 추가된 read-only
|
||||
`reference/shellNL-meshfine_02` bundle도 별도 verification 대상으로 inventory했다. 이
|
||||
post-closure 추가는 기존 세 case의 gate, 과거 Stage 6 comparison 또는 Release verdict를
|
||||
소급 변경하지 않는다.
|
||||
- boundary: `pass-for-io-definition`은 I/O 계약을 다시 정의할 수 있다는 뜻이며 reference
|
||||
comparison pass, implementation completion, physics 또는 release 승인이 아니다.
|
||||
|
||||
## 3. Critical Findings
|
||||
|
||||
### Confirmed defects
|
||||
### 3.1 Confirmed defects
|
||||
|
||||
없음. Formulation Agent 또는 Research Agent로 즉시 되돌릴 confirmed numerical defect는 없다.
|
||||
Formulation Agent 또는 Research Agent로 반환할 confirmed defect는 없다. Formulation
|
||||
§11.4는 constrained generalized reaction과 spatial physical moment를 구분하고, §13.4는
|
||||
global origin `[0,0,0]`, current nodal position과 physical spatial moment를 사용하는
|
||||
applied-plus-reaction balance를 명시한다.
|
||||
|
||||
### Numerical risks requiring downstream evidence
|
||||
### 3.2 Required downstream correction: `AUDIT-001`
|
||||
|
||||
- `shellNL`의 stored reference는 geometric nonlinearity가 켜진 최종 상태 비교에는 충분하지만
|
||||
response amplitude가 작아 finite-rotation/tangent/objectivity 검증을 대신하지 못한다.
|
||||
- Abaqus stress CSV는 `(instance, element label, element-corner node label,
|
||||
section point, component)` identity로 완전하지만 FESA의 approved Gauss-location direct
|
||||
bottom/middle/top recovery와 location이 다르다. Current stored order는 element label
|
||||
`1..36` ascending block이며 이를 바꾸지 않는다. Nodal extrapolation/averaging을 만들지
|
||||
않고 stress CSV는 comparison family에서 제외한다.
|
||||
- External `UR` comparison은 기존 MITC4 정책에 따라 `warning-only`다. Rotation/director
|
||||
correctness는 `Q`, `d`, branch, objectivity invariant tests에서 blocking으로 확인해야 한다.
|
||||
Stage 5/6은 같은 accepted state에서 다음 세 quantity를 서로 바꿔 쓰지 않아야 한다.
|
||||
|
||||
### Open questions
|
||||
1. **Global applied-plus-reaction balance error**: applied와 constrained reaction을 더한
|
||||
force `[3]`와 moment `[3]`; blocking.
|
||||
2. **Constrained reaction resultant**: constrained reaction만 합한 force `[3]`와 current-arm
|
||||
moment `[3]`; distinct nonblocking reaction summary.
|
||||
3. **Accepted free residual**: stable free-DOF source/component rows와 force/moment channel gate;
|
||||
blocking.
|
||||
|
||||
현재 I/O Definition 진입을 막는 open question은 없다. Large-response public benchmark,
|
||||
MMS, broader locking/distortion characterization은 유용하지만 승인된 Stage 4 pass 조건은 아니다.
|
||||
현재 nonlinear implementation helper는 full residual을 합하고 initial Domain coordinates와
|
||||
raw rotational generalized residual을 사용한다. 현재 `shellNL`/`shellNL-meshfine` support는
|
||||
prescribed `u=phi=0`이므로 initial/current support arm과 generalized/spatial support moment가
|
||||
일치하고, 이 helper는 작은 free residual을 제외하면 constrained reaction resultant에
|
||||
가깝다. 그러나 applied load를 더한 balance error는 아니며 세 quantity 중 어느 것도
|
||||
일반적으로 대체하지 못한다. 지원 범위의 nonzero prescribed translation/rotation에서는
|
||||
반드시 current position과 `J_l(phi)^(-T)` spatial-moment conversion을 적용해야 한다.
|
||||
|
||||
### 3.3 Numerical risks and nonblocking artifact issue
|
||||
|
||||
- Fine stress CSV에는 element `1`, `SNEG`의 `Node Label=ss` 한 행이 있다. Stress는 승인된
|
||||
FESA Gauss direct recovery와 위치가 다르고 수치 comparison에서 제외되므로 이 optional
|
||||
inspection artifact의 malformed identity는 I/O 진입 blocker가 아니다. Artifact를 repair,
|
||||
normalize 또는 rewrite하지 않는다.
|
||||
- Coarse/fine Abaqus `S4`와 FESA MITC4가 동일한 local support reaction distribution을
|
||||
만들어야 한다는 formulation evidence는 없다. Global balance와 free residual로 blocking
|
||||
physics를 검증하고 local rows는 오차를 숨기지 않은 채 review-only로 남긴다.
|
||||
- Stored cases의 response는 weak geometric-nonlinear regime다. Reference displacement pass가
|
||||
tangent, objectivity, finite-rotation 또는 rollback 검증을 대신하지 않는다.
|
||||
- `shellNL-meshfine_02`는 topology와 constraint inventory는 fine case와 같지만 source load가
|
||||
`F1=+1e8`, `F2=+1e8`, `F3=-1e8`이다. 기존 fine case의 `F3=-1e5`와 같은 물리 case 또는
|
||||
mesh-only refinement로 취급하지 않으며 각자의 reference에만 비교한다.
|
||||
|
||||
### 3.4 Open questions
|
||||
|
||||
I/O Definition 진입을 막는 open question은 없다. Public large-response benchmark, shell MMS와
|
||||
broader locking/distortion portfolio는 useful future evidence지만 이번 gate의 추가 조건이 아니다.
|
||||
|
||||
## 4. Numerical Risk Assessment
|
||||
|
||||
| risk label | assessment | required control / downstream evidence |
|
||||
| --- | --- | --- |
|
||||
| `rigid_body_modes` | 물리/internal/drill energy가 finite rigid motion에서 objective해야 하며 pure drill만 regularized 되어야 한다. | finite rigid translation/rotation superposition에서 strain, stress, physical energy, drill gamma, residual을 blocking invariant로 확인한다. |
|
||||
| `patch_test` | Green-Lagrange direct strain과 MITC tied shear가 같은 trial geometry와 같은 first/second variation을 써야 한다. | membrane, bending, twist, transverse-shear patch를 linear limit와 finite valid trial perturbation에서 각각 확인한다. |
|
||||
| `symmetry` | applied nodal moment가 없으면 physical/drill tangent는 exact arithmetic에서 symmetric이다. Fixed-spatial moment work tangent는 일반적으로 nonsymmetric이다. | no-moment case만 scaled symmetry check 대상으로 두고, moment case를 임의 symmetrization하지 않는다. |
|
||||
| `positive_definiteness` | nonlinear tangent는 load state, compression, near-buckling에서 indefinite일 수 있다. Positive definiteness는 일반 gate가 아니다. | stress-free constrained linear limit의 nonsingular solve와 singular negative case를 분리하고, factorization failure를 숨기지 않는다. |
|
||||
| `hourglass` | S4/S4R 모두 `2 x 2 x 2` full integration이므로 one-point reduced hourglass path는 승인 범위 밖이다. | source type으로 reduced/selective integration 또는 hourglass stabilization을 선택하지 않는 unit/integration test가 필요하다. |
|
||||
| `shear_locking` | MITC shear tying은 transverse-shear locking을 완화하지만 모든 thin-shell mesh에서 locking-free를 보장하지 않는다. | patch/reference evidence를 blocking으로 두고 broader thin/thick convergence는 nonblocking characterization으로 둔다. |
|
||||
| `volumetric_locking` | approved plane-stress shell, St. Venant-Kirchhoff-type material restriction에서는 `N/A`다. | 3-D incompressible material 또는 `nu >= 0.5` 의미로 확장하지 않는다. |
|
||||
| `membrane_locking` | original-style MITC4는 curved/distorted nonlinear meshes에서 membrane locking 위험이 남는다. | known limitation으로 기록한다. MITC4+ 성능 또는 Abaqus S4/S4R internal equivalence를 주장하지 않는다. |
|
||||
| `distortion` | positive Jacobian이라도 severe distortion/warpage는 conditioning과 stress accuracy를 악화할 수 있다. | 모든 Gauss/tying/center/recovery location의 finite, positive predicate를 fail-closed로 적용한다. 추가 quality cutoff는 요구하지 않는다. |
|
||||
| `singular_jacobian` | `J0 <= 0`, `j <= 0`, invalid reciprocal basis, invalid polar stretch는 residual/tangent를 무효화한다. | failed location을 omit/average/clamp/repair하지 않고 model/trial failure로 처리한다. |
|
||||
| `conditioning` | thin shells, small fixed drill scale, near-mechanism constraints는 Kff conditioning을 악화시킬 수 있다. | scaled matrix diagnostics만 사용하고 solver regularization/fallback으로 singularity를 숨기지 않는다. |
|
||||
| `convergence` | Full Newton은 same-trial consistent tangent에 의존한다. No line search/cutback이므로 difficult step은 deterministic nonconvergence가 될 수 있다. | NSNR-069/070 four-channel gates, iteration `1..100`, nonfinite rejection, no hidden retry를 integration tests로 고정한다. |
|
||||
| `rigid_body_modes` | Physical/internal/drill energy는 finite rigid motion에서 objective하고 pure drill만 regularized 되어야 한다. | finite rigid superposition에서 strain, stress, physical energy, drill gamma/energy와 residual covariance를 blocking invariant로 확인한다. |
|
||||
| `patch_test` | Green-Lagrange direct strain과 MITC tied shear는 같은 trial 및 first/second variation을 써야 한다. | membrane, bending, twist, transverse-shear patch와 linear limit을 확인한다. |
|
||||
| `symmetry` | Applied nodal moment가 없으면 physical/drill tangent는 exact arithmetic에서 symmetric이다. Fixed-spatial moment work tangent는 일반적으로 nonsymmetric다. | no-moment case만 scaled symmetry gate를 적용하고 moment case는 derivative consistency로 검증한다. |
|
||||
| `positive_definiteness` | Nonlinear tangent는 compression/near-buckling에서 indefinite일 수 있다. | positive definiteness를 global gate로 만들지 않고 singular/malformed tangent와 물리적 indefiniteness를 구분한다. |
|
||||
| `hourglass` | S4/S4R 모두 `2 x 2 x 2` full integration이며 reduced/hourglass path는 범위 밖이다. | source label로 integration 또는 stabilization을 바꾸지 않는 test가 필요하다. |
|
||||
| `shear_locking` | MITC shear tying은 transverse-shear locking을 완화하지만 general locking-free를 보장하지 않는다. | patch/reference evidence를 blocking으로, broader thin/thick study를 characterization으로 둔다. |
|
||||
| `volumetric_locking` | approved plane-stress shell과 `nu < 0.5` 범위에서는 `N/A`다. | 3-D incompressible behavior claim으로 확장하지 않는다. |
|
||||
| `membrane_locking` | original-style MITC4는 curved/distorted nonlinear mesh에서 membrane locking 위험이 남는다. | known limitation으로 보존하고 MITC4+ 또는 Abaqus 내부 성능을 상속한다고 주장하지 않는다. |
|
||||
| `distortion` | positive Jacobian만으로 accuracy는 보장되지 않지만 별도 calibrated quality cutoff는 승인되지 않았다. | 모든 Gauss/tying/center/recovery location을 fail-closed 검사한다. |
|
||||
| `singular_jacobian` | `J0<=0`, `j<=0`, invalid reciprocal basis/polar stretch는 residual/tangent를 무효화한다. | failed point를 omit, average, clamp 또는 repair하지 않는다. |
|
||||
| `conditioning` | thin geometry, small fixed drill scale와 near mechanism은 conditioning을 악화시킨다. | scale-aware diagnostics를 쓰고 hidden regularization/fallback을 금지한다. |
|
||||
| `convergence` | Full Newton은 same-trial consistent tangent에 의존하고 line search/cutback이 없다. | NSNR-069/070, four-channel AND, iteration `1..100`, finite-first와 no retry를 고정한다. |
|
||||
| `reaction_distribution` | local nodal support distribution은 element formulation/mesh/stabilization에 민감하다. | exact local error report는 유지하되 global balance/free residual만 blocking한다. |
|
||||
|
||||
## 5. Consistency Checks
|
||||
|
||||
| check | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| units and dimensions | `pass` | Translation/force, rotation/moment, stress/resultant dimensions are separated. Convergence channels keep force, force-length, length and dimensionless rotation separate. |
|
||||
| signs and residual convention | `pass` | Global residual is `f_int - f_ext`; constrained full residual is reaction and free residual is equilibrium evidence. Fixed-global dead force has no configuration derivative. |
|
||||
| DOF ordering and free/constrained assumptions | `pass` | Per-node global order is `[UX, UY, UZ, URX, URY, URZ]`; Newton solve uses stable free coordinates with `Delta q_c = 0`. Valid `0 x 0` free system is trivial success. |
|
||||
| coordinate transforms | `pass` | `Q=Exp(phi^)Q0`, left-spatial update, `J_l` variation, physical swing map and spatial reaction moment conversion are explicitly defined. |
|
||||
| kinematic operator / B matrix | `pass` | Green-Lagrange strain, MITC shear projection and both first/second variations use the same trial identity. |
|
||||
| constitutive contract | `pass` | Constant symmetric `C5` maps engineering Green-Lagrange strain to second Piola-Kirchhoff stress; no material history is introduced. |
|
||||
| Jacobian rules | `pass` | Fixed reference `J0` is integration measure; current `j` and `det F_c` are validity checks. Failed locations are not skipped. |
|
||||
| integration policy | `pass` | S4 and S4R share four midsurface Gauss points times two thickness points; reduced/selective integration is prohibited. |
|
||||
| residual/tangent consistency | `pass` | Complete tangent includes material, geometric, map-Hessian, objective drill Hessian and fixed-spatial moment work derivative terms. |
|
||||
| tangent symmetry expectation | `pass` | Symmetric only for conservative no-applied-moment case; generally nonsymmetric moment tangent must remain unsymmetrized. |
|
||||
| output locations | `pass-with-handoff` | Nodal U/UR/RF/RM and shell stress/resultant logical quantities are defined; exact HDF5 projection remains I/O-owned. Current nodal SPOS/SNEG stress CSV는 Gauss direct recovery와 일대일 대응하지 않으므로 external numerical comparison은 N/A다. |
|
||||
| units and dimensions | `pass` | Translation residual/reaction은 force, rotation residual/reaction moment는 force-length다. Force와 moment family 및 norm scale을 혼합하지 않는다. |
|
||||
| signs | `pass` | `r=f_int-f_ext`; constrained entry는 reaction, free entry는 equilibrium evidence다. Balance는 `applied+reaction`이고 reaction resultant는 reaction만 합한다. |
|
||||
| DOF ordering | `pass` | Global node order `[UX,UY,UZ,URX,URY,URZ]`; stable free/constrained partition과 `Delta q_c=0`을 보존한다. |
|
||||
| coordinates and moment conversion | `pass-with-handoff` | Global origin `[0,0,0]`, current arm `X+u`, spatial moment `J_l(phi)^(-T) r_phi`가 승인 의미다. `AUDIT-001` 구현 projection audit가 남는다. |
|
||||
| kinematic operator | `pass` | Green-Lagrange strain, MITC shear projection 및 first/second variation은 same-trial identity다. |
|
||||
| constitutive contract | `pass` | Constant symmetric `C5`가 fixed-reference engineering strain을 second Piola-Kirchhoff stress로 매핑하며 material history가 없다. |
|
||||
| Jacobian rules | `pass` | Fixed `J0`가 integration measure, current `j`와 `det(Fc)`가 validity predicate다. |
|
||||
| integration | `pass` | S4/S4R 공통 four midsurface by two thickness points; reduced/selective integration은 금지한다. |
|
||||
| residual/tangent | `pass` | Material/geometric/map-Hessian/drill/moment-work derivative가 complete same-trial tangent를 이룬다. |
|
||||
| recovery locations | `pass-with-handoff` | Nodal U/UR/reaction 및 Gauss direct shell recovery logical meaning은 정의되었다. Final dataset projection은 I/O-owned다. |
|
||||
| reference identity | `pass` | Case/state/instance/source label/component로 match하고 row order를 identity로 쓰지 않는다. |
|
||||
|
||||
## 6. Verification Readiness
|
||||
|
||||
### Blocking internal numerical tests
|
||||
### 6.1 Blocking internal numerical tests
|
||||
|
||||
Implementation Planning shall carry these as feature-required tests before any reference-comparison success claim:
|
||||
기존 승인 수치 portfolio를 유지한다.
|
||||
|
||||
Mixed translation/rotation 검사는 fixed-reference characteristic length
|
||||
`L=max(||X_I-X_J||)`와 node block `Dq=diag(L I3,I3)`를 사용한다. Tangent test direction은
|
||||
`||p_hat||inf=1`, perturbation은 `q +/- h Dq p_hat`으로 두고
|
||||
`h={1e-3,3e-4,1e-4,3e-5,1e-5,3e-6,1e-6,3e-7}` 전부를 검사한다. Roundoff plateau 전
|
||||
최소 두 interval에서 centered-difference observed order `>=1.5`이고 한 interior point가
|
||||
scaled error `<=1e-6`여야 한다. Single-`h` 우연 통과는 허용하지 않는다.
|
||||
1. Stress-free `q=0` linear MITC4 residual/tangent/recovery와 physical/drill split.
|
||||
2. `||Q^TQ-I||_F<=1e-12`, `|det(Q)-1|<=1e-12`, `d=Qe3` 및 branch margin.
|
||||
3. Mixed translation/rotation scaled tangent directional derivative schedule와 interior scaled
|
||||
error `<=1e-6`; zero analytical direction `<=1e-10`.
|
||||
4. No-applied-moment scaled tangent symmetry `<=1e-12`; applied moment는 derivative
|
||||
consistency만 검사한다.
|
||||
5. Finite rigid objectivity의 scaled physical strain/stress/energy/drill/residual `<=1e-10`.
|
||||
6. Membrane/bending/twist/shear patch, component order와 bottom/top stress sign.
|
||||
7. Fixed-global force/moment identity, `rho_M<=1e-12`, absolute prescribed path와 zero
|
||||
constrained Newton correction.
|
||||
8. Exact fixed-factor sequence, factor one, iterations `1..100`, pass at 100, no 101/cutback/retry.
|
||||
9. NSNR-069/070의 finite-first exact-zero/nonzero branches, inclusive thresholds와 four-channel AND.
|
||||
10. Trial/recovery/solve/output failure rollback과 deterministic assembly/frame/row/diagnostic order.
|
||||
|
||||
1. Linear limit: at stress-free `q=0`, nonlinear element residual/tangent/recovery reduce to approved linear MITC4 signs, `2 x 2 x 2` integration and physical/drill split.
|
||||
2. Rotation state invariants: every committed/trial `Q` satisfies `||Q^T Q-I||_F <= 1e-12`,
|
||||
`|det(Q)-1| <= 1e-12`, and `d=Q e3`. Global/swing/twist `pi` branch angular margin은
|
||||
`sqrt(epsilon_double)`, 약 `1.4901161193847656e-8` rad보다 커야 한다.
|
||||
3. Tangent directional derivative: compare `Dq^T K_T Dq p_hat` with the central
|
||||
residual derivative under the schedule above in separated force and moment channels.
|
||||
Zero analytical directions require exact-zero construction and scaled absolute error
|
||||
`<=1e-10`; nonfinite metric은 허용하지 않는다.
|
||||
4. No-moment tangent symmetry: after work-conjugate congruence `Dq^T K_T Dq`, no-applied-moment
|
||||
tangent scaled Frobenius symmetry error `<=1e-12`; applied fixed-spatial moment cases are checked for
|
||||
exact derivative consistency, not symmetry.
|
||||
5. Finite rigid objectivity: superposed finite rigid motion leaves physical strain/stress,
|
||||
physical energy, drill gamma/energy and internal residual at scaled `<=1e-10` levels.
|
||||
6. Patch/sign recovery: membrane, bending, twist and transverse shear patch states preserve
|
||||
component order and bottom/top stress signs.
|
||||
Analytical strain/resultant/stress error is relative `<=1e-9`.
|
||||
7. Load and boundary path: fixed-global force/moment source identity, `rho_M <= 1e-12`
|
||||
rejection/projection, absolute factor-one boundary path and zero constrained Newton
|
||||
correction are tested independently.
|
||||
8. Newton lifecycle: factor identities use ordinal `j*h` values strictly below one,
|
||||
followed by one exact assigned `1.0`; cumulative `lambda += h`와 tolerance-based duplicate
|
||||
endpoint는 금지한다. For `shellNL` the expected intended factors are `0.1, 0.2, ...,
|
||||
1.0`. Iterations are `1..100`, pass at `100` is allowed, iteration `101` is forbidden.
|
||||
9. Convergence gates: NSNR-069/070 four-channel inclusive `<=` rules, typed zero-scale
|
||||
`1e-3` thresholds and nonfinite rejection are tested without adding energy or line-search gates.
|
||||
10. Commit/rollback and determinism: failed trial, recovery, solve or output does not mutate
|
||||
the prior committed state or prior authoritative final result; row/diagnostic order is stable.
|
||||
### 6.2 Factor-one blocking equilibrium contract
|
||||
|
||||
### Downstream reference comparisons
|
||||
각 nonlinear case의 accepted factor-one state에 대해
|
||||
|
||||
The required stored-reference cases and logical quantities are defined in
|
||||
`docs/nonlinear-static-newton-raphson/reference-model.md`.
|
||||
\[
|
||||
\mathbf a_{F,I}=\mathbf F_I^{appl},\qquad
|
||||
\mathbf c_{F,I}=\mathbf F_I^{react},
|
||||
\]
|
||||
|
||||
- `shellnl-s4-final` is the primary nonlinear external reference at accepted factor one.
|
||||
- `shell-s4-linear-limit` is the read-only linear-limit/reference-identity regression for the
|
||||
same S4 mesh. Current stress element-label ordering is inventoried without becoming a
|
||||
comparison quantity.
|
||||
\[
|
||||
\mathbf a_{M,I}=(\mathbf x_I-\mathbf 0)\times\mathbf F_I^{appl}
|
||||
+\mathbf M_I^{appl},\qquad
|
||||
\mathbf c_{M,I}=(\mathbf x_I-\mathbf 0)\times\mathbf F_I^{react}
|
||||
+\mathbf M_I^{react}
|
||||
\]
|
||||
|
||||
External comparison uses only accepted-state quantities and `docs/TOLERANCE.md`. Missing,
|
||||
extra, duplicate or nonfinite required rows fail before tolerance. The comparison result itself
|
||||
is Implementation Agent ownership.
|
||||
를 stable source-node order로 계산한다. `x=X+u`이고 applied physical moment는 formulation
|
||||
§13.4의 effective physical-work moment다. Define
|
||||
|
||||
\[
|
||||
\mathbf e_F=\sum_I(\mathbf a_{F,I}+\mathbf c_{F,I}),\quad
|
||||
S_F=\max\left(\sum_I\|\mathbf a_{F,I}\|_2,
|
||||
\sum_I\|\mathbf c_{F,I}\|_2\right),
|
||||
\]
|
||||
|
||||
\[
|
||||
\mathbf e_M=\sum_I(\mathbf a_{M,I}+\mathbf c_{M,I}),\quad
|
||||
S_M=\max\left(\sum_I\|\mathbf a_{M,I}\|_2,
|
||||
\sum_I\|\mathbf c_{M,I}\|_2\right).
|
||||
\]
|
||||
|
||||
Force와 moment는 각각 `rho_F=||e_F||2/S_F`, `rho_M=||e_M||2/S_M`로 검사하고 둘 다
|
||||
`<=1e-8`이어야 한다. 이 threshold는 승인된 nonlinear acceptance value이며,
|
||||
unclamped sum-of-contribution scale과 dimension-separated form은 승인된 linear MITC4
|
||||
global-equilibrium convention을 유지한다. `S=0`이면 balance도
|
||||
exact zero일 때만 `0`, 아니면 fail하며 absolute floor, `max(1,S)` 또는 zero clamp를 두지 않는다.
|
||||
|
||||
Accepted free residual은 cross-unit combined norm을 만들지 않는다. Factor-one accepted trial의
|
||||
free translation-force와 free rotation-moment rows가 각각 NSNR-069의 exact gate를 다시
|
||||
재현해야 한다: matching external scale이 nonzero이면 approved infinity-norm relative gate
|
||||
`<=1e-2`, exact zero이면 typed absolute `<=1e-3` force 또는 force-length다. 두 channel 모두
|
||||
finite-first로 통과해야 한다.
|
||||
|
||||
### 6.3 Downstream reference comparisons
|
||||
|
||||
- `shellnl-meshfine-s4-final`: 사용자가 요청한 mesh-refined primary nonlinear case.
|
||||
- `shellnl-s4-final`: coarse nonlinear companion regression.
|
||||
- `shell-s4-linear-limit`: existing linear-limit/source-identity regression.
|
||||
- `shellnl-meshfine-02-s4-final`: merge 후 추가된 post-closure nonlinear case. 과거 canonical
|
||||
Stage 6 `reference-comparison.md`의 비교 대상이 아니며 merge된 current code로 별도 실행·비교한다.
|
||||
|
||||
각 case의 `U1/U2/U3`는 blocking이고 `UR1/UR2/UR3`는 warning-only다. Coarse/fine은 각자의
|
||||
input/CSV와 독립 family로 비교하며 cross-mesh interpolation, row collapse 또는 observed-order
|
||||
claim을 만들지 않는다. Local RF/RM family는 common external tolerance로 오차를 전부
|
||||
기록하지만 review-only다. `RM3`와 stress는 수치 comparison에서 제외한다.
|
||||
|
||||
### 6.4 Post-closure additive case boundary
|
||||
|
||||
`shellnl-meshfine-02-s4-final`은 729 nodes, 676 S4 elements, `NLGEOM=YES`,
|
||||
`*STATIC 0.1,1.,0.001,0.1`, all-six-DOF `Set-2` 104 constrained nodes를 가진다. Exact
|
||||
factor-one displacement/reaction/stress CSV는 각각 729/729/5,408 rows이며 audited key는
|
||||
unique이고 required numeric value는 finite다. U1/U2/U3 2,187 rows는 blocking,
|
||||
UR1/UR2/UR3 2,187 rows는 warning-only, local RF1/RF2 208 rows, RF3 104 rows와 physical
|
||||
spatial RM1/RM2 208 rows는 review-only다. RM3와 stress는 excluded다.
|
||||
|
||||
Internal factor-one families는 fine case와 같은 row/gate 구조를 사용한다: free force residual
|
||||
1,875 rows, free moment residual 1,875 rows, global force balance 3 components와 global moment
|
||||
balance 3 components다. External family는 `docs/TOLERANCE.md`, internal free residual과 global
|
||||
balance는 Sections 6.2의 승인 gate를 그대로 사용한다. 이 문서 addendum은 comparison success를
|
||||
판정하지 않으며 Implementation Agent가 merge된 current code의 별도 evidence를 소유한다.
|
||||
|
||||
## 7. Required Revisions
|
||||
|
||||
### Formulation Agent
|
||||
|
||||
None before I/O Definition. The current formulation is numerically sufficient for the I/O
|
||||
contract. Current source element/node SPOS/SNEG stress CSV에 맞추기 위한 extrapolation,
|
||||
averaging 또는 새 recovery 의미는 추가하지 않는다.
|
||||
없음. §11.4/§13.4의 reaction, spatial moment와 global balance 의미는 revised requirements를
|
||||
충족한다.
|
||||
|
||||
### Research Agent
|
||||
|
||||
None before I/O Definition. Public large-response benchmarks and shell MMS remain useful future
|
||||
evidence, but the current Stage 4 gate does not require another research pass.
|
||||
없음. Stored fine-mesh case와 internal invariant portfolio가 이번 I/O gate에 충분하다.
|
||||
|
||||
### I/O Definition Agent
|
||||
|
||||
Define parser/semantic/HDF5/log projection for the logical quantities and row identities in
|
||||
`reference-model.md`. Preserve the split between blocking internal nonlinear tests and external
|
||||
stored reference comparison; do not claim Abaqus internal equivalence.
|
||||
`reference-model.md`의 logical quantities와 source identity를 최종 projection으로 연결한다.
|
||||
`AUDIT-001`의 balance error, constrained reaction resultant, accepted free residual을 별도
|
||||
quantity로 유지한다. Current-arm/spatial-moment semantics와 factor-one identity를 보존하고
|
||||
local RF/RM review-only disposition을 blocking으로 되돌리지 않는다.
|
||||
|
||||
## 8. Downstream Handoff
|
||||
|
||||
For I/O Definition Agent through Coordinator:
|
||||
Coordinator를 통해 I/O Definition Agent에 전달한다.
|
||||
|
||||
- Use accepted factor-one frames only for external reference comparison; trial Newton states are
|
||||
not reference quantities.
|
||||
- Preserve required source identity: case, accepted state, instance, node label and component.
|
||||
Stress artifact의 element/node/section identity와 stored element-label order는 read-only
|
||||
inventory로 보존하되 FESA comparison row로 합성하지 않는다.
|
||||
- Keep `U1/U2/U3` blocking and `UR1/UR2/UR3` warning-only. For `shellNL`, compare
|
||||
constrained `RF1/RF2`, `RF3`, and spatial physical `RM1/RM2` in the separate blocking
|
||||
families from `reference-model.md`. `RM3`와 stress는 comparison에서 제외한다.
|
||||
- Apply `docs/TOLERANCE.md` exactly; do not add an independent absolute floor, row averaging,
|
||||
source-order matching, or calibration gate.
|
||||
- Treat `shellNL` as weak but valid nonlinear final-state reference evidence; require the
|
||||
blocking internal tests above for tangent/objectivity/rollback/finite-rotation correctness.
|
||||
- `pass-for-io-definition`; blockers: 없음.
|
||||
- External families는 `docs/TOLERANCE.md`를 그대로 사용한다. Independent absolute floor,
|
||||
averaging, collapse, source-order matching, clamp 또는 calibration gate를 추가하지 않는다.
|
||||
- Internal factor-one global force/moment balance는 Section 6.2의 dimension-separated normalized
|
||||
`1e-8` gate, accepted free residual은 NSNR-069 force/moment gate를 사용한다.
|
||||
- Fine primary와 coarse companion nonlinear cases 모두 U blocking/UR warning-only를 유지한다.
|
||||
- Post-closure `shellnl-meshfine-02-s4-final`도 같은 U/UR 및 local RF/RM disposition을 사용하되,
|
||||
과거 canonical comparison/Release verdict에 소급 포함하지 않고 별도 current-code verification으로
|
||||
보고한다.
|
||||
- Local RF1/RF2, RF3, spatial RM1/RM2는 separate review-only families이며 error/precheck를
|
||||
생략하지 않는다. RM3/stress는 excluded다.
|
||||
- Fine optional stress identity anomaly는 그대로 기록하고 artifact를 수정하지 않는다.
|
||||
- Abaqus S4와 FESA MITC4의 formulation, integration, stabilization 또는 내부 알고리즘
|
||||
동등성을 주장하지 않는다.
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
# Nonlinear Static Newton-Raphson Physics Evaluation
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source reference comparison report | `docs/nonlinear-static-newton-raphson/reference-comparison.md` |
|
||||
| source reference comparison SHA-256 | `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241` |
|
||||
| source reference model | `docs/nonlinear-static-newton-raphson/reference-model.md` |
|
||||
| source reference model SHA-256 | `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA` |
|
||||
| status | `pass-for-release-agent` |
|
||||
| owner_agent | `physics-evaluation-agent` |
|
||||
| date | `2026-08-28` |
|
||||
|
||||
이 평가는 승인된 물리 acceptance scope와 이미 생성된 accepted-state evidence만 사용한다.
|
||||
Abaqus 또는 다른 reference solver를 실행하지 않았고, 외부 solver의 내부 정식화·적분·안정화·
|
||||
결과 복구 동등성을 주장하지 않는다.
|
||||
|
||||
## 2. Input Evidence
|
||||
|
||||
### 2.1 Gate-entry audit
|
||||
|
||||
- `implementation-report.md`와 `build-test.md`의 Stage 6 owner classification은
|
||||
`pass-for-physics-evaluation`이며 full CTest `302/302`, nonlinear reference `9/9` 통과를
|
||||
기록한다.
|
||||
- Corrected required source `reference-comparison.md`는 overall handoff status를
|
||||
`pass-for-physics-evaluation`로 명시한다. Detailed verdict
|
||||
`blocking-pass-with-review-only-findings`는 모든 blocking numerical family가 통과하고 six
|
||||
local RF/RM findings만 review-only라는 세부 분류로 함께 유지된다. 두 status는 서로
|
||||
모순되지 않으며 `PHYS-STATUS-001`은 해소되었다.
|
||||
- `requirements.md` metadata의 `status: draft`, `approved_by: pending user re-approval` 및
|
||||
`FESA-REQ-NSNR-069`의 historical `draft` 표시는 내용상 physics blocker가 아니다.
|
||||
Authoritative `coordination.md` Stage 1 record는 현재 requirements SHA-256
|
||||
`89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`가
|
||||
`2026-08-27` 사용자에게 명시적으로 재승인되었고 Stage 1이 `passed`임을 기록한다.
|
||||
따라서 이 stale metadata를 승인 부재로 재해석하지 않는다.
|
||||
|
||||
### 2.2 Solver outputs and logs
|
||||
|
||||
| case | checked authoritative/generated evidence | SHA-256 / observed identity |
|
||||
| --- | --- | --- |
|
||||
| `shellnl-meshfine-s4-final` | build-local `shellNL-meshfine_results.h5` | `2E9817E173D73FD91C2D34864B69A1EC37483CB25951FB7CCE85895A6C87D2C6`; accepted frames 10; unique factor-one frame 9/increment 10; 2 iterations per increment |
|
||||
| `shellnl-meshfine-s4-final` | build-local `shellNL-meshfine_log.txt` | `1DB6FE4AAA2F1443ACC7F9B3F919CC8DD873C90392121DAB6509F1693435DA27`; 20 entered-iteration records; each increment continues once and accepts on iteration 2 |
|
||||
| `shellnl-s4-final` | build-local `shellNL_results.h5` | `130E2E7B73B022F216A7A34C88D58114A62595ADD556A0D202B8A7FAC7391F39`; accepted frames 10; unique factor-one frame 9/increment 10; 2 iterations per increment |
|
||||
| `shellnl-s4-final` | build-local `shellNL_log.txt` | `3D5C4F1B20384655F9012ADE842B99E3B06B3799FC9AB16DD6FD141E18B77906`; 20 entered-iteration records; each increment continues once and accepts on iteration 2 |
|
||||
| `shell-s4-linear-limit` | build-local `shell_results.h5`, `shell_log.txt` | HDF5 `8AEE34D5BC80382D7E6DE85C51F0F8BCBF451CD5F5C7B8DDA6C585EB22B31763`; zero-byte log `E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855` |
|
||||
|
||||
HDF5는 `reference-comparison.md`에 적힌 build-local exact path에서 직접 읽었다. Optional FESA
|
||||
debug CSV view는 선언되거나 필요하지 않아 사용하지 않았다. Factor-one
|
||||
`nodal/displacement`, `global/equilibrium`, `global/energy`, direct shell stress와
|
||||
`accepted_frames`를 확인했다.
|
||||
|
||||
### 2.3 Read-only reference evidence
|
||||
|
||||
Canonical reference bundle은 `reference-comparison.md`가 inventoried한 12개 exact file을 사용했다.
|
||||
|
||||
- `reference/shellNL-meshfine/`: input, displacement, reaction, stress inventory
|
||||
- `reference/shellNL/`: input, displacement, reaction, stress inventory
|
||||
- `reference/shell/`: linear input, displacement, reaction inventory, stress inventory
|
||||
|
||||
각 SHA-256은 `reference-model.md`와 `reference-comparison.md` inventory에 일치한다. 비교량은
|
||||
fine/coarse/linear `U1/U2/U3` blocking, `UR1/UR2/UR3` warning-only, fine/coarse local
|
||||
`RF1/RF2/RF3`와 physical spatial `RM1/RM2` review-only다. `RM3`와 stored element-corner
|
||||
stress는 numerical comparison에서 제외되었다.
|
||||
|
||||
Reference model의 목적은 중앙 `DOF 3=-100000` fixed-global dead load를 받고 둘레의 all-six
|
||||
DOF가 고정된 `10 x 10`, thickness `0.5` square plate의 coarse/fine nonlinear response와
|
||||
linear-limit source identity를 검증하는 것이다. Nonlinear cases는 `0.1` 간격으로 factor one까지
|
||||
진행한다.
|
||||
|
||||
## 3. Physics Checks
|
||||
|
||||
| physics check | result | evidence and interpretation |
|
||||
| --- | --- | --- |
|
||||
| global equilibrium | `pass` | Fine normalized force `2.09625758e-12`, moment `2.74546602e-10`; coarse force `8.25122661e-12`, moment `1.41375091e-10`. 네 값 모두 approved inclusive `<=1e-8`다. HDF5 `/global/equilibrium`은 `location=global-balance-error`, current arm, global origin `[0,0,0]`, spatial moment 의미를 가진다. |
|
||||
| reaction consistency | `pass` | Applied `F3=-100000`에 대해 constrained-reaction resultant `F3`는 fine/coarse 모두 약 `+100000`이고 다른 force components는 roundoff 수준이다. Applied-plus-reaction force/moment와 accepted free force/moment residual이 각각 blocking gate를 통과했다. Local RF/RM six-family discrepancy는 승인 계약상 review-only nodal redistribution evidence이며 global reaction/resultant identity를 대체하지 않는다. |
|
||||
| displacement direction | `pass` | Downward load에 대해 node 2 final `U3`는 fine `-2.56338e-5`, coarse `-2.35504e-5`; reference도 각각 `-2.57957054e-5`, `-2.37408203e-5`다. HDF5 path는 factor `0.1..1.0`에서 fine `-2.56338e-6 .. -2.56338e-5`, coarse `-2.35504e-6 .. -2.35504e-5`로 부호 반전·jump·rollback 없이 진행한다. |
|
||||
| symmetry / expected zero | `pass` | Center node 2의 factor-one `U1/U2`와 rotations는 fine/coarse에서 약 `1e-17` 이하로, centered load와 symmetric all-edge constraint의 expected-zero response와 일치한다. Fresh physics-focused CTest에서 finite rigid objectivity, zero internal force, rigid translation nullspace와 no-moment tangent symmetry checks가 통과했다. |
|
||||
| element force balance | `covered-by-approved-invariants` | 승인 HDF5에는 standalone element nodal-action balance dataset이 없고 external element-force comparison도 요구되지 않는다. 대신 complete element residual/tangent same-trial identity, patch recovery, stable assembly covariance tests와 accepted global/free equilibrium gate가 문서화된 expectation을 충족한다. 별도 element-force output을 invent하지 않았다. |
|
||||
| stress/strain | `pass-sanity-evidence` | HDF5 direct fixed-reference Gauss stress는 finite다. Element 1/GP1의 `[S11,S22,S12]`는 fine bottom `[-264846,-77843.6,914.879]`, middle `[1.94695,0.530775,-0.0224511]`, top `[264850,77844.8,-914.925]`; coarse도 bottom/top sign이 반대이고 middle이 작아 centered plate bending sign/thickness pattern과 일치한다. Stored CSV는 corner/SPOS-SNEG identity로 위치가 달라 numerical stress comparison이 승인되지 않았으므로 이를 tolerance pass로 재분류하지 않는다. |
|
||||
| rigid body mode | `pass` | 둘레 all-six-DOF support가 global rigid-body motion을 제거하고, accepted path에 비정상 large translation 또는 singular/nonfinite 증상이 없다. Fresh focused tests에서 proper triad/director, finite rigid objectivity, zero internal force, rigid nullspace와 invalid branch rejection을 확인했다. |
|
||||
| energy/residual | `pass-sanity-evidence` | Factor-one physical strain energy는 fine `1.28169`, coarse `1.17752`로 finite positive이며 near-linear relation `0.5*100000*abs(U3_center)`와 일치한다. 이는 secondary sanity evidence이고 승인 energy convergence gate는 아니다. Fine/coarse accepted free force/moment residual은 NSNR-069 blocking gate를 통과했고 log에는 nonfinite/failed accepted state가 없다. |
|
||||
| model coverage | `pass` | Fine 729-node/676-element primary, coarse 49-node/36-element companion, linear control과 internal linear-limit/tangent/objectivity/patch/rollback portfolio가 승인 NSNR-030 scope를 덮는다. Stored response는 weak geometric-nonlinear regime이고 original-style MITC4의 curved/distorted membrane-locking risk는 알려진 한계지만 Numerical Review가 이번 release의 additional benchmark/convergence gate로 승인하지 않았으므로 model-coverage gap을 새로 만들지 않는다. |
|
||||
|
||||
Fresh physics-focused verification command:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R '^(NonlinearMitc4Shell|NonlinearMitc4Recovery|NonlinearMitc4Residual|NonlinearMitc4Tangent|NonlinearMitc4Objectivity|NonlinearMitc4Patch|FiniteRotation|NonlinearStaticProcedure)\.' --output-on-failure
|
||||
```
|
||||
|
||||
Result: `23/23` passed, exit `0`, total real time `5.12 s`.
|
||||
|
||||
## 4. Failure Classification
|
||||
|
||||
- blocking classification: 없음
|
||||
- resolved finding: `PHYS-STATUS-001`; corrected `reference-comparison.md`가 required overall
|
||||
`pass-for-physics-evaluation` handoff와 detailed
|
||||
`blocking-pass-with-review-only-findings` verdict의 관계를 명시했다.
|
||||
- observed failures: `equilibrium-failure`, `reaction-inconsistency`,
|
||||
`displacement-direction-failure`, `symmetry-failure`, `stress-location-failure`,
|
||||
`element-force-inconsistency`, `rigid-body-mode-suspected`, `nonfinite-result`,
|
||||
`model-coverage-gap`, `upstream-contract`, `environment` 모두 없음.
|
||||
|
||||
## 5. Evaluation Verdict
|
||||
|
||||
- verdict: `pass-for-release-agent`
|
||||
- physics evidence disposition: documented equilibrium, reaction, displacement, symmetry/objectivity,
|
||||
stress/strain sanity, rigid-body, residual/path and model-coverage checks show no physical failure.
|
||||
- pass disposition: documented physical expectations passed and no physics/model-coverage/I/O/upstream
|
||||
blocker remains.
|
||||
- release meaning: this verdict authorizes Release Agent evaluation through Coordinator only. It is
|
||||
not Release approval, publish/deploy/package/tag authorization, or external-solver equivalence.
|
||||
|
||||
## 6. Handoff Recommendation
|
||||
|
||||
- handoff: `Release Agent`, always through `Coordinator Agent`
|
||||
- recommendation: Release Agent는 current approved hashes, Stage 6
|
||||
`pass-for-physics-evaluation`, 이 문서의 `pass-for-release-agent`, known limitations와
|
||||
review-only findings를 사용해 release readiness만 audit한다.
|
||||
- boundary: Physics Evaluation Agent는 release readiness, final release checklist, release notes,
|
||||
publish/deploy/package/tag를 승인하지 않는다.
|
||||
|
||||
## 7. No-Change Assertion
|
||||
|
||||
이 Stage 7 작업은 `docs/nonlinear-static-newton-raphson/physics-evaluation.md`만 생성했다.
|
||||
Source code, tests, CMake, Harness, requirements, research, formulation, numerical review,
|
||||
reference model, I/O contract, implementation reports, reference artifacts와 tolerance policy를
|
||||
수정하지 않았다. Abaqus, Nastran 또는 다른 reference solver를 실행하지 않았다.
|
||||
|
||||
## 8. Open Issues
|
||||
|
||||
| id | severity | issue | gate effect |
|
||||
| --- | --- | --- | --- |
|
||||
| `PHYS-META-001` | nonblocking | `requirements.md`의 draft/pending metadata가 authoritative Coordinator/user reapproval record와 stale함 | 현재 hash의 explicit approval로 physics authority는 해소됨; Release traceability audit에서 투명하게 유지 |
|
||||
| `PHYS-LOCAL-001` | nonblocking | six local RF/RM families have review-only discrepancies | approved disposition 유지; global force/moment balance와 free residual을 blocking evidence로 사용 |
|
||||
| `PHYS-STRESS-001` | nonblocking | stored corner/SPOS-SNEG stress와 FESA direct Gauss recovery 위치가 다르고 fine optional stress row 하나의 node label이 malformed | stress numerical comparison 제외 유지; artifact를 repair하지 않음 |
|
||||
| `PHYS-LIMIT-001` | known limitation | stored cases are weak geometric-nonlinear plate responses; original MITC4 has known curved/distorted membrane-locking risk | approved current portfolio에서는 blocker 아님; broader claim 금지 |
|
||||
@@ -0,0 +1,112 @@
|
||||
# Nonlinear Static Newton-Raphson Reference Comparison
|
||||
|
||||
## Verdict
|
||||
|
||||
`blocking-pass-with-review-only-findings`. FESA HDF5 is the authoritative solver output. The
|
||||
Abaqus CSV files are read-only external comparison evidence; the observed agreement does not imply
|
||||
Abaqus S4 internal formulation, integration, stabilization, or recovery equivalence.
|
||||
|
||||
Overall handoff status: `pass-for-physics-evaluation`. This handoff classification records that
|
||||
all blocking comparisons passed; the detailed verdict above remains
|
||||
`blocking-pass-with-review-only-findings` because the six local RF/RM findings are review-only.
|
||||
|
||||
The literal execution order was `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`.
|
||||
|
||||
The `COMPARE` commands were
|
||||
`ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure`
|
||||
(exit 0, 905.404 s, 9/9 passed), followed by
|
||||
`ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure`
|
||||
(exit 0, 930.617 s, 9/9 matched tests passed). The fresh full CTest run then passed 302/302;
|
||||
its command and output tail are recorded in `build-test.md`.
|
||||
|
||||
## Artifact check
|
||||
|
||||
Every input, displacement CSV, reaction CSV, and stress-inventory CSV was readable, finite where
|
||||
required, unique by declared source key, and identical before and after all copied-input executions.
|
||||
|
||||
| case / role | exact path | bytes | pre/post UTC mtime | SHA-256 |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| fine primary input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | 56,516 | `2026-08-25T13:53:49.1919675Z` | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| fine U | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 111,184 | `2026-08-25T14:06:00.1262830Z` | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| fine local reaction | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | 108,951 | `2026-08-25T14:05:06.2950127Z` | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| fine stress inventory | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | 1,036,869 | `2026-08-25T14:04:24.2027682Z` | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
| coarse companion input | `reference/shellNL/shellNL.inp` | 4,778 | `2026-08-23T16:36:23.9302881Z` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| coarse U | `reference/shellNL/shellNL displacements.csv` | 7,542 | `2026-08-23T16:36:23.9282815Z` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| coarse local reaction | `reference/shellNL/shellNL reactions.csv` | 7,443 | `2026-08-23T16:36:23.9292877Z` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| coarse stress inventory | `reference/shellNL/shellNL stresses.csv` | 54,720 | `2026-08-23T16:36:23.9302881Z` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| linear control input | `reference/shell/shell.inp` | 4,770 | `2026-08-23T16:36:23.9272805Z` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| linear U | `reference/shell/shell displacements.csv` | 5,592 | `2026-08-23T16:36:23.9262810Z` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| linear reaction inventory | `reference/shell/shell reactions.csv` | 5,524 | `2026-08-23T16:36:23.9262810Z` | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| linear stress inventory | `reference/shell/shell stresses.csv` | 43,502 | `2026-08-23T16:36:23.9272805Z` | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
|
||||
Fine and coarse required nonlinear CSV rows had exact `Frame=Increment 10: Step Time = 1.000`.
|
||||
The HDF5 `/steps/Step-1/accepted_frames` table had exactly one factor-one row: frame 9, increment
|
||||
10, load factor 1.0, two Newton iterations. Reference copies and generated artifacts were confined
|
||||
to these build-local directories:
|
||||
|
||||
| case | copied input | generated results / log |
|
||||
| --- | --- | --- |
|
||||
| fine | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL-meshfine/shellnl-meshfine-s4-final-72767400538200-0/shellNL-meshfine.inp` | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL-meshfine/shellnl-meshfine-s4-final-72767400538200-0/shellNL-meshfine_results.h5`, SHA-256 `2E9817E173D73FD91C2D34864B69A1EC37483CB25951FB7CCE85895A6C87D2C6`; `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL-meshfine/shellnl-meshfine-s4-final-72767400538200-0/shellNL-meshfine_log.txt`, SHA-256 `1DB6FE4AAA2F1443ACC7F9B3F919CC8DD873C90392121DAB6509F1693435DA27` |
|
||||
| coarse | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-73175241456500-1/shellNL.inp` | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-73175241456500-1/shellNL_results.h5`, SHA-256 `130E2E7B73B022F216A7A34C88D58114A62595ADD556A0D202B8A7FAC7391F39`; `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-73175241456500-1/shellNL_log.txt`, SHA-256 `3D5C4F1B20384655F9012ADE842B99E3B06B3799FC9AB16DD6FD141E18B77906` |
|
||||
| linear | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-72742739390700-2/shell.inp` | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-72742739390700-2/shell_results.h5`, SHA-256 `8AEE34D5BC80382D7E6DE85C51F0F8BCBF451CD5F5C7B8DDA6C585EB22B31763`; `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-72742739390700-2/shell_log.txt`, zero bytes, SHA-256 `E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855` |
|
||||
|
||||
## Compare and classify
|
||||
|
||||
Rows were matched by `(case_id, accepted_state, canonical_instance_name, source_node_label,
|
||||
component)`, never CSV order. Required HDF5 projections were factor-one
|
||||
`/steps/Step-1/frames/9/nodal/displacement`, `generalized_internal_force`,
|
||||
`generalized_external_force`, `generalized_residual`, `reaction`, `/model/nodal_constraint_mask`,
|
||||
and `/global/equilibrium`; the linear control uses `/steps/Step-1/frames/0/nodal/displacement`.
|
||||
All required source keys, components, uniqueness and finite checks passed before tolerance.
|
||||
|
||||
External families use `docs/TOLERANCE.md`: reference-only scale, near-zero band `0.01*S`, row
|
||||
relative limit `0.05`, and family RMS limit `0.01`. `rows passed` is the deterministic per-row
|
||||
decision count; U is blocking and UR is warning-only.
|
||||
|
||||
| family | disposition | rows passed | scale | max abs | max relative | relative RMS | result |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| fine.translation | blocking | 2187/2187 | 2.57957054e-05 | 1.6193812501e-07 | 6.27771648e-03 | 2.27230258e-04 | pass |
|
||||
| fine.rotation | warning-only | 2187/2187 | 6.58704994e-06 | 3.0109969916e-08 | 3.54510604e-02 | 4.68253850e-04 | pass |
|
||||
| coarse.translation | blocking | 147/147 | 2.37408203e-05 | 1.9037855439e-07 | 8.57111694e-03 | 1.03327572e-03 | pass |
|
||||
| coarse.rotation | warning-only | 147/147 | 7.60725743e-06 | 6.8828551252e-08 | 4.69071871e-02 | 2.97713732e-03 | pass |
|
||||
| linear.translation | blocking | 147/147 | 2.37408203e-05 | 1.9037853492e-07 | 8.57111604e-03 | 1.03327567e-03 | pass |
|
||||
| linear.rotation | warning-only | 147/147 | 7.60725743e-06 | 6.8828549627e-08 | 4.69071860e-02 | 2.97713730e-03 | pass |
|
||||
|
||||
Worst absolute rows were fine U `PART-1-1/node 2/U3`, fine UR
|
||||
`PART-1-1/node 442/UR1`, coarse U `PART-1-1/node 2/U3`, coarse UR
|
||||
`PART-1-1/node 37/UR1`, linear U `PART-1-1/node 2/U3`, and linear UR
|
||||
`PART-1-1/node 44/UR1`. No warning-only family failed.
|
||||
|
||||
The eight blocking internal families are independent of Abaqus CSV tolerance.
|
||||
|
||||
| family | rows | numerator | scale | metric | gate | result |
|
||||
| --- | ---: | ---: | ---: | ---: | --- | --- |
|
||||
| fine.global_force_balance | 3 | 2.6775524023e-07 | 1.2773012379e+05 | 2.09625758e-12 | `<=1e-8` | pass |
|
||||
| fine.global_moment_balance | 3 | 1.3258637157e-04 | 4.8292847478e+05 | 2.74546602e-10 | `<=1e-8` | pass |
|
||||
| fine.accepted_free_force_residual | 1875 | 3.8659904671e-03 | 1.0000000000e+05 | 3.86599047e-08 | `<=1e-2` | pass |
|
||||
| fine.accepted_free_moment_residual | 1875 | 1.3760745787e-06 | 0 | exact-zero typed `<=1e-3` | exact-zero branch | pass |
|
||||
| coarse.global_force_balance | 3 | 8.2512269735e-07 | 1.0000000439e+05 | 8.25122661e-12 | `<=1e-8` | pass |
|
||||
| coarse.global_moment_balance | 3 | 4.1788609354e-05 | 2.9558678960e+05 | 1.41375091e-10 | `<=1e-8` | pass |
|
||||
| coarse.accepted_free_force_residual | 75 | 3.1462885132e-02 | 1.0000000000e+05 | 3.14628851e-07 | `<=1e-2` | pass |
|
||||
| coarse.accepted_free_moment_residual | 75 | 3.3292052422e-06 | 0 | exact-zero typed `<=1e-3` | exact-zero branch | pass |
|
||||
|
||||
The constrained-reaction resultant remains a distinct review summary: fine force
|
||||
`[1.2306822228e-12, -3.5943123478e-12, 1.0000000000e+05]`, moment
|
||||
`[2.7057467378e-11, -5.6934368331e-10, -1.3258637157e-04]`; coarse force
|
||||
`[7.9591888635e-12, 7.2906680693e-12, 1.0000000000e+05]`, moment
|
||||
`[-1.7826096155e-10, -2.5829649530e-10, -4.1788609352e-05]`.
|
||||
|
||||
Local reaction RF/RM source-key/inventory/finite prechecks passed, but the following direct
|
||||
row/RMS findings remain review-only and therefore do not change the blocking classification.
|
||||
|
||||
| review family | rows passed | relative RMS | worst absolute row | finding |
|
||||
| --- | ---: | ---: | --- | --- |
|
||||
| coarse in-plane RF | 4/48 | 1.1437709953e-01 | node 3/RF1, 5.3914239451e-01 | review-only failure |
|
||||
| coarse RF3 | 4/24 | 4.8448360241e-02 | node 31/RF3, 7.1995422354e+02 | review-only failure |
|
||||
| coarse physical RM1/RM2 | 32/48 | 2.7464126167e-02 | node 22/RM1, 1.0484921048e+03 | review-only failure |
|
||||
| fine in-plane RF | 12/208 | 1.1971372918e-01 | node 1/RF2, 1.5298653299e-01 | review-only failure |
|
||||
| fine RF3 | 92/104 | 5.3476362434e-03 | node 9/RF3, 4.6176964624e+01 | review-only row failure |
|
||||
| fine physical RM1/RM2 | 112/208 | 3.3719303859e-03 | node 52/RM2, 3.1549617088e+01 | review-only row failure |
|
||||
|
||||
`RM3` and stress were not numerically compared. Artifact inventory, byte size, timestamp, and
|
||||
SHA-256 equality before/after all runs prove that no reference artifact changed.
|
||||
@@ -4,234 +4,343 @@
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirements: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirements_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_numerical_review: `docs/nonlinear-static-newton-raphson/numerical-review.md`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- status: `pass-for-io-definition`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-23`
|
||||
- date: `2026-08-28`
|
||||
- post_closure_addendum_date: `2026-08-29`
|
||||
- post_closure_additive_case: `shellnl-meshfine-02-s4-final`
|
||||
- artifact_policy: `read-only-existing-files`
|
||||
- tolerance_policy: `docs/TOLERANCE.md`
|
||||
- external_tolerance_policy: `docs/TOLERANCE.md`
|
||||
|
||||
이 문서는 logical reference quantity, source identity, component matching, row precheck와
|
||||
blocking/warning 분류만 정의한다. 최종 HDF5 dataset projection은 I/O Definition Agent 소유다.
|
||||
이 문서는 logical quantity, source identity, component matching, row precheck와
|
||||
blocking/warning-only/review-only 분류를 정의한다. 최종 HDF5 dataset projection은 I/O
|
||||
Definition Agent 소유이며 이 문서에는 dataset path를 정의하지 않는다.
|
||||
|
||||
## 2. Reference Acceptance Scope
|
||||
|
||||
Required scope는 두 stored case다.
|
||||
승인 closure 계약의 세 stored case를 유지하고 merge 후 별도 검증할 한 case를 추가한다.
|
||||
|
||||
- `shellnl-s4-final`: `nlgeom=YES` nonlinear static S4 final accepted state를 비교하는
|
||||
primary external reference case.
|
||||
- `shell-s4-linear-limit`: 같은 S4 mesh의 `nlgeom=NO` read-only linear-limit/reference-identity
|
||||
regression case. 이 case는 nonlinear response evidence가 아니며, 현재 stress CSV의 element-label
|
||||
ordering을 row-order matching으로 사용하지 않는다.
|
||||
- `shellnl-meshfine-s4-final`: 사용자가 추가하고 검증을 요청한 729-node/676-element
|
||||
mesh-refined nonlinear primary case. External `U1/U2/U3`와 factor-one internal equilibrium은
|
||||
blocking이다.
|
||||
- `shellnl-s4-final`: 49-node/36-element coarse nonlinear companion regression. Fine case와
|
||||
별도 reference에 대해 external `U1/U2/U3`와 factor-one internal equilibrium을 blocking으로
|
||||
검증한다.
|
||||
- `shell-s4-linear-limit`: 같은 coarse topology의 `NLGEOM=NO` linear-limit/source-identity
|
||||
regression. Nonlinear response evidence로 부르지 않는다.
|
||||
- `shellnl-meshfine-02-s4-final`: 729-node/676-element post-closure nonlinear additive case.
|
||||
과거 canonical Stage 6 `reference-comparison.md`에는 포함되지 않았으며 merge된 current code로
|
||||
별도 verification한다. 이 pending comparison은 기존 세 case의 승인 gate 또는 Release verdict를
|
||||
소급 변경하지 않는다.
|
||||
|
||||
`shellNL`은 final-state reference comparison에는 충분하지만 weak nonlinear response다. Dominant
|
||||
`U3`/stress 값이 linear case와 거의 같으므로 finite-rotation objectivity, consistent tangent,
|
||||
commit/rollback과 convergence lifecycle은 `numerical-review.md`의 blocking internal tests로 검증한다.
|
||||
모든 selected case에서 displacement `U1/U2/U3`는 blocking, `UR1/UR2/UR3`는
|
||||
warning-only다. Coarse/fine/post-closure local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`는
|
||||
common external policy로 exact error/precheck evidence를 만들되 review-only이고 전체 blocking
|
||||
verdict를 바꾸지 않는다. Local `RM3`와 stress는 numerical comparison에서 제외한다.
|
||||
|
||||
## 3. Reference Case Inventory with exact input and required CSV paths
|
||||
Coarse와 fine은 각자의 input/CSV에 독립적으로 비교한다. 두 mesh 사이 node interpolation,
|
||||
row pairing, averaging, collapse, observed convergence order 또는 direct coarse/fine equality
|
||||
gate를 만들지 않는다. Fine case 추가는 Abaqus S4와 FESA MITC4의 element formulation,
|
||||
integration, stabilization 또는 internal behavior equivalence를 의미하지 않는다.
|
||||
`shellnl-meshfine-02-s4-final`도 자기 input/CSV에만 독립적으로 비교하고 기존 fine case와
|
||||
cross-case equality 또는 mesh-convergence gate를 만들지 않는다.
|
||||
|
||||
| case id | artifact role | required comparison artifact | exact path | observed status |
|
||||
## 3. Reference Case Inventory
|
||||
|
||||
### 3.1 Exact input and CSV paths
|
||||
|
||||
| case id | purpose | exact path | required disposition | observed status |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `shellnl-s4-final` | nonlinear input | yes | `reference/shellNL/shellNL.inp` | readable; S4, 49 nodes, 36 elements, `NLGEOM=YES` |
|
||||
| `shellnl-s4-final` | displacement reference | yes | `reference/shellNL/shellNL displacements.csv` | 49 finite unique node rows; one factor-one Frame |
|
||||
| `shellnl-s4-final` | reaction reference | yes | `reference/shellNL/shellNL reactions.csv` | 49 finite unique node rows; one factor-one Frame |
|
||||
| `shellnl-s4-final` | stress review evidence | no | `reference/shellNL/shellNL stresses.csv` | 288 finite unique rows; element labels `1..36` in stored ascending blocks |
|
||||
| `shell-s4-linear-limit` | linear control input | yes | `reference/shell/shell.inp` | readable; S4, 49 nodes, 36 elements, `NLGEOM=NO` |
|
||||
| `shell-s4-linear-limit` | displacement reference | yes | `reference/shell/shell displacements.csv` | 49 finite unique node rows; no `Frame` column |
|
||||
| `shell-s4-linear-limit` | reaction review evidence | no | `reference/shell/shell reactions.csv` | 49 finite unique node rows |
|
||||
| `shell-s4-linear-limit` | stress review evidence | no | `reference/shell/shell stresses.csv` | 288 finite unique rows; element labels `1..36` in stored ascending blocks |
|
||||
| `shell-s4-linear-limit` | linear input | `reference/shell/shell.inp` | required | readable; S4, 49 nodes, 36 elements, `NLGEOM=NO` |
|
||||
| `shell-s4-linear-limit` | displacement reference | `reference/shell/shell displacements.csv` | required blocking/warning | 49 unique finite rows; single final static state |
|
||||
| `shell-s4-linear-limit` | reaction inventory | `reference/shell/shell reactions.csv` | inspection-only | 49 unique finite rows |
|
||||
| `shell-s4-linear-limit` | stress ordering inventory | `reference/shell/shell stresses.csv` | optional inspection | 288 rows; element labels `1..36` in contiguous ascending blocks |
|
||||
| `shellnl-s4-final` | coarse nonlinear input | `reference/shellNL/shellNL.inp` | required | readable; S4, 49 nodes, 36 elements, `NLGEOM=YES` |
|
||||
| `shellnl-s4-final` | displacement reference | `reference/shellNL/shellNL displacements.csv` | required blocking/warning | 49 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-s4-final` | local reaction reference | `reference/shellNL/shellNL reactions.csv` | required review-only | 49 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-s4-final` | stress inventory | `reference/shellNL/shellNL stresses.csv` | optional inspection | 288 rows; element labels `1..36` in contiguous ascending blocks |
|
||||
| `shellnl-meshfine-s4-final` | fine nonlinear input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | required | readable; S4, 729 nodes, 676 elements, `NLGEOM=YES` |
|
||||
| `shellnl-meshfine-s4-final` | displacement reference | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning | 729 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-s4-final` | local reaction reference | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | required review-only | 729 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-s4-final` | stress inventory | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional inspection | 5,408 rows in ascending element blocks; one malformed optional node label `ss` |
|
||||
| `shellnl-meshfine-02-s4-final` | post-closure nonlinear input | `reference/shellNL-meshfine_02/shellNL-meshfine_02.inp` | required for separate verification | readable; S4, 729 nodes, 676 elements, `NLGEOM=YES` |
|
||||
| `shellnl-meshfine-02-s4-final` | displacement reference | `reference/shellNL-meshfine_02/shellNL-meshfine_02 displacements.csv` | required blocking/warning | 729 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-02-s4-final` | local reaction reference | `reference/shellNL-meshfine_02/shellNL-meshfine_02 reactions.csv` | required review-only | 729 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-02-s4-final` | stress inventory | `reference/shellNL-meshfine_02/shellNL-meshfine_02 stresses.csv` | optional inspection | 5,408 unique finite inventory rows; excluded from numerical comparison |
|
||||
|
||||
`required comparison artifact=no`인 파일도 이번 review에서 읽기 가능성, row identity,
|
||||
finite values와 current ordering을 확인했다. 그러나 해당 파일은 missing-required-artifact
|
||||
판정이나 tolerance family를 만들지 않는다.
|
||||
`reference/shell/shell stresses.csv`는 사용자 변경 후 element label `1..36` 순서로 저장되어
|
||||
있음을 확인했다. Row order는 matching identity가 아니며 deterministic inspection display에만
|
||||
사용한다. Fine stress의 `Element Label=1`, `SNEG`, `Node Label=ss` 한 행은 optional excluded
|
||||
artifact issue다. 이 파일을 rename, repair, normalize 또는 rewrite하지 않는다.
|
||||
|
||||
두 `.inp`는 같은 node/element/connectivity, material/section, instance, boundary와 center-node
|
||||
`CLOAD`를 사용한다. Text 차이는 heading identity, `NLGEOM=NO -> YES`, 그리고 `*STATIC`
|
||||
data `1.,1.,1e-05,1. -> 0.1,1.,0.001,0.1`이다. 따라서 `shellNL`은 실제 nonlinear
|
||||
selector와 승인된 fixed increment `0.1`을 갖지만, 두 deck 차이를 오직 `NLGEOM` 하나의
|
||||
isolated effect라고 표현하지 않는다.
|
||||
Coarse와 fine nonlinear input은 homogeneous isotropic material `E=2.1e11`, `nu=0.3`,
|
||||
shell thickness `0.5`, center node-set load `DOF 3 = -100000`, all-six-DOF perimeter support,
|
||||
`*STATIC 0.1,1.,0.001,0.1`을 사용한다. Fine case는 같은 physical setup의 refined topology다.
|
||||
|
||||
Read-only SHA-256 observations:
|
||||
Post-closure `_02` input은 같은 fine topology, material, section, `Set-2` 104-node all-six-DOF
|
||||
support와 `*STATIC`을 사용하지만 source load는 `F1=+1e8`, `F2=+1e8`, `F3=-1e8`이다.
|
||||
따라서 기존 fine case의 `F3=-1e5`와 동일 case로 취급하지 않는다.
|
||||
|
||||
| path | SHA-256 |
|
||||
### 3.2 Read-only artifact hashes
|
||||
|
||||
| exact path | SHA-256 |
|
||||
| --- | --- |
|
||||
| `reference/shellNL/shellNL.inp` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| `reference/shell/shell reactions.csv` | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| `reference/shell/shell stresses.csv` | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
| `reference/shellNL/shellNL.inp` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine.inp` | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02.inp` | `DAEC7592489837B165D55382CAEAF53E21D84D804AA38C73CBF35E5CC0BAC3E5` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 displacements.csv` | `18EC051D265E0BD2C441FE73C08E097B83EE85BC2EB32FFBE3AF0DCB9CB89672` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 reactions.csv` | `59348996E0CE80687C9EB2747EEABF84ACED4CE97F8A56F0FFDDBDCA404A57A3` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 stresses.csv` | `933A72025A0E897FD65F81C913E53D1730BD551CE95CBDEA96F9F99B10BE8B18` |
|
||||
|
||||
Post-closure artifact byte counts는 input `56,554`, displacement `110,555`, reaction
|
||||
`109,000`, stress `1,036,916`이다. Hash와 byte count는 read-only audit evidence이며 artifact를
|
||||
rewrite하거나 canonical Stage 6 evidence로 소급 재분류하지 않는다.
|
||||
|
||||
## 4. Source Identity and Component Contract
|
||||
|
||||
### 4.1 Accepted-state identity
|
||||
### 4.1 Case and accepted-state identity
|
||||
|
||||
- Abaqus identifiers are case-insensitive semantic identities. Input spelling
|
||||
`Part-1-1` and CSV spelling `PART-1-1` match as one instance while original text is
|
||||
retained in artifacts and reports; no file or row is rewritten.
|
||||
- `shellnl-s4-final` rows require exact CSV `Frame` value
|
||||
`Increment 10: Step Time = 1.000`, mapped logically to the accepted factor-one state.
|
||||
- `shell-s4-linear-limit` rows have no `Frame` column and map to the single final static state.
|
||||
- Row order is never a matching identity. It may only be used for deterministic reporting after
|
||||
source keys are matched.
|
||||
- Instance identity는 case-insensitive semantic match다. Artifact spelling `Part-1-1`과
|
||||
`PART-1-1`은 같은 instance이지만 file text를 rewrite하지 않는다.
|
||||
- 세 nonlinear case required rows의 exact CSV Frame은
|
||||
`Increment 10: Step Time = 1.000`이며 accepted factor-one state에 대응한다.
|
||||
- Linear case에는 `Frame` column이 없고 single final static state로 해석한다.
|
||||
- Row order는 identity가 아니다. Stable key match 후 deterministic reporting order로만 정렬한다.
|
||||
|
||||
### 4.2 Nodal displacement contract
|
||||
### 4.2 Nodal displacement and rotation
|
||||
|
||||
Required mapping is `U-U1/U-U2/U-U3 -> U1/U2/U3` and
|
||||
`UR-UR1/UR-UR2/UR-UR3 -> UR1/UR2/UR3`. U is global length; UR is the
|
||||
dimensionless fixed-initial global rotation-vector output. Logical key is
|
||||
CSV `U-U1/U-U2/U-U3`는 logical `U1/U2/U3`, `UR-UR1/UR-UR2/UR-UR3`는
|
||||
logical `UR1/UR2/UR3`에 대응한다. Key는
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
Both cases require source node labels `1..49` exactly once. U components form one
|
||||
blocking translation family and UR components form one warning-only rotation family,
|
||||
preserving the project MITC4 classification.
|
||||
이다. Coarse/linear은 labels `1..49`, fine과 post-closure `_02`는 `1..729`를 각각 정확히 한 번 요구한다.
|
||||
U는 global length/blocking, UR은 fixed-initial global rotation-vector/warning-only다.
|
||||
|
||||
### 4.3 Nonlinear reaction contract
|
||||
### 4.3 Local reaction review contract
|
||||
|
||||
Reaction comparison applies only to `shellnl-s4-final` and only to the input boundary
|
||||
`Set-2` nodes:
|
||||
Reaction source rows는 input `Set-2` constraint mask로 선택한다.
|
||||
|
||||
```text
|
||||
1,3,4,5,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,33
|
||||
```
|
||||
- coarse: `1, 3..9, 14..17, 22..33` — 24 nodes, all six DOFs constrained.
|
||||
- fine: `1, 3..9, 34..57, 82..153` — 104 nodes, all six DOFs constrained.
|
||||
- post-closure `_02`: fine과 같은 exact `Set-2` inventory — 104 nodes, all six DOFs constrained.
|
||||
|
||||
All six global components are constrained at these 24 nodes. Other CSV node rows remain
|
||||
part of file/schema/finite inventory but are not numerical reaction rows: FESA free entries
|
||||
are equilibrium residual evidence, not Abaqus free-node zero reactions.
|
||||
다른 CSV node rows는 file/schema/finite inventory지만 local reaction numerical rows가 아니다.
|
||||
Free FESA entries는 reaction이 아니라 accepted free residual evidence다.
|
||||
|
||||
| CSV components | logical quantity | FESA meaning | disposition |
|
||||
| CSV components | logical quantity | matching FESA meaning | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `RF-RF1`, `RF-RF2` | fixed-initial shell-plane reaction force | constrained translational full residual, global force | blocking family |
|
||||
| `RF-RF3` | fixed-initial transverse reaction force | constrained translational full residual, global force | blocking family |
|
||||
| `RM-RM1`, `RM-RM2` | tangent-plane spatial reaction moment | `J_l(phi)^(-T)` conversion of the constrained generalized reaction, global force-length | blocking family |
|
||||
| `RM-RM3` | director/drilling-axis reaction review value | stabilization-dependent; no physical external equivalence target | excluded |
|
||||
| `RF-RF1`, `RF-RF2` | in-plane local reaction force | constrained translational full residual, global force | `review-only` |
|
||||
| `RF-RF3` | transverse local reaction force | constrained translational full residual, global force | `review-only` |
|
||||
| `RM-RM1`, `RM-RM2` | tangent-plane physical reaction moment | constrained generalized residual converted by `J_l(phi)^(-T)`, global spatial force-length | `review-only` |
|
||||
| `RM-RM3` | director/drilling-axis row | no approved physical external equivalence target | `excluded` |
|
||||
|
||||
In-plane and transverse force are distinct model-fixed logical projections and therefore
|
||||
use distinct families. Raw generalized rotation-coordinate residual is not matched directly
|
||||
to the CSV `RM` value.
|
||||
Raw generalized rotational residual을 CSV RM에 직접 match하지 않는다. Review-only는 row omission을
|
||||
허용한다는 뜻이 아니다. Exact row precheck와 common-policy error/RMS를 모두 보고하되 그 결과가
|
||||
blocking verdict를 변경하지 않는다는 뜻이다.
|
||||
|
||||
### 4.4 Stress review identity and comparison exclusion
|
||||
### 4.4 Distinct factor-one equilibrium quantities
|
||||
|
||||
Stress rows have read-only identity
|
||||
각 nonlinear case에서 같은 accepted factor-one state를 사용한다.
|
||||
|
||||
| logical quantity | source identity / projection | components | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| accepted free residual | input mask로 결정한 stable free `(instance,node,global DOF component)` rows; force와 moment channel 분리 | free `UX/UY/UZ`; free `URX/URY/URZ` generalized covectors | `blocking-internal` |
|
||||
| constrained reaction resultant | constrained source rows만 current arm과 spatial physical moment로 합산 | force `[1,2,3]`; moment `[1,2,3]` | `review-only-summary` |
|
||||
| applied-plus-reaction balance error | all resolved applied sources plus constrained reactions; global origin `[0,0,0]`; `x=X+u`; physical spatial nodal moments | force `[1,2,3]`; moment `[1,2,3]` | `blocking-internal` |
|
||||
|
||||
Constrained reaction resultant force is `sum(F_react)`. Its moment is
|
||||
`sum(x cross F_react + M_react)`. Balance error adds the corresponding applied force and
|
||||
`x cross F_appl + M_appl`. Accepted free residual is neither sum. 세 quantity는 exact
|
||||
source/state identity를 공유하지만 interchangeable하지 않다.
|
||||
|
||||
현재 stored case의 constrained prescribed `u=phi=0` 때문에 support current arm과 initial arm,
|
||||
generalized moment와 spatial moment가 수치적으로 일치한다. 이는 supported general nonzero
|
||||
prescribed translation/rotation에서 initial arm/raw rotational residual을 재사용할 근거가 아니다.
|
||||
|
||||
### 4.5 Stress inventory and exclusion
|
||||
|
||||
Stress inspection key는
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, instance, element label,
|
||||
element-corner node label, SPOS/SNEG section surface, component)
|
||||
```
|
||||
|
||||
Every current element has its four connectivity nodes and one `SPOS` plus one `SNEG`
|
||||
row per node. The files are ordered in contiguous ascending element-label blocks `1..36`;
|
||||
this exact artifact order is retained and no node/surface secondary reorder is applied.
|
||||
이다. Stored stress는 element-corner SPOS/SNEG rows이고 FESA 승인 recovery는 midsurface Gauss
|
||||
locations의 direct bottom/middle/top `[S11,S22,S12]`다. Nodal extrapolation/averaging을 만들지
|
||||
않으며 `S-S11/S-S22/S-S12/S-S33` 어느 것도 external family에 포함하지 않는다.
|
||||
|
||||
The identity is nevertheless not the approved FESA recovery location: FESA emits direct
|
||||
`[S11,S22,S12]` at four midsurface Gauss locations and bottom/middle/top positions, without
|
||||
nodal extrapolation or averaging, and does not emit `S33`. Consequently no stress column
|
||||
forms a blocking or warning-only comparison family. Stress files remain optional read-only
|
||||
review evidence only.
|
||||
### 4.6 External comparison families
|
||||
|
||||
### 4.5 Comparison families
|
||||
|
||||
| family id | components and source set | row count | units / coordinates | disposition |
|
||||
| family id | components / source rows | rows | units / coordinates | disposition |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| `linear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | length / global | blocking regression |
|
||||
| `linear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | length / global | blocking |
|
||||
| `nonlinear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.reaction_inplane_force` | `RF1,RF2`, 24 constrained nodes | 48 | force / fixed-initial global plane | blocking |
|
||||
| `nonlinear.reaction_transverse_force` | `RF3`, 24 constrained nodes | 24 | force / fixed-initial global transverse | blocking |
|
||||
| `nonlinear.reaction_physical_moment` | `RM1,RM2`, 24 constrained nodes | 48 | force-length / global spatial | blocking |
|
||||
| `linear.translation` | U1/U2/U3; nodes `1..49` | 147 | length / global | `blocking` |
|
||||
| `linear.rotation` | UR1/UR2/UR3; nodes `1..49` | 147 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `coarse.translation` | U1/U2/U3; nodes `1..49` | 147 | length / global | `blocking` |
|
||||
| `coarse.rotation` | UR1/UR2/UR3; nodes `1..49` | 147 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `coarse.local_reaction_inplane_force` | RF1/RF2; 24 constrained nodes | 48 | force / global shell plane | `review-only` |
|
||||
| `coarse.local_reaction_transverse_force` | RF3; 24 constrained nodes | 24 | force / global transverse | `review-only` |
|
||||
| `coarse.local_reaction_physical_moment` | RM1/RM2; 24 constrained nodes | 48 | force-length / global spatial | `review-only` |
|
||||
| `fine.translation` | U1/U2/U3; nodes `1..729` | 2,187 | length / global | `blocking` |
|
||||
| `fine.rotation` | UR1/UR2/UR3; nodes `1..729` | 2,187 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `fine.local_reaction_inplane_force` | RF1/RF2; 104 constrained nodes | 208 | force / global shell plane | `review-only` |
|
||||
| `fine.local_reaction_transverse_force` | RF3; 104 constrained nodes | 104 | force / global transverse | `review-only` |
|
||||
| `fine.local_reaction_physical_moment` | RM1/RM2; 104 constrained nodes | 208 | force-length / global spatial | `review-only` |
|
||||
| `meshfine02.translation` | U1/U2/U3; nodes `1..729` | 2,187 | length / global | `blocking` |
|
||||
| `meshfine02.rotation` | UR1/UR2/UR3; nodes `1..729` | 2,187 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `meshfine02.local_reaction_inplane_force` | RF1/RF2; 104 constrained nodes | 208 | force / global shell plane | `review-only` |
|
||||
| `meshfine02.local_reaction_transverse_force` | RF3; 104 constrained nodes | 104 | force / global transverse | `review-only` |
|
||||
| `meshfine02.local_reaction_physical_moment` | RM1/RM2; 104 constrained nodes | 208 | force-length / global spatial | `review-only` |
|
||||
|
||||
### 4.7 Internal blocking verification families
|
||||
|
||||
| family id | exact rows/components | gate |
|
||||
| --- | --- | --- |
|
||||
| `coarse.accepted_free_force_residual` | 75 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `coarse.accepted_free_moment_residual` | 75 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `coarse.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `coarse.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `fine.accepted_free_force_residual` | 1,875 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `fine.accepted_free_moment_residual` | 1,875 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `fine.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `fine.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `meshfine02.accepted_free_force_residual` | 1,875 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `meshfine02.accepted_free_moment_residual` | 1,875 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `meshfine02.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `meshfine02.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
|
||||
이 internal families에는 Abaqus CSV value 또는 `docs/TOLERANCE.md`를 적용하지 않는다.
|
||||
Approved analytical/invariant gates이며 exact definitions는 `numerical-review.md` §6.2다.
|
||||
|
||||
## 5. Row Prechecks
|
||||
|
||||
Before tolerance, the comparator shall fail the affected comparison if any required condition
|
||||
below is false.
|
||||
Tolerance 또는 internal metric 전에 다음을 검사한다.
|
||||
|
||||
1. Exact declared input path and every `required comparison artifact=yes` CSV path for the
|
||||
case exist and are readable.
|
||||
2. Required headers are present after trimming surrounding whitespace from header names.
|
||||
3. `shellnl-s4-final` contains only the exact required `Frame` value for required rows.
|
||||
4. Wide CSV rows expand to component rows using the component contract in Section 4.
|
||||
5. Required source row keys are unique. Duplicate wide keys or duplicate expanded component keys fail.
|
||||
6. Displacement projection requires all 49 source nodes and declared components. Nonlinear
|
||||
reaction projection derives the exact 24-node/component set from the input constraint mask;
|
||||
it does not infer reaction identity from CSV zero values.
|
||||
7. FESA and reference required projected row-key sets are exactly equal: missing and extra rows
|
||||
both fail.
|
||||
8. Every required numeric value is finite. Nonfinite required FESA or CSV value fails before tolerance.
|
||||
9. Optional stress inventory uses `(instance, element label, node label, section point)` and verifies
|
||||
the current ascending element-label blocks, connectivity nodes and SPOS/SNEG pair. This inspection
|
||||
does not create a stress equality gate.
|
||||
10. Required rows are not omitted, synthesized, normalized, averaged, sorted into a different identity,
|
||||
zero-clamped, or repaired.
|
||||
1. 각 case의 exact declared input과 해당 disposition에 필요한 CSV가 존재하고 readable하다.
|
||||
2. Header는 surrounding whitespace만 trim하고 required names/components가 모두 있어야 한다.
|
||||
3. Nonlinear required rows의 Frame은 exact factor-one identity여야 한다.
|
||||
4. Wide CSV는 Section 4 contract로 component rows에 결정적으로 expand한다.
|
||||
5. Wide key와 expanded key는 unique해야 한다. Duplicate는 affected family를 tolerance 전에 fail한다.
|
||||
6. Input node inventory와 source constraint mask로 expected key set을 만든다. CSV zero values 또는
|
||||
row position에서 reaction identity를 추론하지 않는다.
|
||||
7. FESA와 reference projected key sets는 exact equal해야 한다. Missing과 extra rows를 모두 fail한다.
|
||||
8. Required FESA/CSV/internal values와 derived scales/norms는 모두 finite여야 한다.
|
||||
9. Internal free residual rows는 exact free mask와 force/moment partition을 보존한다. Global balance는
|
||||
모든 applied source와 constrained reaction을 stable source order로 한 번씩만 사용한다.
|
||||
10. Local review rows는 global resultant로 collapse하거나 대체하지 않는다. Review precheck failure는
|
||||
deterministic review failure로 기록하지만 blocking verdict를 변경하지 않는다.
|
||||
11. Warning-only precheck/tolerance failure는 deterministic warning을 만들고 blocking verdict를
|
||||
변경하지 않는다. Blocking precheck failure는 전체 comparison을 fail한다.
|
||||
12. Row omission/synthesis, averaging, source-order matching, clamp, normalization 또는 artifact repair를
|
||||
허용하지 않는다.
|
||||
|
||||
Observed read-only inventory used for this contract:
|
||||
Observed read-only nodal CSV audit:
|
||||
|
||||
| CSV | observed wide key columns | duplicate wide keys | nonfinite observed values | observed element labels |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `Frame`, `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `Frame`, `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `Frame`, `Part Instance Name`, `Element Label`, `Node Label`, `Section Point` | 0 | 0 | `1..36` |
|
||||
| `reference/shell/shell displacements.csv` | `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shell/shell reactions.csv` | `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shell/shell stresses.csv` | `Part Instance Name`, `Element Label`, `Node Label`, `Section Point` | 0 | 0 | `1..36` |
|
||||
| CSV | wide rows | duplicate keys | nonfinite required values | status |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| `reference/shell/shell displacements.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL/shellNL displacements.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL/shellNL reactions.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 displacements.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 reactions.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 stresses.csv` | 5,408 | 0 | 0 | readable; optional excluded inventory |
|
||||
|
||||
## 6. Tolerance and Blocking/Warning Policy
|
||||
|
||||
Use exactly `docs/TOLERANCE.md` for every external reference family. This report does not invent
|
||||
or calibrate tolerance values.
|
||||
### 6.1 External families
|
||||
|
||||
For each comparison family:
|
||||
Section 4.6의 모든 external blocking, warning-only와 review-only error report는
|
||||
`docs/TOLERANCE.md`를 그대로 사용한다.
|
||||
|
||||
- `S = max(abs(reference_value_i))`, using reference values only.
|
||||
- near-zero band is `0.01*S`.
|
||||
- if `abs(reference_value_i) <= 0.01*S`, row passes iff `abs(fesa-reference) <= 0.01*S`.
|
||||
- otherwise row passes iff relative error `<= 0.05`.
|
||||
- family relative RMS is `RMS(error)/S <= 0.01`.
|
||||
- no independent absolute-error floor, `max(1, S)` clamp, row omission, averaging, or zero clamp is allowed.
|
||||
- if `S = 0`, the family passes only when all FESA values are exactly zero; otherwise report
|
||||
`zero-reference-scale-nonzero-error`.
|
||||
- Reference-only `S=max(abs(reference_i))`, near-zero band `B=0.01*S`.
|
||||
- `abs(reference_i)<=B`이면 `abs(fesa-reference)<=B`.
|
||||
- 그 외 row는 relative error `<=0.05`.
|
||||
- 모든 row와 `RMS(error)/S<=0.01`이 함께 pass해야 family가 pass한다.
|
||||
- Independent absolute floor, `max(1,S)`, omission, averaging 또는 zero clamp는 없다.
|
||||
- `S=0`이면 모든 FESA 값도 exact zero일 때만 pass한다.
|
||||
|
||||
Families are separated by the exact case/logical quantities in Section 4.5. Current
|
||||
reference-only scales provide a reproducible reader/comparator audit:
|
||||
Observed reference-only scales는 reader/family audit evidence이며 calibration 값이 아니다.
|
||||
|
||||
| family | `S` | `B=0.01*S` |
|
||||
| --- | ---: | ---: |
|
||||
| `linear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `nonlinear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `nonlinear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `nonlinear.reaction_inplane_force` | `1.91663182` | `1.91663182e-2` |
|
||||
| `nonlinear.reaction_transverse_force` | `1.17769805e4` | `1.17769805e2` |
|
||||
| `nonlinear.reaction_physical_moment` | `1.95418418e4` | `1.95418418e2` |
|
||||
| family | rows | `S` | `B=0.01*S` |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| `linear.translation` | 147 | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | 147 | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.translation` | 147 | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `coarse.rotation` | 147 | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.local_reaction_inplane_force` | 48 | `1.91663182` | `1.91663182e-2` |
|
||||
| `coarse.local_reaction_transverse_force` | 24 | `1.17769805e4` | `1.17769805e2` |
|
||||
| `coarse.local_reaction_physical_moment` | 48 | `1.95418418e4` | `1.95418418e2` |
|
||||
| `fine.translation` | 2,187 | `2.57957054e-5` | `2.57957054e-7` |
|
||||
| `fine.rotation` | 2,187 | `6.58704994e-6` | `6.58704994e-8` |
|
||||
| `fine.local_reaction_inplane_force` | 208 | `5.38827419e-1` | `5.38827419e-3` |
|
||||
| `fine.local_reaction_transverse_force` | 104 | `2.78506128e3` | `2.78506128e1` |
|
||||
| `fine.local_reaction_physical_moment` | 208 | `4.71557520e3` | `4.71557520e1` |
|
||||
| `meshfine02.translation` | 2,187 | `0.0257712454` | `0.000257712454` |
|
||||
| `meshfine02.rotation` | 2,187 | `0.00658291345` | `0.0000658291345` |
|
||||
| `meshfine02.local_reaction_inplane_force` | 208 | `3347707` | `33477.07` |
|
||||
| `meshfine02.local_reaction_transverse_force` | 104 | `2802821.5` | `28028.215` |
|
||||
| `meshfine02.local_reaction_physical_moment` | 208 | `4722449.5` | `47224.495` |
|
||||
|
||||
Any `blocking` family row or RMS failure fails the reference comparison for the feature.
|
||||
`warning-only` failures produce deterministic warning evidence but do not change the blocking
|
||||
verdict. `RM3` and stress artifacts create neither a blocking nor warning-only tolerance family.
|
||||
Blocking family의 precheck/row/RMS failure만 전체 external-reference verdict를 fail한다.
|
||||
Warning-only는 warning, review-only는 deterministic review finding/error table을 남기지만
|
||||
blocking verdict를 바꾸지 않는다. `RM3`와 stress는 family를 만들지 않는다.
|
||||
|
||||
### 6.2 Internal equilibrium families
|
||||
|
||||
- Accepted free force/moment residual은 factor-one accepted trial에서 NSNR-069을 그대로
|
||||
재현한다. Nonzero matching external scale이면 infinity-norm relative `<=1e-2`; exact-zero
|
||||
scale이면 typed absolute `<=1e-3` force 또는 force-length다.
|
||||
- Global force/moment balance는 `numerical-review.md` §6.2의 sum-of-contribution scale과
|
||||
dimension-separated normalized metric을 사용하며 각각 `<=1e-8`이다.
|
||||
- Internal gate에 external family tolerance, absolute floor, reference-derived scale 또는 local
|
||||
nodal reaction error를 섞지 않는다.
|
||||
|
||||
## 7. Open Issues and I/O Handoff
|
||||
|
||||
Open issues blocking I/O Definition: 없음.
|
||||
|
||||
I/O Definition Agent handoff:
|
||||
Post-closure verification status: `shellnl-meshfine-02-s4-final`은 artifact/schema/family contract가
|
||||
준비되었지만 과거 canonical Stage 6 comparison에는 포함되지 않았다. Merge된 current code의
|
||||
별도 실행과 comparison evidence는 Implementation Agent 소유이며 이 inventory는 pass/fail을
|
||||
선언하지 않는다. 이 pending evidence는 기존 feature closure 또는 Release verdict를 바꾸지 않는다.
|
||||
|
||||
- Project only the comparison quantities in Sections 4.2, 4.3 and 4.5 to authoritative FESA
|
||||
result datasets without changing source identity or final comparison disposition.
|
||||
- Preserve `Frame` handling for `shellnl-s4-final` as accepted factor-one state identity; do not expose
|
||||
trial Newton history as reference rows.
|
||||
- Derive constrained reaction identity from the input mask. Compare `RM1/RM2` with the global
|
||||
spatial physical reaction moment, not the raw generalized rotation-coordinate covector.
|
||||
- Preserve approved Gauss direct stress recovery. Do not create element-corner stress,
|
||||
extrapolation, averaging or a stress CSV projection for the current optional SPOS/SNEG artifacts.
|
||||
- Keep `RM3`, `S-S33`, `S-S11`, `S-S22` and `S-S12` out of current comparison families.
|
||||
- Use the common tolerance policy exactly as written above and in `docs/TOLERANCE.md`.
|
||||
I/O Definition Agent handoff through Coordinator:
|
||||
|
||||
Reference artifact status: complete for I/O Definition. No declared required input or required
|
||||
comparison CSV is missing or unreadable. Optional stress CSVs are present and readable as inventory
|
||||
evidence only. No reference artifact was generated, renamed, repaired, normalized, or modified.
|
||||
- Fine primary와 coarse companion nonlinear case의 accepted factor-one identity를 보존한다.
|
||||
- Post-closure `_02`는 기존 fine case와 독립 case/family로 projection하고 별도 current-code
|
||||
verification에 사용한다.
|
||||
- Section 4.4의 `(a)` applied-plus-reaction balance error, `(b)` constrained reaction resultant,
|
||||
`(c)` accepted free residual을 separate logical quantities로 최종 projection한다.
|
||||
- Global moment는 origin `[0,0,0]`, current `X+u` force arm과 spatial physical nodal moment를
|
||||
사용한다. General nonzero prescribed translation/rotation에서도 initial arm/raw rotational
|
||||
residual을 재사용하지 않는다.
|
||||
- Local RF/RM은 exact source-key/schema/inventory/finite/error reporting이 있는 review-only다.
|
||||
Local rows를 global sum으로 대체하거나 blocking으로 되돌리지 않는다.
|
||||
- Approved Gauss direct stress recovery를 유지한다. Optional element-corner stress artifact에
|
||||
맞춘 extrapolation/averaging 또는 stress comparison projection을 만들지 않는다.
|
||||
- Common external tolerance와 exact prechecks를 변경하지 않는다.
|
||||
|
||||
Reference artifact status: required input/displacement/reaction artifacts are present and readable.
|
||||
Optional fine stress identity issue는 transparent nonblocking inventory finding이다. 어떤 reference
|
||||
artifact도 생성, rename, repair, normalize 또는 수정하지 않았다.
|
||||
|
||||
@@ -0,0 +1,266 @@
|
||||
# Nonlinear Static Newton-Raphson Release Readiness
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| status | `ready-for-release` |
|
||||
| owner_agent | `release-agent` |
|
||||
| date | `2026-08-28` |
|
||||
| authoritative requirements | `requirements.md`, SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E` |
|
||||
| implementation evidence | `implementation-report.md`, `build-test.md`, `reference-comparison.md` |
|
||||
| physics evidence | `physics-evaluation.md`, SHA-256 `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538` |
|
||||
| audit baseline | local/origin `feat-nonlinear-static-newton-raphson` HEAD `06861608da5ffa4c09b786c3f5052dc7c6604e1b` before the Coordinator-owned Stage 8 update |
|
||||
| release meaning | FESA feature workflow closure readiness only; publish, deploy, package, tag 또는 external release 권한이 아님 |
|
||||
|
||||
Literal `feature_id`를 선언한 모든 source report는 `nonlinear-static-newton-raphson`과 일치한다.
|
||||
`reference-comparison.md`에는 literal `feature_id` field가 없지만 exact bundle path
|
||||
`docs/nonlinear-static-newton-raphson/reference-comparison.md`, title, current SHA-256와 Stage 6
|
||||
handoff chain, 그리고 Physics report의 exact source hash가 같은 feature에 결정적으로 연결한다.
|
||||
상충하는 feature identity는 없으므로 upstream report를 변경하지 않고 nonblocking metadata
|
||||
omission으로 기록한다. `requirements.md`의 `status: draft`, `approved_by: pending user re-approval`과
|
||||
`FESA-REQ-NSNR-069 status: draft`는 stale metadata다.
|
||||
Authoritative `coordination.md`는 현재 exact requirements hash가 `2026-08-27` 사용자에게 명시적으로
|
||||
재승인되었고 Stage 1이 `passed`임을 기록한다. Current Stage 4/5/6 문서도 같은 hash를 입력으로
|
||||
사용하므로 실제 승인·수치 계약과의 모순은 없다.
|
||||
|
||||
## 2. Release Scope
|
||||
|
||||
### Included
|
||||
|
||||
- No-prior-history baseline에서 정확히 하나의 geometrically nonlinear static step을 수행하는 별도
|
||||
`Full Newton-Raphson` procedure.
|
||||
- Fixed-initial-reference Total Lagrangian `FESA-MITC4`; source `S4`와 `S4R`은 같은 internal
|
||||
formulation과 `2 x 2 x 2` integration에 매핑된다.
|
||||
- Homogeneous isotropic materially linear elasticity, centered single-layer shell section,
|
||||
six global nodal DOFs와 committed/trial finite-rotation triad/director state.
|
||||
- Fixed scalar load-factor increments, final factor-one shortening, common proportional path,
|
||||
fixed-global dead `*CLOAD`, factor-one absolute `*BOUNDARY` target.
|
||||
- Same-trial residual/consistent tangent, fresh factorization/solve, four-channel convergence,
|
||||
iteration limit `100`, no line search/cutback/retry.
|
||||
- Accepted-increment-only HDF5 schema version `1`, deterministic Newton text log, atomic candidate/final
|
||||
result lifecycle, stable source/result/diagnostic ordering.
|
||||
- Factor-one accepted free residual과 current-arm/spatial-moment global applied-plus-reaction force/moment
|
||||
balance; normalized global force와 moment gate는 각각 inclusive `<=1e-8`이다.
|
||||
- Fine nonlinear primary, coarse nonlinear companion, linear control reference portfolio. External
|
||||
`U1/U2/U3`는 blocking, `UR1/UR2/UR3`는 warning-only, local RF/RM은 review-only다.
|
||||
|
||||
### Supported input and output subset
|
||||
|
||||
- 주요 supported input: `*HEADING`, `*PART`, `*NODE`, `*NSET`, `*ELEMENT` (`S4`/`S4R`),
|
||||
`*ELSET`, `*MATERIAL`, `*ELASTIC`, `*SHELL SECTION`, one identity `*ASSEMBLY`/`*INSTANCE`,
|
||||
`*BOUNDARY`, `*CLOAD`, one `*STEP, NLGEOM=YES`, one four-value `*STATIC`.
|
||||
- Exact allowlisted `VARIABLE=PRESELECT` output requests와 일부 generator/restart output syntax는
|
||||
warning no-op이며 FESA mandatory output을 바꾸지 않는다.
|
||||
- Public invocation은 `fesa.exe <model.inp>`다. Authoritative output은 input sibling
|
||||
`<stem>_results.h5`, current-run diagnostic은 `<stem>_log.txt`다. Literal `--output`을 포함한
|
||||
argv token은 compatibility alias 없이 pre-input exit `2`로 거부한다.
|
||||
- CSV는 external reference 또는 deterministic debug view일 뿐 FESA official output이 아니다.
|
||||
|
||||
### Excluded
|
||||
|
||||
- Material nonlinearity/history, Updated Lagrangian, corotational procedure, multiple/mixed nonlinear
|
||||
steps와 cross-step propagation.
|
||||
- Modified/quasi-Newton, tangent reuse, line search, damping, adaptive growth/cutback/retry,
|
||||
controlled-displacement와 arc-length/path-following.
|
||||
- Follower/non-proportional/distributed/body/pressure/edge loads, `*DLOAD`, contact, MPC, transforms,
|
||||
amplitude, composite/offset/oriented shell section과 unsupported model-affecting keywords.
|
||||
- Reduced integration/hourglass behavior selected by source `S4R`, MITC4+, trial-state HDF5 history,
|
||||
nodal stress extrapolation/averaging, `RM3`와 stored stress numerical comparison.
|
||||
- Abaqus, Midas 또는 다른 solver의 formulation, integration, stabilization, state update,
|
||||
recovery 또는 internal algorithm equivalence claim.
|
||||
|
||||
## 3. Gate Evidence Inventory
|
||||
|
||||
| gate artifact | current SHA-256 | audited status / release disposition |
|
||||
| --- | --- | --- |
|
||||
| `requirements.md` | `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E` | Coordinator Stage 1 `passed`; current hash explicitly user re-approved; 24/24 must records and Matrix rows |
|
||||
| `research.md` | raw `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570` | `passed`; LF-normalized hash matches recorded approved `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE` |
|
||||
| `formulation.md` | `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9` | `ready-for-numerical-review`; Coordinator Stage 3 `passed`, explicit user approval; current Stage 4 review found no formulation defect |
|
||||
| `numerical-review.md` | `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` | `pass-for-io-definition`; blockers 없음 |
|
||||
| `reference-model.md` | `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA` | `pass-for-io-definition`; required files present, exact family/disposition contract complete |
|
||||
| `io.md` | raw `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9` | `ready-for-coordinator-review`; Coordinator Stage 5 `passed`; LF-normalized hash `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB` |
|
||||
| `implementation-plan.md` | `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C` | `ready-for-implementation`; 24/24 requirement-to-Step/test mapping |
|
||||
| `corrections.md` | `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A` | Historical environment/upstream issues resolved; current status `corrected-for-implementation-rerun`, followed by passing Step 11/12 evidence |
|
||||
| `implementation-report.md` | `D75C8B5922C9EEF7C7262B01BFB12D5F7609B1A6DB3A7C6D5AE47CB45ADAD578` | `pass-for-physics-evaluation`; no implementation-owned blocker |
|
||||
| `build-test.md` | `ED6B1B6CFD9478B09B92E7ADE3891622FEA1AA521AD29550D6F4C78C952E8DDA` | full CTest `302/302`; all recorded commands exit `0` |
|
||||
| `reference-comparison.md` | `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241` | overall `pass-for-physics-evaluation`; detailed `blocking-pass-with-review-only-findings`; reference `9/9` |
|
||||
| `physics-evaluation.md` | `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538` | `pass-for-release-agent`; blockers 없음 |
|
||||
|
||||
Historical source hashes embedded in earlier research/formulation metadata reflect their original gate inputs.
|
||||
Current Numerical Review, I/O, Planning, Implementation, reference and Physics reports consume or audit the
|
||||
current approved hashes and report no semantic contradiction. No stale or failed gate overrides this inventory.
|
||||
|
||||
## 4. Acceptance Traceability
|
||||
|
||||
`N/A (internal)`은 해당 acceptance가 external reference value가 아니라 deterministic CTest/invariant로
|
||||
검증된다는 뜻이다. 모든 row의 final disposition은 current release scope에서 `included-pass`다.
|
||||
|
||||
| requirement id | acceptance criterion | test id / passing evidence | reference model id | verification report | release disposition |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-001` | 정확히 한 supported source/semantic nonlinear step만 별도 procedure를 선택하고 zero/multiple/mixed는 increment 전 fail-closed | `NSNR-IO-*`, `NSNR-PROC-*`; full CTest `302/302` | N/A (internal) | `implementation-plan.md`, `build-test.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-003` | `S4/S4R`를 homogeneous isotropic materially linear geometric-only FESA-MITC4로 처리하고 material/combined nonlinearity는 거부 | `NSNR-IO-*`, `NSNR-ELEM-*`, `NSNR-PROC-*` | `shellnl-meshfine-s4-final`, `shellnl-s4-final`, `shell-s4-linear-limit` | `implementation-report.md`, `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-041` | 모든 increment가 하나의 fixed initial reference를 유지하고 current geometry로 re-base하지 않음 | `NSNR-IO-*`, `NSNR-ELEM-KIN-*`, `NSNR-PROC-*` | N/A (internal TL/objectivity) | `implementation-plan.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-074` | global six DOF, dimensionless rotation correction, separate trial/committed proper triad/director와 multiplicative update/rollback | `NSNR-ROT-*`, `NSNR-STATE-*`, `NSNR-PROC-*`; Physics focused suite 포함 | N/A (internal invariant) | `implementation-report.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-006` | residual/tangent/factorization/correction이 동일 trial이고 entered iteration마다 fresh factorization/solve | `NSNR-ELEM-TAN-*`, `NSNR-SOLVER-*`, `NSNR-PROC-*` | N/A (internal tangent) | `implementation-plan.md`, `build-test.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-007` | free residual과 same-iteration correction의 네 channel을 logical AND로 통과하고 constrained residual은 reaction으로 유지 | `NSNR-CTRL-021`, `NSNR-PROC-*`, `NSNR-REF-019`; control/log `14/14` | `shellnl-meshfine-s4-final`, `shellnl-s4-final` | `implementation-report.md`, `reference-comparison.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-069` | matching external residual scale nonzero 시 relative `<=1e-2`, exact zero 시 typed force/moment absolute `<=1e-3` | `NSNR-CTRL-018..020`, `NSNR-LOG-012`, `NSNR-REF-019`; exact-zero fine/coarse moment residual pass | `shellnl-meshfine-s4-final`, `shellnl-s4-final` | `implementation-report.md`, `reference-comparison.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-070` | translation/rotation correction을 nonzero relative 또는 typed exact-zero gate로 각각 inclusive 판정 | `NSNR-CTRL-021`, `NSNR-PROC-*`; control/log `14/14` | N/A (internal convergence) | `implementation-report.md`, `build-test.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-008` | required Newton data finite, iteration `1..100`, iteration 100 pass 허용, iteration 101 금지 | `NSNR-CTRL-020`, `NSNR-PROC-*`, `NSNR-REF-019` | fine/coarse logs: accepted increments each use two iterations | `implementation-report.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-014` | fresh correction을 변경 없이 적용하고 line search/damping/fallback/energy gate를 사용하지 않음 | `NSNR-CTRL-*`, `NSNR-PROC-*` | N/A (internal lifecycle) | `implementation-plan.md`, `build-test.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-046` | fixed positive factor increment, factor one final shortening, growth/cutback/retry 없음 | `NSNR-CTRL-*`, `NSNR-PROC-*` | fine/coarse factor `0.1..1.0`, unique factor-one frame | `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-048` | 모든 approved CLOAD/BOUNDARY target이 하나의 common proportional factor를 사용 | `NSNR-CTRL-*`, `NSNR-PROC-*` | fine/coarse nonlinear load path | `implementation-plan.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-018` | CLOAD force/moment source direction은 fixed global dead load이고 follower tangent가 없음 | `NSNR-CTRL-*`, `NSNR-PROC-*` | fine/coarse centered fixed-global `F3=-100000` | `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-063` | prescribed BOUNDARY는 factor-one absolute target이고 constrained correction과 분리되며 failure 시 start state 보존 | `NSNR-CTRL-*`, `NSNR-PROC-*`, `NSNR-PROC-019` | N/A (nonzero prescribed-motion internal case) | `implementation-report.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-016` | nonlinear STATIC 네 값을 exact arity/finite/positive/endpoint rule로 mapping하고 third/fourth는 stepping에 미사용 | `NSNR-IO-*`, `NSNR-CTRL-*` | fine/coarse `*STATIC 0.1,1.,0.001,0.1` | `io.md`, `reference-model.md`, `build-test.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-011` | trial state를 분리하고 converged complete state만 atomic commit하며 모든 실패에서 prior state/final 보존 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*` | fine/coarse accepted-frame evidence; failure paths internal | `implementation-report.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-019` | stable source/order와 free residual, constrained resultant, applied-plus-reaction balance를 분리하고 current arm/spatial moment 사용 | `NSNR-ELEM-TAN-*`, `NSNR-STATE-*`, `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022/024/025`; procedure/writer `7/7` | `shellnl-meshfine-s4-final`, `shellnl-s4-final` | `implementation-report.md`, `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-020` | approved element/material/load/boundary/step/solver inventory 밖의 meaning을 authoritative output 전 fail-closed | `NSNR-IO-*` negative inventory | N/A (internal rejection) | `io.md`, `implementation-plan.md`, `build-test.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-021` | committed increment와 accepted HDF5 frame이 일대일이고 factor one 포함, trial history 없음, failed candidate는 final이 아님 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*`, `NSNR-HDF5-014` | fine/coarse 10 accepted frames, unique frame 9/increment 10/factor 1 | `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-024` | invocation-start log replacement과 entered iteration당 deterministic summary 하나, controlled failure에도 current log 유지 | `NSNR-LOG-012`, `NSNR-PROC-*`, `NSNR-REF-019`; `NewtonIterationLog.*` `8/8` | fine/coarse 20 records, two per increment | `implementation-report.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-083` | derived result/log names, every literal `--output` form pre-input exit `2`, no alias, independent asymmetric lifecycles와 linear regression | `NSNR-CLI-*`, `NSNR-PROC-*`, `NSNR-EVID-*` | all three stored case executions use derived sibling outputs | `implementation-report.md`, `build-test.md`, `reference-comparison.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-026` | factor/iteration/assembly/frame/result/log ordering이 same input/runtime에서 deterministic | `NSNR-STATE-*`, `NSNR-PROC-*`, `NSNR-REF-020..023`, `NSNR-EVID-*`; reference `9/9` twice | all three stored cases | `implementation-report.md`, `reference-comparison.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-030` | linear limit, tangent, global balance/free residual, symmetry/objectivity와 commit/rollback portfolio가 모두 통과 | `NSNR-ROT-*`, `NSNR-ELEM-*`, `NSNR-CTRL-*`, `NSNR-SOLVER-*`, `NSNR-LOG-*`, `NSNR-STATE-*`, `NSNR-HDF5-014`, `NSNR-PROC-019`, `NSNR-REF-022/024/025`; Physics focused `23/23` | fine primary, coarse companion, linear control | `build-test.md`, `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
| `FESA-REQ-NSNR-034` | exact source/component precheck 후 U blocking, UR warning-only, RF/RM review-only, RM3/stress excluded, common external tolerance 적용 | `NSNR-REF-020..023`, `NSNR-EVID-003..007`; nonlinear reference `9/9` | fine primary, coarse companion, linear control | `reference-comparison.md`, `physics-evaluation.md` | `included-pass` |
|
||||
|
||||
## 5. Validation Evidence
|
||||
|
||||
Fresh Stage 6 commands and results are recorded in `build-test.md`:
|
||||
|
||||
```powershell
|
||||
cmake --preset windows-msvc-ninja-debug
|
||||
cmake --build --preset windows-msvc-ninja-debug
|
||||
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearConvergence|NewtonIterationLog)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticProcedure|NonlinearHdf5ResultsWriter)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
- Configure/build/discovery: exit `0`; 302 tests discovered.
|
||||
- Focused control/log `14/14`, procedure/writer `7/7`.
|
||||
- Nonlinear reference `9/9`; extended matched reference `9/9`.
|
||||
- Full MSVC x64 Debug CTest `302/302`, failed-test inventory 없음, 새 compiler/linker warning 없음.
|
||||
- Stage 7 Physics-focused CTest `23/23`, exit `0`.
|
||||
- Harness Python pytest는 Step 12가 Python, hooks 또는 agent configuration을 변경하지 않아 applicable하지
|
||||
않았고 필수 제품 검증으로 재분류하지 않았다.
|
||||
- `reference-comparison.md`: overall `pass-for-physics-evaluation`; external translation blocking families,
|
||||
warning-only UR families와 eight internal blocking families 통과. Global balance metrics의 worst value는
|
||||
fine moment `2.74546602e-10 <=1e-8`이다.
|
||||
- `physics-evaluation.md`: `pass-for-release-agent`; equilibrium, reactions, displacement direction/path,
|
||||
symmetry/objectivity, stress sanity, rigid-body, energy/residual과 model coverage에 물리 blocker 없음.
|
||||
- Declared canonical reference 12개는 current SHA-256가 `reference-model.md`와 일치하고 tracked diff가 없다.
|
||||
|
||||
## 6. Known Limitations
|
||||
|
||||
1. Coarse/fine local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`에는 six review-only
|
||||
discrepancy families가 남아 있다. Exact source-key/schema/inventory/finite/error report는 유지하지만
|
||||
blocking verdict는 global force/moment balance와 accepted free residual이 결정한다.
|
||||
2. Local `RM3`는 approved physical external comparison target이 없어 excluded다.
|
||||
3. Stored corner `SPOS/SNEG` stress와 FESA direct Gauss `BOTTOM/MIDDLE/TOP` stress는 위치·복구 identity가
|
||||
다르므로 numerical comparison에서 제외된다. Fine optional stress CSV에는 element `1`, `SNEG`의
|
||||
malformed `Node Label=ss` 한 행이 있으며 artifact를 repair하지 않는다.
|
||||
4. `UR1/UR2/UR3` external comparison은 warning-only다. Current portfolio에서는 모두 통과했지만 향후
|
||||
warning exceedance가 blocking failure로 자동 승격되지는 않는다.
|
||||
5. Stored nonlinear plate responses는 weak geometric-nonlinear regime다. Finite-rotation/tangent/objectivity/
|
||||
rollback은 internal invariant tests로 보강했지만 broad large-response benchmark 또는 experimental
|
||||
validation claim은 하지 않는다.
|
||||
6. Original-style MITC4는 curved/distorted/thin nonlinear mesh에서 membrane-locking과 conditioning
|
||||
위험이 있다. MITC4+ 또는 Abaqus `S4/S4R` 성능을 상속한다고 주장하지 않는다.
|
||||
7. 첫 release는 one-step, materially linear, fixed-increment Full Newton 범위다. Limit-point traversal,
|
||||
material nonlinearity, follower/distributed load, adaptive increment와 broader Abaqus keyword compatibility는
|
||||
지원하지 않고 fail-closed한다.
|
||||
8. Rotation-vector principal chart, director/swing/twist branch와 geometry/Jacobian validity 밖의 상태는
|
||||
fail-closed한다. No line search/cutback/retry이므로 difficult path의 automatic recovery를 보장하지 않는다.
|
||||
9. Global force/moment `<=1e-8`은 comparator-owned internal verification gate이며 runtime user setting이나
|
||||
`fesa.env` 계약이 아니다. External CSV families에는 별도로 `docs/TOLERANCE.md`만 적용한다.
|
||||
10. Numerical agreement은 Abaqus formulation, integration, stabilization, state update 또는 recovery의
|
||||
internal equivalence evidence가 아니다.
|
||||
|
||||
## 7. Release Notes Draft
|
||||
|
||||
### 기능 요약
|
||||
|
||||
FESA에 fixed-initial-reference Total Lagrangian 기반 geometric-nonlinear `FESA-MITC4` static
|
||||
procedure가 추가되었다. Solver는 fixed load-factor path에서 Full Newton-Raphson을 수행하고,
|
||||
수렴한 increment만 HDF5 schema v1 accepted frame으로 commit한다. Trial/committed finite-rotation state,
|
||||
deterministic per-iteration log, rollback-safe output lifecycle, current-arm/spatial-moment global equilibrium
|
||||
evidence를 포함한다.
|
||||
|
||||
### 사용과 산출물
|
||||
|
||||
- 실행: `fesa.exe <model.inp>`
|
||||
- 결과: input sibling `<stem>_results.h5`
|
||||
- 진단: input sibling `<stem>_log.txt`
|
||||
- 지원 핵심 범위: one `*STEP, NLGEOM=YES`, one four-value `*STATIC`, source `S4/S4R`, isotropic
|
||||
linear elastic shell, `*CLOAD`, `*BOUNDARY`의 approved subset.
|
||||
- Literal `--output`은 제거되었고 alias/deprecation form 없이 exit `2`로 거부된다.
|
||||
|
||||
### 검증 범위
|
||||
|
||||
MSVC x64 Debug full CTest `302/302`, nonlinear/extended reference `9/9`, Physics focused `23/23`이
|
||||
통과했다. Fine/coarse nonlinear plate와 linear control의 `U1/U2/U3` blocking comparison,
|
||||
warning-only UR, accepted free residual 및 normalized global force/moment `<=1e-8`을 검증했다.
|
||||
|
||||
### 사용자에게 알려진 제한
|
||||
|
||||
Local nodal RF/RM discrepancy는 review-only이며 `RM3`와 stored stress comparison은 제외된다.
|
||||
Fine optional stress CSV의 malformed node label은 read-only로 유지한다. UR은 warning-only다.
|
||||
Stored nonlinear cases는 weak response이고 original MITC4는 curved/distorted mesh membrane-locking 위험이
|
||||
있으므로 broader large-response, locking-free 또는 external-solver internal-equivalence claim을 하지 않는다.
|
||||
Material nonlinearity, multiple/mixed steps, follower/distributed loads, line search/cutback/retry,
|
||||
arc-length와 broad Abaqus keyword compatibility는 지원 범위 밖이다.
|
||||
|
||||
### Evidence artifacts
|
||||
|
||||
- `docs/nonlinear-static-newton-raphson/implementation-report.md`
|
||||
- `docs/nonlinear-static-newton-raphson/build-test.md`
|
||||
- `docs/nonlinear-static-newton-raphson/reference-comparison.md`
|
||||
- `docs/nonlinear-static-newton-raphson/physics-evaluation.md`
|
||||
- Authoritative solver artifact: each input sibling `<stem>_results.h5`
|
||||
|
||||
## 8. Release Verdict
|
||||
|
||||
- verdict: `ready-for-release`
|
||||
- gate basis: full build/test evidence passed, reference comparison overall status is
|
||||
`pass-for-physics-evaluation`, Physics status is `pass-for-release-agent`, 24/24 must requirements have
|
||||
explicit acceptance/test/reference/release disposition, and no blocking evidence gap remains.
|
||||
- qualification: six local RF/RM findings, stress/RM3 exclusions, warning-only UR와 model-coverage limitations are
|
||||
approved and disclosed nonblocking limitations, not unresolved implementation defects.
|
||||
- feature identity disposition: `reference-comparison.md`의 literal `feature_id` omission은 exact
|
||||
path/title/hash/handoff binding으로 해소되고 contradictory identity가 없으므로 verdict를 낮추지 않는다.
|
||||
- authority boundary: 이 verdict는 internal feature delivery closure recommendation이다. Publish, deploy,
|
||||
package, tag, external release 또는 solver equivalence claim을 승인하지 않는다.
|
||||
|
||||
## 9. Handoff Recommendation
|
||||
|
||||
Coordinator Agent가 이 보고서의 exact path/hash와 `ready-for-release`를 독립 audit한 뒤 Stage 8을
|
||||
`passed`로 기록하고 8-stage workflow를 closure할 것을 권고한다. Evidence gap return 또는 owning
|
||||
sub-agent rework는 필요하지 않다. 사용자가 요청한 commit/push는 Coordinator/root가 Release gate
|
||||
audit 후 별도로 수행해야 하며, 이 Release Agent는 commit, push, tag 또는 publish를 수행하지 않는다.
|
||||
|
||||
## 10. No-Change Assertion
|
||||
|
||||
이 Stage 8 작업은 `docs/nonlinear-static-newton-raphson/release.md` 하나만 생성했다. Coordinator가
|
||||
동시에 소유한 pre-existing `coordination.md` 변경은 읽기만 했고 수정·revert하지 않았다. Source code,
|
||||
headers, tests, CMake, Harness, requirements, research, formulation, numerical review, reference model,
|
||||
I/O, implementation/physics reports, reference artifacts와 `docs/TOLERANCE.md`를 변경하지 않았다.
|
||||
Abaqus, Nastran 또는 다른 reference solver, build, CTest, Harness, publish/deploy/package/tag 작업을
|
||||
실행하지 않았다.
|
||||
|
||||
## 11. Open Issues
|
||||
|
||||
Blocking open issue는 없다.
|
||||
|
||||
| id | severity | disposition |
|
||||
| --- | --- | --- |
|
||||
| `RELEASE-META-001` | nonblocking documentation | `requirements.md`의 historical draft/pending metadata는 current-hash explicit user approval와 Coordinator Stage 1 pass로 해소된다. Upstream 문서는 이 gate에서 수정하지 않았다. |
|
||||
| `RELEASE-META-002` | nonblocking documentation | `reference-comparison.md`에는 literal `feature_id` field가 없지만 exact bundle path/title/SHA-256/Stage 6 handoff와 Physics source hash가 feature identity를 결정적으로 고정한다. Contradictory identity는 없고 upstream report는 변경하지 않았다. |
|
||||
| `RELEASE-LOCAL-001` | accepted risk | Six local RF/RM families remain review-only findings; global balance/free residual blocking evidence passed. |
|
||||
| `RELEASE-STRESS-001` | accepted limitation | `RM3`와 stored stress numerical comparison은 excluded; fine optional malformed stress row는 read-only로 유지한다. |
|
||||
| `RELEASE-COVERAGE-001` | known limitation | Weak nonlinear stored response와 original MITC4 curved/distorted membrane-locking risk가 broader claims를 제한한다. |
|
||||
|
||||
Missing required report, failed pass status, unresolved defect, missing declared comparison file 또는
|
||||
contradictory acceptance evidence는 발견되지 않았다.
|
||||
@@ -3,11 +3,11 @@
|
||||
## 1. Metadata
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- title: `Nonlinear Static Analysis Using Newton–Raphson`
|
||||
- status: `approved`
|
||||
- status: `draft`
|
||||
- owner_agent: `requirement-agent`
|
||||
- date: `2026-08-22`
|
||||
- approved_by: user
|
||||
- approval_date: `2026-08-23`
|
||||
- date: `2026-08-27`
|
||||
- approved_by: pending user re-approval
|
||||
- approval_date: pending
|
||||
- authoritative_scope: materially linear, geometrically nonlinear `S4/S4R -> FESA-MITC4`
|
||||
- independence: FESA는 독립 solver이며 Abaqus 또는 Midas의 내부 알고리즘 동등성을 주장하지 않는다.
|
||||
- unit_policy: `.inp` 단위계를 추론하거나 변환하지 않고 사용자가 일관되게 제공한 단위계를 보존한다.
|
||||
@@ -26,7 +26,7 @@ FESA는 하나의 지원 nonlinear static step을 scalar load factor로 증가
|
||||
- factor-1 absolute prescribed `*BOUNDARY` targets와 four-value nonlinear `*STATIC`
|
||||
- four-channel residual/correction convergence, maximum 100 iterations, no line search
|
||||
- separate trial state, atomic commit/rollback, accepted-frame HDF5와 per-iteration text log
|
||||
- deterministic assembly, iteration, frame, result, diagnostic order와 stored-reference verification
|
||||
- deterministic assembly, iteration, frame, result, diagnostic order와 factor-one global reaction/equilibrium 및 stored-reference verification
|
||||
|
||||
## 4. Out Of Scope
|
||||
- material nonlinearity, nonlinear material history, combined material/geometric nonlinearity
|
||||
@@ -138,16 +138,16 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-069
|
||||
statement: "The FESA solver shall evaluate translational-force and rotational-moment free-residual convergence with channel-separated infinity-norm gates."
|
||||
statement: "The FESA solver shall evaluate translational-force and rotational-moment free-residual convergence with channel-separated infinity-norm gates selected by each matching external residual-channel scale."
|
||||
category: numerical
|
||||
rationale: "Force and moment dimensions require separate scales."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "For a nonzero matching-channel denominator max(||internal||inf, ||external||inf), the same-trial residual ratio passes iff <=1e-2; an exact-zero denominator instead passes iff its numerator is <=1e-3 model-consistent force or <=1e-3 model-consistent force-length, respectively."
|
||||
tolerance: "Relative 1e-2 dimensionless; zero-scale absolute 1e-3 force and 1e-3 force-length."
|
||||
acceptance_criteria: "For each residual channel, a nonzero matching external-channel scale retains denominator max(||internal||inf, ||external||inf), and the same-trial residual ratio passes iff <=1e-2; an exact-zero matching external-channel scale instead applies the typed absolute gate, which passes iff its numerator is <=1e-3 model-consistent force or <=1e-3 model-consistent force-length, respectively."
|
||||
tolerance: "Relative 1e-2 dimensionless for nonzero matching external-channel scale; exact-zero matching external-channel absolute 1e-3 force and 1e-3 force-length."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
status: draft
|
||||
- id: FESA-REQ-NSNR-070
|
||||
statement: "The FESA solver shall evaluate translational and rotational free-correction convergence with channel-separated infinity-norm gates."
|
||||
category: numerical
|
||||
@@ -248,14 +248,14 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
trace_to: {parent_need: "NEED-NSNR-003", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-019
|
||||
statement: "The FESA solver shall preserve stable source identity and stable assembly order and shall derive free residual and constrained reaction from the complete assembled equilibrium at the same state."
|
||||
statement: "The FESA solver shall preserve stable source identity and stable assembly order and shall keep the accepted free residual, constrained reaction resultant, and global applied-plus-reaction balance error as distinct equilibrium quantities derived at the same accepted state."
|
||||
category: physics
|
||||
rationale: "Equilibrium evidence must remain traceable to source entities and DOFs."
|
||||
rationale: "Reaction and equilibrium evidence must remain traceable without treating physically distinct projections as interchangeable."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Input instance/label/component maps deterministically through assembly, state, diagnostic, result, and comparison; full residual at a trial or accepted state yields free-equilibrium evidence and constrained reactions."
|
||||
tolerance: "Source/component identity and discrete order exact; equilibrium uses approved numerical tolerances."
|
||||
acceptance_criteria: "Input instance/label/component maps deterministically through assembly, state, diagnostic, result, and comparison; accepted free entries remain free-equilibrium evidence, constrained entries form physical reactions, and the constrained-reaction resultant remains distinct from the global applied-plus-reaction balance error. Blocking factor-one equilibrium quantities are global applied-plus-reaction force [3] and moment [3] balance errors plus accepted free residual. Every global moment is about global origin [0,0,0] and uses current force arms plus spatial physical nodal moments."
|
||||
tolerance: "Source/component, quantity identity, origin, and discrete order exact; equilibrium and reference values use their separately approved numerical tolerances."
|
||||
trace_to: {parent_need: "NEED-NSNR-002, NEED-NSNR-004", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "I/O Definition Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-020
|
||||
@@ -314,25 +314,25 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
trace_to: {parent_need: "NEED-NSNR-003, NEED-NSNR-004", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-030
|
||||
statement: "The FESA solver shall pass an approved verification portfolio covering the materially linear small-displacement limit, tangent consistency, equilibrium/reaction, symmetry or objectivity, and commit/rollback behavior."
|
||||
statement: "The FESA solver shall pass an approved verification portfolio covering the materially linear small-displacement limit, tangent consistency, factor-one global applied-plus-reaction balance and accepted free residual, symmetry or objectivity, and commit/rollback behavior."
|
||||
category: verification
|
||||
rationale: "Convergence alone does not establish nonlinear solver correctness."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: analysis
|
||||
acceptance_criteria: "Numerical Review defines blocking cases and quantities for every listed category, and implementation passes each approved analytical, invariant, physics, or comparison gate."
|
||||
tolerance: "Case-specific tolerances are owned by Numerical Review; existing linear-limit tolerance remains unchanged."
|
||||
acceptance_criteria: "Numerical Review defines blocking cases and quantities for every listed category, and implementation passes each approved analytical, invariant, physics, or comparison gate. Reaction/equilibrium acceptance separately blocks on factor-one global applied-plus-reaction force [3] and moment [3] balance errors and accepted free-DOF residual evidence; constrained-reaction resultants retain a distinct identity, and local nodal reaction distribution does not decide the blocking verdict."
|
||||
tolerance: "Case-specific invariant tolerances are owned by Numerical Review; external comparisons use docs/TOLERANCE.md; existing linear-limit tolerance remains unchanged."
|
||||
trace_to: {parent_need: "NEED-NSNR-004", downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-034
|
||||
statement: "The FESA solver shall compare only approved accepted-state quantities against stored reference artifacts using stable source/component matching and the common docs/TOLERANCE.md policy."
|
||||
statement: "The FESA solver shall compare only approved accepted-state quantities against stored reference artifacts using stable source/component matching, the approved blocking/warning/review disposition, and the common docs/TOLERANCE.md policy."
|
||||
category: verification
|
||||
rationale: "Reference acceptance must be deterministic and independent of solver execution."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: reference-comparison
|
||||
acceptance_criteria: "Numerical Review selects the exact existing input and required CSV quantities; precheck rejects missing, extra, duplicate, or nonfinite required rows before blocking/warning family comparison, without averaging or row-order matching."
|
||||
tolerance: "docs/TOLERANCE.md family-scale policy; exact artifacts and families are a Numerical Review-owned readiness gap."
|
||||
acceptance_criteria: "Numerical Review selects the exact existing input and required CSV quantities; precheck rejects missing, extra, duplicate, or nonfinite required rows before numerical comparison, without averaging, collapse, row-order matching, zero clamp, or reference repair. U1/U2/U3 remain blocking and UR1/UR2/UR3 remain warning-only. Local nodal RF1/RF2/RF3 and physical spatial RM1/RM2 retain deterministic source-key/schema/finite/inventory/error reporting but are review-only and never change the blocking verdict; local RM3 and stress remain excluded from numerical comparison."
|
||||
tolerance: "docs/TOLERANCE.md family-scale policy for external blocking, warning-only, and review-only error reporting; exact artifact roles, local review projection, family membership, and row schema are a Numerical Review-owned readiness gap."
|
||||
trace_to: {parent_need: "NEED-NSNR-004", downstream_agents: ["Numerical Review Agent", "I/O Definition Agent"]}
|
||||
status: approved
|
||||
```
|
||||
@@ -341,7 +341,10 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
| quantity | dimension / coordinates | role |
|
||||
| --- | --- | --- |
|
||||
| nodal displacement and committed rotation/director state | length and dimensionless rotation; global | accepted-state kinematics and rollback |
|
||||
| full residual and constrained reaction | force or force-length; global DOF | equilibrium and reaction evidence |
|
||||
| accepted free-DOF residual | force or force-length; global DOF | blocking accepted-state equilibrium evidence |
|
||||
| local nodal `RF1/RF2/RF3`, physical spatial `RM1/RM2` | force or force-length; global | deterministic review-only/nonblocking distribution evidence; `RM3` excluded |
|
||||
| constrained-reaction resultant force `[3]` and moment `[3]` | force and force-length; global; moment about `[0,0,0]` with current arms and spatial physical moments | distinct reaction summary; not interchangeable with global balance error |
|
||||
| applied-plus-reaction balance error force `[3]` and moment `[3]` | force and force-length; global; same origin/arm/moment convention | blocking factor-one reaction/equilibrium evidence |
|
||||
| MITC4 internal force, stress and strain | model-consistent dimensions; approved element frame/configuration | formulation, physics and reference verification |
|
||||
| scalar load factor and accepted frame identity | dimensionless | path, commit and output ordering |
|
||||
| four convergence channels | typed as NSNR-069/070 | internal iteration acceptance only |
|
||||
@@ -349,13 +352,14 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
|
||||
## 10. Tolerance Policy
|
||||
- `.inp` values remain in the user's consistent unit system; FESA performs no unit inference or conversion.
|
||||
- Only nonzero-scale convergence ratios are dimensionless and pass with `<=1e-2`.
|
||||
- Exact-zero residual thresholds are `1e-3` force and `1e-3` force-length; correction thresholds are `1e-3` length and `1e-3` dimensionless rotation. Equal literals do not merge their dimensions.
|
||||
- External comparisons use `docs/TOLERANCE.md`; internal invariant, tangent, endpoint-arithmetic and physics tolerances are fixed by Numerical Review before implementation.
|
||||
- Residual ratios with nonzero matching external-channel scale and correction ratios with nonzero current-trial incremental-solution denominator are dimensionless and pass with `<=1e-2`.
|
||||
- Exact-zero matching external-channel residual thresholds are `1e-3` force and `1e-3` force-length; exact-zero correction-denominator thresholds are `1e-3` length and `1e-3` dimensionless rotation. Equal literals do not merge their dimensions.
|
||||
- External blocking, warning-only, and review-only error reporting use `docs/TOLERANCE.md` without changing their verdict disposition; internal invariant, tangent, endpoint-arithmetic, free-residual and global-balance tolerances are fixed by Numerical Review before implementation.
|
||||
|
||||
## 11. Reference Case Requirements
|
||||
- The current Stage-1 gap is selection of exact stored nonlinear input and only the CSV quantities required for acceptance.
|
||||
- Numerical Review owns artifact readiness, blocking/warning families, source/component identity and HDF5 projection; this gap does not require another Stage-1 user question.
|
||||
- Stored nonlinear candidates use exact read-only input/displacement pairs `reference/shellNL/shellNL.inp` with `reference/shellNL/shellNL displacements.csv`, and `reference/shellNL-meshfine/shellNL-meshfine.inp` with `reference/shellNL-meshfine/shellNL-meshfine displacements.csv`. Exact local-reaction review artifacts are `reference/shellNL/shellNL reactions.csv` and `reference/shellNL-meshfine/shellNL-meshfine reactions.csv`; they are not missing-required blocking artifacts. The existing linear-limit pair is `reference/shell/shell.inp` and `reference/shell/shell displacements.csv`.
|
||||
- Numerical Review shall fix which exact nonlinear candidate case or cases are blocking versus diagnostic, the factor-one HDF5 projection, required source rows/components and comparison families, and the internal tolerances for global balance/free-residual gates. `U1/U2/U3` are blocking, `UR1/UR2/UR3` are warning-only, local nodal RF/RM rows are review-only, and `RM3` and stress have no numerical comparison projection.
|
||||
- All selected local review rows retain deterministic identity, schema, finite-value, inventory, and error reporting even though they cannot fail the blocking verdict. A physical global resultant sum is not a substitute identity for those local rows, and no row is averaged, collapsed, omitted, zero-clamped, or repaired.
|
||||
- Agents do not run Abaqus, Nastran or another reference solver and do not create, rename, repair or normalize stored reference artifacts.
|
||||
|
||||
## 12. Requirement Verification Matrix
|
||||
@@ -367,7 +371,7 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
| `NSNR-074` | physics | user | must | analysis | finite committed/trial triad/director state and rollback | invariant tolerance downstream | Formulation; Numerical Review | approved |
|
||||
| `NSNR-006` | numerical | user | must | test | same-trial residual/tangent and fresh factorization/solve | identity/order exact | Formulation; Numerical Review; Planning | approved |
|
||||
| `NSNR-007` | numerical | user | must | test | all four free-DOF gates pass; constrained residual is reaction | NSNR-069/070 | Numerical Review; Planning | approved |
|
||||
| `NSNR-069` | numerical | user | must | test | force/moment residual relative or typed zero-scale gates | `1e-2`; typed `1e-3` | Numerical Review; Planning | approved |
|
||||
| `NSNR-069` | numerical | user | must | test | force/moment residual relative gate for nonzero external scale; typed absolute gate for exact-zero external scale | `1e-2`; typed `1e-3` | Numerical Review; Planning | draft |
|
||||
| `NSNR-070` | numerical | user | must | test | translation/rotation correction relative or typed zero-scale gates | `1e-2`; typed `1e-3` | Numerical Review; Planning | approved |
|
||||
| `NSNR-008` | numerical | user | must | test | finite data, iterations 1..100, pass at 100 allowed | predicates/count exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-014` | constraint | user | must | test | unchanged full correction; no line search/fallback/energy gate | identity exact | Numerical Review; Planning | approved |
|
||||
@@ -377,21 +381,21 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
| `NSNR-063` | physics | user | must | test | absolute factor-one BC target and separate correction | path/source exact | Formulation; Numerical Review | approved |
|
||||
| `NSNR-016` | input | user | must | test | four-value STATIC mapping and validation | endpoint exact | I/O; Planning | approved |
|
||||
| `NSNR-011` | functional | user | must | test | separate trial, atomic commit, prior-state preservation | state exact | Formulation; Numerical Review; Planning | approved |
|
||||
| `NSNR-019` | physics | docs | must | test | stable source/assembly and full-equilibrium residual/reaction | identity/order exact | Formulation; Numerical Review; I/O | approved |
|
||||
| `NSNR-019` | physics | docs | must | test | distinct free residual, constrained-reaction resultants and applied+reaction balance; current-arm/spatial-moment semantics | quantity/origin/identity/order exact | Formulation; Numerical Review; I/O | approved |
|
||||
| `NSNR-020` | input | docs | must | test | unsupported meaning fails closed | inventory exact | I/O; Planning | approved |
|
||||
| `NSNR-021` | output | user | must | test | accepted commit/frame bijection and failure-safe HDF5 final | identity exact | Numerical Review; I/O; Planning | approved |
|
||||
| `NSNR-024` | output | user | must | test | one ordered diagnostic summary per entered iteration and persistent live log | semantic identity exact | I/O; Planning | approved |
|
||||
| `NSNR-083` | output | user | must | test | repository names; every literal --output form unrecognized with pre-input/pre-Analysis/pre-output exit 2 and no alias/deprecation; asymmetric lifecycle; linear regression | public identity/precedence exact | I/O; Planning; Numerical Review | approved |
|
||||
| `NSNR-026` | constraint | docs | must | test | deterministic factor/iteration/assembly/frame/result/log order | discrete order exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-030` | verification | docs | must | analysis | blocking small-limit/tangent/physics/rollback portfolio | case-specific downstream | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-034` | verification | docs | must | reference-comparison | stored artifacts, deterministic matching and precheck | docs/TOLERANCE.md | Numerical Review; I/O | approved |
|
||||
| `NSNR-030` | verification | docs | must | analysis | blocking small-limit/tangent/global applied+reaction balance/free-residual/physics/rollback portfolio | case-specific downstream; external policy unchanged | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-034` | verification | docs | must | reference-comparison | U blocking, UR warning-only, local RF/RM review-only, exact matching/precheck | docs/TOLERANCE.md | Numerical Review; I/O | approved |
|
||||
|
||||
## 13. Open Questions
|
||||
없음. Specialist gaps are owned by downstream stages and are escalated only if they would change approved scope, physics, tolerance, authoritative output or public compatibility.
|
||||
|
||||
## 14. Downstream Handoff
|
||||
- Research/Formulation: exact Total Lagrangian MITC4 equations, strain/stress measures, rotation map/side/frame, drilling and consistent derivatives.
|
||||
- Numerical Review: endpoint arithmetic, tangent/objectivity/state-invariant checks, benchmark portfolio, performance adequacy and exact reference artifacts/quantities.
|
||||
- I/O Definition: HDF5 schema/projection/chunking/factor-0 handling, log representation/failure presentation and path/collision conventions.
|
||||
- Implementation Planning: backend adapters, output ownership primitive, candidate filename, performance targets and requirement-traced TDD plan.
|
||||
- Research/Formulation: exact Total Lagrangian MITC4 equations, strain/stress measures, rotation map/side/frame, drilling and consistent derivatives; Formulation propagates NSNR-069's exact-zero matching external-channel typed absolute branch and retained nonzero external-scale relative denominator.
|
||||
- Numerical Review: verify the revised NSNR-069 branch and unchanged thresholds/four-channel AND, endpoint arithmetic, tangent/objectivity/state-invariant checks, benchmark portfolio and performance adequacy. Fix exact coarse/fine reference roles, local review projection/families, and factor-one global balance/free-residual tolerances while preserving local RF/RM review-only, `RM3` exclusion, displacement/rotation disposition, exact prechecks, immutable artifacts and common external tolerance.
|
||||
- I/O Definition: HDF5 schema/projection/chunking/factor-0 handling, log representation/failure presentation and path/collision conventions. Audit and keep separately identifiable `(a)` global applied-plus-reaction balance error, `(b)` constrained-reaction resultant and `(c)` accepted free residual; global moments use current positions and spatial physical nodal moments about `[0,0,0]`, including supported nonzero prescribed translation/rotation cases.
|
||||
- Implementation Planning: backend adapters, output ownership primitive, candidate filename, performance targets and requirement-traced TDD plan. Stage 6 must test the three equilibrium identities separately and must not reuse one implementation dataset as another without proving its approved projection semantics.
|
||||
- Coordinator: escalate only a downstream proposal that changes the approved scope, physics, convergence tolerance, authoritative-result meaning or public output contract; do not advance the workflow on this document alone.
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
# Translation Displacement Comparison Report
|
||||
|
||||
## 1. Metadata and scope
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- report_id: `TRANSLATION-REPORT-001`
|
||||
- date: `2026-08-26`
|
||||
- owner_agent: `implementation-agent` (bounded diagnostic dispatch)
|
||||
- dispatch coordination SHA-256: `D7CE6264EE3FD20FB6CD74CF1FC28E05EEEEFA67B25AF737D2DF989059A72D6F`
|
||||
- status: `translation-diagnostic-pass-not-a-gate`
|
||||
- tolerance source: `docs/TOLERANCE.md`
|
||||
|
||||
This focused report recomputes only global translational displacement components
|
||||
`U1/U2/U3` for the existing coarse `reference/shellNL` case and the added fine
|
||||
`reference/shellNL-meshfine` case. It is diagnostic evidence for the observed
|
||||
mesh sensitivity; it does not create or replace the canonical Stage 6
|
||||
`reference-comparison.md`. In particular, it is not Step 12 implementation
|
||||
evidence and does not change any workflow gate.
|
||||
|
||||
The two meshes are compared separately to their own read-only Abaqus CSV
|
||||
artifacts. No coarse-to-fine node interpolation, row pairing, averaging, or
|
||||
direct FESA-to-FESA error was used.
|
||||
|
||||
## 2. Artifact inventory and accepted-frame identity
|
||||
|
||||
All paths below are relative to the feature worktree. SHA-256 and byte counts
|
||||
were recomputed before comparison.
|
||||
|
||||
| mesh | artifact | path | bytes | SHA-256 |
|
||||
| --- | --- | --- | ---: | --- |
|
||||
| coarse | input | `reference/shellNL/shellNL.inp` | 4,778 | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| coarse | translation CSV | `reference/shellNL/shellNL displacements.csv` | 7,542 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| coarse | FESA HDF5 | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-441600152250700-0/shellNL_results.h5` | 934,602 | `9744814BEBF33486F526F821EDC7D96F072F34E988D70A00AC7AA063570FFA40` |
|
||||
| fine | input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | 56,516 | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| fine | translation CSV | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 111,184 | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| fine | FESA HDF5 | `.harness/build-ninja-msvc-debug/reference/meshfine-diagnostic/run-1787669003801/shellNL-meshfine_results.h5` | 10,547,651 | `81A3C431E2977D2482D212877C3C306FFBB19CD1F0C47FBF1C936AE06CC93ACA` |
|
||||
|
||||
For both HDF5 artifacts, `/steps/Step-1/accepted_frames` has ten accepted rows.
|
||||
The unique row satisfying `is_factor_one=1` and `load_factor=1.0` is
|
||||
`frame_index=9`, `increment_index=10`, and `iteration_count=2`. Translation
|
||||
values were projected only from
|
||||
`/steps/Step-1/frames/9/nodal/displacement`, columns `[UX, UY, UZ]`:
|
||||
|
||||
| mesh | HDF5 node rows | displacement shape | CSV wide rows | exact CSV Frame |
|
||||
| --- | ---: | --- | ---: | --- |
|
||||
| coarse | 49 | `[49, 6]` | 49 | `Increment 10: Step Time = 1.000` |
|
||||
| fine | 729 | `[729, 6]` | 729 | `Increment 10: Step Time = 1.000` |
|
||||
|
||||
## 3. Source identity and prechecks
|
||||
|
||||
The comparison key is
|
||||
|
||||
```text
|
||||
(accepted_state=factor-one, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
`canonical_instance_name` is matched case-insensitively; the CSV/HDF5 source
|
||||
spelling itself is not rewritten. CSV columns were selected after trimming only
|
||||
surrounding header whitespace. The `U-U1/U-U2/U-U3` columns map respectively to
|
||||
HDF5 `UX/UY/UZ`. Row order is not part of the identity and was not used for
|
||||
matching.
|
||||
|
||||
| mesh | component rows | duplicate CSV wide/component/HDF5 keys | nonfinite CSV/HDF5 values | missing HDF5 keys | extra HDF5 keys | precheck |
|
||||
| --- | ---: | --- | --- | ---: | ---: | --- |
|
||||
| coarse | 147 | `0 / 0 / 0` | `0 / 0` | 0 | 0 | pass |
|
||||
| fine | 2,187 | `0 / 0 / 0` | `0 / 0` | 0 | 0 | pass |
|
||||
|
||||
Each CSV contains only the exact factor-one `Frame` value shown above. Thus the
|
||||
row prechecks required before numerical tolerance evaluation pass for the
|
||||
translation projection in each mesh.
|
||||
|
||||
## 4. Applied tolerance policy
|
||||
|
||||
`U1/U2/U3` remain one global-length, blocking translation family within each
|
||||
case. The component rows in Section 6 are diagnostics only: they use the same
|
||||
case-family scale and near-zero band below and do not introduce a component
|
||||
scale, component-specific tolerance, or a new approved family.
|
||||
|
||||
For the reference values `r_i` and FESA values `f_i`, `docs/TOLERANCE.md` is
|
||||
applied exactly:
|
||||
|
||||
\[
|
||||
S=\max_i|r_i|,\qquad B=0.01S,\qquad e_i=|f_i-r_i|.
|
||||
\]
|
||||
|
||||
- If `|r_i| <= B`, the row passes iff `e_i <= B`.
|
||||
- Otherwise, the row passes iff `e_i / |r_i| <= 0.05`.
|
||||
- The whole family also requires `RMS(e_i) / S <= 0.01`.
|
||||
- There is no independent absolute-error gate, `max(1,S)` floor, zero clamp,
|
||||
row omission, or averaging. A zero-scale family would require exact FESA
|
||||
zero; neither translation family has zero reference scale.
|
||||
|
||||
## 5. Translation-family results
|
||||
|
||||
| mesh | rows | `S` | `B=0.01S` | near-zero / significant rows | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | relative RMS | verdict |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| coarse | 147 | `2.3740820300000001e-05` | `2.3740820300000003e-07` | 122 / 25 | 0 | `1.9037855439354404e-07` | `8.5711169439298945e-03` | `2.4530813178127803e-08` | `2.9742030342848264e-07` | `1.0332757195473908e-03` | pass |
|
||||
| fine | 2,187 | `2.5795705400000001e-05` | `2.5795705400000002e-07` | 1,626 / 561 | 0 | `1.6193812501096337e-07` | `6.2777164841928829e-03` | `5.8615647876386634e-09` | `2.7411825664926473e-07` | `2.2723025777921402e-04` | pass |
|
||||
|
||||
Both sets have zero row failures and relative RMS values below the common
|
||||
`0.01` threshold. This is a translation-only diagnostic pass; it is not a
|
||||
full external-reference verdict for the nonlinear-static feature.
|
||||
|
||||
## 6. Component diagnostics under the unchanged family scale
|
||||
|
||||
The `near-zero/significant` counts and every row decision below use the Section 5
|
||||
family band `B`, not a component-derived scale. A dash for maximum relative
|
||||
error means all rows of that component were near-zero and were therefore judged
|
||||
only by the approved absolute-band rule.
|
||||
|
||||
### 6.1 Coarse mesh
|
||||
|
||||
| component | rows | near-zero / significant | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | worst row `(node; fesa; reference; abs error)` |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 49 | 49 / 0 | 0 | `5.9371608358817413e-12` | — | `1.7563955953584068e-12` | `1.2294769167508847e-11` | `12; -8.7994083858817417e-12; -2.8622475500000000e-12; 5.9371608358817413e-12` |
|
||||
| U2 | 49 | 49 / 0 | 0 | `5.9379769034414602e-12` | — | `1.7566506185832881e-12` | `1.2296554330083018e-11` | `19; 8.7996068934414599e-12; 2.8616299900000001e-12; 5.9379769034414602e-12` |
|
||||
| U3 | 49 | 24 / 25 | 0 | `1.9037855439354404e-07` | `8.5711169439298945e-03` | `4.2488614702881049e-08` | `2.9742030292016737e-07` | `2; -2.3550441745606457e-05; -2.3740820300000001e-05; 1.9037855439354404e-07` |
|
||||
|
||||
### 6.2 Fine mesh
|
||||
|
||||
| component | rows | near-zero / significant | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | worst row `(node; fesa; reference; abs error)` |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 729 | 729 / 0 | 0 | `5.6550975712048108e-12` | — | `1.5513648050863109e-12` | `4.1886849737330394e-11` | `27; -1.1143569120481096e-13; 5.5436618799999999e-12; 5.6550975712048108e-12` |
|
||||
| U2 | 729 | 729 / 0 | 0 | `5.6547834814404039e-12` | — | `1.5512360377367428e-12` | `4.1883373018892053e-11` | `16; -1.1132282144040392e-13; 5.5434606599999999e-12; 5.6547834814404039e-12` |
|
||||
| U3 | 729 | 168 / 561 | 0 | `1.6193812501096337e-07` | `6.2777164841928829e-03` | `1.0152527787009038e-08` | `2.7411825024924402e-07` | `2; -2.5633767274989038e-05; -2.5795705400000001e-05; 1.6193812501096337e-07` |
|
||||
|
||||
## 7. Deterministically ordered largest absolute-error rows
|
||||
|
||||
Rows are listed by descending absolute error, then source node label and
|
||||
component for a deterministic display. `part-1-1` below is the canonical
|
||||
case-insensitive instance identity.
|
||||
|
||||
| mesh | rank | key `(instance, node, component)` | FESA | reference | absolute error | applied rule and metric |
|
||||
| --- | ---: | --- | ---: | ---: | ---: | --- |
|
||||
| coarse | 1 | `(part-1-1, 2, U3)` | `-2.3550441745606457e-05` | `-2.3740820300000001e-05` | `1.9037855439354404e-07` | relative; `8.0190386005130586e-03` |
|
||||
| coarse | 2 | `(part-1-1, 35, U3)` | `-1.2104431681576916e-05` | `-1.2190867900000000e-05` | `8.6436218423083233e-08` | relative; `7.0902432158323394e-03` |
|
||||
| coarse | 3 | `(part-1-1, 39, U3)` | `-1.2104431681576916e-05` | `-1.2190867900000000e-05` | `8.6436218423083233e-08` | relative; `7.0902432158323394e-03` |
|
||||
| fine | 1 | `(part-1-1, 2, U3)` | `-2.5633767274989038e-05` | `-2.5795705400000001e-05` | `1.6193812501096337e-07` | relative; `6.2777164841928829e-03` |
|
||||
| fine | 2 | `(part-1-1, 21, U3)` | `-2.3863834908375246e-05` | `-2.3782464300000001e-05` | `8.1370608375244783e-08` | relative; `3.4214540322150206e-03` |
|
||||
| fine | 3 | `(part-1-1, 69, U3)` | `-2.3863834908375246e-05` | `-2.3782464300000001e-05` | `8.1370608375244783e-08` | relative; `3.4214540322150206e-03` |
|
||||
|
||||
## 8. Mesh trend interpretation
|
||||
|
||||
The fine-mesh translation relative RMS divided by the coarse-mesh translation
|
||||
relative RMS is
|
||||
|
||||
\[
|
||||
\frac{2.2723025777921402\times10^{-4}}
|
||||
{1.0332757195473908\times10^{-3}}
|
||||
=0.21991251074664606.
|
||||
\]
|
||||
|
||||
This is a `78.008748925335397%` reduction in the separately measured
|
||||
reference-normalized translation RMS. It is consistent with the hypothesis
|
||||
that the coarse-case discrepancy is mesh-sensitive, and the fine case also
|
||||
passes the same row/RMS policy.
|
||||
|
||||
It is not an observed order of convergence, a proof of monotonic convergence,
|
||||
or a solution-accuracy claim outside these translation rows: the two models have
|
||||
different meshes and distinct external-reference outputs, and no common-mesh
|
||||
interpolation or mesh-size-rate study was performed.
|
||||
|
||||
## 9. Explicit exclusions and no-change assertion
|
||||
|
||||
This report deliberately excludes:
|
||||
|
||||
- all reaction quantities;
|
||||
- `UR1/UR2/UR3` rotations;
|
||||
- all stress quantities, including the user-noted `reference/shell` element-label
|
||||
ordering change;
|
||||
- Newton convergence lifecycle and iteration-log acceptance beyond identifying
|
||||
the accepted factor-one HDF5 frame;
|
||||
- `USER-DECISION-004` disposition;
|
||||
- Step 11 and Step 12 status, Physics Evaluation, and Release readiness.
|
||||
|
||||
No source, test, CMake, comparator, tolerance policy, phase file, canonical
|
||||
reference-comparison report, declared input, or reference artifact was modified
|
||||
for this report. The report also does not create `implementation-report.md`,
|
||||
`build-test.md`, or `reference-comparison.md`.
|
||||
|
||||
## 10. Handoff
|
||||
|
||||
Within this narrow scope there is no artifact, identity, finite-value, or
|
||||
translation-tolerance blocker. The report is handed to the Coordinator as
|
||||
translation-only diagnostic evidence; gate ownership and all excluded work remain
|
||||
unchanged.
|
||||
Reference in New Issue
Block a user