This runbook covers TODOS.phase-72.72.12.2.1: a season/battle pass progression
system with an XP-based track, free and premium tiers, and rewards at each
level. The season pass progression surface explicitly validates rewards at every
level.
Rewards at every level are required for both lanes; rewards at every level are part of the validated track contract.
The service package is @v2/season-pass-service at
apps/v2/season-pass-service/. Its contract is
V2/ue/Content/V2/LiveOps/SeasonPassProgression_V2_Contract.json and the
validation gate is V2/ue/Tools/check-v2-season-pass-progression.py.
Progression Model#
The first progression surface owns a 60-tier, 90-day track. Tier 1 starts at 0 XP, later tiers use strictly increasing XP thresholds, and the final tier caps account progression so a large grant cannot overflow the season track.
Each level has two reward lanes:
freerewards are claimable by every account that reaches the tier.premiumrewards require the account's premium entitlement SKU.
The service validates that every level has at least one free reward and one
premium reward. The client payload includes requiresClientPatch: false, an
ETag, current tier, total XP, claimable rewards, and locked premium rewards; no
client patch is required for supported clients.
No client patch is part of the supported delivery contract; no client patch is required for the published progression payload.
Primary APIs:
buildV2SeasonPassProgressionSurfaceresolveV2SeasonPassTierProgressapplyV2SeasonPassXpGrant
Endpoints:
GET /v2/live-ops/season-pass/{seasonId}/trackGET /v2/live-ops/season-pass/{seasonId}/progression/{accountIdHash}POST /v2/live-ops/season-pass/{seasonId}/xp-grants
XP Grants#
XP grants are server-authoritative. The server-authoritative XP flow in
applyV2SeasonPassXpGrant validates season ID, account hash, XP source,
positive XP, and ISO award time before adding XP to the account state. Duplicate
grant IDs are idempotent, so duplicate grant idempotency prevents retrying the
same grant from double-awarding XP.
Supported initial sources are:
match-completiondaily-challengeweekly-challengeevent-bonus
Operator Flow#
- Publish the season definition with start/end timestamps, premium SKU, max tier, and tier thresholds.
- Validate the track before production: all tiers are sequential, XP thresholds increase, every level has free and premium rewards, and reward IDs are unique.
- Grant XP from trusted server flows only.
- Build the client progression surface after each accepted grant.
- Let clients claim unlocked free rewards immediately and show locked premium rewards until entitlement is present.
- Keep the season payload refreshable without a client patch.
Release Gates#
Required gates:
season-pass-progression-packageseason-pass-progression-xp-trackseason-pass-progression-free-premiumseason-pass-progression-rewards-every-levelseason-pass-progression-xp-grantsseason-pass-progression-validationseason-pass-progression-ci-wired
Verification#
pnpm --filter @v2/season-pass-service test
pnpm --filter @v2/season-pass-service typecheck
pnpm --filter @v2/season-pass-service lint
pnpm --filter @v2/season-pass-service build
python3 V2/ue/Tools/check-v2-season-pass-progression.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py