From 4cfb4a9409ef92e5b4744267bcbea863dec3cfcb Mon Sep 17 00:00:00 2001 From: Greg Smith Date: Sun, 20 Sep 2026 13:50:32 +0000 Subject: [PATCH] fix(governance): let the CODEOWNERS backup approver satisfy tc minutes rules Universal-Commerce-Protocol/meeting-minutes#40 gives each domain tech council ownership of its own minutes directory in CODEOWNERS, with devops-maintainers listed alongside as a backup approver so minutes are not blocked when a council is unavailable or not yet staffed. CODEOWNERS has no notion of team_hierarchy: only the teams named on the matching line can satisfy code owner review. These rules required L3, so once the validator is enabled on that repo a backup approval would satisfy CODEOWNERS and fail here, leaving the PR unmergeable with no way forward. Lower the floor on the four tc//** rules from the council (L3) to devops-maintainers (L1) so both gates agree. Ownership is unchanged: each tc// directory is owned by its council, CODEOWNERS still pins review to that council plus devops-maintainers, and that intersection is the effective gate. The owning council is recorded in the comments above each rule. gc/** and LICENSE are unchanged and still require governance-council. --- .../rules/meeting-minutes-rules.yml | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/org-tools/governance/rules/meeting-minutes-rules.yml b/org-tools/governance/rules/meeting-minutes-rules.yml index a323856..ae37879 100644 --- a/org-tools/governance/rules/meeting-minutes-rules.yml +++ b/org-tools/governance/rules/meeting-minutes-rules.yml @@ -15,37 +15,47 @@ rules: # --------------------------------------------------------- # Technical Council Minutes - Domain Specific + # + # Each council owns its directory in the repo's .github/CODEOWNERS, with + # devops-maintainers alongside as a backup approver. CODEOWNERS ignores + # team_hierarchy, so the floor here is L1, not L3 -- otherwise a backup + # approval would pass CODEOWNERS and fail this validator. Ownership is + # unchanged; the backup only unblocks minutes a council cannot review. # --------------------------------------------------------- - name: "shopping_tech_council_minutes" patterns: - "tc/shopping/**" requires: - # Grants access to shopping-tech-council (L3) and governance-council (L4) - - min_team: "shopping-tech-council" + # tc/shopping/ is owned by shopping-tech-council (L3) in CODEOWNERS. + # Floor is L1 so the backup approver also satisfies this rule. + - min_team: "devops-maintainers" min_approvals: 1 - name: "food_tech_council_minutes" patterns: - "tc/food/**" requires: - # Grants access to food-tech-council (L3) and governance-council (L4) - - min_team: "food-tech-council" + # tc/food/ is owned by food-tech-council (L3) in CODEOWNERS. + # Floor is L1 so the backup approver also satisfies this rule. + - min_team: "devops-maintainers" min_approvals: 1 - name: "lodging_tech_council_minutes" patterns: - "tc/lodging/**" requires: - # Grants access to lodging-tech-council (L3) and governance-council (L4) - - min_team: "lodging-tech-council" + # tc/lodging/ is owned by lodging-tech-council (L3) in CODEOWNERS. + # Floor is L1 so the backup approver also satisfies this rule. + - min_team: "devops-maintainers" min_approvals: 1 - name: "payments_tech_council_minutes" patterns: - "tc/payments/**" requires: - # Grants access to payments-tech-council (L3) and governance-council (L4) - - min_team: "payments-tech-council" + # tc/payments/ is owned by payments-tech-council (L3) in CODEOWNERS. + # Floor is L1 so the backup approver also satisfies this rule. + - min_team: "devops-maintainers" min_approvals: 1 # ---------------------------------------------------------