Review: feat: group kanban cards by phase within columns (re-review)

review-1342-2026-06-06-r2 Review

review ready

Verdict: APPROVED

Re-review after refinement. Previous review (review-1342-2026-06-06) found 6 issues: wrong CSS path, missing kanban_controller.js file target, underspecified drag AC, and missing traceability notes. All 6 have been addressed in the updated issue body and pal-e-docs.

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage
  • [x] Repo -- ldraney/paldocs
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related

Traceability

  • [x] story:kanban label -- present on board item
  • [x] story note verified -- story-paldocs-kanban exists in pal-e-docs (note_type: doc, project: paldocs)
  • [ ] project page user-stories section NOT updated -- still says "No user-story notes created yet." The note exists but the project page does not reference it. Minor gap, does not block ticket. [SCOPE] Update project-paldocs user-stories section to reference story-paldocs-kanban.
  • [x] arch:rails-views label -- present on board item
  • [x] arch note verified -- arch-rails-views exists in pal-e-docs (note_type: doc, project: paldocs, sections: Conventions, Key Files)
  • [x] Forgejo issue -- ldraney/paldocs#11, state: open

File Targets

  • [x] app/controllers/boards_controller.rb -- verified: exists, 9 lines. Currently groups items by column via flat position ordering. Correct target for adding phase grouping logic.
  • [x] app/views/boards/show.html.erb -- verified: exists, 30 lines. Iterates columns and renders cards in flat list. Correct target for phase group headers.
  • [x] app/views/board_items/_card.html.erb -- verified: exists, 45 lines. Already renders labels as badges. Correct target for phase badge styling.
  • [x] app/assets/stylesheets/application.css -- verified: exists, 676 lines. Kanban styles at lines 453-676 (confirmed: line 453 is .kanban {, line 676 closes the last media query). Issue correctly identifies the line range. Previously flagged as wrong path (kanban.css) -- now fixed.
  • [x] app/javascript/controllers/kanban_controller.js -- verified: exists, 199 lines. All 5 methods cited in the issue confirmed: _dropPosition (line 179), drop (line 45), cardClick (line 73), moveUp (line 124), moveDown (line 139). Issue correctly describes flat-list assumptions that will break with nested containers. Previously missing from File Targets -- now added with detailed method notes.

Repo Placement

OK -- issue filed on ldraney/paldocs, repo field says ldraney/paldocs, all 5 file targets are in this repo. Single-repo change.

Dependencies

  • Item #1221 (done) -- "Interactive kanban board -- drag-and-drop columns with Turbo + Stimulus" -- the predecessor feature. Complete.
  • Item #1345 (in_progress) -- "spike: audit infra/pipeline gaps" -- independent, no conflict.
  • Item #1343 (backlog) -- "feat: render project page note content" -- shares arch:rails-views label but is independent work on a different view.
  • Item #1344 (backlog) -- "feat: add Postgres trigger to bump projects.updated_at" -- independent DB work.
  • No blocking dependencies. No conflicts with in-progress items.

Acceptance Criteria

7 acceptance criteria. All are manually testable. Improvements from previous review:
  • AC #5 now explicitly covers drag-and-drop across phase groups within the same column (previously missing).
  • AC #6 covers cross-column drag with phase group targeting.
  • AC #7 specifies ordering rule: "ordered by position of the phase board item within the column" (previously ambiguous).
  • All AC are verifiable via manual browser testing.

Blast Radius

Low. The kanban Stimulus controller is the only drag-and-drop controller in the app. No sibling services use it. CSS changes are in the single application.css file. The constraint "no schema changes" correctly limits blast radius to view/controller/JS layers. The main risk (breaking existing drag-and-drop) is acknowledged in the File Targets note for kanban_controller.js.

Decomposition Assessment

5 file targets in 1 repo, 7 acceptance criteria. The AC count (7) exceeds the >5 threshold. However, the criteria are tightly coupled -- all aspects of a single visual grouping feature across one controller, one view, one partial, one CSS file, and one JS controller. Decomposing would create artificial boundaries between inseparable concerns. At 5 story points and single-repo scope, this is feasible in one agent pass. No decomposition needed.

Previous Review Findings -- Resolution Status

  • [x] [BODY] CSS path fixed: kanban.css corrected to application.css with line range (453-676)
  • [x] [BODY] kanban_controller.js added to File Targets with detailed method-level notes
  • [x] [BODY] Phase group ordering clarified in AC #7
  • [x] [BODY] Cross-phase-group drag AC added (AC #5 and #6)
  • [x] [SCOPE] story-paldocs-kanban note created
  • [x] [SCOPE] arch-rails-views note created

Recommendations

  • [SCOPE] Update project-paldocs user-stories section to reference story-paldocs-kanban (minor -- does not block ticket advancement)
No other action needed. Ticket is ready for development.