@@ -24,6 +24,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
2424 and frame-by-frame coordinate agreement for v2.21.1, released v3.4.0, and
2525 v3.5.0 in addition to throughput.
2626
27+ ### Changed
28+
29+ - ` crc_valid ` is now ` None ` when an address-parity message cannot be checked
30+ independently. It remains ` True ` or ` False ` for frames whose parity can be
31+ validated without assuming the address derived from that same parity.
32+ - ` PipeDecoder ` uses each message's source timestamp for state validity while
33+ retaining a monotonic high-water mark for eviction. Reordered capture data
34+ therefore cannot revive expired observations or prematurely evict newer
35+ state.
36+ - Plausibility and position validation are isolated in a dedicated internal
37+ module, keeping the streaming pipeline and its decision comments easier to
38+ follow without changing the public API.
39+ - Release publishing now runs only after the full test matrix succeeds, checks
40+ that the Git tag matches the package version, and smoke-tests the exact wheel
41+ artifact that will be uploaded.
42+
2743### Fixed
2844
2945- Surface references remain optional and are used only for BDS 0,6 surface
@@ -33,6 +49,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
3349 separate last-accepted airborne reference is maintained and TTL-evicted.
3450- Bootstrap promotion, including ` flush() ` , initializes the latest accepted
3551 airborne reference while keeping surface-derived positions separate.
52+ - Globally decoded surface CPR positions now select the correct longitude zone
53+ across the antimeridian and other CPR zone boundaries.
54+ - Beast stream input resynchronizes after malformed or truncated frames instead
55+ of losing subsequent valid messages.
56+ - Beast receiver timestamps are back-projected from the current wall clock with
57+ rollover-safe receiver-tick deltas, avoiding dates near the Unix epoch and
58+ preserving correct timing across the 12 MHz counter rollover.
59+ - BDS inference compares headings using circular angular distance, so values
60+ around 0/360 degrees are scored correctly.
61+ - Trusted ICAO observations expire according to the configured state TTL and
62+ cannot be refreshed by older, reordered messages.
63+ - Integer messages outside the valid 56-bit and 112-bit Mode S frame ranges are
64+ rejected instead of being silently truncated or misclassified.
65+ - Network endpoint and surface-reference CLI arguments are validated before a
66+ stream starts, and network sources are closed deterministically on normal
67+ exit, errors, and interruption.
68+ - The live terminal UI synchronizes access to shared aircraft state, preventing
69+ concurrent decoder and renderer updates from racing.
3670
3771## [ 3.4.0] — 2026-07-13
3872
0 commit comments