Skip to content

release: prep v26.10.2 — a unified title bar, docs.aethersdr.com and remote operation over CGNAT - #6389

Merged
ten9876 merged 3 commits into
mainfrom
release/v26.10.2
Oct 11, 2026
Merged

ten9876 merged 3 commits into
mainfrom
release/v26.10.2

Conversation

@ten9876

@ten9876 ten9876 commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

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

Cutoff: origin/main at 46943eb3c (#6083, merged 2026-10-11). Anything that merges after it is folded in before the tag.

106 merged changes from 15 human contributors, AetherClaude (2) and Dependabot (0). First-time contributor: @dacacioa. This was confirmed by checking each login for a merged PR before the previous tag, not from author_association.

Changelog

The range v26.10.1..46943eb3c was mapped through the commit-to-PR API (repos/…/commits/<sha>/pulls), not from commit subjects. It holds 106 PRs and no direct commits, and every one is cited in the section. v26.10.1 is an ancestor of main, so nothing is excluded. #6083 merged before the branch was cut, so it is inside the range and needs no unmerged-PR banner.

The notes lead with:

Then come DVK import, FFT Smooth/De-comb, TCI tune and receiver events, RTL-SDR multi-receiver delivery, HL2 and ANAN-G2 state memory, the IC-7300MK2 fixes, the first clean sanitizer runs (stated beside #6350's TSan red) and Authenticode signing.

Numbers come from the PR bodies. "On upgrading" callouts cover the behavior changes the bodies flagged:

DeepFist (#5953, #6103) is described as applying only to ENABLE_DEEPFIST_EXPERIMENT builds.

Docs refresh, not just version strings

Judgment calls flagged for the maintainer

All of these were decided through AskUserQuestion:

Known failing on main

  • ctr2_hid_thread_port_test fails in the weekly TSan lane (runs of 2026-10-08 and 2026-10-10; [sanitizer] TSan weekly run failure (fp 55883e54f84e) #6350). main's CI and Full Suite were green at 414082197. The CHANGELOG headline and intro say so: the lanes achieved their first clean runs this cycle, and the test remains failing under TSan. This prep does not fix the test, and the release ships with it red in that lane.

Scope

file change
CMakeLists.txt project(AetherSDR VERSION 26.10.2)
README.md Current version line, plus the prose refresh above
AGENTS.md Current version line
CHANGELOG.md new [v26.10.2] — 2026-10-11 section; [Unreleased] stays and stays empty; history below byte-identical
packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml <release version="26.10.2" date="2026-10-11"/> first in <releases>
ROADMAP.md cycle heading → post-v26.10.2, 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 (tools/docs/snapshot_stable.py 26.10.2), in its own commit. This is the first snapshot since #6286.

Validation

Output of check_release_prep.py --mapping mapping.json at the branch head: 30 checks, 1 FAIL (explained below), 1 WARN (the snapshot files, listed in the scope table).

PASS v26.10.1 is an ancestor of origin/main
PASS all six version spots say 26.10.2
PASS CHANGELOG heading date equals metainfo release date
PASS appstreamcli validate
PASS metainfo <release> list is date-descending with unique versions
PASS `## [Unreleased]` stays and stays empty
PASS `## [v26.10.2]` sits directly under `[Unreleased]`
PASS the previous section is `[v26.10.1]`
PASS CHANGELOG diff is exactly the inserted section
PASS new section opens with a `### <headline>`
PASS intro sentence has the house shape
PASS new section has a `### Contributors` block
PASS release_contents.py --check (citations, intro and Contributors counts)
     PRs in range: 106  cited: 106; intro 106/15 matches; Contributors (16 entries) matches; first-time ['dacacioa']
     citations outside the range: #4764, #4861, #5468, #6192, #6226, #6271, #6332 (RFCs), #6238, #6350 (issues)
PASS code fences balance / no duplicated table headers or doubled `---` (README, ROADMAP, new section)
PASS every local link in README.md and 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
PASS Recently shipped intro names the current cycle (v26.10.x)
FAIL only the four current-version lines lose the `26.10.1` string outside CHANGELOG
     historical mentions must stay: "label": "26.10.1"
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 (the docs snapshot)
PASS git diff --check

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

🤖 Generated with Claude Code

ten9876 and others added 2 commits October 11, 2026 14:17
…remote operation over CGNAT. Principle VIII.

Six release files: version spots in CMakeLists.txt, README.md, AGENTS.md and
ROADMAP.md; the metainfo release entry; and the [v26.10.2] CHANGELOG section
written from the 106 PR bodies in v26.10.1..46943eb. README and ROADMAP
content refreshed for what landed this cycle.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
tools/docs/snapshot_stable.py 26.10.2: docs/user/docs/ becomes the Stable
snapshot (97 pages), its sidebar and version label follow, and Log Analyzer
rule links to pages in the snapshot point at Stable instead of /next/.
Checked with `npm ci && npm run build` in docs/user and
`node tools/docs/test_log_rules.mjs` (707 checks, 45 rules).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ten9876
ten9876 requested review from a team as code owners October 11, 2026 21:18
@ten9876 ten9876 self-assigned this Oct 11, 2026

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

Reviewed exact head d267d2dd90e61bb440f4dd1041c03219f804a498. Recommendation: Approve with nits, subject to the usual CODEOWNERS review. No closing issue is linked; this is the stated v26.10.2 release prep, and its version/date, roadmap choices and accepted #6350 TSan exception are explicitly disclosed as maintainer decisions. The metadata, release accounting and generated snapshot satisfy that intent. No new runtime implementation is introduced.

File/group Change claimed in body? Verdict
CMakeLists.txt, AGENTS.md, metainfo XML Yes: version/date In scope; 26.10.2 and 2026-10-11 agree
CHANGELOG.md Yes: new release notes In scope; complete range/citations and preserved history
README.md Yes: highlights/hardware/roadmap refresh In scope; experimental/hardware-validation qualifiers retained
ROADMAP.md Yes: cycle, shipped work, RFC tracking In scope; direction choices disclosed
Stable docs, sidebar and label Yes: generated snapshot In scope; exact current-docs copy, no manual snapshot edits detected
Log Analyzer rules.json Yes: Stable link migration In scope; exactly four /next -> Stable URL rewrites

The metadata-only checklist holds: no source/test/CI/dependency/default/protocol changes, no authored-date outlier, and CHANGELOG is appropriate for this release-prep PR.

Blockers

None found. The known TSan red is a disclosed, accepted release decision, not an undisclosed test regression introduced here.

Non-blocking nits

  1. Describe the sanitizer success historically — CHANGELOG.md:13, :15. The headline says “green sanitizer lanes” and the intro says “both weekly sanitizer lanes run clean,” but the PR correctly states that ctr2_hid_thread_port_test still fails TSan (#6350). The latest weekly run 38061328568 has ASan success and TSan failure; its log includes six race SUMMARY reports and 99% tests passed, 1 tests failed out of 694. The historical “ran green for the first time” at CHANGELOG.md:116 is supported. Preserve the accepted release decision, but make the public headline/intro equally precise. Replace the sentence beginning “Underneath” with:

    Underneath, both weekly sanitizer lanes achieved their first clean runs this cycle, but `ctr2_hid_thread_port_test` remains failing under TSan (#6350). Windows builds are Authenticode-signed, and every release keeps its debug symbols.

    Change the headline's “green sanitizer lanes” to “first green sanitizer runs.”

  2. Expand the stale-screenshot disclosure — docs/user/versioned_docs/version-stable/panadapter-controls.md:9, :35. The embedded panadapter.png still shows the old opaque gradient strip while the text describes the transparent header. #6386 already disclosed stale main-window/panadapter shots, but this prep's list names only four shots from the dialog PRs. Add those two to the release-prep body's stale-shot list, or recapture in the current docs workflow and regenerate the snapshot. This is inherited screenshot drift, not a faulty snapshot generator.

What was verified

  • Independently mapped v26.10.1 (8df6db2f7) through cutoff 46943eb3c using the commit-to-PR API: 106 commits -> 106 merged PRs, no direct/unresolved/excluded commits, 15 human contributors, two AetherClaude changes, zero Dependabot updates. Every PR is cited; all 16 contributor entries/counts match; pre-tag merged-PR history identifies only @dacacioa as first-time. The eight extra citations are seven RFCs and open issue #6238.
  • All six version spots and dates agree; AppStream validates; [Unreleased] stays empty; the prior CHANGELOG content is byte-identical. The mapped release validator reproduces 30 checks, one FAIL and one WARN: the FAIL is solely the generated Stable current-version label, and the WARN is solely the disclosed snapshot scope. The validator's historical-string rule predates that legitimate label; neither establishes a release defect. Running the same mapped validator on the six-file commit produced 29 checks, zero FAIL and zero WARN; the exact head was restored afterwards.
  • All 97 Stable files exactly match source docs, evaluated sidebar/versions match generator output, and the rule migration reproduces byte-for-byte. Log Analyzer: 707 checks / 45 rules pass on head and base; moved-line notices are identical and preexisting. Retaining the old snapshot while moving links to Stable fails four anchor checks, so the check detects the broken combination.
  • npm ci succeeded and the production docs build passed, validating Stable/Next links and anchors. The first build hit temporary-files quota; retry passed after freeing completed review artifacts. Generated references and diff whitespace checks passed. The 119-shot/63-illustrated-pages statement matches the manifest and page embeddings. Sampled feature claims were checked against cited PRs/source, including canon shortcuts, MTU limits and backend maturity/validation qualifications.
  • No application/bridge session, hardware or socket test was run: only release metadata and generated documentation changed. This review verifies release accounting and docs transformations, not fresh runtime or hardware certification of all 106 shipped changes. A model-invocable code-review skill was unavailable; manual and three independent audits were used.

Current main remains cutoff 46943eb3c (2026-10-11T20:56:06Z), so no post-cutoff fold-in is currently missing. PR head CI was created after it (21:18:45Z, pull_request workflows at 21:18:46Z); no stale-merge qualification currently applies, although protection has strict:false. All four required checks (Linux build, Windows, macOS and Static checks), plus Docs, are now green. Head signing is GitHub-verified. Formal approval, merge, and the subsequent main-commit tag remain the operator's decision; nothing was merged or tagged by this review.

@ten9876 ten9876 assigned ten9876 and unassigned ten9876 Oct 11, 2026
…itizer runs, and the ALC figure at 21.4 dB. Principle VIII.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ten9876

ten9876 commented Oct 11, 2026

Copy link
Copy Markdown
Collaborator Author

Both nits from the review at d267d2dd9 are fixed in 2f3339e71:

  1. Sanitizer wording (CHANGELOG.md:13, :15). The headline now says "first green sanitizer runs". The intro uses the suggested sentence: both weekly lanes achieved their first clean runs this cycle, but ctr2_hid_thread_port_test remains failing under TSan ([sanitizer] TSan weekly run failure (fp 55883e54f84e) #6350). The Project and packaging bullet's "ran green for the first time" is unchanged. While in the file, the fix(hl2): ramp the TX ALC gain inside the block. Principle VIII. #6245 ALC figure is corrected to the body's 21.4 dB.
  2. Stale screenshots. The PR body's stale-shot list now includes feat(gui): CanonApplet, CanonPan and CanonCanvas, and the panadapter as the first CanonPan with a transparent header over the spectrum. Principle VIII. #6386's panadapter shots (panadapter.png and the main-window captures with the old title strip). No recapture: that needs the live radio.

Proof: check_release_prep.py --mapping on 2f3339e71 gives the same result, 30 checks with 1 FAIL and 1 WARN. The FAIL is the snapshot's Stable label and the WARN is the snapshot files, both explained in the body. #6350 now appears among the citations outside the range as an open issue. Main is still at the cutoff 46943eb3c, so there is nothing to fold in.

@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 none is wanted: this is release prep, which AGENTS.md names as the one legitimate reason to touch CHANGELOG.md. Reviewed against AGENTS.md → "Version and release files", and all five required touchpoints plus the ROADMAP.md heading agree on 26.10.2:

row file state
1 CMakeLists.txt:10 — project(AetherSDR VERSION 26.10.2 …) ✅
2 README.md:13 — Current version: 26.10.2 ✅
3 AGENTS.md:252 — Current version: 26.10.2 ✅
4 CHANGELOG.md:11 — new section under ## [Unreleased] ✅
5 packaging/linux/…metainfo.xml:71 — <release version="26.10.2" date="2026-10-11"/> ✅
+ ROADMAP.md:10 — Current cycle: post-v26.10.2 ✅

Dates are consistent (CHANGELOG 2026-10-11 = metainfo date="2026-10-11" = today), and the historical-mention rule is respected: all 14 surviving 26.10.1 references in ROADMAP.md are statements about what landed in that release ("v26.10.1 landed M1", "(v26.10.1)"), not stale current-version claims.

Scope

Everything in the diff is explained by the release-prep contract. For the record, the file list in my brief was truncated — the PR is 83 files, not 29, and packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml was missing from the shown diff (it is row 5 of the table above, so it belongs here).

file / group change claimed? verdict
CMakeLists.txt, README.md, AGENTS.md, CHANGELOG.md, metainfo.xml the five version touchpoints yes ✅ in scope
ROADMAP.md cycle heading, per-family v26.10.2 paragraphs, shipped-RFC pruning, 4 new backlog entries yes ✅ in scope
README.md (feature prose) highlights, device list, maturity rows updated to shipped state yes ✅ in scope
docs/user/stable-version.json "label": "26.10.2" → feeds docusaurus.config.js:70 yes ✅ in scope
docs/user/versioned_docs/version-stable/** (76 files) Stable snapshot refresh yes (commit 2) ✅ byte-identical to docs/user/docs/ (diff -rq → 0 differences)
docs/user/src/components/LogAnalyzer/rules.json 4 × "/next/…" → "/…" yes ✅ in scope, and correct — see below

No files added or deleted (git diff --name-status HEAD~2 HEAD is all M), so versioned_sidebars/version-stable-sidebars.json correctly needs no change. No new public surface, no code changes, nothing removed that guards behaviour.

The rules.json edit is right, and machine-verified

docusaurus.config.js:63 sets lastVersion: 'stable', so Stable is served at / and Next at /next/. Those four rules pointed at pages that only existed on Next last release; the pages are now in the snapshot (e.g. bnr-gpu-noise-removal.md:88 The download fails with "checksum mismatch", gpu-rendering.md:120 AetherSDR runs on XWayland in a Wayland session), so flipping them to / is the correct move.

I resolved all 41 distinct docs: targets in rules.json against the Stable snapshot's slugs and heading anchors: every one exists, and zero /next/ references remain anywhere in docs/user/src or docs/user/versioned_docs. This is independently gated — tools/docs/test_log_rules.mjs check 5 validates /<page> against the Stable snapshot specifically, and it is green in the passing Build docs site job.

Security audit

Required by the harness; run via the security-audit subagent over both flagged files. All six CodeGuard findings are lexical false positives, and none sits on a line this PR changes — CodeGuard scanned hunk context, so pre-existing strings surfaced next to the four docs: edits.

  • rules.json:88-89 (CS-PII-DL-1 drivers_license, CS-VLN-SSRF-HEX) — "The radio refused the connection (for example F3000001)" / "Code 0xf3000001 usually means…". That is the FlexRadio GUI-client registration refusal code in prose. No URL, no fetch, no network sink anywhere in the file.
  • rules.json:744 and :1003 (CS-VLN-PATH-UNC ×2) — "regex": "… denoiser model \\(sm_\\w+/denoiser_48k\\.trtpkg\\) not found" and "regex": "version [\']GLIBC_2\.\d+' not found". The \pairs are JSON escaping of regex metacharacters, not a\server\share` UNC prefix, and these strings are match patterns — never opened as paths.
  • metainfo.xml:82 and :91 (CS-PII-IP ×2) — <release version="26.7.4.1" date="2026-07-27"/> and version="26.6.1.1". Four-component CalVer hotfix versions matched as dotted quads. The only line this PR adds to that file is :71.

Nothing to act on. Credit: security-audit (CodeGuard).

Blockers

None.

Nits

  • ROADMAP.md:318 — #5468 is left in the unapproved RFC list while the same release claims it shipped. The section header above it reads "waiting on a maintainer decision — not scheduled, and not approved for implementation", yet ROADMAP.md:120 and CHANGELOG.md both credit RFC #5468 for v26.10.2's RTL multi-receiver delivery, and the issue body carries Jeremy's conditional architecture approval. This PR pruned #4764 and #4861 from that list and promoted #6226/#6332/#4214 up into the cycle, so the omission looks accidental rather than deliberate. If the intent is "approved, partially delivered, remaining scope is capacity qualification", it belongs in the cycle above alongside the RTL entry; if it is genuinely still awaiting a decision, the shipped-work citations should say so. Either way worth one line, not worth blocking.

  • Release sequencing for the Authenticode claim (docs/user/versioned_docs/version-stable/installation.md:75 and :141). The docs now assert signing unconditionally:

    The Windows builds are Authenticode-signed: the setup, AetherSDR.exe and the other AetherSDR files by Jeremy Fielder…

    That matches the implementation (windows-installer.yml:692-693 signs $oursToSign with a description and $othersToSign without), but the gate at windows-installer.yml:55 is github.ref_type == 'tag' && (startsWith(ref_name, 'v') || startsWith(ref_name, 'signtest-')). So this PR's green CI does not exercise signing at all, and v26.10.2 is the first v* tag to run it. The path was clearly rehearsed — signtest-6288, signtest-6307 … signtest-6307e tags exist — so this is low risk, just ordering: since the docs site deploys from this same commit, confirming the signing job on the v26.10.2 tag before the docs go live avoids a window where published docs promise a signature the published installer lacks.

  • tools/docs/gen_reference.py:57 — the drift check does not cover the snapshot. OUT_DIR = REPO / "docs" / "user" / "docs" / "generated", so gen_reference.py --check validates only the Next copies. Harmless this time (the trees are byte-identical, and I confirmed generated/log-categories.md matches src/core/LogManager.cpp:117 and :138 string-for-string for the two new aether.network / aether.nvafx rows), but a future release prep could snapshot a stale generated page and CI would not notice. A --check pass over versioned_docs/version-stable/generated/ would close it.

What I tried to break

Findings below are reasoned from the checkout at /tmp/aetherclaude/pr-6389; I have no build and ran nothing, so the dynamic claims are cross-checked against source constants and the green CI jobs rather than reproduced.

  • Fabricated or stale release notes — the classic defect here. Extracted every #NNNN from the new CHANGELOG section and compared both directions against git log v26.10.1..HEAD~2. Nothing is fabricated: the range is exactly 106 commits, matching "106 merged changes" verbatim. 19 citations initially looked unmerged, but all resolve — 17 of the 106 commit subjects carry no (#PR) suffix at all (e.g. fix(hl2): remember TUNE power, FFT AVG, the receiver set…), so the CHANGELOG cites those by issue number. In the other direction, every "uncited" number is the fix-target issue inside a subject whose PR number is cited (…ALC bar ends at its value's tick (#6228)… (#6236)). No shipped change is missing an entry.
  • Contributor credits. git log --format='%an' over the range gives 16 distinct authors — 15 humans plus aethersdr-agent[bot] — matching "15 human contributors, AetherClaude". Every per-person count is right (44/13/10/6/5/5/5/4/3/3/2/1/1/1/1 = 104, +2 bot = 106), and "no dependency updates within that total" holds: zero bump/dependabot commits in range. I tried to catch an omitted first-timer — Nick - WØNY has no commits in this range's name set before the tag, but the same GitHub address landed #4678 in August 2026, so welcoming only @dacacioa (genuinely 0 prior commits) is correct.
  • Features described but not actually in the tree. Spot-checked the distinctive claims: CanonWindow (34 files), CanonSurface (5), CanonPan (4), flex-tailnet-shim (13), FFT De-comb (21), KPA1500 (14), -symbols.tar.xz (3), Authenticode (6). The shim version claim is exact — tools/flex-tailnet-shim/main.go:28 is const shimVersion = "0.4.1".
  • The quantitative claims, which are the easiest to overstate. "AGC-T covers −20 to 120 dB … starts at 79.4 dB" → AnanBackend.h:154 kAgcKnobMinDb = -20.0 and :160 "71 = 79.4 dB". "A measured scale, −194.8 + 1.49 × level dBm" → IcomModels.cpp:641 SquelchScaleProfile{-195.1 + 0.584 * 0.5, 0.584 * 2.55, …}, i.e. −194.808 and 1.4892. Both round exactly as written.
  • Snapshot fidelity and doc-link integrity. diff -rq docs/user/docs docs/user/versioned_docs/version-stable → 0 differences, so the Stable snapshot cannot have silently dropped or half-copied a page. All 119 /img/screens/*.png referenced by the snapshot exist under docs/user/static/ (matching the "119 screenshots … 63 pages" claim), and 0 of the relative ./*.md links in the snapshot dangle. Consistent with the passing Build docs site job, which runs npm run build ("fails on any broken link or anchor") plus gen_reference.py --check.
  • Documented build options that do not exist. building-from-source.md adds a REQUIRE_RTL row; it is real (CMakeLists.txt:168, cmake/AetherRequireRtl.cmake:3) and the "official release packages set this" claim holds — appimage.yml, macos-dmg.yml and windows-installer.yml all set it.
  • Harness artifact ruled out. The ${PR_DIFF} strings scattered through the diff I was handed ("Support ${PR_DIFF} Diagnostics", "KK7GWY ${PR_DIFF} Claude") are a quoting artifact in my own brief, not in the PR — grep -rn 'PR_DIFF' across the four root files returns 0 hits. The real text is &.
  • Could not check: whether the v26.10.2 tag's signing, release-asset and docs-deploy jobs actually succeed — those are tag-triggered and have never run for this version. That is the basis of the sequencing nit, not a finding against the diff.
  • Socket tests: none added, modified or removed. No test sources are touched at all.

Recommendation

Approve with nits. This is the most thoroughly self-consistent release prep I have reviewed — the commit count, contributor roster, screenshot count, shim version and two independent dB constants all reconcile to the tree, the Stable snapshot is byte-identical to Next, and the rules.json /next/ → / flip is both correct and covered by a green CI gate that checks exactly that. Nothing here blocks a merge.

Next step: optionally reconcile the #5468 ROADMAP placement (one line), then merge and tag — and watch the v26.10.2 signing job, since installation.md now promises a signature on a path that has only ever run under signtest-*.

Thanks for the care on this one — the citation discipline in particular made the whole release verifiable from the repo alone.


🤖 aethersdr-agent · cost: $12.3576 · 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-6389/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-6389/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-6389/docs/user/src/components/LogAnalyzer/rules.json:1003
  • [HIGH] CS-PII-DL-1 — PII detected: drivers_license in docs/user/src/components/LogAnalyzer/rules.json /tmp/aetherclaude/pr-6389/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-6389/packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:82
  • [LOW] CS-PII-IP — PII detected: ip_address in packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml /tmp/aetherclaude/pr-6389/packaging/linux/io.github.aethersdr.aethersdr.metainfo.xml:91

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

@aethersdr-agent

Copy link
Copy Markdown
Contributor

Antares Detector — candidate vulnerable file(s)

  • src/core/TailnetShimClient.cpp

The suggestedHostname function in src/core/TailnetShimClient.cpp resolves arbitrary strings to IPs (QString suggestedHostname(const QString& nickname)) and only truncates length, not validates tailnet-hostname rules. This can enable unsafe name resolution/path traversal when the function is used to resolve remote CGNAT hostnames.

Localized by Cisco Foundation AI Antares-1B running locally in the AetherClaude sandbox, seeded by the Cartographer security map. Advisory only — please verify before acting.


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

@ten9876
ten9876 merged commit f753dbf into main Oct 11, 2026
10 checks passed
@ten9876
ten9876 deleted the release/v26.10.2 branch October 11, 2026 22:02
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.

1 participant