Skip to content

Commit 9ebcc4e

Browse files
orebasclaude
andcommitted
Add cluster handoff doc for :generic_start validation
Consolidated handoff: what to pull (5a19c4a), background (receptor e2e failure + anchor flaw + crauste), the 3-way receptor A/B + crauste tests in priority order, caveats, and what the results decide. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 5a19c4a commit 9ebcc4e

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Handoff: `:generic_start` (ab-initio) homotopy seeding — cluster validation
2+
3+
Date: 2026-05-29
4+
Commit: **`5a19c4a`** on `origin/main`
5+
From: local-claude (Opus 4.7) → cluster-claude
6+
7+
## TL;DR — what to do
8+
9+
Pull `origin/main` @ `5a19c4a`. There's a new **opt-in** `EstimationOptions.homotopy_tracking_mode = :generic_start` (**default unchanged** = `:gamma_straight`, so nothing moves unless you set the flag). Run the 3-way receptor e2e A/B + crauste-with-debug, and report whether `:generic_start` fixes the receptor e2e failure and/or helps crauste.
10+
11+
## Background — why this exists
12+
13+
- **`:gamma_straight` was shipped as the default (`2604a7f`).** The faithful receptor end-to-end test (real pipeline, `analysis.besterror`) then **failed**: `besterror = 13.85` (baseline ~0.4%), 2 returned branches **200–1000% off** truth/swap, from `src=branch_completion`, satisfying the *trimmed algebraic system* to ~1e-6 but with a *trajectory* error of 13.85 → **spurious roots** (receptor's trim admits ~16). It converged *confidently to the wrong roots*.
14+
- **Cause is NOT yet isolated.** This session shipped **two** new defaults — `:gamma_straight` *and* `branch_completion` — and the e2e used an **aaad-only** interpolator config. Any of the three could be the culprit. The `:parameter` arm of the e2e was still running at handoff time.
15+
- **The anchor flaw (Oren spotted it):** the multishot anchors `initial_solution_count` to point 1's *real-data* fresh solve and uses it as both the γ early-stop target and the fresh-fallback threshold. A deficient point-1 solve silently caps the whole run and suppresses the fallback.
16+
- **crauste (your finding):** its fresh polyhedral solve is unreliable at the real targets — 0–6 solutions on noise-free data, 17 outright zeros — which is *upstream* of any tracking strategy.
17+
18+
## What `:generic_start` does
19+
20+
In `solve_with_hc_parameterized` (homotopy_continuation.jl): solve **once** at a generic **complex** parameter point `p0 = randn(rng, ComplexF64, n)` — off the discriminant w.p. 1 ⇒ the full generic root count `N`, well-conditioned — then **fan out**, tracking `p0 → p_i` (γ-straight) to *every* real shooting point (no chaining). Sets `initial_solution_count = N` (the true generic count, fixing the anchor flaw). Degrades to the per-point fresh + γ-straight chain if the generic solve itself returns empty/throws. (Textbook ab-initio / coefficient-parameter homotopy; monodromy is the v2 robustification, not yet wired in.)
21+
22+
## Tests (priority order)
23+
24+
1. **Receptor e2e 3-way (highest priority).** Run `repro/gamma_straight_impl_2026_05_28/receptor_e2e_ab.jl` as-is — it loops `(:generic_start, :parameter, :gamma_straight)` and reports pipeline `besterror` + truth/swap recovery per mode.
25+
- **Key Q1:** does `:generic_start` recover receptor (`besterror ~0.4%`, truth+swap) where `:gamma_straight` failed (`13.85`)?
26+
- **Key Q2 (isolation):** does `:parameter` recover it? `:parameter` recovers ⇒ γ-bug; `:parameter` also fails ⇒ branch_completion or the aaad-only config is the culprit, not γ.
27+
28+
2. **crauste with `:generic_start` + `debug=true`.** Watch the `[HC-PARAM] Generic-start:` line.
29+
- Generic-`p0` solve finds **N>0** ⇒ generic-start *sidesteps* crauste's deficient real-target solves (the win).
30+
- Generic solve **also returns 0** ⇒ crauste is nasty-everywhere (coordinate-conditioning); generic-start degrades safely to per-point fresh+γ (no worse than now), and the fix is the scaling lever, not this.
31+
32+
3. **cstr / hiv / bioh.** Recovery + the `[HC-PARAM]` fan-out/fresh counts under `:generic_start` vs `:parameter` — confirm no regression on the systems that already work.
33+
34+
## Caveats to watch
35+
36+
- **Structurally-fixed params:** if a system's data-var "parameters" include fixed values (`_trfn_`, hard pins), randomizing `p0` could change the system. Flag if the generic count looks wrong or a *known-good* system stops recovering under `:generic_start`.
37+
- **Failure-mode scope:** generic-start fixes the **divergence/anchor** mode, NOT **coordinate-conditioning** (that's column scaling). Your decider (`75244`) routes it: `at_infinity` verdict ⇒ expect generic-start to help; coordinate-explosion verdict ⇒ expect it not to.
38+
39+
## What the results decide
40+
41+
- `:generic_start` recovers receptor **and** `:parameter` also recovers ⇒ γ-straight was the culprit ⇒ consider making `:generic_start` (or `:parameter`) the default, pending broad validation.
42+
- `:parameter` **also** fails the receptor e2e ⇒ branch_completion or the aaad-only config is the culprit ⇒ investigate those, not γ.
43+
- crauste: generic `N>0` + recovery ⇒ generic-start cracks it; else it's upstream/coordinate (scaling lever).

0 commit comments

Comments
 (0)