Season Format
Purpose
This page defines the season lifecycle and scheduling rules that are currently enforced by league code.
Policy
- The active season state is stored on
Seasonwithseason,current_week,game_week,last_paid_week, and aphase. - Valid system phases are:
DRAFTMORATORIUMFREE_AGENCYREGULAR_SEASONPLAYOFFSOFFSEASON- Season phase changes are staff-controlled through season management views.
- Season rollover resets weekly counters (
current_week,game_week) andlast_paid_week. - Regular-season schedule generation uses a double round-robin algorithm:
- first pass assigns one matchup per pair
- second pass mirrors home/away assignments
- Scheduling uses active/enabled
TeamSeasonMembershiprecords when present; otherwise it falls back to all teams in that league bucket. - Surge schedule generation uses the same scheduler for surge teams and may be run independently with surge-only replacement.
- Tradable pick windows are phase-dependent:
- non-draft phases allow current season through two future seasons
- draft phase extends to three future seasons
Operational Notes
current_weekandgame_weekare separate counters and are consumed by different systems.- Moratorium-to-free-agency transition flows can trigger uncontracted-player release behavior in season tooling.
Known Gaps (TBD)
- Preseason policy (the app phase enum does not include a
PRESEASONphase). - Published game-count policy for main and surge leagues.
- Trade deadline week policy text.
- Tie-break policy text for standings and seeding.
- Public announcement protocol for phase changes.
Change Log
- 2026-03-17: Initial scaffold created.
- 2026-03-18: Replaced scaffold with repository-backed season lifecycle policy baseline.