Skip to content

fix(automation): address control and DSP bridge gaps. Principle VIII. - #6465

Closed
rfoust wants to merge 1 commit into
aethersdr:feat/ptt-mic-overridefrom
rfoust:codex/fix-6451-bridge-gaps
Closed

rfoust wants to merge 1 commit into
aethersdr:feat/ptt-mic-overridefrom
rfoust:codex/fix-6451-bridge-gaps

Conversation

@rfoust

@rfoust rfoust commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator

Fixes #6451.

Stacked on #6445 (feat/ptt-mic-override, dependency head c2416ffc46a58dbc08588d60e48c22d39ae02c20). Merge #6445 first, then retarget this draft to main. This PR's diff against its base contains only the bridge fixes.

The agent automation bridge could not operate the PTT Mic Override configuration toggle, omitted existing slice DSP state, and lacked stable names for the shared DSP slider and TX REQ controls. Tree child selection already worked, but its reference omitted that capability.

  • Register PTT Mic Override's real configuration setter through registerTxConfigurationAction(). This uses the existing permission-required scoped-action machinery, accepts click, toggle, and validated setChecked, and captures the requested boolean before deferred delivery. It never calls a keying verb. TX permission, observe-only mode, permission revocation, widget lifetime, and disabled-state checks remain enforced. The button still follows the radio's echo.
  • Add anfLevel, nrl/nrlLevel, nrs/nrsLevel, nrf/nrfLevel, anfl/anflLevel, mn/mnLevel, rnn, and anft to slice snapshots and property reads. mnLevel is passband position, not notch depth. These fields report existing model state and do not imply hardware support.
  • Name the shared slider dspLevelSlider, with an accessible name following its active target. Document pan-scoped targeting for multiple visible VFOs. Name the Interlocks group and its RCA/Accessory polarity controls, plus the PTT toggle.
  • Document the existing recursive setCurrentText selection, first-match semantics, unavailable-page redirect, and flat-row limits. Update the user guide and fallback warning.

The generated touchpoint manifest increases the TxKeyingMarker.h includer count from 16 to 17: RadioSetupDialog now registers the configuration action at the control's creation site. This is existing GUI safety plumbing; it adds no vendor include or engine routing.

Proof

The freshly built ARM64 app ran with an isolated settings profile, AETHER_AUTOMATION_NO_TX=1, and only the demo simulator connected. The agent automation bridge captured the following:

Path Baseline Fixed evidence
get slice 0 nrlLevel Field omitted; property read reports unknown property {"ok":true,"model":"slice","property":"nrlLevel","value":50}; all 13 added fields resolve
invoke radioSetupNavigation setCurrentText Transmit Capability existed but was undocumented {"ok":true,"class":"QTreeWidget","action":"setCurrentText"}; named Interlocks group subsequently captured
grab interlocksTxReqGroup No named group target {"ok":true,"class":"QGroupBox","width":617,"height":100}
Shared DSP slider No stable object/accessibility name Runtime tree reports dspLevelSlider; real-widget test preserves the same slider through NR level / 37 → ANFL level / 63 → POS level / 21
PTT Mic Override With permission, no scoped action for click Actual dialog + production bridge dispatcher test accepts permitted click, setChecked, and clickAt, emits only the typed PttMicOverride configuration request, and keeps the old checked/model value until injected status echo

The PTT test is socket-free and disconnected: it injects a reported setting into the actual TransmitModel and drives the actual dialog through the production bridge dispatcher. It also verifies denied permission, malformed/unsupported actions, observe-only mode, queued permission revocation, and queued reset/disabled-control behavior. It starts no radio transport. Live PTT configuration acceptance was not tested: the available physical radio runs firmware 4.2 and does not report this 4.3 setting. The demo correctly shows the toggle dimmed. transmitting:false was confirmed in runtime evidence; no TX grant or keying was used on hardware.

The named group can now be captured directly:

Named Interlocks group in the demo, with unsupported PTT Mic Override dimmed

Local evidence is retained in /tmp/fb-6451/ (runtime-proof.json, runtime-navigation.json, tree-after.json, screenshots, build/test/mutation logs).

Validation

  • Full macOS ARM64 app build with the prescribed toolchain, RADE enabled. Host/system processors and executable verified ARM64; no RNNoise x86 sources in the Ninja graph.
  • Five focused CTests pass: automation_boundary_core_test, automation_cell_test, radio_setup_tx_timing_fields_test, automation_tx_watchdog_test, and vfo_dsp_launcher_width_test.
  • Mutation check: remove nrlLevel, recursive child selection, PTT scoped registration, and target-following slider name; all four affected regression tests fail. Restore the changes, rebuild, and all five focused tests pass.
  • Engine boundary, command-plane and capability ratchets pass; generated bridge reference/touchpoint manifest and test registration checks pass.
  • npm ci and user-doc site build pass; generated user references and log-rule checks pass. Accessibility lint was run and remains warning-only.
  • Independent read-only review found no TX-safety blocker; its include and multi-VFO targeting nits were resolved.

No new socket-owning test, dependency, default, wire grammar, visual layout, or keyboard binding is added. Linux/Windows builds and the full suite were not run locally; CI and maintainer review remain required.

Generated with OpenAI Codex.

@jensenpat
jensenpat deleted the branch aethersdr:feat/ptt-mic-override October 14, 2026 06:55
@jensenpat jensenpat closed this Oct 14, 2026
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.

2 participants