release-bot needs push_whitelist_usernames membership for direct-push manifest path #260
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#260
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Empirical anchor
Surfaced during the tmux-tell#630 recovery (release-toolkit#259's sibling investigation): the toolkit's path-α design assumes release-bot can direct-push manifest commits to
mainpast branch protection. That requires the release-bot account to be in the consumer repo'spush_whitelist_usernamesfor the default branch.tmux-tell's
mainbranch protection haspush_whitelist_usernames: ["alex", "quartermaster"]— release-bot is NOT in the list. When Engineer's #635 recovery runbook attempted Step 3 (manifest push as release-bot identity), the push got rejected withForgejo: Not allowed to push to protected branch main. Workaround for the recovery: push from a whitelisted user (quartermaster) with author=release-bot.In the normal automated cut flow, the workflow's release-bot manifest push would have hit the same rejection if the cut had fired properly (it didn't — release-toolkit#259's Layer-1 miss intercepted first, so this gap was second-order revealed only during recovery).
Why a separate tracker (not folded into #257)
Related to release-toolkit#257 (release-bot PAT for CI-trigger) but mechanically distinct:
Not allowed to push to protected branch)push_whitelist_usernamesin repo branch protection UI/APIBoth are "release-bot identity needs rights the adopter must grant" but they fail differently + need different docs + different validation. Separate trackers let each surface independent scheduling, separate ACs, separate verification.
Cross-reference noted in release-toolkit#257 comment 76476 — the original framing folded the two; on reflection separate trackers carry the asymmetric failure modes better.
Proposed scope
Adopter precondition docs in
docs/integration.md: explicit step "Add release-bot to consumer repo's branch protectionpush_whitelist_usernamesfor default branch. Without this, path-α manifest pushes fail withNot allowed to push to protected branchand the cut substrate goes out of sync."Pre-flight check (recommended): in
reusable-release.yml, probe the consumer repo's branch protection config at workflow start + fail-loud if the configured release-bot identity isn't in the whitelist. Same shape as #124's structural backstop for self-bootstrap re-pin — surface the misconfiguration as a workflow failure, not a silent runtime push rejection mid-cut.Path-γ note: under path-γ (manual-apply, per ADR-0007), manifest commits don't direct-push — they go through PR + merge. Path-γ adopters don't need the whitelist precondition. Docs should distinguish path-α vs path-γ requirements explicitly.
What this issue does NOT do
Refs
priority/medium · size/S-M (docs + optional pre-flight check + adopter migration note)
This is gap 6 of 6 surfaced by the first toolkit-driven cut on tmux-tell. The empirical-validation gate (tmux-tell#617) is doing exactly its design intent: surface the adopter-setup substrate gaps where rubber-meets-road on the first real consumer cut.
engineer referenced this issue2026-06-29 21:05:51 +02:00