Nexus 0.24.0
Nexus 0.24.0
Changes since v0.21.5:
- chore: release-prep 0.24.0 — version surfaces + changelog editorial pass
- fix(cat): Test CAT diagnoses the rig instead of shrugging - baud ladder, backend attribution, CI-V port identity
- chore: 0.23.0 — satellite operating joins the tester build
- test(ui): the recall-card mock needs resolveEntity after the merge
- chore: 0.22.2 tester build - full recall card + SSTV pane pass
- feat(log): the full caller card returns on resolution; SSTV joins the pane grid
- chore: src-tauri lockfile follows the merged 0.22.1 version
- fix(sat): keep the full TLE epoch — it was truncated to whole seconds
- docs: ui-layout skill - the build-time procedure for the layout contract
- chore: 0.22.1 tester rebuild - pane roles + log-form wrap
- docs: the UI layout contract joins the contributor guide
- fix(layout): panes have roles - control strips stop hoarding columns, the log form wraps
- docs(sat): record why the real-signal fixture stays at eight passes
- chore: 0.22.0 tester build - changelog for the layout overhaul
- feat(layout): Phone, CW and RTTY adopt the pane grid; width finally rescues height
- feat(layout): pane-grid cockpit primitives - one frame, one region, one dock
- fix(ui): portaled dialogs and tooltips finally honor the UI scale
- fix(layout): one responsive vocabulary - data-viewport everywhere, @media retired
- fix(windows): band-map geometry is validated against real monitors on open
- fix(ui): one pinned-scroll discipline; focus moves never pan hidden boxes
- fix(layout): persisted geometry is clamped on load, not just at drag time
- fix(layout): restore the cockpit deficit valve and retire the floors that clipped the log form
- fix(sat): actually wire the track loop to the shared driver
- test(sat): validate Doppler against carriers actually recorded off the air
- test(sat): fly a whole pass onto a real rotctld, and make the loop testable
- test(sat): validate the geometry against an independent implementation
- docs: changelog for operator-follow and the passband strip
- feat(sat): the transponder passband strip — inversion you can see
- fix(sat): wire operator-follow, and stop the pointing error counting the trim
- feat(sat): report passband offset and width, so nothing has to reconstruct them
- feat(sat): hero sky dome, globe pass mode, and a track badge that cannot lie
- feat(sat): one honest status surface — true position, commanded position, range, Doppler
- feat(sat): Phase 1 UI — transponder picker, Doppler and rotator settings
- docs: CHANGELOG for satellite operating (Phase 1)
- feat(sat): Phase 1 complete — Doppler runs the pass, and the rotator gets manners
- feat(sat): the engine-side Doppler tick, and the module lands where the architecture says
- feat(sat): the radio-binding decision layer — VFO mapping and rate limits
- feat(sat): FT-mode and satellite are opposite TX intents — model them as such
- feat(sat): the Doppler core — range-rate geometry, transponder data, and the tuning engine
- chore: version 0.21.7 for the AI-CW-fix rebuild
- fix: the AI CW engine is a PAIR of files — ship both, guard the build, and stop a QSY erasing the fault
- chore: version 0.21.6 for the audit-batches test build
- fix: a same-band FM/SSB hop clears stale activity but must NOT abort an over in flight
- fix: adversarial-review round — the MSRV the security bump forced, two broken gates, and a biased eviction
- fix: the cssVar memo empties at the START of the draw — the first frame after a theme switch painted old colors
- style: plain comments on the thread_local sweep counter (doc comments can't attach through the macro)
- docs: CHANGELOG for the recurrences batch (audit Batch 3)
- fix: the pop-out maps agree with the docked one, the globe breathes, and four trivial recurrences
- deps: the divergence gate's first catch — the shipped AI-CW decoder was on a vulnerable tract
- ci: the gates that were switched off — live-feature tests, the src-tauri supply chain, and the stylesheet half of the demo gate
- test: the sweep counter is per-thread — parallel tests inflated a process-global count
- fix: the cheap recurrences — DNS off the mutex, the regrown snapshot sweep, and coin-flip answers made deterministic
- fix: adversarial-review round — the resurrection bug, the failed-read stamp, and the legacy-midnight migration
- ui: the edit payload stops pretending to clear upload stamps — the backend ruling owns that now
- fix: the recovery gate's mtime comes from the save itself — never from a post-rename stat
- test: station_identity integration literal gains the new QsoRecord fields
- docs: CHANGELOG for the log-integrity batch (audit Batch 2)
- perf+docs: the upload-stamp path stops re-parsing the whole log, and the manual tells the truth about ADIF
- fix: loading a config profile can no longer remove your power ceiling — profile load is a merge
- fix: one entity identity — the NEW ONE badge and the DXCC counts stop disagreeing with the awards engine
- fix: the log stops lying about time, loses nothing on import, and corrections reach the services
- fix: a band-plan channel token can no longer become the stored band identity
- fix: ADIF parser mirrors the writer's mode-identity cascade — Tempo QSOs survive a restart
- fix: adversarial-review round — the CAT-broker backend joins the poison sweep, broker re-key is idempotent again
- docs: CHANGELOG for the TX-safety batch (audit Batch 1)
- fix: tune auto-release regains a hard ceiling — the setting is clamped at the point of use
- fix: one tx_owner() arbiter — an APRS beacon or auto-ack can no longer key over a live mic or broker over
- fix: poison recovery for the engine and source locks — the deaf-radio doctrine, applied to its own outliers
- fix: commit_tx validates the whole plan, not just the tier — and the promised slot refusal now exists
- fix: keying-identity gate asks the mode plugin, not an Ft8|Ft4 allow-list
- fix: TIME_OFF/QSO_DATE_OFF parse panicked on multibyte input reachable from a WSJT-X datagram
- fix: APRS position parser panicked on 8-bit bytes inside the fixed 19-byte layout
- docs: the on-air claim, file by file, and rename the protocol spec
- README: use the Nexus splash art as the banner
- Wiki: the on-air claim, all of it this time, plus the template that regenerates it
- Wiki: refresh to truth, spine on the two positioning pages, and CITATION.cff
- CHANGELOG: the launch-window work is Unreleased, not shipped in 0.21.5
- SUPPORT and CONTRIBUTING: finish routing bug reports to GitHub
- Issue templates become forms, with the fields that decide investigations
- Record the full-corpus tag census in the needs fixture
- Fix false "new mode" needs: honest claim + surface-scoped chips
- needByCall carries each call's STRONGEST need, not whichever alert came last
- Roster "sort by need" ranks by chase importance, not by an arbitrary tag
- README: bug reports go to GitHub Issues
- Call Roster and Band Activity filters persist across a restart
- README: voice pass on the two dash-asides that were mine