Created
Jun 23, 23:31
Started
Jun 23, 23:32
Completed
Jun 24, 00:16
DevOps handoff
Type
Bug
Shape
ui-only
Worktree Slug
fix-blocked-card-drag
Repositories
mcritchie-studio
Release Train
—
Branch
feat/fix-blocked-card-drag
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Fix-forward on #138 (board-aware-crew-columns, already merged into rel-20260623-fb969a + on QA). Two reviewer findings: (1) CARL (medium) + SHANNON (minor): blocked cards now ride the Building dropzone (dropzone-building, data-stage=building) but the CARD is tagged data-stage=blocked. SortableJS onEnd in app/views/tasks/_board.html.erb fires on EVERY drop incl in-place reorders (no same-zone guard ~line 54/59); handleSortEnd then sees oldStage=blocked vs newStage=building, differs, and PATCHes task.stage=building — silently UN-BLOCKING the task just by dragging/reordering it within its column (controller permits :stage with no transition guard, tasks_controller.rb:188). Also the failed-PATCH revert does getElementById('dropzone-'+oldStage)=dropzone-blocked which no longer exists -> card stranded until reload. FIX: add a same-zone guard in handleSortEnd (from===to -> no PATCH) AND/OR align blocked cards to data-stage=building + map the revert to dropzone-building. (2) SHANNON (minor): blocked rides Building which is collapsed <1250px on the deploy board behind the All Stages toggle, so a needs-attention blocked task is hidden by default -> keep Building uncollapsed or surface a blocked indicator on always-visible lanes. Plus stale-comment nits in _stage_agent_avatars.html.erb (grid 'for blocked', crew_overlap peek, locals header board default fiction) and _board.html.erb ('All columns'->'All Stages'). The JS drag interaction is NOT covered by minitest; add coverage at the best available tier (system/Playwright if feasible, else a focused assertion).
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 PASS: carl (HEAVY, found the original bug) approve — fix sources stage from dropzones (evt.from/evt.to), PATCH gated on fromZone!==toZone, so a same-zone reorder of a blocked card no longer silently un-blocks; revert reinserts into live fromZone; archiveTask stranding fixed via zoneForStage(blocked->building); Building lane exempt from <1250px collapse (blocked stays visible); component-tier coverage locks the invariants; all 4 CI checks green (test 1m48s); FULL suite 1315/0 + rubocop 0. jasper (LIGHT) approve. Nits (non-blocking): tests assert literal JS substrings; pre-existing revert-order 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.