Agents Builders

Fix blocked card drag

Archived
fix-blocked-card-drag

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

QA URL

Production URL

ui

Acceptance Criteria

  • in-place reorder of a blocked card never PATCHes stage
  • drag handler guards same-zone moves; revert finds its column
  • blocked tasks stay visible or flagged on narrow deploy

Expected Test Plan

  • ui

Checks Run

  • [component] blocked card renders in dropzone-building; no dropzone-blocked (stage-consistent DOM)
  • [component] drag handler sources stage from dropzones + same-zone guard; revert never targets dropzone-blocked
  • [component] Building lane stays visible (not collapsible) on narrow Deploy board
  • [suite] bin/rails test: 1315 runs, 5317 assertions, 0 failures, 0 errors, 4 skips
  • [lint] bin/rubocop: 465 files, no offenses

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.

  1. Created Designed
    P Parasect
    Parasect
    Model
    Duration
    Tokens
    Cost
    Completed Jun 23, 23:31 · 3 days ago
    api
  2. Designed Building
    P Parasect
    Parasect
    Model
    claude-opus-4-8
    Duration
    1 minute
    Tokens
    Cost
    Started Jun 23, 23:31
    Completed Jun 23, 23:32 · 3 days ago
    cli
  3. Building Submitted
    P Parasect
    Parasect
    Model
    claude-opus-4-8
    Duration
    16 minutes
    Tokens
    Cost
    Started Jun 23, 23:32
    Completed Jun 23, 23:48 · 3 days ago
    cli
  4. Submitted Reviewed
    S Shannon
    Shannon primary
    J Jasper
    Jasper light
    Model
    claude-opus-4-8
    Duration
    5 minutes
    Tokens
    4,750,664
    Cost
    ~$2.92
    Started Jun 23, 23:48
    Completed Jun 23, 23:53 · 3 days ago
    cli
  5. Reviewed Assembled
    S Steffon
    Steffon
    Model
    Duration
    under a minute
    Tokens
    Cost
    Started Jun 23, 23:53
    Completed Jun 23, 23:53 · 3 days ago
  6. Assembled Shipped
    A Avi
    Avi
    Model
    Duration
    23 minutes
    Tokens
    Cost
    Started Jun 23, 23:53
    Completed Jun 24, 00:16 · 3 days ago
  7. Shipped Archived
    Model
    Duration
    about 3 hours
    Tokens
    Cost
    Started Jun 24, 00:16
    Completed Jun 24, 03:44 · 3 days ago

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

QA Feedback avi 3 days ago

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