18 KiB
Hex8 verification and original comparison evidence
This page records the build/test evidence, comparison-only Python tool and actual original results. Historical pointwise results and the approved mean-volume change are recorded separately. It does not replace the feature PRD, numerical controls or completion checklist. The comparator reads official rounded Float64 quantities; it does not recompute the internal high+low solver acceptance gates from those observables.
Entry point and identities
uv run --with h5py --with pytest python scripts/verification/compare_hex8.py
requires --case, the actual scratch --input, official --results, and
--report. --references defaults to reference/hexa. The optional
--execution-record consumes a closed native CLI record; it never executes its
command. A supplied record must have native exit0, unchanged original/copy byte
identities, and the exact input and result hashes. Without that record the report
explicitly certifies file comparison only, not successful solver execution.
For example, after a real original run has naturally completed:
uv run --with h5py --with pytest python scripts/verification/compare_hex8.py `
--case hexa_linearstatic --input <scratch>/hexa_linearstatic.inp `
--results <scratch>/hexa_linearstatic_results.h5 `
--execution-record <scratch>/native.json --report <evidence>/comparison.json
The report path may not overwrite an input, reference, execution record or result. Authoritative repository originals remain protected even with alternate copied references; existing symlink/junction and hardlink aliases are also checked. Exit0 means the declared comparison passes; exit1 means a numerical family fails; exit2 means an identity/schema/finite/precondition error or missing modal reference. The tool is not a solver launcher, result generator, reference repair or release readiness check.
The fixed source inventory is the reference-model inventory: 442 nodes, 300 C3D8 elements and 13 frozen original files. Input and CSV raw SHA256 must match the documented Windows working-tree bytes. The HDF5 metadata must identify the actual lexically normalized absolute scratch path and that file's FNV1a64 content identity; a different path with identical bytes is not silently accepted.
Complete CSV identities are checked before any physical values are converted. Complete required Solid model/frame/physical schemas, UTF-8 attributes and explicit LE F64/U64/U8 widths are then checked. Result arrays join the source node or source element/point labels through their internal ID maps; CSV row order is not an identity. Physical values, including nonprojected RF rows and unused exported CSV derived quantities, must be finite before tolerance evaluation.
Static reference increment10 maps to the completed load-factor1 frame, independent
of its HDF5 storage frame index. RF validates all442 source rows before projecting
the actual51 constrained scalar components. It never compares free RF with free
residual. Stress compares all300×8×6 unaveraged global Cauchy components. Fixed
IntPt1–8 conventions are checked without nearest-coordinate remapping. Point
coordinates are auxiliary: CSV coordinate errors use the approved
16*float32-eps*sum(abs(Na*Xa_axis)) source-resolution budget; the scalar stress
policy is unchanged.
Dynamic comparisons require exactly101 accepted frames. Integer increment0–100
is matched first, source decimal time must equal n/10, and each stored time must
be binary64 n*0.1. Each frame's1326 U scalars form a separate blocking family.
There is no interpolation, nearest-time matching, scale sharing between frames,
rotation family or acceleration/energy reference claim.
Common numerical policy
Every static case has independent U-global, constrained RF-global and S-global blocking families. Every dynamic frame has its own U-global blocking family. For each family, only reference values define S=max(abs(reference)) and B=.01S. Rows with abs(reference)<=B require absolute error<=B; other rows require relative error<=.05. All-row RMS/S must also be<=.01. Boundaries are inclusive, and S=0 requires every actual value to be exactly0. No absolute floor, denominator clamp, row deletion or cancellation of signed errors is applied. Reports preserve each scalar identity/value/error/branch/pass and family scale/band/max-absolute-error, absolute/relative RMS, source SHA and policy.
The independent typed modal comparison behavior requires explicit source step,
mode1–10, eigenvalue or frequency quantity, and matching 1/time^2 or 1/time
units. Each mode is a singleton using the same RMS1% policy. This is not an
assumption about the absent original Value file's eventual CSV layout. Actual
modal original comparison remains NOT RUN until a genuine reference is
provided and its semantics and hashes are confirmed.
비교기 개발과 변경 전 pointwise 구현의 관측 이력
The initial seven behavior assertions failed before implementation (pytest native
exit1). The first expanded suite passed63/63 with native exit0. Those tests include
original-sized independently declared HDF5 schema fixtures and reference values;
they are comparator behavior fixtures, not actual FESA source validation evidence.
The affected Hex8 plus legacy HHT comparator suite passed119/119 (native exit0,
62.51s) before independent review fixes. Those bounded fixes were reproduced by
safe behavior RED tests and the five targeted regressions then passed5/5. Final affected checks after all three independent findings were corrected passed
124/124 with native exit0 (81.41s), with raw stdout and JUnit retained under
.harness/hex8-evidence/t8/final-affected/. The preliminary whole uv ... pytest -q attempt and the separate exact
configured uv run --with h5py --with pytest python -B -m pytest -v -rs
(docs/operations.md:87, adding h5py) both stopped during collection with native
exit2 and five legacy operational import errors (msvc_harness and removed scripts.hooks). It is not a whole-suite PASS;
no tests were excluded and no retired orchestration was restored.
Actual official linear-static and nonlinear-static results passed source,
model, schema, point, finite and frame prechecks and failed all three numerical
families. Their closed CLI evidence records both have native exit0 and matching
original/copy/result hashes; their comparator commands have native exit1.
These are genuine comparison failures under the unchanged policy, not reader
precheck failures or solver native execution failures. Frequency official readback
passes its prechecks; its comparator exits2 with not-run, not PASS.
| Case / blocking quantity | Scalars | Failing rows | S | Maximum absolute error | RMS/S |
|---|---|---|---|---|---|
| linear static U | 1326 | 79 | .00186131289 | .00007588175038730229 | .016739519723527385 |
| linear static RF | 51 | 34 | 513497.094 | 78630.61640144575 | .06818892528188494 |
| linear static S | 14400 | 7783 | 3430145 | 982855.3871926877 | .04270903417463437 |
| nonlinear static U | 1326 | 79 | .00186110672 | .00007586510202476195 | .016737790679783753 |
| nonlinear static RF | 51 | 34 | 513445.594 | 78623.61011241788 | .0681899286018377 |
| nonlinear static S | 14400 | 7782 | 3429817.75 | 982753.151651503 | .04270850513087158 |
Official result SHA256 values are
3ef92c35ea83ddb4d11437ff87ef15eca7dac179d378eda19570abae579b09d0 (linear),
0095ebf2d360a8bd8a71212af0dd500ed611a56540a173a39d9c8d88d8e05bbf (nonlinear),
and 0ec4d2b09250bab17a8532228cd34a312518c04023076f971e929b387031c6b3 (frequency).
Scratch inputs are retained under
.harness/hex8-evidence/t8-original-cli/<case>/<case>.inp.
Root preserved each exact command, closed native exit and full row report under
.harness/hex8-evidence/t8-comparator-frozen/official-comparisons/<case>/.
The command records identify the actual scratch input, original reference directory,
HDF5 and closed native CLI record consumed. The frozen author revision
0b93c0c59cf64db44003ebe5217a4efb8307a8ba passed independent bounded review
and was integrated as 317fe5c. Root and reviewer separately verified four owned
source blobs/snapshots, 65 closed raw artifacts and all13 unchanged source hashes.
The raw affected stdout/JUnit certifies124 tests (Hex8 83, legacy HHT 41), zero
failures/errors/skips and native0. This review certifies the comparator behavior
and evidence, not numerical agreement with the originals. Naturally completed
dynamic originals and whole-feature validation are tracked separately.
After integration, the root affected suite also passed124/124 with native0
(70.92s). Root comparison-only commands consumed the same naturally closed official
results and again returned static native1 with the same failed family metrics and
frequency native2 (not-run). These commands and raw stdout/JUnit/row reports are
retained under .harness/hex8-evidence/t8-integrated/. No original solver case was
rerun to perform these comparisons.
| Actual original | Closed pointwise baseline comparison state (before approved B) |
|---|---|
hexa_linearstatic |
Full precheck PASS; U/RF/S numerical FAIL (comparator native1) |
hexa_nonlinearstatic |
Full precheck PASS; U/RF/S numerical FAIL (comparator native1) |
hexa_dynlinear |
CLI native0,101-frame precheck PASS;88/101 U families FAIL (comparator native1), maximum RMS/S .08163737360707901 |
hexa_dynnonlinear |
CLI native0,101-frame precheck PASS;88/101 U families FAIL (comparator native1), maximum RMS/S .08160653291688992 |
hexa_freq |
Official HDF5 precheck PASS; modal Value absent, actual comparison NOT RUN (native2) |
Full MSVC build/CTest, original CLI orchestration, independent numerical/physics investigation of the reference conflict and whole-feature completion are root-owned and are not inferred from this Python implementation or its fixture tests.
The two actual dynamic CLI runs closed naturally with all101 frames before the
2026-10-10 energy change. Each comparison consumed all101 original increments,
1326 scalars per increment and44642 original node rows. Failed scalar-row totals
were74098 (linear) and73974 (nonlinear); maximum absolute errors were
.0003979358365926728 and.00039786754005028237. Full commands, native records,
source/result hashes and row reports are preserved under
.harness/hex8-evidence/t8-dynamic-closure/<case>/. The separately frozen API
c49cae4 also naturally completed both101-endpoint strict-gate checks with native0;
it did not itself write official HDF5 or establish original agreement.
The closed pointwise source 1eb9cdd full MSVC Debug build exited0. Its unfiltered
780-test CTest exited8:777 PASS,2 FAIL,1 SKIP, with all163 added tests PASS.
The baseline exception names, statuses and raw metric bodies matched exactly:
HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence,
HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants,
and HhtTemporalVerification.C04aFinestReductionComparisonIsNumericallyResolved.
Raw records and the independent closure summary are retained under
.harness/hex8-evidence/t9-full-current/. This is not a whole-suite PASS.
Approved B replaces the pointwise bulk energy and requires new validation of all five procedures. None of the historical native, internal or reference outcomes above is a validation result for the mean-volume implementation. Originals, tolerances, strict gates and comparator contracts remain unchanged.
2026-10-10 체적 평균 energy 구현과 현재 재검증
Frozen 작성자 b2abd739를 root 18b36c1에 연결했다. 두 pass로 reference-volume
가중 trace 평균을 계산하고 같은 energy에서 내력·전체 Hessian·복구 응력을 구한다.
Cross-GP bulk 항과 S*:delta²E 기하항을 함께 유지한다. LINE의 K0는 같은 식의
영변위 Hessian이다. 질량·HHT·strict gate·원본·I/O·허용오차는 변경하지 않았다.
수정한 weighted warped oracle를 이전 구현에 대입한7개 검사는 모두 실패했다. 변경본 작성자 관련150/150, 시간수렴3 GTests의4물리 사례, 최종 실제 재컴파일3/3은 각각 native build/CTest0/0이다. u/v/physical a의 최소 관측 차수1.98022는 기존1.8 기준을 충족한다. Root 실제 재컴파일 후 관련65/65도 native0이다. 정규 brick의 rank, 두 축 지정 굽힘장 에너지 수렴과 고정 두께 cantilever tip 추세는 서로 다른 증거다. 상세 범위는 수치 검토와 물리 검토에 있다.
새 공식 CLI는 frozen executable과 byte-identical scratch INP를 사용한다. 아래 두 정적 해석은 자연 종료 native0이며, 변경 없는 공식 비교기도 각각 native0이다. Source/model/schema/point/frame/finite 사전검사와 각 family의 모든 row가 통과했다.
| 원본 / blocking quantity | Scalars | Failing rows | Maximum absolute error | RMS/S |
|---|---|---|---|---|
| linear static U | 1326 | 0 | 6.096370478748947e-11 | 9.317898154374918e-9 |
| linear static RF | 51 | 0 | .014746726665180176 | 7.3098163267228364e-9 |
| linear static S | 14400 | 0 | .12245691940188408 | 3.425934236751431e-9 |
| nonlinear static U | 1326 | 0 | 9.832466303596647e-10 | 2.169911561350724e-7 |
| nonlinear static RF | 51 | 0 | 12.826179522729944 | 6.728092996221331e-6 |
| nonlinear static S | 14400 | 0 | 93.34994950843975 | 9.338899878251489e-6 |
새 HDF5 SHA256은 linear 023769e50d05226ef8defe87e29bc9046fbdd5071783007ebb39a49fd9d7d617,
nonlinear 2acb3471c7799597d554d4d9ee224e8c611522866808f38b2b2c202e0f98a4bd다.
Frequency CLI도 native0으로 종료했고 공식 readback 사전검사는 PASS다. 새 결과 SHA는
f6203936883df7f27e86a20311726b7e59fefa117e5f9fa67f71bdf63ec2e4cb다.
원본 modal Value 부재로 비교는 native2·NOT RUN이며 수치 통과가 아니다.
새 선형 동적 CLI가 native0으로 자연 종료했고101-frame 사전검사와101개 U family가
모두 PASS다(비교 native0). 총133926개 scalar의 실패 행은0개다. 초기 exact-zero family를
포함하며100개 nonzero-scale family의 최대 RMS/S는.0031316511389477947,
전체 최대 absolute error는1.3395048822648645e-5다. 마지막 RMS/S는.001392775677333779다.
Actual HDF SHA는 5476c557bc8e1c0a1e8b57a1cc8d763eb822a47e27aa2b2723fcbdc2246f9b40다.
이 외부 변위 비교는 rounded HDF만으로 내부 high+low strict gate를 재계산한 검사가 아니다.
새 비선형 동적 CLI도 native0으로 자연 종료했고101-frame 사전검사 및101개 U family가
모두 PASS다(비교 native0). 총133926개 scalar의 실패 행은0개다. 초기 exact-zero와
100개 nonzero-scale family를 구분했으며 최대 RMS/S는.003133373067174733,
전체 최대 absolute error는1.3397499223151595e-5, 마지막 RMS/S는.0013958914416137816이다.
Actual HDF SHA는 023b4558a28f8d9365f6b11346a6cb4a5d2faafa68607c5c56bbf226fe816210다.
다섯 새 공식 CLI queue는 wrapper0으로 자연 종료했고 원본13개 SHA를 보존했다.
독립 검토의 범위는 해당 수치·물리 검토 문서를 따른다.
제외 없는 전체787 CTest는2026-10-11 자연 종료했다. MSVC x64 Debug configure/build는
native0/0이며 CTest는 native8:784 PASS·2 FAIL·1 SKIP이다. 기존617개가 모두 유지됐고
추가170개는 모두 PASS이며 새 예외는0이다. 두 기존 Shell 실패의 수치 로그20/30줄은
baseline과 정확히 같다. SKIP은 이름·상태가 동일하지만 output-on-failure raw에 상세
본문이 없어 그 metric 검증은 NOT VERIFIED다. 전체 green으로 보고하지 않는다.
정확한 CLI/비교 명령·native record·
원본/copy/result SHA·전 row report는 로컬 .harness/hex8-evidence/mean-volume/의
original-cli/, comparisons/, integrated-focused/, full/에 보존한다.
동일 revision에서 전체 Python 명령
uv run --with h5py --with pytest python -B -m pytest -v -rs도 다시 실행했다.
기존 msvc_harness·제거된 scripts.hooks import의 collection5 오류로 native2,
실행0개다. .harness/hex8-evidence/mean-volume/python-full/의 native 기록을 따른다.
기존 실패를 제외하거나 폐기된 절차를 복원하지 않았으며 전체 Python PASS가 아니다.
2026-10-11 전체 재검증 종료 기록
전체 C++ 검증은 설치된 MSVC x64와 dependency 환경에서 아래 preset backend 명령을
제외 없이 실행했다. .harness/config.json이 없고 generic runner는30분 deadline을
사용하므로 수시간의 전체 실행은 직접 backend로 완료했다. scripts/execute.py의 별도
실행 성공을 주장하지 않는다. 실제 argv·시각·native 종료 코드는 full/에 보존했다.
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
전체 실제 시간은16839.26초다. 기존 실패는
HhtShellPhysics.C08aRigidManufacturedOrbitFullCoordinateTimeConvergence 및
HhtShellPhysics.C08bFreeFiniteRotationPlateSelfConvergenceAndPhysicalInvariants,
SKIP은 HhtTemporalVerification.C04aFinestReductionComparisonIsNumericallyResolved다.
기존617개와 새170개의 discovery·실행 ordinal·status 및 종료 artifact SHA 대조는
full/independent-closure-summary.json에 있다. 다섯 CLI·네 실제 원본 비교·modal NOT RUN·
Python collection 오류와 원본13개/frozen binaries 보존을 함께 기록한 최종 자료는
.harness/hex8-evidence/mean-volume/closure.json이다. 독립 감사와 실제 원본 물리 복구의
bounded 판정·한계는 수치 검토, 물리 검토를 따른다.
종료 후 독립 전체 evidence 감사도 native0·finding0이다. 별도22개 artifact SHA와
세 실제 테스트 실행 파일의 중간 관측/종료 SHA, 모든 discovery/실행 행과 기존 상대
순서·status를 대조했다. 자료는 final-evidence-audit-full/에 있다. 두 실패 출력은
elapsed-ms 표기만 제외해 정확히 동일하다. 이 감사 PASS는 CTest native8이나 modal
NOT RUN을 통과로 재분류하지 않는다.