Agents Builders

Persistent release-branch cutover — conductor + prepare + init (multi-repo PR1)

Archived
release-branch-cutover

Created

Jun 22, 05:37

Started

Jun 22, 05:37

Completed

Jun 22, 13:55

DevOps handoff

Type

Feature

Shape

backend

Worktree Slug

release-branch-cutover

Repositories

mcritchie-studio

Release Train

Branch

feat/release-branch-cutover

Local URL

QA URL

Production URL

release-pipeline workflow-change migration

Acceptance Criteria

  • Branch model flips to a persistent per-repo 'release' branch: repo_plan/release_branch use the constant 'release' (not release/<slug>); membership flips reviewed->assembled AT MERGE via Release::Conductor.adopt! (Release.current_or_open! + add); add tolerates an assembled release (auto-reopen for a late merge).
  • bin/release prepare deploys origin/release per app repo to its QA app (bin/qa-server deploy <qa_app> origin/release --yes) with a merge-forward guard (main must stay an ancestor of release); records qa_url + per-repo QA SHA in release.metadata[qa_shas]; no branch-cut, no member-merge loop; gems skipped.
  • bin/release init creates origin/release (= origin/main) on every gem+app in the registry, idempotent.
  • Docs/UI overhaul (lands WITH this PR): devops-cycle-design.md + index.md/claude.md sources + worktrees.md + parallel-agent-devops.md + devops-task-board.md + application_helper devops_stage_guide + cycle.html.erb + _current_release.html.erb -> agents PR to 'release'.

Expected Test Plan

  • [unit] conductor adopt!/membership-at-merge + repo_plan release_branch=='release'; release add-tolerates-assembled
  • [integration] release_flow persistent-release membership; release_cli prepare --dry-run deploys origin/release

Checks Run

  • [unit] release model (BRANCH/current_or_open!/add-reopen) + conductor (adopt!/prepare!/repo_plan='release'/record_qa_shas) + bin/release init/prepare/merge dry-runs — 99 runs, 0 failures; zeitwerk clean; ruby -c OK
  • [integration] release_flow persistent-release adopt!->prepare->ship; docs/views+helper render green — 58 runs, 0 failures

Stage Timeline

Who handled each stage, the time it took (measured), and the model / tokens / cost reported (best-effort) — plus who's on it right now. means the agent didn't report that metric.

No stage changes recorded yet.

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

Comment 5 days ago

QA (Avi): APPROVE-WITH-NITS — code/docs/migration-safety all PASS. Nits ADDRESSED in this PR: (1) cycle.html.erb shipped row 'tag'->'tag gems' (ship tags gems only); (2) added multi-repo ship to devops-cycle-design 'Still to land' (ship currently single-repo mcritchie-studio); (4) bin/release merge base-check now FAILS CLOSED if gh can't read the base; (5) Release#add checks reviewed BEFORE reopening. Left as-is (harmless): eligible_task_slugs orphaned-but-tested (operator helper). Tests 108/0, zeitwerk clean. MERGE GATED on migration: drain #76/#83/#86 -> bin/release init -> then merge.

Sealed-bid sizing

Edit →

Alex (PM)

Avi (PO)

Dev

Actual