Skip to content

chore(codeowners): convert to @aethersdr team mentions#3055

Merged
ten9876 merged 1 commit into
mainfrom
auto/codeowners-team-mentions
May 24, 2026
Merged

chore(codeowners): convert to @aethersdr team mentions#3055
ten9876 merged 1 commit into
mainfrom
auto/codeowners-team-mentions

Conversation

@ten9876

@ten9876 ten9876 commented May 24, 2026

Copy link
Copy Markdown
Collaborator

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

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 #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:

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 #3053

Stats

  • 1 file change to `.github/CODEOWNERS`
  • +35 / -31

Test plan

  • Diff review confirms only `.github/CODEOWNERS` is touched
  • All owner-set lines now reference `@aethersdr/` (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

…/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>
@ten9876 ten9876 merged commit 63bb625 into main May 24, 2026
3 checks passed
@ten9876 ten9876 deleted the auto/codeowners-team-mentions branch May 24, 2026 15:04
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>
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