# Narrative, Extras & Launch

Six tactical-action cells under one account is a systems achievement; making a
player _care_ about the operator clearing the room is a narrative one; and being
_allowed to ship_ the result is a readiness-and-compliance one. This page covers
the third leg of V4's "Platform, Trust & Launch" group — the story scaffolding
that turns six rulesets into one universe (the **Shadow War**), the
bonus-content layer that rewards investment in it, and the single,
machine-checked gate that decides whether the whole thing is launch-ready. The
honest distinction that governs every line below is the one the rest of the
catalogue carries: V4 is a **logic-and-manifest skeleton**, so the narrative
here is real _authored intent_ in machine-readable form, backed by real
verification gates, but the prose, sketch art, mocap, voice-over, and cinematics
that would dress it are production-gated and not in-tree. And where V3's launch
aggregate is deliberately **red**, V4's is **green** — the interesting part
being _why that green is honest_ rather than fabricated. Each claim is pinned to
the JSON manifest, the `.mjs` gate, or the C++/Rust surface that backs it, or
labelled plainly where it is forward-looking. The companion that owns the
enforcement spine — DSAR, anti-cheat, residency, and the launch-gate machinery
in engineering depth — is
[../architecture/security-compliance-launch.md](../architecture/security-compliance-launch.md);
the moderation and trust surface this page assumes is
[./trust-safety-and-compliance.md](./trust-safety-and-compliance.md); the
orientation door and target-artifact conventions every path here rides on are
[./product-promise-and-conventions.md](./product-promise-and-conventions.md).
The feature hub this page belongs to is [../V4_features.md](../V4_features.md).

## What ships, honestly

**The narrative data is real, structured, and gated — not free-text promises.**
The rivalry graph (`V4/narrative/operator-rivals.json`), the side-story arcs
(`V4/narrative/operator-side-stories.json`), the encyclopedia
(`V4/codex/codex-entry-library.json`), and the public roadmap
(`V4/roadmap/public-roadmap.json`) are all schema-versioned manifests, and each
is enforced by a checked-in validator under `apps/v4/scripts/src/`. Run today
they all exit green: `v4-operator-rivals-check` reports **31 pairs, 124
exclusive VO lines**; `v4-operator-side-stories-check` passes the eight-arc
dossier set; `v4-progression-codex-check` reports **34 operators, 37 rulesets,
380 Codex entries**; and `v4-public-roadmap-check`, `v4-press-kit-check`, and
`v4-brand-partnerships-check` all pass. These are not size-and-shape checks;
they assert domain facts (reciprocal-pair symmetry, four VO ids per rival pair,
per-category entry-count sums, Season 1 + Season 2 roadmap visibility).

**Two honest qualifications run through everything below.** _First_, every one
of those manifests describes content that does not yet exist as cooked assets. A
1500-word operator backstory, a 12-page origin comic, a mocap-captured
cinematic, the 12 recorded VO languages — these are _declared_ by the data and
stubbed by the **891 `.v4asset.json`** stand-ins under `V4/ue/` (the repo holds
**zero** cooked `.uasset` binaries). So any claim that needs authored content —
a readable dossier, a played side mission, a rendered rivalry cinematic — is
forward-looking by construction and is labelled as such. _Second_, the
encyclopedia manifest is honest about its own seams: its
Operator/Weapon/Gadget/Civilization/Ruleset categories point `sourceData` at
real on-disk tables (e.g. `V4/ue/Content/V4Core/Data/DT_Operator.json`, 34
operators), but its **Map (102)** and **Vehicle (20)** categories point at
`V4/codex/source-groups/maps` and `.../vehicles`, which are **named target paths
not yet materialized** — the target-artifact discipline from
[./product-promise-and-conventions.md](./product-promise-and-conventions.md)
working exactly as designed.

**The launch gate, by contrast, is real runtime that passes today.**
`apps/v4/scripts/src/v4-launch-readiness-check.mjs` (615 lines) reads ~20
manifests, asserts hard thresholds, and currently exits **0 — green**. What
makes that green trustworthy rather than decorative is a `validateDocs` clause
that _requires_ the real-world operations milestones in §94 to stay marked `[~]`
("real claim, not locally verifiable") rather than `[x]`; re-checking them
without evidence fails the gate. The narrative and extras feed that same gate
(roadmap, VO packs, workshop/creator launch, the no-coming-soon scan), so this
page's two halves meet at it.

## Narrative and story — the Shadow War, made legible

V4's narrative job is not to write one campaign; it is to make a _cross-cell_
structure legible — to let a player see that a Hitman assassination, a CoD
battle, and an RTS invasion belong to one war. The data models that legibility
directly.

### Operator dossiers and per-character side stories

Every one of the **34 canonical shared operators** carries a briefing dossier,
and `V4/narrative/operator-side-stories.json` pins the dossier contract as six
required fields — `Backstory1500Words`, `SketchArt`, `VoiceActorCredit`,
`MocapPerformerCredit`, `SignatureLine`, `ThemeMusicAttribution`. The 1500-word
backstory is declared the **canonical prose source**: the 12-page origin comic
(see Extras) is an _adaptation_ of it, not separate canon — a deliberate
single-source-of-truth choice that keeps the fiction from forking.

On top of the dossiers sit **eight 6-mission side-story arcs**, one for each
launch fan-favorite operator — ranked
`Cobra, Rook, Vega, Kite, Nomad, Warden, Muse, Harbor` (ranks 1–8). Each arc is
`unlockRequirement: OperatorXP` gated at `requiredOperatorXP: 2500` and set in
the operator's `homeCell` (Tactical for the launch slate), so a side story reads
as a _reward for investment_ in that character rather than a
separately-purchased campaign. The missions are authored, not generic: each
carries an objective and a `canonBeat` tag (`Recruitment context`,
`Moral constraint under fire`, `Rival pressure`,
`Cross-cell stealth adaptation`, `Leadership cost`, `Signature line payoff`)
that traces a consistent emotional arc across all eight operators. Cobra's
_Rook's Angle_ mission and Rook's _Cobra's Call_ mission deliberately
cross-reference each other, which is where the side stories hand off to the
rivalry system.

### Rivalries and the relationship matrix

`V4/narrative/operator-rivals.json` locks **31 reciprocal rivalry pairs**
derived from the 34-operator roster, with **four exclusive voice-line ids per
pair** (124 total — confirmed by the gate). The runtime contract is concrete: a
`banterIntro` cue fires `OpposingSidesMatchIntro` when two rivals are on
opposing sides, and a `postMatchCinematic` (`RivalryMatchEnd`) plays a short
Sequencer cinematic after a rivalry win. The manifest even fixes the _authoring
patterns_ the data must follow — `Banter.{A}.{B}.Intro`,
`Cinematic.Rivalry.{A}.{B}.PostMatch`, and `VO.Rivalry.{A}.To.{B}.{Intro|Win}` —
so a validator can prove every pair is fully wired (`DA_OperatorRivalries`,
`DA_RivalryVoiceLineLibrary`, `DA_RivalryPostMatchCinematics` are the named
target assets). The full set is presented as a **browsable relationship matrix
in the Codex**, so a player can read how the roster interconnects —
`Cobra↔Rook`, `Sovereign↔Broodmother`, `Sunward↔MoonLotus`, and the rest — at a
glance.

### Cross-cell timeline and the persistent world

Two systems give the Shadow War a spine beyond individual matches. A **canonical
cross-cell timeline**, viewable in the Codex, places every campaign mission
across all cells in one chronological order — the structural payoff of the "one
universe" promise. And a **persistent-world layer** lets a player's mark on a
map endure: Hitman sandbox maps carry limited persistent state between runs in
Story mode (a killed story target stays dead) while Quick Mission resets
cleanly, an NPC schedule registry turns schedule-learning into a Codex
collectible, and a per-map crime-rate dashboard renders the whole community's
season of kills as a level heat-map. The seasonal economy
(`V4/stealth/hitman/persistent-world-economy.json`,
`V4/world-state/persistent-world-economy-deep.json`) adds cross-map kill-count
rankings and quarterly schedule rotations, and authored **cross-cell leak**
hooks — for example `WorldState.Hitman.MansionParty.TargetA.ToCoDBlackoutBranch`
— let a Hitman assassination unlock a CoD campaign branch _before mission load_.
That timing is the honest design constraint: the leaks read world-state at load,
so the live seasonal layer stays visible **without** making deterministic combat
depend on live telemetry. The seasonal **Eclipse Leviathan** world-boss raid
(`world-boss-community-raid.json`) publishes async community damage to
`/wiki/world-state-ripple` and the companion world surface on the same
principle.

## Extras and the Codex

The extras are the universe's bonus layer — the encyclopedia, the commentary,
the companion surfaces, and the press kit. They are mostly **P3 stretch
sections** (§126–139), reviewed as a block by
`V4/release/final-polish-readiness.json`, which records all 14 sections
`reviewed` with `blockerCount: 0` and `openDeferredItemCount: 0`.

### The Codex encyclopedia

`V4/codex/codex-entry-library.json` defines **eight categories** summing to
**380 entries**: Operator (34), Weapon (110), Gadget (60), Map (102), Faction
(5), Civilization (12), Ruleset (37), Vehicle (20). The discipline is in the
`entryTemplate`: every entry must carry `loreText`, an `assetGalleryIds` array
with `assetGalleryMinimum: 2`, and `designCommentary` — so an entry teaches both
fiction _and_ readable design intent (a weapon entry "exposes the fantasy,
recoil identity, and attachment silhouette without hiding balance data"). Each
category unlocks on a distinct gameplay event (`Codex.Unlock.Operator.Played`,
`Codex.Unlock.Weapon.Used`, `Codex.Unlock.Map.Completed`, …), turning the Codex
into a play-driven collectible rather than a static manual.
`v4-progression-codex-check` verifies the 34/37/380 totals; the Map and Vehicle
source groups remain the named target paths flagged above.

### The bonus-content layer

The cinematic and social extras are authored as their own manifests, each with a
matching gate under `apps/v4/scripts/src/`: **director commentary** over major
cinematics (`director-commentary-expansion.json`, plus the extended
developer-stream/NIL-interview pack), **AI-generated commentary, highlight
reels, and per-match analysis** built on V1's Calliope stack (DPIA-covered,
multilingual across all 12 launch VO languages, with
`BiasReview.AICommentary.Live` blocking unreviewed lines and a settings
opt-out), the Yakuza-style **karaoke rhythm mode** (`karaoke-rhythm-mode.json`),
and the Battle Hub **arcade mini-game suite** (`arcade-mini-game-suite.json`:
pinball, air hockey, mini-golf, darts, pool, cooking). The **origin comics** and
**cinematography library** round out the viewer-side bonus content. All of it is
honest stretch scope: the manifests and gates are real; the rendered tracks,
charts, and comic pages are the production-gated layer.

### Companion, public API, wiki & roadmap

The out-of-client surfaces share one `v4-account` SSO
(`V4/content-network/cross-surface-content-network.json`): the React Native
**companion app** (seven launch surfaces — loadout planner, contract briefing,
replay viewer, news, friends, store, push), a rate-limited **public API** (free
60 req/min, creator 600 req/min, a `/api/public/graphql` endpoint, REST v1
shims), a community **wiki** with anti-vandalism controls and opt-in-only Sophia
summaries (withheld unless `x-v4-ai-summary-opt-in: true`), and the **public
roadmap**. The roadmap is the cleanest example of the page's honesty discipline:
`V4/roadmap/public-roadmap.json` promises a weekly Friday cadence _and records
its own failures_ in a `cadenceLapses` block — the **2026-05-29 and 2026-06-05**
updates were missed, the cadence re-baselined at the 2026-06-12 remediation, and
the corresponding §85.1 "Update weekly" task is held at `[~]` because an ongoing
cadence is only verifiable against the live service.
`delivery-integrations.json` wires JIRA/Linear status into automatic
in-flight→delivered projections, but gates each transition on
`requiresHumanAudit: true` and a green release gate — automation proposes, a
human signs off.

### Press, brand & creator program

The launch press surface is real artifacts, honestly stubbed at the binary edge.
`V4/press/epk/manifest.json` carries five captioned screenshots, two trailers (a
78s announce, a 142s overview), two B-roll timelines, and four MusicXML theme
stems (pulse/drums/strings/choir at 126 BPM, D minor) — but the screenshots are
`.svg` placeholders and the trailers are `.fcpxml` edit-decision lists, not
cooked 4K captures. The **creator program**
(`V4/press/creator-program/manifest.json`) is the part with teeth:
`requiresNda`, `requiresSignedEmbargo`, `publicReleaseBlocked`, per-creator
visible-and-forensic watermarking, a `creator-preview` build branch, and an
`embargoLift` of `2026-09-30T16:00:00Z` — one day before launch. The launch gate
(below) cross-checks exactly these NDA and embargo flags before it will count
the workshop/creator surface as live.

## Launch readiness and exit criteria

§94 aggregates the whole product — cells, content, ops, compliance, and the
narrative/extras surfaces above — into one go/no-go, and unlike V3's
deliberately-red aggregate, V4's launch gate is **green**. The gate is
`apps/v4/scripts/src/v4-launch-readiness-check.mjs`, and it is not a checklist
someone ticks: it reads the launch manifest, the feel-test merge gate, the crash
and matchmaking soak dashboards, the certification matrix, the anti-cheat config
and ban roster, the support and roadmap and workshop manifests, the day-one
patch budget, and the §94 backlog text, then asserts real thresholds against
each.

### The exit criteria, in code

The §94 exit list from `V4_features.md` maps one-to-one onto validators in the
gate. The measured ones currently pass on real evidence: the **matchmaking
soak** holds **p99 34.2 s ≤ 35 s** at 5× concurrency over 200 000 players across
all six cells (`matchmaking-soak-5x.json`); the **Open Beta crash dashboard**
reads **0.079 % < 0.1 %** over 18.4 M sessions
(`open-beta-crash-dedup-dashboard.json`); the **verified ban roster** carries an
`ed25519` signature over reviewed entries; the **certification** matrix counts a
platform only when its status is `passed`/`verified` with ≥4 evidence items
across all nine platforms; the **day-one patch** is held ≤ 6 GiB with content
kept in the base install; all **seven compliance sub-gates** (GDPR, CCPA, COPPA,
DSA, region-rating, sub-processor, DPIA) report green; the **roadmap** exposes
Season 1 + Season 2; and a **no-coming-soon scanner** walks `V4/ue/Content` and
`apps/v4/web/src` for blocked phrases.

```mermaid
flowchart TB
  subgraph narrative["Narrative & extras inputs"]
    vo["12 VO launch packs<br/>recorded + cinematic"]
    road["public roadmap<br/>S1 + S2 visible"]
    work["workshop + creator<br/>NDA · embargo · watermark"]
    noc["no-coming-soon scan<br/>Content + web roots"]
  end
  subgraph ops["Ops & integrity inputs"]
    mm["matchmaking soak<br/>p99 34.2s ≤ 35s · 5×"]
    crash["crash dedup<br/>0.079% < 0.1%"]
    ac["anti-cheat<br/>EAC + ed25519 roster"]
    cert["certification<br/>9 platforms passed/verified"]
    comp["7 compliance sub-gates<br/>GDPR·CCPA·COPPA·DSA·…"]
  end
  narrative --> AGG
  ops --> AGG
  AGG{"v4-launch-readiness-check.mjs<br/>(615-line validator)"}
  todos["§94 ops milestones<br/>must stay [~], not [x]"] -->|validateDocs| AGG
  AGG -->|"only if no fabricated [x]"| green["launch gate: GREEN (exit 0)"]
  standins["891 .v4asset.json stand-ins<br/>0 cooked binaries"] -.->|caps cooked claims| green
```

### Why the green is honest

The load-bearing clause is `validateDocs`. The §94 backlog splits its tasks two
ways, and the gate _requires_ the split. The **locally-verifiable** items —
feel-tests green on the merge commit, no coming-soon screens, all 12 VO
languages declared, all advertised modes on all platforms, roadmap published,
compliance gates green, esports calendar, workshop live — are marked `[x]`. The
**real-world operations** items — running the closed alpha/beta and open beta,
the 200 k soak, standing up 24/7 support, the 60-minute hotfix SLA, day-one cert
on cooked builds, the measured crash and matchmaking numbers, anti-cheat live —
are marked `[~]`, because they cannot have happened before the **2026-10-01**
launch and are not verifiable from a text-only repository. The gate hard-codes
the expected `[~]` tokens (per the 2026-06-12 remediation note inside the
script): if someone re-checks "Run Closed Beta…" to `[x]` without evidence, the
gate **fails**. So the aggregate passes _precisely because_ the corpus refuses
to fabricate operations that have not occurred — and beneath it sits the
stand-in caveat, which keeps the truly cooked claims (a played soak, a passed
TRC) out of `[x]` reach until binary content exists. That is the same honesty
discipline as V3's red gate, inverted: V3 is red because real fleet/cert
evidence is absent; V4 is green because it has stopped _claiming_ that evidence
and gated on the honest marks instead.

### Service lifecycle & sunset

Launch readiness is bracketed at the far end by an end-of-life plan, because an
account-bound, real-money live service carries deletion and entitlement
obligations that outlast the servers. `V4/release/final-polish-readiness.json`
declares a **five-year window (2026-10-01 → 2031-10-01)** with a phased sunset:
a T-12-month public announcement, T-9-month entitlement export, T-6-month
last-paid-content lock, T-3-month live-ops wind-down, a T-1-month window that
**prioritises DSAR and delete queues**, and a T0 shutdown that **preserves an
offline mode**. The guarantees are concrete and owned by named services — a
365-day account-data and replay-archive export window, a **45-day privacy
deletion SLA that survives shutdown**, 180 days of post-shutdown support, and a
public archive of the wiki, balance ledger, roadmap final state, and partnership
disclosures. The dates are forward-looking by construction; the obligations are
documented and gated now.

## Where this connects

- [./trust-safety-and-compliance.md](./trust-safety-and-compliance.md) — the
  moderation, age-gating, and DSA statement-of-reasons surface the AI-commentary
  bias review and the creator-program controls assume.
- [./product-promise-and-conventions.md](./product-promise-and-conventions.md) —
  the orientation door, the `.v4asset.json` stand-in convention, and the
  target-artifact discipline behind the Codex source-group caveat.
- [./online-services-networking-and-esports.md](./online-services-networking-and-esports.md)
  — the esports calendar and tournament toolkit the launch gate's
  `validateEsports` clause cross-checks.
- [../architecture/security-compliance-launch.md](../architecture/security-compliance-launch.md)
  — the architecture companion: DSAR/deletion, anti-cheat, residency, and the
  same 615-line launch verifier read in engineering depth.
- The feature hub: [../V4_features.md](../V4_features.md). </content> </invoke>
