Validation: #196 Spike - Player self-service jersey ordering

validation-196-2026-03-30 Doc

validation pass

Verdict: PASS

Spike deliverable was sub-tickets, not code. All acceptance criteria met.

Acceptance Criteria Verification

# Criterion Result Evidence
1 Backend changes documented with specific file targets and approach PASS basketball-api#255 (dual-auth), #256 (player_id param) created with full file targets
2 Frontend entry point decided with mockup or description PASS westside-landing#197 (jersey order card on player profile), #198 (session auth on jersey/checkout pages) created
3 Multi-player parent edge case addressed PASS basketball-api#256 adds optional player_id param with ownership validation
4 Sub-tickets created on Forgejo and added to board PASS 4 tickets created, all on board-westside-basketball. Additionally #257 (jersey fields in profile response) discovered and created during review.

Sub-tickets Produced

  • basketball-api#255 — dual-auth dependency (MERGED, PR #258)
  • basketball-api#256 — player_id param for multi-player parents (in_progress)
  • basketball-api#257 — jersey fields in PlayerProfileResponse (MERGED, PR #259)
  • westside-landing#197 — jersey order card on player profile (backlog)
  • westside-landing#198 — frontend session auth on jersey/checkout (in_progress)

Blast Radius

Investigation confirmed zero blast radius to register.py and tryouts.py. registration_token auth paths are fully isolated. Verified during #255 implementation — 702 tests passing.