feat: flag anomalous aircraft (emergency, off-route, circling) with optional alarm #14

Merged
brenno merged 1 commit from feat/interesting-aircraft into main 2026-06-19 20:32:08 +00:00
Owner

Summary

Flags "interesting" live aircraft and explains why, with an optional audible alarm.

Detection (pure, unit-tested)

  • Emergency — squawk 7500/7600/7700 or an emergency status.
  • Off-route — flying well outside the great-circle corridor between the resolved adsbdb origin and destination (the SP-RNQ over NL / IBE07KK case). Departure/arrival manoeuvring is ignored.
  • Circling — orbiting within a small area (possible hold or diversion), from a short rolling track history.

Marking (localised, 8 languages)

  • Map marker ring + icon turn red (high) / orange (medium), reason in the tooltip.
  • Aircraft list shows coloured anomaly chips; detail sheet gets an explanation banner.
  • The map tooltip now also shows the resolved departure → arrival airport (name + code) where adsbdb has it.

Alerting (opt-in)

  • A bundled generated alarm WAV played via audioplayers, only for emergencies and circling, throttled per aircraft by a tested alert controller.
  • Off by default; toggle in live-traffic settings.

Tests

16 new unit tests (detection, track history, alert controller). Full suite green (363), flutter analyze clean, macOS app builds and runs with the new native plugin.

🤖 Generated with Claude Code

## Summary Flags "interesting" live aircraft and explains why, with an optional audible alarm. ### Detection (pure, unit-tested) - **Emergency** — squawk 7500/7600/7700 or an emergency status. - **Off-route** — flying well outside the great-circle corridor between the resolved adsbdb origin and destination (the SP-RNQ over NL / IBE07KK case). Departure/arrival manoeuvring is ignored. - **Circling** — orbiting within a small area (possible hold or diversion), from a short rolling track history. ### Marking (localised, 8 languages) - Map marker ring + icon turn red (high) / orange (medium), reason in the tooltip. - Aircraft list shows coloured anomaly chips; detail sheet gets an explanation banner. - The map tooltip now also shows the resolved **departure → arrival** airport (name + code) where adsbdb has it. ### Alerting (opt-in) - A bundled generated alarm WAV played via `audioplayers`, **only** for emergencies and circling, throttled per aircraft by a tested alert controller. - Off by default; toggle in live-traffic settings. ### Tests 16 new unit tests (detection, track history, alert controller). Full suite green (363), `flutter analyze` clean, macOS app builds and runs with the new native plugin. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Hiero now highlights 'interesting' live traffic. A pure, tested detection
module flags three anomalies: an emergency squawk/status, flying well outside
the great-circle corridor between the resolved adsbdb origin and destination
(the SP-RNQ / IBE07KK case), and circling within a small area (possible hold or
diversion) detected from a short rolling track history.

Marking: the map marker ring and icon turn red (high) or orange (medium)
with the reason in the tooltip; the aircraft list shows coloured anomaly chips;
the detail sheet gets an explanation banner. All localised across the 8 UI
languages.

Alerting: an opt-in audible alarm (audioplayers + a bundled generated WAV)
sounds for emergencies and circling only, throttled per aircraft by a tested
alert controller; off by default, toggled in live-traffic settings.

Tooltip: the map marker now shows the resolved departure and arrival
airport (name + code) where adsbdb has them, falling back to bare ADS-B codes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 6d2c6d1588 into main 2026-06-19 20:32:08 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
brenno/Hiero!14
No description provided.