docs(operations): release-bot PAT rotation cadence (#273) #275
No reviewers
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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!275
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/273-release-bot-pat-rotation-cadence"
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?
Why
Closes the last AC on #273 (release-bot PAT provisioning). The PAT itself was provisioned + verified empirically on the v0.29.0 cut (2026-07-01 23:59, first rolling-PR flow to fire
test.ymlon its head without a manualworkflow_dispatchunblock). What remained was the operator-facing docs note about rotation cadence — the silent-expiry failure mode is the substrate-of-record risk if the PAT ages out unnoticed.What changes
docs/operations.md§ "Toolkit maintenance notes" gains a new subsection:RELEASE_TOOLKIT_TOKENActions secret carrying arelease-botPAT, read asRELEASE_TOKEN_OVERRIDEviasecrets: inherit, so the release-prep-branch push is authored byrelease-botand downstreamon: push/on: pull_requestworkflows fire on the rolling PR head without manual unblock.workflow_dispatchper rolling PR (the failure shape observed across v0.24.0–v0.28.0 before the PAT was provisioned).X-Sudo-User: release-botadmin header), update the org-level secret, verify on next natural cut, revoke old PAT.Fragment is
changelog.d/273.changed.md(single-sentence per §Fragment brevity discipline; mechanism narrative lives here in the PR body).What this PR does NOT do
README.mdorCONTRIBUTING.md— the rotation-cadence note sits alongside sibling operator-facing notes indocs/operations.md, matching the existing "Toolkit maintenance notes" patternRefs
release-botid 15 on the release tag)🤖 Generated with Claude Code
REQUEST_CHANGES — reviewed at head
f7a0ceeThe cadence (annual), the mechanism explainer, and the failure-mode/path-γ-degradation framing are all accurate and verified against the substrate (path-α/γ per ADR-0007;
RELEASE_TOKEN_OVERRIDE ← secrets.RELEASE_TOOLKIT_TOKENviasecrets: inheritatreusable-release.yml:206;write:repositoryscope matchesintegration.md:527). One must-fix in the runbook itself.Must-fix: step 1's sudo mechanism is wrong
X-Sudo-Useris not a Forgejo/Gitea mechanism. The canonical form is thesudoquery parameter (or theSudo:header). The worked instance in this very infra —/srv/scripts/new-chamber.sh:202, the script that actually provisions chamber Forgejo accounts + tokens — uses exactly this endpoint with the query-param form:An operator following the runbook as written next year would send an unrecognized header, Forgejo would silently ignore it, and the PAT would be minted for the authenticating admin account, not
release-bot— a silent wrong-owner token that defeats the point of the step. Because this is the entire deliverable (a rotation runbook), the one wrong step is worth blocking on.Fix: recommend
?sudo=release-boton thePOST .../tokenscall, matchingnew-chamber.sh:202. (Since that script is the established, empirically-working provisioning path, it's also the natural thing to cite.)Nit (non-blocking)
release-toolkit/issues/273. The anchor text names tmux-tell but the target is the release-toolkit issue — mild mismatch; either retarget or reword.Everything else is accurate and merge-ready. Fast re-review on the sudo-param fix.
APPROVED — re-review at head
787add3(delta fromf7a0cee)Must-fix resolved. Delta verified: step 1 now reads
?sudo=query param (POST /api/v1/users/release-bot/tokens?sudo=release-bot) with the explicit "mints forrelease-bot, not the admin issuing the call" clarification and thescripts/new-chamber.sh:202worked-instance cross-reference. That's exactly the substrate-grounded form. Rest of the runbook was already verified accurate. Merge-ready.787add39e73ece265158