You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix: Gram-consistent D2/D2b symmetrised gaps + audit hardening batch (property tests, CodeQL, repo-review fixes)
Physics fixes (2026-07 audit, all anchor-preserving — 21/21 anchors unchanged):
- alicki_adjoint: transpose the Kron rho factors so the pi-weighted adjoint
is the true GNS-Gram adjoint G^-1 L G (G = rho.T (x) I, anchor B). Off the
real-diagonal steady-state manifold the old construction returned
unphysical NEGATIVE gns_gap (repro: Delta_s = -4.4 at Delta = 0.63).
- kms_gap: use the KMS-Gram adjoint (new gram_adjoint helper) instead of
mixing the GNS adjoint with a KMS similarity transform.
- _real_gap_from_symmetric: deflate exactly one zero mode; additional
Hermitian-part kernel vectors mean NO certified contraction (Delta_s = 0),
filtering them over-certified the bound (Delta_s > Delta).
Contraction bounds 0 <= Delta_s <= Delta verified on 40/40 random GKSL.
- sparse.chi1: remove double square root (certificate was K^(1/4), docs say
K^(1/2)); pinned against the dense petermann_factors oracle.
- relaxation: failed bootstrap now yields (nan, nan) CI + RuntimeWarning
instead of a silent zero-width interval (perfect-certainty failure mode).
- Robustness guards: steady_state integer-dtype cast, v4_thermal beta*omega
guard, seed bool rejection, engineered_target_jumps zero-vector guard.
Quality/infra (best-practice research: SPEC 0/7/8, sp-repo-review, OpenSSF):
- New Hypothesis property-based suite (gap scaling, unitary similarity,
trace-distance axioms + CPTP contractivity, semigroup law, Choi gate).
- New CodeQL SAST workflow (SHA-pinned, minimal permissions).
- pre-commit config (ruff, zizmor, cffconvert, hygiene hooks).
- pyproject strictness: pytest --strict-config/xfail_strict/filterwarnings=error,
mypy warn_unreachable + extra error codes, build-requires cleanup.
- CI concurrency auto-cancel; pypi.yml release QA gate (twine check --strict +
check-wheel-contents); scorecard publish_results for the public repo.
Docs: README layer table now uses the code-backed D-numbering; honest
qualification of the D21-D23 schema slots; manifest/seed claims corrected.
Semantics-changing classifier findings are tracked as issues #68-#72 for
dedicated PRs per AGENTS.md working agreement 3 (anchors are sacred).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XyiBg4VHjKnQ56kqJGFAN6
* fix(ci): allowlist QuTiP's matplotlib-absent import warning under filterwarnings=error
The new fail-loud filterwarnings=["error"] gate turned QuTiP's import-time
"matplotlib not found: Graphics will not work." UserWarning into a hard
error on every CI leg (the matrix installs .[dev,qutip] without the figures
extra; local runs had matplotlib installed, which is why this only surfaced
in CI). Graphics are irrelevant to the cross-checks — ignore exactly this
message, keep everything else erroring.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XyiBg4VHjKnQ56kqJGFAN6
* fix(ci): match ResolventConvergenceWarning by message, not class path
The class-based filterwarnings entry
(ignore::liouscope.numerics.resolvent.ResolventConvergenceWarning) forces
pytest to import liouscope at config time — BEFORE pytest-cov starts
measuring. coverage then reports module-not-measured for the whole package
and the total craters from ~94% to 74.55%, tripping --cov-fail-under=80 on
every matrix leg. Matching the warning by its message prefix needs no
import; verified locally: 403 passed, coverage 94.23%.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XyiBg4VHjKnQ56kqJGFAN6
---------
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments