Skip to content

release: rigplane-core 2.10.8 — freq/mode display tracks radio during external CAT (#1219)#1894

Merged
morozsm merged 2 commits into
mainfrom
codex/freq-overlay-external-cat-reconcile
Jun 20, 2026
Merged

release: rigplane-core 2.10.8 — freq/mode display tracks radio during external CAT (#1219)#1894
morozsm merged 2 commits into
mainfrom
codex/freq-overlay-external-cat-reconcile

Conversation

@morozsm

@morozsm morozsm commented Jun 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

Bumps rigplane to 2.10.8. This is a single-fix patch release on top of 2.10.7.

What changed

Fix — operating-UI frequency/mode display stuck during an external CAT session (#1219)

During a WSJT-X / external-CAT session the display could remain pinned to the last value tuned via the Pro UI while the radio was actually on a different frequency. Root cause: the optimistic command overlay was never displaced because the readback poller is paused for the duration of the external-CAT session.

The optimistic overlay is now suppressed during an external-CAT session, so the display tracks the radio's real frequency/mode from CI-V readback. Normal Pro-dial responsiveness is unchanged when no external-CAT session is active.

Changelog entry (docs/CHANGELOG.md)

## [2.10.8] — 2026-06-20

### Fixed

- **Operating-UI frequency/mode display stuck during an external CAT session.**
  During a WSJT-X / external-CAT session the display could remain pinned to the
  last value tuned via the Pro UI while the radio was actually on a different
  frequency, because the optimistic command overlay was never displaced (the
  readback poller is paused for the session). The optimistic overlay is now
  suppressed during an external-CAT session, so the display tracks the radio's
  real frequency/mode from CI-V readback. Normal Pro-dial responsiveness is
  unchanged when no external-CAT session is active. (#1219)

Boundary

open-core — frequency display reconciliation during external-CAT is a generic radio-control library concern; no proprietary Pro logic.

Verification

  • uv run ruff check .clean
  • uv run ruff format --check . — 4 pre-existing files flagged (not in this diff; present on base commit)
  • Fix-specific tests from commit cad0dab3 pass with the fix in place
  • git diff --stat: docs/CHANGELOG.md +6 -0, pyproject.toml 2.10.7→2.10.8, uv.lock 2.10.7→2.10.8

Publishing

This PR, once merged and tagged v2.10.8, will publish rigplane==2.10.8 to PyPI via the standard release workflow.

References

morozsm and others added 2 commits June 20, 2026 10:43
…rnal-CAT so the UI tracks WSJT-X/panel tunes

During an external-CAT session (WSJT-X via the Hamlib/rigctld bridge) the
external master owns the wire: RigPlane's radio poller pauses
(radio_poller._run gate) and rigctld get_freq serves the cached state-store
projection without eliciting a fresh radio readback. The web set_freq
optimistic command-response overlay, written through
_SharedControlCommandExecutor._optimistic_observations into the shared
StateStore at active.0.freq_mode.freq_hz, could therefore never be reconciled
by a poller readback. It pinned a fabricated frequency the radio was not on,
and the operating-UI freq display stuck at the command echo for the whole
session (observed: 14.260 MHz displayed for 14 min while the radio was on
14.074 MHz).

Suppress the optimistic overlay when external_cat_session_active is True so the
projection keeps tracking the radio's real last-known/live value: bridge CI-V
readbacks still land via _civ_rx (no external-CAT gate on the apply path), and
post-session reconcile_state refreshes the store. Normal (non-external-CAT)
responsiveness is unchanged — the poller readback continues to displace the
overlay via last-writer-wins.

Boundary: open-core (generic state-pipeline / rigctld behavior).

Tests:
- test_set_freq_optimistic_overlay_suppressed_during_external_cat (RED pre-fix:
  store/display pinned to 14.260; GREEN post-fix: tracks real 14.074).
- test_set_freq_optimistic_overlay_kept_without_external_cat (guard: normal
  optimistic responsiveness preserved).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@morozsm

morozsm commented Jun 20, 2026

Copy link
Copy Markdown
Collaborator Author

Agent Review: PASS

Reviewed at head cd1409af (branch codex/freq-overlay-external-cat-reconcile).

Confirmation checks:

(a) Fix code byte-identical to independently reviewed cad0dab3.
git diff cad0dab3 cd1409af -- src/ tests/ is empty. The freq-overlay-during-external-CAT fix (_optimistic_observations guard + two regression tests) is unchanged from the prior independent PASS review.

(b) Release commit adds only metadata — no code/test churn.
cd1409af (release: rigplane-core 2.10.8) touches only:

(c) 2.10.8 is fresh.

  • git tag --list 'v2.10.8' → empty (tag not yet created)
  • PyPI rigplane releases: 2.10.8 absent, 2.10.7 present — no duplicate publish risk

(d) All required CI gates green at cd1409af:

  • quick — pass (1m35s)
  • grep-gate — pass
  • state-types-gate — pass
  • consumer-contracts-gate — pass

Ready to merge once Agent Review Gate flips to pass on this comment.

@morozsm morozsm merged commit 814cb61 into main Jun 20, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore(frontend): update ESLint no-restricted-imports — assume v2 layering only

1 participant