Repository navigation
fix(tests): RTL tests follow the qualified-WFM gate and build without the RTL backend. Principle XI. - #6263
Merged
Conversation
… the RTL backend. Principle XI. Fixes the two failures on main that #5973 (ca4e7cb) introduced. - control_receive_test (Full Suite, #6248): #5973 turned on RtlReceivePipeline::kQualifiedWfmEnabled, and RTL now declares WFM as a third adjustable filter mode with broadcastFmReceive. The assertion, written by #5924 while the gate was off, still demanded exactly FM and FMN. It now follows the gate the way the other RTL tests do: FM and FMN with their 21.6 kHz edges, plus WFM with its own 100 kHz range and the broadcast-FM controls when qualified, and neither when not. Legacy WFM is still never offered. - System Libraries Canary: rtl_wfm_pipeline_test is registered on every build, but its opt-in DDC benchmark calls RtlSdrDdc, which is compiled only with the RTL backend (librtlsdr + fftw3f, absent from the canary image). The link failed with 9 undefined references. The benchmark (and the header it needs) now sit behind AETHER_BACKEND_RTL, as control_receive_test's RTL block does. The pipeline checks still run on every build, and asking for the benchmark on a build without RTL says so. Verified: with RTL on, the full ctest suite passes (672/672, including control_receive_test). With -DENABLE_RTL=OFF, the entire tree builds with `ninja -k 0` and no link errors; rtl_wfm_pipeline_test runs with 0 failures and skips the benchmark with a message. Restoring main's rtl_wfm_pipeline_test.cpp in that tree reproduces the canary's 9 undefined RtlSdrDdc references. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ten9876
added a commit
that referenced
this pull request
Oct 7, 2026
…ssibility events stand alone. Principle VIII. Landing pass on #6264. Parser (maintainer: keep the token rule, tighten it) - The closing-quote test is a named predicate: a token closes the open value unless it opens another quoted field, and a token whose only quote is its last character always closes (endsWith && count == 1, which states what the first-quote-position test meant). - The function comment now describes that rule, including the one shape it cannot tell apart: on a malformed line a lone `label="` reads as the close, exactly as a valid name ending in '=' does. A new test pins that case, and that the keys after it survive. - The looped `=`-name assertions carry the name in their label, so a failure says which name broke. Accessibility (maintainer: fold the #6262 review finding into #6264) - setAccessibleName() and QLabel::setText() emit NameChanged themselves. The panel's extra coalesced F-key event and its manual status events are gone; F-key and row names are set only when they change. - The status label's accessible name carries the last announced state, so each state change is one NameChanged and the 10 Hz elapsed-time text and transfer progress add none. - dvk_panel_admission_test counts NameChanged through QAccessible::installUpdateHandler: a load of unchanged slots emits none on the F-keys, a rename emits one, a state change is one status event with no tick events after it, and disconnect emits one status event plus one for the renamed slot. Against the previous panel, three of those checks fail. dvk_model_status_test 56/56, dvk_panel_admission_test 11/11, dvk_panel_theme_test 33/33. Full ctest passes except control_receive_test, whose fix (#6263) landed on main after this branch's base. Architecture gates read the same on base and head. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
4 tasks done
ten9876
added a commit
that referenced
this pull request
Oct 7, 2026
…ibility events. Principle VIII. (#6264) ## Summary Fixes the quoted-name regression introduced by #6262, which its [review](#6262 (review)) found, and folds in that review's accessibility finding (maintainer call). **Parser.** Given `id=1 name="CQ a=" duration=1000`, the parser read `a="` as the start of another quoted field, and the DVK model displayed `CQ`. - A token now closes the open quoted value unless it opens another quoted field. - A token whose only quote is its last character always closes. So `CQ a=`, `CQ =` and `CQ a= b=` stay whole, and the following `duration` survives. - One shape is genuinely ambiguous. On a malformed line, a lone `label="` reads as the close, because it looks exactly like a valid name ending in `=`. A test pins that case and checks that the keys after it survive. - The #6247 guard still holds: an unterminated value does not swallow a later `bar="x"`. **Accessibility.** `setAccessibleName()` and `QLabel::setText()` emit `NameChanged` themselves, and the panel was adding events of its own on top. The review measured 2 events for a single rename and 12–24 for a slot load or disconnect. - The panel no longer adds any events of its own. - F-key and row names are set only when they change. - The status line's accessible name holds the last announced state. Each state change is now one event, and the 10 Hz elapsed-time text and transfer progress add none. ## Constitution principle honored **Principle VIII.** Each claim is backed by a test that fails without the change. FlexLib's DVK status parsing keeps everything between the quotes, equals signs included (Principle I). ## Validation - **Parser:** against the merged `bc1d7b80f`, the new assertions fail 6 of 55, one per name ending in `=`. With this fix, `dvk_model_status_test` passes 56/56, with each looped assertion naming its value. - **Accessibility events:** `dvk_panel_admission_test` (11/11) counts `NameChanged` events through `QAccessible::installUpdateHandler`: - reloading unchanged slots: no F-key events - a rename: exactly one - a state change: one status event, and nothing from the following ticks - a disconnect: one status event plus one for the renamed slot Against the previous panel, three of these fail. - `dvk_panel_theme_test` passes 33/33. - **Full `ctest`:** passes except `control_receive_test`. Its fix (#6263) landed on `main` after this branch's base. - **Static gates:** engine boundary, capability records, command plane, touchpoint manifest, test registration and the CI gate read identically on the merge base and the head. `check_a11y` reports nothing on `DvkPanel`. - **Not verified:** socket-free and offscreen only. No live radio, no transmitting, and no real screen reader. ## Checklist - [x] Signed commits - [x] Socket-free regression coverage, and each guard checked by inverting it - [x] No new settings keys, dependencies or ratchet changes - [x] No CHANGELOG change Authored with OpenAI Codex. Landed with Claude Code. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #6248, and the System Libraries Canary failure on
main. Both came from #5973 (ca4e7cb).control_receive_test. RTL WFM: opt-in DSP, native stereo applet, and bounded receive exchange #5973 turned onRtlReceivePipeline::kQualifiedWfmEnabled, so RTL now declares WFM as a third adjustable filter mode along withbroadcastFmReceive. That is intended; RTL WFM: opt-in DSP, native stereo applet, and bounded receive exchange #5973's description says "RTL advertisesbroadcastFmReceive". The assertion was written by RTL M1: confirmed receive state, free capture browsing and finer zoom #5924 while the gate was off and still demanded exactly FM and FMN. It now follows the gate the way the other RTL tests do:rtl_wfm_pipeline_testis registered on every build, but its opt-in DDC benchmark callsRtlSdrDdc. That class is compiled only with the RTL backend (librtlsdr plus fftw3f), which the canary image doesn't install, so the link failed with 9 undefined references. The benchmark and its header now sit behindAETHER_BACKEND_RTL, ascontrol_receive_test's RTL block already does. The pipeline checks still run on every build, and asking for the benchmark on a build without RTL prints that it was skipped.Test-only change: no production code moves.
Constitution principle honored
Principle XI.
main's CI should re-run green on its own merge commits. This restores the two red workflows.Test plan
ctestsuite passes, 672/672 includingcontrol_receive_test, which failed onmainbefore this change.-DENABLE_RTL=OFF(same effect as the canary, which has no librtlsdr):ninja -k 0and no link errorsrtl_wfm_pipeline_testreports 0 failures, and withAETHER_WFM_BENCHMARK=1prints "benchmark skipped, this build has no RTL backend"main'srtl_wfm_pipeline_test.cppin that tree reproduces the canary's 9 undefinedRtlSdrDdcreferencescheck_test_registrationandcheck_ci_test_gatepass.Checklist
🤖 Generated with Claude Code