nn Validation xFail/Skip Register¶
Purpose: satisfy v1.0 release governance for remaining nn/ validation
exceptions by tracking each with an issue reference, owner, and release
decision.
Last reviewed: 2026-05-01
Ownership and policy¶
- Owner: Arcane Sapience
- Scope:
tests/test_nn_physics_validation*.py - Rule: no untracked xfail/skip remains in this suite.
Exception register¶
| Ref | Test location | Marker | Summary | Owner | v1.0 blocking? | Disposition |
|---|---|---|---|---|---|---|
| NNVAL-001 | test_nn_physics_validation.py:205 |
@xfail (non-strict) |
CPU-JAX float32 diverges from GPU at tight tolerance | Arcane Sapience | No | Keep xfail until a deterministic cross-device tolerance envelope is defined. Marked strict=False 2026-06-15 — the outcome is nondeterministic by platform/precision, so a strict XPASS must not fail CI. |
| NNVAL-002 | test_nn_physics_validation.py:389 |
pytest.xfail |
SAF gradient NaN at eigendegenerate spectra | Arcane Sapience | No | Keep xfail; known eigh backward degeneracy path. |
| NNVAL-003 | test_nn_physics_validation.py:477 |
pytest.xfail |
Simplicial hysteresis not detected at current N/sigma2 | Arcane Sapience | No | Keep xfail pending larger-N parameter sweep evidence. |
| NNVAL-004 | test_nn_physics_validation_p2.py:276 |
assert |
UDE extrapolation NaN outside train window | Arcane Sapience | No | RESOLVED 2026-06-15 — CouplingResidual now tanh-bounds its output so the learned correction stays in [-1, 1] (matching the bounded sin backbone) and forward integration past the training window stays finite. The test also genuinely extrapolates (100-step run with trained params) instead of slicing past the trajectory end, and asserts finite test loss with test/train < 10. |
| NNVAL-005 | test_nn_physics_validation_p3.py:114 |
pytest.xfail |
Reservoir correlation below threshold without tuned K_c | Arcane Sapience | No | Keep xfail; expected operating-point sensitivity. |
| NNVAL-006 | test_nn_physics_validation_p5.py:389 |
@xfail (non-strict) |
CPU-JAX float32 phase drift at strict tolerance | Arcane Sapience | No | Keep xfail with documented float64 recommendation for strict checks. Marked strict=False 2026-06-15 — XPASSes intermittently on CPU-JAX, must not fail CI. |
| NNVAL-007 | test_nn_physics_validation_p6.py:345 |
assert |
K symmetry breaks during gradient training | Arcane Sapience | No | RESOLVED 2026-06-15 — KuramotoLayer.coupling integrates the symmetric part (K+Kᵀ)/2, so the loss gradient w.r.t. K is symmetric and trained K stays exactly symmetric (max\|K−Kᵀ\|=0). The xfail is now a hard symmetry assertion. |
| NNVAL-008 | test_nn_physics_validation_p6.py:677 |
pytest.xfail |
OIM Petersen graph residual violations | Arcane Sapience | No | Keep xfail; heuristic hardness case, not release blocker. |
| NNVAL-009 | test_nn_physics_validation_p7.py:150 |
@xfail (non-strict) |
FIM small-N scaling non-monotonic | Arcane Sapience | No | Keep xfail; finite-size regime note. Marked strict=False 2026-06-15 — nondeterministic finite-size effect, must not fail CI on XPASS. |
| NNVAL-010 | test_nn_physics_validation_p7.py:180 |
pytest.xfail |
FIM λ_c(4) near zero finite-size effect | Arcane Sapience | No | Keep xfail with explicit small-N caveat. |
| NNVAL-011 | test_nn_physics_validation_p7.py:292 |
pytest.xfail |
FIM hysteresis not visible in current λ/K range | Arcane Sapience | No | Keep xfail; requires expanded sweep window. |
| NNVAL-012 | test_nn_physics_validation_p9.py:320 |
@xfail (non-strict) |
MI ordering fragile on CPU-JAX float32 | Arcane Sapience | No | Keep xfail; precision/device sensitivity case. Marked strict=False 2026-06-15 — observed XPASSing intermittently on CPU-JAX, must not fail CI. |
| NNVAL-013 | test_nn_physics_validation_p9.py:539 |
assert |
analytical_inverse ill-conditioned at K=0 |
Arcane Sapience | No | RESOLVED 2026-06-15 — analytical_inverse now fits ω jointly via an intercept column, so uncoupled data is no longer confounded by ω-drift and recovers ‖K‖≈0 (0.001 vs 51.6 before). Coupled recovery unchanged (corr 1.000). The xfail is now a hard ‖K‖<0.5 assertion. |
| NNVAL-014 | test_nn_physics_validation_p11.py:160 |
pytest.xfail |
Critical slowing metric fails to capture expected behaviour | Arcane Sapience | No | Keep xfail; test-design refinement item. |
| NNVAL-015 | test_nn_physics_validation_p11.py:550 |
@xfail (non-strict) |
CPU-JAX float32 diverges from GPU at N=512 | Arcane Sapience | No | Keep xfail until a large-N cross-device tolerance policy lands. Marked strict=False 2026-06-15 — nondeterministic by platform/precision, must not fail CI on XPASS. |
| NNVAL-016 | test_nn_physics_validation_p12.py:48 |
assert |
Entropy-production formula mismatch/theoretical gap | Arcane Sapience | No | RESOLVED 2026-06-15 — the inline Σ coupling·dθ/dt formula was wrong (signed). The production monitor.entropy_prod.entropy_production_rate already uses the correct non-negative dissipation Σ(dθ/dt)²·dt (Acebrón 2005); the test now validates that estimator (non-negative across the trajectory, σ>0 under incoherent drive, σ≈0 when frequency-locked). |
| NNVAL-017 | test_nn_physics_validation.py:48 |
pytest.skip |
JAX x64 unavailable on some platforms | Arcane Sapience | No | Conditional skip accepted; environment capability gate. |
| NNVAL-018 | test_nn_physics_validation_p13.py:270 |
pytest.skip |
Rust FFI not available if spo-kernel not compiled |
Arcane Sapience | No | Conditional skip accepted; build capability gate. |
Release gate summary¶
Blocking exceptions for v1.0 closure:
- None. All four previously blocking exceptions are resolved (below).
Resolved blockers (kept for history):
- NNVAL-004 (
UDEextrapolation NaN) — resolved 2026-06-15 via tanh-bounded residual plus a genuine extrapolation test. - NNVAL-016 (entropy-production contract gap) — resolved 2026-06-15 by testing the correct non-negative production estimator instead of a signed inline formula.
- NNVAL-007 (training-induced
Kasymmetry) — resolved 2026-06-15 via symmetric coupling parametrisation. - NNVAL-013 (
analytical_inverseatK=0) — resolved 2026-06-15 via joint intercept (ω) estimation removing the ω/coupling confounding.
All other listed exceptions are explicitly non-blocking with current evidence.
Governance interpretation¶
This register has two operational roles:
- Release safety: entries with
v1.0 blocking = Yesare release-blockers until fixed or reclassified. - Predictive planning: non-blocking exceptions are tracked as controlled technical debt so teams can forecast risk by release train.
When a blocking item is resolved, re-run the linked test file and record the evidence in this table before removing the row or flipping disposition. For large sweeps, keep the owner and rationale so the same operational decision can be audited during release review.
Practical rollout guidance¶
Treat this register as a living risk ledger:
- Before release, verify each
v1.0 blocking = Yesrow is either fixed or reclassified. - Before CI-heavy milestones, run this file’s linked tests so blockers are surfaced before documentation or roadmap milestones mask execution signals.
- Keep owner and rationale fields synchronized with ticket status and code comments so no blocker is resolved without shared evidence.
This format is intentionally strict because nn parity and safety surfaces are
most useful when every known exception has a defined control path.
Expected evidence cadence¶
- Review quarterly or before any production tag.
- Keep
NNVAL-*links stable even after fixes; they provide historical context for why the contract required that tolerance or implementation policy. - Escalate conditional skips that are repeatedly hit in release CI into explicit runtime capability notes.