Found 2026-09-09 on rift_O4d 336f861 by the Table 3 (paper 1 tab:sampler_arms) campaign.
Symptom. Every driver run with --angle-marg-scheme multipeak dies in ~30 s at the flow sampler's jitted warmup: anglemarg.py:2517 in fused_log_likelihood_distphipsimarg_multipeak converts a traced array to numpy (jax.errors.TracerArrayConversionError, complex128[3,3,2,646]), reached via wrapper._fused -> samplers._warmup_compile. Traceback: /scratch/richard.oshaughnessy/table3_arms_20260909/out/flow_snr40_multipeak_seed9101/stderr.log (CIT).
Why the tests missed it. #313's driver-seam test checks option parsing and the library test pins one row through an eager call; nothing traces the fused kernel under jax.jit. The controller was validated with eager per-row calls (64 rows in 6.5 min sequential, ~5 s per row on one Blackwell), which is also its cost model: a sampler evaluating thousands of extrinsic samples per stage cannot use it as-is even if it traced.
What is needed. (1) A test that traces the fused kernel under jax.jit on carrier tables, so a scheme cannot be registered without it. (2) Either a traceable kernel (no host numpy, Python control flow and the Newton loops as lax primitives, batched over samples) with a measured per-sample cost, or a jax.pure_callback wrapper whose per-sample cost is measured and stated, so the scheme is honestly either an in-sampler likelihood or a per-row controller. (3) Until then, the paper's Table 3 differentiable-arm rows stay red (RO, 2026-09-09: "skip flow for now; add issue; leave red in table for today").
Related: the reserve rule in #313 duplicates #304's peaklocal_time_reserve; converge on one (the #304 kernel carries the focus certificate).
Found 2026-09-09 on rift_O4d 336f861 by the Table 3 (paper 1
tab:sampler_arms) campaign.Symptom. Every driver run with
--angle-marg-scheme multipeakdies in ~30 s at the flow sampler's jitted warmup:anglemarg.py:2517infused_log_likelihood_distphipsimarg_multipeakconverts a traced array to numpy (jax.errors.TracerArrayConversionError,complex128[3,3,2,646]), reached viawrapper._fused -> samplers._warmup_compile. Traceback:/scratch/richard.oshaughnessy/table3_arms_20260909/out/flow_snr40_multipeak_seed9101/stderr.log(CIT).Why the tests missed it. #313's driver-seam test checks option parsing and the library test pins one row through an eager call; nothing traces the fused kernel under
jax.jit. The controller was validated with eager per-row calls (64 rows in 6.5 min sequential, ~5 s per row on one Blackwell), which is also its cost model: a sampler evaluating thousands of extrinsic samples per stage cannot use it as-is even if it traced.What is needed. (1) A test that traces the fused kernel under
jax.jiton carrier tables, so a scheme cannot be registered without it. (2) Either a traceable kernel (no host numpy, Python control flow and the Newton loops aslaxprimitives, batched over samples) with a measured per-sample cost, or ajax.pure_callbackwrapper whose per-sample cost is measured and stated, so the scheme is honestly either an in-sampler likelihood or a per-row controller. (3) Until then, the paper's Table 3 differentiable-arm rows stay red (RO, 2026-09-09: "skip flow for now; add issue; leave red in table for today").Related: the reserve rule in #313 duplicates #304's
peaklocal_time_reserve; converge on one (the #304 kernel carries the focus certificate).