Repository navigation
feat(#117,#168): conditioning audit with Schur-projector cluster semantics - #173
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 41240d54ee
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Without zero_tolerance the audit used an internal NaN cutoff. Every ordered comparison with NaN is False, so the scalar path could only answer BENIGN (diag(0,-1,-1,-2), trace defect 1.414, came back BENIGN), and the zero set was chosen by proximity, which a defective double root split by ~sqrt(eps) makes basis dependent (issue-#168 pair: CLUSTER_ONLY plain, BENIGN rotated; Codex review thread on conditioning.py:809). - default call returns verdict ABSTAIN / reason zero_tolerance_not_supplied: observations only (smallest eigenvalue, magnitude, trace defect), every zero-set quantity NaN, never BENIGN - scalar verdict via _scalar_verdict: BENIGN only on a TRUE budget <= tol; NaN/inf budget -> CONDITIONING_LIMITED, non-finite cutoff -> ABSTAIN - tests: default invariance on the #168 pair, non-trace-preserving default, 12-operator negative sweep, verdict truth table; measurement tests now pass the layer's own cutoff; longdouble fixtures skip where longdouble==float64 - benchmark families B/D/G follow the new default Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README, CHANGELOG (Unreleased/Fixed) and CITATION note: a call without zero_tolerance returns ABSTAIN and never BENIGN; the spectral layer always passes its certified cutoff, so no reported number moves. Full-suite evidence run follows in chunks (~15 min). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…the #183 limit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…ling Clean merge; ruff, mypy (58 files) and the touched test files (gls/neff + issue117/issue168 conditioning) green locally. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Current-main consolidation of the audit-only zero-mode conditioning work from #166 plus the defective-cluster correction from #172.
This PR is intentionally rebuilt non-destructively from the current protected
mainafter #171 merged. It preserves the #152 finite-generator guard and avoids rebasing/force-updating the older stacked branches.Scientific contract
Simple zero mode
|y^H x|;Multi-mode zero cluster
xTRSEN;xTRSENfor reordering only;T11 R - R T22 = T12;1/sqrt(1 + ||R||_2^2);xTRSEN.Swith that exact quantity: it is a Frobenius-norm lower bound;CLUSTER_ONLYand withhold scalar first-order eigenvalue-displacement claims, because defective versus semisimple multiplicity is not safely identifiable from numerical proximity alone.Fail-closed rules
Regression discrimination
s≈2e-7scalar path;CLUSTER_ONLY;Provenance / current-main consolidation
Source work:
CHANGELOG.mdandCITATION.cffwere merged onto current-main content rather than copied wholesale from the stale stack; comparison against main shows additions only in both files.Schema / release impact
Methodology and audit-field semantics change, so README / CHANGELOG / CITATION are updated. The run-manifest contract is unchanged and
MANIFEST_SCHEMAis deliberately not bumped.Test plan
Supersedes #166 and #172 for integration once this current-main PR is green.
Refs #112, #117, #127, #130, #168. The default call is now basis invariant (ABSTAIN without a cutoff); the remaining finite-cutoff limit is tracked in #183, so #168 stays open until that is closed.