Skip to content

docs(release): add a reusable release playbook, retire the root RELEASE.md - #644

Open
brickbots wants to merge 1 commit into
mainfrom
docs/release-playbook
Open

docs(release): add a reusable release playbook, retire the root RELEASE.md#644
brickbots wants to merge 1 commit into
mainfrom
docs/release-playbook

Conversation

@brickbots

Copy link
Copy Markdown
Owner

Three cuts in a row (2.6.1, 2.6.2, 2.6.3) rediscovered the same handful of things. release_notes/RELEASE-PLAYBOOK.md is the process, pulled out of those plans so the next cut starts from it instead of from memory.

What's in it

Phases 1 through 8, from picking the version number to what happens after the update is offered, plus the NixOS track as its own section. It's built from the three test plans and from the actual mechanics in pifinder_update.sh, pifinder_post_update.sh, ui/software.py and .github/workflows/release.yml.

The two tracks are separated up front because they differ in who creates the tag. The 2.x line is entirely by hand: the merge, the tag, the GitHub release and the SD image. The NixOS workflow tags and publishes itself, so tagging first would collide.

Docs snapshots, the reason this got written now

Every release gets a docs build frozen at its own URL. Read the Docs still serves /en/v1.11.2/, /en/v2.0.4/ and /en/v2.1.1/, and index.rst, user_guide.rst and quick_start.rst all link to them from the "previous versions" note. Nothing exists for 2.2 through 2.6. Someone on 2.4 hitting /en/release/ today reads rev4 docs describing hardware and menus they don't have.

The mechanism already exists (RTD builds a version per git tag, which is where /en/v2.1.1/ and /en/v3_hardware/ came from), so this is one dashboard action per cut, not new infrastructure. We're not backfilling the gap. That leaves those three notes implying coverage they don't have, so rewording them is tracked in the playbook as a one-time task rather than done here.

Tagging gets a rule

v2.6.1 sits on a commit shared by both branches. v2.6.3 landed on 31c900c3, two commits past the release merge efc75c2d, because the tag went on afterwards. Now that RTD builds from the tag, a late tag produces a docs snapshot of something that never shipped. The playbook says tag at the cut, on the commit release pointed at when the update opened.

RELEASE.md

Removed. It was a byte-identical copy of release_notes/2.6.1.md (125 lines, 24,529 bytes, same blob) while version.txt reads 2.6.3, and git grep finds nothing in the repo referencing it. release_notes/X.Y.Z.md has been the real home since 2.6.1, so refreshing it each cut would just be a second place to forget.

Two honest stubs

Phase 6 (how the 2.x SD image is built and how it reaches CloudFront) is a TODO. Nothing in this repo describes it, so I'd rather it be visibly missing than quietly guessed. Phase 7 needs the Discord channel, the Cloudy Nights thread and where the owner-email list lives.

Docs only, no code touched.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CYLTX561d4W4R8AHiM67j1

…SE.md

The 2.6.1, 2.6.2 and 2.6.3 cuts each rediscovered the same handful of
things: an uncommitted version.txt bump that would have offered the update
to nobody, stale ADR number reservations, new menu entries shifting menu
indexes and breaking the keypress-counting web tests, a stale mypy cache
reporting phantom errors. The per-release notes and test plans are the
right place for what one release changed, but they are the wrong place for
process, so it kept getting rebuilt from scratch.

release_notes/RELEASE-PLAYBOOK.md is that process, distilled from those
three cuts and from the actual mechanics in pifinder_update.sh,
pifinder_post_update.sh, ui/software.py and release.yml. It separates the
two tracks, which differ in who creates the tag: the 2.x line is entirely
manual, while the 3.x NixOS workflow tags and publishes itself.

New in it, and the reason this got written now: every release gets a docs
build frozen at its own URL. Read the Docs still serves /en/v1.11.2/,
/en/v2.0.4/ and /en/v2.1.1/, and index.rst, user_guide.rst and
quick_start.rst all link to them, but nothing exists for 2.2 through 2.6.
A user on 2.4 landing on /en/release/ today reads rev4 docs describing
hardware and menus they do not have. The fix is one dashboard action per
cut. We are not backfilling the gap, so those three notes need rewording
to stop implying full coverage; that is tracked in the playbook.

Tagging gets a rule for the same reason. v2.6.1 sits on a commit shared by
both branches, but v2.6.3 landed on 31c900c, two commits past the release
merge, because the tag went on afterwards. Since Read the Docs builds from
the tag, a late tag now produces a docs snapshot of something that never
shipped.

RELEASE.md at the repo root was a byte-identical copy of
release_notes/2.6.1.md, with version.txt reading 2.6.3 and nothing in the
repo referencing it. Removed rather than refreshed: release_notes/X.Y.Z.md
has been the real home since 2.6.1.

Two sections are honest stubs. Nothing in this repo describes how the 2.x
SD image is built or how it reaches CloudFront, and the Discord channel,
Cloudy Nights thread and owner-email list still need filling in.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYLTX561d4W4R8AHiM67j1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant