Skip to content

test: follow RTL native receive and the TX band RCA column (#6637). Principle VIII. - #6637

Merged
NF0T merged 1 commit into
mainfrom
fix/main-full-suite
Oct 21, 2026
Merged

NF0T merged 1 commit into
mainfrom
fix/main-full-suite

Conversation

@ten9876

@ten9876 ten9876 commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

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:

Test Broken by What changed
control_receive_test #6432 The RTL backend now declares filters for AM, SAM, FM, FMN, USB, LSB, CW and CWR, plus WFM when qualified. The test indexed modes[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_test #6432 The backend-level "legacy" block drove an AM receiver through the legacy DDC path with a ±50 kHz filter. Now every mode the backend can create is native: RtlReceiveRecipe::native(), with kQualifiedWfmEnabled constexpr 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. The RtlSdrDdc unit block above it still covers resetting legacy PCM, and native park/resume is covered in rtl_model_acceptance_test and rtl_wfm_pipeline_test.
radio_setup_operations_test #6524 Each TX Band Settings row has a ninth checkbox, RCA off/TUNE, after its eight bandset toggles, so the count is 9. toggles[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

  • Local Qt 6.12 build: control_receive_test, rtl_capture_worker_test, rtl_capture_worker_slow_device_test and radio_setup_operations_test pass. All four failed on unchanged main with the same assertions CI reports.
  • auto_agc_threshold_gui_test reproduced locally (251 vs 248) under DejaVu Sans. It passes with Liberation Sans.
  • Full Suite dispatched on this branch (https://github.com/aethersdr/AetherSDR/actions/runs/39519913867): only auto_agc_threshold_gui_test fails, as expected; the four fixed tests pass on the CI image.

🤖 Generated with Claude Code

https://claude.ai/code/session_012U8wmr3AQGVrmQLp2zNBwa

… 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
ten9876 requested a review from a team as a code owner October 21, 2026 00:12

@ten9876 ten9876 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 at cedd50f4 fail 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 plus 83943422 main). All four focused registrations pass there too. Current main 99fdc61b differs 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_test fails (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 NF0T left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 main is #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.md test-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) against RtlSdrBackend.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 rtlFilter and mode lookup in control_receive_test.cpp; null checks on rtlFilters, fm, fmn, and wfm prevent segfaults or false passes if the backend contract is missing.
  • RCA Toggle Accounting: Inspected src/gui/RadioSetupDialog_TxBandSettings.cpp and 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 on main up to 769fc5b29 touch 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 NF0T self-assigned this Oct 21, 2026
@NF0T NF0T changed the title test: follow RTL native receive and the TX band RCA column. Principle VIII. test: follow RTL native receive and the TX band RCA column (#6637). Principle VIII. Oct 21, 2026

@NF0T NF0T left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 matching RtlSdrBackend::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 in RtlSdrDdc and native lifecycle tests in rtl_model_acceptance_test and rtl_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))

@NF0T
NF0T merged commit 10c1e3b into main Oct 21, 2026
8 of 9 checks passed
@NF0T
NF0T deleted the fix/main-full-suite branch October 21, 2026 13:42
@NF0T NF0T removed their assignment Oct 21, 2026
ten9876 added a commit that referenced this pull request Oct 21, 2026
## 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.

![Before: 251 px RX
applet](https://raw.githubusercontent.com/rfoust/AetherSDR/fix-6641-rx-layout-assets/.pr-assets/6641-before.png)
![After: 248 px RX
applet](https://raw.githubusercontent.com/rfoust/AetherSDR/fix-6641-rx-layout-assets/.pr-assets/6641-after.png)

[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>
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