Skip to content

Commit 3abb353

Browse files
docs: record the four PR #127 review findings and the new residual_model vocabulary
CHANGELOG entries appended to the existing [Unreleased] Fixed section (which already carries both #127 and #129 items -- added, not reordered), including the explicit correction of my earlier report that the Prony seed change was not a regression: the reviewer's counter-example holds as a class. layers-and-taxonomy.md still documented residual_model as a two-value field. That line was found by turning the very defect class of finding 2 -- a label asserting what should have happened rather than what did -- against my own result, one layer up. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JsDFcKo97HuF5ZLjxa3rRa
1 parent 4d9a99f commit 3abb353

2 files changed

Lines changed: 71 additions & 1 deletion

File tree

‎CHANGELOG.md‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,70 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5050
not for want of findings. (`annotations` is set to `false` alongside it; the
5151
action refuses to start with both enabled.)
5252

53+
- **The zero-mode certificate accepted its premise on a coarser scale than its
54+
conclusion (PR #127 review).** `certified_eigvals` / `certified_eig` assert
55+
that `0` is an *exact* eigenvalue, which follows from exact trace
56+
preservation -- but applicability was granted whenever the trace defect
57+
stayed below `1e-10 * ||L||_F`, six orders of magnitude above the backward
58+
error the conclusion is stated on. A generator whose defect fell in that
59+
band (measured: an amplitude-damped qubit plus `1e-11 * I`, defect `1.4e-11`
60+
against the old cutoff `7.9e-11`) has its smallest eigenvalue at exactly
61+
`1e-11` against a certificate bound of `1.6e-13`: every repair route
62+
"failed", the spectral layer warned about an eigensolve that was in fact
63+
correct, and the classifier was floored to `UNDEFINED`. The cutoff is now
64+
derived rather than tuned -- with `u = vec(I)/sqrt(d)` and `r^H = u^H L` the
65+
matrix `L - u r^H` has an exact zero mode and lies at spectral distance
66+
`tp_defect / sqrt(d)` from `L`, so `tp_defect <= sqrt(d) * bound` is what the
67+
claim can carry. Headroom measured, not assumed: across 205 healthy GKSL
68+
generators (the five canonical systems, 160 random ones spanning 16 orders of
69+
rate magnitude at `d = 2..5`, 40 stiff four-level jump networks) the largest
70+
defect is `0.44 * eps * ||L||_F`. The rule now lives in one helper used by
71+
both entry points; it was duplicated, and one-sided repairs of that pair are
72+
a defect this repository has shipped twice.
73+
74+
- **D1 was reported from a spectrum the certificate had just declared unusable
75+
(PR #127 review).** When `applicable and not certified`, `compute_spectral_layer`
76+
warned that D1/D3/D4 are unreliable and then computed D1 anyway. That number
77+
did not stay in the report: `diagnose` forwards D1 to
78+
`default_relaxation_grid`, so an eigenvalue of a failed solve set the
79+
relaxation window and therefore every fitted rate, while only the closing
80+
verdict was floored. D1 is now NaN there, for the same reasons as in the
81+
ambiguous case -- not `0.0`, which means "gapless" and fires the F5 reach
82+
leg, and not the surviving mode, which is a fast one. The other five
83+
certificate consumers (`mpemba`, the Petermann factors, D11, and both
84+
`_zhou` paths) already withheld on `applicable and not resolved`; the
85+
spectral layer was the only site that warned and measured anyway.
86+
87+
- **`residual_model` reported the whitening that should have happened
88+
(PR #127 review).** The field was derived from the grid geometry alone, so a
89+
non-uniform grid always exported `"car1"`. `fit_gls_ar1` falls back to the
90+
discrete AR(1) treatment whenever `estimate_car1_theta` returns NaN --
91+
degenerate residuals, e.g. an exactly stationary trajectory with
92+
`rho_initial == rho_steady_state` -- and individual fits of one hierarchy can
93+
differ from one another, which a single geometry-derived label cannot express
94+
at all. It is now read off the fits, with `car1_fallback_ar1`, `car1_mixed`
95+
and `car1_unavailable` for the states that were previously reported as plain
96+
`"car1"`.
97+
98+
- **The grid-relative Prony fallback seed was a regression on the two-scale
99+
grid (PR #127 review).** `prony_seed` derived both `beta` and `omega` from
100+
the total time span on any non-uniform grid, i.e. from the slow gap scale --
101+
although `default_relaxation_grid` carries a uniform fine head for exactly
102+
the purpose of resolving the fast dynamics. Measured on
103+
`default_relaxation_grid(1e-4, fast_rate=1)` (80 points, uniform head of 41
104+
at `dt = 0.25`, span `1e5`): over 60 random exact curves with `beta` in
105+
`[0.05, 2]` and `omega` in `[0.1, 10]` the span seed drove the M3b fit onto a
106+
spurious solution twice (true `omega = 1.68` reported as `0.037`) where the
107+
historical absolute `(1, 1)` seed recovered all 60; on a slower family
108+
(`beta`, `omega` in `[1e-4, 1e-1]`) the span seed failed 41 of 60. The seed
109+
is now estimated by Prony on the longest uniform *prefix*, where the method
110+
is valid by construction: 0 of 60 in both families. The grid-relative
111+
fallback stands where no prefix is long enough for the Hankel system, so the
112+
short non-uniform grids keep their documented behaviour. This corrects an
113+
earlier report of mine on PR #127 which stated that both seeds were unusable
114+
on this grid and that the change was therefore not a regression; the external
115+
reviewer's counter-example holds as a class, and the claim was too broad.
116+
53117
### Added
54118
- **Tests for the hardening gate itself (PR #129).** It had none. Each unsafe
55119
workflow is asserted next to a positive control that must still pass --

‎docs/explanation/layers-and-taxonomy.md‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,13 @@ report.relaxation.t_grid_source
212212
# "caller" | "gap_scaled" | "gap_scaled_multiscale" | "legacy_fixed"
213213
report.relaxation.t_grid_span
214214
report.relaxation.t_grid # the sampling, not just its extent
215-
report.relaxation.residual_model # "ar1" (uniform) | "car1" (non-uniform)
215+
report.relaxation.residual_model
216+
# what the fits were ACTUALLY whitened with, not what the grid asked for:
217+
# "ar1" uniform grid, discrete AR(1)
218+
# "car1" non-uniform grid, every fit whitened continuous-time
219+
# "car1_fallback_ar1" CAR(1) theta failed on every fit -> AR(1) fallback
220+
# "car1_mixed" some fits CAR(1), some fallen back
221+
# "car1_unavailable" non-uniform grid and no fit succeeded
216222
```
217223

218224
### What one uniform window cannot do — and what replaced it

0 commit comments

Comments
 (0)