Review: Add age-based team reassignment clause to Queens contracts
Verdict: APPROVED
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- discovered during girls roster assignment 2026-03-28
- [x] Repo -- forgejo_admin/westside-contracts
- [x] User Story -- admin wants Queens contracts to include age-based reassignment clause
- [x] Context -- explains graduating class spread (2027-2031) and need for discretion
- [x] File Targets -- 2 files listed with clear change descriptions
- [x] Acceptance Criteria -- 3 criteria, clear and testable
- [x] Test Expectations -- 3 items with concrete steps
- [x] Constraints -- 2 items (tone + legal soundness)
- [x] Checklist -- present
- [x] Related -- project-westside-basketball
Traceability
- [x] story:WS-S9 label -- billing and contracts user story
- [x] arch:contract-flow label -- contract-flow architecture component
- [x] Forgejo issue -- forgejo_admin/westside-contracts#29, open
File Targets
- [x]
src/routes/contract/[token]/+page.svelte-- verified: file exists (702+ lines). Queens-specific content block already exists at line 389 ({:else if !isLocal && isGirls}). Existing "Roster Flexibility" section at line 506 covers roster changes but not age-based reassignment specifically. TheisGirlsboolean is already destructured from data (line 7), so the agent should useisGirlsrather thanplayer.team_name?.includes('Queens')as the issue body suggests. - [x]
src/routes/contract/[token]/+page.server.ts-- verified: file exists (46 lines). Already passesteam_nameand derivesisGirls(line 44). No changes needed, as stated in issue.
Repo Placement
Correct. Issue filed on forgejo_admin/westside-contracts, changes target westside-contracts repo. Single-repo scope.
Dependencies
- [x] #556 "Phase 14: Billing Tiers and Contracts" (in_progress) -- parent work area, not a blocker
- [x] #534 "Show contract status in admin CRM player list" (done) -- WS-S9 sibling, no conflict
- [x] #133 "Phase 16: Expense Tracking" (backlog) -- WS-S9 sibling, no dependency
No unresolved dependencies. No blockers.
Acceptance Criteria
3 criteria, all verifiable by an agent:
- [x] Queens contracts include reassignment clause -- agent can check rendered HTML
- [x] Language is professional and clear -- subjective but agent can draft, human reviews in PR
- [x] Clause only appears on Queens, not Kings -- agent can verify via
isGirlsconditional guard
Test expectations are concrete:
npm run build && npm run dev, then navigate to Queens vs Kings contract pages.Blast Radius
- Low blast radius. Change is a new HTML block inside an existing Queens-only conditional (
{:else if !isLocal && isGirls}). - No shared components affected. No API changes. No database changes.
- The existing "Roster Flexibility" section (line 506-509) already mentions team assignment adjustments in general terms. The new clause adds specific age-based reassignment language -- these are complementary, not conflicting. Agent should place the new clause near the existing Roster Flexibility section for coherence.
- The
sign/+server.tsendpoint (line 60) also derivesisGirlsfor contract versioning -- not affected by this change. - Rollback is straightforward -- single file, single conditional block removal.
Decomposition Assessment
No decomposition needed.
- 1 file to modify (the .svelte file), server file confirmed no-op
- 3 acceptance criteria -- under the three-thing limit
- Estimated agent time: 2-3 minutes -- well within the five-minute rule
- No independent subtasks to parallelize -- this is a single HTML block insertion
Recommendation
[BODY]Minor: issue says "conditional onplayer.team_name?.includes('Queens')" but codebase already hasisGirlsdestructured from data. Agent should useisGirls(the existing pattern). Not a blocker -- agent will discover this naturally.
No action needed. Scope is solid and ready for dispatch.