Skip to content

aetherd M4: migrate desktop utility adapters to typed requests #6614

Closed

Description

@rfoust

Scope

Continue the accepted aetherd RFC (#3849) and #5262 M4 with one consolidated desktop/automation adapter cleanup. Start from upstream/main 616d3ba. Move the selected Flex command encoders below IRadioBackend and route callers through typed, session-fenced requests.

Included

  • Identity/automation: WSPR callsign and TX-waterfall setup; a separate temporary radio-only station override that never persists saved client identity, with ownership/revision/session fencing and truthful dispatch results.
  • Spots: typed add/remove/clear/trigger, both queued builders and manual/dialog callers. Preserve rate limiting, deduplication, passive/local and N1MM/TCI/memory namespaces. Invalidate pre-clear and old-session queue entries; tolerate reentrant clear/enqueue/disconnect.
  • Physical outputs: the five existing lineout/headphone/front-speaker gain/mute operations. Preserve ANAN native lineout, repeated same-value reapply, caller-specific optimistic UI behavior, and the distinct MIDI/PC-audio routing policy.
  • Pan utilities: existing band/segment zoom and pan RX-antenna operations, retaining capability refusal and exact original pan ownership.
  • Net presets/tuning step: typed tuning step and partial FM/repeater fixups, retaining tune ordering and unspecified-field semantics without pretending a net preset is a stored memory slot.

Review corrections / acceptance criteria

  • Pin controller routing across Flex/non-Flex, connected/disconnected and PC-audio states; native lineout support alone must not reroute the MIDI master knob.
  • Preserve spot-trigger admission asymmetry: TCI's local lock/sweep checks do not become generic radio-trigger checks; radio triggers retain firmware-owned admission.
  • Net preset fields omitted by the operator remain unchanged, not replaced by aggregate defaults.
  • Temporary station overrides use real radio-dispatch admission, never the persisting station-setup facade. Stale restores cannot overwrite newer edits/overrides or a replacement session.

Excluded

Split-slice lifecycle, full duplex, CWX/keying, DAX/IQ, firmware/waveform transfer, broader TCI/rigctl conversion, new daemon methods/grants, new backend support, threads/dependencies, visual/default/UX redesign. #6039's ANAN/RTL client-side spot availability fix and #6586's native Icom zoom enablement remain separate; this migration does not absorb them.

Validation

  • Socket-free production-route tests for validation, encoding, refusal, exactly-once dispatch, session/target replacement, queue reentrancy and identity restoration; mutation-check the new regressions.
  • Before/after engine-boundary, command-plane, capability and touchpoint ratchets; update reduced baselines/manifest and relevant docs in the same PR, not CHANGELOG.
  • Native macOS ARM64, Linux and Windows application/daemon builds and focused tests from the same source, plus isolated RX-only Demo/MCP checks. No physical-radio transmission. Demo and injected-transport evidence are not firmware/RF acceptance.
  • Review scope and lifetime/failure behavior, fix findings, then open one signed draft PR with aetherd in its title.

The shared hydration-checker repair is local tooling only and will not be included in this PR.

Activity

  1. self-assigned this
    on Oct 20, 2026
  2. added a commit that references this issue on Oct 20, 2026
    68ccf45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

claude-activeAetherClaude is actively working on this issue

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions