Review: Player-facing subscription status page

review-1639-2026-06-27 Review

review approved

Verdict: APPROVED

Re-review after round 1 refinements. Round 1 flagged missing arch-app-store note -- that note now exists (ID 2224). All other checks passed in round 1 and remain valid.

Template Completeness

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

Traceability

  • [x] story:WS-S37 label — "As a player or parent, I want to log in and see my subscription status and payment history so that I know where I stand and can take action if needed"
  • [x] story note verified — found in project-westside-basketball user-stories section (Player role)
  • [x] arch:app-store label — App Store Billing component
  • [x] arch note verified — arch-app-store note exists in pal-e-docs (ID 2224, "Architecture: App Store Billing")
  • [x] Forgejo issue — ldraney/westside-basketball#83, open

File Targets

  • [x] app/controllers/players_controller.rb — verified: exists, has only index action. Adding status action is correct.
  • [x] app/views/players/status.html.erb — new file to create. Only index.html.erb exists currently. Correct.
  • [x] config/routes.rb — verified: exists, currently has resources :players, only: [:index]. Route expansion needed.
  • [x] DO NOT touch list — app/views/admin/ (admin pages are separate sub-tickets) and app/models/player.rb (model changes in sub-ticket A) are correctly excluded.

Repo Placement

Correct. Issue filed on ldraney/westside-basketball, all file targets are in that repo. Single-repo change.

Dependencies

  • depends:79 (sub-ticket A — Apple subscription model fields + migration). Board item #1636, currently in backlog. The Player model has NO apple_subscription_status field yet — this dependency is real and correctly documented. The status page reads subscription state from these fields.
  • parent:66 (Subscription UI — 3-page arch). Parent item #1611, in next_up with decomposed label. Correct parent relationship.

Acceptance Criteria

3 ACs, all verifiable by an agent:
  • Player can view subscription status at the status route — testable via controller test
  • Status page shows appropriate state for all Apple subscription statuses (6 states enumerated) — testable via view rendering tests
  • No-subscription state shows call-to-action (not an error) — testable via specific assertion
Test expectations include 3 unit tests with a valid run command: bundle exec rails test test/controllers/players_controller_test.rb. Test file exists in the repo.

Blast Radius

Minimal. This is a new route and view — no existing behavior changes. No feature flag needed (correctly noted as "none"). The status page is additive; existing player index page is untouched.

Decomposition Assessment

3 file targets, 1 repo, 3 ACs. Estimated agent work well under 5 minutes. No decomposition needed.

Recommendation

No action needed. Ticket is APPROVED for todo.