Review: Sprint planning UI -- dogfood the wave planner (round 2)
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.sqldo-not-touch -- correct, file doesn't exist yet (awaits paldocs#49) - [x]
app/controllers/projects_controller.rbdo-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
todocolumn. 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]Addarch:rails-dblabel to board item -- issue references arch-rails-db in Related section but the board item label only hasarch:rails-views. Sprint schema is a significant DB component.[DECOMPOSE]11 file targets, 8 AC, estimated more than 5 min agent work. Route toskill-decompose-ticket. Suggested split: (a) sprint schema + models, (b) sprint planning UI + controller + views.