What's New
TLR Time Sync — clock synchronisation client
- New standalone tool (
tlr-time-sync) for keeping SDR-Trunk machine clocks aligned with the TLR server, improving duplicate call detection accuracy - NTP-style round-trip compensation: offset = serverTime − (t1+t3)/2
- Takes multiple samples per sync cycle (default 4) and uses the lowest-RTT sample for the most accurate measurement
- Dead-zone filter: offsets within half the RTT are treated as measurement noise and skipped
- Exponential back-off after repeated failures (5 s → 10 s → 20 s … capped at 10 minutes)
- Installs as a native system service: Windows Service (LocalSystem), Linux systemd, macOS LaunchDaemon — auto-starts at boot with no recurring privilege prompts
- Lives in its own repository
Server — Performance
Systems.Readnow loads all sites, talkgroups, and units in 4 total queries regardless of system count (down from 3N+1 sequential queries)fetchRadioReferenceAPIKeymoved to background goroutine — no longer blocks startup (up to 10 s saved on cold start)- Keyword regex patterns compiled once and cached for the lifetime of the process
cleanupOldAlertsrate-limited to at most once per hour via atomic timestamp- Group admin subscription lookup now O(1) via indexed map
- Invalid FCM token cleanup now O(1) via token index
- Keyword match DB writes batched into a single multi-row INSERT per transcription
- Client backlog send fetches up to 1000 calls in 3 bulk queries instead of N round-trips
Server — Push Notifications
- OneSignal removed; FCM only
- Legacy token detection and automatic cleanup with user email notification
Server — GET /api/time endpoint
- New lightweight endpoint returning server UTC time as a nanosecond Unix timestamp
- No auth, no DB — intentionally minimal for accuracy under load; used by tlr-time-sync
See CHANGELOG.md for full details.