# Content, Creator Tools & Community

Everything on this page happens **around** the match rather than inside it. When
a player closes the tactical-FPS round, the RTS ladder game, or the Wukong boss
rush, V4 hands them off to a ring of out-of-match surfaces: the encyclopedia
that explains what they just used, the community wiki that documents every
ruleset and frame window, the esports and tournament toolkit a broadcast is
produced with, the creator programs that surface a Player of the Week or a
featured squad, and the cross-surface account network that lets one login carry
from the companion app to the wiki to the spectator portal. The throughline is
the same hard line V2's community page drew: almost all of this ships as
**versioned JSON data contracts** — schema-stamped documents with concrete
fields, rendered by a shared shell, not React apps and not a fleet of standalone
microservices — with exactly **one** sharp exception. The esports broadcast
toolkit's manifest binds to _real compiled Unreal Engine 5 C++_ in the
`V4Mode_Spectator` plugin, and that one seam is where this group reaches through
data and touches the engine. This is the feature-side companion to the modes and
online groups; for the full feature scope it slots into, the hub is
[../V4_features.md](../V4_features.md).

## What ships, honestly

This group spans the implemented-to-spec spectrum, and the split is worth
stating up front because this page follows the code, not the monolith's prose.

- **The content and community surfaces are real but data-shaped.**
  `V4/community/community-features.json`, `V4/wiki/community-wiki.json`,
  `V4/wiki/world-state-feed.json`, `V4/wiki/world-state-ripple.json`,
  `V4/wiki/ai-summary-policy.json`, `V4/codex/codex-entry-library.json`, and
  `V4/content-network/cross-surface-content-network.json` are each a single
  `schemaVersion`-stamped JSON document. The Player-of-the-Week selection
  weights, the gallery moderation thresholds, the wiki anti-vandalism reputation
  gates, the Sophia summary opt-in header, the codex entry counts, and the SSO
  step-up rules are all concrete fields, not lorem ipsum. They are the **shipped
  data contract**.
- **The esports toolkit is a manifest over genuine engine code.**
  `V4/tools/esports/esports-toolkit.json`'s `broadcastExtras.source` strings are
  not decoration — each names a real `BlueprintPure` method on a compiled
  UObject in `V4/ue/Plugins/V4Mode_Spectator/` (and one in `V4Mode_Replay/`).
  This is the one cluster on the page where a JSON field resolves to C++ you can
  open.
- **The named owner services are routing identifiers, not all backends.** Fields
  like `ownerService: "community-service"` / `"wiki-service"` /
  `"public-api-service"` are the owner labels stamped on each contract. The
  actual Rust workspace under `apps/v4/` ships `v4-shared`, `online-services`,
  and `telemetry-ingest` — so treat those service names as the contract's
  declared owners, the way V2's surfaces named theirs, not as proof of a
  deployed daemon per name.
- **The in-game UI assets are JSON descriptors, not cooked binaries.**
  `DA_CommunityGallery`, `WBP_GalleryShowcase`, `WBP_CodexShell`, and
  `DA_CodexEntryLibrary` exist on disk as `*.uasset.v4asset.json` descriptor
  files (V4's content-as-JSON convention), sourcing real data tables; the
  compiled `.uasset` is UE-resident art, not a checked-in binary here.
- **The creator _authoring editors_ are product spec.** The Mission Editor, RTS
  Map Editor, and 2D Stage Editor described in `V4_features.md` § "Creator
  Suite" have no editor backend under the grounding directories. What _is_ real
  on the creator side is the sandboxed Game-Feature activation machinery in
  `V4/ue/Source/V4Modes/` that mods load through — the editors that author
  content are a documented surface, not code you can point at here.

The architecture-side treatment of the same data-and-content plumbing lives in
the companion
[../architecture/build-data-content.md](../architecture/build-data-content.md);
this page stays on the feature surface and dips into code only where a claim
needs backing.

## Content surfaces

### The Codex — an unlockable encyclopedia over real data tables

`V4/codex/codex-entry-library.json` is the encyclopedia contract. It declares
**eight** `entryCategories` (Operator, Weapon, Gadget, Map, Faction,
Civilization, Ruleset, Vehicle) and, for each, an `entrySources` row that pins
the _source of truth_ and a per-category `entryCount`: 34 operators, 110
weapons, 60 gadgets, 102 maps, 5 factions, 12 civilizations, 37 rulesets, 20
vehicles. Those are not invented totals — the operator source is
`V4/ue/Content/V4Core/Data/DT_Operator.json`, which holds exactly **34** rows on
disk, and the weapon/gadget sources (`DT_Weapon.json`, `DT_Gadget.json`) sit
beside it. The descriptor
`V4/ue/Content/V4Codex/Data/DA_CodexEntryLibrary.uasset.v4asset.json` sums them
to a `totalLaunchEntryCount` of **380**, which is the honest arithmetic of those
eight counts. Each entry unlocks through play — `unlockEventId` values like
`Codex.Unlock.Operator.Played`, `Codex.Unlock.Map.Completed`,
`Codex.Unlock.Weapon.Used` — and the `entryTemplate` enforces a real authoring
floor: every entry `requiredFields` are `loreText`, `assetGalleryIds`, and
`designCommentary`, with an `assetGalleryMinimum` of 2. The sample entries
(Cobra, the modular Assault Rifle 01, the Hard Breach Charge, Clubhouse,
Vanguard, the Britons, the R6 Modern ruleset, the MH-6 Little Bird) demonstrate
the shape: each pairs readable fiction with the _design_ reason a thing exists,
so an unlock teaches both story and playstyle. `WBP_CodexShell` is the launch
browsing shell for locked/unlocked entries — itself a `*.uasset.v4asset.json`
descriptor, not a compiled widget.

### The community wiki — moderated, with frame data and recoil

`V4/wiki/community-wiki.json` is the editable wiki at `wiki.v4.game`, and its
weight is in the `moderation.antiVandalism` block. Editing is governed by
**reputation thresholds** — `autoApprove: 25`, `protectedEdit: 80`,
`newContributorReview: 5` — and rate-limited to an `hourlyEditLimit` of 12, a
`maxExternalLinksPerRevision` of 2, and a `maxDeletionRatioWithoutReview` of
0.35, so a mass-delete or a link-spam burst is caught structurally. The
`signals` list enumerates the eight detectors (`mass_delete`, `link_spam`,
`blocked_terms`, `impersonation`, `protected_page_low_reputation`,
`top_traffic_page_protection`, `rate_limit`, `revert_war`), the `actions`
enumerate the four outcomes (`allow`, `quarantine_for_review`, `reject`,
`rollback_last_clean_revision`), and a 365-day-retention `auditLog` records
`revisionId`, `pageId`, `authorId`, the firing `signals`, the `action`, and the
`reviewerId` for every revision. Six `protectedNamespaces` (`rules`,
`operators`, `frame-data`, `recoil`, `world-state`, `world-state-ripple`) demand
the reputation-80 `protectedEdit` gate. The wiki is also _seeded from the game's
own truth_: `curation.sourceTables` points at `DT_Operator.json`,
`DT_Weapon.json`, and the two world-state feeds, on a "Weekly content sync after
balance ledger publication" cadence. And it carries competitive depth — **27**
`modeRules` entries (one ruleset summary per shipping mode, from
`V4Mode_Tactical_R6Modern` to `V4Mode_Lobby_BattleHub`), **6** `frameData` rows
with literal startup/active/recovery/cancel windows (the Wukong `Light Chain 1`
is `startupFrames 10`, `activeFrames 4`, `recoveryFrames 16`,
`cancelWindowFrames "13-18"`), and **6** `recoilPatterns` describing vertical
rise, horizontal drift, recovery milliseconds, and a recommended burst per
weapon.

### World-state feeds — read-only, and honestly zeroed

`V4/wiki/world-state-feed.json` and `V4/wiki/world-state-ripple.json` publish
the persistent-world fiction to the wiki and companion. Both are
`readOnly: true`, `editableByCommunity: false`, cached 300 s, and explicitly
_not_ part of the wiki edit pipeline — their `publicationPolicy` records
`personallyIdentifiableData: false`, `playerScopedState: false`, and a
`moderationBypass` note that values are "published by wiki-service from signed
seasonal rollups." The ripple feed is the interesting one: it carries cross-cell
`rippleEvents` (a Mansion-Party Hitman assassination reroutes the
`CoD.BlackoutLedger` objective; a Vanguard RTS season win adds relief-caravan
lore to the Wukong Pine Gate area before it loads), a `worldBossRaids` entry for
the Eclipse Leviathan (`globalHealth: 5000000`, `phaseCount: 3`), and
`communityRaidEvents` that publish shared progress to the companion `world`
surface. The honesty artifact here is load-bearing: every cumulative counter —
`totalCommunityKills`, `currentDamage`, every `progressPercent` — is **0**, and
a `dataStatusNote` states that this is the "Pre-launch honest state
(2026-06-12)" in which the "previously published non-zero values were
illustrative and have been removed as fabricated-progress data." The counters
fill from live telemetry after the 2026-10-01 launch; the feed refuses to ship
invented progress.

### Sophia-grounded wiki summaries — opt-in and cited

`V4/wiki/ai-summary-policy.json` defines the one AI surface in the content
group, and it is fenced exactly like the rest of the platform's generative
seams. The `Sophia.WikiSummary.Grounded` assistant is **off by default**
(`optIn.required: true`, `defaultEnabled: false`) and returns a summary only
when the request carries the `x-v4-ai-summary-opt-in: true` header, logging a
`WikiSummaryOptIn.Accepted` audit event. Generation is grounded:
`sourceManifests` restricts it to the community wiki, the two world-state feeds,
and the operator table; `citationRequired: true` and `maxWords: 70` bound every
answer; and a `forbiddenInputs` list bars "player private notes," "unpublished
datamines," and "personal account state." Each shipped `pages` entry carries its
`citations` with a `sourceId` and a `locator` — so a summary of the R6 Modern
rules cites `community-wiki:modeRules.V4Mode_Tactical_R6Modern`, not an
ungrounded paraphrase.

## Creator tools

### The esports & tournament toolkit — manifest over real spectator C++

`V4/tools/esports/esports-toolkit.json` is the page's strongest code anchor. Its
`tournamentBuild` block describes a real, separable server target: a `buildFlag`
of `V4Tournament`, a `serverTarget` of `V4TournamentServer`, a `targetFile` of
`V4/ue/Source/V4TournamentServer.Target.cs`, a `requiredCompileDefinition` of
`V4_TOURNAMENT_BUILD=1`, and competitive features always on (`broadcast_tools`,
`observer_cameras`, `pause_on_disconnect`, `forced_replay_export`) toggled by
the `-v4tournament=1 -v4broadcast=1 -v4observercameras=1 -v4pauseondisconnect=1`
command line. The `modWhitelist` makes a tournament reproducible:
`rejectUnlistedMods` and `requireExactVersion` are true, each allowed mod is
pinned by `sha256`, and `serverEnforcement` is `reject_client_loadout` — a
client carrying a non-whitelisted mod is bounced. `brackets` syncs first-party
single/double-elim and round-robin (`matchReporting: "server_authoritative"`)
with external Challonge and Start.gg providers (`webhookIngest`, a 60 req/min
rate limit). `antiCollusion` ships tuned detectors for the two modes where
collusion pays: an `RTS.Team` watcher on `shared_vision_without_engagement`,
`resource_transfer_spikes`, and `mirror_pathing` (3 evidence windows), and a
`Tactical.SearchAndDestroy` watcher on `plant_defuse_avoidance`,
`round_throw_pattern`, and `uncontested_objective_pathing` (4 evidence rounds),
each routed to its own integrity review queue.

What makes the toolkit real rather than aspirational is `broadcastExtras`. Every
`source` field names a `BlueprintPure` method on a compiled class in
`V4/ue/Plugins/V4Mode_Spectator/Source/V4Mode_Spectator/Public/V4SpectatorModeSystems.h`:
`UV4BroadcastCameraDirector::BuildObserverCameraPresets` and
`BuildPictureInPictureLayout` (≤4 PiP slots),
`UV4SpectatorEsportsOverlayService::BuildSponsorLowerThird` (with a
`ValidateLowerThird` gate and a 15 s display cap), and
`UV4LiveReplayRewindService::BuildRewindRequest` (≤30 s, with
`BuildReplayBuffer` and `CanServeRewindRequest`). The observer is provably
read-only: `UV4SpectatorPolicyService` exposes `BuildReadOnlyPolicy` and
`CanIssueGameplayCommand`, so an observer feed cannot perturb the match — the
same gameplay-inert discipline V2 enforced on its AI broadcast chain. The
`wildcardMode` (referee-approved, server-seeded Roulette variants) reads its
rules from `DA_WildcardRouletteRules.uasset.v4asset.json` in the same plugin.

```mermaid
flowchart LR
    M["esports-toolkit.json<br/>broadcastExtras.source"] --> C["V4Mode_Spectator (C++)"]
    M --> R["V4Mode_Replay (C++)"]
    C --> D["UV4BroadcastCameraDirector<br/>BuildObserverCameraPresets / PiP"]
    C --> O["UV4SpectatorEsportsOverlayService<br/>BuildSponsorLowerThird + ValidateLowerThird"]
    R --> W["UV4LiveReplayRewindService<br/>BuildRewindRequest (≤30s)"]
    P["UV4SpectatorPolicyService<br/>BuildReadOnlyPolicy"] --> G{"CanIssueGameplayCommand?"}
    G -->|"observer feed"| NO["false → gameplay-inert"]
    D --> NO
    O --> NO
    W --> NO
```

### Authoring editors and the mod sandbox

The creator _authoring_ surfaces — the per-cell Mission Editor, the RTS Map
Editor, the 2D Stage Editor, the Hitman Contract Author — are the part of this
group that is honestly **product spec** in `V4_features.md`, with no editor
backend under the grounding directories. The Contract Author does appear in the
shipping data as a ruleset (`V4Mode_Stealth_ContractsAuthor` in the wiki's
`modeRules`, requiring creators to "define target, method, and disguise
constraints" with "published contracts enter moderation before featuring"), and
the validation philosophy (load-in-PIE, AI path-test, recorded play-through) is
specified — but the editors themselves are a surface, not code here. What _is_
real on the creator-content path is the sandbox the published content loads
through: `V4/ue/Source/V4Modes/` ships `V4ModeBootstrapSubsystem` and
`UV4GameFeatureAction_ActivateModeAssets`, the Game-Feature activation machinery
that lets a mod load as an isolated plugin (so a crashing mod is auto-disabled,
not fatal). Cite the spec for the editors; cite `V4Modes` for the sandbox.

## Community features

### Player of the Week, galleries, squads & newsletter

`V4/community/community-features.json` is the community-program contract, and
its fields are concrete enough to audit. **Player of the Week** runs a six-state
machine (`Submitted` → `EligibilityChecked` → `SafetyReviewed` →
`EditorialShortlist` → `WinnerScheduled` → `Published`) with real `eligibility`
gates (`minimumAccountAgeDays: 30`, `minimumMatchesPlayed: 25`,
`activeSanctionPolicy: "disqualify"`, `requiresReplayEvidence: true`,
`requiresTelemetrySnapshot: true`) and an explicit, weighted selection rule —
`selectionWeights` of `telemetryStandout: 45`, `communityVote: 25`,
`sportsmanship: 20`, `esportsImpact: 10`. The current winner carries an evidence
replay id and a telemetry snapshot id, and the `auditLog` shows the hand-off
chain across `community-service`, `moderation-service`, and
`staff-community-lead`. The **gallery** runs the same accept-by-default-no
posture as workshop content: a `Submitted` → `AutomatedScan` → `HumanReview` →
`Approved` → `Published`/`Rejected` flow with an automated classifier whose
thresholds are explicit (`nudityReviewThreshold: 0.6` /
`nudityBlockThreshold: 0.85`, `violenceReviewThreshold: 0.65` /
`violenceBlockThreshold: 0.9`), a `requiresReplayIdForReplayClip` rule, and an
`appealRoute`. The seeded submissions include a _rejected_ one —
`gallery-rejected-rights` with `rejectionReason: "RightsPattern"` — so the
contract demonstrates the no-path, not just the happy path; the 24-slot showcase
binds the `DA_CommunityGallery` / `WBP_GalleryShowcase` / `L_UI_Gallery` /
`DA_FocusGraph_Gallery` descriptors. The **Squad Showcase** (owned by
`creator-relations-service`) rotates approved creator squads weekly with
chaptered VODs and `featuredFromUtc`/`featuredUntilUtc` windows, and the
**newsletter** is privacy-first: `consentPolicy` requires `doubleOptIn`,
`oneClickUnsubscribe`, `requiresRegionCapture`, and a `minimumAgeGate` of 13,
dispatched biweekly across four `segments`.

### The cross-surface content network

`V4/content-network/cross-surface-content-network.json` is the connective
tissue: one `v4-account` SSO realm (issuer `https://auth.v4.game`,
`singleLogout: true`) spanning four surfaces — the companion app, community
wiki, public roadmap, and spectator portal — each with its own idle and absolute
timeouts, refresh-token rotation, and a `requiresStepUpFor` list that forces
re-auth on sensitive actions (`store_purchase`/`account_link` on the companion,
`protected_edit`/`rollback` on the wiki, `community_pick_vote` on the roadmap,
`tournament_admin` on the spectator portal). The **public API** exposes a
GraphQL endpoint at `/api/public/graphql` with a REST compatibility shim that
`preservesRoutes` for roadmap, wiki, and world-state reads, stamps an
`X-V4-Rest-Shim` header, and is `backwardsCompatibleForMajorVersions: 1`. Two
tiers gate it — a keyless `free` tier at 60 req/min (`roadmap:read`,
`wiki:read`) and a `creator` tier at 600 req/min requiring an OAuth app and
adding `drops:read` and `creator:analytics` — registered through the
`/developers/oauth-apps` portal (max 5 redirect URIs, `https`-only schemes,
`reviewRequiredFor: ["creator"]`). The same file restates the wiki's
`topTrafficEditProtection` (top-100 pages by 30-day views, reputation-80 to
edit, `quarantine_for_review` otherwise) and the `community-moderator` role
(72-hour rollback authority, audit required), defines **roadmap voting** (3
per-account votes on `Planned` items, one quarterly `communityPick` promoted at
a `minimumVerifiedUpvotes` of 5000 "after fraud review"), and lists the five
`pushChannels` (`patch-notes`, `esports`, `friend-online`, `contract-refreshed`
default-on; `sale` default-off).

## How it connects

These surfaces are the connective tissue between the fight and the player's life
around it, and they lean on two sibling groups. The replay vault, ghost archive,
spectator theater, and the AI Director that the wiki and codex describe are
detailed in
[./modes-training-replay-signature-and-ai-director.md](./modes-training-replay-signature-and-ai-director.md);
the esports broadcast chain this toolkit feeds, the matchmaking and account
backbone the SSO and public API ride on, and the tournament networking are the
subject of
[./online-services-networking-and-esports.md](./online-services-networking-and-esports.md).
The data-and-content pipeline underneath all of it — how the
`*.uasset.v4asset.json` descriptors, the `DT_*` source tables, and the
schema-versioned JSON contracts are authored, validated, and cooked — is the
architecture companion
[../architecture/build-data-content.md](../architecture/build-data-content.md).
The constants across the whole group: data-shaped and schema-versioned,
read-only and audited where it touches the live world, and honest about the
difference between a shipped contract and an authoring surface still on the
roadmap. The feature hub is [../V4_features.md](../V4_features.md).

## Related

- The feature hub: [../V4_features.md](../V4_features.md)
- [Modes, Training, Replay, Signature & AI Director](./modes-training-replay-signature-and-ai-director.md)
  — the replay vault, ghost archive, spectator theater, and signature modes the
  codex, wiki, and galleries surface.
- [Online Services, Networking & Esports](./online-services-networking-and-esports.md)
  — the matchmaking, account, and tournament backbone the SSO, public API, and
  esports toolkit ride on.
- [Build, Data & Content](../architecture/build-data-content.md) — the
  architecture-side data-and-content pipeline behind the JSON contracts, the
  `*.uasset.v4asset.json` descriptors, and the `DT_*` source tables.
