Summary
While using the automation bridge to test the VITA-49 buffer-drop burst states (#3810), I hit three gaps that made the burst conditions undrivable headlessly. Filing them together since they share a theme: the bridge can introspect and nudge controls, but can't reproduce the stream-affecting state changes (retune, zoom, band, connect) or the render-size-dependent behavior that those bugs actually depend on.
Bridge background: docs/automation-bridge.md, AutomationServer, introduced in #3646.
Gaps found
1. QLineEdit has no commit action
invoke "Frequency entry" setText 14.200 sets the text but never fires returnPressed/editingFinished, so the radio doesn't retune. Verified: setText → le->setText(value) only (AutomationServer.cpp ~1388). So band-jumps — a primary panadapter re-prime trigger — can't be driven.
Proposal: add a commit action, e.g. invoke <target> submit (or returnPressed) that calls le->setText(v); emit le->returnPressed(); emit le->editingFinished();, or have setText optionally commit.
2. Menu / context-menu actions are unreachable unless already popped up
invoke "Zoom In", "Connect to Radio…", "Radio Setup…" all return widget or visible menu action not found — they live in a menu bar / panadapter right-click menu that isn't open, and invoke only resolves visible QActions. So zoom, band-plan, connect/disconnect, and opening dialogs (incl. the new RX-buffer slider in Radio Setup) can't be driven.
Proposal: allow invoking a QAction by exact text/objectName even when its menu isn't shown (trigger it directly), and/or an openMenu <name> verb to pop a menu so its actions become resolvable.
3. No way to set render size → headless panadapter never bursts
Offscreen (QT_QPA_PLATFORM=offscreen), the panadapter stays at x_pixels≈50, vs x_pixels=1873 on a real full-size window. The FFT/waterfall stream rate (and the rhiFlush composite cost in #3797) scale with that size, so render-size-dependent behavior can't be exercised headlessly — a buffer-overflow burst that drops 370 packets on a real window produces 0 packets headless. This blocks automated burst/perf regression testing.
Proposal: a verb to set the top-level window geometry / the offscreen virtual-screen size (or force a panadapter x_pixels), so headless runs can reproduce a realistic render size.
Why it matters
These three would let an agent drive the full "snapshot → act → assert" loop for streaming and rendering states — band changes, zoom, connect/disconnect, and realistic panadapter sizes — which is exactly what's needed to regression-test #3810 (buffer drops) and #3797 (render bottleneck) headlessly. Today the bridge can assert on control state but can't create these conditions.
Found while driving the bridge for the #3810 buffer-drop A/B (the headless arms all showed 0 drops because the offscreen panadapter never bursts — gap #3).
cc @jensenpat (bridge author)
Summary
While using the automation bridge to test the VITA-49 buffer-drop burst states (#3810), I hit three gaps that made the burst conditions undrivable headlessly. Filing them together since they share a theme: the bridge can introspect and nudge controls, but can't reproduce the stream-affecting state changes (retune, zoom, band, connect) or the render-size-dependent behavior that those bugs actually depend on.
Bridge background: docs/automation-bridge.md,
AutomationServer, introduced in #3646.Gaps found
1.
QLineEdithas no commit actioninvoke "Frequency entry" setText 14.200sets the text but never firesreturnPressed/editingFinished, so the radio doesn't retune. Verified:setText→le->setText(value)only (AutomationServer.cpp~1388). So band-jumps — a primary panadapter re-prime trigger — can't be driven.Proposal: add a commit action, e.g.
invoke <target> submit(orreturnPressed) that callsle->setText(v); emit le->returnPressed(); emit le->editingFinished();, or havesetTextoptionally commit.2. Menu / context-menu actions are unreachable unless already popped up
invoke "Zoom In","Connect to Radio…","Radio Setup…"all returnwidget or visible menu action not found— they live in a menu bar / panadapter right-click menu that isn't open, andinvokeonly resolves visibleQActions. So zoom, band-plan, connect/disconnect, and opening dialogs (incl. the new RX-buffer slider in Radio Setup) can't be driven.Proposal: allow invoking a
QActionby exact text/objectName even when its menu isn't shown (trigger it directly), and/or anopenMenu <name>verb to pop a menu so its actions become resolvable.3. No way to set render size → headless panadapter never bursts
Offscreen (
QT_QPA_PLATFORM=offscreen), the panadapter stays at x_pixels≈50, vs x_pixels=1873 on a real full-size window. The FFT/waterfall stream rate (and therhiFlushcomposite cost in #3797) scale with that size, so render-size-dependent behavior can't be exercised headlessly — a buffer-overflow burst that drops 370 packets on a real window produces 0 packets headless. This blocks automated burst/perf regression testing.Proposal: a verb to set the top-level window geometry / the offscreen virtual-screen size (or force a panadapter
x_pixels), so headless runs can reproduce a realistic render size.Why it matters
These three would let an agent drive the full "snapshot → act → assert" loop for streaming and rendering states — band changes, zoom, connect/disconnect, and realistic panadapter sizes — which is exactly what's needed to regression-test #3810 (buffer drops) and #3797 (render bottleneck) headlessly. Today the bridge can assert on control state but can't create these conditions.
Found while driving the bridge for the #3810 buffer-drop A/B (the headless arms all showed 0 drops because the offscreen panadapter never bursts — gap #3).
cc @jensenpat (bridge author)