Created
Jun 23, 18:36
Started
Jun 23, 19:16
Completed
Jun 23, 19:57
DevOps handoff
Type
Feature
Shape
backend
Worktree Slug
post-deploy-cmd-hook
Repositories
mcritchie-studio
Release Train
—
Branch
feat/post-deploy-cmd-hook
Local URL
—
QA URL
—
Production URL
—
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
REWORK done: rebased onto origin/release (kept PR130 retro + PR131 qa-intake); fixed carl blocker (--exit-code) + Shellwords/-- guard + dry-run/exec parity + exec-argv --exit-code assertion + intentional-abort comment; partial-ship resume tolerates already-live gems (ship_gem skip-if-live).
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.
2-senior review: carl (HEAVY) REQUEST_CHANGES; shannon (LIGHT) approve-with-concern. Fix before resubmit: (1) BLOCKER bin/release ~254: heroku run lacks --exit-code, so it returns 0 once the dyno LAUNCHES regardless of remote success — abort-on-failure never fires on QA or prod; a failing cmd records '-> ok' and the release proceeds. Add --exit-code. (2) MAJOR test/lib/release_cli_test.rb ~466: abort test stubs sh->false, sidestepping real exit semantics (why the blocker passed CI). Add an assertion that the emitted heroku command includes --exit-code (dry-run print test can assert it); keep the stubbed-abort test for branch coverage. (3) MINOR bin/release ~254: *cmd.split is naive whitespace split — mangles quoted args AND lets a task-declared cmd inject heroku flags, and the dry-run print diverges from what executes. Use Shellwords.split(cmd) and put a -- separator before the command tokens. (4) NIT: the unroutable-app abort runs before the DRY guard, so --dry-run can exit nonzero — guard it or add an intentional-comment. (5) Confirm a ship re-run after a post-deploy failure tolerates already-published gems (partial-ship resume).
Rework RE-REVIEW PASS: carl (HEAVY) approve — all 5 resolved: BLOCKER --exit-code now in executed argv (test pins it to the real sh argv, not just dry-run print); MAJOR abort test independently proves --exit-code + right app + ABORTED; MINOR Shellwords.split + -- terminator, single heroku_argv drives both dry-run and exec; NIT unroutable-app abort documented intentional; ship re-run tolerates already-published gems (verified in code). No new issues from the #130 rebase; 104 runs green. shannon (LIGHT) approve. Non-blocking: printed join renders spaced args unquoted (cosmetic).
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.