GPT-5.6.2 — fixing the four failures of the 2026-07-10 live test
The 20260710_1845 run (5 k specimen, phase lead pl_5k_48, target 0.35, diagnostic
gain 1 → 1.5 → 2 → 3 applied on the actuator-command path) exposed four problems in the GPT-5.6 OSI:
a missed gain edge at 37.7 s, violent oscillations at the 44.9 s catch, sustained authority
hunting afterwards, and — after the excitation ended — authority returning to 1.0 against a still-present
3× gain, driving the actuator unstable. The redesigned estimator in
research/gpt5_6_2/fable fixes all four while keeping the canonical suite green.
All record-based validation reads osi_calibration_test.mat, the corrected export of this run
(identical in every signal except dc, which is logged before the diagnostic gain there;
the OSI consumes u_osi/dm, bit-identical in both files).
1 · What actually happened — and why the old OSI was blind
Every claim below was measured on the record. The linear loop model
(g·a·C·H5k) goes unstable at g·a ≥ 2.25; the end of the test sat at
g·a = 3 for 13 s. The predicted unstable mode (40.9 Hz) matches the measured 40.7 Hz
oscillation before the actuator ran away. (The corrected record settles the injection point: the properly
logged dc is gain-independent, so the plant receives g·dc — the gain acts between the logged
command and the actuator, exactly as modelled here.)
1 — 37.7 s edge missed. The quiet band (28–44 Hz) of dm sits on the
sensor-noise floor during the weak quake tail, so the shape fit sees nothing; the coherent tap FRF is biased
by the FEM force-echo wrap (it reads a loop-gain of ~3 even when healthy), so no absolute model fit can be
trusted. The only real signal is the relative FRF change at the driven 5–10 Hz bins
(T̂ moved 0.16 → 0.39 across the edge, γ² ≈ 0.7) — the old estimator had no change detector.
2 — oscillations at the 44.9 s catch. Detection only fired once the loop
physically rang (g·a = 2.68, linearly unstable). The shed started from a = 0.89 — deep inside the danger
zone — so the ring had already grown large.
3 — hunting. After each shed the damage evidence vanished, the reading snapped back
to the healthy prior, and the law sprinted up at ~65%/s straight back into instability (a > 0.85 at g = 3
is genuinely unstable). A relaxation oscillator: a swung 0.33 ↔ 0.97 for 16 seconds.
4 — end instability. Excitation ends → command-tap activity → 0 → the reading blends
to the ceiling → authority snaps to 1.0 while g = 3. The estimator had no memory of the damage it had
just spent 18 seconds measuring.
The live record, replayed sample-exact through both estimators (logged authority)
diag gain g (right scale ÷4)old b (logged)new bnew rho (÷4)▲ FRF-change trip
authority a (as logged, old law)
Drag to pan · wheel to zoom · double-click to reset. Shaded bands mark the four issues.
The 2 → 3 edge shows “—” for the new estimator because its reading was already at
b ≈ 0.11 before that edge (pre-detected from 37.7 s): a drop-by-0.04 criterion cannot fire from an
already-correct baseline.
2 · Closed-loop emulation — the same test with each law in charge
Model-consistent re-run of the whole scenario (identified 5 k plant + PID, the record’s gain schedule
and tap as exogenous reference, measured sensor-noise level, actuator saturation at ±10 mm), with the
OSI + authority law closing the loop. Press play.
·
old lawnew lawdiag gain ÷4instability boundary a = 2.25/g
Authority a(t)
True margin btrue(g·a) — the ground truth the laws cannot see
Actuator command level |dc| rms — the old run saturates and diverges
3 · What changed (and why each piece is minimal)
4 · The ten canonical FABLE tests — 10/10, fabby 94.0
fabby score per case — new vs old
b_trueb* (ideal)b estimate (new)
a newa old gpt5_6a fable
5 · GDBqFpKb replay — honest scorecard
diag gain ÷4b (new)b fable (live log)
a (new law)a fable (live — never recovered)rho ÷4
6 · Standard benchmark head-to-head: gpt5_6_2 vs gpt5_6_4 vs sol_osi
All methods run unmodified through research/osi_benchmark/run_osi_benchmark
(closed loop, method defaults, osi_calibration_test.mat; scores renamed 2026-07-12:
fabby_score_1 = suite estimation, fabby_score_2 = closed-loop regulation).
The updated gpt5_6_4 adopted the rho memory-hold, idle limb, and ratio detector.
sol_osi rev 2 (research/gpt5_6_4/sol_osi) adds a fixed healthy spectral
reference captured in the first 1.5 s, a 32× idle-memory gain with a release
hysteresis (release below 0.6× the reference, re-engage above 1.4×), and a level-driven
fit floor. It is the new composite leader (74.1): the only candidate that passes all
gates with the fast 10 s leak, the only one to detect all five gain rises, and — fixed
in rev 2 — it now recovers after the GDB restore, though slowly (13.5 s vs the 3 s
requirement; shaded region below marks that lag, still its weakest score).
Scorecard (facts in parentheses)
Closed-loop live scenario — each method in charge
gpt5_6_2gpt5_6_4 (updated)sol_osidiag gain ÷4instability boundary a = g_crit/g
Authority a(t)
True margin btrue(g·a)
Actuator command |dc| rms
Drag to pan · wheel to zoom · double-click to reset. All three loops stay out
of the unstable region; the differences are HOW: gpt5_6_4 and sol_osi shed deeper and earlier,
gpt5_6_2 holds the target tightest and moves least; sol_osi is the calmest of the 5_6_4 family
and the only one to catch the 37.70 s edge.
GDBqFpKb — authority trajectories · shaded = sol_osi's recovery lag
gpt5_6_2gpt5_6_4 (updated)sol_osidiag gain ÷4recovery threshold a = 0.95