Review: CRM: show jersey payment status per player (re-review)
Verdict: READY
Re-review after NEEDS_REFINEMENT on
review-667-2026-03-29. All 6 recommendations addressed.Template Completeness
- [x] Type -- Feature
- [x] Lineage -- "Decomposed -- frontend only. Backend dependency: basketball-api#248."
- [x] Repo --
forgejo_admin/westside-landing - [x] User Story -- As Marcus (admin), I want to see jersey payment status per player in the admin CRM
- [x] Context -- References basketball-api#248 and the fields it will return
- [x] Dependency Gate -- Explicit: "MUST NOT execute until basketball-api#248 is merged and deployed"
- [x] File Targets -- Specific file with explanation; exclusion list present
- [x] Acceptance Criteria -- 3 concrete, verifiable criteria
- [x] Test Expectations -- Visual Playwright screenshot + manual validation
- [x] Constraints -- Frontend-only, match existing badge patterns
- [x] Checklist -- Standard PR checklist
- [x] Related -- project-westside-basketball + basketball-api#248
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:westside-app label -- frontend component
- [ ] arch note MISSING -- [SCOPE] No
arch-westside-appnote exists in pal-e-docs. This is a platform-wide gap (not specific to this ticket). Create architecture note arch-westside-app for component westside-app. - [x] Forgejo issue -- forgejo_admin/westside-landing#183, open
File Targets
- [x]
src/routes/(app)/admin/players/+page.svelte-- verified: file exists at~/westside-app/src/routes/(app)/admin/players/+page.svelte. Currently displays subscription_status and contract_status badges on lines 291-292. Existing badge pattern functions (getStatusBadgeClass, getContractBadgeClass) provide a clear template for jersey_order_status badges. - [x] Exclusion:
src/routes/(app)/jersey/-- correctly excluded (ordering page, separate concern) - [x] Exclusion: Backend API -- correctly excluded (decomposed to basketball-api#248)
Repo Placement
OK. Issue filed on
forgejo_admin/westside-landing, which is the correct Forgejo repo for ~/westside-app (confirmed via git remote). Backend work correctly decomposed to forgejo_admin/basketball-api#248 as a separate issue.Dependencies
- basketball-api#248 (open, blocking) -- "Add jersey fields to AdminPlayerItem response." Must be merged and deployed before this ticket executes. Dependency Gate section explicitly documents this.
- Board item #534 (done): "Show contract status in admin CRM player list" -- same story (WS-S9), same file target. Provides pattern precedent for badge additions.
- No in_progress or next_up items conflict with or block this work.
Acceptance Criteria
3 criteria, all verifiable:
- "jersey_order_status as a colored badge (none=grey, pending=yellow, paid=green, shipped=blue)" -- concrete, covers all 4 enum values (verified: JerseyOrderStatus enum in basketball-api has none, pending, paid, shipped)
- "Paid players show jersey_option label and jersey_number" -- concrete, testable via screenshot
- "Works on mobile" -- standard, testable via Playwright viewport resize
Previous vague AC ("Easy to filter or sort by jersey status") was removed. Remaining criteria are tight and agent-verifiable.
Blast Radius
- Admin CRM is a single page. Badge addition is isolated -- no other views consume the admin player list.
- jersey_number is already displayed in 3 other views (teams, coach, public teams) via different API endpoints. No cross-contamination risk.
- jersey_order_status and jersey_option are not currently used anywhere in the frontend -- this is a net-new display.
Decomposition
No decomposition needed. Single file target, 3 acceptance criteria, single repo. Estimated agent time well under 5 minutes. Previous decomposition recommendation (split backend/frontend) was executed -- basketball-api#248 handles backend.
Fixes From First Review
All 6 recommendations from
review-667-2026-03-29 addressed:[BODY]File target fixed:src/routes/(app)/admin/->src/routes/(app)/admin/players/+page.svelte-- DONE[BODY]Incorrect "backend data already exists" constraint removed, replaced with accurate dependency statement -- DONE[BODY]Backend file target removed (decomposed to separate issue) -- DONE[BODY]Vague "filter or sort" AC removed -- DONE[BODY]Missing "shipped" status added (4 badge colors now specified) -- DONE[DECOMPOSE]Split into backend (basketball-api#248) + frontend (this ticket) -- DONE
Recommendation
[SCOPE]Create architecture notearch-westside-app-- platform-wide gap, not a blocker for this ticket.
No body or label fixes needed. Ticket is ready for execution once basketball-api#248 is merged and deployed.