Skip to content

release: prep v26.11.1 — Install update on Windows, macOS and Linux - #6961

Merged
ten9876 merged 4 commits into
mainfrom
release/v26.11.1
Nov 1, 2026
Merged

ten9876 merged 4 commits into
mainfrom
release/v26.11.1

Conversation

@ten9876

@ten9876 ten9876 commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Intent

Prepare v26.11.1 at cutoff ab47610d3: the six release files, a CHANGELOG section mapped from every PR in v26.10.4..ab47610d3, the README/ROADMAP refresh, and the Stable docs snapshot. Tag the resulting main commit 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/main at ab47610d3 (#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..ab47610d3 mapped 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.4 is an ancestor of main, 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

Judgment calls flagged for the maintainer

main CI at the cutoff

Release-pipeline firsts at this tag (for /tag-release)

Scope

file change
CMakeLists.txt project(AetherSDR VERSION 26.11.1)
README.md Current version line, plus the prose refresh above
AGENTS.md Current version line
CHANGELOG.md new [v26.11.1] — 2026-11-01 section; [Unreleased] stays and stays empty; history below byte-identical
packaging/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 README
ROADMAP.md cycle heading → post-v26.11.1, plus the prose refresh above
docs/user/versioned_docs/version-stable/**, docs/user/versioned_sidebars/version-stable-sidebars.json, docs/user/stable-version.json docs snapshot (tools/docs/snapshot_stable.py 26.11.1, 103 pages, its own commit). It adds the new aetherlab, radio-health-tools and waveform-environment pages.

Validation

Output of check_release_prep.py --mapping mapping.json: 30 checks, 2 FAIL, 1 WARN. All three are explained below.

release-prep check: v26.11.1  previous v26.10.4  base origin/main  tree /home/jeremy/agent-worktrees/46dbb397/wt-release-v26.11.1
PASS v26.10.4 is an ancestor of origin/main
PASS all six version spots say 26.11.1
     CMakeLists.txt, README.md, AGENTS.md, ROADMAP.md (cycle heading), CHANGELOG.md (newest section), packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml (first <release>)
PASS CHANGELOG heading date equals metainfo release date
     2026-11-01
PASS appstreamcli validate
     ✔ Validation was successful.
PASS metainfo <release> list is date-descending with unique versions
     26 entries, newest ('26.11.1', '2026-11-01')
PASS `## [Unreleased]` stays and stays empty
PASS `## [v26.11.1]` sits directly under `[Unreleased]`
PASS the previous section is `[v26.10.4]`
PASS CHANGELOG diff is exactly the inserted section
     73 lines inserted, history below byte-identical to origin/main
PASS new section opens with a `### <headline>`
     Install update on Windows, macOS and Linux · Remote Access on FLEX-6000 radios with QR sign-in · AetherLab, an experimen
FAIL intro sentence has the house shape
     `N merged changes from M human contributors, AetherClaude and K Dependabot updates within that total.`
PASS new section has a `### Contributors` block
PASS release_contents.py --check (citations, intro and Contributors counts)
     section: [v26.11.1]  PRs in range: 44  cited: 44
     PASS every PR in the range is cited
     INFO citations outside the range (3) — each must be an issue, an RFC or a deliberate prior-PR reference:
       #5304  RFC  closed  RFC: AetherSDR In-App Update Design
       #6226  RFC  closed  [RFC] Adopt the AetherSDR style guide as the visual canon (About window as the first implementation)
       #6471  RFC  closed  [RFC] AetherLab: RigExpert antenna analysis in a station workspace tab
     PASS intro counts: section says 44/11, mapping says 44/11
     PASS Contributors paragraph matches the mapping (11 entries)
     PASS first-time contributors: ['oz457', 'vu2cpl']
PASS code fences balance in README.md
PASS no duplicated table headers or doubled `---` in README.md
PASS code fences balance in ROADMAP.md
PASS no duplicated table headers or doubled `---` in ROADMAP.md
PASS code fences balance in CHANGELOG.md (new section)
PASS no duplicated table headers or doubled `---` in CHANGELOG.md (new section)
PASS every local link in README.md resolves
PASS every local link in ROADMAP.md resolves
PASS no heading removed from README/ROADMAP is still linked elsewhere
PASS Recently shipped `(vX)` markers run newest-first and lead with the new version
     5 entries marked (v26.11.1); versions present: v26.11.1
PASS Recently shipped intro names the current cycle (v26.11.x)
FAIL only the four current-version lines lose the `26.10.4` string outside CHANGELOG
     historical mentions must stay:
     - **In-app updates** ([RFC #5304](https://github.com/aethersdr/AetherSDR/issues/5304)) — v26.10.4 shipped the
       RFC #5304 (v26.10.4).
       unsigned amplifier/tuner meter handles (v26.10.4).
       (v26.10.4).
       recentering, and the G2's filter bank and speaker mute (v26.10.4).
       scrolling for touch screens. RFC #6775 (v26.10.4).
       Qt TLS plugin that disabled SmartLink, update checks and downloads (v26.10.4).
       "label": "26.10.4"
PASS diff touches no src/, tests/, third_party/ or .github/workflows/ path
PASS all six release files are in the diff
WARN files beyond the six (each needs a reason in the PR body's scope table)
     docs/user/stable-version.json
     docs/user/versioned_docs/version-stable/aetherlab.md
     docs/user/versioned_docs/version-stable/automation-bridge-and-mcp.md
     docs/user/versioned_docs/version-stable/callsign-lookup.md
     docs/user/versioned_docs/version-stable/cw-decoder.md
     docs/user/versioned_docs/version-stable/dvk-panel.md
     docs/user/versioned_docs/version-stable/generated/tci-commands.md
     docs/user/versioned_docs/version-stable/hermes-lite-2.md
     docs/user/versioned_docs/version-stable/kat500-tuner-control.md
     docs/user/versioned_docs/version-stable/keyboard-shortcuts.md
     docs/user/versioned_docs/version-stable/low-bandwidth-connections.md
     docs/user/versioned_docs/version-stable/memory-channels.md
     docs/user/versioned_docs/version-stable/menu-reference.md
     docs/user/versioned_docs/version-stable/midi-controller-mapping.md
     docs/user/versioned_docs/version-stable/mqtt-station-automation.md
     docs/user/versioned_docs/version-stable/net-scheduler.md
     docs/user/versioned_docs/version-stable/panadapter-controls.md
     docs/user/versioned_docs/version-stable/radio-health-tools.md
     docs/user/versioned_docs/version-stable/support-and-logging.md
     docs/user/versioned_docs/version-stable/tailscale-remote-access.md
     docs/user/versioned_docs/version-stable/tci-server.md
     docs/user/versioned_docs/version-stable/troubleshooting.md
     docs/user/versioned_docs/version-stable/ulanzi-dial.md
     docs/user/versioned_docs/version-stable/updates.md
     docs/user/versioned_docs/version-stable/waveform-environment.md
     docs/user/versioned_docs/version-stable/windows.md
     docs/user/versioned_docs/version-stable/workspace-canvas.md
     docs/user/versioned_sidebars/version-stable-sidebars.json
PASS git diff --check
INFO maturity wording per family across README / ROADMAP / new CHANGELOG section — read these against each other
     Hermes-Lite 2  README    early, experimental
     Hermes-Lite 2  ROADMAP   experimental, supported
     Hermes-Lite 2  CHANGELOG -
     Icom           README    early, experimental, supported
     Icom           ROADMAP   early, supported, transmit confirmation
     Icom           CHANGELOG -
     ANAN           README    experimental, receive-only, supported
     ANAN           ROADMAP   experimental, receive-only
     ANAN           CHANGELOG -
     RTL-SDR        README    experimental, receive-only, supported
     RTL-SDR        ROADMAP   experimental, receive-only
     RTL-SDR        CHANGELOG -
30 checks: 2 FAIL, 1 WARN
  • FAIL "intro sentence has the house shape": a false positive. The check requires the literal …human contributors, AetherClaude and…, but AetherClaude and Dependabot have no commits in this range, so the sentence says 44 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.
  • FAIL "only the four current-version lines lose 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.
  • WARN extra files: the docs snapshot, listed in the scope table.
  • Docs: npm ci && npm run build in docs/user succeeded, and node tools/docs/test_log_rules.mjs passed 767 checks for 49 rules.
  • AetherLab's entry follows feat(aetherlab): Add AetherLab Vector Network Analyzer core #6481 and its user guide: each acquisition, cancellation or error attempts the analyzer stop and closes USB, physical RF silence is unverified, radio TX is not inhibited, sessions save to JSON (there is no CSV export), and the feature is an experimental proof of concept with hardware sweeps qualified on one Stick Pro 108 on macOS (README, ROADMAP and the CHANGELOG headline, intro and entry).
  • FLEX-6000 Remote Access is qualified as not yet run end to end from AetherSDR in the README and ROADMAP, as it is in the CHANGELOG (feat(tailnet-shim): Remote Access on FLEX-6000 radios, as a legacy waveform. Principle VII. #6945).
  • No configure, build or test run. This is metadata, and CI builds it.

After merge: tag the resulting main commit, not this branch.

🤖 Generated with Claude Code

ten9876 and others added 2 commits November 1, 2026 13:55
…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
ten9876 requested a review from a team November 1, 2026 21:56
@ten9876
ten9876 requested a review from a team as a code owner November 1, 2026 21:56

@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.

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.

  1. [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 attempts off and 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). Production AntennaAnalyzerModel::deadlineExpired also 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:32 and CHANGELOG.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 ## Intent heading; the existing Summary already provides the substance.

What survived the checks:

  • Independently mapped v26.10.4..ab47610d3 through 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>
@ten9876

ten9876 commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

Addressed in aa7852f06:

  • [P2] RF-off claim (CHANGELOG.md:33): replaced with the suggested wording. Each acquisition, cancellation or error now attempts an analyzer stop command and closes USB, and physical RF silence is stated as unverified.
  • Nit, qualification: AetherLab is now called experimental, a USB proof of concept, with hardware sweeps qualified on one Stick Pro 108 on macOS. This is in the CHANGELOG entry, and "experimental" is also in its headline clause, the intro, the README highlight and the ROADMAP Recently shipped entry. Nothing says the Linux UI or build is unsupported.
  • Nit, ## Intent: added to the PR body. The Validation section is refreshed with the re-run at the new head: still 30 checks, 2 FAIL and 1 WARN, the same known items explained in the body.

main is still ab47610d3, so nothing to fold in.

@w5jwp w5jwp left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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)

  1. AetherLab has no CSV export, and this is the one to fix before the tag. CHANGELOG.md:33 says "raw CSV and JSON export" and README.md:32 says "CSV/JSON export". AetherLabWidget::saveSession() (src/gui/AetherLabWidget.cpp:605) offers only aetherlab-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).

  2. CHANGELOG.md:33 says "The radio connection stays live" without "Radio TX is not inhibited". aa7852f0 added 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."

  3. README states FLEX-6000 Remote Access without the caveat the CHANGELOG carries. README.md:40 says the Tailscale node "carries AetherSDR to a FLEX-6000, FLEX-8000 or Aurora radio", and ROADMAP.md:387 lists 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, and waveform uninstall behaviour 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.

  4. packaging/linux/…metainfo.xml:21-22 contradicts 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>
  5. Approved RFC #6561 appears nowhere in ROADMAP.md. It's open and has carried RFC Approved since 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 against label:rfc didn'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.

  6. 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.
  7. CHANGELOG.md:37 says these windows have "their own window and taskbar entry", and #6931 deliberately doesn't. #6931 says memory-channels.md "makes no taskbar claim, because Windows gives an owned window no taskbar button", and MemoryDialog is created with MainWindow as 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).

  8. CHANGELOG.md:60 omits a side effect of #6897. A saved CW/CWL preset in the old non-straddling form (for example 300: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).

  9. CHANGELOG.md:29 says "installs a 63 KB agent". That's the package; #6950 and radio-health-tools.md say about 110 KB on the radio, which is the number that matters on a FLEX-6000 (automated pass).

Before merge

  • Full Suite on ab47610d is 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 /__w at 100%. The parent 9fb0ece9, in progress at your cutoff, has since finished green.
  • Checks on this head: Static checks has passed, and build, check-macos, check-windows and the docs build were still running when I posted. These runs were created at 22:04 UTC, after main'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.1 on a clean ab47610d. All of versioned_docs, the sidebars, stable-version.json, versions.json and rules.json match the PR exactly, at 103 pages.
  • Release checker: check_release_prep.py with my own mapping gives the body's result on aa7852f0, 30 checks with 2 FAIL and 1 WARN, and I agree with both FAIL explanations apart from nit 6. aa7852f0 touches only CHANGELOG.md, README.md and ROADMAP.md, so the snapshot result carries over from 1be8037f.
  • CHANGELOG facts: for each bullet, I checked every backticked name, number and version against the PR bodies it cites. Only 5 seconds and 1001 points didn'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: --install over 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.4 outside CHANGELOG is historical (ROADMAP "v26.10.4 …" mentions), a worked example, or the metainfo's previous entry.
  • Commit and range: v26.10.4 is an ancestor of main, the branch's merge base is ab47610d, and main hadn'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 the 26.10.4 strings in linux_install_test are 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 medium ran. 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 validate wasn't re-run; @ten9876's review and the body both report it passing.

@w5jwp

w5jwp commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

@ten9876, my review above has no blockers on aa7852f0, but two points in the AetherLab entry are worth fixing before the tag, because the CHANGELOG section can't be edited afterwards:

  1. There's no CSV export. CHANGELOG.md:33 says "raw CSV and JSON export" and README.md:32 says "CSV/JSON export", but AetherLabWidget::saveSession() only writes JSON (src/gui/AetherLabWidget.cpp:605).
  2. CHANGELOG.md:33 leaves out "Radio TX is not inhibited". It says "The radio connection stays live", while the docs page puts that warning in a yellow banner (aetherlab.md:52). Suggested wording: "The radio connection stays live and radio TX is not inhibited; a radio tab returns to it."

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>
@ten9876

ten9876 commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

@w5jwp, thanks. I worked all nine nits in c2a016b1b. Each fix was checked against the code or docs it cites. check_release_prep.py gives the same result at the new head (30 checks, the 2 known FAILs, 1 WARN), appstreamcli validate passes, and git diff --check is clean.

  1. No CSV export. AetherLabWidget::saveSession() writes aetherlab-session.json only (src/gui/AetherLabWidget.cpp:605). The CHANGELOG now says "with markers and Save session… to JSON", and the README says "JSON session export".
  2. TX not inhibited. Changed to your wording: "The radio connection stays live and radio TX is not inhibited; a radio tab returns to it." This matches aetherlab.md:20 ("does not inhibit radio TX").
  3. FLEX-6000 caveat. The README highlight now reads "…to a FLEX-8000 or Aurora radio behind CGNAT, and to a FLEX-6000 as a legacy waveform (not yet run end to end from AetherSDR)". The ROADMAP Recently shipped entry carries the same qualifier, so all three files agree.
  4. metainfo. The description now says "seven noise-reduction engines" and "a TCI server". That matches README.md:29 and the seven methods in AetherRxProfiles.cpp.
  5. RFC [RFC] Radio connection workspace with Locations, operator profiles and SmartLink accounts #6561. By maintainer decision it goes In flight in ROADMAP (approved, implementation open in Radio connection workspace with Locations, operator profiles and SmartLink accounts #6885, nothing shipped). The README Roadmap list mirrors it.
  6. Body. The trim is 31 entries (8/9/8/6), now stated in the body. The v26.10.4 comparison is corrected: its intro named its Dependabot update, and this range has no bots at all. By maintainer decision, the checker's zero-bot intro shape is fixed in a separate PR rather than here.
  7. Taskbar. Changed to "canon workspaces in windows of their own". Memory Channels is an owned window (MainWindow.cpp:5061), so the taskbar claim is dropped for all four.
  8. fix(hl2): aetherd offers slice.setFilter for DSB, CW, CWL and FM, whose cuts reach the detector. Principle VIII. #6897 side effect. The entry now says a saved CW/CWL preset in the old form that doesn't straddle the carrier, such as 300:800, is dropped when the preset row loads.
  9. Agent size. The entry now reads "a 63 KB package (about 110 KB on the radio)".

The scope table no longer lists docs/user/versions.json, which is unchanged. Full Suite at the cutoff: attempt 2 of run 41351482051 is still running, and the parent 9fb0ece95 is green. The body says so.

@ten9876
ten9876 requested review from NF0T, jensenpat and rfoust November 1, 2026 22:10
@ten9876
ten9876 enabled auto-merge (squash) November 1, 2026 22:10
@ten9876
ten9876 merged commit 9151bb0 into main Nov 1, 2026
14 checks passed
@ten9876
ten9876 deleted the release/v26.11.1 branch November 1, 2026 22:33

@aethersdr-agent aethersdr-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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..ab47610d3 has 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 → oz457 noreply, Ozy → Ozy311, Robbie Foust → rfoust. Every #NNNN cited in the chapter is a commit in that range. None is borrowed from a still-open PR (for example #6958 agc_gain and #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 ./*.md relative link in version-stable/ resolves to a file in the snapshot, including the new pages and vfo-widget.md#mode-tab. All three newly listed sidebar ids have files. Build docs site is green at c2a016b. Spot-checked one factual claim against source: TCP 48994 in radio-health-tools.md matches kRadioHealthPort in src/core/RadioHealthPackage.h:27.
  • Text that looked corrupted in the review diff. Apply ${PR_DIFF} Recreate, &#124;Z&#124;, Support ${PR_DIFF} Diagnostics and the sign-off all read correctly in the checkout (Apply & Recreate, &#124;, 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:85 and :94. Both are false positives: they are the four-part hotfix version strings 26.7.4.1 and 26.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

@aethersdr-agent

Copy link
Copy Markdown
Contributor

Cisco CodeGuard — static analysis of this PR (2 finding(s))

  • [LOW] CS-PII-IP — PII detected: ip_address in packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml /tmp/aetherclaude/pr-6961/packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:85
  • [LOW] CS-PII-IP — PII detected: ip_address in packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml /tmp/aetherclaude/pr-6961/packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:94

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

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