From ee0aab1c693c74f3b8629c6d03d47cafaaa67a9f Mon Sep 17 00:00:00 2001 From: claude-bot-andresmgsl Date: Fri, 24 Jul 2026 01:05:28 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20delete=20LABELS.md's=20scope=20tabl?= =?UTF-8?q?e=20=E2=80=94=20the=20per-repo=20set=20lives=20in=20labels.conf?= =?UTF-8?q?=20and=20CONTRIBUTING?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mirror is byte-identical in every governed repo, so the four-row enumeration was true at home and false in rig, box, cast and incubator — 14 of 16 vendored rows lied. The section keeps its doctrine and points at the two places true wherever the reader stands; ceremony's own set is now a pointer sentence in CONTRIBUTING, and a labels.test.sh row (red on main, 4 hits) keeps enumeration from returning. Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 1 + CONTRIBUTING.md | 6 +++++- LABELS.md | 16 +++++++--------- test/labels.test.sh | 8 ++++++++ 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7932638..c8aea45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ so entries say what changed, cite the issue, and stop. - BUILDER.md — the handed-off PR is the parked claim's fourth shape, its handoff is its declaration, and shape 2 covers the round awaiting its first verdicts (#109). - `labels-reconcile` — a degraded mergeability/checks read now logs gh's actual stderr (collapsed, bounded) beside the byte-identical counted line, and the blind-sweep warning leads with the observed reason instead of asserting the permissions cause (#101). +- `LABELS.md` — drop the vendored scope-table enumeration; the per-repo set lives in `.github/labels.conf` and the repo's own CONTRIBUTING (#104). - Changelog publication — count entries instead of bytes, refuse dangling grouped headings, and seed grouped re-arms with Added/Changed/Fixed (#98). - `labels-reconcile` — grant callers private-repo check reads and warn when an entire PR sweep is blind (#95). - `labels-reconcile` — the bootstrap now retires the six GitHub defaults `LABELS.md` publishes as deleted, tolerating both an already-absent label and a refused delete (#93). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f4b9654..1384972 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,7 +86,11 @@ roster is config, not doctrine — swapping a vendor is an edit to this table (and to `panel=` in `.github/labels.conf` once #10 lands), nothing more. Each governed repo names its own roster in its CONTRIBUTING; this one is -ceremony's. +ceremony's. Its `scope:*` set is the same kind of repo-specific fact: +ceremony's scopes are defined in [`.github/labels.conf`](.github/labels.conf) +— one `name|color|description` row each, with PR path mapping in +[`.github/labeler.yml`](.github/labeler.yml). The conf is the set; no prose +table repeats it (#104). ## Code conventions diff --git a/LABELS.md b/LABELS.md index 2136a92..70f586d 100644 --- a/LABELS.md +++ b/LABELS.md @@ -170,15 +170,13 @@ re-arms mentions, but only the writer can declare that a move is owed (#83). ## Scope — which surface? (PRs and issues, any number) All scopes share one calm color, `#C5DEF5` — scopes locate, states alert. The -set is per-repo (`.github/labels.conf`); PRs get theirs from changed paths via -actions/labeler, issues get theirs from triage. This repo's set: - -| Label | Covers | -|---|---| -| `scope:release-flow` | the reusable release workflow, decide, the doors | -| `scope:guards` | changelog-armed / changelog-monotonic / drill-recorded | -| `scope:labels` | the labels workflow, reconciler, this taxonomy | -| `scope:docs` | README doctrine, CONSUMERS.md, the role files | +set is per-repo: PRs get theirs from changed paths via actions/labeler, issues +get theirs from triage. This file never enumerates a set — it is mirrored +byte-identically into every governed repo, and any list it carried would be +true in one repo and false in the rest (#104). The set for the repo you are +standing in lives in the two places that are true wherever you read them: its +`.github/labels.conf` (the definitions, one `name|color|description` row per +scope) and its own `CONTRIBUTING.md`, beside the other repo-specific facts. ## Issue types diff --git a/test/labels.test.sh b/test/labels.test.sh index 18f8c45..68b6b90 100755 --- a/test/labels.test.sh +++ b/test/labels.test.sh @@ -53,4 +53,12 @@ load_config "$TMP/good.conf" set_required_bots two check "PR author is recused from the required panel" 0 "one three" printf '%s\n' "${REQUIRED_BOTS[*]}" +# LABELS.md is mirrored byte-identically into every governed repo, so any +# scope enumeration it carries is true at home and false everywhere else — +# 14 of 16 vendored rows were false across the family when this fired (#104). +# The set lives in labels.conf and the repo's CONTRIBUTING; the mirror never +# names it. grep -c prints the count and exits 1 when that count is 0. +check "LABELS.md enumerates no repo's scope labels" 1 "0" \ + grep -c 'scope:release-flow\|scope:guards\|scope:labels\|scope:docs' "$ROOT/LABELS.md" + summary -- 2.45.2 From 9d1eb810377be2c843ffc311ec71bfeef7e01232 Mon Sep 17 00:00:00 2001 From: claude-bot-andresmgsl Date: Fri, 24 Jul 2026 01:26:45 +0000 Subject: [PATCH 2/2] test: guard LABELS.md against any concrete scope name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The regression row grepped only the four current ceremony names, so a future enumeration under new names stayed green. Widen the pattern to scope:[a-z0-9] — any concrete label name, in any shape, re-reds the row, while doctrine's bare `scope:` and wildcard scope:* stay allowed (#104). Co-Authored-By: Claude Fable 5 --- test/labels.test.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/labels.test.sh b/test/labels.test.sh index 68b6b90..6d35a3a 100755 --- a/test/labels.test.sh +++ b/test/labels.test.sh @@ -57,8 +57,12 @@ check "PR author is recused from the required panel" 0 "one three" printf '%s\n' # scope enumeration it carries is true at home and false everywhere else — # 14 of 16 vendored rows were false across the family when this fired (#104). # The set lives in labels.conf and the repo's CONTRIBUTING; the mirror never -# names it. grep -c prints the count and exits 1 when that count is 0. +# names it. A concrete label is `scope:` followed by a name character — the +# doctrine spellings (bare `scope:`, wildcard `scope:*`) put a backtick or `*` +# there instead, so any name, current or future, in any shape (table row, +# name|color|description row, prose) re-reds this while doctrine stays green. +# grep -c prints the count and exits 1 when that count is 0. check "LABELS.md enumerates no repo's scope labels" 1 "0" \ - grep -c 'scope:release-flow\|scope:guards\|scope:labels\|scope:docs' "$ROOT/LABELS.md" + grep -c 'scope:[a-z0-9]' "$ROOT/LABELS.md" summary -- 2.45.2