Skip to content

fix: point CODEOWNERS at owners that exist - #953

Merged
mrsabath merged 2 commits into
mainfrom
fix/codeowners-dead-teams
Oct 9, 2026
Merged

mrsabath merged 2 commits into
mainfrom
fix/codeowners-dead-teams

Conversation

@mrsabath

@mrsabath mrsabath commented Oct 9, 2026

Copy link
Copy Markdown
Member

Summary

Four of the six rules named teams that do not exist, so those paths had no owner at all:

$ gh api orgs/rossoctl/teams/platform   # 404 -- .github/, Makefile
$ gh api orgs/rossoctl/teams/agents     # 404 -- a2a/, mcp/

GitHub silently ignores a CODEOWNERS rule naming a team that is missing or that lacks write access. There is no warning — the matched paths simply have no owner, and review requests fall back to the * default.

The fix

Owners now come from the project's source of truth for maintainership, rossoctl/rossoctl/MAINTAINERS.md, matched to who actually works on each path:

Path Owner Why
.github/ @rubambiza org-wide CI & repo governance; 8 of the last 30 commits here
Makefile @esnible rossoctl-cli; 9 of the last 12 commits here
a2a/, mcp/ @pdettori the only sustained human author of either — the rest of the traffic is dependabot

All three hold admin on this repository, so every rule resolves — verified per handle, not assumed.

Also: a rule for a directory that does not exist

The file carried docs/ @rossoctl/maintainers, but this repo has no docs/ directory and never had one — each example documents itself in its own README. That rule matched nothing, so it is removed. Not harmful, but it reads as coverage that was never there.

*.md still covers the READMEs.

Why this file cannot point at MAINTAINERS.md

Unlike the community-health files — SECURITY.md, CODE_OF_CONDUCT.md, CONTRIBUTING.md, SUPPORT.md, which GitHub genuinely does inherit from the org .github repo — CODEOWNERS has no inheritance and accepts no file references. It takes only user and team handles, and is read only from this repository's root, .github/, or docs/.

So these names are a copy that must be resynced when MAINTAINERS.md changes. The header records that, and tells an editor to re-confirm access — the exact failure mode this PR repairs.

Scope

Deliberately does not touch eventing/, which is being extracted into its own repository separately. None of the paths fixed here move with it.

Related

Same fix applied across the org: rossoctl/moca#480 and the companion PR on rossoctl/cortex.

Four rules named teams that do not exist in the org -- @rossoctl/platform
for .github/ and Makefile, @rossoctl/agents for a2a/ and mcp/. GitHub
silently ignores a rule naming a team that is missing or lacks write
access, so all four paths had no owner and no warning; reviews fell back
to the `*` default.

Replaces them with handles from the project's MAINTAINERS.md, matched to
who actually works on each path:

  .github/  @rubambiza   org-wide CI & repo governance; 8 of the last
                         30 commits here
  Makefile  @esnible     rossoctl-cli; 9 of the last 12 commits here
  a2a/ mcp/ @pdettori    the only sustained human author of both
                         (the rest of the traffic is dependabot)

All three hold admin on this repository, so every rule now resolves.

Also drops the rule for docs/, which matched nothing: this repo has no
docs/ directory and never had one -- each example documents itself in
its own README. A rule for a path that does not exist is not harmful,
but it reads as coverage that was never there.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Mariusz Sabath <mrsabath@gmail.com>

@huang195 huang195 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified the claims against the org. @rossoctl/platform and @rossoctl/agents both 404. @rubambiza, @esnible and @pdettori hold admin here and are all in MAINTAINERS.md. docs/ doesn't exist, and there's no .github/CODEOWNERS or docs/CODEOWNERS to shadow this file. GitHub's own check goes from 4 Unknown owner errors on main to none on this branch.

One wording fix outside the diff. The PR body says the paths "had no owner at all" but also that "review requests fall back to the * default". The commit message says "reviews fell back to the * default". The evidence supports "no owner", which is what the new header says. #735 touched only mcp/, was opened the day after the current CODEOWNERS landed (01cdedc), and got no review request at all. PRs on * paths (#900-#903) auto-requested @rossoctl/maintainers. Worth dropping the "fall back" sentence before merge, since the commit message is permanent.

Comment thread CODEOWNERS Outdated
Comment on lines +11 to +13
# A rule naming a user or team that does not exist, or that lacks write access here, is
# silently ignored -- the matched paths end up with no owner and no warning. If you edit this
# file, confirm every handle still has access.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The broken rules weren't silent: GitHub reports them, both in the CODEOWNERS file view and through the REST API. On main right now:

$ gh api 'repos/rossoctl/examples/codeowners/errors?ref=main' --jq '.errors[] | "L\(.line) \(.kind): \(.source)"'
L5 Unknown owner: .github/ @rossoctl/platform
L6 Unknown owner: Makefile @rossoctl/platform
L9 Unknown owner: a2a/ @rossoctl/agents
L12 Unknown owner: mcp/ @rossoctl/agents

On this branch it returns []. This header exists to stop a repeat, so I'd name the check instead of "confirm every handle still has access":

Suggested change
# A rule naming a user or team that does not exist, or that lacks write access here, is
# silently ignored -- the matched paths end up with no owner and no warning. If you edit this
# file, confirm every handle still has access.
# A rule naming a user or team that does not exist, or that lacks write access here, fails
# nothing visibly -- the matched paths just end up with no owner. GitHub does report it, in
# the CODEOWNERS file view and via the API. After editing, check that this prints []:
# gh api 'repos/rossoctl/examples/codeowners/errors?ref=<branch>' --jq .errors

Comment thread CODEOWNERS Outdated
a2a/ @rossoctl/agents
# CI and platform tooling. Gloire owns org-wide CI and repo governance; Ed owns the
# rossoctl-cli and has written most of the Makefile.
.github/ @rubambiza

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: CODEOWNERS is last-match-wins, so this rule replaces @rossoctl/maintainers for .github/ instead of adding to it. Workflow edits and the Dependabot Actions bumps will now auto-request one person. This doesn't block merges (require_code_owner_reviews is off on main), and it's still better than today's zero requests. If you want a backstop on the path that holds the workflows, use .github/ @rubambiza @rossoctl/maintainers. The same applies to a2a/ and mcp/. Fine as is if sole ownership is intended.

Both from @huang195's review.

The header told the editor to "confirm every handle still has access",
which is the same vague instruction that let four dead rules accumulate.
It now names the check -- `gh api .../codeowners/errors` -- which reports
every unknown or write-less handle in one call. "Silently ignored" was
also too strong: GitHub does report these, in the file view and via the
API. Four rules are broken on main today (.github/, Makefile, a2a/, mcp/)
and this branch returns [].

CODEOWNERS is last-match-wins, so each path rule REPLACED the
@rossoctl/maintainers default rather than adding to it -- meaning workflow
edits and the Dependabot Actions bumps would auto-request one person with
no backstop. Every path rule now lists the named owner and the team. The
reason is in the file, since the next editor cannot infer last-match-wins
from the rules themselves.

Also dropped a commit-count rationale from the Makefile rule; the role is
the durable part.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Mariusz Sabath <mrsabath@gmail.com>
@mrsabath
mrsabath merged commit c4bcf59 into main Oct 9, 2026
11 checks passed
@mrsabath
mrsabath deleted the fix/codeowners-dead-teams branch October 9, 2026 22:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants