From 0362e5cf430173954d927317a08962c985e84a9e Mon Sep 17 00:00:00 2001 From: codex-reviewer-andresmgsl Date: Thu, 30 Jul 2026 17:49:39 +0000 Subject: [PATCH 1/2] fix: align Ceremony actors with Forgejo --- .github/labels.conf | 4 ++-- CONTRIBUTING.md | 4 ++-- changelog.d/116.md | 3 +++ test/cli.sh | 31 +++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 changelog.d/116.md diff --git a/.github/labels.conf b/.github/labels.conf index ef6116e..9b77d17 100644 --- a/.github/labels.conf +++ b/.github/labels.conf @@ -1,5 +1,5 @@ -panel=claude-bot-andresmgsl codex-bot-andresmgsl grok-bot-andresmgsl kimi-bot-andresmgsl -triage-actors=dan-claude-bot +panel=cluade-reviewer-andresmgsl codex-reviewer-andresmgsl grok-reviewer-andresmgsl kimi-reviewer-andresmgsl +triage-actors=cluade-reviewer-andresmgsl scope:bootstrap|C5DEF5|bootstrap — hardening a pristine server into a node scope:users|C5DEF5|users-* — class model, apply/status, close-root scope:runner|C5DEF5|runner-* / forgejo-runner-* — CI runner lifecycle, either forge diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2fe09fc..a0ff0a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,8 +16,8 @@ genuinely rig's. 1. **Fork and branch.** Contributors work from forks; upstream branches are for maintainers. Title the PR conventionally (`feat:`, `fix:`, `docs:`). 2. **The review panel** (`.github/labels.conf`'s `panel=` line): - `claude-bot-andresmgsl`, `codex-bot-andresmgsl`, `grok-bot-andresmgsl`, - `kimi-bot-andresmgsl` — + `cluade-reviewer-andresmgsl`, `codex-reviewer-andresmgsl`, + `grok-reviewer-andresmgsl`, `kimi-reviewer-andresmgsl` — the required verdicts for a PR are the panel minus its author. The maintainer (`danmt`) takes the last word and merges. 3. **Checks must be green**: `shellcheck`, `bash test/cli.sh` and diff --git a/changelog.d/116.md b/changelog.d/116.md new file mode 100644 index 0000000..8c21511 --- /dev/null +++ b/changelog.d/116.md @@ -0,0 +1,3 @@ +### Fixed + +- Ceremony recognizes the Forgejo review panel and triage actor (#116) diff --git a/test/cli.sh b/test/cli.sh index 0f68bf3..8f0fcfb 100644 --- a/test/cli.sh +++ b/test/cli.sh @@ -3664,6 +3664,37 @@ check "release.yml: the caller was not absolutised (docs-sync would go red)" 0 " check "labels.yml: the caller was not absolutised either" 0 "count=0" \ wf_count labels.yml '^[[:space:]]*uses:[[:space:]]*https://.*ceremony/\.github/workflows/' +# The reconciler reads the machine roster from labels.conf while contributors +# read the prose roster. A Forgejo migration that updates only one side makes +# the required-verdict set differ depending on who is reading it. +configured_panel() { + sed -n 's/^panel=//p' "$ROOT/.github/labels.conf" +} +documented_panel() { + # shellcheck disable=SC2016 # backticks are literal Markdown delimiters + sed -n '/^2\. \*\*The review panel\*\*/,/required verdicts/p' "$ROOT/CONTRIBUTING.md" \ + | grep -oE '`[^`]+-reviewer-andresmgsl`' \ + | tr -d '`' \ + | paste -sd ' ' - +} +panel_is_forgejo_roster() { + [ "$(configured_panel)" = \ + "cluade-reviewer-andresmgsl codex-reviewer-andresmgsl grok-reviewer-andresmgsl kimi-reviewer-andresmgsl" ] +} +panel_rosters_match() { + [ "$(documented_panel)" = "$(configured_panel)" ] +} +triage_actor_is_forgejo_claude() { + [ "$(sed -n 's/^triage-actors=//p' "$ROOT/.github/labels.conf")" = \ + "cluade-reviewer-andresmgsl" ] +} +check "labels: panel names exactly the four Forgejo reviewer accounts" 0 "" \ + panel_is_forgejo_roster +check "labels: CONTRIBUTING panel matches labels.conf exactly" 0 "" \ + panel_rosters_match +check "labels: Forgejo triage actor is exactly the existing claude account" 0 "" \ + triage_actor_is_forgejo_claude + # One tag governs all eight references — the pin may be bumped, never split. ceremony_tags() { grep -rhoE 'heavy-duty/ceremony/[^@]+@[^[:space:]]+' "$ROOT/.github/workflows/" \ -- 2.45.2 From 7aca642ba5fae1a783f3698a1d65df7e90044862 Mon Sep 17 00:00:00 2001 From: codex-reviewer-andresmgsl Date: Thu, 30 Jul 2026 18:31:16 +0000 Subject: [PATCH 2/2] fix: preserve triage across both forges --- .github/labels.conf | 2 +- changelog.d/116.md | 2 +- test/cli.sh | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/labels.conf b/.github/labels.conf index 9b77d17..45282d8 100644 --- a/.github/labels.conf +++ b/.github/labels.conf @@ -1,5 +1,5 @@ panel=cluade-reviewer-andresmgsl codex-reviewer-andresmgsl grok-reviewer-andresmgsl kimi-reviewer-andresmgsl -triage-actors=cluade-reviewer-andresmgsl +triage-actors=dan-claude-bot cluade-reviewer-andresmgsl scope:bootstrap|C5DEF5|bootstrap — hardening a pristine server into a node scope:users|C5DEF5|users-* — class model, apply/status, close-root scope:runner|C5DEF5|runner-* / forgejo-runner-* — CI runner lifecycle, either forge diff --git a/changelog.d/116.md b/changelog.d/116.md index 8c21511..eec8f35 100644 --- a/changelog.d/116.md +++ b/changelog.d/116.md @@ -1,3 +1,3 @@ ### Fixed -- Ceremony recognizes the Forgejo review panel and triage actor (#116) +- Ceremony recognizes the Forgejo review panel and both forges' triage actors (#116) diff --git a/test/cli.sh b/test/cli.sh index 8f0fcfb..4846778 100644 --- a/test/cli.sh +++ b/test/cli.sh @@ -3684,16 +3684,19 @@ panel_is_forgejo_roster() { panel_rosters_match() { [ "$(documented_panel)" = "$(configured_panel)" ] } -triage_actor_is_forgejo_claude() { +# Panel verdicts are all-required, so its roster cannot span disjoint account +# namespaces. Triage authorization is any-match, so the union keeps issue flow +# valid on both GitHub and Forgejo while both boards remain live. +triage_actors_cover_both_forges() { [ "$(sed -n 's/^triage-actors=//p' "$ROOT/.github/labels.conf")" = \ - "cluade-reviewer-andresmgsl" ] + "dan-claude-bot cluade-reviewer-andresmgsl" ] } check "labels: panel names exactly the four Forgejo reviewer accounts" 0 "" \ panel_is_forgejo_roster check "labels: CONTRIBUTING panel matches labels.conf exactly" 0 "" \ panel_rosters_match -check "labels: Forgejo triage actor is exactly the existing claude account" 0 "" \ - triage_actor_is_forgejo_claude +check "labels: triage actors cover GitHub and Forgejo exactly" 0 "" \ + triage_actors_cover_both_forges # One tag governs all eight references — the pin may be bumped, never split. ceremony_tags() { -- 2.45.2