chore(codeowners): convert to @aethersdr team mentions#3055
Merged
Conversation
…/infrastructure, /reviewers) Replaces individual @user mentions with @aethersdr/<team> team mentions on every owner-set line. Net effect: Old: many lines list 1-4 individual users each, requiring CODEOWNERS edits whenever team rosters change. New: each line references a GitHub team; roster changes are managed in the org Teams UI as single team-membership operations. Team mapping (preserves identical approval semantics): Tier 1 — @aethersdr/maintainers (was: @ten9876) Tier 2 — @aethersdr/infrastructure (was: @ten9876 @jensenpat) Tier 3 — @aethersdr/reviewers (was: @ten9876 @jensenpat @NF0T @rfoust) Each team must have at least Write access to aethersdr/AetherSDR for GitHub to honor the mention; this is verified before merge (see PR description). The file header is updated to: - Reference team slugs as the source of truth, with "(currently: ...)" annotations naming the current human members for documentation only - Point readers to https://github.com/orgs/aethersdr/teams as the live roster source - Note that @AetherClaude is intentionally not a member of any team (preserves the human-only-approval rule from #3053) No semantic change to which paths are at which tier — only the mention shape on each line. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
G6PWY-Chris
pushed a commit
to G6PWY-Chris/AetherSDR
that referenced
this pull request
Jun 22, 2026
## Summary Replaces individual \`@user\` mentions in CODEOWNERS with GitHub team mentions. Identical approval semantics — only the *shape* of each owner-set line changes. Roster management moves from "edit CODEOWNERS" to "edit team membership in the org Teams UI." Builds on the framework merged in aethersdr#3053. ## What changes | Tier | Was | Now | Members today | |---|---|---|---| | Tier 1 | \`@ten9876\` | \`@aethersdr/maintainers\` | @ten9876 | | Tier 2 | \`@ten9876 @jensenpat\` | \`@aethersdr/infrastructure\` | @ten9876, @jensenpat | | Tier 3 | \`@ten9876 @jensenpat @NF0T @rfoust\` | \`@aethersdr/reviewers\` | @ten9876, @jensenpat, @NF0T, @rfoust | The path-to-tier mapping is unchanged from aethersdr#3053. No file moves tier; only the mention shape on each line changes. ## Prerequisite — repo access for the teams GitHub only honors \`@org/team\` mentions in CODEOWNERS when the team has **Write or higher** access to the repository. Before this PR merges, verify in the org Teams UI: | Team | Required access | Recommended | |---|---|---| | \`@aethersdr/maintainers\` | Write (minimum) | **Admin** (manages branch protection / settings) | | \`@aethersdr/infrastructure\` | Write (minimum) | **Maintain** (can edit some repo settings / manage releases) | | \`@aethersdr/reviewers\` | Write (minimum) | **Write** | Per team: org Teams page → click the team → **Repositories** tab → **Add repository** → \`aethersdr/AetherSDR\` → set access level. GitHub will surface a warning at the top of this PR's "Files changed" tab if any of the team mentions fail to resolve (team doesn't exist, doesn't have access, or has the wrong access level). If the file is valid, no warning. ## Header comment changes The doc block at the top of CODEOWNERS now: - References team slugs as the source of truth, with \`(currently: <users>)\` annotations naming the current human members for documentation - Points readers to \`https://github.com/orgs/aethersdr/teams\` as the live roster source - Notes that \`@AetherClaude\` is intentionally not a member of any team (preserves the human-only-approval rule from aethersdr#3053) ## How last-match-wins resolves (post-merge, semantically identical to today) | File | Pattern that matches | Team | |---|---|---| | \`CLAUDE.md\` | T1: \`CLAUDE.md\` | @aethersdr/maintainers | | \`README.md\` | T2: \`*.md\` | @aethersdr/infrastructure | | \`docs/install.md\` | T2: \`docs/\` (last match) | @aethersdr/infrastructure | | \`.github/workflows/ci.yml\` | T1: \`.github/workflows/\` | @aethersdr/maintainers | | \`.github/codeql/codeql-config.yml\` | T1: \`.github/codeql/\` | @aethersdr/maintainers | | \`.claude/commands/loop.md\` | T1: \`.claude/commands/\` | @aethersdr/maintainers | | \`src/gui/MainWindow.cpp\` | T3: \`*\` | @aethersdr/reviewers | | \`tests/foo.cpp\` | T2: \`tests/\` | @aethersdr/infrastructure | | \`CMakeLists.txt\` | T2: \`CMakeLists.txt\` | @aethersdr/infrastructure | ## Why this is a follow-up rather than a fix-up of aethersdr#3053 - aethersdr#3053 settled the tier model + path categorization - This PR is a pure mention-shape refactor on top of the settled model - Keeping them separate makes each step easier to review and bisect - This change requires the teams to exist (they do, as of today) and have repo access (must be granted before merge) ## Stats - 1 file change to \`.github/CODEOWNERS\` - +35 / -31 ## Test plan - [x] Diff review confirms only \`.github/CODEOWNERS\` is touched - [x] All owner-set lines now reference \`@aethersdr/<team>\` (no individual @user mentions on owner-set lines) - [ ] Org Teams UI: verify all three teams exist with the expected member rosters - [ ] Org Teams UI: verify each team has \`aethersdr/AetherSDR\` listed under Repositories with Write+ access - [ ] GitHub validates the CODEOWNERS syntax on this PR — no warning banner on the Files changed tab - [ ] After merge: test PR touching \`README.md\` shows "Requesting review from @aethersdr/infrastructure" - [ ] After merge: test PR touching \`CLAUDE.md\` shows "Requesting review from @aethersdr/maintainers" - [ ] After merge: test PR touching \`src/gui/MainWindow.cpp\` shows "Requesting review from @aethersdr/reviewers" - [ ] After merge: adding a new contributor to \`@aethersdr/reviewers\` immediately makes them an eligible reviewer on any \`*\` path, with no further CODEOWNERS edits required 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces individual `@user` mentions in CODEOWNERS with GitHub team mentions. Identical approval semantics — only the shape of each owner-set line changes. Roster management moves from "edit CODEOWNERS" to "edit team membership in the org Teams UI."
Builds on the framework merged in #3053.
What changes
The path-to-tier mapping is unchanged from #3053. No file moves tier; only the mention shape on each line changes.
Prerequisite — repo access for the teams
GitHub only honors `@org/team` mentions in CODEOWNERS when the team has Write or higher access to the repository. Before this PR merges, verify in the org Teams UI:
Per team: org Teams page → click the team → Repositories tab → Add repository → `aethersdr/AetherSDR` → set access level.
GitHub will surface a warning at the top of this PR's "Files changed" tab if any of the team mentions fail to resolve (team doesn't exist, doesn't have access, or has the wrong access level). If the file is valid, no warning.
Header comment changes
The doc block at the top of CODEOWNERS now:
How last-match-wins resolves (post-merge, semantically identical to today)
Why this is a follow-up rather than a fix-up of #3053
Stats
Test plan
🤖 Generated with Claude Code