A universe this size is a service, not a box. V5 is one UE5 open-world narrative universe split across ruleset cells — a 1947-noir Urban heist city, a Prohibition-era Period crime saga, an 1899 Frontier, a Witcher-flavoured Hunter world, a hard-SF Sci-Fi theatre, and the cross-cell Mind Palace deduction layer — and it ships those five launch cells and then keeps growing for years. The post-launch product is the part that arrives after launch and keeps arriving: a 90-day season every quarter, a 100-tier per-cell battle pass, weekly contracts, persistent world events, faction-reputation ladders that decay and recover, Twitch drops and a creator-partner program, AI-narrated highlight reels, curated community spotlights, 24/7 support, and a public balance ledger so the community can audit every tuning change. This page is the feature-side companion to the Modes, Online Services & Live Operations group, and it is unusually honest about a seam that runs straight through the middle of the subject: the live-ops machinery is real, shipped TypeScript and C++, while a good deal of the content that machinery delivers — the specific Year-1 cosmetics, the per-cell theme drops, the authored restoration missions — is design data the services execute, not engine artifacts cooked to disk. Where a claim is backed by code this page names the package and function; where it is authored design data or a plan, it says so. The feature hub is ../V5_features.md.
The design line underneath everything is the same competitive-integrity rule the
rest of V5 draws and that V2 and V4 drew before it: nothing sold or seasonal
ever touches gameplay power. The battle pass marks gameplay-affecting rewards
never-paid-only, every calendar payload asserts
exclusiveGameplayRewards: false, store bundles are cosmetic-only, faction-rep
decay can never be bypassed with money, and balance ships as data, never a
forced binary patch. Live service grows the world; it never sells an advantage
in it.
What ships, honestly#
The split is clean, and stating it up front keeps the rest of the page honest.
The live-ops services are real. apps/v5/ holds 16 deployable NestJS +
Fastify packages (each with a contract.json, a Dockerfile, k8s manifests,
and a contract.test.ts), wired over one shared @v5/service-shared runtime.
The live-service-relevant ones — live-service-calendar (port 4223),
faction-rep, replays, workshop, telemetry, balance-ledger,
companion-app-bridge — are genuine services with typed contracts and pinned
endpoint sets.
The load-bearing domain logic is real Postgres-backed code. Under
apps/v5/service-shared/src/domain/ sit the engines the live service runs on:
FactionRepDomain (a genuine exponential time-decay reputation model with an
append-only ledger), WorkshopDomain (a UGC marketplace with a moderation state
machine and an exact-to-the-cent revenue split), ReplaysDomain (a
content-addressed, deduplicated replay store with signed download grants),
TelemetryDomain (validating batched event aggregation), and
LiveServiceCalendarDomain (time-windowed events with a SHA-256 content ETag).
Each is unit- and integration-tested for domain correctness, not just data
flow.
The UE client tier is real C++. V5/ue/Source/V5OnlineServices ships
UV5_Online_LiveServiceCalendarClient, UV5_Online_FactionRepClient, and the
replay/highlight builders as UBlueprintFunctionLibrary composers
(BuildYear1Calendar, BuildYear1DecayPolicy, BuildYear1AIHighlightReel),
over an 809-line automation test that pins the season rotations, the decay caps,
and the highlight scoring.
Three honest caveats matter. First, the deployed REST feed paths return
authored literals. A request to /v5/live-service-calendar/year1 resolves
through handleRealRequest to evaluateServiceSpecificRule
(service-shared/src/runtime.ts:1389), which returns hand-authored constants —
seasonalThemeRotations: 4 (:1863), scriptCount: 12 (:1847),
exclusiveGameplayRewards: false — not rows read from the calendar domain. The
real Postgres LiveServiceCalendarDomain and the real FactionRepDomain decay
model are exercised on the realtime path (realtime.ts) and by the read-only
companion bridge, and pinned by tests; they sit one wiring step from the REST
feed. Second, the seasonal content is authored design data, not cooked
assets — like V4, V5 represents drops, themes, and reward sets as JSON
manifests under V5/live-service/, not binary .uasset. Third, the consumer
companion app is a mockup: V5/companion/ holds design-token Swift/Kotlin
stubs with no buildable iOS/Android project (per V5_features.md and the
v5-verification-2026-05-31 audit). The companion bridge service is real and
read-only; the phone app that would consume it is not built.
The live service#
Seasons and the per-cell battle pass#
Season One is authored end-to-end in
V5/live-service/season-1-live-service-manifest.json: Fracture Signals, a
90-day window (2027-03-01 → 2027-05-30) opened by a 30-day Continuum Signal
day-one event. Its battle pass is the recurring engagement spine — one pass
per cell, 100 tiers across the 90 days, with a free and a paid track, advanced
on a battle_pass_xp currency earned from missions, contracts, and PvP, pacing
toward completion at a target { min: 6, max: 8 } hours per week. Every
per-cell track (bp.s01.urban.fracture_signals and four siblings) defines a
free track with 34 claimable rewards and a paid track with 100, and the
monetization line is drawn in the data itself: tierSkipPolicy allows
purchasable skips (purchaseEnabled: true, maxSkipsPerSeason: 20) but stamps
gameplayAffectingRewards: "never-paid-only". Reward families are cosmetic —
outfit, vehicle-wrap, emote, nameplate, ship-decal — never frame data
or stats. Unclaimed rewards stay claimable-until-season-end, so the pass never
expires a reward mid-season.
Weekly contracts are the inner loop: weeklyContracts authors 7 contracts
per week rotating Mondays at 00:00 UTC across a 13-week season, drawn per cell
from a typed poolByCell with an intro | standard | hard | expert difficulty
spread. The honest policy is in the data —
unfinished-contracts-expire-at-cycle-rollover but
missed-contracts-do-not-remove-earned-pass-progress — so a player who skips a
week loses that week's contracts, not their tier position. Each season's
seasonalThemeDrops re-skins all five cells (Urban summer-beach, Period
winter-noir, Frontier high-summer, Hunter dark-autumn, Sci-Fi solar-storm) and
the Year-1 calendar manifest authors all four rotations — Fracture Signals, Neon
Harvest, Long Night Protocol, Founders Return — each with five per-cell themes.
Faction reputation, decay, and restoration#
Faction reputation is where the live service has its deepest real algorithm.
FactionRepDomain (service-shared/src/domain/faction-rep.ts) replaces a prior
simulatedDecay: true echo with a genuine model: reputation relaxes toward a
neutral floor while a player is inactive,
rep(t) = floor + (rep0 − floor) · exp(−ln2/halfLife · days), with
REP_FLOOR = 0, REP_CEILING = 1000, DEFAULT_HALF_LIFE_DAYS = 30, and a
DEFAULT_GRACE_DAYS = 14 window below which nothing decays. The surplus over
the floor halves every 30 idle days; applyDelta clamps every event to
±REP_DELTA_CLAMP (100) and journals it; the weekly runDecay(nowUnix) writes
every decrement into an append-only v5_faction_rep_ledger. The test
(faction-rep.test.ts) pins the math against known-correct answers —
decayedRep(100, 14 + 30) is toBeCloseTo(50, 5), two half-lives is 25, the
grace window decays nothing — a test that would fail on a hardcoded or random
return. The UE client mirrors it: SimulateFactionRepDecay asserts an inactive
paragon account decays 8200 → 8100 under its rule cap and that the 14-day
grace blocks decay entirely.
The recovery side is authored design data the model serves.
year-1-faction-reputation-decay.json defines the weekly decay job
(cadenceDays: 7, inactivityGraceDays: 14, protectNeutralTier: true,
notificationLeadDays: 3) plus five per-cell restoration mission arcs —
Harbor Truce (Urban), Press Amnesty (Period), Range Mediation (Frontier),
Village Rite (Hunter), Station Amnesty (Sci-Fi) — each three missions restoring
up to maxRestoreRep: 450 and each clearing one rival lock on completion. The
release gates assert what the design promises: noDecayBelowNeutral: true and
noPaidRestorationShortcuts: true. You climb back by playing, not by paying.
The calendar, world events, and hot-fixes#
The calendar is the single source of truth for live-service timing.
V5LiveServiceCalendarController (live-service-calendar/src/controller.ts)
exposes five GET routes — /feed, /year1, /world-events/year1,
/pro-stadium-tour, /year3-pipeline — each requiresJwt: true and
regional: true in contract.json, which declares 21 capabilities and a
regional-active-active failover across iad/fra/sin primaries with
pdx/dublin/syd fallbacks. Events resolve to an Upcoming | Live | Ended state
from a start/end window; an event that fails to start surfaces a retry notice
rather than a silent gap, and a time-limited reward, once granted, is kept
permanently. Persistent world events ride the /world-events/year1 feed: 12
one-week scripts (Gang War Week first) that open a calendar window, record
objective and faction telemetry, persist settled world-state mutations for 30
days, and ship exclusiveGameplayRewards: false — a player who misses Gang War
Week loses a moment, not power. The Postgres LiveServiceCalendarDomain behind
this (real upsertEvent/activeEvents plus a content-derived SHA-256 etag)
is the shape the literal feed grows into; the architecture-level treatment of
the calendar spine and the DLC GameFeature boundary lives in the arch companion,
../architecture/live-service-and-dlc.md.
Hot-fixes are data, not binaries. season-1's balanceHotfixPipeline
authors the rule: delivery: "cdn-served-signed-data",
binaryPatchRequired: false, fetched at session-start, signed ed25519, with
a last-known-good-with-ledger-reversal rollback and eligible domains of
weapon-stats, economy-values, UI strings, calendar, and faction-rep gates. Every
balance change it carries posts to the public balance-ledger service with the
change, the rationale, and the effective date — the transparency layer that lets
the community trace exactly what moved and when.
AI commentary and highlight reels#
Post-match content is real service code over a real replay store.
ReplaysDomain (domain/replays.ts) stores replay chunks content-addressed by
SHA-256 — a repeated chunk bumps a refcount instead of re-storing bytes, so two
replays sharing a chunk cost one copy — and issues time-bounded, HMAC-signed
download grants (signDownloadGrant, 900-second TTL). On top of that store, the
Year-1 AI highlight reel is authored in year-1-ai-highlight-reel.json and
built client-side by UV5_Online_ReplaysService::BuildYear1AIHighlightReel /
BuildTop10HighlightClips. It is honest about being AI-assisted: an optional
CoquiTTS commentator track (syntheticContentIndicator: true,
humanCasterOverride: true, playerDisableable: true,
transcriptRequired: true), a top-10 reel ranked by a weighted
v5-highlight-ranker-v1 model (kill-multiplicity 40, objective-impact 30,
clutch-context 20, teamplay-chain 10), and a per-match recap attached to match
history with a source-replay-verification requirement and an explicit
"AI-generated recap; verify with source replay" disclaimer. The reel never
touches progression (noProgressionImpact: true), and the underlying replay
stays downloadable so a viewer can check the summary against the source.
Community features#
Creator partnership and Twitch drops#
The creator ecosystem is authored in the season manifest. creatorPartnership
defines three revocable tiers gated on monthly views — creator-affiliate (50k,
referral code + hub profile), creator-partner (250k, embargoed preview build +
creator cosmetic set + private support channel), and creator-featured (1M,
launch-stream slot + curated gallery feature) — with viewer interaction confined
to nonGameplayHooks (photo-theme votes, poll-driven emotes, a stream-safe
soundboard), so a stream can never vote a gameplay advantage. twitchDrops
schedules watch-time-gated cosmetic campaigns (launch week at 30/60/120 minutes,
a capital-raid final at 45/90) through the calendar, links them to the V5
account via @v5/service-auth, and grants on next login. A Streamer Mode
privacy surface masks gamertags, invite codes, and the in-game social feed, and
substitutes a cleared-for-broadcast music bed where audio rights require it.
Curated surfaces: Player of the Week, Hall of Fame, ambassadors#
The community-stewardship surface is authored in
V5/community/customer-support-community-manifest.json, and its permission
model is the interesting part. Community ambassadors are a volunteer program
(≥48 active across NA/EU/LATAM/APAC) staffing report-queue triage, workshop and
gallery curation, and help-channel seeding under a required conduct agreement
and five training modules — with a deliberately constrained permission set:
canModerate: false, canViewPrivatePlayerData: false, canEscalate: true,
canCurate: true. Volunteers curate and escalate; they never adjudicate or see
private data. Hall of Fame recognises top-rated Mind Palace solves (sourced
from mindpalace-cloud-sync, antiCheatReviewRequired: true) and top workshop
contributors (sourced from workshop), both privacyOptOutRespected. Player
of the Week runs a four-step review workflow (community shortlist →
trust-safety check → privacy-consent check → scheduled card) with a
cosmeticOnlyReward and a 90-day post-enforcement cooldown. Every spotlight
requires opt-in for personal content and preserves synthetic-content indicators
where AI-assisted work is featured. These surfaces are authored design data
whose sourceServices point at the real workshop, leaderboards, replays,
mindpalace-cloud-sync, and compliance-dsar contracts that back them.
Customer support, telemetry, and balance transparency#
Support is a first-class capability, not an afterthought. The manifest
authors a 24/7 posture: a tier-1 live chat with a 60-second first-response SLA
across six knowledge domains, and a tier-2 ticket queue with per-category SLAs
(account 12h, billing/technical/privacy 24h, moderation 48h) routed to
trust-safety, platform-commerce, live-ops, engineering-oncall, or privacy-legal,
with auditLogRequired: true and a DSAR escalation into
/v5/compliance-dsar/export. Ban and anti-cheat appeals file through this path
with a 7-day SLA.
Telemetry that feeds balance is real ingestion. TelemetryDomain
(domain/telemetry.ts) validates and aggregates events into
per-(cell, region, event-type, day) counters: it rejects oversize events
(MAX_EVENT_BYTES = 2048) and caps batches (MAX_BATCH = 500), folding
survivors into Postgres with one upsert per distinct key — a real, queryable
aggregate that does not require a ClickHouse cluster to function (ClickHouse
remains the production analytics sink). Each event carries only an opaque
per-account ID and a region; consent is a per-region opt-in that stops
collection rather than anonymising after the fact. Every balance change
telemetry motivates posts to the public balance ledger, so the loop from "the
data said X" to "we changed Y, here is why" is auditable.
The companion app — bridge real, app a mockup#
The companion bridge is genuine. CompanionAppBridgeDomain
(domain/companion-app-bridge.ts) is a strictly read-only aggregator that
composes a single home view from the real persisted stores — recent replays, the
Mind Palace graph summary, the balance-ledger head, and decayed faction
reputation — every field a live query against a real backing table, and it
stamps readOnly: true to match the companion-app security model: it never
mutates gameplay state. What is not built is the consumer app that would
render it. V5/companion/ holds design-token Swift/Kotlin mockups with no Xcode
or Gradle project; the planned Mind Palace editor, AR-overlay, and
VTuber/crime-scene modes (each with its own privacy-preserving bridge endpoint)
are target vision, honestly labelled as such in V5_features.md. The bridge is
ready; the phone is not.
Where this connects#
The through-line is consistent with the rest of V5: the machinery is real service and engine code composing one shared backbone, and the page is precise about where shipped TypeScript and C++ end and the authored Year-1 content (and the unbuilt companion app) begin.
- Online Services & Infrastructure —
the
V5OnlineServicesclient catalog, matchmaking, leaderboards, anti-cheat, crossplay, and the JWT auth and Bureau account/XP ledgers the seasonal calendar, world events, and faction-rep decay read from and write to. - Content Creator Tools & Workshop —
the workshop marketplace (
WorkshopDomain's 70/20/5/3/2 revenue split, moderation state machine, and 48-hour refund window) and the creator surfaces the partner program, Hall of Fame, and curated showcases feed. - Architecture companion: ../architecture/live-service-and-dlc.md — the calendar spine internals, the DLC GameFeature plugin boundary, the literal-vs-domain feed seam, and the no-pay-to-win / no-binary-hot-patch invariants at architecture depth.
- The feature hub: ../V5_features.md