From 170cd7ad4627aa8cb26a0c885368347492e56a23 Mon Sep 17 00:00:00 2001 From: Mariusz Sabath Date: Fri, 9 Oct 2026 15:23:59 -0400 Subject: [PATCH 1/2] fix: point CODEOWNERS at owners that exist 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) Signed-off-by: Mariusz Sabath --- CODEOWNERS | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 0ea5197c..936093f5 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,16 +1,29 @@ +# Code owners for rossoctl/examples. +# +# Owners here are DERIVED from the project's source of truth for maintainership: +# https://github.com/rossoctl/rossoctl/blob/main/MAINTAINERS.md +# +# CODEOWNERS cannot reference that file, or any file: GitHub accepts only user and team +# handles, and it is read only from this repository's root, .github/ or docs/ -- there is no +# inheritance from rossoctl/rossoctl to lean on. So these names are a copy, and they have to +# be updated when MAINTAINERS.md changes. +# +# 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. + # Default owners for everything * @rossoctl/maintainers -# CI and platform tooling -.github/ @rossoctl/platform -Makefile @rossoctl/platform - -# A2A agents -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 +Makefile @esnible -# MCP tools -mcp/ @rossoctl/agents +# A2A agents and MCP tools +a2a/ @pdettori +mcp/ @pdettori -# Documentation -docs/ @rossoctl/maintainers +# Documentation. There is no docs/ directory in this repo -- the previous rule for it +# matched nothing. Each example documents itself in its own README. *.md @rossoctl/maintainers From 3f94acd7627f37547ce602a16c5e3d0c53ca5461 Mon Sep 17 00:00:00 2001 From: Mariusz Sabath Date: Fri, 9 Oct 2026 18:08:42 -0400 Subject: [PATCH 2/2] fix: Name the CODEOWNERS check, and keep the team as a backstop 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) Signed-off-by: Mariusz Sabath --- CODEOWNERS | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 936093f5..6c0363af 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -8,21 +8,27 @@ # inheritance from rossoctl/rossoctl to lean on. So these names are a copy, and they have to # be updated when MAINTAINERS.md changes. # -# 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=' --jq .errors # Default owners for everything * @rossoctl/maintainers -# 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 -Makefile @esnible +# Every rule below also lists @rossoctl/maintainers, because CODEOWNERS is +# last-match-wins: a path rule REPLACES the `*` default rather than adding to it. Naming +# one person alone would mean workflow edits and the Dependabot Actions bumps auto-request +# a single reviewer, with no backstop when they are away. + +# CI and platform tooling, owned per MAINTAINERS.md (org-wide CI & repo governance; +# rossoctl-cli and the build). +.github/ @rubambiza @rossoctl/maintainers +Makefile @esnible @rossoctl/maintainers # A2A agents and MCP tools -a2a/ @pdettori -mcp/ @pdettori +a2a/ @pdettori @rossoctl/maintainers +mcp/ @pdettori @rossoctl/maintainers # Documentation. There is no docs/ directory in this repo -- the previous rule for it # matched nothing. Each example documents itself in its own README.