004 — Drop release candidates from tp release (#25)

Status: shipped (v0.4.0)

Why

tp release carries two release-candidate mechanisms: --rc / --promote tag a vX.Y.Z-rcN and later promote it to vX.Y.Z, and rc_site on a pages_deploy target deploys docs to a staging site first and asks before promoting to the main site. Both encode a deployment strategy inside the release tool, so every project pays for the branching (rc skips checks, changelog, README and goreleaser; the deploy step prompts mid-release) and none of it is documented in docs/release-workflow.md. No repo has an rc tag; one repo (gobank) has an rc_site, and it also has post_release, which is the shape staged deployment should take. Staging, canary and promote belong in the project's deploy tooling, run from post_release or a Taskfile task, so tp release does one thing: cut and publish a version.

What changes

  • tp release: remove --rc and --promote. Unknown flags fail as they do today.
  • task-plus.yml: rc_site on a pages_deploy target is no longer read. tp check reports it as obsolete (warning, not error) with the hint to delete it and stage via post_release.
  • Remove tp release:rc-setup and tp pages promote; remove --promote and --all from tp pages deploy (it deploys every target, as it does for targets without rc_site).
  • The release deploy step deploys each target directly, no mid-release "Promote to main site?" prompt. tp readme stops emitting "RC Documentation" links; tp check stops probing rc sites.
  • internal/version: drop ParseRC, IsRC, LatestRCFromTags, BumpRC. Fork pre-release versioning (BumpPrerelease, branch-named pre-releases) stays.
  • Docs: docs/release-workflow.md gains a short "Staged deployment" paragraph pointing at post_release; README command table loses the removed commands; CHANGELOG entry under Removed.

Acceptance

tp release:

Invocation Outcome
tp release --rc flag error, exits 2, nothing gathered
tp release --promote flag error, exits 2, nothing gathered
tp release with a pages_deploy target deploys to the target once, no promote prompt
tp release with tags v0.3.0, v0.4.0-rc1 present suggests v0.3.1; the rc tag is ignored as any pre-release is today

task-plus.yml and tp check:

Config tp check tp pages deploy
target with site only as today deploys to site
target with site and rc_site WARN pages_deploy[N].rc_site is obsolete; stage via post_release deploys to site only, rc_site ignored
tp pages deploy --promote or --all — flag error
tp pages promote, tp release:rc-setup — unknown command

tp readme on a target with rc_site writes the "Documentation" link only.

Out of scope

  • A replacement staging/promote command in task-plus. Each project owns that in its deploy tooling; gobank migrates rc_site to a post_release task in its own repo.
  • Fork pre-release versioning (vX.Y.Z-<branch>.N), which stays.
  • Retracted-version handling, which is unrelated to rc.

Decisions

  • No ADR: removing a feature nobody uses is the obvious default.
  • Obsolete rc_site warns rather than errors: the loader is non-strict, so an unknown key already parses, and a warning gets the one affected repo migrated without blocking its releases.

Done when

  • tests express the acceptance table and pass
  • spec updated (docs/release-workflow.md, README command table)
  • ADR written if a fork was resolved (none: no fork)
  • roadmap ticked and stamped; changelog entry
  • issue closed with a link to the release (v0.4.0)