Route standalone rigctld through managed transmit - #3163
Open
morozsm wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Outcome
Standalone
rigplane servenow installs and reuses the same productionManagedTxCompositionas Web/station. Before the listener opens, the server seeds its single fallback observation generation, binds and validates the exact installed composition against thatStateStore, then constructs one handler-localCommandServiceusing the same store and injects the exact authority.Managed non-PTT writes now enter
ManagedTxAuthority.admit_managed_writebefore overlays/provider delivery. Observed RF no longer admits or blocks managed frequency/mode/VFO/split/relay writes. The compatible unmanaged SDK constructor retains the legacy interlock until its separate retirement; writable unmanaged startup emits one warning, while read-only startup stays silent.Wire behavior is unchanged:
T 1is owner PTT down; same-ownerT 0is PTT up; foreign/staleT 0remainsRPRT 0without a write. No ForceOff/TRANSMIT/TOT wire extension, second authority, fence, runner, watchdog, or timer was added.RigctldServer.stop()does not own composition/provider shutdown; the existing CLI session remains the sole ordered shutdown owner.Search before write
Searched CLI composition branches, every
RigctldServerconstruction, rigctldset_pttingress/release paths, managed-write classification/admission, external rigctld-client actuation, StateStore generation/bootstrap, and existing disconnect/wire tests before editing. The external client remains the canonicalT 1/urgentT 0actuator and is unchanged.TDD and focused evidence
Clean test-only worktree at exact base
893af0f08230bb36a2b8d162dea4cba0e3171610produced behavior-specific RED:None;RPRT 0and never called authority;Current head focused non-socket GREEN:
20 passed, 2 deselected(the two deselected tests are real-loopback-socket tests reserved for natural Mini CI). Ruff check PASS; Ruff format check PASS. Strict mypy reports the same 9 pre-existing errors on base and head, with only shifted line numbers.Mutation discriminators captured:
test_serve_passes_the_exact_preconnect_composition_to_cmd_servefails;test_standalone_binds_exact_store_before_listener_and_uses_local_servicefails with listener first;admit_managed_write->test_rejected_managed_write_never_reaches_overlay_or_providerfails OK vs ERJCTED;test_managed_defer_family_has_no_observed_rf_seatfails;test_managed_authority_is_the_only_tuner_gatefails ERJCTED;test_composition_identity_mismatch_fails_before_listenerfails (no RuntimeError);test_unmanaged_warning_boundaryfails.The dangerous
T0 -> ForceOffmutation was not reintroduced into production source after the safety guard rejected it; the existing discriminator istest_a_declined_unkey_reports_ok_and_writes_nothing. Disconnect release remains pinned by the existing six-pathtest_every_way_a_session_ends_hands_the_lease_back_exactly_once; both run in natural Mini CI.Mechanism audit
Cardinality on this head: one production
ManagedTxCompositionconstructor in CLI, oneManagedTxAuthorityconstructor inside composition, one managed-write policy owner and one rigctld admission call. The old rigctld key-down backstop and rawRadio.set_pttremain reachable only through the explicitly compatible unmanaged branch. No managed path added a second timer, resolver, shutdown owner, or direct radio PTT call.Scope and verification boundary
Exactly 6 files, 529 insertions / 20 deletions. No Web/frontend/composition/StateStore/reconnect/backend-client edits. No hardware or TX was used. Full/quick is not run locally; natural PR CI on the Mini is the required gate. Independent exact-head review and green exact-head CI remain required before merge.