Created
Jun 25, 20:44
Started
Jun 25, 20:49
Completed
Jun 25, 21:28
DevOps handoff
Type
Feature
Shape
backend
Worktree Slug
conductor-cycle-driver
Repositories
mcritchie-studio
Release Train
—
Branch
feat/conductor-cycle-driver
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Create bin/conductor — a DETERMINISTIC driver for the Build-and-Deploy QA Release cycle, codifying the documented SOP. Form (operator-chosen): a bin/ script like bin/release / bin/dor-check / bin/pr-status (more rails, less model judgment). DOC BASIS (read first): docs/agents/system/devops-cycle-design.md section 1 (two-workflow model: Build designed->building->submitted, Deploy submitted->reviewed->assembled->shipped) + docs/agents/modules/parallel-agent-devops.md (the NEW 'Step 0 — assess the queue by stage' subsection just shipped). FIRST RECONCILE WITH EXISTING TOOLING — do NOT duplicate: read bin/devops-cycle (legacy heartbeat planner, legacy stage names), bin/qa-intake (PR<->worktree join + labels), bin/reviewer-select, bin/release (merge/prepare/ship), bin/task. bin/conductor ORCHESTRATES these as a thin layer; it complements qa-intake (don't overlap its PR-join). If bin/devops-cycle can be cleanly updated to the current stage model instead, note that — but a focused new bin/conductor is acceptable. CORE (the gap: a 2026-06-25 miss where the flat bin/task list 20-row recency cap hid actionable tasks): (1) 'bin/conductor' / 'survey' (default, read-only): STEP 0 — enumerate the Deploy queue BY STAGE via 'bin/task list --stage reviewed/assembled/submitted/building/blocked' (NOT the capped flat list), report the active release candidate + members (via bin/release's Release.current read), one-line prod/QA health if cheap. (2) 'plan': survey + the recommended NEXT deterministic action per stage — submitted -> 'review: bin/reviewer-select <slug> + spawn pair' (optionally run reviewer-select to show the picked heavy/light); reviewed -> 'merge: bin/release merge <slugs>' (show overlap planner); assembled+reopened/no qa_url -> 'QA: bin/release prepare'; assembled+QA'd -> 'SHIP GATE (operator): bin/release ship'; flag blocked + non-pipeline (rolio) tasks separately. (3) Optional thin drive subcommands: 'merge' (bin/release merge all reviewed pipeline tasks in overlap order), 'qa' (bin/release prepare). GATES: the 2-senior REVIEW needs agents — a script CANNOT render verdicts, so surface reviewer-select assignments + the handoff, never fabricate reviews. The prod SHIP is operator-gated — bin/conductor NEVER auto-ships (print the command + gate). Default to PROD board like bin/release. ACCURACY: reuse bin/task --stage, bin/release release read, bin/reviewer-select --json; don't reimplement the board API. TESTS (unit+integration): test/commands/conductor_test.rb or test/lib, following bin/pr-status (test/lib/pr_status_test.rb GH_BIN fake-binary stub) + bin/dor-check patterns — stub bin/task/bin/release/bin/reviewer-select, assert survey enumerates each stage, plan emits correct per-stage next-action, ship never auto-invoked; CI-portable (no live board). DOCS: short bin/conductor blurb in parallel-agent-devops.md near Step 0, noting it complements qa-intake. OUT OF SCOPE (note in PR): the hands-off autonomous heartbeat (auto-spawn reviewers, unattended cycle) — separate more-ambitious task.
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.
Conversation
QA review feedback, agent handoffs, and follow-up notes for this task.
Review pair APPROVED: carl (heavy) + jasper (light). Gates airtight — survey/plan read-only (never shell bin/release, proven by empty RELEASE_CALL_LOG assertions), plan --reviewers uses reviewer-select --no-record (non-mutating), merge/qa dry-by-default (--run to execute), ship hard-refuses (exit 2). Stage-scan enumerates by --stage (not the capped flat list). Thin orchestrator (no board API reimpl; rolio correctly excluded via release_repos.yml); complements qa-intake. Tests: 15/92 green, full suite 1717 runs, rubocop clean, CI all green. Non-blocking: active_candidate derives RC name from assembled members' release_slug (no cheap Release.current endpoint) — script is honest about it + defers QA/ship to operator.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
—
Dev
—
Actual
—
We emailed a one-tap sign-in link to . It expires shortly and can only be used once.
No email? Check spam, or close this and try again.