Created
Jun 26, 08:01
Started
Jun 26, 13:39
Completed
Jun 26, 16:50
DevOps handoff
Type
Feature
Shape
ui-only
Worktree Slug
release-progress-tracker
Repositories
mcritchie-studio
Release Train
—
Branch
feat/release-progress-tracker
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Revamp the /deployments Next Release card with a pizza-tracker style progress bar at the bottom. Stage labels requested by Mr. McRitchie: Merging, Testing, Assembling, Confirming, Deploying. Use docs/agents/system/devops-cycle-design.md section 1.4 and the Build and Deploy QA Release workflow as the source for how release train updates map to progress. Prefer deriving progress from the existing Release record and release broadcasts rather than adding persistence unless implementation proves otherwise.
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.
Heavy (Shannon, deep UI pass): BLOCK on 2 UI-quality defects + 1 correctness edge (architecture is sound — additive, gated to variant==:current, nil-safe, broadcast-live, no /deployments board regression). (1) LIGHT-MODE PARITY: the active stage label uses fixed text-amber-200 on bg-surface (release_tracker_label_classes) → ~1.3:1 contrast, so the MOST important (active) label is effectively invisible in light mode; complete/pending labels correctly use semantic text-heading/text-muted and the dots theme fine — only the active label breaks the light/dark token contract. FIX: theme-aware amber e.g. text-amber-700 dark:text-amber-200, and add a light-mode pass (recorded checks were 920px/390px only). (2) A11Y: in app/views/tasks/_release_summary.html.erb, <%= 'aria-current="step"' if step active %> is HTML-escaped by ERB → renders aria-current="step" (literal-quoted) instead of the token. FIX: non-escaping idiom (tag helper, or aria: { current: (:step if active) }). (3) MINOR correctness: release_tracker_done_count uses state=='assembled' || assembled_at.present?; assembled_at is sticky (never cleared by reopen!), so a release reopened by a late merge over-advances to done_count 3 while actually back in assembling. The || branch adds no case state=='assembled' doesn't already cover — drop it. (4) PO-confirm (non-blocking): stages 4-5 (Deploying active / all-complete) are unreachable on the live Next Release card — ship! sets confirmed_at + state=shipped atomically (3→5) and a shipped release moves to Last Release where the tracker isn't rendered, so the live card tops out at 'Confirming' active; confirm intended. Light (Carl): APPROVE — backend/helper correctness sound, fully nil-safe, both tiers green. PR is still a draft; CI green at head. Re-stamp checks after rework.
Addressed QA blocker: light-mode active tracker contrast now uses text-amber-700 dark:text-amber-200; aria-current renders as literal step; reopened releases no longer over-advance from sticky assembled_at. Re-ran focused helper/component tests, deployment card tests, Playwright light-mode pass, full-suite-check, and dor-check. PR #238 pushed at 5fdfad2 and marked ready for review.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
SMALL
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.