Repository navigation
Conversation
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
1 similar comment
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
CI on
|
| head | PR | manifest says | tree has |
|---|---|---|---|
e5f7b46b |
#5924 | — | in sync ✅ |
824b784a |
#5973 | 9 | 10 |
4ddc58fe |
#5974 | 10 | 11 |
dc24df83 |
#6002 | 10 | 11 |
07cd6c56 |
#6003 | 10 | 11 |
So fixing only dc24df83 leaves three red PRs underneath. Best to regenerate at the bottom (#5973 → 10) and let it flow up, regenerating again at #5974 where the count moves to 11.
Why it drifted — worth guarding against on the next reconcile
Bisecting the branch, it was in sync as late as dea570a2, then went stale across the "Reconcile … with current main" merges: at 6607ce9e the table came out at main's 9 while the tree had 10, i.e. the merge resolution took main's side of that line. The script's docstring is explicit that the table is generated and must not be hand-edited — that applies to merge conflict resolution too. So on the next reconcile, rather than resolving that line by hand, take either side and then re-run the generator. The two sidecars (aetherd-touchpoint-tags.json, aetherd-touchpoint-status.json) are the files meant to be edited by hand; they survive regeneration.
Unrelated
The accessibility bot's 2 findings are warnings only and don't block. No Copilot review comments on this PR.
Thanks for carrying this stack — the reconcile merges are doing real work, and a generated-counter drift is an easy thing for them to hide. 73
🤖 aethersdr-agent · cost: $7.2948 · model: claude-opus-5
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
b6f87a9 to
2602312
Compare
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
1 similar comment
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
e03365c to
50e2659
Compare
387e4e1 to
ac62e47
Compare
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
ac62e47 to
5ae6b20
Compare
dd6be71 to
ca3a36b
Compare
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
…#5974) ## Rebased on current main — 2026-10-06 Current head: `ebb35cfd20892431758fd8a165b7c66357b74090`. Base stack starts at main `5f09371e25ffc032666d36f0ea265dc506621066`; parent PR/branch is unchanged. This is a signed replay of the existing increment. It preserves main's unified window chrome and release debug-symbol archives, alongside the RTL dependency packaging and explicit Digital-OFF release flags. Generated touchpoint counts were regenerated from the combined sources. Fresh rebase validation on analog `ca3a36bd`: native Apple Silicon / Qt 6.12 / RTL required / Digital OFF application build succeeds. **51/52 selected CTests pass** in 226.55 seconds: all 47 RTL regressions and four additional UI checks pass. The new upstream `unified_title_bar_test` fails its Alt+F/menu-rounding assertions under Mac offscreen rendering; an independent rebuild and run on clean main `5f09371e` reproduces the identical two failures. This is an inherited test failure, not a green full-suite claim. Static engine/routing/capability, generated manifests, registration/frozen-gate, theme and build-options checks pass; package-helper tests pass 9/9 and required-RTL configuration checks pass 16 combinations. The Digital increment and vendor trees are unchanged by replay; decoder-ON tests and release packaging were not rerun for these heads. Hosted checks are being refreshed by the push. All validation recorded below predates this rebase and remains evidence for the specific revisions named there. No new live-RF, capacity, or release-package qualification is claimed. Readiness is unchanged; Digital #6002 remains draft. --- ## Previous checkpoint record — 2026-10-05 ## Scope Analog WFM backend and applet integration under RFC #5468, based on the nine-file DSP foundation #5973 and main `035a858356949a0c902e286ee5250c04f5ef86c0`. Head: `b8aba26e677f49f07d155685e5f7bef8d2bfe425`. Parent: #5973. Digital #6002 / RFC #6079 is not a dependency. The selected RTL WFM receiver exposes Mono/Auto stereo, 50/75 µs deemphasis, bandwidth and measured pilot/stereo diagnostics. Accepted backend state drives readback and per-device persistence. The `broadcastFmReceive` capability is documented for all six backend families; RTL advertises the implemented controls and other families do not. WFM requests use the existing typed receive dispatcher through `SliceWfmRequest` / `requestSliceWfm`, including thread, current receiver identity, ownership, mode, value and backend-support guards. Refusals use the shared reporting path. This carries the #5919 request-routing contract into WFM. Speaker renegotiation prefers 48 kHz only for an accepted 48 kHz producer. If opening the new sink fails, it makes one bounded attempt using the previous rate policy and reports failure if neither opens. Producer-domain buffers, DSP and rate state are preserved. This shared AudioEngine behavior affects every backend family. The associated recorder-rate test follows producer rate rather than inferring it from the speaker sink. The opt-in nonblocking WFM exchange uses eight slots: 42.667 ms total exchange buffering, 32 ms above the legacy depth. Existing blocking/legacy owners retain their prior depth. Vendored WDSP exchange changes and test exports are included. Generic ContainerWidget managed presentation is used by the WFM applet; the default WFM tile placement applies to RTL. ## Validation and remaining decisions Exact checkpoint, native Apple Silicon / Qt 6.12 / optional decoder OFF: 4/4 rebuilt tests pass in 17.10 seconds (`wfm_controls_test`, `audio_engine_rates_test`, `fm_filter_controls_test`, `rtl_model_acceptance_test`). Removing speaker recovery produces six failures in the rate test; restored code passes. The regression injects failed opens, checks bounded fallback and actual-rate stereo rendering, and preserves producer/DSP/lifecycle state. Static ratchets and generated manifests pass; independent source review found no remaining typed-WFM routing defect. Historical operator stability on `7601593f` is not a new-head soak. An earlier Mac filter/stereo transition intermittently withdrew a WFM receiver; passing diagnostic reruns did not establish a root cause, and this remains unresolved. Maintainer review still covers WFM applet/default presentation, the typed public seam and vendor exchange/test surface, and the buffering tradeoff. The approved RTL-only free-pan and confirmed-control seam from #5924 are not reopened. Normal admission remains one receiver; 2/4/8 evaluation and capacity qualification belong to the delivery increment. No Digital approval is requested. Principles II, V/XIV and XI: accepted state, scoped persistence and demonstrated behavior. --- 73, Ozy **K6OZY** · Codex
…ge (#5973) Lands the analog WFM work through #5974 on current main. The DSP recipe accepts 384 kHz channel IQ, runs a Blackman-Harris RF prefilter, decodes broadcast FM at 192 kHz, and produces paired 48 kHz audio. Output gain holds headroom, deemphasis switches between 75 µs and 50 µs on the live filters, and a lock-free flag reports the stereo pilot from the last decoded block. Channels that do not opt in keep their previous recipe. The RTL receiver wires that recipe through the typed receive path: Mono/Auto stereo, deemphasis, bandwidth, and pilot readback, persisted per device. RTL advertises `broadcastFmReceive`; the other families declare the record and do not implement the controls. A WFM applet is the RTL tile. The speaker path prefers 48 kHz for an accepted 48 kHz producer and makes one bounded attempt at the previous rate if that open fails. This path uses a non-blocking eight-slot WDSP exchange. Other modes keep the previous exchange depth. The second impulse blanker from main stays ahead of the WFM prefilter. The touchpoint manifest was regenerated after the merge; its includer counts were the only conflict. Digital FM remains draft #6002. Squashed-from: #5973 Co-authored-by: Ozy311 <6413560+Ozy311@users.noreply.github.com> --------- Co-authored-by: jensenpat <patjensen@gmail.com>
Stage the pinned libusb required by librtlsdr before linuxdeploy, which excludes libusb by default. Reject missing or mismatched prefix libraries and copy through the runtime SONAME without a build-prefix symlink. Keep the existing RTL closure validator and run it in its own step before image creation. Validate staging with injected ELF inspection reports and a real ELF closure/relocation fixture on Nobara. Mutation checks reject a removed SONAME guard and a build-prefix symlink. Current main already provides the full-suite disk cleanup and reduced debug information; preserve that workflow during integration.
Keep all Windows runtime closure cases active without requiring symlink privileges on Windows. Preserve the dependency search prefixes during the second linuxdeploy pass, preferring the already validated AppDir closure.
Remove the Digital FM placeholder option and release flags from the analog delivery. Retain mandatory RTL dependencies. Audit the extracted final AppImage after the final deployment pass, including its libusb payload. Document receive-only routing and the separate multi-receiver evaluation boundary.
Keep the optional decoder OFF in release and local packaging entry points. Document the opt-in toolchain and actual Digital controls in the user guide. Preserve decoder source pins, original upstream notices, internal identifiers and enabled-build behavior.
ca3a36b to
a3458b0
Compare
5ae6b20 to
a811237
Compare
Accessibility check findingsThis PR touches
See Findings are warnings only — the build is not blocked. |
Analog RTL receivers gain independent squelch, receive-audio exports, meters and release packaging. This is the remaining analog delivery increment under RFC #5468; the WFM foundation, applet and live PPM changes are already in `main`. ## Scope and separation Rebased onto main `d6f6a4f00e40e292d575c40cad7d0848406d89f5`. Only the five remaining analog commits were replayed, followed by the release-control and user-documentation cleanup. The merged WFM/PPM changes and newer main changes are retained. - Independent manual/Auto SQL; selected-receiver APRS; stable TCI mapping; native Linux/macOS DAX receive feeds; relative receive meters with a per-device switch; averaging preserved during monitor-volume edits. - WFM controls follow the selected receiver and reject stale bindings. The normal launch remains **one receiver**. Explicit process-only 2/4/8 receiver evaluation remains separate from production capacity qualification; no new Linux ARM capacity result is claimed. - Official AppImage, macOS DMG and Windows packages require `ENABLE_RTL=ON` and `REQUIRE_RTL=ON`. Configuration fails if RTL or float-FFTW is missing. Jeremy [approved required RTL and bundling pinned libusb](#6083 (comment)). The completed AppImage is extracted and audited after the final linuxdeploy pass, including a byte comparison of its libusb payload. Windows dependency validation follows normal and delay imports recursively. - **No `ENABLE_HD_FM` declaration, placeholder, release flag or decoder dependency remains in this analog increment.** The actual optional switch and all explicit OFF release/build flags belong to deferred draft #6002 / RFC #6079. That feature is not a prerequisite for this PR. - User documentation now covers RTL packaging, evaluation limits, squelch, meters, selected-slice AetherModem and receive-only DAX/TCI routing. ## Shared behavior for review Auto SQL uses the existing typed receive dispatcher and confirmed-state guards. RTL's 2048-bin detector scale is relative dBFS, not calibrated dBm or directly comparable with the display FFT; no misleading threshold line is drawn. An accepted capture revision retires a receiver's relative-level sample only when that receiver's detector input changes (passband, mode, membership, front end, capture placement or DC suppression); monitor gain, pan, mute and squelch edits keep it, so the meter does not blank during an AF gain drag. Other adapters retain their manual behavior and refuse the automatic request. TCI initialization is batched as one worker job for every family. `AETHER_SETTINGS_DIR` suppresses legacy-profile migration and normal log pruning. The `activeSliceCommandIssued` connection uses `receiveCommandSource()` identity and `Qt::DirectConnection`; this shared-family guard remains part of the increment. Receive-only PipeWire routing drains stale audio while preserving the legacy Flex FIFO's sole-reader/EPIPE behavior. Dependency-prefix and Qt deployment fixes remain in packaging. ## Validation Native Nobara / GCC 16.2.1 / Qt 6.12 / Release application and daemon builds pass at `a3458b09`. **53/53 selected CTests pass**, zero skips/failures, 221.35 seconds. This covers RTL capture/control/receiver banks, FM/WFM, SQL, spectrum/averaging, APRS, DAX/TCI, meters, applet lifecycle and actual PipeWire FIFO behavior. The analog CMake cache contains no Digital switch. [Platform CI](https://github.com/aethersdr/AetherSDR/actions/runs/38001349724) passes on Linux, macOS and Windows. [Static Checks](https://github.com/aethersdr/AetherSDR/actions/runs/38001349782) and [Docs](https://github.com/aethersdr/AetherSDR/actions/runs/38001349759) pass. [Full Suite](https://github.com/aethersdr/AetherSDR/actions/runs/38001374779) passes: **691 passed, five skipped, zero failures**, 696 registered tests, 932.37 seconds. The skipped cases are four AppSettings safety scenarios and `hl2_probe_spectrum_panadapter`; they are not claimed as exercised. All branch release-package workflows pass at exact head `a3458b09`: [AppImage](https://github.com/aethersdr/AetherSDR/actions/runs/38001377190) x86-64 and ARM, [macOS DMG](https://github.com/aethersdr/AetherSDR/actions/runs/38001379572) Apple Silicon and Intel, and [Windows Installer](https://github.com/aethersdr/AetherSDR/actions/runs/38001382004). Both completed AppImages pass RTL runtime closure and libusb byte comparison. Both DMGs pass signing/notarization; Windows passes actual DLL closure and installer/artifact packaging. Artifact identities and checksums are retained. Release/Store publication jobs were skipped. Already passed on this revision: 16 required-RTL configuration combinations, 9 package-helper tests, engine/routing/capability gates, generated manifests and references, frozen-test-gate and registration checks, build-options checks, LogAnalyzer checks, and the user-documentation production build. Commits are signed. Historical operator multi-RX acceptance and earlier package/full-suite results remain in the PR discussion and original #6077. They are not substituted for this head's results. The intermittent historical Mac WFM receiver withdrawal during a filter/stereo transition remains unexplained; passing reruns did not establish a cause. No new live-RF, audible, sanitizer or production-capacity qualification is claimed. This PR requests its own maintainer/code-owner review. #6002 remains draft. No release or Store publication is part of this validation. --- 73, Ozy **K6OZY** · Codex --------- Co-authored-by: jensenpat <patjensen@gmail.com> Co-authored-by: Jeremy [KK7GWY] <kk7gwy@aethersdr.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nciple II. (#6432) ## Summary Adds the SSB/CW and AM/SAM receive increment of RFC #5468 through RTL's existing shared capture, extractor and WDSP receiver bank. USB, LSB, CW, CWR, AM and synchronous AM produce independent 48 kHz receiver audio. Filter edits affect the passband; each mode recalls its last accepted filter. Receiver AGC, blanking, noise reduction, notches, APF and RIT publish and persist accepted state. CW pitch preserves the displayed RF carrier, and explicit CW/AM tuning prefers a capture clear of converter DC. The selected receiver feeds CW decoding and Copy Assist before speaker gain/mute. Retuning, parking and selection changes retire stale audio and transcription results. The receive DSP capability record restricts APF to CW/CWR. The receive pitch record enables pitch control without granting TX. RTL retains the existing CWR mode token and scoped settings document. Includes the reported speaker-icon fix, fixed receive-only antenna availability and Copy Assist teardown ordering. The shared Connected-indicator correction ends discovery on a newly confirmed connection, retains real link-loss alarms, and preserves rescans on repeated connected-tab refreshes. Automation forwards the existing ANF level argument; unsupported DSP-on requests are refused while cleanup off intents remain allowed. Uses existing DSP dependencies and threads. Normal receiver capacity remains one; 2/4/8 are process-only evaluation settings. FM/FM-N/WFM retain their recipes. Digital broadcast decoding remains in #6002 / RFC #6079. This does not close the umbrella RFC. ## Integration and review Rebased onto main `9dfe8f666775b51a6012534bff7e7737ff0412b1` as signed commit `9df9135d197aadba5f1fefb20abdff4a71ac0241`, preserving Ozy311's authorship. Keeps main's neural CW decoder integration, pitch slider, passive DSP readback, transmit acknowledgement route, profile/memory routing and settings consumers. The only final rebase conflict was regenerated log-reference line numbers; the production/test patch is unchanged. CW/CWR helpers use the existing model-layer `ModeVocabulary.h` owner. The operator requested review, rebase and merge of this proposed change. The prior runtime-documentation, APF contract, automation cleanup, rescan and pitch-confirmation findings are corrected in this head. No workflow edits, CHANGELOG entry, frozen test-gate expansion or boundary-baseline increase. New GUI/model touchpoints consume existing selected-receiver models: AsrAudioTap and CopyAssistController use DecoderAudioModel; RadioModel/SliceModel observations provide selection and lifecycle state. AudioButtonIcon shares the existing ThemeManager artwork. No new vendor-header crossing or engine-to-GUI dependency. ## Validation Current head `9df9135d1`: - Native Apple Silicon app, daemon and 24 selected regression targets built with Qt 6.12.0, ASR and RADE enabled. No RNNoise x86 sources in the ARM build graph. The initial sandboxed iconutil failure cleared on the unchanged permitted incremental build. - **24/24 headless CTests pass**, 92.61 s: RTL AM/SAM, SSB/CW, FM/WFM pipelines; model acceptance; capture transaction and scoped settings; typed receive intents; ASR engine/native receiver/tap; capability availability; DSP policy; filters; TNF removal; title bar; Phone/CW APF and accepted pitch; CW mode gates; current-main CW RX model and stored-control routing/dialog regressions. - Integration mutation on `2e4996250` (unchanged helper and test on the final head): omitting CWR from the shared mode vocabulary causes four CW mode-gate failures; the exact current source passes. No production source was altered for the isolated mutation. - Isolated offscreen bridge instance `pr6432-final-20261017`, PID 10312, explicit socket, fresh settings and autoconnect disabled: only DEMO-0001 connected; `whoami` reported `txAllowed:false`, radio state reported `transmitting:false`. Confirmed USB/CW/USB Copy Assist menu and panel transitions, slice mute readback, reconnect and window shutdown. Copy Assist destruction logged `result=ok elapsed_ms=0`; the owned process exited with code 0. - Engine boundary, touchpoint manifest, capability freeze and command-plane gates pass on main and the head. Same 101 tracked boundary findings, 70 capability booleans and 221 above-seam command strings. Test registration, frozen test gate, seam probe generation, WDSP test links, QSettings, bridge-doc and generated reference/log-rule checks pass. Accessibility warnings match main: 19, with no additions. - Exact-head hosted platform, Static checks, CodeQL and Docs results are recorded in this PR’s Checks tab. Required checks gate the protected merge. The preceding `2e4996250` head passed all hosted checks; that evidence is scoped to that head. Earlier operator validation on the pre-rebase candidates confirmed USB, LSB, CW, AM/SAM reception and CW decoding with an IC-705 signal source, plus ASR on the SSB/CW candidate. Earlier explicit-fixture Whisper inference on demodulated AM/SAM speech produced nonempty transcripts. These are retained historical evidence, not new live RF or inference runs for the rebased head. ## Limits The demo does not exercise RTL USB capture or real SAM acquisition. Current local evidence is generated-IQ production-pipeline testing and shared demo UI behavior. No new live hardware, TX, instrumented RF sensitivity/distortion, portable macOS packaging, transcription accuracy or sustained eight-receiver qualification is claimed. SAM retains the existing ±2 kHz PLL bound; large carrier changes may require retuning. AM/SAM squelch is unavailable; APF is CW-only. Generated with OpenAI Codex (GPT-6 Astra) Co-authored-by: jensenpat <patjensen@gmail.com>
|
Welcome to AetherSDR, @Ozy311! Thanks for your first pull request. A few things that might help:
If you have questions, feel free to ask here or in Discussions. — AetherClaude (automated agent for AetherSDR) 🤖 aethersdr-agent · cost: $34.5922 · model: claude-opus-5 |
Optional Digital FM reception and passive station/program metadata remain a separate, deferred proposal under RFC #6079. This PR stays draft. Analog RTL delivery #6083 does not depend on its approval.
Scope
Head
a8112373126246df213ee944dc07804f73a8263e, stacked on analoga3458b0919cfbb2ec0314444f876dd6c8296473f. The two existing Digital commits were reconciled with the current analog parent, followed by the build-control and user-documentation separation. Main's newer spectrum transition/epoch guards and dependency notices are preserved.A WFM receiver can select Digital, choose a discovered audio program, and display reception state and station/program metadata. Aether owns USB and supplies IQ to the embedded decoder. Selected audio is 44.1 kHz stereo with explicit speaker conversion. Analog RDS, automatic analog/digital blending and multiple Digital decoders remain outside this proposal.
This PR now owns the actual default-OFF
ENABLE_HD_FMoption, all explicit OFF flags in AppImage/macOS/Windows publishing workflows and local installer/build entry points, and the matching build documentation. The analog parent no longer declares or passes the switch. Its existing ON implementation, internal identifiers and pinned decoder sources are preserved. Official releases keep the optional decoder OFF.The optional dependency/worker design and RF-footprint admission remain subject to their own review. Normal analog and Digital capacity limits remain distinct.
Validation
Exact head
a8112373, native Nobara / GCC 16.2.1 / Qt 6.12 / Release: OFF 15/15 passed (85.34 s), ON 17/17 passed (86.75 s), zero skips or failures. Both configurations exercise capture/registry/pipeline/model acceptance, PCM/rate conversion, DAX/TCI, persisted controls, WFM controls, broadcast overlay and the opt-in real SpectrumWidget geometry test. ON additionally exercises the native decoder and receiver. RTL is required; unrelated ASR, RADE and DFNR are disabled in this focused test configuration. This is offline integration evidence, not a full Digital release package or live-audio qualification.Generated/routing/registration, build-options and LogAnalyzer checks pass, as does the user-documentation production build. GitHub verifies every published commit. Both actual decoder CMake modules and pinned decoder source/manifests/compatibility files are byte-identical to the prior Digital head.
Historical offline and operator evidence remains in the discussion and prior revisions. It does not qualify this new head for release. Previously reported endpoint-empty observations, startup queue drops, allocation-failure handling and native-call cancellation limits remain unresolved; no new uninterrupted acoustic playback, sanitizer or capacity qualification is claimed.
No release, Store publication or Digital readiness change is requested.
73, Ozy K6OZY · Codex