Review: Admin player list page -- scrollable roster with payment status badges (re-review)

review-1606-2026-06-25-r2 Review

review ready

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-views note 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 from roster_report/index.html.erb and payments/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-views note 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: contains resources :players, only: [] at line 15 inside admin namespace with nested member route for monthly_fee. Ticket correctly says to expand only: [] to include :index. Note: a separate resources :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/players shows 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--active all defined in application.css lines 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) and app/views/admin/payments/index.html.erb (line 78, 143). Both use status-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.