Version 26.05.004
Fixed
-
Server — Tone detection, stacked pending tones, and orphan alerts (
callId = 0)- First known report: First production incident of this failure mode we are aware of (investigated May 15, 2026 on system ref 78, talkgroup ref 46036 / 78 FD DISP). It is now fixed.
- Root cause: Tone detection ran asynchronously on a copy of the call before
WriteCallassigned a databasecallId. All downstream steps usedcallId = 0, so tone results never persisted on the real call rows and the 60-second orphan safety net could not load the call to create alerts.
-
Example failure (May 15, 2026 — stacked tone page, no voice on dispatch)
Multiple short clips on one channel within ~20 seconds; detection and pre-alerts worked, but no rows were written to the
alertstable andhasTonesstayedfalseon every call:Call time (ET) callId Detected / matched Pre-alerts DB alertsrow05:03:29 39395685 Champion Duty (376 + 1055 Hz) 13 users None 05:03:34 39395698 Weathersfield 42 18 users None 05:03:40 39395709 Howland Duty 16 users None 05:03:45 39395718 Newton Falls Duty 13 users None -
Fixes in this release
- Run tone detection after
WriteCallso logs,updateCallToneSequence,storePendingTones, and orphan timers use the realcallId. - Orphan handler loads the call via
pending.CallIdwhen the timer argument is stale, writes the mergedtoneSequenceto the database, then triggers alerts. - Stacked pending: Each merge into the active pending stack moves the anchor to the latest clip and resets the 60-second orphan timer; older timer goroutines exit when the anchor advances.
- Expired-pending replace path schedules an orphan check.
- Clearer logging for tone-only clips with matched tone sets (pending until voice or orphan).
- Run tone detection after
See CHANGELOG.md for full details.