Created
Jul 03, 21:28
Started
Jul 04, 02:20
Completed
Jul 04, 04:58
DevOps handoff
Type
Feature
Shape
backend
Worktree Slug
move-release-assembly-to-steffon
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/move-release-assembly-to-steffon
Local URL
—
QA URL
—
Production URL
—
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
EPIC (build in a FRESH dedicated session — most ship-critical code in the system). Rewrite the conductor so the souls bookend: Avi reviews + ships; Steffon owns the whole middle (assemble + QA). DEPENDS ON add-task-merged-field. NEW FLOW: (Avi pr-review) REVIEW-ONLY submitted→reviewed, NO merge (reverses the 2026-07-02 fold-merge-into-pr-review; ok because Steffon assembles promptly). (Steffon qa-deploy, SELF-HEALING) 1. detect work = tasks in reviewed + any assembled stragglers not in the current RC; nothing → idempotent no-op. 2. ensure a next release (Release.open! if none, else use in-progress). 3. sweep+merge each detected task's PR into its repo's release branch across all repos, set merged:release. 4. pre-QA gate: tier tests (integration + e2e smoke) on origin/release BEFORE deploying; regression → block the offending task (out of RC), keep the rest. 5. deploy QA (bin/release prepare), wait-for-boot, smoke /up. 6. on QA-green → flip swept tasks stage→assembled (merged stays release); QA-deploy failure → tasks stay reviewed for the next self-healing run. (Avi production-deploy) ship QA-green assembled release: ff release→main per repo (set merged:main), deploy prod, smoke, seal, notes; success → shipped. MERGED FIELD matrix (see add-task-merged-field): reviewed+nil=not swept; reviewed+release=swept/QA-in-flight; assembled+release=QA-green waiting Avi; assembled+main=ff'd/prod-in-flight; shipped+main=done. Self-healing: interrupted Steffon skips re-merging merged:release; interrupted Avi skips re-ff'ing merged:main. TOUCHES: Release::Conductor (move reviewed→assembled from adopt!/merge into prepare; add sweep + create-release-if-none + on-QA-green flip + block-on-regression); bin/release (prepare grows sweep/merge; merge → the per-task primitive prepare loops, or deprecate; pr-review drops merge); heartbeats.md §1-2 (NOTE: a submitted reorder PR #348 already reordered Avi/Steffon acts downstream-first — coordinate); devops-cycle-design.md §1.4 + §1.2 lanes; qa-release SKILL; board should show the merged state on cards (deferred from the foundation to avoid the in-flight insight-pipeline board conflict). HEAVY tests.
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.
EPIC built + certified: souls bookend the pipeline — Avi pr-review is review-only (stops at reviewed); Steffon's bin/release prepare is now the self-healing sweep (detect reviewed+stragglers → ensure RC → gh-merge with merged:release crash-skip → pre-QA gate (qa_test_cmd, eject on regression) → deploy QA → qa_green! flips members assembled ONLY on green); ship stamps merged:main per repo at each ff. New: Conductor.sweep!/sweep_candidates/qa_green!/eject!/record_merged!, pure Release::SweepPlan, bin/release eject verb. Docs: devops-cycle-design §1.1/1.2/1.4, heartbeats §1-2 + merged matrix, qa-release SKILL, pr-review-sop, avi role, parallel-agent-devops, /stages vocabulary + tripwires. Full suite (2638 runs) + rubocop certified; dor-check green. PR #362 (base release). NOTE: doc overlap with open PR #351 — second merger rebases. Post-merge: bin/install-agent-docs to sync the SKILL.
PR #362 cannot merge as-is — two verified issues after round-1 siblings landed on release: (1) CONFLICTING/DIRTY against current origin/release (overlaps #351's share-insights rename in heartbeats.md, docs/agents/skills/qa-release/SKILL.md, and devops-cycle-design.md §1.4) — rebase on freshly-fetched origin/release resolving those conflicts in favor of the rename; (2) the diff's new heartbeats.md act row (~line 1740 of the diff) uses the retired act name 'propagate-insights' — update it to 'share-insights'. After the rebase the suite cert is STALE by definition: re-run bin/full-suite-check AND bin/dor-check back-to-back from the same worktree (no commands in between), commit nothing after cert, then move submitted and post a note --resolves-feedback. Product direction itself fits the deploy-flow redesign epic — this send-back is freshness/naming only; full deep review (primary=jasper, light=shannon, alex shadowing suggested) runs on the resubmit.
REVIEW-ONE verdict (primary=jasper, light=shannon) on PR #362 @ cbb24ca9: architecture + state machine SOUND — merged matrix, crash-recovery idempotency (sweep! early-return / SweepPlan skip / pr_merged? fallback / ensure-batched record), override paper trail, pre-QA-gate honesty + ensure-restore, best-effort merged:main with ship! re-stamp, and the retargeted tripwires all verified against the tests. No stranding path found. Fix WITH the in-flight rebase rework (same cycle): (1) prepare --task <slug> silently DROPS a missing/ineligible named slug — sweep_detect_ruby filters candidates by only_slugs so screen_merge never sees a blocked/missing status, yet the run ends "Assembled rel-x" (operator believes the named task rode QA); screen the RAW --task list or warn per unmatched slug, and fix the bin/release.rb ~1076 comment claiming the gate "guards the --task list". (2) bin/release.rb ~1368 prints "then hand off to Avi: bin/release ship" unconditionally even after the QA-NOT-green summary — gate it on qa_green. (3) Reconcile sweep! docstring "never regresses a merged:main member": a CROSS-RELEASE assembled+merged:main straggler hits member=nil -> release.add overwrites merged to "release" (release.rb ~253); either guard it or soften the claim to current-release members. SHOULD-FIX same pass: (4) docs/agents/agents/steffon/role.md is stale — still "after the two seniors merge into release", no sweep/merge/eject ownership; update + consider adding to REVIEW_DOCS tripwire list. (5) Release::CleanCheck copy says "already assembled" but status now feeds it reviewed+merged:release too. NITS: vocabulary Assemble-lane step label "Merge Review" vs its new "Pre-QA gate:" expectation; merge summary "stages stay reviewed" is wrong for an assembled straggler. Deep review of cbb24ca9 is DONE — the resubmit needs only a DELTA review (rebase resolution in the 3 overlap docs + propagate-insights rename + these fixes + fresh cert).
Rebased on origin/release, conflicts resolved in favor of share-insights, act row renamed, re-certified green
activity-729 delta addressed: --task loud-fail, conditional Avi handoff, add no-downgrade guard for merged:main stragglers, steffon role.md sweep contract, CleanCheck copy, Merge Review->Pre-QA Gate + merge summary nits; 6 new tests, re-certified green
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
XL
Dev
XL
Actual
XL
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.