Review: Admin player list page -- scrollable roster with payment status badges (re-review)
Verdict: READY
Re-review of board item #1606. Previous review (
review-1606-2026-06-25) found two issues, both now resolved.Previous Issues -- Resolution
- [x]
arch-rails-viewsnote missing -- RESOLVED. Note now exists (slug:arch-rails-views, note_type: architecture, project: paldocs). Covers ERB templates, Hotwire patterns, CSS conventions. - [x] CSS badge constraint missing -- RESOLVED. Constraint added to issue body: "Reuse existing
status-badge status-badge--{variant}CSS class pattern fromroster_report/index.html.erbandpayments/index.html.erb-- do not invent new badge styles."
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- references #54, story WS-S9
- [x] Repo -- ldraney/westside-basketball
- [x] User Story -- As Marcus (admin), scrollable player list with payment status
- [x] Context -- explains current disjointed views, motivation for unified list
- [x] File Targets -- 2 create, 1 modify, 2 do-not-touch
- [x] Feature Flag -- "none" (correct for admin-only internal view)
- [x] Acceptance Criteria -- 7 criteria
- [x] Test Expectations -- 2 controller tests with run command
- [x] Constraints -- 5 constraints listed (was 4, now includes CSS badge reuse)
- [x] Checklist -- standard 3-item checklist
- [x] Related -- references #54 and #58
All required sections present. Template is complete.
Traceability
- [x] story:WS-S9 label -- "As an admin, I want to track payment status per player so that I know who owes what"
- [x] story note verified -- found in project-westside-basketball user-stories section under Admin (Marcus)
- [x] arch:rails-views label -- present on board item
- [x] arch note verified --
arch-rails-viewsnote exists in pal-e-docs (Architecture: Rails Views -- ERB templates and Hotwire patterns) - [x] Forgejo issue -- ldraney/westside-basketball#55, state: open
File Targets
- [x]
app/controllers/admin/players_controller.rb-- verified: does NOT exist yet, correct to CREATE - [x]
app/views/admin/players/index.html.erb-- verified: does NOT exist yet, correct to CREATE - [x]
config/routes.rb-- verified: containsresources :players, only: []at line 15 inside admin namespace with nested member route formonthly_fee. Ticket correctly says to expandonly: []to include:index. Note: a separateresources :players, only: [:index]exists at line 22 outside the admin namespace (public players route) -- agent must modify the admin-namespaced one at line 15, not the public one. - [x]
app/controllers/admin/payments_controller.rb-- verified: EXISTS, correctly listed as do-not-touch - [x]
app/controllers/admin/roster_report_controller.rb-- verified: EXISTS, correctly listed as do-not-touch
All file targets verified. No inaccuracies found.
Repo Placement
OK. Issue filed on ldraney/westside-basketball, all file targets are in that repo. No cross-repo work needed.
Dependencies
- depends:54 (Keycloak auth) -- board item #1605, column: done. Dependency is satisfied.
- Blocks #58 (Admin player detail page) -- board item #1609, column: backlog, has
depends:55. Correctly documented in both issues' Related sections.
Dependency chain is clean. No undocumented dependencies found.
Acceptance Criteria
7 acceptance criteria are testable:
- AC1 (
/admin/playersshows list) -- verifiable via controller test, HTTP 200 + content check - AC2 (grouped/filterable by team) -- verifiable via controller test with team params
- AC3 (row shows player name, parent name, email, status badge) -- verifiable via view test or system test checking DOM elements
- AC4 (visual indicator for current vs behind) -- verifiable via CSS class check on badge. CSS classes confirmed:
status-badge--paid,status-badge--unpaid,status-badge--partial,status-badge--activeall defined inapplication.csslines 1467-1479 - AC5 (click navigates to
/admin/players/:id) -- verifiable but detail page (#58) doesn't exist yet. Link will 404 until #58 ships. Acceptable since #58 depends on #55. - AC6 (mobile-responsive) -- requires manual/visual check or system test with viewport
- AC7 (admin role required) -- verifiable via auth test (Keycloak gating from #54)
Test expectations list 2 controller tests with run command
rails test test/controllers/admin/players_controller_test.rb. No existing admin players test file -- agent must create it. Expected for a new controller.Blast Radius
- Status badge pattern confirmed in
app/views/admin/roster_report/index.html.erb(line 66, 83) andapp/views/admin/payments/index.html.erb(line 78, 143). Both usestatus-badge status-badge--{variant}CSS class pattern. The new constraint explicitly requires reusing this pattern. - Models verified: Player, Parent, Team, PlayerTeam all exist. No migrations needed as stated in the issue.
- No other downstream consumers affected. The route addition is additive.
Decomposition Assessment
- File targets: 3 files across 1 repo -- under threshold
- Acceptance criteria: 7 ACs -- above the 5-AC threshold, but all are tightly coupled to a single controller+view. The work is cohesive: one controller, one view template, one route line.
- Estimated agent time: ~3-4 minutes (scaffold controller, build view, add route, write 2 tests)
No decomposition needed. The ACs are facets of a single page, not independent features.
Recommendation
No action needed. Both issues from the previous review have been addressed. Scope is solid, all file targets verified, traceability complete with backing notes, fits in a single agent pass.