Repository navigation
test: follow RTL native receive and the TX band RCA column (#6637). Principle VIII. - #6637
Conversation
… VIII. Three Full Suite tests have failed on main since the PRs that changed what they check: - control_receive_test: since #6432 the RTL backend declares filters for AM, SAM, FM, FMN, USB, LSB, CW and CWR, plus WFM when qualified. The check now compares the whole mode list and finds FM, FMN and WFM by name instead of by index. - rtl_capture_worker_test (both registrations): the backend-level "legacy" block drove an AM receiver through the legacy DDC path with a +/-50 kHz filter. Since #6432 every mode the backend can create is native (RtlReceiveRecipe::native, with kQualifiedWfmEnabled constexpr true), and AM rejects a filter beyond +/-12 kHz, so that path is no longer reachable from the backend. The block is removed. The RtlSdrDdc unit block above it still covers resetting legacy PCM, and native park/resume stays covered in rtl_model_acceptance_test and rtl_wfm_pipeline_test. - radio_setup_operations_test: #6524 added an RCA off/TUNE checkbox to each TX Band Settings row, after its eight bandset toggles, so the dialog has nine checkboxes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012U8wmr3AQGVrmQLp2zNBwa
ten9876
left a comment
There was a problem hiding this comment.
This test-only PR meets its stated intent. There is no linked closing issue; the changes repair stale expectations after #6432 and #6524. Removing the backend-level legacy AM block is justified: admitted backend modes now use native receive, and its ±50 kHz AM filter is rejected. Legacy DDC reset and native backend park/resume assertions remain.
Scope
| File | Change claimed in body | Verdict |
|---|---|---|
tests/control_receive_test.cpp |
Assert all declared RTL filter modes and locate FM/FMN/WFM by name | In scope; existing boundary assertions retained |
tests/radio_setup_operations_test.cpp |
Expect nine TX-band checkboxes | In scope; Inhibit typed-command assertion retained |
tests/rtl_capture_worker_test.cpp |
Remove obsolete backend legacy-filter block | In scope; remaining reset and native lifecycle coverage inspected |
All three files and the single signed commit are explained by the body. No production, registration, dependency, user-documentation, or CHANGELOG changes.
Blockers
None.
Nits (non-blocking)
None.
Verification and attempts to break it
- Built only the three affected targets with Qt 6.12 and shared core. The four affected CTest registrations pass at head
f6f4c15e; their merge-base versions atcedd50f4fail on the stale assertions described in the body. The base test sources were compiled against identical production objects, since this PR changes only tests. The GUI test needed an offscreen-compatible generic/Fusion theme; the inherited GNOME theme stopped before assertions on both revisions. - Deliberately removed SAM from the declared filter list, removed a TX-band checkbox, and bypassed
RtlSdrDdc::resetReceiveAudio(). The control and dialog tests failed on their respective contracts; both RTL registrations failed the retained fresh-PCM assertion. After restoring exact source bytes and rebuilding, all four passed again. - Also rebuilt the same named targets at GitHub merge snapshot
543bcf21(PR head plus83943422main). All four focused registrations pass there too. Current main99fdc61bdiffers from that production snapshot only in.github/workflows/codeql.yml. - Strict engine-boundary, capability-record, command-plane and touchpoint checks pass at both the merge base and PR head with unchanged baselines. The unavailable optional automated review skill was replaced by direct independent code audits.
- The existing branch Full Suite run 39519913867 completed with 857 passing, seven skipped and one failure among 865 registrations: all four repaired registrations pass, and only the disclosed
auto_agc_threshold_gui_testfails (251 px versus 248 px). I did not rerun that unrelated GUI test or independently reproduce its font comparison. Required CI checks are green, but were created before current main (99fdc61b, 00:34:06Z); the later main delta changes only CodeQL workflow configuration.
Preflight found no active sockets or synthetic firmware peers in these modified tests. No application/bridge session was run because this PR changes only test expectations; the relevant dialog was exercised directly offscreen. No hardware or transmit operations were used.
Recommendation: Approve. The before/after failures and targeted regression checks support the repair without production behavior changes. Approval remains the maintainer’s decision; this is a COMMENT review.
NF0T
left a comment
There was a problem hiding this comment.
PR Review: #6637 — test: follow RTL native receive and the TX band RCA column. Principle VIII.
Issue-Fit Verdict
This test-only PR repairs stale assertions across three test targets (control_receive_test, rtl_capture_worker_test, and radio_setup_operations_test) caused by production changes introduced in #6432 (native RTL reception and additional demod modes) and #6524 (per-band RCA suppression toggle in TX Band Settings). The changes directly address the post-merge test regressions tracking in #6555 ([full-suite] test suite failing on main). The PR is technically sound, cleanly scoped, and free of blockers.
Scope Audit
| File | Change Claimed in Body | Verdict |
|---|---|---|
tests/control_receive_test.cpp |
Query RTL filter modes dynamically and locate FM/FMN/WFM by name | In Scope — Adapts test assertions to match the expanded RTL filter modes introduced in #6432 (RtlSdrBackend.cpp:314-328). Boundary and frequency limits are preserved. |
tests/radio_setup_operations_test.cpp |
Update expected TX-band checkbox count from 8 to 9 | In Scope — Accounts for the RCA off/TUNE toggle checkbox added per band row by #6524. |
tests/rtl_capture_worker_test.cpp |
Remove unreachable backend legacy AM filter test block | In Scope — In production, RTL modes are now native receive (RtlReceiveRecipe::native), and AM limits filter bandwidth to $\pm$12 kHz (RtlSdrBackend.cpp:315). The test block's request for $\pm$50 kHz AM fails by design. Unit coverage for legacy DDC reset remains in RtlSdrDdc, while native lifecycle coverage remains in rtl_model_acceptance_test and rtl_wfm_pipeline_test. |
No production, dependency, build system, or documentation files are touched.
Blockers
None.
Nits (Non-Blocking)
- Issue Linkage: The PR body notes "There is no linked closing issue". The automated tracking issue for these test failures on
mainis #6555 ([full-suite] test suite failing on main (fp 2ad656efe29e)). Linking #6555 in the PR description will ensure it is automatically closed or updated upon merge.
What Was Verified & Adversarial Checks
- Preflight & Sockets: Verified per
AGENTS.mdtest-layer boundary that no socket-owning tests, synthetic hardware peers, or network servers were added or modified. The diff strictly adjusts existing CTest assertions and deletes an unreachable test block. - RTL Mode Consistency: Cross-checked
expectedFilterModes(tests/control_receive_test.cpp:649) againstRtlSdrBackend.cpp:310-328. The list{"AM", "SAM", "FM", "FMN", "USB", "LSB", "CW", "CWR"}plus conditional"WFM"exactly mirrors production backend capabilities. - Null Safety in Test Fixture: Inspected the lambda
rtlFilterand mode lookup incontrol_receive_test.cpp; null checks onrtlFilters,fm,fmn, andwfmprevent segfaults or false passes if the backend contract is missing. - RCA Toggle Accounting: Inspected
src/gui/RadioSetupDialog_TxBandSettings.cppand confirmed the 9th checkbox per row is the RCA suppression toggle added in #6524. - CI & Merge Base: Inspected CI results on run
39519947743; all required checks (build,check-windows,check-macos,Static checks, CodeQL) are green. Verified that subsequent commits onmainup to769fc5b29touch unrelated files and do not conflict with these test files. - Automation Bridge: Not driven because this PR contains no application runtime or UI production code; changes are exclusively in headless CTest test binaries.
Recommendation: Approve. The PR correctly realigns test expectations with production behavior.
—
🤖 Reviewed by Antigravity (Gemini 3.8 Flash (Medium))
NF0T
left a comment
There was a problem hiding this comment.
Approval Review: PR #6637 — test: follow RTL native receive and the TX band RCA column (#6637). Principle VIII.
Summary & Verdict
Approved. This test-only PR restores passing test assertions for post-merge Full Suite on main tracking in #6555 ([full-suite] test suite failing on main). The changes accurately follow production updates introduced in #6432 (native RTL reception and full mode coverage) and #6524 (per-band RCA suppression toggle in TX Band Settings).
Scope Audit (Tier 3 — @aethersdr/reviewers)
All touched files reside strictly within tests/ and are fully within scope:
tests/control_receive_test.cpp: Replaces brittle positional index assertions with dynamic mode lookup matchingRtlSdrBackend::capabilities().tests/radio_setup_operations_test.cpp: Updates TX Band Settings checkbox count to 9 to include the RCA off/TUNE toggle (#6524).tests/rtl_capture_worker_test.cpp: Removes unreachable legacy AM ±50 kHz test block now rejected by native pipeline validation (retained unit coverage inRtlSdrDdcand native lifecycle tests inrtl_model_acceptance_testandrtl_wfm_pipeline_test).
Verification & Preflight
- Pat's Preflight Checklist: Passed all 9 tips cleanly. Zero production/runtime code changed, no defaults moved, no on-air effects.
- Test-Layer Preflight: Clean — no sockets, synthetic hardware peers, or network servers added.
- Merge Base Integrity: Clean mergeable status against
main(769fc5b29), with no conflicting commits. - CI Status: Green across all required status checks (
build,check-windows,check-macos,Static checks, CodeQL).
—
🤖 Reviewed by Antigravity (Gemini 3.8 Flash (Medium))
## Summary Fixes #6641. Related to #6508, #6564 and #6637. With DejaVu Sans on Linux, the three RX preset columns need 103 px. The 136 px AGC row, 4 px column gap and 8 px margins bring the applet minimum to 251 px inside a 248 px dock. The existing GUI test correctly catches the clipped right edge. Reduce only the presets' horizontal padding from 2 px to 1 px. The dock width, AGC selector, Auto button and slider minimum retain their sizes. Add system/DejaVu Sans/Liberation Sans cases that check width, control containment, label fit and a slider at least 60 px wide. Refresh the RX guide's HiDPI screenshot. ## Constitution principle honored Principle XI — the new font cases fail against the original layout and pass with the fix, using the real production widgets and agent automation dispatcher. ## Validation - **Linux, Debian 13 ARM64 / Qt 6.12:** unchanged main reproduces **251 actual / 248 expected** (13 QtTest cases pass, 1 fails). New cases on unchanged production code fail for system/DejaVu Sans and pass for Liberation Sans. With the fix, Auto AGC-T GUI and RX squelch reconciliation CTests both pass at DPR 1.6667 (7.18 s). The entire GUI test also passes at normal DPR: **17 passed, 0 failed**. - Linux bridge capture: **251 → 248 px applet; 60 → 63 px slider**. The fixed font cases verify that preset text and all visible children fit. Runtime/test source hashes match the signed fix. - Linux configuration: RADE enabled; C++ `-O0 -g1 -DNDEBUG`. Object debug sections were stripped and static archives placed in temporary RAM storage because of VM resource limits. Tests ran in a separate checkout; the managed checkout and its CWX edits were preserved. - **macOS:** full RADE app build; host/system processors and executable verified ARM64, with no RNNoise x86 sources. Both focused CTests pass (15 GUI and 55 squelch cases), including an additional HiDPI GUI pass. - `npm ci` and production docs build pass, including current main's new docs configuration. Registration, frozen CI gate, generated references and 707 Log Analyzer checks pass. Accessibility warnings remain 5 on base/head. The RX screenshot embed is in sync; 14 unrelated existing pages remain out of step. - Signed integration of main `4ef2c18b5` changes only documentation/release infrastructure; tested runtime/GUI sources are unchanged. Windows and the complete suite were not run locally; hosted checks are pending. The socket-free fixture uses injected normalized status and the agent automation bridge's production `dumpTree`, `grab`, `get` and `invoke` dispatcher. It starts no radio, audio device or listener. Bridge sufficient — no gaps; this is fixture evidence without a live-radio or RF claim. ## Proof Linux DejaVu Sans, DPR 1.6667. Standalone production widget before → after: the minimum fits the dock, preserving the AGC slider.   [Machine-readable layout measurements](https://raw.githubusercontent.com/rfoust/AetherSDR/fix-6641-rx-layout-assets/.pr-assets/6641-layout-summary.json) Generated with OpenAI Codex. --------- Co-authored-by: Jeremy [KK7GWY] <kk7gwy@aethersdr.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Summary
Full Suite on main has failed on every push since #6432, with five failing tests. This PR fixes four of them, from three causes. All four tests were left behind by changes to production behavior:
control_receive_testmodes[0..2]and expected exactly FM/FMN(/WFM). It now compares the whole mode list and finds FM, FMN and WFM by name.rtl_capture_worker_test,rtl_capture_worker_slow_device_testRtlReceiveRecipe::native(), withkQualifiedWfmEnabledconstexpr true. AM also rejects filters wider than ±12 kHz, so the request fails (capture request failed; previous capture restored) and the path can't be reached any more. The block is removed; this is the one judgment call here. TheRtlSdrDdcunit block above it still covers resetting legacy PCM, and native park/resume is covered inrtl_model_acceptance_testandrtl_wfm_pipeline_test.radio_setup_operations_testtoggles[0]is still PTT Inhibit, and the next assertion confirms it.Not in this PR:
auto_agc_threshold_gui_test(from #6508) still fails on the CI image. That test is right. With DejaVu Sans, the RX applet's minimum width is 251 px against the dock's 248 px: the preset column is 3 × 33 px plus spacing (103 px), plus the 136 px AGC row, the 4 px gap and 8 px of margins. That's a layout fix for #6508 and is left to it, so Full Suite stays red on that one test until then.Test plan
control_receive_test,rtl_capture_worker_test,rtl_capture_worker_slow_device_testandradio_setup_operations_testpass. All four failed on unchanged main with the same assertions CI reports.auto_agc_threshold_gui_testreproduced locally (251 vs 248) under DejaVu Sans. It passes with Liberation Sans.auto_agc_threshold_gui_testfails, as expected; the four fixed tests pass on the CI image.🤖 Generated with Claude Code
https://claude.ai/code/session_012U8wmr3AQGVrmQLp2zNBwa