Created
Jun 25, 12:48
Started
Jun 25, 12:49
Completed
Jun 25, 14:24
DevOps handoff
Type
Feature
Shape
backend
Worktree Slug
animate-live-board-events
Repositories
mcritchie-studio
Release Train
—
Branch
feat/animate-live-board-events
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Promote the dev-board animations (built in dev-fake-task-buttons / _dev_board_tools.html.erb) onto the REAL /deployments live board, triggered by DeploymentsBroadcaster Turbo Stream broadcasts (turbo_stream_from 'deployments') for every connected viewer. Move the animation JS out of the dev-only partial into the board's own live-update path (_board.html.erb kanbanBoard/observeLive), dropping the dev-fixture-prefix scoping and the DevBoard.action button gating. Disambiguate event type from the stream itself: prepend of a new card = create (pop+glow+bubbles); remove+prepend same id = move (shrink-out old, grow-in new); remove alone = delete/archive (shrink + FLIP reclaim); replace = in-place (subtle/none). Replaces the board's current basic animateIn (ring + fade). BACKEND: add a remove broadcast on Task destroy (TasksController#destroy or model) — hard delete fires no TaskEvent today so deletes never reach other viewers; wrap in Studio::Cable.safe_broadcast. Expose the mascot signature_color as a data-attr on the task_card root (use the board's prebuilt Pokemon.type_enumerals map to avoid N+1) so the client tints the glow. Dev tool's bespoke animation JS becomes redundant (real cards incl. dev fixtures animate via the shared path) — strip _dev_board_tools to just buttons+endpoints. Scope: /deployments only (the live socket). Gotcha to respect: Alpine x-show owns display on cards (hide via visibility+position, not display:none). Full intensity per operator; tunable.
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.
Shannon APPROVE: event classification correct for all broadcaster streams (create/move/delete/replace); no leaks/strand (Promise.race + 1200ms sweeps); after_destroy_commit guarded + correct card-#{slug} target; off-board remove is a no-op; footguns clean (strict-locals optional default, IIFE single-install). Non-blocking note: manual drag fired a CREATE burst — FIXED (window.__lbfxDragging guard on Sortable onStart/onEnd). Behavior operator-visual-accepted.
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.