# S3 partial-BC 정적 평형 불일치 - Feature: `mitc4-shell-feast-eigen2`; Owner: `numerical-review-agent`; 검토일: `2026-09-09`. - Finding: **NR-IMP-10 / upstream-contract-conflict**. [현재 보고서](implementation-numerical-review.md)의 추가 검토다. - 입력: [S3 정식화](formulation-mass-stabilization.md), [E2-C09](numerical-review-cases.md), 채택 [C7](../mitc4-shell-feast-eigen/numerical-review-controls.md), 기존 [linear formulation §14.1](../linear-static-mitc4-shell/formulation.md), [linear I/O §6.5](../linear-static-mitc4-shell/io.md). ## 독립 수치 결론 `d=(3/5,0,4/5)`, node1 URZ만 free, applied moment `(-4/3,0,1)=(5/3)b`, `M0=1`인 승인 S3에서 다음은 정확하다. Moment의 단위는 `[force·length]`다. \[ \theta_{1Z}=7500/10369,\qquad \gamma_1=d^T\theta_1=6000/10369,\qquad k_d=19/4800. \] Physical stiffness의 spatial total moment는 0이지만, `Kdrill`은 node1에 `tau_d=kd gamma1 d`를 더한다. `r=Kq-F`의 free 성분은 0이므로 applied load와 **constrained full residual**을 더한 기존 global moment evidence는 \[ e_M=\tau_d=(57/41476,\ 0,\ 19/10369),\qquad \|e_M\|=95/41476\approx0.002290481242164143\ne0. \] Global Z45° 회전에서는 `e_M'=Q e_M`이며 norm은 같다. Applied moment가 tangent라는 사실은 partial global BC가 만든 `gamma1!=0`을 없애지 않는다. Load의 constrained X 성분을 추가해도 `Ff=1`과 위 nonzero torque는 그대로다. Physical rigid representative의 회전은 `P_i Omega`이고, full spatial `Omega`와 numerical drilling energy를 혼동하면 이 불일치를 놓친다. [기존 독립 oracle](numerical-review-evidence.md)의 첫 Python block을 그대로 실행한 뒤 원 `K,q,F`에서 constrained `Kq-F`, 각 node의 `X cross R+RM`을 따로 합산했다. 현재 [global recovery](../../src/fesa/results/global_equilibrium_recovery.cpp) 193–249행과 같은 정규화에서 `reaction moment scale=3.1253278233567374`, `applied moment scale=5/3`, `eta_M=0.0007328771161369957`을 얻었다. Fraction 산술의 위 exact torque와 일치한다. 따라서 기존 `1e-10` 검사가 실패하는 것은 예상된 결과다. 이것은 독립 수학 실행이며 C++/reference/solver 재실행이 아니다. ## E2-C09 검증 계층과 계약 경계 **E2-C09 자체는 public `LinearStaticProcedureExecutor::Execute`의 성공을 명시하지 않는다.** S3, E2-C09 및 채택 C7의 해당 문장은 `thetaZ`, complete full `Kq-F`, same-BC/load 회전 공변성을 요구한다. 기존 독립 evidence도 direct1DOF partition solve로 이를 검증했고 zero global moment를 확인한 적은 없다. 따라서 production kernel의 complete K를 geometry/frame부터 재계산하여 `Kff theta=Ff`를 풀고, 전체 `r=Kq-F`와 원/회전 결과를 비교하는 **직접 pencil 테스트는 E2-C09에 맞는 검증**이다. Constrained residual이 0이어야 한다는 의미로 complete residual 기준을 적용하지 않는다. 이는 case의 test layer를 바로잡는 것이며 threshold·물리·reaction 계약을 바꾸지 않는다. 동시에 **public static 실패는 별개의 실제 계약 충돌로 남는다.** 기존 [linear requirements](../linear-static-mitc4-shell/requirements.md)의 017–019는 이 global component BC와 tangent CLOAD를 지원하고, 029/046/057 및 기존 I/O는 full residual reaction과 spatial global balance를 유지한다. 새 요구 024/027은 그 의미를 보존한다. 승인된 M2의 rotation-only drill penalty와 이 조합은 S3에서 exact algebra상 동시에 public 성공 조건을 만족할 수 없다. 직접 테스트 통과만으로 public static 회귀가 해소되었다거나 이 입력이 새로 unsupported라고 선언하면 안 된다. **처리:** E2-C09의 algebraic 검증과 현재 public failure 재현은 따로 보존한다. Global balance를 완화하거나 drill torque를 빼거나 reaction을 projection하거나 fixture BC/load를 바꾸어 실패를 감추지 않는다. Public static의 해당 supported 범위까지 성공해야 하는 완료 판정을 내려면 메인이 formulation/requirements owner에게 이 exact 반례를 전달하고, physics·지원 범위·recovery/acceptance 중 어떤 계약을 바꿀지 사용자 결정을 받아야 한다. 현재 numerical reviewer에게 그 변경을 자체 승인할 권한은 없다. Eigen S3의 finite-pencil target은 이 static 충돌로 바뀌지 않는다. 후속 실행 전달: 메인은 E2-C09를 direct pencil/full `Kq-F` covariance 테스트로 수정하여 통과했고, 별도 public static 테스트는 현재 global-equilibrium rejection을 재현한다고 보고했다. 이는 수학 case와 public 실패를 분리해 검증한 evidence이며, 지원 범위의 상위 계약 충돌을 해결하거나 public failure를 승인된 unsupported-input 진단으로 바꾼 결정은 아니다.