You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Goal: Bring the AetherSDR repo's top-level structure and docs/ directory up
to a portfolio-quality OSS standard. Root drops from ~25 entries to ~15
(every file has a clear purpose). docs/ drops from 40+ entries to ~18
(every file is genuinely a doc, not data/asset/orchestrator artifact).
AI + Human collaboration narrative becomes prominent in README.
Scope: 9 PRs, all independent of each other except where noted. Most
are mechanical file moves with minimal code reference updates.
Risk posture: Every PR keeps changes small and surgical. CMakeLists.txt
path updates are the only build-system touches; doc cross-references are
sed-replaceable.
Order: PRs are independent — order doesn't matter for correctness, but
the recommended sequence below maximizes early visual impact:
Very low. Pure file move. If CI or local builds break, it's because we
missed a path reference — fixable in seconds.
Test plan
git mv the files (preserves history)
Update all references found in grep
Local build (Linux): cmake -B build && cmake --build build should still succeed
Push as PR, watch CI: check-paths, build, check-windows must all pass
Spot-check Windows build (manual or via the windows-installer.yml workflow)
Acceptance criteria
All 6 setup files reside in scripts/setup/
Zero references to old paths remain (git grep "^setup-" || git grep "/setup-")
CI green on PR + main
Root directory file count drops by 6
Estimated effort
30 minutes.
PR 2 — Add "How AetherSDR Is Built" section to README
Goal
Make the AI-augmented development model visible from the first README view.
This is the highest-impact PR for portfolio / hiring-manager skim.
Content to add
Between Highlights and Supported Hardware sections, insert a new ## How AetherSDR Is Built section that calls out:
Solo maintainer (Jeremy KK7GWY) + Claude Code as primary dev environment
AetherClaude orchestrator bot for triage + autonomous fixes
Community contributors using own AI tools (Codex, Copilot, Cursor, Gemini)
Constitution governing the multi-agent contribution model (link)
Branch protection enforcing signed commits + CI + CODEOWNERS review
AGENTS.md as canonical project guide for all AI tools
Suggested wording is in the audit report; tighten as needed for tone.
Cross-reference updates
None. New content only.
Risk
Zero. Pure addition to README.
Test plan
Add the new section
Render preview locally (e.g., glow README.md or paste into GitHub gist)
Verify links to AGENTS.md and CONSTITUTION.md resolve
Acceptance criteria
New section between Highlights and Supported Hardware
Links to AGENTS.md and CONSTITUTION.md
Reads as "this project is taking AI collaboration seriously" within
the first 200 words of the section
No other README content modified
Estimated effort
20 minutes including review.
PR 3 — Move RECENTER.md, STYLEGUIDE.md, SECURITY-AUDIT.md to docs/
Files to move (or delete)
File
Action
Destination
RECENTER.md (19 KB)
Move
docs/architecture/recenter-policy.md
STYLEGUIDE.md (12 KB)
Move
docs/applet-style-guide.md
SECURITY-AUDIT.md (10 KB)
Decide: commit to docs/security/2026-05-audit.md OR delete
Currently ?? in git (never tracked); maintainer call
Rationale per file
RECENTER.md is a code-architecture description from aether/recenter-policy worktree. Belongs in docs/architecture/ so it's
alongside architecture-pipelines.md.
STYLEGUIDE.md is the applet design language doc. Belongs in docs/
alongside dialog-patterns.md.
SECURITY-AUDIT.md is currently untracked. Decision needed: either
commit (with public-audit framing) or .gitignore it as a maintainer
notebook.
Update any links in CLAUDE.md, AGENTS.md, CONTRIBUTING.md, other docs.
Create docs/architecture/ subdirectory; consider whether architecture-pipelines.md also belongs there (deferred to a future
PR — out of scope here).
Risk
Low. File moves + ~5 link updates.
Test plan
git mv (preserves history)
Update cross-references in docs
Spot-check rendered output of moved docs on GitHub web view
Verify no broken links via a markdown link checker
Acceptance criteria
All 3 files relocated (or SECURITY-AUDIT explicitly deleted/gitignored)
All cross-references updated
Root markdown file count drops to 11 (the 11 genuine project-health docs)
Estimated effort
30 minutes.
PR 4 — Move AetherClaude-*.md docs from this repo to the aetherclaude repo
Files to relocate
Move from ~/build/AetherSDR/docs/ to ~/build/aetherclaude/docs/:
File
Size
Note
AetherClaude-Cisco-Scanner-Integration-Plan.md
~
AetherClaude integration with Cisco scanner
AetherClaude-Security-Architecture.md
~
AetherClaude security model
AetherClaude-Skills-Plan.md
~
AetherClaude skill implementation plan
AetherClaude-eBPF-Demo-Plan.md
~
AetherClaude eBPF demo plan
Rationale
These describe the AetherClaude orchestrator bot's architecture, not
AetherSDR itself. They were written in this repo for convenience but belong
in the AetherClaude repo's docs/. Keeping them here pollutes
AetherSDR's docs index and confuses readers about project scope.
Execution
This is two separate commits across two repos:
In ~/build/aetherclaude/:
mkdir -p docs/
Copy the 4 files in (preserving content)
Commit + push as part of an aetherclaude repo PR
In ~/build/AetherSDR/:
git rm docs/AetherClaude-*-Plan.md and docs/AetherClaude-Security-Architecture.md
Update any AetherSDR docs that reference these (likely few — they're internal
to AetherClaude).
Risk
Low. Net deletion from this repo; addition to aetherclaude repo. Histories
diverge but content is preserved.
Test plan
Verify content lands in aetherclaude repo intact
Verify removal from AetherSDR repo doesn't break any link in this repo
Update any pointer in ~/.claude/projects/ memory entries or docs
that reference these by path
Acceptance criteria
4 files removed from AetherSDR docs/
4 files added to aetherclaude repo (separate PR there)
Zero references to old paths in AetherSDR repo
Estimated effort
45 minutes (spans two repos).
PR 5 — Move logo + screenshot assets to docs/assets/; archive old screenshots
Files to move
To docs/assets/ (new subdirectory):
From
To
docs/aethersdr-wallpaper.png
docs/assets/wallpaper.png
docs/logo-circle.png
docs/assets/logo-circle.png
docs/logo-invert.png
docs/assets/logo-invert.png
docs/logo-original.jpg
docs/assets/logo-original.jpg
docs/logo.jpg
docs/assets/logo.jpg
docs/logo_upscayl.png
docs/assets/logo_upscayl.png
docs/screenshot-v5.png
docs/assets/screenshot-current.png
To docs/assets/screenshots/archive/:
From
To
docs/screenshot-v1.png
docs/assets/screenshots/archive/v1.png
docs/screenshot-v2.png
docs/assets/screenshots/archive/v2.png
docs/screenshot-v3.png
docs/assets/screenshots/archive/v3.png
docs/screenshot-v4.png
docs/assets/screenshots/archive/v4.png
Cross-reference updates
README.md references docs/screenshot-v5.png — update to docs/assets/screenshot-current.png
.gitignore references docs/logo-original.jpg and docs/logo_upscayl.png (currently set to ignore them but they're
tracked) — review and update
Rationale
docs/ should be docs (markdown), not assets (images). docs/assets/ is the
standard subdivision. Using a stable filename like screenshot-current.png
means future README updates don't need to bump a version suffix every time.
Risk
Very low. File moves + one README link update.
Test plan
git mv (preserves history for non-.gitignore'd files)
Update README link
GitHub web view of README renders the image
Verify rendered output looks correct
Acceptance criteria
All assets in docs/assets/ (new dir)
Old screenshots archived
README still renders correctly
docs/ directory dropped to ~28 markdown files (still has data files for now)
Estimated effort
30 minutes.
PR 6 — Move cty.dat + AetherSDR.desktop to appropriate dirs
Files to move
From
To
Why
cty.dat (99 KB binary)
resources/cty.dat
Country-prefix database; it's a resource, not a root file
AetherSDR.desktop
packaging/linux/AetherSDR.desktop
Linux desktop entry; belongs in packaging
Cross-reference updates
git grep -l "cty.dat\|AetherSDR.desktop"
Expected hits:
CMakeLists.txt (likely installs the .desktop file; bundles cty.dat)
## Summary<!-- One-paragraph description of what changes and why. -->## Constitution principle honored<!-- Cite the principle by Roman numeral if principle-relevant. E.g. "Principle V — nested-JSON persistence for the new feature." -->## Test plan-[ ] Local build passes (`cmake --build build`)
-[ ] Behavior verified on a real radio if applicable
-[ ] Existing tests pass
-[ ] Manual reproduction steps documented if user-reported bug
## Checklist-[ ] Signed commits (see `docs/COMMIT-SIGNING.md`)
-[ ] Fix references the issue with `Fixes #NNNN` or `Closes #NNNN`-[ ] Documentation updated if behavior changed
-[ ] No new flat-key `AppSettings` calls (Principle V)
-[ ] All meter UI uses `MeterSmoother` (Principle II)
SUPPORT.md
# Getting Help with AetherSDR-**General questions:** GitHub Discussions —
https://github.com/aethersdr/AetherSDR/discussions-**Bug reports:** Use the bug-report issue template
(Help → Support → File an Issue in the app)
-**Feature requests:** Use the feature-request issue template
-**Real-time chat:**[Discord / IRC / etc. — link if any]
For commercial support: contact the project maintainer
(KK7GWY@aethersdr.com).
This is volunteer-maintained open-source software. No SLA, no guaranteed
response time. Bug reports with attached support bundles get priority.
ROADMAP.md
# AetherSDR Roadmap## Current cycle: post-v26.5.2.1
Items being actively worked or queued for the next release cycle.
See GitHub Issues + Projects for live tracking.
### In flight-[ ] AetherModem Phase 1 — 1200 baud VHF AX.25 packet TX
-[ ] AppSettings nested-JSON refactor (Principle V migration)
-[ ] Per-band ATU pre-tune integration with SWR sweep
(#2822 — shared computeContiguousRegions helper)
### Queued-[ ] RF2K-S amp interop restoration with adaptive TCI identity (#2806)
-[ ] FreeDV Reporter integration polish
-[ ] Additional region band plans (DXCC entities outside IARU R1/2/3)
## Recently shipped (last 30 days)
See [CHANGELOG.md](CHANGELOG.md) for the complete shipping log.
Cross-reference updates
None — net new files.
Risk
Zero. Pure addition.
Test plan
Open a draft PR — verify the new template appears in the PR body editor
Visit the GitHub repo Settings → Community Standards page — verify SUPPORT.md is detected
Render ROADMAP.md on GitHub web view
Acceptance criteria
.github/PULL_REQUEST_TEMPLATE.md exists and auto-populates new PRs
SUPPORT.md exists and "Get help" sidebar link appears in GitHub UI
ROADMAP.md exists with current cycle goals
Estimated effort
45 minutes (mostly drafting ROADMAP content with maintainer input).
Execution sequence
PRs 1, 2, 5 are the quickest wins. PR 4 (AetherClaude relocation) spans
two repos and is the most isolated. PR 7 (packaging) is the highest-risk
because Windows/macOS signing flows depend on the paths.
PR 8: issue-NNNN planning docs (2 hours, most judgement calls)
Total effort: ~7 hours of focused work, distributed across one or
two work sessions.
Coordination
All 9 PRs can be assigned to AetherClaude if desired (most are
mechanical) — except PR 8 (issue archival), which requires per-file
judgement calls best done by the maintainer.
Each PR self-assigns to its agent per the Issue/PR Claim Protocol
(gh pr edit --add-assignee @me).
Per Principle X (Claims Are Atomic And Mortal): each PR must verify
its base is current origin/main before producing the patch. The
recent stale-snapshot incidents (PR #2780) are the canonical case this
exists to prevent — and a 9-PR cleanup is exactly the shape where
that risk re-emerges.
Repo Structure Cleanup — 9-PR Plan
Goal: Bring the AetherSDR repo's top-level structure and
docs/directory upto a portfolio-quality OSS standard. Root drops from ~25 entries to ~15
(every file has a clear purpose).
docs/drops from 40+ entries to ~18(every file is genuinely a doc, not data/asset/orchestrator artifact).
AI + Human collaboration narrative becomes prominent in README.
Scope: 9 PRs, all independent of each other except where noted. Most
are mechanical file moves with minimal code reference updates.
Risk posture: Every PR keeps changes small and surgical. CMakeLists.txt
path updates are the only build-system touches; doc cross-references are
sed-replaceable.
Order: PRs are independent — order doesn't matter for correctness, but
the recommended sequence below maximizes early visual impact:
PR 1 — Move setup-.ps1 + setup-.sh from root to
scripts/setup/Files to move
setup-deepfilter.ps1scripts/setup/setup-deepfilter.ps1setup-deepfilter.shscripts/setup/setup-deepfilter.shsetup-fftw.ps1scripts/setup/setup-fftw.ps1setup-hidapi.ps1scripts/setup/setup-hidapi.ps1setup-onnxruntime.ps1scripts/setup/setup-onnxruntime.ps1setup-opus.ps1scripts/setup/setup-opus.ps1Cross-reference updates
Grep for each filename across the codebase and update paths:
git grep -l "setup-deepfilter\|setup-fftw\|setup-hidapi\|setup-onnxruntime\|setup-opus"Expected hits:
CMakeLists.txt(if any setup scripts are invoked from build) — update pathREADME.md(likely a "Building on Windows" section that references these)CONTRIBUTING.md(build instructions)docs/*.md(any "how to set up X" docs).github/workflows/windows-installer.yml, possibly others)Risk
Very low. Pure file move. If CI or local builds break, it's because we
missed a path reference — fixable in seconds.
Test plan
git mvthe files (preserves history)cmake -B build && cmake --build buildshould still succeedwindows-installer.ymlworkflow)Acceptance criteria
scripts/setup/git grep "^setup-" || git grep "/setup-")Estimated effort
30 minutes.
PR 2 — Add "How AetherSDR Is Built" section to README
Goal
Make the AI-augmented development model visible from the first README view.
This is the highest-impact PR for portfolio / hiring-manager skim.
Content to add
Between Highlights and Supported Hardware sections, insert a new
## How AetherSDR Is Builtsection that calls out:Suggested wording is in the audit report; tighten as needed for tone.
Cross-reference updates
None. New content only.
Risk
Zero. Pure addition to README.
Test plan
glow README.mdor paste into GitHub gist)Acceptance criteria
the first 200 words of the section
Estimated effort
20 minutes including review.
PR 3 — Move RECENTER.md, STYLEGUIDE.md, SECURITY-AUDIT.md to
docs/Files to move (or delete)
RECENTER.md(19 KB)docs/architecture/recenter-policy.mdSTYLEGUIDE.md(12 KB)docs/applet-style-guide.mdSECURITY-AUDIT.md(10 KB)docs/security/2026-05-audit.mdOR delete??in git (never tracked); maintainer callRationale per file
aether/recenter-policyworktree. Belongs indocs/architecture/so it'salongside
architecture-pipelines.md.docs/alongside
dialog-patterns.md.commit (with public-audit framing) or
.gitignoreit as a maintainernotebook.
Cross-reference updates
git grep -l "RECENTER.md\|STYLEGUIDE.md\|SECURITY-AUDIT.md"Update any links in CLAUDE.md, AGENTS.md, CONTRIBUTING.md, other docs.
Create
docs/architecture/subdirectory; consider whetherarchitecture-pipelines.mdalso belongs there (deferred to a futurePR — out of scope here).
Risk
Low. File moves + ~5 link updates.
Test plan
git mv(preserves history)Acceptance criteria
Estimated effort
30 minutes.
PR 4 — Move AetherClaude-*.md docs from this repo to the aetherclaude repo
Files to relocate
Move from
~/build/AetherSDR/docs/to~/build/aetherclaude/docs/:AetherClaude-Cisco-Scanner-Integration-Plan.mdAetherClaude-Security-Architecture.mdAetherClaude-Skills-Plan.mdAetherClaude-eBPF-Demo-Plan.mdRationale
These describe the AetherClaude orchestrator bot's architecture, not
AetherSDR itself. They were written in this repo for convenience but belong
in the AetherClaude repo's
docs/. Keeping them here pollutesAetherSDR's docs index and confuses readers about project scope.
Execution
This is two separate commits across two repos:
In
~/build/aetherclaude/:mkdir -p docs/In
~/build/AetherSDR/:git rm docs/AetherClaude-*-Plan.mdanddocs/AetherClaude-Security-Architecture.mdCross-reference updates
git grep -l "AetherClaude-Skills-Plan\|AetherClaude-Cisco-Scanner\|AetherClaude-Security-Architecture\|AetherClaude-eBPF-Demo"Update any AetherSDR docs that reference these (likely few — they're internal
to AetherClaude).
Risk
Low. Net deletion from this repo; addition to aetherclaude repo. Histories
diverge but content is preserved.
Test plan
~/.claude/projects/memory entries or docsthat reference these by path
Acceptance criteria
docs/Estimated effort
45 minutes (spans two repos).
PR 5 — Move logo + screenshot assets to
docs/assets/; archive old screenshotsFiles to move
To
docs/assets/(new subdirectory):docs/aethersdr-wallpaper.pngdocs/assets/wallpaper.pngdocs/logo-circle.pngdocs/assets/logo-circle.pngdocs/logo-invert.pngdocs/assets/logo-invert.pngdocs/logo-original.jpgdocs/assets/logo-original.jpgdocs/logo.jpgdocs/assets/logo.jpgdocs/logo_upscayl.pngdocs/assets/logo_upscayl.pngdocs/screenshot-v5.pngdocs/assets/screenshot-current.pngTo
docs/assets/screenshots/archive/:docs/screenshot-v1.pngdocs/assets/screenshots/archive/v1.pngdocs/screenshot-v2.pngdocs/assets/screenshots/archive/v2.pngdocs/screenshot-v3.pngdocs/assets/screenshots/archive/v3.pngdocs/screenshot-v4.pngdocs/assets/screenshots/archive/v4.pngCross-reference updates
README.mdreferencesdocs/screenshot-v5.png— update todocs/assets/screenshot-current.png.gitignorereferencesdocs/logo-original.jpganddocs/logo_upscayl.png(currently set to ignore them but they'retracked) — review and update
Rationale
docs/should be docs (markdown), not assets (images).docs/assets/is thestandard subdivision. Using a stable filename like
screenshot-current.pngmeans future README updates don't need to bump a version suffix every time.
Risk
Very low. File moves + one README link update.
Test plan
git mv(preserves history for non-.gitignore'd files)Acceptance criteria
docs/assets/(new dir)docs/directory dropped to ~28 markdown files (still has data files for now)Estimated effort
30 minutes.
PR 6 — Move
cty.dat+AetherSDR.desktopto appropriate dirsFiles to move
cty.dat(99 KB binary)resources/cty.datAetherSDR.desktoppackaging/linux/AetherSDR.desktopCross-reference updates
git grep -l "cty.dat\|AetherSDR.desktop"Expected hits:
CMakeLists.txt(likely installs the .desktop file; bundles cty.dat).github/workflows/appimage.yml)packaging/Risk
Medium-low.
cty.datmay be referenced in C++ source if the applicationopens it directly — verify before moving.
Test plan
git grep -F 'cty.dat'(case-sensitive, exact path string)Acceptance criteria
cty.datinresources/AetherSDR.desktopinpackaging/linux/functional
Estimated effort
45 minutes (involves CMake + runtime verification).
PR 7 — Move Windows/macOS packaging artifacts to
packaging/Files to move
docs/AetherSDR.icopackaging/windows/AetherSDR.icodocs/AetherSDR.rcpackaging/windows/AetherSDR.rcmacos/AetherSDR.entitlementspackaging/macos/AetherSDR.entitlementsConsolidation
After this PR,
macos/directory is empty and can be removed. Thepackaging/directory structure becomes:Cross-reference updates
target_sources(... AetherSDR.rc)).github/workflows/windows-installer.yml.github/workflows/macos-dmg.ymlpackaging/Risk
Low-medium. Windows .rc file path affects icon embedding; macOS entitlements
path affects signing.
Test plan
Acceptance criteria
macos/directory removeddocs/directory drops by 2 entriesEstimated effort
45 minutes.
PR 8 — Move issue-NNNN-*.md and one-off planning docs to PR descriptions or
docs/archive/Files to relocate
Review each individually; some have value as historical docs, others should
be PR-description-only:
docs/issue-2136-feasibility-report.mddocs/archive/docs/issue-2136-implementation-plan.mddocs/TX_SYNC_FIX_REPORT.mddocs/aether-dsp-session-notes.mddocs/audio_test_plan.mddocs/profile-import-export-manual-checklist.mddocs/MANUAL_CHECKLISTS.mdbecomes a pattern; archive otherwisedocs/SSDR.settingstests/fixtures/if used by tests, elsedocs/data/docs/SmartSDR.exe.configdocs/rxapplet_mode_settings.csvdocs/data/ortests/fixtures/docs/vfo_mode_filters.csvProcess per file
For each .md planning doc:
git log -1 --format="%H %s" -- docs/issue-NNNN-*.md→ identify theoriginating issue/PR
git rmand add a comment to the issue noting the doc isnow superseded by the issue description itself
git rmdocs/archive/<topic>.mdwith a# Archived YYYY-MM-DDheaderFor .csv / .settings / .config data files:
tests/references the filegit mvtotests/fixtures/git mvtodocs/data/(new subdir)Cross-reference updates
git grep -l "issue-2136\|TX_SYNC_FIX_REPORT\|aether-dsp-session-notes\|audio_test_plan\|profile-import-export-manual-checklist\|SSDR.settings\|SmartSDR.exe.config\|rxapplet_mode_settings\|vfo_mode_filters"Update each reference.
Risk
Medium. Requires reviewing 10 files for current relevance. Some may turn out
to still be load-bearing for ongoing work.
Test plan
Acceptance criteria
issue/PR) or relocated to
docs/archive/,docs/data/, ortests/fixtures/docs/directory contains only:assets/subdirectorydata/and/orarchive/subdirectoriesEstimated effort
2 hours (lots of small judgement calls).
PR 9 — Add
.github/PULL_REQUEST_TEMPLATE.md,SUPPORT.md,ROADMAP.mdNew files
.github/PULL_REQUEST_TEMPLATE.mdSUPPORT.mdROADMAP.mdCross-reference updates
None — net new files.
Risk
Zero. Pure addition.
Test plan
SUPPORT.mdis detectedROADMAP.mdon GitHub web viewAcceptance criteria
.github/PULL_REQUEST_TEMPLATE.mdexists and auto-populates new PRsSUPPORT.mdexists and "Get help" sidebar link appears in GitHub UIROADMAP.mdexists with current cycle goalsEstimated effort
45 minutes (mostly drafting ROADMAP content with maintainer input).
Execution sequence
PRs 1, 2, 5 are the quickest wins. PR 4 (AetherClaude relocation) spans
two repos and is the most isolated. PR 7 (packaging) is the highest-risk
because Windows/macOS signing flows depend on the paths.
Recommended sequence:
Total effort: ~7 hours of focused work, distributed across one or
two work sessions.
Coordination
All 9 PRs can be assigned to AetherClaude if desired (most are
mechanical) — except PR 8 (issue archival), which requires per-file
judgement calls best done by the maintainer.
Each PR self-assigns to its agent per the Issue/PR Claim Protocol
(
gh pr edit --add-assignee @me).Per Principle X (Claims Are Atomic And Mortal): each PR must verify
its base is current
origin/mainbefore producing the patch. Therecent stale-snapshot incidents (PR #2780) are the canonical case this
exists to prevent — and a 9-PR cleanup is exactly the shape where
that risk re-emerges.