merge: retain tests with recorded cleanup evidence

This commit is contained in:
KOKO\Mimi
2026-10-18 12:54:22 +09:00
4 changed files with 3061 additions and 2877 deletions
@@ -179,3 +179,17 @@ integration35개 전체를 다시 실행해 identity35·exit0·failure/error/ski
기능의 물리 승인으로 확대하지 않는다. 사용자 수정 범위의 정리 전 정적 gate는 충족했으므로
다음 단계로 진행할 수 있다. 비정적333개·누락 정식 fine/_02/pressure 비교·열해석 새 reference
부재와 기존 NT11 diagnostic 제한은 미완료로 유지한다. 테스트 정리·최종 병합은 아직 수행하지 않았다.
### T6 정적 범위 검사 정리 — 삭제 0개
[최종 정리 검토](test-cleanup-review.md)에 따라 검사·helper를 모두 보존했다.
실제 본문에서 public/private owner, 실패 뒤 출력·factor 보존, TLS·FP flags·비트 및
독립 frozen oracle의 경계가 달라 동등 대체를 입증하지 못했다. 폐기 구조만 검사한다고
확정할 근거도 없었다. 비정적333개와 자료 없는 fine/_02/pressure 관련 검사는 보존한다.
이관표2,876행의 원래12열은 그대로 두고 최종 판정·근거 연결3열만 추가했다.
검사 source·helper·양쪽 등록 변경이0이므로 문서 전용 정적 검토만 수행했다.
T6 raw `.build/merge-verification/t6-20261018/`는 원셀 보존, 현재964개 body와 선택631개,
Native/CMake 등록·제품274개·T5 실행물/hash 보존을 확인한다. T5 당시 실행 결과를
새 실행으로 보고하지 않으며 전체964개 PASS도 주장하지 않는다. 최종 정적 검증과
병합 완료 판정은 T7에 남긴다.
@@ -34449,5 +34449,71 @@
"path": "C:\\git\\FESADev\\.dryforge\\worktrees\\worker\\.build\\merge-verification\\t5-20261018-01\\before-prune\\static-only\\run-20261018-01\\hdf-schema-identity-inventory.json",
"sha256": "72b672a1cfcde5873552a2a9758981ae0f262f3a944cd71219ac5d7d83f2f3bd"
}
},
"t6_test_cleanup": {
"status": "DONE_WITH_CONCERNS",
"baseline": "26939140dae4fc83746d05d4fcf48085462ef83b",
"scope": "R6 applied only to approved static/common tests; nonstatic tests preserved",
"deleted_tests": 0,
"deleted_helpers": 0,
"replacements": [],
"reason": "Equivalent behavior/failure/numerical coverage or obsolete-only internal structure not sufficiently established; conservative retention required by R6",
"ledger": {
"rows": 2876,
"original_columns_preserved": 12,
"appended_columns": [
"cleanup_decision",
"cleanup_reason_id",
"cleanup_evidence"
],
"reason_counts_are_history_rows_not_unique_tests": {
"R-SUPPORT": 785,
"R-DEFER": 631,
"R-STATIC": 923,
"R-COMPARISON": 297,
"R-POLICY": 6,
"R-NUMERIC": 224,
"R-ORACLE": 2,
"R-CAPABILITY": 8
}
},
"review": {
"path": "docs/cpp-object-oriented-modular-refactoring/test-cleanup-review.md",
"sha256": "568146a93285181ad0b091458589255e50d708beac8e9d7209fe306aa4f35da9"
},
"source_or_registration_changes": 0,
"discovery_count_preserved": 964,
"unique_static_common_preserved": 631,
"deferred_nonstatic_preserved": 333,
"registration_sources": {
"fesa_unit_tests": 90,
"fesa_integration_tests": 11,
"fesa_reference_tests": 17
},
"products274_refactor_bytes_exact": true,
"source_test_build_execution": "not run: documentation/table only, per AGENTS; T5 execution artifacts inspected and hashes preserved",
"verification": [
{
"command": "python .build/merge-verification/t6-20261018/audit.py",
"exit": 0,
"path": ".build/merge-verification/t6-20261018/audit.json",
"sha256": "3bebab66024a4804cca618c918c295637c1fc4cb6f8e5ec6f2bf02cd3ad1d2b3"
},
{
"command": "python .build/merge-verification/t6-20261018/finalize.py",
"exit": 0,
"path": ".build/merge-verification/t6-20261018/t5-xml-static-check.json",
"sha256": "e913ee695a972ecaf4b600548a46e969d43d3f748e24dde6008b5c42ff010053"
}
],
"raw": ".build/merge-verification/t6-20261018",
"historical_t1_t2_t3_t5_fields_unchanged": true,
"remaining_limits": [
"333 deferred nonstatic identities are not validated by this cleanup",
"missing fine/_02/pressure canonical data; _02 comparator connection absent",
"ShellNL RF/RM false/review-only; stress mapping undecided",
"thermal new reference missing; NT11 diagnostic limit retained",
"T7 final static verification and final integration remain separate"
]
}
}
@@ -0,0 +1,104 @@
# T6 검사 정리 판정 — 승인된 정적 범위
삭제는 **0개**다. 검사 본문·helper·CMake/MSVC 등록을 변경하지 않았다.
같은 행동·실패 경계·수치 조건의 동등 대체 또는 폐기된 내부 구조만 검사한다는 근거가
충분한 후보를 찾지 못했다. 모든 검사가 서로 독립적이라고 증명했다는 뜻은 아니다.
판정이 불충분한 검사를 보존한다는 R6 계약을 적용했다.
[이관표](test-migration.tsv)의 기존 2,876행·12열·identity·assertion 셀은 보존하고
`cleanup_decision`, `cleanup_reason_id`, `cleanup_evidence` 3열만 덧붙였다.
Dev/Refactor의 같은 최종 검사로 연결되는 두 행은 출처 이력이며 실행 중복이 아니다.
삭제가 없으므로 대체 identity도 없다. 아래 identity는 **대체 지정이 아닌 비교 검토 대상**이다.
`disposition`, `final_sha256` 등 옛 셀과 T3 manifest는 당시 이력으로 그대로 둔다.
## R-DEFER
HHT·dynamic·eigen/frequency·transient thermal 실제 수치 검증 333개를 유예 상태로
보존한다. 선택 밖이라는 이유로 삭제하지 않는다. 같은 파일의 공통/helper 구간도 보존한다.
전체 body hash의 유일한 반복 묶음은
`FixedStations/ThermalSlab.ActualMeshesMatchCertifiedP2AndSeparateFourierError/0`부터
`/11`까지다. 같은 `TEST_P` 본문을 서로 다른 parameter로 실행하는 12개 identity이고
비정적 범위이므로 중복 삭제 후보로 채택하지 않았다.
## R-POLICY
`tests/test_cpp_policy_contract.py`의 두 검사를 유지한다.
`test_p_style_001_cpp_style_and_doxygen_tooling_contract`는 clang 형식·명명 규약,
Doxyfile의 입력/제외/경고와 optional `fesa_docs` 계약을 검사한다.
`test_p_style_002_msvc_targets_enable_standard_exception_unwinding`는 CMake의
solver/CLI `/EHsc`, 직접 MSVC의 shared props `Sync`, 다섯 프로젝트의 import와
override를 검사한다. Refactor에 파일이 없다는 사실은 폐기 근거가 아니다.
## R-ORACLE
`tests/unit/math/high_low_arithmetic_original.h`를 유지한다. include consumer는
`high_low_arithmetic_test.cpp`와 `hex8_high_low_test.cpp` 두 개다.
`HighLowArithmetic.OptimizedArithmeticMatchesFrozenOriginalBits`는 원본 연산으로 raw
pair를 정규화한 뒤 high/low 비트를 비교한다. 제품 predicate를 oracle로 쓰지 않는다.
`BitExponentMatchesFrozenOracleAcrossEveryExponent`는 normal exponent·trailing bit와
subnormal 경계를 검사한다. Hex8의 `FrozenMaterialPacket`·`FrozenGeometryPacket`도
이 helper의 원본 연산 순서로 독립 expected를 만든다. 제품 helper로 치환하면 독립성이 사라진다.
## R-NUMERIC
다음은 이름/행동이 비슷해도 전체 계약의 동등 대체가 입증되지 않은 실제 본문 비교다.
| 비교 대상 | 유지 근거 |
| --- | --- |
| `DenseMath.RowMajorMatrixMatchesKnownGemvGemm`, `MatrixProductKeepsShapeAndFiniteValidationOrder`와 private `DenseBlasInternal.RawProductsPreserveDestinationOnNonfiniteInput` | Public Matrix는 storage copy/move·차원 예외와 shape-before-finite 진단 순서를 소유한다. Private raw adapter는 caller 출력 buffer 보존을 검사한다. 공개 wrapper 성공만으로 private 실패 경계가 검증되지 않는다. |
| `DenseFactor.CholeskySolvesAndWhiteningRetainsScaleAndOrientation`와 `DenseBlasInternal.CholeskyAndInverseMatchKnownFactorsAndKeepFailedOutput` | 전자는 좌우·전치·직사각 RHS와 scaled whitening Gram을 검사한다. 후자는 identity RHS로 lower inverse의 명시적 `.5,-.25,.5` 값과 실패 뒤 기존 lower/inverse·factor 재사용을 검사한다. 일부 값의 중첩만으로 양쪽 전체 조건을 대체할 수 없다. |
| `DenseFactor.OwnsSnapshotAndFailedCandidatesPreserveReusableFactor`, `EmptyAndInfinityConditionBoundaryAreExplicit` | 입력 변경 후 snapshot, shape/NaN/pivot 실패·overflow solve 후 재사용, 빈 좌우 RHS 및 `2^-32` 양측/포함 경계가 있다. 낡은 lower/inverse 명칭이 남아 있어도 본문은 현재 factor 계약을 검사한다. |
| `MklPardisoSolver.SingleEquationScopeTransitionsBetweenRetainedSizes`와 `TangentSolver.SingleEquationScopeTransitionsBetweenRetainedSizes` | SPD `Factorize/Solve`와 비대칭 `FactorizeFresh/SolveCorrection` owner가 다르며 후자는 `{2,1,0,3}` 행렬을 쓴다. `ReusesRhsButFreshValuesAndFailureCannotReuseStaleState`는 fresh 실패 후 `solver-not-factorized`와 correction 보존도 검사한다. TLS 공통화만으로 각 owner 호출 경계가 없어지지 않는다. |
| `HighLowArithmetic.PacketDispatchRetainsComponentsAndInstructionGates`와 `Hex8HighLow.PacketVectorGuardsPreserveScalarFlagsAndBits`, `PacketDoesNotClearPriorMaskedStickyFlags`, `ConcurrentFirstLinearTrialsAcrossCopiesAndMoveKeepBits` | dispatch ISA/OS·FTZ 복원과 scalar/packet 선택, SIMD lane의 RN64/status·FP sticky flag·비트, copy/move/concurrent cache 결정론은 다른 경계다. 단순 scalar 성공/값 비교가 flags와 결정론을 대체하지 않는다. |
이 범주의 나머지 행도 본래 assertion/oracle와 identity를 유지한다. 전체 쌍에 대한
의미적 동등성을 주장하지 않으며, 추가 증명 없이 시험을 합치거나 helper를 제거하지 않았다.
## R-CAPABILITY
`tests/unit/elements/element_capabilities_test.cpp`는 adapter 경계를 소유한다.
`ShellTrialPreservesCompleteDirectionalResponseAndFailure` 본문은 kernel과 capability의
force/tangent/recovery·drilling 고차 directional 응답을 비트로 비교하고 direction 입력을
보존한다. 잘못된 trial의 structured status와 이후 정상 재사용까지 비교한다.
`BoundViewsSurviveOwnerVectorMovesAndRejectOtherFamilies`는 borrowed view 수명·다른 family
거부를 검사한다. Kernel 수식 검사만으로 adapter 전달·소유 경계가 검증되지 않는다.
Inertia/thermal 전용 identity는 R-DEFER로 분류하며 삭제하지 않았다.
## R-COMPARISON
C++ reference policy와 Python comparator는 같은 5%/1% 기준을 구현해도 별도 consumer다.
`ReferenceTolerancePolicy.AppliesRelativeAndNearZeroThresholdsAtTheirInclusiveBoundaries`는
C++ family row branch·threshold·relative applicability를 검사하고,
`test_inclusive_row_and_rms_boundaries_are_independent`는 Python 결과의 독립 row/RMS
경계를 검사한다. Python `test_report_is_deterministic_and_keeps_family_boundaries`는
보고서 JSON과 U/RF/S family·reference hash를 검사한다. Header collision·identity-before-NaN·
dtype/shape·없는 자료의 not-run도 solver 실제 실행과 다른 합성 계약이다.
정식 fine/_02/pressure 자료 부재·`_02` comparator 연결 부재는 여전히 미완료이며
유일 검사를 지우는 근거로 삼지 않았다. 비정적 이름의 합성 정책 검사를 실제 동해석 통과로 세지 않는다.
## R-STATIC
현재 정적·공통 선택 identity는 유지한다. T5의 source body/행/hash와 현재 본문을
대조하고 이관표의 최종 macro identity에 연결했다. 완전한 대체의 행동·실패 경계·수치
조건을 입증하지 못했으므로 기존 assertion과 독립 oracle를 보존한다. 실행 성공·장시간·
과거 제외 여부를 삭제 근거로 사용하지 않았다.
## R-SUPPORT
파일 record·helper/oracle/fixture/include/static assertion·등록/정책 문서 행이다.
같은 최종 파일을 가리키는 역사 행을 제거하지 않았다. 제품/검사를 삭제하지 않아 이번
변경이 만든 orphan은 없다. 기존 helper의 모든 간접 참조를 의미적으로 입증했다고
주장하지 않으며, 참조 없는 폐기 구조라고 확정할 근거가 부족한 항목도 보존한다.
## 정적 검증과 인계
T6 raw는 `.build/merge-verification/t6-20261018/`다. `audit.py`는 솔버/테스트를 실행하지
않고 TSV 원셀·전체 최종 행 분류, T5 964개 body 및 631/333 선택, 양쪽 source 등록,
제품274개 Refactor bytes, T5 실행물·기준자료·원본 manifest 보존을 검사한다.
구체 명령·exit·hash·검사 수는 `audit.json`과 manifest의 `t6_test_cleanup`에 기록한다.
검사 source·등록 변화가 0이므로 AGENTS의 문서 전용 규칙에 따라 build/test를 재실행하지 않았다.
T5 Native/CMake/CTest 각631·Python145, 정식 정적5모델의 기존 실행 근거를 그대로
인계한다. T6 정적 검토를 새 solver 실행·전체964개 PASS로 보고하지 않는다.
비정적333·fine/_02/pressure·thermal 새 reference와 NT11 제한, ShellNL RF/RM
false/review-only와 stress mapping 미판정은 유지한다. T7 최종 정적 검증은 별도 작업이다.
File diff suppressed because one or more lines are too long