Commit Graph
4 Commits
Author SHA1 Message Date
daikaginza 936d75b69e feat(flights): publish verticalRateMps on the tracked-aircraft descriptor
`mapAnalystRecord` has always published `verticalRateMps`, but the tracked
seam — `getTrackedInfo()` / `getTrackedSubject()`, built by `_describeFlight`
— did not, so anything needing climb/descent had to reach past the public
descriptor into the raw poll record.

Both layers now map it, which matters because they store it under different
keys: the civil records write `verticalRate` (records.js), the military ones
write `verticalRateMps`. Mapping only one would leave
`resolveTrackedAircraftInfo()` handing back two different shapes, and a
consumer reading the field off a civil contact would silently read every
military contact as level flight.

Reported, never derived. `stickyNumber` seeds the field with null, so an
aircraft that has not transmitted a rate publishes null rather than a
level-flight 0 — absent is not level, and a flight-phase classifier that
cannot tell them apart calls a climbing aircraft cruise.

Tests: both layers, both halves (a reported rate arrives with its sign; an
absent one stays null). Mutation-verified — removing either field or
defaulting it to 0 turns them red.

`docs/CURRENT-STATE.md` records the descriptor field, the two record keys it
reconciles, and the reported-never-derived rule.
2026-09-27 23:40:01 +07:00
Sameh Khamis 4cb7334da5 refactor: separate civil-flight records and rendering 2026-09-14 15:55:37 -07:00
Sameh Khamis e18aeb8565 Format civil-flight components 2026-09-13 09:50:16 -07:00
Sameh Khamis 7c7e83c9e3 Extract instance-owned civil-flight components 2026-09-13 09:50:14 -07:00