Repository navigation
release: prep v26.10.4 — the Updates window and an automatic update check - #6786
Conversation
…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
left a comment
There was a problem hiding this comment.
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
docs/user/src/components/LogAnalyzer/rules.json:97: source citations retain 23 moved line numbers. For example,gui-registration-refusedcites RadioModel.cpp:7502 but its message is now at :7524.node tools/docs/test_log_rules.mjspasses 767 checks but prints these moves. Refreshing withnode tools/docs/test_log_rules.mjs --updatewould keep the release's source links accurate. This drift predates the prep and does not affect rule matching.- PR description
## Summary(corresponding release purpose atCHANGELOG.md:11): add the template's## Intentsection. 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..1076c60ebusing 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.pywith 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. Rannpm ciandnpm 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_requestmerge-result builds. Earliest head run creation:2026-10-26T01:36:20Z; current main is still1076c60eb, dated2026-10-25T21:50:41Z, so there is no stale-main gap at review time. Branch protection hasstrict: false. Static checks and Docs pass; requiredbuild,check-windows, andcheck-macosremain 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.
…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>
There was a problem hiding this comment.
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:88CS-PII-DL-1 —"The radio refused the connection (for example F3000001)". The Flexclient guiregistration error code; letter+7-digits by coincidence. Byte-identical onmain.rules.json:89CS-VLN-SSRF-HEX —Code 0xf3000001 usually means every GUI client slot is taken. A hex error code in a display-onlyexplanationstring; the analyzer only evaluatesmatch.substring/match.regex.rules.json:744and:1071CS-VLN-PATH-UNC — the\\pairs are JSON escapes for single-backslash regex atoms (\(,\w,\.,\d), not a\\server\shareprefix.metainfo.xml:84/:93CS-PII-IP —version="26.7.4.1"andversion="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: onmainthey sit at 83 and 92, pushed down one by the new26.10.4row.
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:148still 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.pngis now referenced by no doc in eitherdocs/orversioned_docs/version-stable/. #6718 orphaned it when it rewrotefirmware-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,4747pointUPDATE_RELEASE_FIXTUREat the real v26.10.3 release JSON, andUpdatesWindow.cpp:404compares a release againstQCoreApplication::applicationVersion(). If that current version were compiled in fromPROJECT_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,199and the per-case overrides at:128,218,238all callsetApplicationVersion()explicitly. The tests are immune to the bump. Attack held. - "A version pin was missed." Grepped
26\.10\.3across*.md *.json *.xml *.plist *.iss *.nsi *.rc *.py *.js *.yml *.ts *.shandCMakeLists.txt. Every surviving hit is either a historical statement (correctly left alone perAGENTS.md"Leave every historical mention alone"), a test fixture keyed to the real v26.10.3 release, ortools/test_build_update_manifest.pyasserting on literal tags. No live pin left behind. No[vX]:link-definition block exists at the foot ofCHANGELOG.md, so none is missing. - "The stable snapshot drifted from next." Compared
docs/user/docs/againstdocs/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 onedocs:path rewritten inrules.jsonresolves to a real anchor (networked-icom.md:174). Every/img/reference in the snapshot resolves to a file understatic/. - "The line-number refresh in
rules.jsonis approximate." Script-verified all 91sourcecitations against the head tree: everyfileexists, everylineis in range, and everytextstring 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 —
#6679is "Fix IC-705 preamp cycling above 74.8 MHz" by @Ozy311,#6613is "Retain read-only Flex processing-chain and IARU metadata" by @rfoust. Both correct. ResolvedNick - WØNY→ @nreed97 viaread_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.#5304correctly 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
30c9cbcfor all four required checks (build,check-windows,check-macos,Static checks) plusBuild 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
|
Cisco CodeGuard — static analysis of this PR (6 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: $9.1160 · model: claude-opus-5 |
Ozy311
left a comment
There was a problem hiding this comment.
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
Intent
After this merges,
maincarries v26.10.4's version in all six release files, a CHANGELOG section that cites every change inv26.10.3..1076c60eb, a README and ROADMAP that match what shipped, and a Stable docs snapshot of today's Next./tag-release v26.10.4then tags the mergedmaincommit. 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/mainat1076c60eb(#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..1076c60ebmapped 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.3is onmain, so nothing is excluded.release_contents.pyflagged #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
src/core/backends/and the seven NR methods inAetherRxProfiles.cppstill match.label:rfc: [RFC] Band plans conflate preferred mode with usage — six segments mislabelled digi-only, and the schema that caused it #4667 (closed by feat(bandplan): segment usage notes; fix all-modes rows painted digi-only (#4667). Principle IV. #6573) and RFC: AetherSDR In-App Update Design #5304 (now In flight) leave. [RFC] Compact Memory drawer sizing and icon-revealed live search #6677, [RFC] AetherModem instances, fixed RX assignment, and a receive-only APRS iGate #6690, [RFC] RF-KIT applet: optional TUNE button, ATU indicator, Error banner and one-click RESET #6712, [RFC] ANAN-G2: diversity reception on the synchronized DDC0/DDC1 pair #6725 and [RFC] Title bar radio tabs: the three most recent radios, every other radio in a drawer (amends RFC #4764) #6742 join. Approved RFCs ([RFC] AetherLab: RigExpert antenna analysis in a station workspace tab #6471, [RFC] Radio connection workspace with Locations, operator profiles and SmartLink accounts #6561) stay off the list per its own rule.(v26.10.4)entries.tools/docs/snapshot_stable.py 26.10.4): 100 pages intoversioned_docs/version-stable, its sidebar,stable-version.json, and the Log Analyzer's/next/links moved to Stable inrules.json. The Log Analyzer's 23 driftedsrc/line citations are refreshed withtest_log_rules.mjs --update, and its twotroubleshooting.mdcitations, which--updatedoes not re-anchor, are moved to lines 109 and 119 by hand.npm ci && npm run buildsucceeds andnode tools/docs/test_log_rules.mjspasses 767 checks for 49 rules.Judgment calls flagged for the maintainer
RFC Approvedlabel, because Phases 1–3 shipped implementation this cycle. Maintainer's call.Known failing on
mainat the cutoff: weekly sanitizer laneThe
mainCI on1076c60ebis 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:firmware_install_model_test,rtl_model_acceptance_test,weather_radar_loading_legendsFollowDisplayedSourcesAndCoverageNeedsNoNetwork_test,kpa500_advanced_widget_test,nrs_level_range_testanddax_iq_rate_limits_test(timeout) across the two lanes, with astack-use-after-returnand astack-buffer-underflowreport.The release ships with these unresolved.
Scope
CMakeLists.txtproject(AetherSDR VERSION 26.10.4)README.mdAGENTS.mdCHANGELOG.md[v26.10.4] — 2026-10-25section;[Unreleased]stays and stays empty; history below byte-identicalpackaging/linux/io.github.aethersdr.aethersdr.metainfo.xml<release version="26.10.4" date="2026-10-25"/>first in<releases>ROADMAP.mddocs/user/versioned_docs/version-stable/**,docs/user/versioned_sidebars/version-stable-sidebars.json,docs/user/stable-version.json,docs/user/src/components/LogAnalyzer/rules.jsonValidation
Output of
check_release_prep.py --mapping mapping.json: 30 checks, 2 FAIL (both explained), 1 WARN.appstreamcli validate. The metainfo list is date-descending, 25 entries.[Unreleased]stays empty.[v26.10.4]sits directly under it. The CHANGELOG diff is exactly the inserted 72 lines; history below is byte-identical.---.git diff --checkis clean. The diff touches nosrc/,tests/,third_party/or.github/workflows/path.AetherClaude and. AetherClaude merged nothing in this range, so the intro reads "from 13 human contributors and one Dependabot update", as v26.10.3's did. The counts check passes.26.10.3": the two extra lines are the snapshot'sstable-version.jsonlabel (expected for every snapshot) and the removed CTR2 In flight paragraph's "v26.10.3 adds…" sentence, which leaves with the item marked shipped.cmakeconfigure reportsCMAKE_PROJECT_VERSION=26.10.4. No 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