# ADR-018 graph BL/solve certificate controller draft 읽기 구분: 2026-10-12 test-local graph certificate 설계 초안이다. 수식 범위는 [고정 null 기저의 certificate 계약](formulation-fixed-null-basis.md#51-고정-basis-coefficient-radius의-실행-계약), 현재 구현·검증은 [기능 요약](README.md)을 따른다. 아래 작업 동결·추가 계획은 초안 작성 당시 기록이다. 상태: 과거 private 설계 초안이다. 작성 당시 configured Debug focused run 중에는 shared test source를 동결했다. 현재 test-local certificate 구현의 존재와 최신 실행 검증 범위는 구분하며 [기능 요약](README.md)을 따른다. ## Scope Stored `ConstraintRowOperators::{gradient,hessian,time_gradient,third_directional_gradient}` are exact binary64 inputs. The draft certifies only fixed-basis contraction and linear graph-solve arithmetic. It does not certify AD/FE operator formation, root branch sensitivity, or nonlinear history. ## Test-local data `GraphArithmeticCertificate` should retain dense-small matrices/vectors: `Ghat`, `P_hat`, `BG`, `BP`, `bhat`, `Bb`, `R`, `Hbar`, `Q`, `rbar`, `Bx`. It is private to `hht_shell_physics_test.cpp`. For every graph row and basis column, replay source order: 1. Iterate `row.gradient`, then `column.support`; match full DOF. 2. Product radius is `ProductRadius(C, 0, L, BL)`. 3. Reduce matching products in `RateSumRadius` source order. This yields stored `Ghat=C*Lz`, `P_hat=C*Lp`, and entrywise `BG/BP`. The same replay builds RHS radii for `P*vp`, `P*ap`, Hessian/time contractions. No zero-BL fallback is allowed. ## Inverse action For each canonical unit RHS, use the existing graph solver and N2-L check to obtain one stored column of `R`. Replay `I-Ghat*R` with product/sum radii to make nonnegative `Hbar`. Require finite values and `thetaH=||Hbar||inf<1`. Construct `Q[i,j] = abs(R[i,j]) + (abs(R)*Hbar*1)[i] / lower(1-thetaH)`. All bound additions/divisions use existing outward helpers. Failure of the positive lower denominator or either theta is INCONCLUSIVE, not a radius reset. ## Uncertain solve Replay `rhat=bhat-Ghat*xhat`; combine absolute residual and rounding into `rbar`. With actual RHS bound `Bb`: `y = Q*(rbar + Bb + BG*abs(xhat))`, `A=Q*BG`, `thetaG=||A||inf`. Require `thetaG<1`; set `Bx[i] = y[i] + rowSum(A,i)*normInf(y)/lower(1-thetaG)`. Undo any actual rate scaling before using `Bx` in physical lifted radii. ## Tests 초안 작성 당시 focused run 종료 뒤 추가하려던 검사 목록: - small chart with plane coefficient value zero / positive BL, proving BG/BP remain nonzero after an omitted-BL mutation; - 1x1 and 4x4 source-order graph replay, N2-L checked; - one thetaH and one thetaG failure must return incomplete; - use a known 4x4 perturbation from the independent 32-case probe as a behavior oracle, without copying implementation equations as its oracle. No production API, tolerance, grid, or sparse global inverse is added.