Files
FESADev/docs/hht-implicit-dynamics/temporal-remediation.md
T
KOKO\Mimi eaa5cbeb21 feat: adopt lumped mass and reduced-coordinate shell HHT
Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
2026-10-13 16:57:19 +09:00

747 lines
54 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# C08 시간 정확도·운동량 실패의 후속 검증
후속 승인: 사용자가 아래 §7의 세 변경안을 승인했으며
[HHT-ADR-014](ADR.md)에 기록했다. 아래 private 결과·미채택 표현은 승인 전 조사와
실행의 이력이다. 승인 후 실제 구현·검증 상태는 [PRD checklist](PRD.md)를 따른다.
승인 자체가 기존 실패 또는 새 production 검증을 PASS로 바꾸지는 않는다.
2026-10-12. 사용자가 [해결 후보 조사](research.md#temporal-remediation-research)의 권장
순서 실행을 요청한 작업이다. 소형 DAE 검산, 실제 C08b 해상도 분석, P 평가와 history
분리, 같은 HHT 식의 산술 후보를 다룬다. Production·공식 검사·허용값·reference는
변경하지 않았다. 기존 C08a/C08b FAIL은 유지한다. [PRD](PRD.md)의 미완료 항목을
이 private 실험의 실행 성공으로 닫지 않는다.
## 1. 소형 DAE: 초기화와 전체 시간 정확도를 구분
`M=diag(1,0), U=(z−x³)²/2`인 cubic 제조해와 explicit-time 제조해, moving-null
oscillator, 실제 3DOF의 prescribed spectator BC 모델을 Decimal80으로 실행했다.
각 모델에서 현 full-coordinate HHT recurrence와 reduced-coordinate HHT를
`h=1/16…1/256`, `T=1`에 대조했다. Frame0의 정확한 q/v/물리적 a와 `A0=a0`를
보존하며 처음 몇 frame을 제외하지 않고 전체 시점의 최대 오차를 사용했다.
Moving-null 모델은 `y=x+z²/2`, `z=y³`, `y=sin(t)`로 두고
`M=(1,z)ᵀ(1,z)`, `N=(-z,1)`이다. 물리 관성에는 `v_z²`를 포함한다.
축소 embedding은 `Q(y)=(y−y⁶/2,y³)`이며
`v=Q_y v_y`, `a=Q_y a_y+Q_yy v_y²`로 실제 full rates를 복구한다.
| Moving-null finest 결과 | q 오차 | v 오차 | 물리적 a 오차 | 마지막 refinement 차수(q/v/a) |
| --- | ---: | ---: | ---: | --- |
| Full-coordinate recurrence | 1.28632e-5 | 2.43051e-5 | 3.22243e-2 | 2.00105 / 2.00095 / 1.00078 |
| Reduced-coordinate + chain rule | 1.97708e-6 | 3.54847e-6 | 9.93091e-6 | 1.99986 / 1.99968 / 1.99911 |
Cubic/explicit-time의 full-coordinate 물리적 a도 차수1이다. 정확한 초기 a만으로
후속 recurrence의 차수 저하가 없어지지 않는다. Reduced 방식의 정확히0인 오차에는
차수를 부여하지 않았다. Full residual 최대는3.22e-75 이하이며 reduced residual 및
hidden0/1/2는2e-79 수준 이하이다. 작은 잔차와 시간 정확도를 혼동하지 않는다.
실제 current C08a의 finest angular-a 최대 오차는5.67473e-4이며 기존1e-4를 넘는다.
Raw 마지막 차수는 약1이지만 finest v_phi/a_phi의 N7 noise separation은
INCONCLUSIVE다. 실제 shell의 차수 전체를 이 raw 값만으로 확정하지 않는다.
위 Decimal 반례는 이와 별개의 exact-arithmetic recurrence 차수 저하 증거다.
Current shell 측정의 원본은 [두 시작점 정책 보고서](newton-start-policy.md)를 따른다.
최종 v2는 실제3state/mass/null/free projection/reaction을 계산한다. 초기 v1의 spectator
bookkeeping 문제는 보존된 이력과 분리해 수정했다. 별도 Decimal100 polynomial-root
oracle가40행을 재현했고 오차 측정값 차이는5.99e-77 이하이다. Native exit0.
이 BC는 moving null을 자르는 BC가 아니며 shell partial-rotation BC·rank 변화·empty-null
검증으로 확대하지 않는다.
Evidence: `.dryforge/hht-remediation-20261012/dae/compare.py`, `comparison.json`,
`run-native.json`, `formulation.md`; 독립 검산은 같은 작업의
`review/dae-independent.json`, `review/numerical-review.md`.
## 2. 실제 C08b: 해상도와 finer Newton 실패
Current `RunPlate`·[두 시작점 정책](newton-start-policy.md)을 이용해 실제 accepted
q/v/a/A와 관성·내력 접선을 export했다. Debug 512/1024는129/257 frames를 모두
기록했고 공식 P와 일치한다. 초기 wrapper가 native process handle을 보존하지 않아
이 두 실행의 **native exit는 미확인**이다. Completion marker만으로 exit0을 추정하지
않는다. 같은 소스의 private MSVC Release 1024는 실제 exit0이며 이력과 P가 Debug와
bitwise 일치했다. Release는 별도 build tree여서 기존 Debug binary를 바꾸지 않았다.
Analytic mass null로 물리 부분공간을 정의하고 그 공간의 양의 mass를 Cholesky로
whiten했다. Elastic static condensation의 최대 주파수는 약311rad/s이다. 현재
convective partials까지 포함한 frozen full quadratic pencil의 최대 허수 주파수도
약311rad/s이며 원54-row pencil residual은5e-15 이하이다. Frozen coefficient/basis
분석이 실제 trajectory의 모드·안정성을 증명하지는 않는다. Elastic tangent의 비대칭
크기를 기록하고 symmetric-part 진단이라는 점을 명시했다. 음의 고유값·실수 root를
clamp하지 않았다.
초기 M/K와 실제 초기 v를 고정한 linear elastic surrogate에서도 회전 a의
512→1024 정규화 self-difference가0.437559였다. 실제 비선형 C08b는0.474897이다.
Surrogate exact solution 대비 회전 a 오차는1024/2048/4096/8192에서
0.162320 / 0.0413825 / 0.0103790 / 0.00259656으로 차수2에 접근한다.
이 결과는 고주파 시간 해상도가 중요하다는 근거다. Surrogate는 실제 nonlinear a0,
changing geometry/stiffness·convective 항을 대체하지 않으며 실패의 전체 원인 증명이 아니다.
독립 3-state amplification 계산이 surrogate 오차를1.15e-13 이내로 재현했다.
원 q-갱신 방식의 추가2048/4096 실행은 각각 increment242/1에서 Newton100에
도달했다. 초기 wrapper의 두 nonzero exit는 직접 보존되지 않았다. 별도 bounded
4096 instrumented 실행에서 실제 exit1과 첫 증분 실패를 확인했다. Iteration90–100의
free residual은 약1.79929e-10으로 기존1e-10 기준을 넘었고 보정량은 약8.2e-19였다.
q 변화는 약8.27e-19에서 정체했다. 이 시점의 q−q_p 차감으로 rates를 되찾는 산술이
잔차 감소를 제한하는 근거이며 기준 완화나 실패 frame 수용은 하지 않았다.
독립 tail 검산에서 이11개 iteration의 병진27개 q component는 전부 변하지 않았다.
잔차 gate를 초과한 것도 병진 채널이며 회전 채널 잔차는 약8.93e-13이었다.
Evidence: 작업 폴더의 `c08b/run-512`, `c08b/run-1024`,
`c08b/release/run-*`, `c08b/primary-A/run-current-4096-instrumented`,
`resolution/analyze.json`, `resolution/initial_elastic_surrogate.json`;
독립 검토는 `review/capture-numerical-review.md`, `review/surrogate-independent.json`.
## 3. P 평가 오차와 accepted history drift
동일 binary64 accepted state에 대해 ordinary sum, compensated sum, Decimal80,
별도 exact Fraction을 대조했다. 기존 정규화 P 오차는512/1024에서
2.84555e-14 / 8.03575e-14이고 정확한 state 평가에서도
2.86236e-14 / 8.03708e-14였다. Sequential 평가와 exact 평가의 차이는
5.59e-17 / 6.83e-17 이하이다. 합산만 개선해서 history drift를 제거할 수 없다.
Frozen history에서 predictor/rates를 Decimal100으로 다시 계산하면 weighted predictor
오차의 가속도 증폭 규모가5.91e-12 / 2.97e-11이다. 원
`sum(m_i*a_ui)`의 최대4.59e-12 / 2.14e-11과 비슷한 규모다. Binary64 replay는 실제
54개 rate를 정확히 재현했다. 그러나 고정밀 rates만 덮어쓰면 기존 equilibrium과
일관된 새 history가 되지 않으며 실제 weighted acceleration도 더 커졌다. 이를 보정된
solution으로 사용하지 않았다. 원인 분리에 필요한 sensitivity evidence다.
Evidence: `c08b/analyze_p.py`, 각 `p-analysis.json`,
`resolution/rate_arithmetic.json`, `review/capture-independent.json`,
`review/rate-independent.json`. Product rounding과 final cast를 포함한 proxy를 순수
product-only 오차로 부르지 않는다.
## 4. 같은 HHT 방정식의 carried-A 산술 후보
Frozen predictor `q_p/v_p`와 old physical a를 두고 `b=beta*h²`라 하면 현재 식은
```
q = q_p + b*A
v = v_p + gamma*h*A
a = (A + alpha*a_old)/(1+alpha)
```
`dE/dA=b*K_eff`이므로 기존 solve `K_eff*delta_q=-E` 이후
`A <- A+delta_q/b`로 갱신하고 위 식으로 실제 trial을 구성한다. 각 iteration에서
`A=(q−q_p)/b`를 다시 계산하지 않는다. 정확산술에서는 같은 full-coordinate HHT와
Newton이다. Reduced-coordinate 적분이나 momentum projection이 아니며 public A의
의미를 바꾸는 제안도 아니다. Binary64 history는 기존 q-update와 bitwise 다를 수 있다.
첫 iteration은 실제 `EvaluateNewtonStart`가 선택한 frame과 assembly를 그대로 소비한다.
그 후 실제 trial의 q/v/a/A로 residual/tangent를 조립한다. Requested scaled correction,
잔차·hidden·geometry·linear solve·Newton100 기준을 유지한다. 실제 반올림된 q 변화가
작더라도 inertia rates는 움직일 수 있으므로 requested correction과 실제 state 변화,
`q−q_p−b*A` closure를 구별해야 한다.
Private 512/1024/2048/4096은 모두 native exit0으로129/257/513/1025 frames를
완료했다. 정규화 P 오차는 각각
4.71100e-16 / 5.30454e-16 / 7.57130e-16 / 1.20892e-15이다. 원 q-update 대비 history 차이는
관측됐으며 bitwise 동일한 구현이라고 보고하지 않는다. **Legacy `RecordNoise`는
q-inverse 경로를 위한 N7 estimator다. 그대로 기록한 값은 carried-A 경로의 새 noise
인증이 아니다.** 후보의 실제 finer 결과는 다음과 같다.
| Common-time grid pair | q_u | q_phi | v_u | v_phi | a_u | a_phi |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 512→1024 | 4.29914e-6 | 1.10373e-4 | 8.79298e-5 | 7.21911e-3 | 4.37504e-3 | 4.74897e-1 |
| 1024→2048 | 1.08964e-6 | 3.10386e-5 | 2.28210e-5 | 2.01776e-3 | 1.21522e-3 | 1.31782e-1 |
| 2048→4096 | 2.73155e-7 | 7.96550e-6 | 5.85811e-6 | 5.45651e-4 | 3.14411e-4 | 3.40941e-2 |
| 마지막 self-difference 차수 | 1.99605 | 1.96223 | 1.96185 | 1.88670 | 1.95049 | 1.95056 |
표의 마지막 행은 `log2(previous difference/current difference)`이며 exact error의
차수가 아니다. 각 pair의 전체 공통 시점과9 nodes의 최대값을 사용하며 rate order r에
대해 `T^r` (`T=.25`)를 곱한다. 병진 length scale은 최대 초기 edge1이다.
회전 a의 차이는 finer grid에서 감소하지만 원512→1024 값은 그대로여서 기존 정확도
기준을 충족했다고 볼 수 없다. 새 grid로 기존 grid의 FAIL을 대체하지 않는다.
기존 finest difference bound는1e-4다. 관측한 차수2가 계속된다고 가정하면 회전 a의
2048→4096 차이0.0340941을 이 bound 이하로 줄이려면 coarse denominator가
약3.8만 이상이어야 한다. 예를 들어65536→131072의 차이는 단순 차수 외삽으로
약3.33e-5다. **실제 실행이나 통과 보장이 아닌 비용/해상도 추정**이다.
최종 두 refinement 차수까지 유지하려면32768/65536/131072 같은 추가 grid 후보를
검토할 수 있다. 승인된64–1024 grid를 이 후보로 자동 교체하지 않는다. 기존 문제의
고주파를 제거하거나 초기 변형 진폭을 줄여 통과시키지도 않는다.
Energy 오차는4.02172e-6 / 1.00065e-6 / 2.49394e-7 / 6.22469e-8, angular momentum
오차는1.71966e-6 / 4.30176e-7 / 1.07558e-7 / 2.68907e-8로 감소한다. 반면 P는
작아져도 strict decrease를 충족하지 않는다. 시간 해상도·산술 개선·acceptance 문제를 구별한다.
Evidence: `c08b/primary-A/primary_a.cpp`, 각 `identity.json`·`native.json`·
`trajectory.jsonl`, `pureq-vs-primaryA.json`; 실행 wrapper는 Python subprocess의 실제
child exit를 종료 전에 기록한다. 최초512의 DLL 누락 exit3221225781은 별도 실패로
보존했고 runtime 구성 후 성공 실행과 구분했다.
Common-time 대조의 실행 원본은 `resolution/carried_a_differences.py`·동일 이름의 `.json`이다.
독립 reviewer는 실제 source/계수/잔차·보정 기준·첫 assembly 소비를 대조했고 각 grid의
stored q/v/a를 binary64 direct map으로 재현했다(mismatch0). Fraction 기준의
`q−q_p−b*A` closure는 최대0.499998 ulp였다. 독립 exact nodal P drift는
3.53493e-16 / 4.87510e-16 / 5.52863e-16 / 9.31361e-16이며 공식 quadrature P와
별도 지표다. Weighted physical/auxiliary acceleration 합도 약1.8e-16 이하로 감소했다.
원54-row endpoint 내력 합과의 완전 오차 예산은 capture에 raw 내력 합이 없어 미완료다.
Six-channel 차이와 peak time/node도 독립 exact-input 계산으로 재현했다.
Review evidence는 `review/carried-a-final-review.md`·`carried-a-independent.json`이다.
Scoped N5는 초기 selected state·h=1/512에서 u/phi/mixed normalized direction에
대해 `2^-j`, j=8,10,12,14,16,18,20 고정 sweep을 수행했다. 첫 probe는 linked
q/v/a/A increment의 analytic tangent를 검사했다. 독립 검토 지적 후 v2는 base 및
양/음 perturbation을 실제 `q_p+b*A` map으로 재구성하고 base tangent도 다시
조립했다. 내부 sweep에 연속 통과 쌍이 있으며 최악 j10 상대 action 차이는
2.35197e-8로 기존1e-6 이하이다. 두 probe 모두 실제 child exit0이고 N5 stdout
completion marker와 빈 stderr를 확인했다. 공용 wrapper가 다른 marker를 검색해
`completion_marker=false`로 기록한 원값은 보존했다. 이 한 상태의 검사이며 모든
accepted state·BC·N7 통과로 확대하지 않는다. Evidence는
`c08b/primary-A/n5-carried-a-v2`, `review/carried-a-n5-audit.json`이다.
별도 instrumented512는 기존 trajectory를 덮어쓰지 않고 실제 exit0으로 완료했다.
384 corrections에서 requested/actual reconstructed delta q의 최대 차이는4.67227e-17,
binary64로 평가한 q-map closure는2.77287e-17이었다(위 Fraction closure와 구분).
최대 requested correction6.21702e-6과 실제
correction도 별도로 기록했다. Requested full vectors를 보존했지만 실제 full delta
vector는 기록하지 않아 모든 component의 독립 재계산을 의미하지는 않는다.
`c08b/primary-A/instrumented-512/requested-vs-actual-dq.jsonl`·`native.json`에
실행 identity와 수치를 남겼다. N5와 마찬가지로 wrapper marker boolean은false지만
해당 stdout marker·실제 child exit0을 확인했다.
최종 독립 검토는 위4grid의 recurrence/저장 state, one-state N5 v2,
384 correction records의 순서·집계·source/exe/library identity를 확인했다.
Correction은 aggregate/source audit이며 complete independent rounding oracle는 아니다.
최종 판정은 **이 private arithmetic 후보의 scoped 수치 타당성 확인**이다.
Production 채택·N7·BC·공식 C08 PASS 판정과 구별한다.
## 5. P strict decrease의 계약 문제
현재 flat centered all-free C08b에서는 first thickness moment가0이므로
`P_n=sum(m_i*v_ui,n)`, 병진 관성은 `m_i*a_ui`이다. 실제 물리/drilling potential의
균일 translation 불변성에서 `sum(f_int,ui)=0`이다. 정확한 endpoint equilibrium을
합하면 `S_a,n=sum(m_i*a_ui,n)=0`이다. 초기 평형과 `A0=a0`가 이를 만족하면
```
S_A,n+1 = (1+alpha)*S_a,n+1 - alpha*S_a,n = 0
P_n+1 - P_n = h*((1-gamma)*S_A,n + gamma*S_A,n+1) = 0
```
따라서 원 full-coordinate HHT의 정확 branch는 모든 h에서 P를 정확히 보존한다.
P drift의 strict temporal decrease는 정확 branch에조차 `0<0`을 요구한다.
독립 reviewer도 실제 translation-invariant source와 reference의 zero first moment,
별도 유리수 HHT recurrence 대조를 통해 이 증명을 확인했다.
Finite-precision 비영 drift의 비율은 이 문제의 P 시간절단 차수가 아니다. 이 증명이
현재 drift 전부를 roundoff로 인증하거나 energy/angular momentum의 정확한 이산
보존을 보장하지는 않는다. General warped shell·first moment≠0·외력·반력 및 새
reduced recurrence에 이 간단한 증명을 그대로 적용할 수 없다.
**사용자 결정 후보:** 기존 absolute P bound `<=1e-3`는 유지하고 이 특수 C08b에서는
P 절대 보존과 원 balance/update consistency를 검사한다. E/L의 기존 temporal
decrease는 유지하며 P에만 strict-decrease를 요구하지 않는다. 필요한 raw 진단은
`S_a`, `S_A`, `sum(f_int,u)`, `sum(E_u)`, HHT filter 및 velocity update defect다.
이는 acceptance 변경이므로 미승인 상태다. Tests·tolerance·FAIL을 자동 변경하지 않았다.
## 6. C08a의 실제 차수 문제와 다음 구현 경계
Carried-A는 같은 recurrence의 산술 개선이므로 §1의 물리적 a 차수1 반례를 해결하지
않는다. 실제 shell에 reduced-coordinate 후보를 적용하려면 smooth embedding
`q=Q(p,t)`, constraint Jacobian의 regularity·transversality, 양의 reduced mass를
검증해야 한다. Fixed graph에서 drilling scalar `psi=0`을 풀며 `psi_z` 가역성 하나만으로
모든 조건이 충족되었다고 판정하지 않는다.
복구식은 `v=J*v_p+Q_t`,
`a=J*a_p+Q_pp[v_p,v_p]+2*Q_pt*v_p+Q_tt`다. Residual은 `R=J^T*E`이고 정확한
접선에는 `(delta J)^T*E` 및 curvature/time 미분을 포함한다. Raw internal-force
third derivative만으로 충분하다고 단정하지 않는다. 현재 shell의 정확 drilling identity를
활용하면 일부 high-order energy 미분을 피할 수 있으나 constraint의 필요한 third
contractions·force/time derivatives·partial BC·chart transition을 실제 구현해야 한다.
구체적으로 fixed graph의 독립 좌표 p와 종속 drilling 좌표 z를 잡아 coupled
`psi(p,z,t)=0`을 푼다. 각 node의 admissible null을 n_i라 하면 현재 shell의 exact
identity는 `n_i^T*grad(U_phys)=0`이며 drilling constraint는
`psi_i=sum_e(k_e*S_i*gamma_ei)−n_i^T*F_i`,
`S_i=1/||J_l(phi_i)^(-1)*d_i||`로 표현할 수 있다. `gamma_ei`는 raw drilling
measure이고 현재 공개 `drilling_constraint`는 그 raw measure와 다른 force-derived
scalar다. 기존 scalar gradient/Hessian을 재사용할 수 있으나 필요한 third contractions는
현재 public return에 없다. 이 identity는 일반 U의 fourth derivative를 무조건 요구하는
경로를 피하는 데 유용하지만 외력의 null 미분과 explicit-time 항을 생략하는 근거가 아니다.
정확한 reduced Newton action은 같은 full trial에서
```
delta R = (delta J)^T*E
+ J^T*((I_q + K_int - F_q)*delta q + I_v*delta v + M*delta a)
```
를 계산한다. `delta q=J*delta p`이고 delta v/a는 위 chain-rule 복구식 전체를
미분한다. 따라서 Q_ppp와 mixed-time operators, 독립 HHT rate의 delta v_p/a_p가
포함된다. Constraint의 implicit derivatives는 같은 coupled `psi_z`로 solve한다.
`(delta J)^T*E`를 free endpoint residual이 작다는 이유로 제거하거나 FD 접선을 공식
정확 접선으로 대체하지 않는다. Fixed graph가 invalid하면 새 pivot/chart와 history의
검증된 수송식이 필요하다. 준비 전에는 silent normalization 대신 명시적 실패다.
최종 소형 정식화와 source capability 분석은 작업의 `dae/formulation.md`에 있고 실제
shell reduced prototype은 아직 미구현이다. 같은 full A field에 filter-combination 값을
담더라도 full Newmark driver라는 기존 의미가 사라질 수 있다. State/history·HDF5
semantics/schema 선택은 `io/io.md`의 **미채택 후보**이며 기존 계약을 덮어쓰지 않는다.
실제 채택 전 구체적인 알고리즘·영속 결과 의미 결정이 필요하다.
새 production 구현 후에는 해당 산술의 N5/N7, lifecycle/BC/physical balance와 기존
C08 검사를 먼저 실행하고, 구성된 전체 MSVC Debug/CTest·필수 원본 비교를 수행한다.
이번 private 수학/실행 자료를 공식 전체 회귀의 현재 PASS로 승계하지 않는다.
## 7. 채택 전에 필요한 결정과 검사
1. Carried-A는 같은 식의 산술 후보다. 실제 map의 scoped N5와 requested/actual
correction 대조와 별도로 N7 arithmetic estimator·BC/lifecycle·production 회귀가
남는다. 이번4grid 실행만으로 production을 수정하거나 완료를 선언하지 않는다.
2. C08b의 P는 §5의 absolute conservation 판정 변경 여부를 사용자에게 확인한다.
Energy/L bound·잔차·physical mass는 그대로다. 정확 branch에도 strict decrease가
성립하지 않는 현재 계약 문제를 tolerance 완화로 해결하지 않는다.
3. C08b의 시간 정확도에는 고주파를 충분히 resolve하는 grid가 필요하다. 기존64–1024
결과를 보존하고32768/65536/131072를 최종 수렴 판정에 추가하는 후보는 acceptance
변경이다. 관측된 차수 외삽이며 N7 또는 실제 성공의 보장이 없음을 함께 결정한다.
4. C08a에는 원 full-coordinate recurrence와 다른 reduced-coordinate 적분을 검토한다.
물리적 q/v/a·초기값·원 residual/hidden 기준은 유지한다. Public full A를 diagnostic
filter combination으로 정의하고 shell 결과에 algorithm metadata/schema version2를
구분하는 것은 **미승인 제안**이다. 승인 후에도 실제 shell prototype·독립 검토 없이
채택하지 않고 fixed patch 밖은 검증된 전환식이 마련될 때까지 fail closed한다.
위2–4는 승인된 acceptance·절차·영속 의미를 바꾸므로
[프로젝트 지침](../../AGENTS.md)의 사용자 결정 경계에 해당한다. 이번 실행의 성공을
승인으로 해석하지 않는다. 작업에 사용한 기존 production·tests·원본·binary의 hash는
`.dryforge/hht-predictor-newton-20261012/closed-identities.json`과 대조해 전부 일치했다.
따라서 이번 작업에서는 새 production 전체 build/CTest·reference 재검증을 실행하지 않았다.
문서의 local 링크와 whitespace는 정적 검사한다.
최종 정적 검사에서 local 링크536개에 missing0, `git diff --check` exit0이었다.
## 8. 승인 후 실제 구현과 현재 검증 범위
2026-10-12의 HHT-ADR-014 승인 후 reduced shell operator, augmented sparse
Newton 및 실제 executor 연결을 구현하고 있다. §7의 미승인 설명과 hash 일치는
승인 전 조사 시점의 기록이다. 현재 working source가 그 과거 binary와 같다는
의미가 아니다. 현 정식화와 public 의미는
[reduced 정식화](formulation-reduced-coordinate.md),
[수치 검토](numerical-review-reduced-coordinate.md),
[I/O 계약](io-reduced-coordinate.md)을 따른다.
| 실행 | 실제 결과 | 근거와 범위 |
| --- | --- | --- |
| Operator clean MSVC x64 Debug build | exit0 | `.dryforge/hht-remediation-20261012/operator-clean-build.log`; 실제 executor 연결 전 operator/기존 회귀용 build |
| Operator·algebra·state·writer·local third focused | 35 PASS, CTest exit0 | `operator-clean-focused.stdout.log`, `operator-clean-focused.native.json`; 실제 reduced 시간수렴 증거는 아님 |
| Reduced executor 첫 build | exit0 | `reduced-executor-build.native.json`; 빌드 후 후속 source 수정이 진행됨 |
| Executor·operator·Newton start·algebra·state·writer focused | 39 PASS / 1 FAIL, CTest exit8 | `reduced-executor-focused.native.json`; large DIRECT에서 첫 outer correction 후 graph root가 100회 종료 |
| 원본 reference 보존 | 16개 hash 일치 | 과거 `closed-identities.json`의 originals와 현재 파일 대조; 새로운 수치 비교 PASS가 아님 |
처음 incremental 검사에서는 localized MSVC `/showIncludes` prefix와 Ninja
설정의 encoding 불일치로 헤더 dependency가 0개였다. Private assembly 구조를
변경한 뒤 stale object가 섞여 algebra 8개가 실패했다. 현재 직접 developer-shell
실행에서 prefix를 맞춘 clean build 후 operator object의 dependency 39개와
관련 35개 통과를 확인했다. 별도 hidden child process는 다른 encoding을 사용할
수 있으므로 이후 build에서도 실제 dependency를 확인한다. 이 환경 오류를
물리 정식화 실패와 혼동하지 않는다.
첫 reduced executor focused 실패는 별도 graph-root 문제이며 조사 중이다.
초기 trial은 full free scaled residual로 비교하고, N2는 augmented의 실제
full q/v/a variation과 public A/private Ar를 각각 검사하도록 수정했다.
초기 full state는 보존하며 별도 reconstructed-rate candidate를 기존
초기화·hidden·mass 기준으로 검증한다. 이러한 후속 수정과 actual C08/N7,
승인된 finer grid, 새 reference 비교 및 전체 회귀의 결과는 아직 위 통과로
승계하지 않는다. 현재 완료 checklist는 [PRD](PRD.md) 한 곳에서 관리한다.
### 2026-10-13 후속 실행
후속 root 종료 조건은 기존 N3 uncancelled scale와 N2 회전 correction을 사용한다.
Scale가 0인 경우 literal zero만 허용한다. 초기 원본 q/v/a/A는 보존하고 별도
재구성 candidate를 검증한다. 기존 실패와 다음 결과를 구분한다.
| 실행 | 실제 결과 | 범위 |
| --- | --- | --- |
| `reduced-basics-focused` Debug | 11 PASS / 1 FAIL, CTest exit8, 1416.04초 | Plate h=1/256, T=.25의 65-frame runtime PASS(1290.35초). Large DIRECT는 inner graph 오류 대신 outer100 endpoint nonconvergence로 종료. 후속 N5/N7 수정 전 binary |
| `reduced-current-graph-focused` Debug | 25 PASS, CTest exit0, 61.83초 | 실제 mixed-time load의 augmented N5 sweep, zero-scale root, chart/부분구속, 상태·writer/readback·실패 파일 보존. Actual N5 47.43초 |
| Python HHT comparator | 47 PASS, exit0 | `uv run --with pytest --with h5py --with numpy python -m pytest tests/test_compare_hht_dynamic.py -q` |
| `reduced-release-core` | 9 PASS / 1 FAIL, CTest exit8 | Bounded C08a64의 초기 원본 상태·65-frame 이력 PASS. 최초 mixed-load N5 fixture의 graph branch 이탈 FAIL. Nonzero drilling force를 principal branch 안의 크기로 수정한 뒤 위 Debug N5에서 재검증 |
| `reduced-release-c08a` | CTest exit8, 114.95초 | 실제 16/32/64/128/256 전체 grid 완료; 승인 accuracy/hidden 기준의 실패는 아래와 같음. Release는 configured Debug 전체 회귀를 대체하지 않음 |
C08a의 h=1/256 최대 normalized angular-acceleration error는
`1.003052994395584e-4`로 `1e-4`를 초과한다. h=1/64→1/128의 차수는
`1.777772580127911`로 `1.8` 미만이며, 다음 refinement는 약2차다. 다른
q/v/translation-a channel은 이 실행의 정확도 기준을 만족했고 모든 channel의
기존 N7 factor100 separation 검사는 통과했다. 이러한 부분 결과를 C08a PASS로
표시하지 않는다.
Hidden velocity/acceleration defect는 각각 약 `1e-16`/`1e-13`에서 변동하여
strict 감소 검사가 실패했다. Reduced reconstruction에서 해당 analytic 식은
0이므로 이 값의 감소를 truncation order로 해석할 수 없다. 그러나 승인된 검사는
유지하며 독립 검토 및 진단을 진행한다. Algebraic acceleration recovery는 최대
angular-a error를 실질적으로 바꾸지 않았고, 오차 대부분은 physical complement에
있다. Hidden root drift만으로 정확도 실패를 설명하지 않는다.
현재 large DIRECT의 outer 잔차 정체와 C08a 정확도 실패를 해결 중이며, C08b 최종
finer grid·최신 production 원본 reference·구성된 전체 Debug 회귀는 미완료다.
### 좌표 증분 산술 수정 후 현재 범위
Large DIRECT의 실제 pp는 `-11218.75`, 반대 부호의 algorithmic 항은
`11218.426469199354`, physical p는 `-.32353080064604001`이었다. 요청
`delta_p=-2.2160194823574155e-12`가 Ar에서 p를 다시 계산하면
`-3.637978807091713e-12`로 바뀌었다. 이전 이 절의 outer100 실패는 이러한
상쇄·Ar quantization 문제와 구분하여 보존한다.
현재 p는 실제 Newton `delta_p`를 직접 누적하고 Ar는 독립적으로 같은 수학
recurrence를 유지한다. 기존 absolute update, whole p/v increment와 요청한
predictor/correction의 Neumaier trace를 기존 `1e-12`로 검사한다. 추가했던
`p-predictor` 대 작은 단일 algorithmic 항의 ratio는 N3에 없는 gate로 확인하여
제거했다. 정상 binary64 덧셈에도 그 ratio가 실패하므로 tolerance 완화가 아니라
계약의 정정이다. 실제 적용된 rounded delta를 요청 delta 대신 쓰지 않는다.
| 현재 동결 source 실행 | 결과 | Evidence |
| --- | --- | --- |
| MSVC x64 Debug 전체 target build | exit0 | `reduced-closed-trace-debug-build.native.json` |
| Supplemental Release build | exit0 | `reduced-closed-trace-release-build.native.json` |
| Debug operator·N5·procedure·산술 focused | 15 PASS, CTest exit0, 103.98초 | `reduced-closed-debug-core.native.json`; large DIRECT20.33초 PASS, injected backend cause/context PASS |
| Release 같은 범위 + 실제 C08a64 이력 | 16 PASS, CTest exit0, 36.98초 | `reduced-closed-release-core.native.json`; 최신 p/Ar/CA 및 전체 resolved checks 포함 |
Raw N5 sweep와 C08 incremental trace는 `reduced-closed-debug-raw.log`와
`reduced-closed-release-raw.log`에 보존했고 source/binary identity는
`reduced-closed-source-identities.json`에 기록했다. 이후 source 변경본으로
이 PASS를 승계하지 않는다. 원본16개 hash는 변경0이다.
이전 binary의 원본 재해석은6 accepted increments 뒤, 새 resolved 계약 정정에
따라 의도적으로 종료했다. 이를 physics FAIL 또는 reference PASS로 계산하지
않는다. 최신 source의 byte-copy 원본 재해석과 C08b 전체 승인 grid의 Release
보조 실행을 시작했다. 원본 재해석은 증분39·t=3.9의 increment trace 판정으로
CLI exit5에 종료했다(48분19.51초). C08b는599.92초·CTest exit8로
종료했으며 기존5 grid 이후 첫 finer grid에서 hidden position 판정이 실패했다.
Raw `ψ=5.7596457839072371e-18`, scale `1.627592976412797e-08`로 normalized
값은 약3.54e-10이다. 직전 velocity increment 검사 실패도 있어 원인을 함께 조사한다.
Evidence는 `reduced-closed-c08b.log`에 보존한다. Full configured Debug/CTest·필수
reference comparison은 아직 완료되지 않았다. C08a의 [두 변경](c08a-refinement-proposal.md)은
2026-10-13 HHT-ADR-015로 승인됐으며 변경본의 공식 검증을 새로 수행한다.
승인 C08a7 grid의 첫 Release 실행은862.08초·CTest exit8이다. 최종 angular-a
maximum은7.311940783e-6, 마지막 두 차수는1.805002375/1.972997261이고 다른
5개 physical channel도 마지막 두 차수1.8 및 finest error1e-4 기준을 만족했다.
Hidden1/2 bound와 N7 검사는 실패를 보고하지 않았으나 q increment 및 requested
trace assertion은 각각110건 실패했다. 추가 velocity subtraction assertion1184건은
위 원 N3 계약 정정 전 binary의 이력이다. Physical 부분 통과를 전체 PASS로
확대하지 않는다. `approved-c08a-release.log`, `approved-c08a-analysis.json`에
결과를 보존한다. 이 실행은 stable complete-Jet 및 후속 candidate 누적 수정 전이다.
## 9. Finer C08b의 작은 각도 내력 불일치
같은 h=1/32768 fixture의 별도 진단에서 증분4·t=.0001220703125를 확정했다.
Graph는 iteration0에서 normalized residual 약6.36e-14지만 node0의 analytic
constraint `1.4792647557e-22`와 실제 내력 null projection `5.7596457839e-18`은
같은 scale `1.6275929764e-8`에서 불일치했다. 저장된 binary64 component를
독립 Fraction/Decimal로 재계산한 최종 dot rounding은 약1.99e-25이다.
Root polishing 또는 최종 dot 보상합산으로 이 차이를 해결할 수 없다.
회전 norm은 이전 증분까지1e-4 미만이고 실패 증분에서 약1.314e-4다.
`ExpSkew`의 Rodrigues coefficient는 이 구간에서 value/gradient/Hessian에
`(1-cos(theta))/theta²`의 직접 Jet 계산을 쓰고, directional/mixed derivative에는
이미 안정적인9항 급수를 썼다. 동일 Jet의 모든 층에 이 급수를 일관되게 적용한
동일54좌표 진단은 원 normalized1e-10 기준을 통과했다. 물리 null force는
node0에서 약5.76e-18에서1.65e-24로 줄었다. 물리식·geometry predicate·
원 scale·tolerance를 변경하거나 힘을 projection하지 않았다.
별도 scratch unit 실행은 새 null-work 회귀의 수정 전 native1, 수정 후4/4
native0(1.219초)을 기록했다. 기존1e-4와 급수 경계.5 양측의 third-gradient
sweep, force/constraint derivative 및 기존 tangent schedule을 포함한다.
Evidence는 `.dryforge/hht-reduced-c08a-finer-20261013/`의 `point-original.log`,
`point-stable.log`, `element-unit-original.log`, `element-unit-stable.log`와
[독립 수치 검토](numerical-review-reduced-coordinate.md)에 연결했다.
Configured build/CTest와 전체 C08 이력 통과는 별도로 확인해야 한다.
원 N3는 velocity의 absolute update와 q1-qn의 predictor/correction trace를 요구한다.
추가했던 vnew-vold subtraction gate는 독립 계약 검토에 따라 diagnostic으로
정정했다. 원 velocity 식·whole-history CA·physical rates·q subtraction gate는
유지한다. 과거 C08b h=1/1024에는 q trace 실패도 있어 이 문제는 별도로 조사한다.
## 10. 보상 좌표 누적 적용 후 재검증
실제 Newton candidate 좌표의 high/low를 TwoSum으로 누적하고 predictor의
하위 자릿값도 보존했다. 요청 증분 trace는 별도 합산으로 유지하며 기존
`q_new-q_old`의 uncancelled scale 및 `1e-12` 기준은 변경하지 않았다.
산술·관성·요소 관련 Release 13개 검사는 통과했다. 이후 추가된 검사와
production 초기 평형 진단 변경을 이 binary의 통과로 승계하지 않는다.
승인된 C08a 전체7 grid의 재실행은 888.432초, CTest native8로 종료했다
(`compensated-c08a-release.log`). Finest angular-a maximum은
`7.3119407370681913e-6`이지만 q subtraction 및 requested trace가 실패했다.
첫 실패는 h=1/512, increment278, full DOF6이다. 저장된 좌표 증분은
`-1.0961338644671637e-6`, 요구 증분은 `-1.096133864469764e-6`,
scale은 `1.0961338644697645e-6`, ratio는 `2.3723299063737948e-12`다.
Candidate low는 `-2.6003877354211524e-18`이다. 가장 가까운 binary64 좌표의
표현 한계와 구현 오류를 독립적으로 구별하는 조사를 진행하며, 현재 결과는 FAIL이다.
Actual N5의 올바른 augmented Jacobian과 third-directional-gradient를 제거한
mutation 검사는 Debug에서 통과했다(86.70초). Mutant의 row3 normalized
error 약 `1.00336e-3`은 원 `1e-6` 기준을 넘었다. 나머지 필수 mutation과
warped/shared-element coverage는 이 검사로 대체하지 않는다.
전체 Debug focused 11개 실행은 10 PASS, proper-Q covariance 1 FAIL이다
(`compensated-debug-core.log`). 회전된 fixture는 초기 complete free equation에서
실패했으며, 기존 평형식과 허용값을 유지한 상세 진단을 추가해 재검증한다.
상세 진단은 unforced global-Z row의 residual `-2.1366160554637391e-34`,
row scale `1.0217671502953158e-32`를 확인했다. 내부 초기화 함수의 행별
검사는 승인 N2의 채널 최대값 기준과 다르고, assembled force/mass 기반 scale도
요소·하중별 uncancelled scale를 보존하지 않았다. 해당 사전 검사를 제거했다.
반환 가속도의 finite/구속 exact-zero, mass/range solve 및 hidden consistency는
유지한다. 호출자는 실제 a0로 다시 조립한 original/reconstructed frame0의
기존 N2 검사를 통과한 후에만 commit한다. C08 controller에도 fresh a0의
명시적 채널 검사를 추가했다. 독립 정적 검토는 이 소유권 정정을 확인했다.
Debug 전체 target 재빌드는 native0이며 관련 algebra 검사8개는 통과했다.
Actual proper-Q 이력의 재실행은 140.327초에 reconstructed frame-zero의
physical residual 검사로 실패했다. Focused 합계는8 PASS·1 FAIL, native8이다
(`initializer-caller-n2-debug.log`). 잘못된 사전 gate를 제거한 것으로 좌표계
회전 문제가 해결됐다고 보고하지 않는다. 재구성 초기 가속도와 실제 원 가속도의
채널·힘·scale 진단을 추가하여 원인을 조사한다.
C08b 전체 승인 grid와 byte-copy 원본 reference 재해석은 별도 실행 중이다.
최종 HDF5·reference 비교·전체 configured Debug gate는 아직 완료되지 않았다.
추가 C10 변경본의 전체 Debug target build는 native0이다
(`c10-initial-reconstruction-debug-build.native.json`). 실제 executor가 사용하는
100 correction policy의99/100/101 경계 검사는 통과했다. Accepted increment1
뒤 backend 실패를 주입하고 candidate 미반환·partial log·같은 Domain의 fresh
retry 전체 이력/로그를 대조하는 검사는51.30초에 통과했다. Actual proper-Q
재구성 진단 검사는 별도로 실행 중이다. 실제 물리 문제의100회
수렴, private local history의 직접 snapshot, HDF5 보존 coverage를 이 검사로
주장하지 않는다. N3 좌표 표현 변경 제안은 승인 대기다.
### HHT-ADR-016 승인 이후 실행 경계
2026-10-13 사용자가 pair 증분 검사와 저장 high의 RN-even 검사 분리를 승인했다.
위 승인 대기 설명은 이전 실행 이력이며 변경본 구현·검증을 새로 수행한다.
이전 production reference는 증분40·t=4의 requested trace에서 CLI exit5로
종료했다(`compensated-reference.native.json`, 약72분38초). 최종 HDF5/reference
비교 PASS가 아니다. 이전 기준의 C08b 장시간 실행은 새 승인 기준과 관성 수정으로
대체하기 위해 중단했다(`compensated-c08b-release.interruption.json`). CTest native8,
16750.04초이며 마지막 출력은 h=1/65536·증분16384의 원 high-only trace 실패다.
이 중단 실행을 전체 grid 자연 종료 또는 변경본 검증 통과로 보고하지 않는다.
추가 진단 실행은 C10 두 검사 PASS·C09 FAIL, native8로 종료했다
(`c10-initial-reconstruction-debug.log`). C09는137.126초에 실패했으며,
original frame0의 phi residual ratio도 `0.065354177871985789`로 이미
N2를 만족하지 않았다. 재구성 phi ratio는 `0.89790979051373154`,
최대 residual은 `2.1257138844293921e-17`, scale은 `2.3674025017737948e-17`다.
해당 full4 성분의 가속도는 original/reconstructed 모두
`4.9146402260681746e-13`이며 delta는0이다. Translation channel은 통과했다.
초기 range solve의 mass matvec와 실제 관성 조립 및 다른 가속도 성분을
대조해야 하며, 단순히 재구성 한 성분의 오차로 원인을 확정하지 않는다.
후속 anchored covariant 관성 계산의 Debug 검사에서 original frame0의 phi ratio는
0으로 개선됐다. Reconstructed frame0는 ratio `0.968200478753255`, residual
`2.1660326527186968e-17`, scale `2.2371737054993837e-17`로 여전히 실패했다.
따라서 관성 geometry 수정만으로 C09를 폐쇄하지 않는다. 기존 flat large-offset
zero-moment 검사는 통과했고, 잘못된 비영 C1 fixture 두 실행의 실패도 보존한다.
현재 genuine director-gradient fixture의 독립 적분 대조는 별도 실행한다.
ADR-016 exact threshold 변경본 전체 Debug target build는 native0이다
(`adr016-exact-threshold-warped-debug-build.native.json`). N3 산술 검사6개는
통과했다. 독립 MSVC/Fraction 대조는 frozen58개 및 threshold 경계126개에서
모두 판정이 일치했다. Unsupported product-tail24개는 fail-closed로 처리했다.
이 결과는 전체 C08 grid 또는 production reference의 통과를 뜻하지 않는다.
같은 변경본의 focused Debug 실행은 native0,9/9 PASS,149.36초로 종료했다
(`adr016-exact-threshold-warped-debug.native.json`). Warped 공유 절점의 실제 N5
fixed-sweep/mutation 검사는147.11초에 통과했다. Genuine Y-axis director-gradient의
비영 C1 검사와 독립5³ nodal moment·energy·power 대조도 통과했다. 이전 flat 및
twist fixture의 비영 C1 주장 실패를 이 실행에서 삭제하거나 재해석하지 않는다.
Actual initial-only 진단과8개 row의 독립 Fraction 대조에서 초기 회전 가속도는
질량 영공간 방향의 가짜 값으로 확인됐다. Direct primitive의 translation-gradient
합과 uniform-translation contraction은 정확히0이지만, physical tangent로부터
구한 projected constraint-gradient 계수의 잡음이 이를 상쇄하는 영공간 가속도를
생성했다. 재구성은 direct primitive를 사용하므로 그 가속도의 일부를 변경하고
실제 관성 모멘트 잔차를 만든다. 초기화와 재구성의 derivative authority를 동일한
direct primitive로 계산하는 동등 정식화의 수정 및 재검증이 진행 중이다.
초기 가속도의 projection이나 판정 기준 완화로 이 문제를 숨기지 않는다.
ADR-016 N3 및 anchored inertia의 frozen Release 실행에서 공식 C08a7개 grid는
native0,485.77초에 통과했다(`adr016-c08a-release.native.json`, raw CTest 보존).
최종 h=1/1024의6개 최대 normalized q/v/a 오차는
`3.47803e-8,5.94530e-8,4.16492e-8,8.35754e-8,2.50804e-7,7.31194e-6`이다.
원 승인 시간수렴 차수·hidden1/2·최종3-grid N7 factor100 검사도 통과했다.
보존 raw aggregate의 별도 재계산에서 최종 두 refinement의 최소 차수는
`1.8050023624308058`, 최종3-grid의 최소 noise separation은
`157.63456436970105`로 각각 원 기준1.8 및100을 만족했다.
실행 binary/source identity는 `adr016-c08a-release-source-identity.json`에 기록했다.
이 binary는 canonical initial-gradient 정정 이전의 snapshot이므로 후속 변경본의
전체 gate로 승계하지 않는다. Debug C08 및 C08b·reference·전체 회귀는 미완료다.
Canonical initial-gradient 변경본의 Debug target build는 native0이다. Algebra/C09
focused는562.44초·native8,7 PASS·2 FAIL로 종료했다
(`adr016-canonical-initial-debug.native.json`). 하나는 수동 regularity fixture의
gradient mutation 누락이며 수정 후 해당 경계 및 missing-gradient negative가 통과했다.
C09는 초기 재구성 gate를 통과했지만 increment1·outer100에서 physical moment N2
비수렴으로 실패했다. 초기 authority 정정을 전체 C09 통과로 보고하지 않는다.
Actual 첫 후보의 요소 replay에서 물리힘이 회전 잔차를 지배하며 drilling 기여는
약1e-37이었다. 절점 병진1–2 ULP 차이는 실제 작은 변형을 만든다. 별도의 rotated
element tiny tilt `phi=1e-17*tangent_a`에서 기존 full director 차감은 물리힘0을
반환하지만 같은 요소의 zero-state physical tangent 선형화는 비영 힘을 예측했다
(상대 차이1). 이는 value/gradient 일관성 검사이며 별도 전체 stiffness oracle가 아니다.
Rodrigues의 direct director increment를 전체 Jet에 사용한 private replay는
상대 차이`1.605880834081617e-16`으로 개선됐다. Quadratic energy oracle
`1.666666666666667e-33`는 uniform tilt의 독립 해석식
`U=0.5*(5/6)*[E/(2*(1+nu))]*t*area*theta^2`에서도 얻어진다.
Stable Jet energy도 일치하지만 기존 scalar recovery
energy는0이어서 force/tangent만 수정할 수 없다. Recovery에도 같은 covariant
increment와 Green–Lagrange 식을 적용하는 동등 산술 수정·검증이 진행 중이다.
이 bounded replay를 actual C09 또는 production reference의 통과로 확대하지 않는다.
Direct director increment와 recovery 변경본의 configured Debug focused 실행은
native8,16 PASS·1 FAIL,326.12초로 종료했다
(`adr016-direct-director-debug.native.json`). 비선형 요소의 residual·tangent·
objectivity·patch 검사16개는 통과했다. Actual C09는 초기 gate를 통과했지만
increment1·outer100에서 실패했다. 마지막 진단의 `max_NtE=1.69482e-32`,
`max_NtInertia=0`이며 작은 물리 moment 잔차가 남아 있다. 이 절댓값만으로
원래 uncancelled scale에 대한 N2 통과를 주장하지 않는다. 마지막 후보의
q/v/a와 관성 contraction을 조사 중이며 tolerance나 scale floor를 추가하지 않는다.
앞선 canonical-gradient 변경본에서 strong external-gradient N5, missing-gradient
negative, regularity 경계 검사는 native0,3/3 PASS,140.49초였다
(`adr016-strong-external-boundary-debug.native.json`). 실제 N5는139.35초에 통과했다.
이 evidence는 direct director increment 후의 N5 재검증을 대신하지 않는다.
현재 direct-increment epoch의 actual outer20 후보를 동결하여 q/v/a·private
predictor/trace와48개 full row를 별도 저장했다. 당시 phi ratio는
`0.9998109402`이며 아직 수렴하지 않았다. 저장된 질량계수와 같은 가속도를
Fraction으로 수축한 별도 replay에서 full39의 `M*a+c`는
`2.070274834838396e-19`이고 병진 coupling은 exact0이지만 native 관성힘은0이었다.
Full34와 full27에서도 각각 `1.883916436593294e-19`,
`-1.585777596546307e-19`가0으로 소실됐다. 자료는
`.dryforge/hht-direct-delta-c09-20261013/outer20-endpoints.json` 및
`inertia-exact-replay.json`에 보존했다.
Mass-point에서 큰 병진 가속도와 작은 회전 가속도를 먼저 더하는 산술은
작은 회전 기여를 잃을 수 있다. 동등한 `I=M*a+c`의 안정적인 계산과 독립
관성·접선·power 검증을 진행한다. N2 분모는 이미 원래
`sum_element,j |M_eij*a_ej|` 계약을 사용하므로 이를 변경하지 않는다.
이 bounded 불일치는 수정 근거이며 outer100 실패 전체의 원인 확정이나 통과
evidence가 아니다.
관성힘은 적분이 끝난 같은 원 질량행렬과 독립 convective force로
`I=M*a+c`를 deterministic compensated reduction하여 계산하도록 수정했다.
Mass·관성 접선·kinetic energy·P/L 및 rates의 수식과 원 N2 scale는 유지했다.
독립 검토에서 actual24개 회전 row의 소실을 재확인했고, 별도의 zero-state
해석식 `j*(|d|² I-d*d^T)*a_phi`도 stable contraction과 일치했다.
새 tiny-angular/large-translation 해석식 검사는 수정 전 native1/136ms로
실패했고 수정 후 기존 관성 검사까지 private12/12 PASS/11.824초였다.
Configured Debug 전체 target build는 native0이며 actual N5·C09 및 관성
focused 실행은 진행 중이다(`adr016-stable-inertia-debug-source-identity.json`).
Mixed point acceleration을 사용하는 Dq tangent·Pdot/Ldot의 다른 산술 경계까지
해결됐다는 의미는 아니며 전체 trajectory·temporal·reference 판정은 남아 있다.
위 configured Debug focused 실행은216.39초·native8,13 PASS·1 FAIL로 종료했다.
Actual N5는137.22초에 통과했고 관성12개도 통과했다. C09는62.83초에 초기
재구성 gate에서 실패했다. Original phi ratio는`2.4318705488789172e-16`이지만
reconstructed ratio는`0.4509010842022384`였다. Numerator는
`7.6381179402664958e-21`, 원 scale는`1.693967525888814e-20`이다.
Stable inertia가 보존한 작은 힘 때문에 이전 point 수축에서 드러나지 않았던
초기 dependent acceleration 차이가 확인됐다. 원 초기 state를 projection하거나
잔차 분모를 바꾸지 않고 initializer와 재구성 contraction을 대조한다.
원인 조사와 후속 수정은 이 실행의 FAIL 판정을 대체하지 않는다.
독립8-row Fraction 감사에서 rows0–3의 selected-P gradient contraction은
곱의 합과 product rounding 모두 exact0인데 plain reduction만
`1.734723475976807e-18`을 만들었다. 초기화와 같은 compensated reduction은0이다.
Rows4–7은 compensated partition RHS가 기존 `G*z`와 일치했다. Graph 경로만
exact-product 수축으로 교체하면 초기화와 coefficient/product authority가 다시
달라질 수 있으므로 같은 compensated partition 산술을 우선 적용한다.
이 감사는 원 초기 state의 변경이나 whole C09 통과를 의미하지 않는다.
Rate partition은 같은 coefficient/product authority의 compensated 합산으로
수정했고 C08 CA replay도 해당 연산 순서를 추적한다. 독립13-case/183-prefix
검산에서 exact 누적 오차가 추적 radius 안에 있음을 확인했다. Selected partition
회귀는 `(+1e16,+1,-1e16)`에서 plain 합0과 compensated rates1을 구별한다.
첫 Release build는 편집 중인 새 fixture의 Vector 생성 문법으로 native1이었고,
수정 후 새 prefix의 build는 native0이다. 두 실행 기록은 별도로 보존했다.
이 source의 Debug actual C09와 Release C08a7-grid 실행 판정은 아직 대기 중이다.
별도 independent zero-state 해석식은 큰 병진과 작은 회전 성분에서 Dq inertia,
L 및 Ldot의 추가 소실을 확인했다. `DqM`와 momentum coefficient를 적분 후
수축하는 동등 산술을 production에 적용했다. Original full position arm·
rho*N_i*dV0·독립 convective 항·mass·kinetic energy·rate scale와 predicates를
보존했다. Flat/proper-Q에서 epsilon=`1e-7..1e-20`의 whole Dq action 및 L/Ldot
28개 analytic 사례가 원 계산 RED에서 수정안 GREEN으로 바뀌었다. Exact
production source의 private 관성13개는 native0,32.132초에 통과했고 독립 정적
검토도 적합이다. 이 epoch의 공용 N5/C09·C08·reference 검증은 남아 있다.
Point-arm 양자화와 큰 orbital/작은 intrinsic 항의 최종 저장 반올림,
일반 tiny convective 사례는 별도 coverage 한계로 유지한다.
## 2026-10-13 현재 검증과 C09 정책 제안
Coefficient-first inertia와 compensated partition을 적용한 configured Debug
focused 실행은 native8·779.32초, 15 PASS·C09 1 FAIL이다. 관성13개,
actual N5와 selected-partition 회귀는 통과했다. C09의 초기 재구성은
통과하지만 첫 증분 full Newton100 종료 기준은 실패했다.
C08a manufactured helper는 assembly에 이미 포함된 external Hessian을
중복 누적하던 value/scale 항을 제거했다. 최신 Release 공식7-grid
C08a는 native0·470.47초에 통과했다. Raw와 native identity는
`.dryforge/hht-remediation-20261012/adr016-coefficient-inertia-c08a-release*`에
보존했다. 잘못된 helper 이름을 포함한 regex는 실제 공식 C08a 한 개만
실행했으므로 helper 통과로 계산하지 않는다. 별도 Release helper는
통과했고, 후속 configured Debug build native0 및 helper/partition 두
회귀도 native0·0.99초에 통과했다(`channel-proposal-helper-debug*`).
Release C08a 통과는 configured Debug 전체 또는 기능 완료를 뜻하지 않는다.
Read-only C09 최종 상태 진단은 병진 q/v/a와 p high/low/Ar를 유지하고
회전 및 모든 auxiliary block을 두 번 보정하여 원 full endpoint 기준을
만족했다. Commit 전 의도 종료 native1·5.703초이며 production C09 PASS가
아니다. [산술 진단](c09-newton-rounding-diagnostic.md),
[정책 제안](c09-channel-newton-proposal.md)과
[독립 검토 및 N7 명세](numerical-review-channel-newton.md)를 연결한다.
부분 행렬 N2-L 검사 영역 변경은 이후 HHT-ADR-017로 승인돼 구현 중이다.
자연 C09 trajectory, 변경 후 C08/N7, configured 전체 Debug 및 필수
reference 검증이 남아 있다. 기존 실패 기록과 원본 reference를 보존한다.
ADR-017 첫 configured Debug build는 native0이다. 새 channel-policy 세 검사,
external Hessian primitive/실제 manufactured helper 및 omitted-U N7 세 검사,
기존100/101 경계와 실패 후 retry 두 검사의 합계8개는 native0·23.79초에
통과했다. Prefix는 `adr017-channel-newton-debug-build`와
`adr017-channel-newton-policy-debug`다. Controller의 초기 trigger와 frozen-rate
copy parity는 독립 검토 후 추가 정정 중이므로 이 epoch를 공식 C08 통과로
계산하지 않는다. [구현 기록](implementation-channel-newton.md)의 private
proper-Q 자연 두 증분 PASS도 configured C09 전체를 대신하지 않는다.
Configured Debug actual C09의 여섯 실행은 모두 HasValue로 자연 종료했지만,
gtest 전체는 global-frame covariance 비교에서 native8·113.03초로 실패했다
(`adr017-natural-c09-debug` 및 raw/source identity). Solver nonconvergence와
다른 실패다. Vector/triad/director의 원1e-10 비교 기준을 유지하며 finite-phi
및 reduced chart 전환의 영향은 별도 read-only 진단으로 조사한다.
Serial/TBB/repeated-history 비교 실패나 endpoint 실패는 해당 raw에서 발견되지
않았지만 이 bounded 구분을 C09 전체 PASS로 보고하지 않는다.
최종 controller parity 정정 후 Debug/Release build는 각각 native0이며
공식 C08a7-grid 및 helper 검사는 새 identity에서 진행 중이다.
최종 parity 변경본의 Release C08a7-grid와 helper 두 검사는 native0·760.84초에
통과했다(`adr017-final-parity-c08a-release`). Raw·native·source identity와
별도 aggregate를 보존했다. Finest 전체 시점 최대 normalized error의 최댓값은
`7.31194068e-6`, 마지막 두 refinement의 최소 order는`1.80500237`, 최종 세
grid의 최소 N7 noise separation은`157.542906`이다. 원 bounds·factor100을
만족하지만 Release 범위이며 configured 전체 Debug 완료가 아니다.
Configured Debug의 실제 manufactured 초기 이력64-step 검사 및 helper 두
검사도 native0·786.88초에 통과했다(`adr017-final-parity-controller-debug`).
이는 Debug C08a 전체7-grid 검사나 C08b8-grid 실행을 대신하지 않는다.
[유한회전 진단](channel-newton-covariance-diagnostic.md)은 순수 병진에서
원 covariance 기준을 만족했다. 유한회전의2/4/8-step에서는 angular a 차이가
`2.594e-6→6.560e-7→1.691e-7`로 감소했고 같은 q/v/a를 회전해 재조립한
force/inertia는 약1e-17에서 일치했다. Independent Fraction 감사는 selected
position의 회전 전 결함 약2.34e-19와 회전 후4.82e-7를 분리하여 실제 비선형
selector recurrence의 차이를 재현했다. [고정 null 보완공간 제안](fixed-null-basis-proposal.md)은
독립 검토된 미승인 후속 변경이며 기존 C09 FAIL을 통과로 바꾸지 않는다.
추가 configured Debug의 clamped/load reaction, unloaded/free/partial BC,
large DIRECT 및 initial backend failure-context 네 검사는 native0·21.24초에
통과했다(`adr017-boundary-procedure-debug`). 실제 `RecordNoise` 집계의
omitted-U zM을 검사하는 `RestrictedRecordNoiseIncludesFullModelOmittedUDefect`를
추가했다. J의 step/defect와 accepted endpoint가 같은 두 입력에서 full omitted-U
defect만 변경하여 aggregate noise의 증가를 확인하므로 zM 누락을 검출한다.
최종 Debug/Release build native0 및 해당 검사 native0·1.23초/0.62초다
(`adr017-n7-final-*`). Production/controller 동작은 이전 공식 C08a와 같고
추가 regression fixture만 바뀌었다.
첫 aggregator build 이후 fixture 단순화가 공용 Debug compile과 겹쳤다.
그 실행은 intermediate snapshot으로 보존하고 최종 identity 근거로 사용하지
않았다. Final source freeze 후 mtime를 갱신하여 두 tree를 실제 재compile했다.
`adr017-n7-final-source-freeze.json`에 SHA와 이유를 기록했다.
이 bounded closure에도 C09 전체는 covariance FAIL이며 C08b8-grid·최종
chart 변경본의 공식 Debug 시간검사·전체 configured Debug/CTest 및 필수
production 원본 비교가 남아 있다.