Skip to content

τ out-of-window arrival is refused as low SNR, not as window edge, since #368's gate ordering #494

Description

@mkovero

Found while designing #350. Synthetic only, not rig-confirmed.

What happens. In analyse_tau_leg (ac-daemon/src/handlers/calibrate/tau/measure.rs), #368 put the SNR gate in front of the edge-margin check. Take a τ arrival that lands more than about 50 samples past the far edge of the window (96 kHz, calibrate's own ESS, 50 ms half-window). Its in-window skirt reads a pre-impulse SNR of 17–23.6 dB, so LowSnrRefusal fires first. The operator then reads "the deconvolution did not find a peak distinguishable from noise". The actual situation is a clean cable whose arrival lies outside the window. EdgeRefusal exists to say exactly that, but it is never reached.

Evidence (synthetic). Calibrate's stimulus (tau_sweep_params(96000)) was delayed by d samples, amplitude 0.03, with white noise from none up to −20 dBFS, run through the same inverse_sweepdeconvolve_fullextract_irs(…, 1, 9600)ir_peakpre_impulse_snr_db chain:

  • d = 4799–4850 (arrival 0–50 samples past the edge): the peak pins at the last sample with SNR 24.6–28.5 dB, so EdgeRefusal fires.
  • d ≥ 4860: SNR is 23.6 dB or lower, so LowSnrRefusal fires.
  • d = 4880–4890: the peak lands 148–218 samples inside the edge with SNR 20–22.8 dB. LowSnrRefusal fires. The margin would have caught these too.

The 2026-08-22 rig pass 3 (work/rig/rig-2026-08-22-tau-window-350-results.md) saw EdgeRefusal on hardware, but it ran before #368 existed. Nobody has run an out-of-window arrival on hardware since the gate was added.

Why it matters. Per "name what to check, not why": the refusal text asserts a cause, noise, when the likelier cause is the window. No wrong number is returned, because both paths refuse. The fault is the reason the operator reads.

Out of scope for #350. #350's acceptance criteria say that no refusal text or ordering changes. Any fix here changes what the operator sees, so it needs UX.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:triageTriage agent acted on itbugSomething isn't workingready-to-implementSpec complete, developer can pick uptier-1ac-core/measurement/ — QA runs the standards check

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions