From 0ce1737527f4fd4ae2efd275ef7a0a7ad8243b0b Mon Sep 17 00:00:00 2001 From: rabble Date: Sun, 16 Aug 2026 16:43:37 +1200 Subject: [PATCH 1/2] ci: route review requests with CODEOWNERS Branch protection decides whether a pull request may merge; nothing decided who should look at it. Requesting the mapped team is documented in divine-context PR_REVIEW.md, but it is a step the author has to remember, and a skipped request is indistinguishable from a completed one. This repository had 9 authors and 128 commits in the last 90 days, the widest contributor spread of any divine repo, so it is where unrouted review costs the most. CODEOWNERS is applied by GitHub when the pull request opens, needs no author or agent action, and treats both identically. wrangler.toml routes to @divinevideo/platform because it carries the Worker's routes, bindings and environment: a wrong final state there misdirects live traffic rather than breaking one feature. Only paths that exist here are listed, since a pattern matching nothing is silently inert, as is a team without write access. Not paired with require_code_owner_reviews yet: let it request for a week before it can block a merge. Co-Authored-By: Claude Opus 5 (1M context) --- .github/CODEOWNERS | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..84e885368 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,23 @@ +# Routes review requests automatically when a pull request opens. +# +# Branch protection decides whether a pull request may merge; this decides who +# gets asked. Without it, requesting a reviewer is a step the author has to +# remember, and a skipped request looks exactly like a completed one. +# +# Order matters: the LAST matching pattern wins. Keep the catch-all first. +# +# Only paths that exist in this repository are listed. A pattern matching no +# path is silently inert, as is a team without write access here — GitHub +# reports neither. + +* @divinevideo/reviewers + +# Platform-sensitive paths, per PR_REVIEW_TEAMS.md: production deployment and +# routing. wrangler.toml carries the Worker's routes, bindings and environment, +# so an incorrect final state here misdirects live traffic rather than breaking +# one feature. +/.github/workflows/ @divinevideo/platform +/wrangler.toml @divinevideo/platform + +# Changing who reviews what is itself a platform decision. +/.github/CODEOWNERS @divinevideo/platform From 9b536268e18dead3797fb1e1b4e0fd79a756b6c5 Mon Sep 17 00:00:00 2001 From: Daniel Cadenas Date: Sun, 16 Aug 2026 17:23:13 -0300 Subject: [PATCH 2/2] fix: drop unknown-owner platform lines from CODEOWNERS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @divinevideo/platform has no write access to divine-web, so all three lines naming it were inert — GitHub reports each as Unknown owner at codeowners/errors — and divine-web is not in the per-repo platform mapping in PR_REVIEW_TEAMS.md, so the default reviewer team owns routing here. Header corrected: an unknown-owner line is reported, not silent, and the check works pre-merge via codeowners/errors?ref=. Platform routing guidance kept for whoever adds it once access exists, pointing at compute-js/ (the Fastly edge config) rather than wrangler.toml. --- .github/CODEOWNERS | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 84e885368..019c6f447 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,20 +4,23 @@ # gets asked. Without it, requesting a reviewer is a step the author has to # remember, and a skipped request looks exactly like a completed one. # -# Order matters: the LAST matching pattern wins. Keep the catch-all first. +# divine-web is not in the per-repo mapping in divine-context +# PR_REVIEW_TEAMS.md, so the default applies: @divinevideo/reviewers owns +# review requests for the whole repository. # -# Only paths that exist in this repository are listed. A pattern matching no -# path is silently inert, as is a team without write access here — GitHub -# reports neither. +# Two ways a line here can fail, one silent, one reported: +# - A pattern matching no path is silently inert. +# - A team without write access to this repository is an "Unknown owner": +# GitHub flags it on this file's page and at +# /repos/divinevideo/divine-web/codeowners/errors, which takes a ref, so a +# branch can be checked before merge: +# gh api "repos/divinevideo/divine-web/codeowners/errors?ref=" +# +# If platform routing is added later, the team needs write access here first +# (the "Unknown owner" check above covers that), and compute-js/ — the Fastly +# edge config with the live service id, backends, KV and secret stores — is +# the path that earns it. wrangler.toml is a three-line Cloudflare Pages +# build config. Order matters if lines are added: the LAST matching pattern +# wins, so keep the catch-all first. * @divinevideo/reviewers - -# Platform-sensitive paths, per PR_REVIEW_TEAMS.md: production deployment and -# routing. wrangler.toml carries the Worker's routes, bindings and environment, -# so an incorrect final state here misdirects live traffic rather than breaking -# one feature. -/.github/workflows/ @divinevideo/platform -/wrangler.toml @divinevideo/platform - -# Changing who reviews what is itself a platform decision. -/.github/CODEOWNERS @divinevideo/platform