# 2026-10-18 병합 테스트 정리 근거 삭제는 **0개**다. 검사 본문·helper·CMake/MSVC 등록을 변경하지 않았다. 같은 행동·실패 경계·수치 조건의 동등 대체 또는 폐기된 내부 구조만 검사한다는 근거가 충분한 후보를 찾지 못했다. 모든 검사가 서로 독립적이라고 증명했다는 뜻은 아니다. 동등한 대체 또는 폐기 구조 전용임을 입증하지 못한 검사는 보존한다는 기준을 적용했다. [이관표](test-migration.tsv)의 기존 2,876행·12열·identity·assertion 셀은 보존하고 `cleanup_decision`, `cleanup_reason_id`, `cleanup_evidence` 3열만 덧붙였다. Dev/Refactor의 같은 최종 검사로 연결되는 두 행은 출처 이력이며 실행 중복이 아니다. 삭제가 없으므로 대체 identity도 없다. 아래 identity는 **대체 지정이 아닌 비교 검토 대상**이다. `disposition`, `final_sha256` 등 옛 셀과 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는 유지했다. 정리 전 source body/행/hash와 최종 본문을 대조하고 이관표의 최종 macro identity에 연결했다. 완전한 대체의 행동·실패 경계·수치 조건을 입증하지 못했으므로 기존 assertion과 독립 oracle를 보존한다. 실행 성공·장시간· 과거 제외 여부를 삭제 근거로 사용하지 않았다. ## R-SUPPORT 파일 record·helper/oracle/fixture/include/static assertion·등록/정책 문서 행이다. 같은 최종 파일을 가리키는 역사 행을 제거하지 않았다. 제품/검사를 삭제하지 않아 이번 변경이 만든 orphan은 없다. 기존 helper의 모든 간접 참조를 의미적으로 입증했다고 주장하지 않으며, 참조 없는 폐기 구조라고 확정할 근거가 부족한 항목도 보존한다. ## 검증 기록과 최종 반영 당시 정적 감사 자료는 저장소 root의 `.build/merge-verification/refactor-integration-final-20261018-01/worker-raw/t6-20261018/`에 보존했다. `audit.py`와 `audit.json`은 TSV 원셀·최종 분류, 964개 body·631/333 선택, 양쪽 등록·제품274개·실행물·기준자료의 보존을 확인한 당시 명령과 결과다. 옛 절대 경로와 보관 위치의 대응은 상위 보관 폴더의 `archive-inventory.json`에서 찾는다. 문서 전용 변경에 새 build/test를 실행한 기록은 아니다. 정리 전 실제 Native/CMake/CTest 각631개·Python145개와 정적5모델 근거를 최종 상태와 대조했고 `762bd4b`로 dev에 반영했다. 전체964개 PASS를 뜻하지 않는다. 비정적333·fine/_02/pressure·thermal 새 reference와 NT11 제한, ShellNL RF/RM false/review-only와 stress mapping 미판정은 유지한다. 최종 실행 범위와 자료 위치는 [병합 결과](README.md#병합-결과와-검증-범위)에 정리했다.