summaryrefslogtreecommitdiff
path: root/docs/campaign/FINDINGS.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/campaign/FINDINGS.md')
-rw-r--r--docs/campaign/FINDINGS.md27
1 files changed, 27 insertions, 0 deletions
diff --git a/docs/campaign/FINDINGS.md b/docs/campaign/FINDINGS.md
index cfd6fdf..e3fdcc8 100644
--- a/docs/campaign/FINDINGS.md
+++ b/docs/campaign/FINDINGS.md
@@ -644,3 +644,30 @@ Full write-up: **`SESSION_2026-06-24_HOPF_DIAGNOSIS_RESREG_FIX.md`**. This pins
2. **The "one reg" candidate: de-cliff resreg → a graded finite-horizon LE penalty (aep 'floss' ported, "floss-ept")** — penalize the measured per-step contraction rate over the last q relax steps (differentiable through q≈8–16 steps on a sub-batch), giving a linear early signal of the same fundamental quantity. resreg = its cliff-shaped special case; spec_penalty = its rank-1 approximation.
3. **spec_penalty stays as the surgical scalpel** for a detached Hopf pair (measure-mode application), **jacreg retires** from stability duty.
4. Three-arm from-scratch ablation when GPU frees: floss-ept-only vs resreg-only (never cleanly run — ROUND2 only had specnorm+jacreg0 / queued no-penalty) vs proven pair (resreg 0.2 + frozen jr 0.1) — logs res + measure-mode ρ + val.
+
+---
+
+## 2026-07-05 — the magic-s2000 MECHANISM: a narrow post-excursion stability dip in a run that oscillated ACROSS the edge (ARPACK audit of redx_traj)
+
+**Trigger.** User hypothesis: "the recipe that made s2000 blew up later; maybe some reg is superfluous early." Archaeology: redx recipe = frozen jr 0.1, **NO resreg** (predates it), blew step 3300 (2.74→41); `redx_traj/` holds every-100 ckpts s600–s3600.
+
+**Gold table (ARPACK on M=I+εJ_F at 400-step deep states, same batch; `eig_traj2/3.py`):**
+
+| ckpt | leading μ | state |
+|---|---|---|
+| s1000 | +0.19±1.55j | OUT (rotating) |
+| s1400 | **+2.07** | OUT — violent excursion (log res 5.2e-2), **self-recovered by s1500** (res 2e-3, better than before) |
+| **s2000** | **−0.020** | **★ the ONLY stable snapshot — the dip** |
+| s2100 | +0.015 | out (dip exited) |
+| s2200 | +0.034 | out (val 3.015 better than s2000's 3.16 — but unstable, useless as seed) |
+| s2300 | +0.053±1.07j | out, rotation building |
+| s2400/s2800 | +0.056 / +0.161 | out |
+| s3200 | +0.127±2.07j | full rotating instability → dead 3300 |
+
+(s3400/s3600 traj files are byte-duplicates of s3200 — post-blow saver artifact.)
+
+**The corrected story.** The reg-light run did NOT ride smoothly to the edge: it **crossed by s1000 and oscillated across the boundary**, with at least one violent excursion-and-recovery, **while val kept falling through the unstable stretches** — mild instability does not stop EP learning; only large-amplitude cycling (3300) kills it. s2000 is the snapshot of a **narrow (<100-step-wide exit side) stability dip right after the recovery**: edge-forged structure captured inside a momentarily stable envelope. That combination — not "deep contraction" (retracted 07-03), not gradual approach — is the magic. Warm-start + leash then rides the edge (1.93 era; warm_fast best 1.8977).
+
+**Protocol (golden seeds are manufacturable).** Reg-light run → save every ≤100 steps → ARPACK dip-screen → warm-start from a certified dip (|λ|<1 at depth). `abl_delay` (queue arm0, --reg_delay 2000) is the fixed-switch approximation; if its switch lands mid-instability the refinement is **engage-on-dip** (res_ema<~2e-3 after step≥1200), not a longer delay. Corollary for the plateau: resreg-from-step-0 may prevent the edge-forged structures from ever forming (safe scratch 2.06–2.24 vs warm-from-dip 1.90).
+
+**Tooling verdicts.** `lead_rho` cold (≤40 iters) under-reads near-unity clusters by 0.02–0.06 and mis-classified s1000/s2400/s2800 as stable — **audits must use ARPACK**; lead_rho is for warm-started in-training tracking only. Hidden `jacreg==0` damping feedback found in the train loop (res-driven c up/down) — would have polluted single-reg ablation arms; new `--noadaptc` kills it (arms updated).