Repository navigation
release: prep v26.11.1 — Install update on Windows, macOS and Linux - #6961
Conversation
…Principle VIII. Six-file release prep: version spots, the v26.11.1 CHANGELOG section, the metainfo release entry, and the README/ROADMAP refresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ten9876
left a comment
There was a problem hiding this comment.
Issue fit: no linked issue. There is no ## Intent heading; I reconstructed intent from Summary: prepare v26.11.1 at cutoff ab47610d3, refresh README/ROADMAP, and snapshot Stable docs. The diff delivers that release-only scope, but one release-note safety claim needs correction. Recommendation: Request changes at 1be8037ff035fe5dd7d1571a1a51acc97979f9f8. Posted as COMMENT because the authenticated reviewer is also the author and GitHub does not permit requesting changes on one's own PR.
| Scope | Change | Claimed? | Verdict |
|---|---|---|---|
CMakeLists.txt, AGENTS.md, AppStream metainfo |
Release version/date | Yes | In scope; consistent |
CHANGELOG.md |
New release section and contributor accounting | Yes | In scope; correction below |
README.md |
Version and feature/roadmap refresh | Yes | In scope |
ROADMAP.md |
Cycle, RFCs, shipped status and monthly rollover | Yes | In scope; judgment calls disclosed |
docs/user/stable-version.json, versioned_docs/version-stable/**, versioned_sidebars/version-stable-sidebars.json |
Generated Stable snapshot and label | Yes | In scope; reproducible |
Everything in the diff is explained by the release prep. Two same-day commits; no source/test/workflow changes, unrelated dependencies, new runtime public surface or weakened ratchets. This is the release-prep exception where CHANGELOG belongs. The maintainer-authored body explicitly flags the updates-shipped decision, monthly rollover and CI limitation; I found no basis to invent an autonomous design violation for those choices.
-
[P2] Remove the guaranteed analyzer-off claim —
CHANGELOG.md:33. “Every sweep ends with the analyzer off and USB closed” is stronger than the merged feature supports. #6481 explicitly states each acquisition/cancellation/error attemptsoffand closes USB, and that physical RF silence remains unverified. The docs this PR itself snapshots say “A successful Stop or USB close does not confirm RF silence” (docs/user/versioned_docs/version-stable/aetherlab.md:33–34). ProductionAntennaAnalyzerModel::deadlineExpiredalso has a terminal “RF-off unconfirmed” path (src/models/AntennaAnalyzerModel.cpp:328–339). This is an RF-emitting instrument, so the release must not turn an attempted shutdown into a guarantee. Replace that sentence with:Each sweep needs an explicit Connect and confirmation that the analyzer is isolated. Each acquisition, cancellation or error attempts an analyzer stop command and closes USB; physical RF silence remains unverified.
This finding is verified against the merged source/docs and #6481's evidence; no physical analyzer or RF emission was used in this review.
Non-blocking nits:
README.md:32andCHANGELOG.md:33: retain AetherLab's Experimental/proof-of-concept qualification and note that hardware USB sweeps were qualified on one Stick Pro 108 on macOS. The snapshot carries this accurately; the prominent summaries currently omit it. This does not mean the Linux UI/build is unsupported.- PR body: add the template's
## Intentheading; the existing Summary already provides the substance.
What survived the checks:
- Independently mapped
v26.10.4..ab47610d3through commit-to-PR metadata: 44 commits → 44 PRs, 0 direct commits, 11 human contributors, no bots. All 44 cited; all 11 contributor counts match. Prior merged-PR searches confirm only @oz457 and @vu2cpl as first-time contributors. The three out-of-range citations are closed RFCs #5304/#6226/#6471. Other release claims were compared with mapped PR bodies, including their disclosed hardware limits. - All six version spots agree on 26.11.1; heading/metainfo dates agree; AppStream validates; old CHANGELOG history is byte-identical. The 103 Stable pages exactly match source docs, and the evaluated sidebar matches its snapshot. No hand-edited snapshot divergence.
- Independently ran
npm ci && npm run build: success. Generated references pass, and Log Analyzer checks pass 767 checks/49 rules. The prep validator reproduces the disclosed 2 FAIL/1 WARN: its rigid bot-inclusive intro shape, removed historical strings from explicitly disclosed roadmap rollover/snapshot relabeling, and the documented extra snapshot files. These do not establish a release defect. - Base/head engine-boundary, touchpoint, capability-record and command-plane checks pass with byte-identical outputs. Whitespace checks pass. Independent parallel accounting and metadata audits completed; a separate code-review tool was unavailable.
Limits and CI: no app build, bridge session, sanitizer or hardware run for this metadata-only PR; those would not prove the disputed physical guarantee. PR Docs, Static checks, sanitizer-option configure and CodeQL pass; Linux/Windows/macOS builds remain running. The cutoff Full Suite run is currently in progress on its latest attempt; the body discloses its earlier disk-full failure and prior sanitizer failures. This review is not permission to bypass release/merge checks. Main remains ab47610d3 (21:20:07Z), earlier than the first head run (21:56:55Z; pull_request runs 21:56:58Z), so no newer-main gap was observed. Correct the RF-off claim, retain honest qualification, then finish the required CI and release checks before merge/tag.
…xperimental. Principle VIII. Each acquisition, cancellation or error attempts the analyzer stop command and closes USB; physical RF silence is unverified (#6481). README, ROADMAP and the CHANGELOG headline, intro and entry carry the Experimental / proof-of-concept qualification and the one-Stick-Pro-108-on-macOS hardware qualification the user guide states. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Addressed in
|
w5jwp
left a comment
There was a problem hiding this comment.
Issue fit: there's no linked issue, and none is expected for a release prep. The mechanics are right: the six release files move to 26.11.1, the counts are correct, and the Stable docs snapshot matches ab47610d. No blockers on aa7852f0. I'd prepared one against 1be8037f, the "every sweep ends with the analyzer off" guarantee, and aa7852f0 fixed it while I was finishing, so I'm posting this as a comment instead. The CHANGELOG's false CSV export claim (nit 1) is the one to fix before the tag, because that section can't be edited afterwards. The Full Suite re-check the body promises is still open.
Scope
| Group | Change | Claimed? | Verdict |
|---|---|---|---|
CMakeLists.txt, AGENTS.md, packaging/linux/…metainfo.xml |
Version and release entry | Yes | In scope; see nit 4 |
CHANGELOG.md |
73 lines inserted, history byte-identical | Yes | In scope; see nits 1, 2, 3 and 7 to 9 |
README.md, ROADMAP.md |
Version, content refresh, rollover trim | Yes | In scope; see nits 1, 3, 5 and 6 |
docs/user/versioned_docs/**, sidebars, stable-version.json |
Snapshot, in its own commit | Yes | In scope, identical to the tool's output |
Everything in the diff is explained by the release. No src/, tests/, third_party/ or workflow files change. The scope table's docs/user/versions.json isn't in the diff, because the tool rewrote it with the same content.
Blockers
None. CHANGELOG.md:33 now says each acquisition, cancellation or error "attempts an analyzer stop command and closes USB; physical RF silence remains unverified". I checked that against #6481, docs/user/versioned_docs/version-stable/aetherlab.md:33-34 and the "RF-off unconfirmed" paths in AntennaAnalyzerModel::deadlineExpired(), and all three agree.
Nits (non-blocking)
-
AetherLab has no CSV export, and this is the one to fix before the tag.
CHANGELOG.md:33says "raw CSV and JSON export" andREADME.md:32says "CSV/JSON export".AetherLabWidget::saveSession()(src/gui/AetherLabWidget.cpp:605) offers onlyaetherlab-session.json, and there's no CSV writer in the AetherLab GUI or model sources. #6481's "raw CSV" is the device's rows held inside the JSON. Both should say JSON session export, such as "with markers and Save session… to JSON" (automated pass, confirmed in the code). -
CHANGELOG.md:33says "The radio connection stays live" without "Radio TX is not inhibited".aa7852f0added the Experimental and qualification wording, but not this. The docs page puts this in a yellow banner (aetherlab.md:52), so the release note reads more reassuringly than the page. Appending it is enough: "The radio connection stays live and radio TX is not inhibited; a radio tab returns to it." -
README states FLEX-6000 Remote Access without the caveat the CHANGELOG carries.
README.md:40says the Tailscale node "carries AetherSDR to a FLEX-6000, FLEX-8000 or Aurora radio", andROADMAP.md:387lists it as shipped. The new CHANGELOG entry says "The install, Configure and Reset path has not yet been run against a FLEX-6000 from AetherSDR." #6945's evidence is one tester's report that the native shim worked on a FLEX-6400, with no measurements, andwaveform uninstallbehaviour unverified. The release-prep cross-file rule exists for this shape (#4872, "transmit unverified" against "Verified"). Either a short qualifier in the README, or a note in the body that you accept it for a highlight, would settle it. It's your call. -
packaging/linux/…metainfo.xml:21-22contradicts the README. It still says "six noise-reduction engines" and "TCI v2.0 server". The README says seven engines (README.md:29; the body checked seven against the tree) and this PR drops "TCI v2.0" from it. Both lines predate this PR, but this file is a release file and the description is what Flathub and AppStream show. One edit fixes both:<li>Aetherial Audio Channel Strip — unified RX/TX DSP suite with seven noise-reduction engines</li> <li>Multi-client (Multi-Flex) operation alongside SmartSDR and Maestro, plus SmartLink remote and a TCI server</li>
-
Approved RFC #6561 appears nowhere in
ROADMAP.md. It's open and has carriedRFC Approvedsince 2026-10-18. The release-prep rule says an approved RFC "moves up into the cycle". The body's "None leaves" is true of the Open RFCs list, because #6561 was never in it, so the check that compared the list againstlabel:rfcdidn't cover this case. This gap predates the PR. It needs an In flight or Queued line, or a note that it's deliberately left out. -
Two body statements are inaccurate.
- "The 26 v26.10.x entries leave ROADMAP.md": there are 31 (8 v26.10.1, 9 v26.10.2, 8 v26.10.3, 6 v26.10.4). The trim itself is right; only the number is off.
- "the same bot-less shape v26.10.4 used": that intro reads
72 merged changes from 13 human contributors and one Dependabot update within that total., so it isn't bot-less. Your reading of the FAIL still holds: this range has no bots, and the counts check passes. The checker's house-shape regex needs a zero-bot form, or the FAIL will return next time.
-
CHANGELOG.md:37says these windows have "their own window and taskbar entry", and #6931 deliberately doesn't. #6931 saysmemory-channels.md"makes no taskbar claim, because Windows gives an owned window no taskbar button", andMemoryDialogis created withMainWindowas parent (src/gui/MainWindow.cpp:5061). #6757 does claim a taskbar entry for FreeDV Reporter, so the sentence inherits a disagreement between PRs. "their own window" alone is safe. By reading; not run on Windows (automated pass). -
CHANGELOG.md:60omits a side effect of #6897. A saved CW/CWL preset in the old non-straddling form (for example300:800) is now dropped when the preset row loads. The user docs cover the rule (hermes-lite-2.md:108), but an upgrader reads the entry as purely additive (automated pass). -
CHANGELOG.md:29says "installs a 63 KB agent". That's the package; #6950 andradio-health-tools.mdsay about 110 KB on the radio, which is the number that matters on a FLEX-6000 (automated pass).
Before merge
- Full Suite on
ab47610dis being re-run (run 41351482051, attempt 2, in progress when I checked), so the body's red no longer describes the current state. The first attempt's failure was as described:ld: final link failed: No space left on device, with/__wat 100%. The parent9fb0ece9, in progress at your cutoff, has since finished green. - Checks on this head: Static checks has passed, and
build,check-macos,check-windowsand the docs build were still running when I posted. These runs were created at 22:04 UTC, aftermain's tip at 21:20, so they aren't stale.
Verified empirically
- Mapping: rebuilt from
commits/<sha>/pulls, separately from the PR. 44 commits map to 44 PRs, with the same per-author counts, summing to 44. Every PR is cited in the section. @oz457 and @vu2cpl have zero merged PRs before the v26.10.4 timestamp; the other nine logins all have prior merges. - Snapshot: ran
tools/docs/snapshot_stable.py 26.11.1on a cleanab47610d. All ofversioned_docs, the sidebars,stable-version.json,versions.jsonandrules.jsonmatch the PR exactly, at 103 pages. - Release checker:
check_release_prep.pywith my own mapping gives the body's result onaa7852f0, 30 checks with 2 FAIL and 1 WARN, and I agree with both FAIL explanations apart from nit 6.aa7852f0touches onlyCHANGELOG.md,README.mdandROADMAP.md, so the snapshot result carries over from1be8037f. - CHANGELOG facts: for each bullet, I checked every backticked name, number and version against the PR bodies it cites. Only
5 secondsand1001 pointsdidn't match literally, and both are correct (#6950 "every 5 s", #6481 "at most 1001 rows"). That filter checks tokens, not meaning, so it passed the RF-off sentence and every sentence nits 1, 7, 8 and 9 flag. I also read the behaviour-sensitive sentences against their bodies:--installover an existing install, the third failed self-test being final, and the first in-place update running from this release to the next (#6925, #6810, #6777). - Pipeline statements: the sanitizer lane failed on its last three scheduled runs, and the 25-asset count matches
/tag-release. - Open RFCs: all 47 listed RFCs are open and none carries
RFC Approved.
Tried to break, and it held
- Leftover versions: every remaining
26.10.4outside CHANGELOG is historical (ROADMAP "v26.10.4 …" mentions), a worked example, or the metainfo's previous entry. - Commit and range:
v26.10.4is an ancestor ofmain, the branch's merge base isab47610d, andmainhadn't moved at my last check, so nothing needs folding in yet. If something merges, the snapshot needs regenerating too. - Version-sensitive tests: tests take the version from
${PROJECT_VERSION}, and the26.10.4strings inlinux_install_testare fixtures, not the running version. - Rollover trim: only v26.10.x entries were removed, and nothing older was in the list.
Limits
- App not driven and nothing built: this PR changes no behaviour beyond the version string, and CI builds it. No radio or TX was involved.
- Automated pass and other reviews:
/code-review mediumran. I kept the findings credited above after checking them against the code and docs. I folded its TCI v2.0 point into nit 4, because #6957's review covers the rest. @ten9876's review found the RF-off sentence and the status gap, both now fixed. - Not checked: I compared most CHANGELOG sentences to PR bodies, not to the shipped code, beyond the sentences named above, so a body that was wrong would carry through.
appstreamcli validatewasn't re-run; @ten9876's review and the body both report it passing.
|
@ten9876, my review above has no blockers on
The other nits are in the review. |
… Remote Access, taskbar and metainfo claims. Principle VIII. - AetherLab saves a JSON session (no CSV export) and does not inhibit radio TX (#6481). - README and ROADMAP qualify FLEX-6000 Remote Access as not yet run end to end from AetherSDR, as the CHANGELOG entry does (#6945). - The canon workspaces are windows of their own; the taskbar claim is dropped, since Memory Channels is an owned window (#6931). - #6897's entry states that an old non-straddling CW/CWL preset is dropped on load; #6950's agent is 63 KB packaged, about 110 KB on the radio. - The metainfo description says seven NR engines and a TCI server, matching the README. - ROADMAP and README carry approved RFC #6561 as in flight (#6885 open). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@w5jwp, thanks. I worked all nine nits in
The scope table no longer lists |
There was a problem hiding this comment.
Issue fit
No linked issue. This is the maintainer's release-prep PR for v26.11.1, so I reviewed it against what it says it does: bump the version, write the v26.11.1 CHANGELOG chapter, refresh README and ROADMAP, update the AppStream metainfo, and snapshot the Stable user docs. The diff does all of that and nothing else. CHANGELOG.md is the right place for the release chapter here, since that is what release prep is for.
Scope
| File(s) | Change | Claimed? | Verdict |
|---|---|---|---|
CMakeLists.txt, AGENTS.md, README.md (version line), docs/user/stable-version.json |
26.10.4 → 26.11.1 | Yes | In scope |
CHANGELOG.md |
New [v26.11.1] chapter |
Yes | In scope |
README.md feature list and in-flight list, ROADMAP.md |
AetherLab added, TCI line now says 2.1, in-app updates moved from in flight to shipped, Radio connection workspace (RFC #6561) added, Recently shipped reset to v26.11.x, #6799/#6790/#6816 added to the RFC list | Yes | In scope |
packaging/linux/…metainfo.xml |
<release version="26.11.1">, "seven" NR engines, "a TCI server" |
Yes (c2a016b) | In scope |
docs/user/versioned_docs/version-stable/**, version-stable-sidebars.json |
Stable snapshot: new aetherlab, radio-health-tools and waveform-environment pages in the sidebar, plus edits to existing pages |
Yes (1be8037) | In scope |
Everything in the diff is explained by the release.
Blockers
None.
What I tried to break
- CHANGELOG counts and attribution. Base is
9efd0fb09(the v26.10.4 prep commit).9efd0fb09..ab47610d3has exactly 44 commits from 11 distinct authors. The per-author counts match the Contributors paragraph (17/8/6/4/2/2/1/1/1/1/1). I mapped each GitHub handle through its commit email: ON7OFF →oz457noreply, Ozy →Ozy311, Robbie Foust → rfoust. Every#NNNNcited in the chapter is a commit in that range. None is borrowed from a still-open PR (for example #6958agc_gainand #6954 NTP are correctly absent). - Hedges that should survive from merged PRs into the notes. The FLEX-6000 Remote Access entry says "has not yet been run against a FLEX-6000 from AetherSDR", and README says "not yet run end to end". Both match #6945's own test plan: there was a compatibility probe on 6300/6400/6700, and a tester installed the shim on a 6400 by hand. So the Stable doc's "It has run on a FLEX-6400" and the notes' qualifier don't contradict each other. The AetherLab entry also keeps its hedges: one Stick Pro 108, macOS, "physical RF silence remains unverified". Radio Health keeps "not yet run on a FLEX-6000", and licensing keeps "Not yet verified on a radio".
- Docs-site integrity. Every
./*.mdrelative link inversion-stable/resolves to a file in the snapshot, including the new pages andvfo-widget.md#mode-tab. All three newly listed sidebar ids have files.Build docs siteis green atc2a016b. Spot-checked one factual claim against source: TCP 48994 inradio-health-tools.mdmatcheskRadioHealthPortinsrc/core/RadioHealthPackage.h:27. - Text that looked corrupted in the review diff.
Apply ${PR_DIFF} Recreate,|Z|,Support ${PR_DIFF} Diagnosticsand the sign-off all read correctly in the checkout (Apply & Recreate,|,Support & Diagnostics,Jeremy KK7GWY & Claude). The${PR_DIFF}placeholders came from the review pipeline's rendering of the diff, not from the files. - CodeGuard (security-audit). CodeGuard flagged CS-PII-IP at
packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:85and:94. Both are false positives: they are the four-part hotfix version strings26.7.4.1and26.6.1.1. The file has no credentials, private hosts or external entities.
CI: at c2a016b, build, check-macos, check-windows, Static checks, Sanitizer option configures, Build docs site and CodeQL are all green. The deploy and PDF jobs were skipped, as they should be on a PR. This is documentation and version metadata only. I did not build or run anything; everything above comes from reading the code and running git queries against the head checkout. No socket tests are added or changed.
Recommendation
Approve. The notes are accurate for the commit range they describe, and they keep each merged PR's own limits. The version bump is consistent across CMake, AGENTS, README, metainfo and stable-version.json, and the docs snapshot builds. Next step: merge and tag v26.11.1.
🤖 aethersdr-agent · cost: $2.0867 · model: claude-opus-5-5
|
Cisco CodeGuard — static analysis of this PR (2 finding(s))
Automated static scan by Cisco DefenseClaw CodeGuard on the changed files. Advisory — some may be false positives; the review above verifies them. 🤖 aethersdr-agent · cost: $2.1503 · model: claude-opus-5-5 |
Intent
Prepare v26.11.1 at cutoff
ab47610d3: the six release files, a CHANGELOG section mapped from every PR inv26.10.4..ab47610d3, the README/ROADMAP refresh, and the Stable docs snapshot. Tag the resultingmaincommit afterwards with/tag-release.Summary
Six-file release prep for v26.11.1, plus the Stable docs snapshot. Metadata and docs only: no source, test or CI changes.
Cutoff:
origin/mainatab47610d3(#6848, merged 2026-11-01). Anything that merges after it is folded in before the tag.44 merged changes from 11 human contributors, AetherClaude (0) and Dependabot (0). First-time contributors: @oz457 and @vu2cpl. Both were confirmed by searching for a prior merged PR per login before the v26.10.4 timestamp, not from
author_association.Changelog
Built from
v26.10.4..ab47610d3mapped through the commit-to-PR API (repos/…/commits/<sha>/pulls), not from commit subjects: 44 PRs and 0 direct commits, every one cited in the section.v26.10.4is an ancestor ofmain, so nothing is excluded. The notes lead with Install update on Windows, macOS and Linux (#6777, #6927/#6930, #6810/#6891/#6925). Next come Remote Access QR sign-in and FLEX-6000 support (#6932, #6945, #6951), container environments and radio health tools (#6949, #6950), AetherLab (#6481), eight canon windows, and the TCI 2.1 changes.Numbers in the section come from the PR bodies. Bodies that disagree with themselves were kept out of the section: #6810 says 333 files plus 4 links where #6891 says 333 entries (329 + 4), #6858 says "four gaps" but lists five, and #6886 gives a 1–8 frame lookback against "at most 9 frames" lost. None of those numbers is quoted.
Docs refresh, not just version strings
label:rfc. [RFC] FFT FPS slider sets every open panadapter #6799 (FFT FPS sets every pan), [RFC] Radio tab: AT chip and quality-coloured status dot while adaptive frame-rate throttle is on #6790 (radio-tab AT chip) and RFC: Light TGXL STANDBY indicator amber (consistent with applet STANDBY key) #6816 (amber TGXL STANDBY) join. None leaves. Approved RFC [RFC] Radio connection workspace with Locations, operator profiles and SmartLink accounts #6561, which was in neither list, joins In flight (above).(v26.11.1)entries.Judgment calls flagged for the maintainer
main CI at the cutoff
ab47610d3: the first attempt failed because the runner's disk filled, not because a test failed. The link ofaetherd_pan_decode_testfailed withld: final link failed: No space left on device, and/__wwas at 100% (run 41351482051). Attempt 2 is in progress. The parent9fb0ece95finished green.mainshows whether those fixes hold, and this prep does not wait for it.Release-pipeline firsts at this tag (for
/tag-release).app.tar.zsttarballs (ci(update): publish the macOS app tarballs, sign them, and put macOS in the update manifest (RFC #5304 Phase 4). Principle VII. #6930). The asset set becomes 25 (ci(update): publish the macOS app tarballs, sign them, and put macOS in the update manifest (RFC #5304 Phase 4). Principle VII. #6930's count). Signing and the Update Manifest run with tarballs present for the first time..msixuploadis expected.Scope
CMakeLists.txtproject(AetherSDR VERSION 26.11.1)README.mdAGENTS.mdCHANGELOG.md[v26.11.1] — 2026-11-01section;[Unreleased]stays and stays empty; history below byte-identicalpackaging/linux/io.github.aethersdr.aethersdr.metainfo.xml<release version="26.11.1" date="2026-11-01"/>first in<releases>; the description says seven NR engines and a TCI server, matching the READMEROADMAP.mddocs/user/versioned_docs/version-stable/**,docs/user/versioned_sidebars/version-stable-sidebars.json,docs/user/stable-version.jsontools/docs/snapshot_stable.py 26.11.1, 103 pages, its own commit). It adds the newaetherlab,radio-health-toolsandwaveform-environmentpages.Validation
Output of
check_release_prep.py --mapping mapping.json: 30 checks, 2 FAIL, 1 WARN. All three are explained below.…human contributors, AetherClaude and…, but AetherClaude and Dependabot have no commits in this range, so the sentence says44 merged changes from 11 human contributors.. v26.10.4's intro still named its one Dependabot update; this range has no bot commits at all, so neither name appears. The counts check (release_contents.py --check) passes: 44/11, 11 Contributors entries, first-timers match.26.10.4": the removed lines are the In-app updates In flight entry and the v26.10.x Recently shipped entries, both removed by maintainer decision (above). No version string was replaced. The mentions inside the kept entries are untouched.npm ci && npm run buildindocs/usersucceeded, andnode tools/docs/test_log_rules.mjspassed 767 checks for 49 rules.After merge: tag the resulting main commit, not this branch.
🤖 Generated with Claude Code