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