0002 — The release is prepared in the story's pull request; main only takes a tag

Status: superseded by 0006 (the story-PR process is removed) Date: 2026-10-04 Story: stories/006-release-prepared-in-the-story-pull-request.md

Context

ADR 0001 settled that a release on a protected main is two tp release runs with the forge holding the state between them. Story 005 built that around a release branch: the rolled CHANGELOG goes on release/vX.Y.Z and through its own pull request. In use (gobank v0.5.0, v0.6.0) every story therefore cost two pull requests and two reviews, the second of which only ever contained the changelog roll.

Options

Option Complexity Testability Domain clarity Operational risk
A. Keep the release PR (005 as is) none as today a release is a visible PR of its own two merges per story; the second review is a formality
B. Prepare the release on the story branch; main takes only a tag prepare run and tag run added beside 005's; base branch detected from the remote the same bare-repo and fake-forge harness covers the new rows the story PR is the whole change, version heading included; a release is a tag on what was reviewed the version is chosen before review, so a story that waits while another ships needs its heading edited
C. Tag from the story branch before merge, rely on fast-forward smallest poor: depends on the forge's merge style a tag that is not on main is a lie a merge commit or squash strands the tag

Decision

B. Off the base branch, tp release prepares the release in the branch and opens or updates its pull request; on the base branch it tags a merged, untagged heading. 005's release-branch run stays as the fallback when nothing was prepared. Two runs remain (ADR 0001 stands): one before the review, one after the merge, and the second needs nothing local.

Consequences

Easier: one pull request and one review per story; the tag run prompts for nothing.

Harder: the version is fixed when the branch is prepared; if two stories are prepared in parallel the second to merge must edit its heading before its tag run, and the tool reports the mismatch rather than guessing.