Created
Jul 06, 23:31
Started
Jul 07, 04:16
Completed
Jul 07, 22:41
DevOps handoff
Type
Feature
Shape
ui+db
Worktree Slug
stagger-shipped-updates
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/stagger-shipped-updates
Acceptance Criteria
Expected Test Plan
Checks Run
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.
Scout report: merge-ready - Backend light review: release-first ordering is safe, resume path is idempotent, broadcasts ErrorLog-wrapped, 1s cadence is a real server sleep outside any transaction. Reporter: carl Outcome: merge-ready Findings: - Transaction wrapper intentionally removed so each member flip commits + broadcasts independently; release marked shipped strictly before member flips (criterion met). - Partial-failure recovery present: resumable_member_ship + 'next if stage==shipped' + Release.last_shipped resume gate in bin/release step 1; idempotent on re-run. - Broadcasts ride TaskEvent after_commit through Studio::Cable.safe_broadcast which captures to ErrorLog; sleep(1) is outside any transaction (no held PG conn/lock). - Non-blocker: no regression test for the resume/idempotency branch (shipped release w/ unfinished members) — riskiest new logic; recommend adding a unit test. Questions: - none Checks: - reviewed release.rb ship! ordering + resume gate - reviewed conductor.rb ship! (transaction removed, release-first) - confirmed safe_broadcast -> ErrorLog.capture! in studio-engine cable.rb - confirmed sleep is server-side + outside transaction, loop bounded by members
Scout report: merge-ready - PR #438: release-first ship ordering + 1s member cadence + 8s Last Release fresh-deploy glow. All 3 acceptance criteria met; CI green; full-suite/rubocop certs bound to PR head tree (a774ce8) so the primary-checkout DOR STALE is a false positive; ui+db tiers all present; no file overlap with #437. Reporter: shannon Outcome: merge-ready Findings: - Ordering (acceptance 1) VERIFIED: deployed_sha update + deploy_prod events + release state->shipped commit all precede member flips; broadcast_release_modules after_commit fires on committed shipped state before members walk (transaction wrapper intentionally removed to make the release-first swap observable). - Cadence (acceptance 2) VERIFIED: member_pause=1 wired bin/release -> Conductor.ship! -> Release#ship!; pause only BETWEEN members (shipped_count.positive? guard), sleep is OUTSIDE any transaction so no DB connection is held across it; unit test asserts [1.0]. - Glow/fade (acceptance 3) VERIFIED: 8s CSS (4s steady rainbow via 0%,50% then 4s fade), negative --lbfx-fresh-delay preserves phase across replacement streams, >8s stale guard falls back to burst; data-fresh-deploy/data-shipped-at-ms on #last-release; component+view+e2e cover it. Consistent with the file's hardcoded-color glow convention across both themes. - Failure-safety (production-deploy risk) VERIFIED: no stranded state - partial progress is durable+resumable; resume path (Release.current || Release.last_shipped, unfinished>0) allowed past the assembled QA gate ONLY for unfinished member flips; deploy_prod events idempotent; member loop skips already-shipped; smoke-seal + record step now address release BY SLUG (fixes Release.current==nil during resume). - NON-BLOCKER: the standalone release.update!(deployed_sha) commit (still assembled) now fires one extra broadcast_release_modules -> a brief subtle glow on the Next Release card just before it resets. Cosmetic only; no-ops on resume (unchanged attrs). Optional: reduced-motion guard is absent but matches every existing animation in the FX file (not a regression). Questions: - none Checks: - CI green: test 3m42s, lint, scan_js, scan_ruby all pass - full-suite@a774ce8 + rubocop@a774ce8 == PR head tree hash -> DOR STALE is a primary-checkout false positive (verified by tree equality) - ui+db DoR tiers [unit, component, integration, e2e] all present in checks_run - No same-file overlap with reviewed PR #437 (touches _stage_agent_avatars.html.erb only) -> clean merge
Avi review approved; ready for Steffon's qa-release sweep.
Scout report: request-changes - Blocker: initial-page fresh Last Release cards never schedule the cleanup that restores the muted state; the live Turbo replacement path is covered, but the initial-render path is not. Reporter: carl Outcome: request-changes Findings: - BLOCKER app/views/tasks/_last_release.html.erb:10-25 renders a release shipped within 8s as data-fresh-deploy=true, lbfx-fresh-deploy/release-fresh-glow, and without opacity-75. app/views/tasks/_deployments_live_fx.html.erb:190-205 clears those classes/data/style only when freshDeployGlow runs, and the only caller is the Turbo-stream replacement hook at app/views/tasks/_deployments_live_fx.html.erb:497-518. A viewer opening /deployments during the fresh window will see the CSS animation end but the DOM never regains opacity-75 or clears data-fresh-deploy/style. - NON-BLOCKER merge safety: PR #438 is mergeable against release and GitHub CI is green; open release-board PRs #444, #434, and #361 touch adjacent/shared release files, so batch order should be watched, but no direct conflict is reported now. Questions: - none Checks: - Read AGENTS.md, pr-review-light SOP, Carl role, README, deployment/devops docs, task metadata, PR body, diff, changed files, tests, CI, and open PR overlap; did not rerun gates as light reviewer.
Scout report: request-changes - Request changes: server-rendered fresh Last Release cards do not schedule cleanup, so loading /deployments during the 8s glow window leaves the card full-opacity after the glow ends. Reporter: shannon Outcome: request-changes Findings: - Blocker: app/views/tasks/_last_release.html.erb renders fresh classes and removes opacity-75 for releases shipped within 8 seconds, but app/views/tasks/_deployments_live_fx.html.erb only calls freshDeployGlow/clearFreshDeployGlow from the Turbo stream replacement handler. Initial page loads during that window never call the cleanup path. Questions: - none Checks: - DoR passed; GitHub CI green; focused Rails tests passed; E2E release_ship passed; PR currently mergeable/clean but overlaps active release UI/CLI PRs.
pr-review blocked review: shannon: request-changes - Request changes: server-rendered fresh Last Release cards do not schedule cleanup, so loading /deployments during the 8s glow window leaves the card full-opacity after the glow ends.; carl: request-changes - Blocker: initial-page fresh Last Release cards never schedule the cleanup that restores the muted state; the live Turbo replacement path is covered, but the initial-render path is not.
Resolved QA blocker: initial server-rendered fresh Last Release cards now initialize the same cleanup timer as Turbo replacements; E2E reload path covers the regression.
Scout report: merge-ready - No blockers in Carl backend light review; release-first ship, one-second member cadence, and Last Release glow match acceptance. Reporter: carl Outcome: merge-ready Findings: - Non-blocking coordination note: open PRs #434/#444 overlap helper/test release-board surfaces; PR #438 is GitHub merge-clean and does not overlap files already merged on release. Questions: - none Checks: - Read AGENTS, repo README/deployment/testing/devops docs, Carl role, task metadata, PR body, diff, changed files, CI, and merge safety; did not rerun review gates.
Scout report: merge-ready - Primary review found no blockers; acceptance matches release-first ship, one-second task cadence, and Last Release glow/fade. Reporter: shannon Outcome: merge-ready Findings: - Non-blocking: open PRs #434 and #444 pairwise-conflict with #438 in release helper/test surfaces; #438 itself merges cleanly into current origin/release. Questions: - none Checks: - Read AGENTS/README/deployment/testing/devops docs/SOP/Shannon role; inspected task, PR body, diff, changed files, CI, merge safety; ran focused Rails, full-suite-check, DoR, and isolated Playwright release_ship.
pr-review moved stagger-shipped-updates to reviewed after shannon + carl reported merge-ready. Left for Steffon QA. Reports: - shannon: merge-ready - Primary review found no blockers; acceptance matches release-first ship, one-second task cadence, and Last Release glow/fade. - carl: merge-ready - No blockers in Carl backend light review; release-first ship, one-second member cadence, and Last Release glow match acceptance.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
—
Dev
SMALL
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.