Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .claude/skills/release-prep/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,10 @@ time:
```

It replaces the snapshot, its sidebar and the version label
(`docs/user/stable-version.json`); the build is its check. It is its own
(`docs/user/stable-version.json`), and rewrites the Log Analyzer's `/next/`
rule links in `docs/user/src/components/LogAnalyzer/rules.json` to Stable
for every page the snapshot now has; the build and
`node tools/docs/test_log_rules.mjs` are its checks. It is its own
commit (`docs(user): Stable docs snapshot for vX.Y.Z. Principle VIII.`),
and its paths show up as `WARN` extras in step 5: list them in the scope
table as "docs snapshot". Re-run it when you fold in a PR that changed
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1688,6 +1688,7 @@ target_link_libraries(aetherdesktop_support PUBLIC

add_executable(AetherSDR
src/main.cpp
src/QtPlatformChoice.cpp # start-up log lines: the Qt platform plugin and any fallback
${GUI_SOURCES}
${RESOURCES}
${DFNR_RESOURCES}
Expand Down
9 changes: 6 additions & 3 deletions docs/user/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ needs an entry in `sidebars.js`.
There is one snapshot. Edit `docs/` only: the snapshot is replaced, never
edited, by `tools/docs/snapshot_stable.py`, which `/release-prep` runs for
every release. It copies `docs/` and the evaluated `sidebars.js` into the
snapshot and sets the label:
snapshot, sets the label, and points the Log Analyzer's `/next/` rule links
at Stable for every page the snapshot now has:

```sh
python3 tools/docs/snapshot_stable.py 26.10.2
Expand Down Expand Up @@ -139,8 +140,10 @@ every release with a detached signature made with the release key.
checks a log or support bundle in the browser against
`src/components/LogAnalyzer/rules.json`. Each rule cites the source line that
writes the message it matches and links the fix: `/<page>#<heading>` on
Stable, or `/next/<page>#<heading>` for a page only Next has. Test the rules
with:
Stable, or `/next/<page>#<heading>` for a page only Next has.
`snapshot_stable.py` turns each `/next/` link whose page is in the new Stable
snapshot into a Stable link, so users of the release land on its docs. Test the
rules with:

```sh
node tools/docs/test_log_rules.mjs
Expand Down
17 changes: 16 additions & 1 deletion docs/user/docs/bnr-gpu-noise-removal.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,25 @@ You are on macOS, or using a build compiled without BNR (`-DENABLE_NVIDIA_AFX=OF

### The download fails

The connection dropped, or there isn't enough free disk space for the pack.
The connection dropped or stalled for 30 seconds, or there isn't enough free disk space for the pack. The log shows `NvidiaAfxPack: install failed:` with the reason.

1. Check your internet connection.
2. Make sure about 1 GB of disk space is free.
3. Click the **Download** button again. Components that finished downloading are kept, so the download resumes.

### The download fails with "checksum mismatch"

A downloaded file is not the one this version of AetherSDR expects: it was altered on the way, or the server holds a different file. Downloading it again fetches the same file.

1. Try again from a different network; a proxy or security software can alter downloads.
2. If it still fails, file a bug report with your log.

### The download finishes but BNR is not installed

AetherSDR could not unpack the files, or the unpacked pack is incomplete. The log shows `NvidiaAfxPack: install failed:` followed by `extract failed`, `assembled pack missing`, `could not install into` or `install verification failed`.

1. On Linux, install `unzip` and `zstd`: AetherSDR unpacks the pack with `unzip` and `tar --zstd`.
2. Make sure about 1 GB of disk space is free.
3. Click the **Download** button again.

### BNR turns off when you change mode
Expand Down
1 change: 1 addition & 0 deletions docs/user/docs/generated/log-categories.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,5 @@ These are the logging categories listed in **Help → Support & Diagnostics...**
| Icom Scope | `aether.icom.pan` | Icom spectrum scope: sweep frames, division reassembly, bounds |
| Icom Link | `aether.icom.link` | Icom backend link state: connect/disconnect, model resolution, capability publication |
| Icom Credentials | `aether.icom.cred` | Icom credential storage and retrieval (no secret values are logged) |
| BNR (NVIDIA AFX) | `aether.nvafx` | BNR GPU noise removal: runtime pack download and install failures, network transfer errors, filter load errors |
| System Info | `aether.sysinfo` | Startup hardware/capability inventory: OS, CPU model + SIMD features, RAM, and the speech-engine ISA baseline check (#4986). A few lines once per launch |
7 changes: 7 additions & 0 deletions docs/user/docs/gpu-rendering.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@ The graphics adapter AetherSDR found is a software rasteriser (llvmpipe, WARP, S
1. If your computer has more than one adapter, open **Display** and pick the real GPU under **SYSTEM → GPU:**.
2. Restart AetherSDR; the choice takes effect on the next launch.

### AetherSDR runs on XWayland in a Wayland session

Qt could not load its Wayland platform plugin, so it fell back to the next plugin in `QT_QPA_PLATFORM`, usually `xcb` (XWayland). The log shows `Platform: Qt fell back from "wayland" to "xcb"`; the line before it names the plugin in use.

1. If you built AetherSDR yourself, install your distribution's Qt 6 Wayland package. The AppImage includes the plugin.
2. Start AetherSDR from a terminal: Qt prints why the plugin did not load there, not in AetherSDR's log.

## See also

- [Panadapter Controls](./panadapter-controls.md)
Expand Down
9 changes: 9 additions & 0 deletions docs/user/docs/low-bandwidth-connections.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,15 @@ Network jitter or lost packets are reaching the audio buffer.
2. Leave **Smooth packet loss** on.
3. Use Opus compression and low bandwidth mode.

### Audio drops out or the waterfall has gaps

Packets from the radio are lost, or arrive out of order, on the way to the computer. Wi-Fi, a busy switch or a VPN are the usual causes. The log then shows `PanadapterStream: VITA-49 sequence errors on <stream> stream`, at most once every 10 seconds for each stream.

1. Open **Tools → Network Diagnostics...** to see which streams lose packets.
2. Connect the computer to the network by cable instead of Wi-Fi.
3. If the VITA-49 RX buffer says it was capped, raise `net.core.rmem_max` (see [The VITA-49 RX buffer says it was capped](#the-vita-49-rx-buffer-says-it-was-capped)).
4. On a remote link, use Opus compression and low bandwidth mode.

### Low bandwidth mode has no effect

It takes effect only when you connect, and never on a FlexRadio found **On This Network**.
Expand Down
1 change: 1 addition & 0 deletions docs/user/log-samples/clean.log
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[09:14:02.101] INF default: GpuSelector: render GPU -> Auto (system default — no override)
[09:14:02.101] INF default: QtAudioBackendGuard: PipeWire context OK; Qt's default backend left in place
[09:14:02.101] INF default: Platform: Qt platform plugin "xcb" (QT_QPA_PLATFORM unset, Qt default)
[09:14:02.140] INF aether.sysinfo: OS: Ubuntu 24.04.3 LTS kernel 6.8.0-85-generic arch x86_64
[09:14:02.140] INF aether.sysinfo: CPU: AMD Ryzen 7 5800X 8-Core Processor features: SSE42 AVX AVX2 FMA F16C BMI2
[09:14:02.140] INF aether.sysinfo: RAM: 32012 MB
Expand Down
8 changes: 8 additions & 0 deletions docs/user/log-samples/rules/bnr-checksum-mismatch.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[09:14:02.101] INF default: GpuSelector: render GPU -> Auto (system default — no override)
[09:14:02.101] INF default: QtAudioBackendGuard: PipeWire context OK; Qt's default backend left in place
[09:14:02.140] INF aether.sysinfo: OS: Ubuntu 24.04.3 LTS kernel 6.8.0-85-generic arch x86_64
[09:14:02.140] INF aether.sysinfo: CPU: AMD Ryzen 7 5800X 8-Core Processor features: SSE42 AVX AVX2 FMA F16C BMI2
[09:14:02.140] INF aether.sysinfo: RAM: 32012 MB
[09:14:02.141] INF aether.sysinfo: Speech engine CPU baseline: x86-64-v3
[09:14:02.152] DBG default: Starting AetherSDR 26.10.1
[10:02:11.418] WRN aether.nvafx: NvidiaAfxPack: install failed: checksum mismatch for AFX runtime (corrupt or stale mirror)
9 changes: 9 additions & 0 deletions docs/user/log-samples/rules/bnr-download-failed.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[09:14:02.101] INF default: GpuSelector: render GPU -> Auto (system default — no override)
[09:14:02.101] INF default: QtAudioBackendGuard: PipeWire context OK; Qt's default backend left in place
[09:14:02.140] INF aether.sysinfo: OS: Ubuntu 24.04.3 LTS kernel 6.8.0-85-generic arch x86_64
[09:14:02.140] INF aether.sysinfo: CPU: AMD Ryzen 7 5800X 8-Core Processor features: SSE42 AVX AVX2 FMA F16C BMI2
[09:14:02.140] INF aether.sysinfo: RAM: 32012 MB
[09:14:02.141] INF aether.sysinfo: Speech engine CPU baseline: x86-64-v3
[09:14:02.152] DBG default: Starting AetherSDR 26.10.1
[09:15:40.212] WRN aether.nvafx: NvidiaAfxPack: transfer failed: AFX runtime: Network unreachable
[09:15:40.212] WRN aether.nvafx: NvidiaAfxPack: install failed: download failed (AFX runtime): Network unreachable
8 changes: 8 additions & 0 deletions docs/user/log-samples/rules/bnr-install-failed.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[09:14:02.101] INF default: GpuSelector: render GPU -> Auto (system default — no override)
[09:14:02.101] INF default: QtAudioBackendGuard: PipeWire context OK; Qt's default backend left in place
[09:14:02.140] INF aether.sysinfo: OS: Ubuntu 24.04.3 LTS kernel 6.8.0-85-generic arch x86_64
[09:14:02.140] INF aether.sysinfo: CPU: AMD Ryzen 7 5800X 8-Core Processor features: SSE42 AVX AVX2 FMA F16C BMI2
[09:14:02.140] INF aether.sysinfo: RAM: 32012 MB
[09:14:02.141] INF aether.sysinfo: Speech engine CPU baseline: x86-64-v3
[09:14:02.152] DBG default: Starting AetherSDR 26.10.1
[10:05:37.920] WRN aether.nvafx: NvidiaAfxPack: install failed: extract failed: tar: unrecognized option '--zstd'
10 changes: 10 additions & 0 deletions docs/user/log-samples/rules/qt-platform-fallback.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[09:14:02.101] INF default: GpuSelector: render GPU -> Auto (system default — no override)
[09:14:02.101] INF default: QtAudioBackendGuard: PipeWire context OK; Qt's default backend left in place
[09:14:02.101] INF default: Platform: Wayland session, display presence connected -> QT_QPA_PLATFORM wayland;xcb
[09:14:02.101] INF default: Platform: Qt platform plugin "xcb" (QT_QPA_PLATFORM=wayland;xcb, set by AetherSDR)
[09:14:02.101] WRN default: Platform: Qt fell back from "wayland" to "xcb"; the first plugin in QT_QPA_PLATFORM did not load
[09:14:02.140] INF aether.sysinfo: OS: Ubuntu 24.04.3 LTS kernel 6.8.0-85-generic arch x86_64
[09:14:02.140] INF aether.sysinfo: CPU: AMD Ryzen 7 5800X 8-Core Processor features: SSE42 AVX AVX2 FMA F16C BMI2
[09:14:02.140] INF aether.sysinfo: RAM: 32012 MB
[09:14:02.141] INF aether.sysinfo: Speech engine CPU baseline: x86-64-v3
[09:14:02.152] DBG default: Starting AetherSDR 26.10.1
11 changes: 11 additions & 0 deletions docs/user/log-samples/rules/vita-sequence-errors.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[09:14:02.101] INF default: GpuSelector: render GPU -> Auto (system default — no override)
[09:14:02.101] INF default: QtAudioBackendGuard: PipeWire context OK; Qt's default backend left in place
[09:14:02.140] INF aether.sysinfo: OS: Ubuntu 24.04.3 LTS kernel 6.8.0-85-generic arch x86_64
[09:14:02.140] INF aether.sysinfo: CPU: AMD Ryzen 7 5800X 8-Core Processor features: SSE42 AVX AVX2 FMA F16C BMI2
[09:14:02.140] INF aether.sysinfo: RAM: 32012 MB
[09:14:02.141] INF aether.sysinfo: Speech engine CPU baseline: x86-64-v3
[09:14:02.152] DBG default: Starting AetherSDR 26.10.1
[09:14:05.130] INF aether.vita49: PanadapterStream: VITA UDP receive buffer requested=8388608 granted=8388608
[09:20:41.502] WRN aether.vita49: PanadapterStream: VITA-49 sequence errors on FFT stream 0x40000000: 1 in the last 396 s, 1 since the stream started (9402 packets received)
[09:20:51.733] WRN aether.vita49: PanadapterStream: VITA-49 sequence errors on FFT stream 0x40000000: 12 in the last 10 s, 13 since the stream started (9658 packets received)
[09:20:52.004] WRN aether.vita49: PanadapterStream: VITA-49 sequence errors on audio stream 0x04000008: 7 in the last 407 s, 7 since the stream started (17890 packets received)
8 changes: 7 additions & 1 deletion docs/user/src/components/LogAnalyzer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ const SUMMARY_FIELDS = [
['cpu', 'CPU'],
['ram', 'Memory'],
['gpu', 'Render GPU'],
['qtPlatform', 'Qt platform plugin'],
['radioModel', 'Radio model'],
['firmware', 'Radio firmware'],
];
Expand Down Expand Up @@ -131,7 +132,12 @@ export default function LogAnalyzer() {
<div className={styles.privacy} role="note">
<strong>Your log stays on your computer.</strong> The analysis runs entirely in
your browser. The file is never uploaded, and this page sends nothing anywhere.
AetherSDR already redacts addresses, serial numbers and passwords from its logs.
AetherSDR already masks personal details in its logs: IPv4 and MAC addresses (all but
the last part), IPv6 addresses, radio serial numbers (all but the last group),
passwords, tokens and keys (tokens and keys keep their first four characters), your home directory
and email addresses; and host names, names, locations and grid squares where a log
line labels them as such. Your callsign is kept on purpose, so a report can be
identified.
</div>

<h2>Find your log</h2>
Expand Down
Loading
Loading