Skip to content

release: prep v26.10.4 — the Updates window and an automatic update check - #6786

Merged
ten9876 merged 4 commits into
mainfrom
release/v26.10.4
Oct 26, 2026
Merged

ten9876 merged 4 commits into
mainfrom
release/v26.10.4

Conversation

@ten9876

@ten9876 ten9876 commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Intent

After this merges, main carries v26.10.4's version in all six release files, a CHANGELOG section that cites every change in v26.10.3..1076c60eb, a README and ROADMAP that match what shipped, and a Stable docs snapshot of today's Next. /tag-release v26.10.4 then tags the merged main commit. Non-goals: no source, test or CI change, and no fix for the red weekly sanitizer lane.

Summary

Release prep for v26.10.4: the six release files plus the Stable docs snapshot. Metadata and docs only, with no source, test or CI changes.

Cutoff: origin/main at 1076c60eb (#6728, merged 2026-10-25). Anything that merges after it is folded in before the tag.

72 merged changes from 13 human contributors and Dependabot (1). AetherClaude merged nothing this cycle. First-time contributors: @ve3nsv and @W5TSU, confirmed by searching for a prior merged PR per login before the v26.10.3 timestamp, not from author_association.

Changelog

Built from v26.10.3..1076c60eb mapped through the commit-to-PR API (repos/…/commits/<sha>/pulls), not from commit subjects: 72 PRs and no direct commits, every one cited in the section. v26.10.3 is on main, so nothing is excluded. release_contents.py flagged #6558 as a possible prep (PREP?). It is the CI change that deploys the docs at release time and belongs in the range.

The notes lead with the in-app update work (RFC #5304): the update check at launch (at most once every 24 hours) and its UPDATE badge (#6715), the Updates window (#6717) and firmware in that window (#6718), with the manifest, stager and Windows swap helper described as built but not yet wired to an Install button. They also cover SmartSDR 4.3 Noise Floor Range (#6660), CW profiles (#6668), APD and meter-handle fixes, the Retina pan cap (#6728), RF-KIT RF2K-S (#6596), the Icom SCROLL-F panadapter (#6688), ANAN-G2 band-pass filters (#6673), the Windows TLS upgrade fix (#6687), touch gestures (#6772) and the typed slice and panadapter lifecycle (#6619, #6621, #6628). Numbers in the section come from the PR bodies.

Docs refresh, not just version strings

Judgment calls flagged for the maintainer

Known failing on main at the cutoff: weekly sanitizer lane

The main CI on 1076c60eb is green: Full Suite, CI, CodeQL, CodeQL Code Quality and System Libraries Canary. The weekly sanitizer run of 2026-10-24 (40096133374) is red, and this prep does not fix it:

  • ASan + UBSan: firmware_install_model_test, rtl_model_acceptance_test, weather_radar_loading_legendsFollowDisplayedSourcesAndCoverageNeedsNoNetwork_test, kpa500_advanced_widget_test, nrs_level_range_test and dax_iq_rate_limits_test (timeout) across the two lanes, with a stack-use-after-return and a stack-buffer-underflow report.
  • TSan: data race reports, including one on a vptr (ctor/dtor vs. virtual call).

The release ships with these unresolved.

Scope

file change
CMakeLists.txt project(AetherSDR VERSION 26.10.4)
README.md Current version line, plus the prose refresh above
AGENTS.md Current version line
CHANGELOG.md new [v26.10.4] — 2026-10-25 section; [Unreleased] stays and stays empty; history below byte-identical
packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml <release version="26.10.4" date="2026-10-25"/> first in <releases>
ROADMAP.md cycle heading → post-v26.10.4, 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/user/src/components/LogAnalyzer/rules.json docs snapshot (its own commit), plus the Log Analyzer line-citation refresh

Validation

Output of check_release_prep.py --mapping mapping.json: 30 checks, 2 FAIL (both explained), 1 WARN.

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

🤖 Generated with Claude Code

ten9876 and others added 2 commits October 25, 2026 18:35
…heck. Principle VIII.

Version spots, the v26.10.4 CHANGELOG section mapped through the
commit-to-PR API (72 PRs, all cited), and the README/ROADMAP refresh.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ten9876
ten9876 requested review from a team as code owners October 26, 2026 01:36
@ten9876
ten9876 enabled auto-merge (squash) October 26, 2026 01:36

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

This prep meets its stated intent: prepare v26.10.4 at cutoff 1076c60eb, with consistent version metadata, release notes derived from the merged PR range, refreshed README/ROADMAP, and a generated Stable docs snapshot. There is no linked closing issue; I reconstructed intent from ## Summary because the body has no ## Intent section. Reviewed head: 4dc8fad7777cd1620e4ee757570f0afd211298e2.

Scope

File/group Change Claimed? Verdict
CMakeLists.txt, AGENTS.md Current version → 26.10.4 Yes In scope; version-only edits
packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml New release version/date Yes In scope; validates
CHANGELOG.md 72-line release section Yes In scope for release prep; older history byte-identical
README.md Current version, hardware/features, in-flight summary Yes Disclosed release refresh
ROADMAP.md Cycle, implementation progress, RFC list, shipped entries Yes Disclosed release refresh; maintainer's #5304 comments support In flight placement
Stable docs tree/sidebar, stable-version.json, Log Analyzer rules.json Snapshot and Stable link promotion Yes Re-running the snapshot produces no tracked diff

Everything in the diff is explained by release prep. Both commits have the same authored date and concern release prep/snapshot; no unrelated commit or source/test/CI change was found. The body's scope claims hold up. No new runtime public surface, maturity promotion, or preference change is introduced here. CHANGELOG edits are appropriate in this release-prep PR.

Blockers

None found in the proposed diff.

Nits — non-blocking

  1. docs/user/src/components/LogAnalyzer/rules.json:97: source citations retain 23 moved line numbers. For example, gui-registration-refused cites RadioModel.cpp:7502 but its message is now at :7524. node tools/docs/test_log_rules.mjs passes 767 checks but prints these moves. Refreshing with node tools/docs/test_log_rules.mjs --update would keep the release's source links accurate. This drift predates the prep and does not affect rule matching.
  2. PR description ## Summary (corresponding release purpose at CHANGELOG.md:11): add the template's ## Intent section. The current Summary makes intent clear, so this is only a template nit.

Verification and attempts to break the claims

  • Independently mapped v26.10.3..1076c60eb using the commit-to-PR API: 72 PRs, zero direct commits, all 72 cited, 13 humans plus one Dependabot update. Per-author counts and first-time contributors @ve3nsv/@W5TSU agree. The four other changelog citations are RFCs. #6558 is a docs-deployment change, not a release prep to exclude.
  • Re-ran check_release_prep.py with that mapping: reproduced 30 checks, 2 FAIL, 1 WARN. The two failures are the checker demanding the literal AetherClaude attribution despite zero contributions, and rejecting removal of the obsolete CTR2 paragraph plus advancement of the Stable version label. Inspection supports the body's explanations. All six version locations, dates, local links, changelog history, and diff whitespace pass. Network-enabled AppStream validation also passes when run with network access; its initial sandbox DNS failures occurred identically on the base metadata.
  • Re-ran snapshot_stable.py 26.10.4: 100 pages and no tracked changes. Ran npm ci and npm run build: successful production docs build. Log Analyzer: 767/767 checks across 49 rules, with the citation drift noted above.
  • Checked the release-progress claims against referenced PRs/RFC comments, including update phases versus the still-unwired application Install button, CTR2 USB/wide reports, ANAN filters, and the Icom scope limitation (already documented in the Stable guide). These are documentation checks, not a re-certification of every shipped hardware behavior. No separately invocable code-review skill was available. No C++ build, CTest, mutation test, or GUI/bridge session was run: this diff changes metadata/docs only and adds/modifies no test or runtime implementation. No application instance or live radio was touched.
  • CI uses pull_request merge-result builds. Earliest head run creation: 2026-10-26T01:36:20Z; current main is still 1076c60eb, dated 2026-10-25T21:50:41Z, so there is no stale-main gap at review time. Branch protection has strict: false. Static checks and Docs pass; required build, check-windows, and check-macos remain in progress.

Recommendation: Needs maintainer decision

The metadata/docs prep is sound with the nits above; this review is a COMMENT, not an approval or a merge authorization. The disclosed weekly sanitizer run 40096133374 really is red: its logs contain stack-use-after-return, stack-buffer-underflow, data races and a vptr race. Those are pre-existing release risks, not regressions introduced by this prep, and I did not reproduce or establish that they are fixed on the cutoff. Jeremy should explicitly decide whether to ship with those unresolved findings, and the required platform checks must finish before an ordinary merge. Tag the merged main commit, and recheck the cutoff/snapshot if main advances.

ten9876 and others added 2 commits October 25, 2026 18:43
…10.4. Principle VIII.

`node tools/docs/test_log_rules.mjs --update`: 23 citations had moved.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…parts 2 and 3, and two docs citations. Principle VIII.

The automatic check is one single-shot timer per launch, gated to once
every 24 hours (MainWindow_Menus.cpp:2323), not a daily repeat. RFC #6209
is still open, so its parts are named rather than "completed". The IC-9700
is named as unverified beside its SCROLL-F support. Two troubleshooting.md
citations in the Log Analyzer rules move to lines 109 and 119, where their
text now is.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ten9876
ten9876 merged commit 9efd0fb into main Oct 26, 2026
14 checks passed
@ten9876
ten9876 deleted the release/v26.10.4 branch October 26, 2026 02:06

@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, and correctly so — this is the release-prep PR for v26.10.4, which AGENTS.md describes as its own workflow rather than something needing an issue or RFC. Reviewed against the release-prep contract in AGENTS.md "Version and release files" instead. It satisfies all five rows of that table, and the four things release prep can plausibly get wrong (a missed version pin, a stale docs snapshot, invented or mis-cited release notes, a broken link) all came back clean when I checked them mechanically.

One note on framing: the task prompt describes @ten9876 as a "community contributor." He is the Project Maintainer, so the ROADMAP curation calls in this PR (retiring the CTR2 in-flight entry, which RFCs sit in the awaiting-implementation list) are his to make, not deviations to flag.

Scope

49 files. Every one is explained by release prep. Grouped:

Group Files Claimed? Verdict
The five canonical version pins CMakeLists.txt, README.md, AGENTS.md, CHANGELOG.md, packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml Yes In scope — all five bumped, none missed
Cycle heading + docs version label ROADMAP.md:10, docs/user/stable-version.json Yes In scope (AGENTS.md names the ROADMAP heading explicitly)
v26.10.4 release notes CHANGELOG.md:11-81 Yes In scope — this is the only legitimate reason to touch this file, and it is that reason
Roadmap/README prose for what shipped README.md, ROADMAP.md Yes In scope
Log Analyzer citation refresh docs/user/src/components/LogAnalyzer/rules.json Yes (commit d91d004) In scope
Stable docs snapshot 42 files under docs/user/versioned_docs/version-stable/ Yes (commit 4dc8fad) In scope
Stable sidebar docs/user/versioned_sidebars/version-stable-sidebars.json Yes In scope — adds updates, matching sidebars.js:159

No source changes, no CI changes, no new public surface, no removed guards. Nothing in the diff is unexplained, and nothing a release bump should have touched is absent.

Security audit

Ran the security-audit subagent over the two flagged files. All six CodeGuard hits are false positives, and none of the flagged content is introduced by this PR:

  • rules.json:88 CS-PII-DL-1 — "The radio refused the connection (for example F3000001)". The Flex client gui registration error code; letter+7-digits by coincidence. Byte-identical on main.
  • rules.json:89 CS-VLN-SSRF-HEX — Code 0xf3000001 usually means every GUI client slot is taken. A hex error code in a display-only explanation string; the analyzer only evaluates match.substring/match.regex.
  • rules.json:744 and :1071 CS-VLN-PATH-UNC — the \\ pairs are JSON escapes for single-backslash regex atoms (\(, \w, \., \d), not a \\server\share prefix.
  • metainfo.xml:84/:93 CS-PII-IP — version="26.7.4.1" and version="26.6.1.1", four-component hotfix tags that are dotted-quad in shape only. These two are the clearest tell that the scanner is reporting line numbers the diff moved, not content it wrote: on main they sit at 83 and 92, pushed down one by the new 26.10.4 row.

Credit: security-audit (CodeGuard). No findings.

Blockers

None.

Nits

  • ROADMAP.md — the CTR2 controller relay in-flight entry is deleted outright rather than moved to a completed section. The graduation looks right (USB now works on stock Lynovation v1.02.00+), but one live caveat loses its home: docs/user/versioned_docs/version-stable/ctr2-proxy.md:148 still warns "On Windows, update AetherSDR first: AetherSDR releases from before the faster link cannot relay firmware that supports it there." Non-blocking, and a maintainer's call either way.
  • docs/user/static/img/screens/firmware-update-group.png is now referenced by no doc in either docs/ or versioned_docs/version-stable/. #6718 orphaned it when it rewrote firmware-update.md; this PR only propagates that into the snapshot. Cleanup for some other PR, not this one.

What I tried to break

Findings below are reasoned from the head checkout at /tmp/aetherclaude/pr-6786 and from git log v26.10.3..HEAD; I have no build or test run.

  • "The version bump inverts an update-check test." The most specific way this PR could break the suite: tests/tests.cmake:4730,4747 point UPDATE_RELEASE_FIXTURE at the real v26.10.3 release JSON, and UpdatesWindow.cpp:404 compares a release against QCoreApplication::applicationVersion(). If that current version were compiled in from PROJECT_VERSION, bumping to 26.10.4 would make the fixture no longer newer and flip every "a newer release lights the badge" assertion. It is not: update_checker_test.cpp:24, updates_window_test.cpp:66,159,199 and the per-case overrides at :128,218,238 all call setApplicationVersion() explicitly. The tests are immune to the bump. Attack held.
  • "A version pin was missed." Grepped 26\.10\.3 across *.md *.json *.xml *.plist *.iss *.nsi *.rc *.py *.js *.yml *.ts *.sh and CMakeLists.txt. Every surviving hit is either a historical statement (correctly left alone per AGENTS.md "Leave every historical mention alone"), a test fixture keyed to the real v26.10.3 release, or tools/test_build_update_manifest.py asserting on literal tags. No live pin left behind. No [vX]: link-definition block exists at the foot of CHANGELOG.md, so none is missing.
  • "The stable snapshot drifted from next." Compared docs/user/docs/ against docs/user/versioned_docs/version-stable/ file-by-file: identical file sets, and zero content differences across all 42 docs. Also grepped the snapshot for leftover /next/ links — none remain, and the one docs: path rewritten in rules.json resolves to a real anchor (networked-icom.md:174). Every /img/ reference in the snapshot resolves to a file under static/.
  • "The line-number refresh in rules.json is approximate." Script-verified all 91 source citations against the head tree: every file exists, every line is in range, and every text string is present on exactly that line. 0 mismatches.
  • "The release notes are padded or invented." Cross-checked against history. 76 commits since v26.10.3, minus this PR's 4 = 72, matching the notes' "72 merged changes" exactly. Of the 60 commits carrying a trailing (#NNNN), every single PR number appears in the notes — none omitted. Author tallies match one-for-one (Jeremy 35 − 4 prep = 31 ✓, rfoust 9, NF0T 9→8… all 13 humans + one Dependabot ✓). The three "uncited" PRs I first suspected (#5160, #6053, #6168) turned out to be issue numbers mid-subject whose PRs (#6630, #6631, #6688) are all cited.
  • "A contributor is mis-tagged." Two commits carry no PR number at all; the notes attribute them to #6679 and #6613. Read both — #6679 is "Fix IC-705 preamp cycling above 74.8 MHz" by @Ozy311, #6613 is "Retain read-only Flex processing-chain and IARU metadata" by @rfoust. Both correct. Resolved Nick - WØNY → @nreed97 via read_issue(6668) rather than guessing from the name. The first-timer line names only @ve3nsv and @W5TSU; they are the only two contributors with exactly one commit in the available history (@on8st has 154, @jensenpat 122, @WA8PAM 4, @nreed97 2) — correct, subject to the repo's shallow graft at 2026-07-22.
  • "An RFC was removed from the awaiting list prematurely." #4667 (band-plan usage schema) is dropped from the not-yet-designed list on the strength of #6573. read_issue(4667) confirms it is closed. #5304 correctly moves from that list into In flight.
  • Couldn't check: whether the prose claims about runtime behavior (the 15 s / 24 h check cadence, the 3840 px cap, the 74.8 MHz preamp boundary) match the shipped code — those landed in 72 already-reviewed PRs, and re-verifying them is a re-review of the cycle, not of this diff. CI is green on 30c9cbc for all four required checks (build, check-windows, check-macos, Static checks) plus Build docs site, which is the check that would catch a broken docs link or sidebar reference.

No socket-owning tests are added, modified or removed by this PR — it touches no test sources at all.

Recommendation

Approve. This is a careful, mechanically-correct release prep: all five version pins agree, the stable snapshot is byte-identical to next, all 91 Log Analyzer citations resolve exactly, and the release notes' counts and attributions reconcile against git log without a single discrepancy. The two nits are cosmetic and neither needs to hold the tag. Next step is the maintainer's call on whether the CTR2 Windows wide-report caveat wants a line somewhere in the roadmap before the entry disappears.

Thanks — the notes are unusually well-reconciled for a 72-change cycle.


🤖 aethersdr-agent · cost: $8.9976 · model: claude-opus-5

@aethersdr-agent

Copy link
Copy Markdown
Contributor

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

  • [MEDIUM] CS-VLN-SSRF-HEX — Vulnerability: CS-VLN-SSRF-HEX in docs/user/src/components/LogAnalyzer/rules.json /tmp/aetherclaude/pr-6786/docs/user/src/components/LogAnalyzer/rules.json:89
  • [HIGH] CS-VLN-PATH-UNC — Vulnerability: CS-VLN-PATH-UNC in docs/user/src/components/LogAnalyzer/rules.json /tmp/aetherclaude/pr-6786/docs/user/src/components/LogAnalyzer/rules.json:744
  • [HIGH] CS-VLN-PATH-UNC — Vulnerability: CS-VLN-PATH-UNC in docs/user/src/components/LogAnalyzer/rules.json /tmp/aetherclaude/pr-6786/docs/user/src/components/LogAnalyzer/rules.json:1071
  • [HIGH] CS-PII-DL-1 — PII detected: drivers_license in docs/user/src/components/LogAnalyzer/rules.json /tmp/aetherclaude/pr-6786/docs/user/src/components/LogAnalyzer/rules.json:88
  • [LOW] CS-PII-IP — PII detected: ip_address in packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml /tmp/aetherclaude/pr-6786/packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:84
  • [LOW] CS-PII-IP — PII detected: ip_address in packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml /tmp/aetherclaude/pr-6786/packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:93

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: $9.1160 · model: claude-opus-5

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

RFC #5304 release-integration review only: the v26.10.4 release metadata and updater documentation accurately distinguish the shipped check/window/firmware UI from self-install functionality that was still unwired. No new actionable release-integration finding. The independently reproduced firmware close race is reported on its introducing PR #6718, not duplicated here.

Scope Claimed? Assessment
CMake/README/AGENTS/AppStream/CHANGELOG/ROADMAP release metadata Yes v26.10.4 pins and updater rollout description agree
Stable docs, sidebar/version metadata, Log Analyzer refresh Yes Explicit release snapshot scope
Other release-note subjects Yes Outside this RFC-specific review; not represented as independently revalidated

Verified mechanically at this exact head: all 100 docs/user/docs pages have byte-identical Git blobs under versioned_docs/version-stable; the updater and firmware guides are included. Version declarations in CMake, README, AGENTS, AppStream and the CHANGELOG agree on 26.10.4, with release date 2026-10-25. The diff adds no runtime updater source, test or CI behavior. Source/history review confirms the release wording does not promise an already-wired in-app AetherSDR installer.

Limits: this is not a re-audit of all 72 released changes, a complete release-prep/tag audit, a rerun of Docusaurus or the weekly sanitizers, or release qualification. The prep's explicitly disclosed failing weekly sanitizer run remains historical evidence, not a green claim from this review. Recommendation: COMMENT on merged history; no additional RFC-specific follow-up requested here.

Reviewed head 30c9cbc6e8be4b2fdde5c35481b645633ba331ad, recorded base 1076c60ebfed61498fa2a57de1fd0d295753d19a, and relevant integrated paths at current main 539bdd7c292466ea7fffe1bf1fda1989e43aca19. Current-main governance was loaded; the immutable head was rechecked before delivery. Historical required checks (build, check-windows, check-macos, Static checks) are successful in GitHub metadata; these are the historical PR runs, not a rerun of the current-main full suite. GitHub reports every commit in this PR verified with reason valid.


73, Ozy K6OZY
GPT-6 · effort and billing telemetry unavailable

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