Review: Sprint planning UI -- dogfood the wave planner (round 2)

review-1560-2026-06-22-r2 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Round 2 re-review. Traceability gaps from round 1 are resolved -- story and arch notes now exist. Two new issues found: scope contradiction and decomposition needed.

Template Completeness

  • [x] Type -- Feature
  • [x] Lineage -- depends on paldocs#49
  • [x] Repo -- ldraney/paldocs
  • [x] User Story -- well-formed As/I want/So that
  • [x] Context -- clear dogfood rationale and sprint workflow description
  • [x] File Targets -- 11 create/modify targets + 2 do-not-touch entries
  • [x] Feature Flag -- none (correct, new routes/tables only)
  • [x] Acceptance Criteria -- 8 criteria
  • [x] Test Expectations -- 5 test entries + run command (bundle exec rspec)
  • [x] Constraints -- dependency, Hotwire, sprint statuses, nullable fields, v1 scope
  • [x] Checklist -- 10 items
  • [x] Related -- project, story, arch notes, upstream/downstream
All required sections for a Feature issue are present. Template is complete.

Traceability

  • [x] story:sprint-orchestration label -- present on board item
  • [x] story note verified -- story-paldocs-sprint-orchestration (id 2093) exists in pal-e-docs, linked from project-paldocs user-stories section
  • [x] arch:rails-views label -- present on board item
  • [x] arch note verified -- arch-rails-views (id 1839) exists in pal-e-docs, project paldocs
  • [x] arch-rails-db referenced in issue Related section -- arch-rails-db (id 1840) exists in pal-e-docs, project paldocs
  • [x] Forgejo issue -- ldraney/paldocs#50, state: open
Traceability triangle is complete. Both arch notes and story note exist. Previous round-1 gaps are resolved.

File Targets

  • [x] db/migrate/XXXXXX_create_sprints.rb -- new file, db/migrate/ dir exists with 2 existing migrations
  • [x] db/migrate/XXXXXX_create_sprint_projects.rb -- new file, same dir
  • [x] db/migrate/XXXXXX_add_sprint_fields_to_board_items.rb -- new file, same dir
  • [x] app/models/sprint.rb -- new file, models dir exists
  • [x] app/models/sprint_project.rb -- new file, models dir exists
  • [x] app/models/board_item.rb -- exists, currently has basic COLUMNS constant and board association
  • [x] app/models/project.rb -- exists, currently has notes/repos associations
  • [x] app/controllers/sprint_planning_controller.rb -- new file, controllers dir exists
  • [x] app/views/sprint_planning/ -- new directory, views dir exists
  • [x] config/routes.rb -- exists, currently has resources for projects/notes/boards/board_items
  • [x] app/views/layouts/ -- exists, application.html.erb has navbar with navbar-brand link
  • [x] db/structure.sql do-not-touch -- correct, file doesn't exist yet (awaits paldocs#49)
  • [x] app/controllers/projects_controller.rb do-not-touch -- correct, exists and should remain unchanged
All file targets verified. Existing files match what the issue describes. New files target valid parent directories.

Repo Placement

OK. Issue filed on ldraney/paldocs, all file targets are within paldocs repo. Single-repo change.

Dependencies

  • paldocs#49 (schema ownership transfer) -- explicitly documented as upstream dependency. Board item #1559 is in todo column. This ticket cannot start until #49 merges (needs structure.sql and migration infrastructure). Correctly documented in both Lineage and Constraints.
  • No other board items appear blocked by or blocking this ticket.

Acceptance Criteria

8 acceptance criteria, all in When/Then format. Assessment:
  • [x] AC 1-6 are UI-testable via system specs
  • [x] AC 7-8 are model-testable via unit specs
  • [x] Test command is correct: bundle exec rspec (rspec-rails confirmed in Gemfile)
  • [ ] ISSUE: v1 scope contradiction. AC 4 says "When I stage items into a wave, then they get sprint_id and wave_number set" (write action). But Constraints section says "Keep it functional first, polish later -- read-only wave view for v1." These are contradictory. Staging IS the core feature; recommend removing the "read-only" constraint.

Blast Radius

  • BoardItem model changes -- adding sprint_id and wave_number columns. Existing BoardItem usage in boards_controller.rb, board_items_controller.rb, and views all reference column/position/board_note_id. New nullable columns should not break existing queries.
  • Project model changes -- adding has_many :sprint_projects. Existing associations (notes, repos, page_note) are unaffected.
  • Navigation addition -- adding a link to application.html.erb navbar. Low risk, additive only.
  • Routes -- additive, no conflicts with existing resource routes.
  • No similar patterns in sibling services affected.

Decomposition Assessment

NEEDS DECOMPOSITION.
  • File count: 11 file targets (3 migrations + 3 new models + 2 model modifications + 1 new controller + 1 new view directory with 3+ templates + route changes + layout changes)
  • AC count: 8 acceptance criteria
  • Test count: 5 test expectations including a system test
  • Estimated agent work: Well over 5 minutes -- migrations, models, controller, multiple views, and tests
  • This exceeds the 5-minute rule on all three axes: more than 3 file targets, more than 5 AC, estimated more than 5 minutes of agent work.
  • Recommended split: (a) Sprint schema migrations + models (3 migrations, 3 new models, 2 model updates, model tests) and (b) Sprint planning UI (controller, views, routes, navigation, controller/system tests)

Recommendation

  • [BODY] Resolve v1 scope contradiction: AC 4 says "stage items into a wave" (write action) but Constraints say "read-only wave view for v1." Either remove the staging AC or remove the "read-only" constraint. Recommend keeping staging (it is the core feature) and removing the "read-only" constraint.
  • [LABEL] Add arch:rails-db label to board item -- issue references arch-rails-db in Related section but the board item label only has arch:rails-views. Sprint schema is a significant DB component.
  • [DECOMPOSE] 11 file targets, 8 AC, estimated more than 5 min agent work. Route to skill-decompose-ticket. Suggested split: (a) sprint schema + models, (b) sprint planning UI + controller + views.