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 b new 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 law new law diag gain ÷4 instability 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_true b* (ideal) b estimate (new)
a new a old gpt5_6 a fable

5 · GDBqFpKb replay — honest scorecard

diag gain ÷4 b (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_2 gpt5_6_4 (updated) sol_osi diag gain ÷4 instability 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_2 gpt5_6_4 (updated) sol_osi diag gain ÷4 recovery threshold a = 0.95

7 · Limitations & deployment notes