# V2 — Implementation TODOs (Fighting Game, Unreal Engine 5)

Source: derived from `V2/V2_features.md` cross-referenced against the state of
`V2/` and the eventual Unreal Engine project under `V2/ue/` as of 2026-05-12.

## Purpose

This file is the **source of truth for V2 completion state and coding-agent
execution order**. A coding agent should be able to start at §1.1, work
sequentially, and rely on each unchecked item as an implementation task whose
successful completion moves the product toward the full V2 vision. V2 is a
single-product fighting game in Unreal Engine 5 whose mode and mechanic coverage
spans the entire heritage of the genre:

- **Mortal Kombat** — fatalities, brutalities, X-ray / Fatal Blows, Krypt,
  Towers of Time, klassic Tower / Endless / Survivor, cinematic Story.
- **Street Fighter** — 2D-feel motion-input combat, Drive system, V-Trigger,
  parry / Drive Impact, World Tour open world, Battle Hub, Fighting Ground.
- **Tekken** — 3D juggle-and-sidestep combat, Heat / Rage Arts, Tekken Force
  beat-em-up, Devil Within action-adventure, deep customization, Ghost battle.
- **WWE 2K** — pin / submission mini-games, weight detection, Universe mode,
  MyCAREER, MyGM, MyFACTION, MyRISE, Royal Rumble, cage / HIAC / ladder / TLC.
- **UFC** — stamina simulation, takedowns, ground-and-pound, transitions, weight
  classes, GOAT career, Fight Night PPV booking, ranking system.
- **Soul Calibur** — 8-way run weapon combat, Guard Impact, Soul Charge,
  Critical Edge, ring out, Chronicles of the Sword, Create-a-Soul.
- **Def Jam: Fight for New York** — environmental finishers, Blazin' moves,
  five-style hybrid (Streetfighting, Wrestling, Martial Arts, Kickboxing,
  Submissions), hip-hop driven story / crew progression, custom soundtrack.

Each unchecked `[ ]` below is a coding-agent-actionable task. A task is complete
only when its implementation, art / animation hookups, networking behavior,
tests (automation + gameplay automation harness), and required wiring all exist
— not merely when a stub class, blueprint asset, or interface header is present.
The Oshun-repo `CLAUDE.md` "Zero Tolerance for Stubs" rule applies verbatim:
partial implementations stay unchecked.

> **⚠️ Completion-state warning (2026-06-12): the `[x]` marks below predate any
> adversarial verification pass.** They were set during implementation sessions
> against this checklist's own criteria, not independently audited. The
> remediation logged in
> [`V2/VERIFICATION_REMEDIATION_2026-06-12.md`](VERIFICATION_REMEDIATION_2026-06-12.md)
> re-marked operationally-unverifiable real-world claims (platform cert / TRC /
> lotcheck, rating-board approvals, dogfood drills, closed/open betas, external
> playtests, signed contracts / MSAs, multi-day soak and season-cycle
> verification, EAP/HR programs) to `[~]` (since 2026-09-18 written `[ ]` with a
> `blocked:<reason>` tag, which is what the task board reads) and
> claimed-but-contradicted items to `[ ]`. A remaining `[x]` attests that the
> named **code, contract, or spec artifact exists in this repo and was
> implemented against the task's criteria** — it does NOT attest to shipped,
> cooked, platform-certified, or live-operated game content. The UE project here
> is a C++ source skeleton with exactly one `.uasset`, no `Binaries/`,
> JSON-contract-only `Content/`, and no deployed services. Do not treat any
> `[x]` as launch evidence without consulting the remediation log.

## 0. The playable build everything else waits for (added 2026-09-18)

Every one of the 83 open boxes below (the milestones of §77.10, the CI matrix of
§56, the region variants of §54.2 and the whole of §138) was re-opened on
2026-06-12 with the same note: "no playable build exists". No item anywhere in
this file asked for one. The machine that executes tasks has Unreal Engine 5.5
(run the editor as `ueagent`; see `.claude/rules/unreal-engine-vseries.md`), so
the build is work, not a blocker. The task board lists the sections that wait on
it as deferred and offers these first. The ambient rail's RC.2.P1
(`V10/V_SERIES_AMBIENT_RAIL_TODOS_2026-07-16.md`) needs the same build.

- [ ] **V2.VS.1** Compile the project headless. Build the `V2Editor` target of
      `V2/ue/V2.uproject` with `UnrealBuildTool` on the executing machine, fix
      what does not compile, and record the exact command, the engine version
      and the wall time in `V2/release/vertical-slice/README.md`. **Verify:**
      the build log ends without errors;
      `UnrealEditor-Cmd V2.uproject -run=     ResavePackages -help` (or any
      no-op commandlet) exits 0.
- [ ] **V2.VS.2** Two real fighters. Create two playable fighters as cooked
      content — skeletal mesh, animation set and the move data that
      `FV2SimWorld` reads — starting from assets the project may ship (the
      Unreal mannequins that come with the engine's templates, or meshes from
      the Isis 3D lane once one is admitted), each bound to one of the existing
      frame-data specs so their moves differ. **Verify:** an automation test
      loads both, lists their moves from the data the simulation reads, and
      fails if either has fewer than a jab, a heavy, a throw and a block.
- [ ] **V2.VS.3** One legal stage: bounded arena geometry, spawn points, camera
      rig and the collision the ring-out and wall rules need. **Verify:** an
      automation test spawns both fighters at their marks and asserts the bounds
      the ruleset reports.
- [ ] **V2.VS.4** A bout that runs to a result with nobody watching. A
      commandlet (or `-nullrhi` game run) drives both fighters from scripted
      input streams through the normal move, collision and round authorities of
      `FV2SimWorld` to a match outcome, writes a replay and a result record, and
      exits non-zero on a desync. **Verify:** the same inputs produce the same
      result hash twice; one of the golden replays under `V2/` re-plays
      frame-identically.
- [ ] **V2.VS.5** Cook and boot. Cook the Linux build (and Win64 if the
      cross-compile toolchain installs), boot it with `-nullrhi`, and run
      V2.VS.4 against the cooked build. **Verify:** the cooked build's result
      hash equals the editor build's; sizes and cook time are recorded.
- [ ] **V2.VS.6** Put V2.VS.1, .4 and .5 in CI as the first real Gauntlet-class
      job of `.github/workflows/v2-build.yml` on a self-hosted runner that has
      the engine, replacing the claim §56.1 re-opened. **Verify:** the workflow
      runs on a pull request that touches `V2/ue/**` and fails when a planted
      desync is committed.
- [ ] **V2.VS.7** Re-read the 83 re-opened boxes against the slice. For each,
      say which of them the slice now makes checkable, which need content beyond
      two fighters (name the content), and which need something no agent can
      obtain — VO recordings, rating-board submissions, console devkits, live
      services with real users — and tag only those with `blocked:` and the
      reason, one at a time. **Verify:** a table in
      `V2/release/vertical-slice/README.md` with one row per re-opened box.

## Cross-Reference Convention

Throughout the V2 docs, **bare `§N` and `§N.M` references resolve to this
document** (`V2_TODOS.md` is the only V2 doc with section numbering used as
hyperlinks; 138 top-level sections, ~1000 subsections). Explicit doc prefixes
are used where ambiguity matters:

- Bare `§80` or `§52.8` → a section in this file.
- `deps§57` → `V2_DEPENDENCIES.md` §57 (Hardware Peripheral SDKs).
- `arch§"<anchor>"` → `V2_ARCHITECTURE.md` by section anchor.
- `features§"<anchor>"` → `V2_features.md` by section anchor.

`V2_features.md` and `V2_ARCHITECTURE.md` use named anchors, not section
numbers; this file and `V2_DEPENDENCIES.md` carry numbered ids.

## Phase / cut-line convention

The backlog describes the **full vision**, not only day-one launch. Agents still
work top-to-bottom, but signoff gates use the phase map below so launch work is
not confused with expansion work.

- **[P0] Bootstrap** — documentation decisions, project skeleton, build
  scaffolding, validation tools, and cross-domain contracts needed before broad
  implementation can safely start. This is §1 plus the ADRs under
  `V2/docs/decisions/`.
- **[P1] Launch** — the shippable fighting-game product and every service,
  compliance, performance, accessibility, and operations surface needed for GA.
  This is §2-§94 and §138 unless an individual bullet explicitly says
  post-launch or carries a lower phase.
- **[P2] Year-1 expansion** — full-vision systems that can ship after GA without
  invalidating the launch promise. This is §95-§125 unless a section says
  otherwise.
- **[P3] Full-vision stretch** — Year-2+ or DLC-funded systems. This is
  §126-§137.

Explicit `[P2]` / `[P3]` tags on headers or bullets override the numeric
default. Overrides can only move work later. Moving work earlier or later
outside this map requires an ADR at `V2/docs/decisions/phase-cut-<task>.md`.

## Acceptance-criteria convention

Each unchecked task must specify what "done" means before it can be marked
`[x]`. Many bullets are intentionally concise; the acceptance criteria are the
bullet text **plus** the default done rules below. Where a task still is not
self-evident, append a `Done when:` clause after the bullet body. Format:

```
- [ ] Implement <thing>. Done when: <observable / measurable assertion>.
```

Examples (from §138 launch-readiness):

- "Done when: golden-replay regression suite green across all platforms; CI job
  `regression-replay-pr-gate` passes on the merge commit."
- "Done when: matchmaking p99 ≤ 35 s under 5× expected launch concurrency in the
  staging environment; dashboard at `grafana://v2/matchmaking/p99` records ≤ 35
  s for 7 consecutive days."
- "Done when: 30-min play session in Story mode produces zero new ANR / GPU hang
  / OOM in the crash dedup dashboard (`grafana://v2/crash/dedup/story`)."

Default done rules by task type:

- **Create / implement a C++ module or plugin:** target directory exists with
  `.Build.cs`, module class, `Public/`, `Private/`, at least one real runtime or
  editor type matching the stated responsibility, unit / automation coverage,
  and integration into `V2.uproject` or the owning plugin manifest. Empty shell
  modules stay unchecked.
- **Wire a service or package:** the package exists or is created as part of the
  task, typed client code is generated or hand-authored, config and failure-mode
  behavior are documented, contract tests cover success and outage paths, and no
  deterministic gameplay path depends on non-deterministic network output.
- **Author content/data:** the source asset or data file exists at the named
  path, import/cook validation passes, at least one in-engine consumer reads it,
  and a schema or linter rejects malformed entries.
- **Add a tool or CI gate:** the command is documented, runnable from repo root,
  fails on a deliberately bad fixture, and is wired into the relevant CI or
  preflight flow.
- **Make a legal/product decision:** an ADR exists under `V2/docs/decisions/`,
  the TODO links to it, and follow-on implementation tasks remain unchecked
  until built.

Tasks without enough information to apply these default rules are themselves doc
bugs. Fix the task before implementing it; do not guess silently.

## Audit snapshot from current V2/

This checklist was first authored against an **empty `V2/ue/` project root** on
2026-05-11. Re-snapshotted honestly on **2026-06-12** against what is actually
on disk:

- A UE **C++ source skeleton exists**: ~604 source files (575 `.h`/`.cpp` plus
  `.Build.cs`/`.Target.cs`) across 26 runtime/editor/test modules under
  `V2/ue/Source/`, plus 5 plugin directories under `V2/ue/Plugins/`
  (V2AICommentary, V2AdaptiveAI, V2AssetLinter, V2Editor, BellonaUnrealEditor).
  It has never been cooked or packaged in this repo: there is no
  `V2/ue/Binaries/`, and exactly **one `.uasset`** exists in the entire project
  (`V2/ue/Plugins/V2Editor/Resources/V2FrameDataInspector.uasset`).
- `V2/ue/Content/` contains **JSON contracts** (387 files), 5 `.collection`
  files, and `.gitkeep` placeholders — no imported art, animation, audio, map,
  or other binary game assets.
- `apps/v2/` contains **50 TypeScript service libraries**. They are
  adapter/client code with tests, not deployed running services.
- A referenced path that does not exist is not an error by itself. It is a
  target artifact. The first task that names that path owns creating it with
  production structure, tests, and validation.
- Engine version is fixed at Unreal Engine 5.5 LTS (see
  `V2/V2_DEPENDENCIES.md`). Tasks that reference UE features assume 5.5
  semantics (GAS, Motion Matching, Niagara 2.0, Chaos Cloth/Flesh, MetaSounds
  Builder, Mover 2.0).
- C++ is the primary gameplay language; Blueprint is for designers / data /
  state graphs / cinematic glue only. Tasks that touch frame-deterministic
  combat must be implemented in C++.
- Online networking is rollback-first for 1v1 modes (GGPO-style) and
  client-server for asymmetric / multi-fighter / open-world modes. Tasks must
  honor whichever model the mode they live under uses.
- The "feel" goal is per-game-segment, not blended: when a match is in MK
  ruleset, it feels like MK; SF ruleset feels like SF; UFC feels like UFC. Tasks
  that touch combat tuning must reference the **inspirational source** named on
  the task.

## How to use this file

- Process tasks **sequentially within a section**. Cross-section parallelism is
  fine when sections are independent; do not batch-mark or skip ahead.
- For each task:
  1. Read the referenced source files / contracts / data tables.
  2. Implement the feature with real, domain-specific logic. No stubs, no
     placeholders, no `FMath::RandRange` for deterministic combat outputs.
  3. Write tests that assert **frame-accurate** or **mode-accurate** behavior
     (e.g., `EXPECT_EQ(RecoveryFrames, 12)`, not "is > 0"). Use the UE
     Automation Spec runner for gameplay logic; use Gauntlet for end-to-end.
  4. Run the adversarial stub scan from the Oshun `CLAUDE.md` against changed
     files before marking complete.
  5. Run `python3 V2/tools/validate-v2-docs.py` whenever a V2 doc changes.
  6. Mark `[x]` and commit.
- A task that is not locally actionable (e.g., "Submit cert TRC package to
  Sony") stays `[ ]` and ends with a `blocked:<reason>` tag and a one-line note
  (vocabulary and procedure: `.claude/rules/task-checkbox-verification.md`); the
  Eve Task Board then lists it in `TODOS/PARKED.md` instead of the work queue.
  Everything else must be implemented. The 142 items this file once marked `[~]`
  were converted to that form on 2026-09-18, one at a time, from their own
  re-mark notes; `[~]` is no longer a mark this file uses.
- File-path hints reference the V2 UE project layout
  (`V2/ue/Source/<Module>/...`). Prefer extending an existing module over
  creating a new one; module split is defined in §1.

## V2 Exit Criteria (high level)

V2 is feature-complete only when every section below is fully checked AND the
adversarial scan turns up zero actionable hits AND launch-readiness drills have
run on all target platforms. See "## Launch Readiness" near the end for the
gating checklist.

---

## Table of Contents

1.  [Project Foundations: UE5 Setup, Modules, Build Pipeline](#1-project-foundations-ue5-setup-modules-build-pipeline)
2.  [Core Gameplay Framework: GAS, Tags, Attributes, States](#2-core-gameplay-framework-gas-tags-attributes-states)
3.  [Fighter Character Framework](#3-fighter-character-framework)
4.  [Animation System: AnimBP, Motion Matching, Mover, IK](#4-animation-system-animbp-motion-matching-mover-ik)
5.  [Input System & Motion Inputs](#5-input-system--motion-inputs)
6.  [Hitbox / Hurtbox / Collision Authority](#6-hitbox--hurtbox--collision-authority)
7.  [Rollback Netcode (1v1 Modes)](#7-rollback-netcode-1v1-modes)
8.  [Client-Server Net (Asymmetric / Multi-Fighter / Open World)](#8-client-server-net-asymmetric--multi-fighter--open-world)
9.  [Striking System (SF / MK / Tekken Inspired)](#9-striking-system-sf--mk--tekken-inspired)
10. [Grappling & Throw System](#10-grappling--throw-system)
11. [Wrestling System (WWE Inspired)](#11-wrestling-system-wwe-inspired)
12. [MMA / Ground Game (UFC Inspired)](#12-mma--ground-game-ufc-inspired)
13. [Weapon Combat (Soul Calibur Inspired)](#13-weapon-combat-soul-calibur-inspired)
14. [Five-Style Street Combat (Def Jam Inspired)](#14-five-style-street-combat-def-jam-inspired)
15. [Environmental Combat & Interactive Arenas](#15-environmental-combat--interactive-arenas)
16. [Fatalities, Brutalities, Friendships, Mercies (MK)](#16-fatalities-brutalities-friendships-mercies-mk)
17. [Super Moves: Critical Arts, Rage Arts, Critical Edge, Blazin'](#17-super-moves-critical-arts-rage-arts-critical-edge-blazin)
18. [Match Rulesets & Stipulation Library](#18-match-rulesets--stipulation-library)
19. [Arcade Mode](#19-arcade-mode)
20. [Story Mode (Cinematic, Branching)](#20-story-mode-cinematic-branching)
21. [Tower / Tournament / Survivor Modes](#21-tower--tournament--survivor-modes)
22. [Krypt / Reward Vault (MK)](#22-krypt--reward-vault-mk)
23. [Battle Hub & Online Lobbies (SF6)](#23-battle-hub--online-lobbies-sf6)
24. [World Tour Open-World Mode (SF6)](#24-world-tour-open-world-mode-sf6)
25. [Tekken Force / Side-Scroller Brawler Mode](#25-tekken-force--side-scroller-brawler-mode)
26. [Devil Within / 3rd-Person Action-Adventure](#26-devil-within--3rd-person-action-adventure)
27. [WWE Universe Mode](#27-wwe-universe-mode)
28. [MyCAREER (WWE + UFC GOAT Career)](#28-mycareer-wwe--ufc-goat-career)
29. [MyGM / Promoter Mode](#29-mygm--promoter-mode)
30. [MyFACTION (Card Collector)](#30-myfaction-card-collector)
31. [MyRISE / Persona Career Story](#31-myrise--persona-career-story)
32. [Royal Rumble / Battle Royal](#32-royal-rumble--battle-royal)
33. [UFC Fight Night / Pay-Per-View Booking](#33-ufc-fight-night--pay-per-view-booking)
34. [Chronicles of the Sword (Soul Calibur Strategy/RPG)](#34-chronicles-of-the-sword-soul-calibur-strategyrpg)
35. [Def Jam Story / Street Career](#35-def-jam-story--street-career)
36. [Crew / Clique / Stable / Faction Mode](#36-crew--clique--stable--faction-mode)
37. [Create-a-Fighter / Create-a-Soul / CAW](#37-create-a-fighter--create-a-soul--caw)
38. [Create-a-Moveset / Move Editor](#38-create-a-moveset--move-editor)
39. [Create-an-Arena / Stage Editor](#39-create-an-arena--stage-editor)
40. [Create-an-Entrance / Theme Authoring](#40-create-an-entrance--theme-authoring)
41. [Roster, Move Catalog, & Data Tables](#41-roster-move-catalog--data-tables)
42. [Stages / Arenas / Environments](#42-stages--arenas--environments)
43. [Audio: Music, Voice, SFX, Dynamic Soundtrack](#43-audio-music-voice-sfx-dynamic-soundtrack)
44. [Visual Effects: Niagara, Decals, Gore](#44-visual-effects-niagara-decals-gore)
45. [Cinematic Camera, Slow-Mo, X-Ray, Cutscenes](#45-cinematic-camera-slow-mo-x-ray-cutscenes)
46. [UI / HUD / Menus / Front-End](#46-ui--hud--menus--front-end)
47. [Profile, Save, & Progression](#47-profile-save--progression)
48. [Online Services: Matchmaking, Ranked, Leaderboards, Replays](#48-online-services-matchmaking-ranked-leaderboards-replays)
49. [Anti-Cheat & Fair Play](#49-anti-cheat--fair-play)
50. [Cross-Play & Cross-Progression](#50-cross-play--cross-progression)
51. [Esports / Tournament Features](#51-esports--tournament-features)
52. [DLC, Season Pass, & Live Service Pipeline](#52-dlc-season-pass--live-service-pipeline)
53. [Accessibility](#53-accessibility)
54. [Localization & Voice-Over Pipeline](#54-localization--voice-over-pipeline)
55. [Telemetry, Analytics, Balance Tooling](#55-telemetry-analytics-balance-tooling)
56. [QA, Automation, Performance, Cert Compliance](#56-qa-automation-performance-cert-compliance)
57. [Asset Pipeline & Source Control (UE + Perforce/Git LFS)](#57-asset-pipeline--source-control-ue--perforcegit-lfs)
58. [Build & Release: Console, PC, Cloud](#58-build--release-console-pc-cloud)
59. [Marketing, Community, Social Surfaces](#59-marketing-community-social-surfaces)
60. [Training Mode](#60-training-mode)
61. [Mission Mode, Combat Trials, Tutorial Curriculum](#61-mission-mode-combat-trials-tutorial-curriculum)
62. [Replay Theater, Replay Takeover, Spectator](#62-replay-theater-replay-takeover-spectator)
63. [Character Presentation: Intros, Win Quotes, Mirror Banter](#63-character-presentation-intros-win-quotes-mirror-banter)
64. [Tag Team & Assist Mechanics](#64-tag-team--assist-mechanics)
65. [Game Feel: Hitstop, Hitlag, Sakkin, Camera Shake](#65-game-feel-hitstop-hitlag-sakkin-camera-shake)
66. [Network Quality: Delay Fallback, LAN, Server Browser, Private Rooms](#66-network-quality-delay-fallback-lan-server-browser-private-rooms)
67. [Cross-Platform Social: Friends, Party, Reporting, Bans, Appeals](#67-cross-platform-social-friends-party-reporting-bans-appeals)
68. [Parental Controls, Age Gating, Time-Played Reports](#68-parental-controls-age-gating-time-played-reports)
69. [Bonus Modes & Mini-Games](#69-bonus-modes--mini-games)
70. [Asset Budget & Streaming Architecture](#70-asset-budget--streaming-architecture)
71. [Day-One Patch, Hotfix, Quick-Resume, Crash Recovery, DRM](#71-day-one-patch-hotfix-quick-resume-crash-recovery-drm)
72. [Per-Fighter Signature Library](#72-per-fighter-signature-library)
73. [Per-Character Side Stories, Arcade Endings, Story Theater](#73-per-character-side-stories-arcade-endings-story-theater)
74. [Match-Flow Mode Variants: Time Attack, Score Attack, Versus, Wager, Handicap, First Blood, Boss Battle](#74-match-flow-mode-variants)
75. [Ranked Season Architecture: Hidden MMR, Decay, Regional, Cross-Platform Tier Alignment](#75-ranked-season-architecture)
76. [Companion App, Public API, In-Game Wiki, Glossary, Roadmap](#76-companion-app-public-api-in-game-wiki-glossary-roadmap)
77. [Production: Studio Operations, Mocap, VO Casting, Composer, IP / NIL / Licensing, Stunt](#77-production-studio-operations-mocap-vo-casting-composer-ip--nil--licensing-stunt)
78. [Loading, Splash, Tips, What's New, In-Game Notifications](#78-loading-splash-tips-whats-new-in-game-notifications)
79. [Esports Pro Circuit, Broadcast Extras, Wildcard / Roulette Modes](#79-esports-pro-circuit-broadcast-extras-wildcard--roulette-modes)
80. [Compliance Deep: GDPR / CCPA / DSA / DSAR / Right-to-be-Forgotten / Data Portability](#80-compliance-deep-gdpr--ccpa--dsa--dsar--right-to-be-forgotten--data-portability)
81. [Stage Lore, Per-Fighter Signature Stages, Day/Night Cycle, Atmospheric Particles, Crowd Density](#81-stage-lore-per-fighter-signature-stages-daynight-cycle-atmospheric-particles-crowd-density)
82. [Per-Fighter Rivals, Relationship Matrix, Cross-Character Timeline](#82-per-fighter-rivals-relationship-matrix-cross-character-timeline)
83. [Live Service Calendar: Seasonal Themes, Anniversary, Charity Events, Console Tie-Ins, Re-Engagement](#83-live-service-calendar-seasonal-themes-anniversary-charity-events-console-tie-ins-re-engagement)
84. [Fighter & Account Progression, Codex, Encyclopedia](#84-fighter--account-progression-codex-encyclopedia)
85. [Community Features: Player of the Week, Crew Showcase, Art/Video Gallery, Newsletter](#85-community-features-player-of-the-week-crew-showcase-artvideo-gallery-newsletter)
86. [Per-Platform Store Features & Region-Aware Pricing (PPP)](#86-per-platform-store-features--region-aware-pricing-ppp)
87. [Customer Support, Community Ambassadors, Hall of Fame](#87-customer-support-community-ambassadors-hall-of-fame)
88. [Balance Operations: Tier List, Matchup Chart, Public Frame Data, Pro Feedback](#88-balance-operations-tier-list-matchup-chart-public-frame-data-pro-feedback)
89. [Engineering Polish: PSO Pre-Cache, Shader Pre-Warm, Asset Pre-Load, Adaptive Tickrate](#89-engineering-polish-pso-pre-cache-shader-pre-warm-asset-pre-load-adaptive-tickrate)
90. [AI Director, Adaptive Difficulty, Smart Matchmaking Tuning](#90-ai-director-adaptive-difficulty-smart-matchmaking-tuning)
91. [Split-Screen, Couch Co-op, Local Multiplayer, Hot-Seat (Deep)](#91-split-screen-couch-co-op-local-multiplayer-hot-seat-deep)
92. [Co-op Online: Story / Tekken Force / Devil Within / Konquest / Crew Co-op](#92-co-op-online-story--tekken-force--devil-within--konquest--crew-co-op)
93. [Marathon, Endurance, King of Iron Fist, Signature Event Modes](#93-marathon-endurance-king-of-iron-fist-signature-event-modes)
94. [Privacy-by-Design, DPIA, Sub-Processor Registry, Extended Per-Region Compliance](#94-privacy-by-design-dpia-sub-processor-registry-extended-per-region-compliance)
95. [Studio Wellness: Crunch Policy, Mental Health, Sensitivity Reading, DEI Consultancy](#95-studio-wellness-crunch-policy-mental-health-sensitivity-reading-dei-consultancy-p2)
96. [Racing Component: Overview & Integration](#96-racing-component-overview--integration)
97. [Vehicle Framework: Chassis, Drivetrain, Engine, Suspension, Tire, Damage](#97-vehicle-framework-chassis-drivetrain-engine-suspension-tire-damage)
98. [Vehicle Physics & Handling (Arcade-Sim Spectrum)](#98-vehicle-physics--handling-arcade-sim-spectrum)
99. [Racing Tracks, Circuits, Open World](#99-racing-tracks-circuits-open-world)
100.  [Vehicle Customization & Tuning (NFSU2 Depth)](#100-vehicle-customization--tuning-nfsu2-depth)
101.  [Racing Career Mode (Most Wanted Blacklist + Carbon Crew + Territory)](#101-racing-career-mode-most-wanted-blacklist--carbon-crew--territory)
102.  [Race Mode Variants (Circuit / Sprint / Drag / Drift / Time Trial / Eliminator / Speed Trap / Knockout)](#102-race-mode-variants)
103.  [Police Pursuit System (Hot Pursuit + Most Wanted)](#103-police-pursuit-system-hot-pursuit--most-wanted)
104.  [Combat Racing (Death Race + Blur Power-Ups)](#104-combat-racing-death-race--blur-power-ups)
105.  [Power-Play / Track Events (Split/Second)](#105-power-play--track-events-splitsecond)
106.  [Drift / Canyon Duel / Drag (Carbon + NFSU2)](#106-drift--canyon-duel--drag-carbon--nfsu2)
107.  [Off-Road / Rally Racing](#107-off-road--rally-racing)
108.  [Bike Racing](#108-bike-racing)
109.  [Futuristic / Anti-Grav / Pod-Racer Mode](#109-futuristic--anti-grav--pod-racer-mode)
110.  [Vehicle AI / Adaptive Racing AI](#110-vehicle-ai--adaptive-racing-ai)
111.  [Vehicle Roster (Launch Catalog)](#111-vehicle-roster-launch-catalog)
112.  [Racing Online: Matchmaking, Lobby, Ranked, Cross-Play](#112-racing-online-matchmaking-lobby-ranked-cross-play)
113.  [Racing Esports & Broadcast](#113-racing-esports--broadcast)
114.  [Racing Replay, Photo Mode, Time-Rewind (GRID Flashback)](#114-racing-replay-photo-mode-time-rewind-grid-flashback)
115.  [Racing Audio Deep](#115-racing-audio-deep)
116.  [Racing VFX Deep](#116-racing-vfx-deep)
117.  [Crew / Garage / Apartment Hub (Carbon + NFSU2)](#117-crew--garage--apartment-hub-carbon--nfsu2)
118.  [Racing × Fighting Crossover: Fighter-Driver, Vehicle Combat, Get-Out-and-Fight](#118-racing--fighting-crossover-fighter-driver-vehicle-combat-get-out-and-fight)
119.  [Racing Compliance, Cert, Trophies, Anti-Cheat](#119-racing-compliance-cert-trophies-anti-cheat)
120.  [Vehicle Designer & Pit Crew Mechanic Minigame](#120-vehicle-designer--pit-crew-mechanic-minigame)
121.  [Convoy & Free-Roam Multiplayer Lobby (Open-World Social Hub)](#121-convoy--free-roam-multiplayer-lobby-open-world-social-hub)
122.  [Heist Mode: Multi-Stage Crew Stealth + Driving + Fighting](#122-heist-mode-multi-stage-crew-stealth--driving--fighting)
123.  [Demolition Derby + Vehicle-Hijack + Fight-On-Vehicle Crossover](#123-demolition-derby--vehicle-hijack--fight-on-vehicle-crossover)
124.  [VR / AR Support: PSVR2 / Quest 3 / Vision Pro](#124-vr--ar-support-psvr2--quest-3--vision-pro)
125.  [Hardware Peripherals Deep: Wheels / Pedals / H-Shifter / Direct-Drive / Specialty Controllers](#125-hardware-peripherals-deep-wheels--pedals--h-shifter--direct-drive--specialty-controllers)
126.  [Roguelike / Permadeath Adventure Mode (Hades-style Fighter)](#126-roguelike--permadeath-adventure-mode-hades-style-fighter)
127.  [Battle Royale: 100-Player Fighter / Vehicle / Hybrid](#127-battle-royale-100-player-fighter--vehicle--hybrid)
128.  [Sports-style Vehicle Modes: Soccer / Stunt / Burnout-Crash / Trackmania Time-Trial](#128-sports-style-vehicle-modes-soccer--stunt--burnout-crash--trackmania-time-trial)
129.  [Specialty Combat Modes: Punch-Out Boxing Sim, Bushido Blade One-Hit-Kill Sword](#129-specialty-combat-modes-punch-out-boxing-sim-bushido-blade-one-hit-kill-sword)
130.  [Persistent World Economy + NPC AI Schedules + Crime Rate](#130-persistent-world-economy--npc-ai-schedules--crime-rate)
131.  [Director Commentary, ADR, Origin Comic Mini-Series, Cinematography Library](#131-director-commentary-adr-origin-comic-mini-series-cinematography-library)
132.  [Karaoke & Music Rhythm Mode (Yakuza-Style)](#132-karaoke--music-rhythm-mode-yakuza-style)
133.  [Arcade Mini-Game Suite: Pinball, Air Hockey, Mini-Golf, Darts, Pool, Cooking, Photo Tournament](#133-arcade-mini-game-suite-pinball-air-hockey-mini-golf-darts-pool-cooking-photo-tournament)
134.  [World Boss + Community Raid + Async Community Events](#134-world-boss--community-raid--async-community-events)
135.  [AI-Generated Commentary + Highlight Reel + Per-Match Analysis](#135-ai-generated-commentary--highlight-reel--per-match-analysis)
136.  [Real-World Brand Partnerships + Celebrity Guests + Venue Tie-Ins](#136-real-world-brand-partnerships--celebrity-guests--venue-tie-ins)
137.  [Per-Account Vault + Lifetime Replay Archive + Ghost Data Archive](#137-per-account-vault--lifetime-replay-archive--ghost-data-archive)
138.  [Launch Readiness](#138-launch-readiness)

---

## 1. Project Foundations: UE5 Setup, Modules, Build Pipeline

The UE project skeleton underpins every other section. Get this right first.

### 1.1 Project skeleton

- [x] Create UE5.5 LTS project at `V2/ue/V2.uproject` with C++ enabled and
      `bUseUnityBuild=false` set in `V2/ue/Source/V2.Target.cs` for clean
      incremental compilation. Done when: `V2/ue/V2.uproject` opens in
      UnrealEditor-Cmd without errors on the local UE5.5 editor target, and
      `UnrealBuildTool` build of the empty game and editor targets succeeds
      locally. CI coverage for those same targets is owned by §1.3's
      `.github/workflows/v2-build.yml` task.
- [x] Configure `V2/ue/Config/DefaultEngine.ini` for fighting-game tick:
      `MaxFPS=60` minimum, fixed-step physics at 60 Hz, sub-stepping disabled on
      gameplay actors, async physics off for combat actors. Done when: PIE
      startup logs report `tick.MaxFPS=60` and `Physics.Substepping=0` for a
      freshly-spawned combat character; smoke-test
      `V2Tests/Automation/Bootstrap.Tick.spec.cpp` passes.
- [x] Configure `V2/ue/Config/DefaultGame.ini` with rating descriptors (M-rated
      for MK content; T-rated streaming patch swap), default game mode, default
      input mappings reference, default save directory. Done when: per-region
      cooked builds carry the correct rating descriptor in
      `<Platform>/Game.ini`; CI gate `Tools/check-rating-descriptors.py` passes
      on a sample per-region cook. — re-marked [ ] 2026-06-12: the done-when
      required a per-region cook and none had ever been produced; completed
      2026-06-12: a real Linux content cook (453/453 packages) ran on the on-box
      engine, `Tools/stage-region-rating-config.py` staged all 8 region
      `Game.ini` samples from that cook output (each carrying a
      `[V2.CookEvidence]` section plus the region's `BuildPipelineSkuTag` and
      `RegionVariantAsset` stamp), and `check-rating-descriptors.py` passes
      against them. The previous hand-authored "cooked" samples were deleted and
      the gate now rejects samples without cook evidence. Per-platform ship
      cooks (Win64/console) remain CI/devkit work (§56.8).
- [x] Configure `V2/ue/Config/DefaultInput.ini` as the minimal bootstrap input
      map required for project skeleton to compile (single binding:
      `Action.Skeleton.Compile` → `LMB` so PIE launches without warnings). All
      real input configuration lives in §5 (Enhanced Input + per-platform IMC);
      this file is deliberately minimal and **must not** accumulate bindings —
      adding here is a stub and fails review.
- [x] Configure `V2/ue/Config/DefaultEditor.ini` and `EditorPerProjectIni` for
      content browser collections per system (rosters, stages, moves, vfx,
      audio).
- [x] Add `.editorconfig`, `.clang-format` matching Unreal C++ style, and
      `.gitattributes` for LFS / Perforce typemap.

### 1.2 Module split

Implement these C++ modules under `V2/ue/Source/`. Each gets its own
`*.Build.cs`, `Public/`, `Private/`, and module class.

- [x] `V2Core` — engine subsystems, save game, dev-cheats, gameplay tags
      registry bootstrap. Loaded `PreDefault`.
- [x] `V2Gameplay` — GAS abilities, attribute sets, gameplay effects, base
      `AFighterCharacter`, `AFighterPlayerState`, match-state machine.
- [x] `V2Combat` — hitbox/hurtbox primitives, frame data tables, collision
      authority, juggle state, blockstring engine.
- [x] `V2Animation` — animation notify state subclasses (HitboxNS, ArmorNS,
      CancelWindowNS), motion matching configs, IK retargeters, Mover 2.0
      bindings for arena traversal modes.
- [x] `V2Input` — Enhanced Input setup, motion-input parser (QCF/QCB/DP/360),
      negative-edge handling, input buffer ring, replay-deterministic encoding.
- [x] `V2Netcode` — rollback engine (1v1), client-server replication channels
      (multi-fighter), match-state networking, input-prediction window.
- [x] `V2Modes` — `UGameInstance` subsystem registry of every game mode (§19-36
      modules register here), mode-load orchestration, mode-specific HUD
      injection.
- [x] `V2UI` — UMG widgets, CommonUI activation, Slate styles, frontend
      navigation graph.
- [x] `V2Audio` — MetaSound pipelines, Wwise (if used), dynamic music conductor,
      voice-line manager, accessibility audio cues.
- [x] `V2VFX` — Niagara templates, gore decal pipeline, blood pool spawner,
      X-Ray skeleton renderer.
- [x] `V2Cinematics` — Sequencer presets, cinematic camera rigs, slow-mo
      controller, X-Ray cutscene driver, in-engine cutscene replay.
- [x] `V2Persistence` — save game, profile, progression, currency ledger,
      offline replay store.
- [x] `V2OnlineServices` — login, friends, presence, matchmaking, leaderboards,
      cloud replays, parties.
- [x] `V2Services` — generated gRPC client outputs, gRPC channel manager, and
      non-deterministic Oshun domain adapters. Never linked from `V2Combat` or
      `V2Netcode`.
- [x] `V2Telemetry` — event schema, batched sender, balance dashboards feed.
- [x] `V2Editor` — editor-only utilities: move authoring widget, stage editor
      panels, frame-data inspector, hitbox visualizer.
- [x] `V2Tests` — automation specs, gauntlet drivers, golden replay harness.
- [x] `V2Racing` — racing-mode registry, race-state machine, race-mode-specific
      HUD injection, race rules / scoring / officiating (cross-ref §96-§119).
- [x] `V2Vehicles` — vehicle data assets (`DA_Vehicle`, `DA_VehicleTune`,
      `DA_VehicleCustomization`), per-chassis archetype components, drive- train
      logic, engine + RPM model, tire model.
- [x] `V2RacePhysics` — racing-specific physics (arcade-sim spectrum, off- road
      suspension, anti-grav hover, bike lean, hover-magnet attraction for pod
      racers).
- [x] `V2RaceTracks` — track / circuit / open-world racing-zone data, racing
      line authoring, AI racing line, sector splits, replay-deterministic
      vehicle pose recording.
- [x] `V2RaceModes` — `UGameInstance` registry of race-mode plugins (Circuit /
      Sprint / Drag / Drift / Time Trial / Eliminator / Pursuit / Combat /
      Power-Play / Canyon Duel / Rally / Bike / Pod Racer).
- [x] `V2VehicleAudio` — engine notes, exhaust, turbo, tire screech,
      transmission whine, Doppler shifting, environmental ambience.
- [x] `V2VehicleVFX` — tire smoke, sparks, debris, motion blur, speed lines,
      anti-grav engine glow, jump dust, mud splash.

### 1.3 Build pipeline

- [x] Wire BuildGraph at `V2/ue/Build/Build.xml` for `Win64`, `PS5`, `XSX`,
      `Switch2`, `Linux` (dedicated server), `Mac` (dev only).
- [x] Configure UnrealBuildAccelerator / Horde for distributed builds with cache
      hit-rate gate ≥ 75%.
- [x] Add `Tools/cook-all.ps1` and `Tools/cook-all.sh` wrappers around
      `RunUAT     BuildCookRun` per target platform.
- [x] Add CI workflow at `.github/workflows/v2-build.yml` running editor
      compile, automation tests, and cook for Win64 on every PR.
- [x] Add `Tools/check-frame-budget.py` that fails CI when any combat frame
      exceeds 16.6ms on the reference machine.
- [x] Configure ShaderCompileWorker and DerivedDataCache to share between dev
      machines via a network DDC.

### 1.4 Source-control & asset hygiene

- [x] Initialize git repo at `V2/ue/` with LFS tracking for `*.uasset`,
      `*.umap`, `*.fbx`, `*.wav`, `*.exr`, `*.ktx2`, `*.usd`.
- [x] Document Perforce migration path at `V2/docs/perforce-migration.md`
      (lock-required types, stream layout, typemap, P4Ignore).
- [x] Add `Saved/`, `Intermediate/`, `Binaries/`, `DerivedDataCache/` to
      `.gitignore`.
- [x] Add asset naming-convention linter at `V2/ue/Plugins/V2AssetLinter/` with
      rules per category (e.g., `AB_*` for AnimBlueprints, `BP_*` for
      Blueprints, `M_*` Material, `MI_*` Material Instance, `S_*` Skeleton,
      `SK_*` SkeletalMesh, `AM_*` AnimMontage, `DA_Move_*` Move Data Asset,
      `DA_Fighter_*` Fighter Data Asset).
- [x] CI gate: linter must run on every commit changing `Content/`.

### 1.5 Plugin baseline

- [x] Enable: GameplayAbilities, EnhancedInput, CommonUI, ModelViewViewModel,
      MotionWarping, ChooserTable, AnimationWarping, MotionMatching, Mover,
      Niagara, GeometryScripting, ProceduralMeshComponent, ChaosCloth,
      ChaosFlesh, MetaSound, AudioModulation, AudioGameplayVolume,
      ReplicationGraph, NetworkPrediction, GameFeatures, ModularGameplay, Iris
      (5.5 networking), Online Services (OnlineServicesEOS or OS), Trace
      Insights, Gauntlet, FunctionalTesting, AutomationController.
- [x] Disable everything else in `DefaultEngine.ini`
      `[/Script/Engine.Engine]     DisabledPlugins` to keep editor cold-start ≤
      25s.

### 1.6 Oshun integration skeleton

V2 is a sovereign codebase for the deterministic combat inner loop, but every
non-deterministic surface delegates to the Oshun monorepo's existing domain
packages. The tasks below land the integration boundary **before** any content
pipeline, online services, or moderation work begins, so later sections cook
into the integrated shape instead of the standalone shape. See
`V2_ARCHITECTURE.md` § "Sister-Monorepo Integration Surface" for the full
per-surface mapping and `V2_DEPENDENCIES.md` § 68 for the package-level
dependency contract.

#### 1.6.1 Sovereign-core boundary

- [x] Document the V2-local non-negotiable list at
      `V2/docs/integration/sovereign-core.md`: `V2Combat`, `V2Gameplay`,
      `V2Input`, `V2Netcode` rollback, save-format binary, replay container,
      Sequencer timelines, per-platform IMC files, anti-cheat client driver. No
      service inside this boundary may call out to async Oshun services.
- [x] Add a CI gate at `Tools/check-sovereign-isolation.py` that fails the build
      if any file under `V2/ue/Source/{V2Combat,V2Gameplay,V2Input,V2Netcode}/`
      includes `V2Services/` headers or names `@oshun/*` packages.
- [x] Define the rollback-safe "behavior hint" channel: AI Director, Psyche
      tendency profile, Iris commentary, and any Oshun-sourced data must arrive
      on a non-deterministic side-channel that the rollback engine ignores.
      Document at `V2/docs/integration/rollback-isolation.md`.

#### 1.6.2 Module + adapter scaffold

- [x] Create `V2/ue/Source/V2Services/` module (new entry in §1.2): hosts
      generated gRPC client stubs, gRPC channel manager, and adapter classes for
      each consumed Oshun domain. Build target: client + dedicated server. Never
      linked from `V2Combat` or `V2Netcode`.
- [x] Generate UE-compatible gRPC stubs from `libs/proto/` at build time via
      `tools/codegen/src/v2-grpc-stubs.ts`. Output to
      `V2/ue/Source/V2Services/Generated/`.
- [x] Create `apps/v2/` adapter layer (TypeScript, Node) at
      `apps/v2/oshun-adapter/`. Provides `@oshun/event-bus` subscription
      handlers for events V2 must react to (`hathor.dialogue.ready`,
      `isis.asset.cooked`, `maat.balance.recommendation`,
      `kuanyin.action.taken`).
- [x] Wire `apps/v2/` to depend on `@oshun/event-bus`, `@oshun/identity`,
      `@oshun/audit-platform`, `@oshun/data-residency`, `@oshun/config`
      (features module), `@oshun/logging`, `@oshun/metrics`, `@oshun/tracing`
      from day one. No V2-only re-implementations of any of these.

#### 1.6.3 Bellona content-pipeline binding

- [x] Stand up `BellonaUnrealEditor.uplugin` consumer in `V2/ue/Plugins/`,
      tracking `libs/bellona/unreal/plugin/BellonaUnrealEditor/` via a submodule
      or workspace link.
- [x] Add reciprocal task tracking for `BellonaUnrealRuntime` (runtime-shipped
      companion plugin) at `docs/domains/bellona/deep-dive/specifications.md`
      with named owner + ETA. **V2 must not ship its own no-op runtime stub**:
      until `BellonaUnrealRuntime` lands, V2 features that depend on it (runtime
      hot-reload of cooked Bellona artifacts, ad-hoc runtime asset import) are
      gated off via the `@oshun/config` features module and the dependent
      surfaces (e.g., live cosmetic delivery from the Bellona pipeline) block on
      Bellona delivery. Editor-time `BellonaUnrealEditor` continues to ship.
- [x] Configure `@bellona/unreal` Remote Control endpoint at port 30010 for
      editor-time asset import + level scripting.
- [x] Wire Bellona cook outputs (`.uasset`, `.umap`) into V2's
      `Content/Generated/` directory with content-addressed manifest at
      `V2/ue/Content/Generated/manifest.json`.
- [x] Add Bellona event subscription: V2 cook listens for
      `bellona.artifact.cooked` events tagged `v2.*` and triggers UE reimport of
      changed assets.
- [x] Add CI gate at `Tools/check-bellona-cook-coverage.py` ensuring every asset
      under `Content/Generated/` traces back to a Bellona cook job with
      provenance lineage (rejects untraced assets at PR time).

#### 1.6.4 Hathor narrative + NPC binding

- [x] Subscribe `V2Modes` to `hathor.world.published` events. World publication
      triggers `@hathor/lore-compiler` export to V2 datatables. Gameplay
      snapshots receive only immutable world IDs + version hashes; publication
      metadata remains out-of-band from rollback state.
- [x] Author all Story / Side Story / Krypt / Chronicles / DJ Story content in
      `apps/hathor/studio-web/` (Hathor's authoring tool), not in V2 UE editor.
      V2 consumes the compiled artifact only.
- [x] Define the V2 → Hathor authoring contract at
      `V2/docs/integration/hathor-narrative-contract.md`: per-fighter timeline,
      rival relationship matrix, faction matrix, ladder ending graph, side-story
      Sequencer outline. Cross-reference reciprocal task in
      `docs/domains/hathor/deep-dive/specifications.md`.
- [x] Wire `@hathor/llm-npc` for open-world NPC encounters in World Tour /
      Tekken Force / Devil Within / DJ street / MyCAREER backstage. NPC AI calls
      happen off-rollback only.
- [x] Cache NPC dialogue outputs in `V2/ue/Content/Generated/NPCDialogue/` with
      seed + context hash. **Cache rationale (corrected from prior draft):** not
      for replay determinism — open-world modes are not replay-recorded — but
      for (a) cross-platform consistency (all clients see identical NPC replies
      per seed), (b) cost containment (avoid re-paying LLM tokens for identical
      contexts), and (c) repeatability for QA + content sign-off.

#### 1.6.5 Isis asset-generation binding

- [x] Subscribe to `isis.asset.generated` events tagged `v2.cosmetic.*`,
      `v2.stage.*`, `v2.decal.*` and route through Bellona cook.
- [x] Wire `@isis/3d-generation` + `@isis/ai-texturing` +
      `@isis/universal-rigging` as the cosmetic variant generation pipeline for
      `V2Mode_Cosmetic` content.
- [x] Wire `@isis/gaussian-splatting` for real-world venue capture in
      `V2RaceTracks/Generated/` and `V2/Content/Stages/Generated/`.
- [x] Wire `@isis/visual-dubbing` for AI commentary lipsync (closes the
      Audio2Face gap called out in `V2_ARCHITECTURE.md`).
- [x] Add quality gate: every Isis-generated shipping asset must pass
      `@isis/anomaly-detection` + Themis Originality Shields family
      (`@themis/music-shield`, `@themis/visual-shield`, `@themis/text-shield`,
      `@themis/video-shield`, `@themis/design-shield`; planned per
      `docs/domains/themis/deep-dive/features.md` §32.2 — V2 accept-gate blocks
      on launch) + `@kuanyin/precognition` before Bellona cook accepts it.

#### 1.6.6 Aja mocap binding

- [x] Replace planned Move.AI / Plask vendors in §5 with `@aja/depth-sensing` +
      `@aja/human-mesh-recovery` for markerless pickup capture.
- [x] Wire studio mocap shoots (Vicon / OptiTrack remain as physical capture
      hardware) through `@aja/motion-pipeline-sdk` for clean +
      `@aja/neural-retargeting` for V2-skeleton retarget.
- [x] Add frame-snap export path `@aja → @bellona/mocap → @bellona/unreal` Live
      Link, with notify-segment alignment for rollback-deterministic animation.
      Reciprocal task in `docs/domains/bellona/deep-dive/specifications.md` and
      `docs/domains/aja/deep-dive/specifications.md`.
- [x] Wire `@aja/consent-management` to track per-performer consent +
      revocation, linked to Themis NIL ledger.

#### 1.6.7 Iris + Psyche + Calliope commentary binding

- [x] Wire `V2AICommentary` plugin to call `@iris/conversation-orchestration`
      via the rollback-safe contract (off-rollback bubble; never contaminates
      determinism). Reciprocal contract task in
      `docs/domains/iris/deep-dive/specifications.md`.
- [ ] Author each commentator as a `@calliope/persona-live` AI artist with voice
      clone + brand metadata, signed off by talent. — re-marked [~] 2026-06-12:
      persona contract artifacts exist in-repo; talent signoff is an external
      agreement that cannot be evidenced here. `blocked:external`
- [x] Wire `@psyche/avatar-lipsync` + `@psyche/avatar-expressions` for
      commentator face animation driven by `@iris/voice` output.
- [x] Wire `@euterpe/master` for commentary mix ducking under
      `@euterpe/accompany` dynamic music.
- [x] Latency budget: commentary call ≤ 800 ms from KO trigger _(indicative
      target, to be measured against actual LLM round-trip + persona TTS
      render + lipsync render during alpha playtest)_; if budget exceeded,
      fallback to pre-recorded line keyed by
      `(cueKind, ruleset, commentatorId, seed)`. Document at
      `V2/docs/integration/commentary-latency.md`.

#### 1.6.8 Psyche + Shakti AI Director binding

**Scope + determinism rule (refined per third-pass critique).** Rollback in V2
applies to **1v1 PvP only** (per `V2_ARCHITECTURE.md` § Rollback Netcode). 1v1
PvP has no CPU opponent, so the AI Director and Psyche tendency hints **do not
normally execute inside a rollback match envelope at all.** The hint-consumption
surfaces are:

- **Primary (typical case): non-rollback modes** — arcade ladder, story mode,
  side stories, training vs CPU, Krypt, Chronicles, MyCAREER, MyRISE, MyGM,
  Universe sim, single-player tower modes. `V2AdaptiveAI` consumes live Psyche
  hints freely; no peer determinism concern because there is no peer.
- **Defense-in-depth (rare future case): rollback-with-CPU** — if V2 ever ships
  2v2 tag with a CPU teammate over rollback netcode, both peers must see the CPU
  make identical choices. In that case the Psyche tendency- vector + seed are
  sampled at match-load and serialized into the deterministic match-start input
  vector; `V2Netcode` treats them as ordinary deterministic inputs. Live
  mid-match Psyche updates are queued and applied at the next match-start, never
  injected mid-rollback.

The prior draft framed this backwards — as if rollback-with-CPU was the primary
path. It isn't; it's a defense-in-depth contract for a mode V2 may or may not
ship.

Tasks:

- [x] Wire `V2AdaptiveAI` to consume `@psyche/behavior-prediction` per-player
      tendency hints. **Primary path (non-rollback modes):** hints stream live.
      **Defense-in-depth (rollback-with-CPU, if ever shipped):** hints sampled
      at match-load and serialized into the deterministic match-start input
      vector; `V2Netcode` treats them as ordinary deterministic inputs.
- [x] Add CI gate at `Tools/check-rollback-determinism.py` that fails if
      `V2AdaptiveAI` (or any code referenced by it) reads a Psyche RPC anywhere
      reachable from `V2Netcode` rollback frames. The gate enforces the
      defense-in-depth contract whether or not rollback-with-CPU ships.
- [x] Wire `@shakti/sota-critical` combat-sport classification for per-player
      style detection (boxer / kickboxer / striker / grappler / submission
      specialist) feeding AI Director matchups.
- [x] Add the Shakti → V2 ruleset bridge (reciprocal task in
      `docs/domains/shakti/deep-dive/specifications.md`) mapping Shakti
      biomechanics onto MK / SF / Tekken / SC / DJ frame-data tables.
- [x] EU AI Act surface: `@psyche/action-safety` provides classifier
      transparency, opt-out, and Model Card hosted via `@nous/safety` (paired
      with `@themis/accountability` for the AI-system-of-record).

#### 1.6.9 Identity + entitlement + economy binding

- [x] Replace V2-only publisher account abstraction with `@oshun/identity` as
      the source of truth for account state, 2FA, recovery, region binding.
      Platform accounts (PSN / Xbox Live / Nintendo / Steam) bind to one
      `@oshun/identity` account, not the reverse.
- [x] Wire `V2Persistence` currency ledger to `@maat/finance` for spend, refund,
      region-aware pricing, regulatory caps. V2 keeps the in-engine ledger cache
      for offline play; reconciliation on next online sync.
- [x] Wire cross-product entitlement. **Privacy rule (corrected from prior
      draft):** Aphrodite is adult content; cross-product unlocks visible in V2
      lobbies / titles / badges would create an outing risk. Therefore: - Lilith
      meditation-streak titles, Shakti certification badges, and Calliope
      fan-club tiers may unlock V2 cosmetic / card-border / title grants by
      default-on through `@oshun/identity` entitlement claims. -
      Aphrodite-derived unlocks are **opt-in per individual grant** with
      explicit out-of-context warning at grant time, and never surface
      implicitly via title / badge / lobby visibility.
- [x] Wire `@aje/identity` + `@aje/nft` as the opt-in Web3 cosmetic ownership
      surface. **Per-platform cert gate (corrected from prior draft):** "opt-
      in" is insufficient on consoles + Apple — Aje surfaces are platform-
      cert-banned unless explicitly cleared per platform. Add
      `Tools/check-platform-cert-bans.py` CI gate that fails the build if any
      Aje package is reachable from a platform-cooked binary where its
      respective platform certs disallow on-chain in-game items. **Truth table
      source-of-truth (added third pass):** the gate reads from
      `V2/legal/platform-cert-bans.json`, a publisher-+-legal-maintained table
      mapping `{ platform, region, ageRating } → bannedSurfaces[]` with
      effective-date windows. Owner: V2 publisher legal team; review cadence:
      per platform-cert-policy update + at minimum quarterly. The CI gate fails
      the build if the table is missing, expired, or inconsistent with any
      reachable Aje package surface.
- [x] Wire `@lakshmi/behavioral` for responsible-play opt-in spend insight
      (parental controls, self-imposed caps, weekly summary). Compose with
      `@lakshmi/budgeting` + `@lakshmi/transactions` for cap enforcement.
      _(Note: `@lakshmi/spend-insight` does not exist — corrected to real
      Lakshmi behavioral package.)_

#### 1.6.10 Kuanyin + Themis moderation + governance binding

- [x] Replace Two Hat / Community Sift / Hive AI / AWS Rekognition first-line
      moderation with `@kuanyin/precognition` + `@kuanyin/foundation` taxonomy.
      Retain Hive / Rekognition only as fallback per §17.
- [x] Wire `@kuanyin/mindful-friction` for pre-send moderation friction on
      reports + flagged messages.
- [x] Wire `@kuanyin/community-harmony` for crew / faction / Battle Hub
      community temperature + raid defense.
- [x] Wire `@kuanyin/performer-protection` for licensed-fighter likeness
      shielding (cross-ref Themis NIL ledger).
- [x] Wire `@themis/dispute-resolution` for DSA Statement-of-Reasons +
      moderation appeals + tournament-result dispute flow.
- [x] Wire the Themis Originality Shields family (`@themis/music-shield`,
      `@themis/visual-shield`, `@themis/text-shield`, `@themis/video-shield`,
      `@themis/design-shield`; planned per
      `docs/domains/themis/deep-dive/features.md` §32.2) for every UGC upload
      (custom championships / decals / logos / music swaps). V2 UGC accept-gate
      blocks on the shields landing — reciprocal task tracker in
      `docs/domains/themis/deep-dive/specifications.md`.
- [x] Add reciprocal Kuanyin rage-quit / competitive-salt cascade class task
      tracker in `docs/domains/kuanyin/deep-dive/specifications.md`.
- [x] Wire `@themis/community` for crew / clique / stable governance primitives
      (voting, reputation, constitutions for crew rules).
- [x] Add reciprocal Themis NIL ledger schema task tracker in
      `docs/domains/themis/deep-dive/specifications.md`.

#### 1.6.11 Maat + Sophia + Nous analytics + balance binding

- [x] Wire `V2Telemetry` event publishers to `@oshun/event-bus` topics
      `v2.match.*`, `v2.cosmetic.*`, `v2.player.*` instead of V2-only ingest
      endpoints.
- [x] Wire `@maat/intelligence` + `@maat/dashboard` + `@maat/reporting` as the
      V2 balance dashboard surface. Replace standalone V2 balance dashboard
      plan. (Prior draft cited `@maat/analytics` which does not exist; closest
      fit is the intelligence + dashboard + reporting trio.)
- [x] Wire `@sophia/ingestion` to ingest the frame-data spreadsheet +
      patch-notes corpus on every release-candidate cook.
- [x] Wire `@maat/strategy` as the source of truth for V2 seasons, Crown Points,
      Pro Circuit calendar, anniversary, charity events. The fighting-game
      live-ops calendar shape lives in `@maat/strategy`, with the reciprocal
      Maat contract tracked in `docs/domains/maat/deep-dive/specifications.md`.
- [x] Wire `@nous/training` + `@nous/safety` for the smurf / win-trading /
      coordinated-throw / geographic-anomaly classifier suite. V2 publishes
      labeled training data on the event bus; `@nous/training` owns the training
      loop; `@nous/safety` hosts the Model Card. (Prior draft cited
      `@nous/ml-pipeline` which does not exist.)

#### 1.6.12 Aphrodite + accessibility binding

- [x] Wire `@aphrodite/age-verification` as the age-gate driver for gore tier +
      adult fatalities + region-conditional cinematics. Replaces standalone V2
      age-gate.
- [x] Wire `@aphrodite/consent-engine` for per-feature consent surfaces
      (telemetry, voice processing, behavioral profiling). (Prior draft cited
      `@aphrodite/consent` which does not exist.)
- [x] **Regional content-rule engine (corrected from prior draft):** the
      `@aphrodite/regional-content-rules` package called out in the prior draft
      does not exist. Accepted decision:
      `V2/docs/decisions/regional-content-rules-owner.md` creates shared
      `@oshun/region-rules`, with Aphrodite supplying age / consent inputs. Done
      when: per-region gore variants + content cuts (China / Germany / Australia
      / NZ / KR) cook from `@oshun/region-rules`, missing region data defaults
      to the most restrictive profile, and SKU cook tests prove each profile
      clamps content correctly.
- [x] Wire `@aphrodite/performer-sovereignty` + `@aphrodite/performer-autonomy`
      for licensed-fighter likeness safety + revocation flow. (Prior draft cited
      `@aphrodite/performer-safety` which does not exist.)
- [x] Wire `@iris/accessibility` for caption streaming, dyslexia/cognitive
      assistive UI, screen-reader bridge in companion + main client. V2 composes
      it through `@v2/iris-accessibility`, keeps `@psyche/caption-streaming` as
      the live-caption provider, and gates accessibility certification on native
      UE accessibility hooks.
- [x] Wire `@psyche/caption-streaming` for real-time match captions
      (accessibility + spectator mode). V2 composes it through
      `@v2/psyche-caption-streaming`, publishes in-match HUD, spectator, replay,
      companion, and broadcast caption channels, and keeps the contract off
      rollback.
- [x] **Age-gate primitive-fitness audit (refined from prior draft).** The prior
      draft framed this as a branding problem. That framing is wrong: age
      verification is a backend service; Aphrodite brand is not visible to V2
      players. The real question is whether the `@aphrodite/age-verification`
      primitive's _design_ (consent prompt flow, KYC vendor selection,
      per-region age-of-majority thresholds, retry/lockout policy,
      parental-control hand-off) is shaped for V2's use case (M-rated fighting
      game launched to teens-and-up) or only for adult-content age gating where
      requirements are stricter (2257, anti-CSAM, performer-protection layers V2
      doesn't need). Audit at `V2/docs/integration/age-gate-fitness-audit.md`.
      Decision: parameterize `@aphrodite/age-verification` with a
      `mature-rated-fighting-game` profile rather than promote a new
      `@oshun/identity` primitive. The V2 profile rejects the adult-content
      default, uses rating-board / region-rule thresholds, keeps 2257,
      performer-protection, and anti-CSAM performer workflows out of V2, and
      hands minor-account decisions to platform family controls.

#### 1.6.13 Uzume + Veritas esports binding

- [x] Wire `apps/v2/esports-tools/` to `@uzume/broadcast` as the broadcast
      pipeline. V2 composes it through `@v2/esports-tools`, covering switching,
      graphics, multiviewer, replay, SRT contribution feeds, stream health, and
      stream destinations. Standalone OBS / NDI / vMix integration is not
      primary; OBS WebSocket is retained only for streamer-mode notification
      suppression (§28). Audit:
      `V2/docs/integration/uzume-broadcast-pipeline.md`.
- [x] Wire `@uzume/lumina` + `@uzume/prism` for in-arena LED + projection
      integration for live tournaments. V2 composes it through
      `@v2/esports-tools`, covering LED wall layout, lighting pixel maps,
      projector mapping, structured-light alignment, arena video routes, and
      live tournament cue events while keeping arena production off rollback.
      Audit: `V2/docs/integration/uzume-arena-led-projection.md`.
- [x] Wire `@veritas/fact-checking` for post-match reporting, bracket result
      verification, esports news pipeline. V2 composes it through
      `@v2/esports-tools`, checking replay, bracket, post-match report, and news
      claims with explicit evidence, consensus scoring, and publication holds
      for winner-record conflicts. Audit:
      `V2/docs/integration/veritas-esports-fact-checking.md`.
- [x] Wire `@iris` real-time translation for spectator chat + commentary
      localization. V2 composes `@iris/voice` through
      `@v2/iris-realtime-translation`, registering spectator, commentator, and
      locale-receiver feeds for chat, commentary subtitles, broadcast overlays,
      and companion second-screen delivery while keeping translations off
      rollback. Audit: `V2/docs/integration/iris-realtime-translation.md`.

#### 1.6.14 Out-of-game surface binding (apps shell)

- [x] Migrate `apps/v2/web/` marketing site into `apps/oshun/web/` as a V2 tile
      under the shared Oshun shell, consuming `@oshun/shell-core` umbrella +
      per-surface clients (`@oshun/auth-client`, `@oshun/developer-portal`,
      `@oshun/persistence`). **Note:** the historical monolithic `@oshun/sdk`
      package does not exist; consumers import the specific surfaces they need.
      Remove standalone Next.js / Sanity / Contentful stack from §21 — adopt the
      shell's stack instead. Audit:
      `V2/docs/integration/out-of-game-web-shell.md`.
- [x] Build companion app as `apps/oshun/mobile/v2/` consuming
      `@oshun/shell-core` + per-surface clients (including `@oshun/auth-client`,
      `@oshun/concordia-integration`, `@oshun/trust-safety`), with
      `@iris/agents` for in-app assistant and `@sophia/client` for frame-data /
      codex queries. Companion-app launch now gates on the landed `@iris/agents`
      umbrella catalog at `libs/iris/agents/`. Audit:
      `V2/docs/integration/mobile-v2-companion-app.md`.
- [x] Public API surfaces at `apps/oshun/web/api/v2/` documented via
      `@oshun/openapi` specs at `libs/openapi/v2/`. The Next.js route adapters
      live under `apps/oshun/web/src/app/api/v2/`, with the canonical OpenAPI
      document at `libs/openapi/v2/companion.yaml`. Audit:
      `V2/docs/integration/public-api-v2.md`.
- [x] Frame-data wiki + glossary + roadmap pages backed by `@sophia/client` RAG
      with citations. The shell-native pages live at `/v2/wiki`, `/v2/glossary`,
      and `/v2/roadmap`, rendering typed Sophia RAG answers and citation rails.
      Audit: `V2/docs/integration/sophia-rag-knowledge-pages.md`.

#### 1.6.15 Compliance + observability binding

- [x] Route all V2 EU AI Act surfaces through `@themis/accountability` +
      `@nous/safety`. Each shipping AI service (commentary, Director,
      classifiers, generation pipelines) gets a Model Card under
      `V2/docs/ai/model-cards/`; `@nous/safety` owns runtime model metadata and
      `@themis/accountability` owns conformity audit export. (Prior draft cited
      `@nous/model-governance` which does not exist.) Audit:
      `V2/docs/integration/eu-ai-act-surface.md`.
- [x] Route DSR (access / erasure / portability / rectification) through
      `@themis/privacy` + `@oshun/data-residency` rather than standalone DSR ops
      console. The V2 surface is `@v2/themis-privacy-dsr-routing`; Themis owns
      the rights workflow and Oshun data-residency owns the subject-home route.
      Audit: `V2/docs/integration/themis-privacy-dsr-routing.md`.
- [x] Route audit log for moderation + anti-cheat + DSR through
      `@oshun/audit-platform`. V2 publishes; Oshun retains and exports. Audit:
      `V2/docs/integration/v2-audit-platform-routing.md`.
- [x] Wire `@oshun/metrics` + `@oshun/tracing` from day one across `apps/v2/`
      and `V2Services` UE module. Audit:
      `V2/docs/integration/v2-service-observability.md`.

#### 1.6.16 Concordia substrate composition (Concordia library is planned-only)

**Correction from prior draft.** The historical `@concordia/*` packages cited in
the prior draft historical names (`@concordia/intake`,
`@concordia/agreement-dsl`, `@concordia/review-routing`,
`@concordia/audit-export`) are historical names and do not exist —
`libs/concordia/` is planned-only. Until the library lands, V2 composes the
substrate primitives directly. The eventual `@concordia/*` library will collapse
this composition; V2 wires the substrate end-to-end as its first deployment.

- [x] Wire `@nous/cooperative-bargaining` + `@nous/preference-inference` +
      `@nous/agreement-search` + `@nous/concordia-sealed-memory` for the
      bargaining / preference / agreement / sealed-intake substrate handling
      anti-cheat appeals, tournament-result disputes, and crew conflicts. V2
      owns this composition in `@v2/concordia-substrate` until `@concordia/*`
      lands. Audit: `V2/docs/integration/v2-concordia-substrate.md`.
- [x] Wire `@iris/concordia-assistant` for appellant / arbiter dialogue
      scaffolding. Audit: `V2/docs/integration/v2-concordia-substrate.md`.
- [x] Wire `@oshun/concordia-integration` (`libs/oshun/concordia-integration/`)
      as the V2 → substrate event routing shim. Audit:
      `V2/docs/integration/v2-concordia-substrate.md`.
- [x] Wire `@kuanyin/concordia-restorative` for the restorative-justice branch
      on high-impact moderation outcomes. Audit:
      `V2/docs/integration/v2-concordia-substrate.md`.
- [x] Flag-gate at launch via `@oshun/config` features module. Audit:
      `V2/docs/integration/v2-concordia-substrate.md`.

#### 1.6.17 Reciprocal task tracking

The following reciprocal capabilities live in Oshun domain backlogs (not in V2
backlog) because they are Oshun-owned. V2 PRs that depend on them must block on
the corresponding ticket in the named domain. Track from V2 via the
`oshun-dependency` label.

- [x] _Bellona:_ `BellonaUnrealRuntime` runtime-shipped UE plugin
      (`docs/domains/bellona/deep-dive/specifications.md`).
- [x] _Iris:_ Low-latency in-match commentary contract on
      `@iris/conversation-orchestration` (gameplay-inert outputs; off- rollback)
      (`docs/domains/iris/deep-dive/specifications.md`).
- [x] _Psyche:_ AI Director behavior-hint integration — offline mode consumes
      live hints; online rollback mode bakes hints into the deterministic
      match-start input vector (no mid-match Psyche RPC in rollback envelope)
      (`docs/domains/psyche/deep-dive/specifications.md`).
- [x] _Aja + Bellona:_ 60 Hz resampling + sub-frame alignment for source mocap;
      notify-segment authoring stays in UE
      (`docs/domains/aja/deep-dive/specifications.md`,
      `docs/domains/bellona/deep-dive/specifications.md`).
- [x] _Themis:_ NIL / likeness ledger schema in a **new `@themis/likeness`
      library** (NOT `@themis/identity` — wrong scope)
      (`docs/domains/themis/deep-dive/specifications.md`).
- [x] _Themis:_ Originality Shields launch (`@themis/music-shield`,
      `@themis/visual-shield`, `@themis/text-shield`, `@themis/video-shield`,
      `@themis/design-shield`) — V2 UGC accept-gate blocks
      (`docs/domains/themis/deep-dive/specifications.md`).
- [x] _Maat:_ Fighting-game live-ops calendar shape on `@maat/strategy`
      (`docs/domains/maat/deep-dive/specifications.md`).
- [x] _Nous:_ Anti-cheat classifier training loop on `@nous/training` with Model
      Card hosting on `@nous/safety` for smurf, win-trading, coordinated-throw,
      and geographic-anomaly classifiers
      (`docs/domains/nous/deep-dive/specifications.md`).
- [x] _Aphrodite:_ V2 age-gate driver on `@aphrodite/age-verification` for gore
      tier, adult fatalities, and region-conditional cinematics
      (`docs/domains/aphrodite/deep-dive/specifications.md`).
- [x] _Aphrodite:_ V2 age-gate primitive-fitness audit parameterizes
      `@aphrodite/age-verification` with a mature-game profile and rejects the
      adult-content default profile for V2
      (`docs/domains/aphrodite/deep-dive/specifications.md`).
- [x] _Aphrodite:_ Per-feature consent surfaces on `@aphrodite/consent-engine`
      for telemetry, voice processing, and behavioral profiling
      (`docs/domains/aphrodite/deep-dive/specifications.md`).
- [x] _Aphrodite:_ Licensed-fighter likeness safety + revocation flow on
      `@aphrodite/performer-sovereignty` and `@aphrodite/performer-autonomy`,
      composed by `@v2/aphrodite-licensed-likeness-safety`
      (`docs/domains/aphrodite/deep-dive/specifications.md`).
- [x] _Iris:_ V2 accessibility bridge on `@iris/accessibility` for caption
      streaming, dyslexia / cognitive assistive UI, screen-reader bridge, and
      native UE accessibility hooks
      (`docs/domains/iris/deep-dive/specifications.md`).
- [x] _Iris:_ V2 real-time translation bridge on `@iris/voice` for spectator
      chat, commentary localization, broadcast overlays, and companion
      second-screen feeds, composed by `@v2/iris-realtime-translation`
      (`docs/domains/iris/deep-dive/specifications.md`).
- [x] _Psyche:_ V2 caption streaming bridge on `@psyche/caption-streaming` for
      real-time match captions, accessibility HUD captions, spectator mode,
      replay transcripts, and off-rollback presentation state
      (`docs/domains/psyche/deep-dive/specifications.md`).
- [x] _Uzume:_ V2 esports broadcast pipeline on `@uzume/broadcast`, composed by
      `@v2/esports-tools`; standalone OBS / NDI / vMix is not primary, and OBS
      WebSocket is retained only for streamer-mode notification suppression
      (`docs/domains/uzume/deep-dive/specifications.md`).
- [x] _Uzume:_ V2 in-arena LED + projection integration on `@uzume/lumina` +
      `@uzume/prism`, composed by `@v2/esports-tools` for live tournament LED
      walls, lighting pixel maps, projector mapping, structured-light alignment,
      video routes, and show cues
      (`docs/domains/uzume/deep-dive/specifications.md`).
- [x] _Veritas:_ V2 esports fact-checking bridge on `@veritas/fact-checking`,
      composed by `@v2/esports-tools` for post-match reporting, bracket result
      verification, and esports news publication holds
      (`docs/domains/veritas/deep-dive/specifications.md`).
- [x] _Nous + Themis:_ EU AI Act conformity surface on `@nous/safety` +
      `@themis/accountability` (`docs/domains/nous/deep-dive/specifications.md`,
      `docs/domains/themis/deep-dive/specifications.md`).
- [x] _Kuanyin:_ Rage-quit / competitive-salt cascade class on
      `@kuanyin/precognition`
      (`docs/domains/kuanyin/deep-dive/specifications.md`).
- [x] _Shakti:_ Combat-sport ↔ fighting-game-ruleset bridge
      (`docs/domains/shakti/deep-dive/specifications.md`).
- [x] _Nous + Iris + Oshun integration:_ Concordia substrate composition surface
      for V2 dispute / appeal / crew-conflict flows pending the planned
      `libs/concordia/*` library
      (`docs/domains/nous/deep-dive/specifications.md`,
      `docs/domains/iris/deep-dive/specifications.md`).
- [x] _Aje:_ Fan-token gated faction governance on `@aje/governance` with
      per-platform cert-ban CI gate
      (`docs/domains/aje/deep-dive/specifications.md`).
- [x] _Aphrodite or Shared:_ Regional content-rule engine owner decision (extend
      Aphrodite or stand up `@oshun/region-rules`)
      (`docs/domains/aphrodite/deep-dive/specifications.md`).

#### 1.6.18 Missing V2 surfaces — additional ecosystem owners

The first-pass per-surface mapping (in `V2_ARCHITECTURE.md` § "Sister- Monorepo
Integration Surface") covered V2's central surfaces but missed several large V2
features added in later sections of `V2_features.md` and `V2_TODOS.md`. The
owners listed below are plausible defaults; each row becomes its own subsection
in this file before the related content cook starts. Cross-ref
`V2_ARCHITECTURE.md` § "Missing V2 surfaces from the per-surface mapping" for
the full owner table.

- [x] **Racing component (§96-119)** — wire to Galatea (kinematics + whole- body
      control for ragdoll / driver), Saraswati (EV powertrain primitives for
      hybrid / electric vehicle modeling), and Maya (`@maya/genesis-terrain` +
      `@maya/genesis-urban` for tracks + open-world traversal). Reciprocal
      tasks: extend Galatea spec with vehicle-as-articulated-body modeling
      surface; extend Saraswati spec with V2 racing-EV consumption.
- [x] **Karaoke + rhythm-combat fusion (§132)** — wire to Euterpe `genesis`
      (procedural backing track) + `accompany` (adaptive accompaniment) +
      `protect` (DMCA-safe music swap for streamer mode) and Calliope
      `sound-design` (per-fighter signature theme variations). Voice via
      `@iris/voice`. Pitch + scoring rubric reciprocal surface is recorded on
      `@euterpe/genesis`.
- [x] **Mini-game suite — pinball / air hockey / mini-golf / darts / pool
      (§133)** — reuse Maya `@maya/games/*` primitives (combat / abilities /
      items / inventory mostly inapplicable but physics primitives + scene +
      input mapping reusable). Per-game-specific authoring in V2 plugins; no
      reciprocal Oshun task required for the basic case.
- [x] **Cooking simulator mini-game (§133)** — wire to Hestia (recipe
      intelligence + cooking education + ingredient management). Reciprocal
      task: extend Hestia spec with mini-game embedding surface (recipe-as-
      mini-game-script schema). Implemented by
      `@v2/hestia-cooking-minigame-bridge`; reciprocal surface recorded in
      `docs/domains/hestia/deep-dive/specifications.md` §8.4.
- [x] **World boss + community raid (§134)** — wire to Themis `community`
      (governance for community-shared HP rules + per-contribution validation
      schema), Maat `intelligence` (per-contribution aggregate dashboard),
      Hathor `simulation` (world-state simulation: which boss spawns when /
      where), Kuanyin `community-harmony` (raid defense against grief
      coordination). Reciprocal: world-boss governance shape on
      `@themis/community`. Implemented by
      `@v2/world-boss-community-raid-bridge`; reciprocal surface recorded in
      `docs/domains/themis/deep-dive/specifications.md` Section 13.
- [x] **Per-account vault + estate planning (§137 / Per-Account Vault &
      Estate-Planning Infrastructure)** — wire to Lakshmi (estate planning
      module) + `@oshun/identity` (account inheritance / delegation) +
      `@themis/transparency` (transfer audit). Reciprocal: extend Lakshmi spec
      with per-account-vault asset-transfer schema. Implemented by
      `@v2/per-account-vault-estate-bridge`; reciprocal surface recorded in
      `docs/domains/lakshmi/deep-dive/specifications.md` § V2 Per-Account Vault
      Asset-Transfer Schema.
- [x] **Photo Mode tournament + community jury voting (§133)** — wire to Themis
      `voting` (jury aggregation, ranked-choice + approval-voting mechanisms) +
      Kuanyin `precognition` (content moderation pre-pass). Reciprocal:
      photo-tournament voting profile in `@themis/voting`. Implemented by
      `@v2/photo-mode-tournament-voting-bridge`; reciprocal surface recorded in
      `docs/domains/themis/deep-dive/specifications.md` Section 14.
- [x] **Tekken Bowl + arcade cabinets in Battle Hub (§133)** — reuse Maya
      `@maya/games/*` for the cabinet shell + ad-hoc per-cabinet plugin. No
      reciprocal task. Implemented by `@v2/tekken-bowl-arcade-cabinet-bridge`;
      V2-owned manifest covers Tekken Bowl lane probes, cabinet shells, ad-hoc
      plugins, Fighter Coin / free-play gating, and per-cabinet leaderboards.

#### 1.6.19 Cross-cutting tasks tracked as "known gaps with owners"

These items were the open publisher / architecture decisions that blocked
implementation. They are now closed as decision records so agents can proceed
without guessing. Follow-on implementation work remains unchecked in the
sections that build the feature.

- [x] EOS vs `@oshun/identity` reconciliation. Decision:
      `V2/docs/decisions/identity-reconciliation.md`.
- [x] Per-region SLO tier per delegated service. Decision:
      `V2/docs/decisions/slo-tier-per-service.md`.
- [x] AI-inference cost model for esports scale. Decision:
      `V2/docs/decisions/ai-inference-cost-model.md`.
- [x] Failure-mode degradation matrix (Maat down, Kuanyin down, Iris down,
      etc.). Decision: `V2/docs/decisions/failure-mode-matrix.md`.
- [x] Sovereign-core boundary review for replay container and save format.
      Decision: `V2/docs/decisions/sovereign-core-boundary.md`.
- [x] Neith engine / online stack consumption scope. Decision:
      `V2/docs/decisions/neith-integration-scope.md`.
- [x] `@oshun/identity` entitlement-claim API shape. Decision:
      `V2/docs/decisions/identity-entitlement-claim-api.md`.
- [x] Themis Originality Shields launch-gate policy. Decision:
      `V2/docs/decisions/originality-shields-launch-gate.md`.
- [x] Regional content-rule engine owner. Decision:
      `V2/docs/decisions/regional-content-rules-owner.md`.
- [x] Platform cert-ban truth-table maintenance protocol. Decision:
      `V2/docs/decisions/platform-cert-ban-truth-table.md`; seed data:
      `V2/legal/platform-cert-bans.json`.
- [x] Model Card hosting placement. Decision:
      `V2/docs/decisions/model-card-hosting.md`.
- [x] `@nous/platform` library scope + ship target. Decision:
      `V2/docs/decisions/nous-platform-scope.md`.
- [x] Frame-data spreadsheet → Sophia schema owner. Decision:
      `V2/docs/decisions/frame-data-spreadsheet-schema.md`.

---

## 2. Core Gameplay Framework: GAS, Tags, Attributes, States

### 2.1 Gameplay tag registry

- [x] Author root tag families in `Config/Tags/V2.GameplayTags.ini`:
      `State.Stance.*` (Standing, Crouching, Jumping, Airborne, Knockdown,
      WakeUp, Block, ParryWindow, ArmorActive, Invincible.Strike,
      Invincible.Throw, Invincible.Projectile, Invincible.Full),
      `State.Status.*` (Stun, Crumple, FlyAway, JuggleAirborne, GroundBounce,
      WallBounce, WallSplat, Burn, Freeze, Shock, Bleed, Slow), `Action.*`
      (Light, Medium, Heavy, Special, Super, Throw, Counter, Cancel.Special,
      Cancel.Super, Cancel.X-Ray, Cancel.Drive, Cancel.Heat), `Rules.Mode.*`
      (MK, SF, Tekken, WWE, UFC, SoulCalibur, DefJam), `Style.*`
      (Streetfighting, Wrestling, MartialArts, Kickboxing, Submissions,
      Weapon.Sword, Weapon.Polearm, Weapon.Nunchaku, Weapon.Tonfa, etc.).
      Authored in `V2/ue/Config/Tags/V2.GameplayTags.ini`; config import and
      legacy redirects are enabled in `V2/ue/Config/DefaultEngine.ini`.
- [x] Add tag-coverage test in
      `Source/V2Tests/Private/Gameplay/TagRegistry.spec.cpp` verifying every
      family resolves and that legacy renames are aliased. Covered by
      `V2.Gameplay.TagRegistry`.

### 2.2 Attribute sets

- [x] `UV2_AttrSet_Vitals` in
      `Source/V2Gameplay/Public/Attributes/V2_AttrSet_Vitals.h`: `Health`,
      `MaxHealth`, `RecoverableHealth` (MK chip/regen), `Stun`, `MaxStun`,
      `Stamina`, `MaxStamina` (UFC), `Hype`, `MaxHype` (Def Jam Blazin'),
      `Drive`, `MaxDrive` (SF6), `Heat`, `MaxHeat` (Tekken 8), `Armor`,
      `Resolve`, `Block`, `Stunmeter` (MK 9 X-Ray meter). Implemented by
      canonical `UV2_AttrSet_Vitals` with replication notifies, clamp hooks,
      gameplay-effect clamping, compatibility `UV2AttributeSetVitals`, and
      `V2.Gameplay.Attributes.Vitals` automation coverage.
- [x] `UV2_AttrSet_Movement`: `WalkSpeed`, `DashSpeed`, `RunSpeed`, `JumpZ`,
      `AirControl`, `SideStepSpeed`, `BackdashFrames`, `WakeUpInvulnFrames`.
      Implemented by canonical `UV2_AttrSet_Movement` with replication notifies,
      clamp hooks for scalar movement and frame-count attributes,
      fighter/player-state ownership, and `V2.Gameplay.Attributes.Movement`
      automation coverage.
- [x] `UV2_AttrSet_Combat`: `MeleeDamageMul`, `BlockReductionMul`,
      `ThrowEscapeWindowFrames`, `CounterHitMul`, `JuggleScaling` (per-hit
      damage scaling). Implemented by canonical `UV2_AttrSet_Combat` with
      replication notifies, clamp hooks for multipliers and frame windows,
      compatibility `UV2AttributeSetCombat`, fighter/player-state ownership, and
      `V2.Gameplay.Attributes.Combat` automation coverage.
- [x] `UV2_AttrSet_Wrestling` (mode-gated): `PinKickoutMeter`,
      `SubmissionMeter`, `LimbDamage[Arm L, Arm R, Leg L, Leg R, Head, Torso]`,
      `Momentum`, `SignatureCharge`, `FinisherCharge`, `Resilience`. Implemented
      by canonical `UV2_AttrSet_Wrestling`, WWE rules-mode gate, replicated
      per-limb GAS attributes, meter/charge clamp hooks, fighter/player-state
      ownership, and `V2.Gameplay.Attributes.Wrestling` automation coverage.
- [x] `UV2_AttrSet_MMA` (mode-gated): per-limb stamina, takedown skill,
      submission skill, takedown defense, sub defense, transition skill,
      ground-and-pound rating, clinch rating. Implemented by canonical
      `UV2_AttrSet_MMA`, UFC rules-mode gate, replicated per-limb stamina
      attributes, rating clamp hooks, fighter/player-state ownership, and
      `V2.Gameplay.Attributes.MMA` automation coverage.
- [x] `UV2_AttrSet_Weapon` (mode-gated): `WeaponDurability`,
      `GuardImpactWindow`, `SoulCharge`, `RingOutResistance`. Implemented by
      canonical `UV2_AttrSet_Weapon`, SoulCalibur rules-mode gate, replicated
      durability/window/charge/resistance attributes, clamp hooks,
      fighter/player-state ownership, and `V2.Gameplay.Attributes.Weapon`
      automation coverage.
- [x] Author MMC and execution calc classes for each gameplay-effect family:
      strike damage, throw damage, chip damage, stun delta, drive cost, heat
      gain, hype gain, limb damage, stamina drain, takedown success. Implemented
      by `Calculations/V2_GameplayEffectCalculations.*` with SetByCaller-backed
      MMC classes, execution calculation classes for each family, targeted
      output attributes, and `V2.Gameplay.Effects.Calculations` automation
      coverage.
- [x] Replicate attributes via Iris fast-array where applicable; gate
      replication to spectators only on hidden info (e.g., opponent stamina is
      hidden from player in UFC sim mode). Implemented by
      `UV2AttributeReplicationComponent` with `FFastArraySerializer` /
      `FFastArraySerializerItem` snapshots, Iris-compatible delta serialization,
      owner/opponent/spectator visibility policies, UFC stamina hidden-info
      gating coverage, and fighter player-state ownership.

### 2.3 Ability classes

- [x] Base `UV2_GameplayAbility` extending `UGameplayAbility` with: input buffer
      integration hook, frame-data binding (links to `DA_Move_*`), cancel-window
      broadcast, ability-tag filter rules, network mode switch, cosmetic-only
      stripping for replays. Implemented by canonical `UV2_GameplayAbility` with
      a compatibility `UV2GameplayAbility` subclass, input-buffer hook,
      `DA_Move_*` frame-data binding, cancel-window delegates, tag-filter rules,
      network-mode switch, replay cosmetic stripping, and `V2.Gameplay.Module` /
      `check-v2-gameplay-ability-base.py` coverage.
- [x] Subclasses: `UV2_Ability_Strike`, `UV2_Ability_Throw`,
      `UV2_Ability_GroundedSpecial`, `UV2_Ability_AirSpecial`,
      `UV2_Ability_Projectile`, `UV2_Ability_Super` (variants for SF Drive
      Impact, Tekken Rage Art, MK X-Ray / Fatal Blow, SC Critical Edge, DJ
      Blazin'), `UV2_Ability_Grapple_Clinch`, `UV2_Ability_Grapple_Takedown`,
      `UV2_Ability_Grapple_Pin`, `UV2_Ability_Grapple_Submission`,
      `UV2_Ability_Cinematic_Finisher`. Implemented by `UV2_Ability_TypedBase`,
      concrete strike / throw / grounded-special / air-special / projectile /
      super variants, named SF / Tekken / MK / SC / DJ super variants, grapple
      variants, cinematic finisher descriptors, and `V2.Gameplay.Module` /
      `check-v2-gameplay-ability-subclasses.py` coverage.
- [x] Add unit tests asserting ability tag application is symmetric on
      ActivateAbility / EndAbility and that cancel windows broadcast frame-
      accurate state via `OnCancelWindowOpen` / `OnCancelWindowClose`.
      Implemented by `V2.Gameplay.Abilities.Lifecycle` automation coverage with
      a generated `UV2AbilityLifecycleTestReceiver`, direct ActivateAbility /
      EndAbility activation-owned tag assertions, dynamic `OnCancelWindowOpen` /
      `OnCancelWindowClose` binding, and frame / tag broadcast checks.

### 2.4 Match-state machine

- [x] State machine in `Source/V2Gameplay/Private/Match/V2_MatchState.cpp`:
      `Intro` → `RoundStart` → `Live` → `RoundEnd` → (`RoundStart` | `MatchEnd`
      | `FinisherWindow` | `PostMatch`). Implemented by canonical
      `FV2_MatchState` transition graph, `EV2MatchPhase::Live` / `MatchEnd` /
      `FinisherWindow` / `PostMatch` phases, component wrappers,
      rejected-transition recording, and `V2.Gameplay.Match.StateMachine`
      automation coverage.
- [x] Per-mode injectable state nodes: MK FinisherWindow (Finish Him! prompt),
      WWE Pin / Submission state, UFC RoundEnd (judges' scorecard interlude), SC
      RingOut termination, DJ environment-finisher prompt, SF KO replay, Tekken
      Rage activation lockout state. Implemented by `FV2MatchModeStateNode`,
      default mode-node registry, component-level node injection, active-node
      snapshot state, MK / WWE / UFC / SC / DJ / SF / Tekken node descriptors,
      and `V2.Gameplay.Match.StateMachine` coverage.
- [x] Replicate match state via dedicated channel; rollback-safe in §7.
      Implemented by `FV2MatchStateReplicationPacket` on channel
      `V2.Match.State`, replicated component channel state, deterministic
      `FV2MatchStateRollbackSnapshot` hashing, rollback apply/restore helpers,
      and `V2.Gameplay.Match.StateMachine` coverage.

---

## 3. Fighter Character Framework

### 3.1 Base classes

- [x] `AV2_FighterCharacter` extending `ACharacter` with Mover component
      override for fixed-step movement; replicate movement via
      `UV2_NetworkPredictionComponent` (rollback) or
      `UCharacterMovementComponent` (client-server) depending on owning mode.
      Implemented by the canonical `AV2_FighterCharacter`, legacy
      `AV2FighterCharacter` compatibility subclass,
      `UV2_FixedStepMoverComponent` fixed-step Mover override, replicated
      `UV2_NetworkPredictionComponent` rollback snapshots on
      `V2.Movement.Rollback`, client-server `UCharacterMovementComponent`
      fallback, and `V2.Gameplay.FighterCharacter.Movement` coverage.
- [x] `AV2_FighterPlayerState` carrying GAS ASC, current `DA_Fighter`, current
      `DA_Moveset`, equipped cosmetics, alive limb-damage map (MMA / wrestling
      modes), Hype/Drive/Heat/Stun current values for HUD binding. Implemented
      by canonical `AV2_FighterPlayerState`, legacy `AV2FighterPlayerState`
      compatibility subclass, replicated fighter/moveset soft asset paths,
      cosmetic equipment slots, replicated limb-damage entries with a live
      lookup map, HUD meter snapshot accessors, attribute-replication publishing
      for Hype/Drive/Heat/Stun, and
      `V2.Gameplay.FighterPlayerState.DataContract` coverage.
- [x] `AV2_FighterAIController` with behavior-tree selector per mode
      (arcade-CPU, training-dummy, MyCAREER rival, story-boss, tower-modifier
      bot). Implemented by canonical `AV2_FighterAIController`, legacy
      `AV2FighterAIController` compatibility subclass, AIModule-backed
      behavior-tree and blackboard components, default bindings for Arcade CPU,
      Training Dummy, MyCAREER Rival, Story Boss, and Tower Modifier Bot,
      behavior-mode replication, soft behavior-tree asset selection, and
      `V2.Gameplay.FighterAIController.BehaviorSelector` coverage.
- [x] **Adaptive AI** (`UV2_AdaptiveAIComponent`) attached to CPU controllers:
      observes player input habits over rolling N matches (move pick rate,
      response-to-pressure tendencies, wake-up choice distribution, throw-tech
      rate), updates a per-player tendency profile saved alongside the player
      profile (§47), and biases AI decisions to counter the dominant tendency.
      Modeled after MK11's Kollector AI and MK1's AI Fighters: the AI learns to
      whiff-punish your habits, condition you with delayed strings, and bait the
      wake-up choice you favor. Implemented by runtime `UV2_AdaptiveAIComponent`
      tendency samples/profiles, rolling-match sample trimming, player-profile
      save keys, counter-bias weights for whiff-punish/delayed-string/wake-up
      bait/throw-pressure decisions, default attachment on
      `AV2_FighterAIController`, automation coverage in `AdaptiveAI.Plugin` and
      fighter AI specs, and `check-v2-adaptive-ai-component.py` CI coverage.
- [x] Adaptive AI difficulty ladder: a CPU bot exposes a `Skill` curve (0-100)
      that maps to reaction frames, anti-air consistency, throw-tech rate,
      whiff-punish accuracy, combo-execution rate, defense-option-selection
      depth. The same bot can sandbag at low Skill or play frame-perfect at high
      Skill — used for difficulty levels in Arcade (§19), Tower (§21), and
      MyCAREER rivals (§28). Implemented by `FV2AdaptiveAISkillTuning`,
      `UV2_AdaptiveAIComponent` skill clamping/curve rebuilds, skill-scaled
      decision-bias weights, CPU-mode default skill bindings for Arcade,
      Training Dummy, MyCAREER Rival, Story Boss, and Tower Modifier bots,
      controller `SetAISkill`/`GetAdaptiveAISkillTuning` accessors, automation
      coverage, and `check-v2-adaptive-ai-difficulty-ladder.py` CI coverage.
- [x] AI behavior reference profile: ship at least one named "personality" per
      fighter (e.g., "Aggressive", "Defensive", "Zoner", "Grappler") so AI plays
      in-character. Implemented by `FV2AdaptiveAIBehaviorReferenceProfile`,
      seeded shipped profiles for Asha/Aggressive, Rook/Defensive, Kai/Zoner,
      and Mara/Grappler, `UV2_AdaptiveAIComponent` profile lookup/application
      APIs, personality-scaled decision-bias weights, controller profile
      proxies, automation coverage, and
      `check-v2-ai-behavior-reference-profile.py` CI coverage.
- [x] `AV2_FighterCameraManager` injecting per-mode camera rig (locked-2D for
      SF/MK rulesets, 3D follow with auto-face for Tekken/SC/UFC/WWE, free-roam
      for World Tour/Tekken Force/Def Jam street). Implemented by
      `AV2_FighterCameraManager`, `FV2FighterCameraRig` rig descriptors, default
      locked-2D, 3D auto-face, and free-roam rig table,
      `AV2CorePlayerController` camera-manager injection, core automation
      coverage, and `check-v2-fighter-camera-manager.py` CI coverage.

### 3.2 Data asset spine

- [x] `UDA_Fighter` (Primary Data Asset) fields: ID, displayName, alias,
      stable-id (GUID), default styles[], allowed rulesets[], skeleton ref, mesh
      ref, idle pose, intro montage, victory montage, defeat montage, voice bank
      ref, theme music ref, signature move set ref, finishers[], preferred
      camera rig, default loadout, weight-class (UFC), faction (WWE / Def Jam),
      height/reach (UFC), stat block. Implemented by `UV2FighterData`
      (`DA_Fighter` primary asset type), identity/gameplay/asset/media/loadout/
      combat-profile fields, stat/loadout/finisher validation helpers, focused
      automation coverage, and `check-v2-fighter-data-asset.py` CI coverage.
- [x] `UDA_Moveset` fields: ID, owning fighter ID (optional — generic movesets
      allowed), style tag, command list (sequence of `DA_Move` refs keyed by
      input motion), stance entries / exits, taunt moves. Implemented by
      `UV2MovesetData` (`DA_Moveset` primary asset type), command entries keyed
      by input motion and `DA_Move` soft references, stance entry/exit and taunt
      move route structs, generic-vs-roster ownership validation,
      referenced-move indexing helpers, automation coverage, `DA_Moveset_` asset
      naming support, and `check-v2-moveset-data-asset.py` CI coverage.
- [x] `UDA_Move` fields: ID, animation montage, startup frames, active frames,
      recovery frames, hit advantage, block advantage, damage, stun delta,
      drive/heat/hype/stamina cost, cancelable-into tags[], cancel-window frame
      range, hitbox sequences (array of hitbox keyframes), hurtbox override
      (optional), armor frames (optional), invincibility tags
      (strike/throw/projectile/full + frame range), required state tags,
      forbidden state tags, sound bank ref, vfx ref, hit-reaction tag.
      Implemented by `UV2MoveFrameData` as the `DA_Move` primary asset type,
      full frame-data, impact, cost, cancel-window, hitbox/hurtbox, armor,
      invincibility, state-filter, audio, VFX, and hit-reaction fields,
      validation helpers, focused automation coverage, and
      `check-v2-move-data-asset.py` CI coverage.
- [x] `UDA_Finisher` (MK/SC/DefJam): trigger condition (FinisherWindow + input +
      range), cinematic sequence ref, gore tier (none / mild / extreme),
      mode-eligibility (Fatality, Brutality, Friendship, Mercy, Stage Fatality,
      Critical Finish, Environmental Finisher). Implemented by `UV2FinisherData`
      (`DA_Finisher` primary asset type), trigger-condition validation for
      FinisherWindow input/range/state gates, cinematic sequence soft reference,
      Off/Mild/Extreme gore-tier validation, MK/SoulCalibur/DefJam ruleset
      eligibility, finisher mode bitmask helpers, focused automation coverage,
      `DA_Finisher_` asset naming support, and `check-v2-finisher-data-asset.py`
      CI coverage.
- [x] `UDA_Style` (Def Jam): style tag, skill tree definition, signature taunts,
      Blazin' move ref, base attributes delta, mixable-with tags[]. Implemented
      by `UV2StyleData` (`DA_Style` primary asset type), Def Jam style tag
      validation, skill-tree node/prerequisite validation, signature taunt refs,
      Blazin move soft reference, base attribute deltas, mixable style tags,
      focused automation coverage, `DA_Style_` asset naming support, and
      `check-v2-style-data-asset.py` CI coverage.
- [x] Data-table cross-reference test: every `DA_Move` referenced from a
      `DA_Moveset` exists, every animation referenced exists, every hitbox
      sequence is non-empty. Implemented by `FV2MoveCatalogMoveRow` and
      `FV2MoveCatalogMovesetRow` DataTable row structs, the
      `UV2MoveCatalogCrossReferenceLibrary` validator,
      `Content/V2/Moves/DT_V2_MoveCatalog.json` source data, automation coverage
      for missing move / animation / hitbox failures, and
      `check-v2-move-catalog-cross-reference.py` CI coverage.

### 3.3 Customization stack

- [x] Skeletal-mesh modular slots: Head, Hair, Face, Torso, Arms, Legs, Hands,
      Feet, Weapon Primary, Weapon Secondary, Cape/Coat, Mask, Tattoos (decal
      layer), Scars (decal layer), Accessories[]. Implemented by
      `EV2FighterModularSlot`, `FV2ModularSkeletalMeshSlotDefinition`,
      `UV2FighterCustomizationComponent`, default slot definitions for every
      required body/weapon/decal/accessory slot, replicated
      `FV2EquippedCosmeticSlot` metadata for skeletal mesh and decal material
      paths, deterministic accessory `InstanceId` upsert semantics, player-state
      slot queries, fighter-character customization-component ownership, focused
      automation coverage, and `check-v2-modular-cosmetic-slots.py` CI coverage.
- [x] Material-instance parameter set per slot: skin tone, hair color, eye
      color, fabric color [primary/secondary/accent], metallic, dirt level, wear
      level. Implemented by `FV2SlotMaterialParameterSet`, normalized skin,
      hair, eye, fabric primary/secondary/accent color fields,
      metallic/dirt/wear scalar fields, material-instance application parameter
      names, default parameter sets for every modular slot, clamped authoring
      semantics, instance-specific accessory material overrides,
      equipped-cosmetic material propagation through
      `UV2FighterCustomizationComponent`, focused automation coverage, and
      `check-v2-slot-material-parameters.py` CI coverage.
- [x] Morph-target rig per face (50 FACS-ish targets) and per body (height,
      weight, muscle, definition, bust, hips, shoulders, calves, forearms) —
      wired to CAW sliders in §37. Implemented by `FV2MorphTargetBinding`,
      `FV2CAWSliderValue`, `FV2ResolvedMorphTargetWeight`, 50 default
      `MT_Face_*` FACS-style bindings, required `MT_Body_*`
      height/weight/muscle/ definition/bust/hips/shoulders/calves/forearms
      bindings, `CAW.Face.*` and `CAW.Body.*` slider ids, clamped slider value
      storage, morph-weight resolution and
      `USkeletalMeshComponent::SetMorphTarget` application in
      `UV2FighterCustomizationComponent`, focused automation coverage, and
      `check-v2-morph-target-rig.py` CI coverage.
- [x] Persistence: serialize loadout into `FV2_FighterLoadout` struct stored
      under save game (§47) and shareable as a code/QR. Implemented by
      `FV2_FighterLoadout` plus cosmetic slot, material parameter, and morph
      slider save structs, `UV2SaveGame::UpsertFighterLoadout` slot persistence,
      validation of duplicate slot/material/slider keys, Base64 JSON share-code
      export/import, `V2LOADOUT:` QR payload import/export helpers, subsystem
      and Blueprint-library accessors, focused automation coverage, and
      `check-v2-fighter-loadout-persistence.py` CI coverage.

---

## 4. Animation System: AnimBP, Motion Matching, Mover, IK

### 4.1 Skeleton & retarget

- [x] Canonical UE5 mannequin-compatible skeleton `SK_V2_Fighter_Base` plus
      per-archetype variants (Heavyweight, Welterweight, Female, Monster, Child
      — for MK-style guest characters). Implemented by
      `EV2FighterSkeletonArchetype`, `FV2FighterSkeletonDefinition`, default UE5
      mannequin-required bone contracts, `SK_V2_Fighter_Base` plus
      Heavyweight/Welterweight/Female/Monster/Child skeleton definitions,
      `/Game/V2/Animation/Skeletons` soft object paths, archetype scale
      metadata, `UV2AnimationConfigAsset` validation/accessors,
      source-controlled `SK_V2_Fighter_SkeletonCatalog.json`, focused automation
      coverage, and `check-v2-fighter-skeleton-catalog.py` CI coverage.
- [x] IK Rig + IK Retargeter from `SK_V2_Fighter_Base` to each archetype;
      automation test that round-trips a reference idle/walk/run cycle and
      asserts joint deltas within 1cm. Implemented by extended
      `FV2IKRetargetProfile` base-to-archetype source/target metadata,
      source/target IK Rig and IK Retargeter soft paths, idle/walk/run
      `FV2IKRetargetRoundTripReference` clips, required joint sampling metadata,
      1cm `MaxJointDeltaCm` enforcement through `RetargetJointDeltaPasses`,
      `UV2AnimationConfigAsset` validation/accessors, source-controlled
      `IK_V2_Fighter_RetargetCatalog.json`, focused automation coverage, and
      `check-v2-ik-retargeter-catalog.py` CI coverage.

### 4.2 AnimBP architecture

- [x] `ABP_V2_Fighter_Base` with the following state layers (in order): 1.
      Locomotion state machine (idle / walk / run / dash / backdash / airborne /
      knockdown / wakeup). 2. Upper-body action layer (driven by GAS montage
      slots; "FullBody", "UpperBody", "LowerBody", "Hands" slots). 3.
      Hit-reaction layer (responds to last hit-reaction tag with one of: small
      jab, medium, heavy, sweep, launcher, juggle, crumple, fly-away, wallsplat,
      knockdown). 4. Stance layer (per current stance tag; supports Tekken
      stance switches, Soul Calibur weapon stances). 5. Foot IK + look-at IK +
      opponent-face IK (auto-rotates pelvis toward opponent for 2D-mode
      rulesets, no-op for free 3D rulesets). 6. Additive emotes / breathing /
      damage tics. Implemented by `EV2AnimBPStateLayer`,
      `EV2AnimBPLocomotionState`, `EV2AnimBPHitReaction`, and
      `FV2AnimBPStateLayerDefinition` contracts, default `ABP_V2_Fighter_Base`
      layer definitions in strict evaluation order, locomotion state coverage,
      GAS montage slot coverage, last-hit-reaction tag coverage, Tekken and Soul
      Calibur stance support, 2D/free-3D IK semantics, additive
      emote/breathing/damage-tic channels, `UV2AnimationConfigAsset`
      validation/accessors, source-controlled
      `ABP_V2_Fighter_Base_LayerContract.json`, focused automation coverage, and
      `check-v2-fighter-base-animbp.py` CI coverage.
- [x] Author Chooser Tables for hit reactions, blocking, parrying, wake-ups —
      one row per (hit-reaction tag) × (stance) × (damage-tier). Implemented by
      `EV2AnimChooserTableKind`, `FV2AnimChooserTableDefinition`, and
      `FV2AnimChooserTableRow`, generated hit reaction/blocking/parrying/wake-up
      Chooser Table definitions, full `State.HitReaction.*` × `State.Stance.*` ×
      damage-tier matrix generation with 150 rows per table, row lookup helpers,
      `UV2AnimationConfigAsset` validation/accessors, source-controlled
      `CHT_V2_Fighter_ResponseChooserCatalog.json`, focused automation coverage,
      and `check-v2-anim-chooser-tables.py` CI coverage.
- [x] Per-mode AnimBP overlay: SF (lock pelvis-yaw to opponent, no sidestep
      blend), Tekken (sidestep blend, 8-way, no pelvis lock), WWE (ragdoll blend
      on knockdown, climb/turnbuckle layer), UFC (full-body grapple layer,
      ground-position state machine), SC (8-way weapon layer), MK (locked 2D +
      X-Ray cinematic insert point), Def Jam (environment-grab layer).
      Implemented by extended `FV2AnimOverlayConfig` per-mode flags for 2D plane
      locks, 8-way sidestep blends, WWE turnbuckle/ragdoll/climb layers, UFC
      grapple/ground-position layers, Soul Calibur weapon layers, MK X-Ray
      cinematic inserts, Def Jam environment grabs, overlay AnimBP soft paths,
      source-controlled `ABP_V2_Fighter_ModeOverlayCatalog.json`, focused
      automation coverage, and `check-v2-mode-animbp-overlays.py` CI coverage.

### 4.3 Motion Matching for free-3D modes

- [x] Build motion-matching database for World Tour, Tekken Force, Devil Within,
      Def Jam street roaming, MyCAREER backstage, SC Chronicles overworld.
      Implemented by `EV2MotionMatchingDatabaseMode` and extended
      `FV2MotionMatchingConfig` database ids, Pose Search soft paths, traversal
      mode mapping, required idle/walk/run/start/stop/turn/strafe clip tags,
      default database builders for all six modes, `UV2AnimationConfigAsset`
      validation/accessors, source-controlled
      `MM_V2_Free3D_DatabaseCatalog.json`, focused automation coverage, and
      `check-v2-motion-matching-databases.py` CI coverage.
- [x] Pose-history feature for clean transitions; foot-phase feature for planted
      contact. Implemented by `FV2MotionMatchingConfig` pose-history
      duration/sample count/channel fields, enabled pose-history defaults for
      clean transitions, foot-phase channel metadata, required planted-contact
      validation, required `foot_l`/`ball_l`/`foot_r`/`ball_r` contact bones,
      source-controlled `MM_V2_PoseHistoryFootPhaseContract.json`, focused
      automation coverage, and `check-v2-motion-matching-pose-foot-phase.py` CI
      coverage.
- [x] Author trajectory model from input/AI desire; gate sidestep, dodge, sprint
      into the motion matcher. Implemented by `FV2MotionMatchingTrajectoryModel`
      with player-input and AI desire channels, velocity/facing/look-ahead
      weights, required `Motion.Gate.Sidestep`, `Motion.Gate.Dodge`, and
      `Motion.Gate.Sprint` gates, integration into `FV2MotionMatchingConfig`
      validation/defaults, source-controlled
      `MM_V2_TrajectoryModelContract.json`, focused automation coverage, and
      `check-v2-motion-matching-trajectory.py` CI coverage.

### 4.4 Mover 2.0 bindings

- [x] Adopt Mover for open-world / brawler / story modes; fall back to Character
      Movement Component (replicated) only for cert-blocking rollback issues.
      Implemented by `EV2MoverAdoptionMode` and `FV2MoverAdoptionPolicy`,
      default open-world/brawler/story policies, required Mover-by-default
      semantics, replicated Character Movement fallback only when a
      cert-blocking rollback issue is present, motion-matching mode coverage,
      `UV2AnimationConfigAsset` validation/accessors, source-controlled
      `Mover_V2_AdoptionPolicy.json`, focused automation coverage, and
      `check-v2-mover-adoption-policy.py` CI coverage.
- [x] Custom Mover modes: "Match2D" (locked depth, pelvis face lock),
      "Match3DRing" (free yaw, bounded by ring volume), "Match3DCage" (cage
      collision + wall ride), "Match3DStreet" (env interaction + clinch against
      walls), "ExplorationFree" (open-world default). Implemented by extended
      `FV2MoverModeBinding` flags for ring bounds, cage collision, wall ride,
      street wall-clinch, environmental interaction, and open-world defaults,
      stricter per-mode validation in `IsValidBinding`, default mode builders,
      source-controlled `Mover_V2_CustomModes.json`, focused automation
      coverage, and `check-v2-custom-mover-modes.py` CI coverage.

### 4.5 Cloth, hair, soft-body

- [x] Chaos Cloth presets per costume slot; per-costume LOD chain (LOD0 sim,
      LOD1 baked vertex anim, LOD2 disabled). Implemented by
      `EV2CostumeLODPhysicsMode`, `FV2CostumeLODPhysicsState`, and
      `FV2ChaosClothPreset`, default Chaos Cloth presets for
      Torso/Arms/Legs/CapeCoat costume slots, required LOD0 sim / LOD1 baked
      vertex animation / LOD2 disabled validation, `UV2AnimationConfigAsset`
      validation/accessors, source-controlled
      `ChaosCloth_V2_CostumePresets.json`, focused automation coverage, and
      `check-v2-chaos-cloth-presets.py` CI coverage.
- [x] Hair groom for principal characters; card hair for crowd. Implemented by
      enabling `HairStrands` and UE 5.5's `AlembicHairImporter`,
      `EV2HairRenderingMode` and `FV2HairRenderingProfile`, principal-character
      groom profile defaults, crowd card-hair profile defaults,
      `UV2AnimationConfigAsset` validation/accessors, source-controlled
      `Hair_V2_RenderingProfiles.json`, focused automation coverage, and
      `check-v2-hair-rendering-profiles.py` CI coverage.
- [x] Chaos Flesh (limited) for MK gore effects on the X-Ray skeleton and
      severed-limb / split-in-half states. Implemented by
      `EV2ChaosFleshGoreState` and `FV2ChaosFleshGorePreset`, MK-only
      cinematic-gated X-Ray skeleton / severed-limb / split-in-half presets,
      strict limited-runtime validation, `UV2AnimationConfigAsset`
      validation/accessors, source-controlled
      `ChaosFlesh_V2_MKGorePresets.json`, focused automation coverage, and
      `check-v2-chaos-flesh-gore.py` CI coverage.

### 4.6 Facial animation

- [x] MetaHuman Animator pipeline for principal characters; Live Link Face
      capture for performance shoots. Implemented by `EV2FacialCaptureProvider`
      and `FV2FacialCapturePipelineProfile`, principal-character MetaHuman
      Animator profile defaults, offline Live Link Face performance-shoot take
      ingestion, runtime Live Link plugin avoidance, consent/rollback-safe
      validation, `UV2AnimationConfigAsset` validation/accessors,
      source-controlled `Facial_V2_CapturePipeline.json`, focused automation
      coverage, and `check-v2-facial-capture-pipeline.py` CI coverage.
- [x] Audio-driven phoneme mapping for ad-lib voice lines (story barks).
      Implemented by `FV2PhonemeToVisemeMapping` and
      `FV2AudioDrivenPhonemeMappingProfile`, ARPAbet story-bark phoneme coverage
      for ad-lib voice lines, Psyche avatar-lipsync provider binding,
      gameplay-inert/rollback-safe validation, `UV2AnimationConfigAsset`
      validation/accessors, source-controlled
      `Facial_V2_StoryBarkPhonemeMap.json`, focused automation coverage, and
      `check-v2-story-bark-phoneme-map.py` CI coverage.
- [x] Emotion-blend additive layers (Pain, Anger, Fear, Confidence, Taunt, KO)
      wired to gameplay tag changes. Implemented by `EV2FacialEmotionBlend` and
      `FV2EmotionBlendAdditiveLayer`, `State.Emotion.*` gameplay tags,
      tag-driven additive facial layer defaults for Pain/Anger/Fear/Confidence/
      Taunt/KO, phoneme-curve stacking validation, `UV2AnimationConfigAsset`
      validation/accessors, source-controlled
      `Facial_V2_EmotionAdditiveLayers.json`, focused automation coverage, and
      `check-v2-emotion-additive-layers.py` CI coverage.

---

## 5. Input System & Motion Inputs

### 5.1 Enhanced Input mappings

- [x] Define Input Actions: `IA_DirectionalAxis`, `IA_LightAttack`,
      `IA_MediumAttack`, `IA_HeavyAttack`, `IA_SpecialAttack`, `IA_KickLight`,
      `IA_KickMedium`, `IA_KickHeavy` (separate punch/kick maps for SF/Tekken),
      `IA_Grapple`, `IA_Block`, `IA_Sidestep`, `IA_Tag`, `IA_Taunt`,
      `IA_DriveImpact`, `IA_DriveParry`, `IA_FocusAttack`, `IA_HeatBurst`,
      `IA_RageArt`, `IA_XRay`, `IA_Blazin`, `IA_GuardImpact`, `IA_PinPress`,
      `IA_SubmissionGrid`, `IA_TakedownAttempt`, `IA_Reversal`, `IA_RunWWE`,
      `IA_ClimbTurnbuckle`, `IA_WeaponPickup`, `IA_StageInteraction`.
      Implemented by `EV2InputActionId` / `EV2InputActionFamily`,
      self-validating `FV2InputActionSpec` defaults for names, value types, and
      rebindable mapping slots, a source-controlled
      `InputActions_V2_ActionCatalog.json`, punch/kick separation automation,
      ruleset action coverage, and `check-v2-input-actions.py` CI validation.
- [x] Per-platform Input Mapping Contexts: PC (KB+M / gamepad), PS5 (DualSense
      with adaptive triggers + haptics), XSX, Switch2, mobile-touch fallback.
      Implemented by the 6-platform x 4-control-scheme
      `BuildDefaultMappingContexts()` matrix, self-validating
      `FV2InputMappingContextSpec` defaults for context names, priorities,
      haptics/adaptive trigger flags, and touch fallback, source-controlled
      `InputMappingContexts_V2_PlatformCatalog.json`, expanded automation
      coverage for PC, PS5, XSX, Switch2, and mobile, and
      `check-v2-input-mapping-contexts.py` CI validation.
- [x] Rebinding UI in §46 backed by per-IMC slot table. Implemented by
      `FV2InputRebindSlot` / `FV2InputRebindSlotTable`, generated 24-context
      per-IMC slot tables with conflict-free primary/secondary binding tokens,
      `UV2InputConfigAsset` validation/accessors, the CommonUI-facing
      `FV2InputRebindingScreenContract` for `Settings.Controls`,
      source-controlled `InputRebinding_V2_ScreenContract.json`, expanded
      input/UI automation coverage, and `check-v2-input-rebinding-ui.py` CI
      validation.

### 5.2 Motion-input parser

- [x] Implement `FV2_MotionParser` in `Source/V2Input/Private/MotionParser.cpp`
      recognizing QCF, QCB, DP, RDP, HCF, HCB, 360, 720, charge-back (1s
      threshold), charge-down, negative-edge, double-tap, plink, just-frame
      (1-frame perfect input). Implemented by deterministic `FV2_MotionParser`
      recognition paths for directional sequences,
      full-circle/double-full-circle, charge, negative-edge, neutral-reset
      double-tap, plink, and exact-frame just-frame inputs, source-controlled
      `InputMotionParser_V2_RecognitionContract.json`, expanded automation
      coverage across every listed motion, and `check-v2-motion-parser.py` CI
      validation.
- [x] Buffer window configurable per fighter / per move (default 6 frames, tight
      3, lenient 9). Implemented by `EV2InputBufferWindowPreset`,
      `FV2InputBufferWindowOverride`, `FV2InputParserConfig` override resolution
      with fighter/move specificity, default 6/tight 3/lenient 9 presets plus
      custom frame support, source-controlled
      `InputBufferWindows_V2_OverrideProfile.json`, automation coverage for
      per-move, fighter-level, move-only, custom, and default fallback cases,
      and `check-v2-input-buffer-windows.py` CI validation.
- [x] Input replay encoder writing a deterministic byte stream per match for §48
      replays. Implemented by `FV2InputReplayMatchStream` metadata and
      per-player streams, `FV2InputReplayEncoder::EncodeMatchStream` /
      `DecodeMatchStream` with `V2RM` magic, little-endian deterministic field
      order, canonical sorting by player slot and frame number, replay-marked
      decoded samples, Blueprint encode/decode wrappers,
      `InputReplayEncoder_V2_MatchStreamContract.json`, automation coverage for
      two-player match round-trip and ordering determinism, and
      `check-v2-input-replay-encoder.py` CI validation.
- [x] Test: golden replay of a Ryu shoryuken combo asserts identical hit-by-hit
      frame outcomes across 1000 plays. Implemented by
      `FV2GoldenReplayHitOutcome`, 1000-run hit-outcome stability comparison in
      `UV2AutomationHarnessLibrary`, a source-controlled
      `RyuShoryukenCombo_V2_GoldenReplay.json` manifest, automation coverage for
      the passing 1000-play run and a deliberate divergent-hit failure, and
      `check-v2-ryu-shoryuken-golden-replay.py` CI validation.

### 5.3 Input feel

- [x] Special-cancel buffer (cancel a normal into a special during recovery
      frames where the move's `CancelInto.Special` tag is allowed). Implemented
      by `FV2SpecialCancelBufferRequest` / `FV2SpecialCancelBufferResult`,
      recovery-frame gating on `UV2MoveFrameData`, buffered
      normal-to-`Action.Special` resolution through `Action.Cancel.Special`,
      source-controlled `SpecialCancelBuffer_V2_Contract.json`, automation for
      accepted recovery cancels plus active-frame, stale-buffer, outside-window,
      and non-special-target rejections, and `check-v2-special-cancel-buffer.py`
      CI validation.
- [x] Super-cancel buffer (cancel a special into a super within the move's
      `CancelInto.Super` window). Implemented by `FV2SuperCancelBufferRequest` /
      `FV2SuperCancelBufferResult`, special-source to `Action.Super` target
      validation through `Action.Cancel.Super`, source-controlled
      `SuperCancelBuffer_V2_Contract.json`, automation for accepted windowed
      super cancels plus outside-window, normal-source, stale-buffer, and
      non-super-target rejections, and `check-v2-super-cancel-buffer.py` CI
      validation.
- [x] X-Ray / Heat / Drive cancel buffers per the mode's rules. Implemented by
      `EV2ModeCancelBufferKind`, `FV2ModeCancelBufferRequest` /
      `FV2ModeCancelBufferResult`, ruleset-gated cancel resolution for MK
      `Action.Cancel.X-Ray`, Tekken `Action.Cancel.Heat`, and SF
      `Action.Cancel.Drive`, source-controlled
      `ModeCancelBuffers_V2_Contract.json`, automation for all three accepted
      mode cancels plus wrong-ruleset, outside-window, and stale-buffer
      rejections, and `check-v2-mode-cancel-buffers.py` CI validation.
- [x] WWE / UFC contextual input (single button → context-aware grapple based on
      stance, position, momentum). Implemented by
      `FV2ContextualGrappleInputRequest` / `FV2ContextualGrappleInputResult`,
      WWE and UFC ruleset/stance/position/momentum resolution in
      `UV2InputBlueprintLibrary::ResolveContextualGrappleInput`,
      source-controlled `ContextualGrapple_V2_Rules.json`, automation for WWE
      power, ropes, grounded commands, UFC cage, grounded-top, momentum takedown
      commands, and non-grapple rejection, plus
      `check-v2-contextual-grapple-input.py` CI validation.
- [x] Tutorial overlay generator that visualizes the buffer ring in §19.
      Implemented by `FV2InputBufferTutorialOverlaySpec` /
      `FV2InputBufferOverlayCell`, oldest-to-newest six-frame ring generation
      through `UV2UIBlueprintLibrary::BuildInputBufferTutorialOverlay`, a
      gameplay-inert CommonUI HUD widget `UV2InputBufferTutorialOverlay`,
      source-controlled `InputBufferTutorialOverlay_V2_Contract.json`,
      automation coverage for direction/button glyphs, pressed/held/released
      cell states, HUD entry wiring, and widget configuration, plus
      `check-v2-input-buffer-tutorial-overlay.py` CI validation.

### 5.4 Modern / Classic / Dynamic control schemes

- [x] **Classic Controls** — full motion-input fidelity, no input simplification
      (SF6 Classic, MK pro, Tekken default). Required for ranked unless the
      ruleset explicitly permits Modern. Implemented by
      `FV2ClassicControlSchemePolicy`, `FV2RankedControlSchemeRequest` /
      `FV2RankedControlSchemeEligibilityResult`, ranked eligibility resolution
      through
      `UV2InputBlueprintLibrary::EvaluateRankedControlSchemeEligibility`,
      full-motion policy validation for every implemented motion parser input,
      source-controlled `ClassicControls_V2_Policy.json`, automation coverage
      for full-damage Classic, no-simplification rejection, Classic-required
      ranked gating, and Modern ruleset opt-in, plus
      `check-v2-classic-controls.py` CI validation.
- [x] **Modern Controls** — single-button specials (assist), simplified motion
      strings via direction + special button (e.g., DOWN + SP = QCF special),
      auto-combos on light-button mash, scaled damage (80% of Classic).
      Ranked-eligible per SF6 design (with damage scaling preserving balance).
      Implemented by `FV2ModernControlSchemePolicy`, `FV2ModernSpecialShortcut`,
      `FV2ModernAutoComboStep`, Modern special and auto-combo resolution through
      `UV2InputBlueprintLibrary::ResolveModernSpecialShortcut` /
      `ResolveModernAutoComboStep`, ranked 0.8 damage propagation through
      `FV2RankedControlSchemeEligibilityResult`, source-controlled
      `ModernControls_V2_Policy.json`, automation coverage for neutral
      single-button specials, DOWN+Special QCF shortcuts, light-mash auto-combo
      enders, non-special rejection, and ranked Modern opt-in, plus
      `check-v2-modern-controls.py` CI validation.
- [x] **Dynamic Controls** — fully assist control where the system picks moves
      from a curated playbook based on context (SF6 Dynamic). Ranked-locked.
      Implemented by `FV2DynamicControlSchemePolicy`,
      `FV2DynamicControlPlaybookEntry`, deterministic playbook selection through
      `UV2InputBlueprintLibrary::ResolveDynamicControl`, ranked-lock resolver
      reason `RankedControls.DynamicRankedLocked`, source-controlled
      `DynamicControls_V2_Playbook.json`, automation coverage for neutral,
      anti-air, and corner contexts plus ranked rejection, and
      `check-v2-dynamic-controls.py` CI validation.
- [x] **Easy Fatalities / Easy Combo** — single-button finishers and pre-set
      combos for casual / accessibility (MK11 Easy Fatalities, Tekken 8 Special
      Style). Consumes an unlock-token per use OR gated to non-ranked.
      Implemented by `FV2EasyControlSchemePolicy`, `FV2EasyComboPreset`,
      `FV2EasyFinisherPreset`, pre-set combo and finisher resolution through
      `UV2InputBlueprintLibrary::ResolveEasyComboPreset` /
      `ResolveEasyFinisher`, token-or-non-ranked gate enforcement, ranked-lock
      resolver reason `RankedControls.EasyComboRankedLocked`, source-controlled
      `EasyControls_V2_Policy.json`, automation coverage for preset combos,
      non-ranked finishers, token consumption, gate failures, and ranked
      rejection, plus `check-v2-easy-controls.py` CI validation.
- [x] Per-account default scheme + per-fighter override; in-match switch between
      schemes blocked once round starts. Implemented by
      `FV2ControlSchemePreferenceProfile`, `FV2ControlSchemeFighterOverride`,
      `FV2ControlSchemeSwitchRequest`, and `FV2ControlSchemeSwitchResult`,
      persisted on `UV2SaveGame::ControlSchemePreferences`, resolved through
      `UV2InputBlueprintLibrary::ResolveControlSchemeForFighter`,
      `UpsertControlSchemeFighterOverride`, and `EvaluateControlSchemeSwitch`,
      locked after `RoundStart` / live match phases with reason
      `ControlSchemeSwitch.RoundStarted`, backfilled during save migration for
      legacy saves missing the field, and covered by input automation,
      persistence validation, source-controlled
      `ControlSchemePreferences_V2_Profile.json`, and
      `check-v2-control-scheme-preferences.py` CI validation.

### 5.5 Advanced movement notations

- [x] Korean Backdash Cancel (KBD): backdash → crouch → backdash chain that
      cancels backdash recovery; required for Tekken-tier movement fidelity.
      Implemented by `EV2MotionInput::KoreanBackdashCancel`,
      `FV2_MotionParser::RecognizeMotion` KBD recognition with neutral-reset
      backdash, down-back/down crouch cancel, chained backdash, facing
      normalization, `bCancelsBackdashRecovery`, source-controlled
      `KoreanBackdashCancel_V2_Contract.json`, automation coverage for accepted
      KBD, missing-crouch rejection, and facing-left normalization, plus
      `check-v2-korean-backdash-cancel.py` CI validation.
- [x] Wave Dash: forward-forward + crouch dash chain; Mishima signature
      movement. Implemented by `EV2MotionInput::WaveDash`,
      `FV2_MotionParser::RecognizeMotion` forward-dash to down/down-forward
      crouch-dash chain recognition, facing normalization, `bChainsCrouchDash`,
      source-controlled `WaveDash_V2_Contract.json`, automation coverage for
      accepted Wave Dash, missing down-forward rejection, and facing-left
      normalization, plus `check-v2-wave-dash.py` CI validation.
- [x] Crouch Dash → instant-while-standing input (iWS): standing move executed
      out of a crouch dash within 1-2 frames. Implemented by
      `EV2MotionInput::InstantWhileStanding`, trigger-aware
      `FV2_MotionParser::RecognizeMotion` crouch-dash down/down-forward,
      standing neutral, and one-to-two-frame trigger recognition,
      `bFromInstantWhileStanding`, source-controlled
      `InstantWhileStanding_V2_Contract.json`, automation coverage for accepted
      iWS, delayed-trigger rejection, and facing-left normalization, plus
      `check-v2-instant-while-standing.py` CI validation.
- [x] Step Cancel / Sidewalk: 8-way step cancelable into another step on first
      3-5 frames. Implemented by `EV2MotionInput::StepCancelSidewalk`,
      `FV2_MotionParser::RecognizeMotion` 8-way step-to-different-step
      cancellation in the 3-5 frame window, `bCancelsStepIntoSidewalk`,
      source-controlled `StepCancelSidewalk_V2_Contract.json`, automation
      coverage for accepted sidewalk, delayed-step rejection, and same-direction
      rejection, plus `check-v2-step-cancel-sidewalk.py` CI validation.
- [x] Tiger Knee (TK) motion: QCF + UF jump-cancel special into an air-only
      special (Sagat TK Tiger Uppercut and similar). Implemented by
      trigger-aware `EV2MotionInput::TigerKnee` recognition for down,
      down-forward, forward, up-forward + trigger button, with
      `bTigerKneeJumpCancel`, trigger capture, source-controlled
      `TigerKnee_V2_Contract.json`, automation coverage for accepted TK and
      missing-trigger rejection, plus `check-v2-tiger-knee.py` CI validation.
- [x] 22, 33, 44, 66 dash notations recognized as double-tap directions in the
      parser; configurable double-tap window. Implemented by
      `EV2MotionInput::DoubleTapDown` / `DoubleTapDownForward` plus existing
      `DoubleTapBack` / `DoubleTapForward`, exact 22/33 directional matching,
      `FV2InputParserConfig::DoubleTapWindowFrames`, numeric dash recognition
      flagging through `bFromNumericDashNotation`, source-controlled
      `NumericDashNotations_V2_Contract.json`, automation coverage for 22, 33,
      44, 66, neutral-reset rejection, and 22-vs-33 exactness, plus
      `check-v2-numeric-dash-notations.py` CI validation.
- [x] Dash-cancel registry: per-fighter list of normals that are dash-cancelable
      on hit / block / whiff, exposed in frame-data inspector (§6.3).
      Implemented by `FV2DashCancelEntry` / `EV2DashCancelOutcome` on
      `UV2MoveFrameData`, validation that registry entries are fighter-scoped,
      normal-only, move-matched, in-range, and unique per fighter + outcome,
      runtime lookup helpers for outcome windows, frame-data inspector exposure
      through authored draft entries and outcome booleans, source-controlled
      `DashCancelRegistry_V2_Contract.json`, automation coverage for
      hit/block/whiff acceptance plus duplicate/special-move rejection, and
      `check-v2-dash-cancel-registry.py` CI validation.

### 5.6 DualSense / haptics

- [x] Per-move adaptive-trigger resistance profile (e.g., charge moves use a
      held-trigger gradient that releases at frame-perfect release). Implemented
      by `FV2AdaptiveTriggerResistanceProfile` /
      `EV2AdaptiveTriggerResistanceMode` on `UV2MoveFrameData`, normalized
      resistance validation, profile ID uniqueness, move-matched in-range
      windows, runtime resistance sampling with frame-perfect release detection,
      frame-data inspector exposure through move authoring drafts,
      source-controlled `AdaptiveTriggerResistance_V2_Contract.json`, automation
      coverage for charge-hold ramp, release drop, duplicate profile rejection,
      and out-of-range rejection, plus `check-v2-adaptive-trigger-resistance.py`
      CI validation.
- [x] Per-move haptic curve on impact frames, drawing from a shared library
      keyed by hit-reaction tag and weapon class. Implemented by
      `UV2HapticCurveLibraryData` plus `FV2HapticCurveSample`,
      `FV2HapticCurveLibraryEntry`, and `FV2MoveHapticCurve`, with shared
      library lookup by `HitReactionTag` + `WeaponClass`, move-level resolved
      curves anchored to impact frames, normalized amplitude / sample
      validation, frame-data inspector exposure, source-controlled
      `HapticCurveLibrary_V2_Contract.json`, automation coverage for library
      resolution, sample activity, missing weapon-key rejection, duplicate
      library-key rejection, and out-of-range impact rejection, plus
      `check-v2-haptic-curves.py` CI validation.
- [x] Speaker on DualSense routes character voice barks for spatial-feel
      proximity cues. Implemented by `FV2DualSenseSpeakerRouteRule`,
      `FV2ResolvedDualSenseSpeakerRoute`, and `EV2VoiceOutputDevice`, with
      close-range fighter-bark routing to `Audio.Device.DualSenseSpeaker`,
      proximity volume scaling, local-DualSense gating, MetaSound voice-router
      controls for output bus / proximity scalar / listener distance, config
      asset and subsystem registration, runtime snapshot route counts,
      source-controlled `DualSenseSpeakerRoutes_V2_Contract.json`, automation
      coverage for accepted close routes plus far-distance and non-DualSense
      rejection, and `check-v2-dualsense-speaker-routes.py` CI validation.
- [x] Mic detection: passive only; never record without explicit consent.
      Implemented by `FV2MicrophoneConsentPolicy`,
      `FV2MicrophoneDetectionRequest`, `FV2MicrophoneDetectionResult`,
      `EV2MicrophoneDetectionMode`, and `EV2MicrophoneRecordingGate`, with
      passive device-enumeration-only detection, no audio-capture start or raw
      sample storage during detection, Aphrodite `voice-processing` /
      `raw-voice-audio` consent gating, required recording consent receipts,
      config asset and subsystem registration, runtime snapshot privacy flags,
      source-controlled `MicrophoneConsentPolicy_V2_Contract.json`, automation
      coverage for passive detection, missing-consent blocking, explicit-consent
      recording gate opening without starting capture, and
      `check-v2-mic-detection-consent.py` CI validation.

### 5.7 Per-fighter Modern Controls customization

- [x] **Per-fighter Modern Controls move slot configuration**: each fighter
      ships with a Modern-Controls (cross-ref §5.4) layout designed by the
      character's lead designer (per-character single-button special mapping,
      assist-combo string list, auto-combo branches). Implemented by
      `FV2PerFighterModernControlLayout`, `FV2ModernMoveSlotMapping`,
      `FV2ModernAssistComboString`, and `FV2ModernAutoComboBranch`, with
      designer-authored Asha / King launch layouts, per-fighter single-button
      specials, assist-combo string lookup, prioritized auto-combo branch
      resolution, config asset validation for unique fighter layouts,
      source-controlled `PerFighterModernControls_V2_Layouts.json`, automation
      coverage for Asha special slots, King assist strings, Asha anti-air
      branches, missing fighter rejection, and
      `check-v2-per-fighter-modern-controls.py` CI validation.
- [x] **Modern Controls movelist authoring** spreadsheet at
      `V2/balance/fighters/<fighter>/modern-controls.csv` with per-button
      mapping + damage scaling + auto-combo trigger conditions. Implemented by
      `V2/balance/schema/modern-controls.schema.json` plus authored
      `V2/balance/fighters/asha/modern-controls.csv` and
      `V2/balance/fighters/king/modern-controls.csv`, covering special rows,
      assist-combo rows, auto-combo branch rows, lead-designer ownership,
      per-row `damage_scalar`, and explicit branch condition tags cross-checked
      against `PerFighterModernControls_V2_Layouts.json` by
      `check-v2-modern-controls-movelist-authoring.py`.
- [x] **Per-fighter Dynamic Controls** (cross-ref §5.4 fully-assisted): curated
      context-aware playbook per fighter; designer-authored. Implemented by
      `FV2PerFighterDynamicControlPlaybook`,
      `FV2PerFighterDynamicControlResolveRequest`, and
      `FV2PerFighterDynamicControlResolveResult`, with Asha / King
      lead-designer-authored fully-assisted playbooks, fighter-scoped neutral /
      anti-air / corner contexts, deterministic priority resolution, ranked
      lockout and 70% assisted damage, config asset validation for unique
      fighter playbooks, source-controlled
      `PerFighterDynamicControls_V2_Playbooks.json`, automation coverage for
      Asha anti-air, King corner throw, missing fighter rejection, and
      `check-v2-per-fighter-dynamic-controls.py` CI validation.
- [x] **Modern / Classic eligibility per fighter for ranked**: most fighters
      allow both; restricted fighters (e.g., extreme-execution ones like Jenet /
      V.Akiha analogs) may be Classic-only for tournament mode. Implemented by
      `FV2PerFighterRankedControlEligibility` and
      `FV2PerFighterRankedControlSchemeRequest`, with Asha / King both-scheme
      launch eligibility, Jenet / V.Akiha analog tournament Classic-only
      restrictions, default unknown-fighter both-scheme fallback, config asset
      uniqueness validation and lookup, source-controlled
      `PerFighterRankedControls_V2_Eligibility.json`, automation coverage for
      Modern allow, Classic allow, tournament denial, non-tournament allow, and
      fallback behavior, plus `check-v2-per-fighter-ranked-controls.py` CI
      validation.
- [x] **Per-fighter modern-vs-classic balance pass**: documented damage scaling
      factor per fighter (default 80% for Modern); per-fighter tuning where
      Modern is over/under-performing. Implemented by
      `FV2ModernClassicBalanceTuning`,
      `BuildDefaultModernClassicBalanceTunings`, and
      `ResolveModernDamageScalarForFighter`, with launch Asha default 80% parity
      tuning, King 82% under-performing grappler tuning, config asset validation
      for unique documented balance rows, source-controlled
      `modern-vs-classic-balance.csv` and schema, per-fighter Modern layout /
      movelist CSV cross-validation, automation coverage for default fallback
      and King tuned output damage, plus `check-v2-modern-vs-classic-balance.py`
      CI validation.

### 5.8 Input-device aware UI

- [x] **Input-device tutorial overlay**: detected device (fight stick / hitbox /
      pad / KB+M / Sony Access / Xbox Adaptive) triggers a device-specific
      input-display style + tutorial overlay. Implemented by
      `FV2InputDeviceTutorialOverlayProfile`,
      `FV2InputDeviceTutorialOverlaySpec`, and `UV2InputDeviceTutorialOverlay`,
      with explicit device-tag profiles for fight stick, stickless hitbox, Sony
      Access, and Xbox Adaptive hardware, platform fallback profiles for KB+M
      and gamepads, glyph-first prompt sets, gameplay-inert bottom HUD
      injection, config asset validation, source-controlled
      `InputDeviceTutorialOverlay_V2_Contract.json`, automation coverage for all
      six launch device classes and widget configuration, plus
      `check-v2-input-device-tutorial-overlay.py` CI validation.
- [x] **SOCD cleaning** preset per device (cross-ref §53.1): last-input- wins /
      neutral / up-priority configurable per profile + per tournament rule.
      Implemented by `FV2SocdCleaningDevicePreset`,
      `FV2SocdCleaningResolveRequest`, and `FV2SocdCleaningResolveResult`, with
      launch presets for KB+M, gamepad, fight stick, stickless hitbox, Sony
      Access, and Xbox Adaptive devices, explicit hardware-tag matching before
      platform fallback, tournament neutral-rule override support, config asset
      validation, source-controlled
      `SocdCleaningDevicePresets_V2_Contract.json`, automation coverage for
      hitbox up-priority, tournament neutral override, KB+M / gamepad fallback,
      and fight-stick tag resolution, plus
      `check-v2-socd-cleaning-device-presets.py` CI validation.

---

## 6. Hitbox / Hurtbox / Collision Authority

### 6.1 Primitives

- [x] `UV2_HitboxComponent` with capsule/box/sphere/composite shapes attached to
      animation notify state windows; supports `bool bAttack`, damage payload,
      hit-reaction tag, hit-priority, owner-team, owner-fighter, armor-piercing
      flag. Implemented by `FV2HitboxShapePrimitive`, `FV2HitboxNotifyWindow`,
      and `UV2_HitboxComponent`, with box / capsule / sphere primitives,
      composite notify windows, attach-socket preservation, deterministic
      `FV2CombatBoxKeyframe` / `FV2ResolvedCombatBox` output, owner fighter/team
      propagation into collision events, armor-piercing mask mapping to
      `EV2CombatAttackProperty::Unblockable`, automation coverage for composite
      shapes, attack/hurtbox `bAttack` behavior, payload tags, owner identity,
      and source-controlled `HitboxComponent_V2_Contract.json` plus
      `check-v2-hitbox-component.py` CI validation.
- [x] `UV2_HurtboxComponent` with the same primitives but `bAttack=false`,
      vulnerability bitmask (Strike, Throw, Projectile, Low, Mid, High),
      invuln-override (driven by ability tags), counter-hit-state flag.
      Implemented by `EV2HurtboxVulnerability`, `FV2HurtboxNotifyWindow`, and
      `UV2_HurtboxComponent`, reusing `FV2HitboxShapePrimitive` for box /
      capsule / sphere / composite authoring, emitting deterministic hurtbox
      keyframes and resolved boxes with owner fighter/team, vulnerability mask,
      unioned component/window invulnerability override tags, and counter-hit
      state. Added automation for composite hurtboxes, low-mask rejection,
      ability-tag invulnerability suppression, and resolved counter-hit
      propagation, plus source-controlled `HurtboxComponent_V2_Contract.json`
      and `check-v2-hurtbox-component.py` CI validation.
- [x] Per-frame keyframe table on each montage notify segment: frame index →
      shape transform + payload override (so a single move can move its hitbox
      forward, scale up on a charged hit, etc.). Implemented by
      `FV2HitboxFrameKeyframe` tables on hitbox and hurtbox notify windows, with
      frame-index keys, optional primitive targeting, shape transform overrides,
      damage payload / hit-reaction / hit-priority / armor-piercing overrides,
      one-frame `FV2CombatBoxKeyframe` output when a table exists, baseline
      frame generation for non-overridden frames, primitive-specific override
      precedence, automation coverage for charged damage and forward-moving
      resolved bounds, source-controlled
      `NotifyFrameKeyframeTable_V2_Contract.json`, and
      `check-v2-notify-frame-keyframe-table.py` CI validation.

### 6.2 Detection

- [x] Per-tick (fixed 60Hz) sweep test: gather all enabled attack hitboxes,
      gather all enabled hurtboxes from opponents, run pairwise overlap ordered
      by hit-priority then by frame-of-activation. Implemented by
      `FV2CombatFixedFrameSweepRequest`, `FV2CombatFixedFrameSweepResult`, and
      `UV2CombatResolver::ResolveFixedFrameSweep`, gathering active hitboxes and
      hurtboxes from `UV2CollisionAuthorityComponent` instances, enforcing a
      60Hz request/result contract, using the existing same-owner/same-team
      filtered pairwise resolver, preserving priority/activation-frame event
      ordering, automation coverage for two attackers versus one defender, and
      source-controlled `FixedFrameCollisionSweep_V2_Contract.json` plus
      `check-v2-fixed-frame-collision-sweep.py` CI validation.
- [x] Same-attack hit-once registry: per attack/per opponent, only one
      registered hit unless attack is multi-hit (then per-window list).
      Implemented through `UV2CollisionAuthorityComponent::RegisterHitIfAllowed`
      / `ResetHitRegistry` / rollback snapshots, now also applied by
      `UV2CombatResolver::ResolveFixedFrameSweep` when
      `bApplyHitOnceRegistry=true`, with suppressed-event accounting,
      per-attack/per-opponent keys, multi-hit interval window keys, automation
      for duplicate suppression, multi-hit frame 10 / 11 / 12 interval behavior,
      repeated fixed-sweep suppression, source-controlled
      `HitOnceRegistry_V2_Contract.json`, and `check-v2-hit-once-registry.py` CI
      validation.
- [x] Trade resolution: if both attackers' active windows overlap and both land,
      apply trade rules per ruleset (SF trade = both take damage, MK counter-hit
      priority, SC clash → guard-impact prompt). Implemented by
      `EV2CombatTradeResolutionKind`, `FV2CombatTradeResolution`,
      `FV2CombatTradeResolutionResult`, and
      `UV2CombatResolver::ResolveTradeEvents`, detecting reciprocal same-frame
      attacker/defender pairs, deduping a combat pair per frame, resolving SF as
      simultaneous damage, MK as higher-priority counter-hit winner, and SC as
      clash events with guard-impact prompt metadata. Added automation for all
      three rulesets, source-controlled `TradeResolution_V2_Contract.json`, and
      `check-v2-trade-resolution.py` CI validation.

### 6.3 Frame-data inspector

- [x] Editor utility widget at
      `V2/ue/Plugins/V2Editor/Resources/V2FrameDataInspector.uasset` showing
      per-move startup/active/recovery, on-hit advantage, on-block advantage,
      gap-to-followup, juggle scaling profile. Implemented with a
      source-controlled Editor Utility Widget asset receipt at the required
      resource path, `FV2FrameDataInspectorColumnSpec`,
      `FV2FrameDataInspectorWidgetSpec`,
      `UV2EditorBlueprintLibrary::BuildFrameDataInspectorWidgetSpec`, expanded
      `FV2FrameDataInspectionResult` frame columns and juggle-scaling profile,
      automation coverage for all required columns and widget spec validation,
      `V2FrameDataInspector_WidgetContract.json`, and
      `check-v2-frame-data-inspector-widget.py` CI validation. The working asset
      receipt documents the intended EUW because Unreal Editor binary authoring
      is unavailable in this environment.
- [x] CSV export of all move frame data to
      `V2/balance/exports/<branch>/frame-data.csv` for balance team. Implemented
      by the branch-aware `export-v2-frame-data-csv.py` tool, source-controlled
      `V2/balance/exports/oshun-v1-nisaba/frame-data.csv`, export contract
      manifest, schema/header parity checks against `V2/balance/data`,
      build-branch column rewriting for branch handoff, and
      `check-v2-frame-data-csv-export.py` CI validation.

### 6.4 Collision authority

- [x] In rollback modes (§7), the authoritative simulator is the **shared
      deterministic loop** — no server arbitration per hit. Implemented by
      `EV2RollbackHitAuthorityModel`, `FV2RollbackHitResolutionRequest`,
      `FV2RollbackHitResolutionResult`, and `FV2SimWorld::ResolveRollbackHits`,
      which consume combat collision events inside the rollback sim, sort and
      apply them deterministically to fighter state, serialize resolved-hit
      state into snapshots, reject server-arbitrated hit requests, and prove
      peer hash parity through `V2.Netcode.Module` automation plus
      `RollbackSharedSimHitAuthority_V2_Contract.json` and
      `check-v2-rollback-shared-sim-hit-authority.py` CI validation.
- [x] In client-server modes (§8), the host is authoritative; clients predict,
      server confirms within RTT/2 + 2 frames. Implemented by
      `EV2ClientServerHitConfirmationState`,
      `FV2ClientServerHitConfirmationRequest`,
      `FV2ClientServerHitConfirmationResult`, and
      `UV2NetcodeBlueprintLibrary::ConfirmClientServerPredictedHit`, with a
      fixed `ceil(RTT frames / 2) + 2` confirmation budget, provisional client
      prediction acceptance only after matching host events, explicit late-host
      and host-rejection correction states, automation coverage in
      `V2.Netcode.Module`, `ClientServerHostHitAuthority_V2_Contract.json`, and
      `check-v2-client-server-host-hit-authority.py` CI validation.

### 6.5 Attack property tagging

- [x] `DA_Move.AttackProperty` bitmask explicitly tagging each attack as one of:
      **Low** (must be blocked low / crouch-block), **Mid** (must be blocked
      standing or crouch — most attacks), **High** (must be blocked standing;
      can be ducked under), **Overhead** (must be blocked standing even from
      crouch), **Crossup** (auto-corrects to opposite side on hit), **Anti-Air**
      (designated to beat jumping opponent), **OTG / off- the-ground** (legal to
      hit a downed opponent only when the OTG flag is set), **Unblockable**
      (cannot be blocked; signals telegraph in HUD). Implemented as
      `UV2MoveFrameData::AttackPropertyMask` using `EV2CombatAttackProperty`,
      required nonzero-mask validation, unsupported-flag rejection,
      `HasAttackProperty`, propagation from `DA_Move` to active hitbox payloads,
      `V2.Combat.MoveData.AssetContract` coverage for Overhead / Anti-Air /
      missing / unsupported masks, `AttackPropertyBitmask_V2_Contract.json`, and
      `check-v2-attack-property-bitmask.py` CI validation.
- [x] **Throw class** flag: standard, command, air, anti-air throw, OTG throw,
      super throw. Determines tech window + tech input. Implemented as
      `EV2CombatThrowClass` and `UV2MoveFrameData::ThrowClass`, with
      deterministic tech-window mapping (standard 7f, command 5f, air 6f,
      anti-air / OTG 4f, super 3f), `Action.Throw.Tech.*` input tags,
      `IsThrowMove`, `GetThrowTechWindowFrames`, `GetThrowTechInputTag`,
      validation that `Action.Throw` moves declare a throw class, gameplay-tag
      coverage, `V2.Combat.MoveData.AssetContract` tests, a
      `ThrowClassFlag_V2_Contract.json` contract, and
      `check-v2-throw-class-flag.py` CI validation.
- [x] **Punishable-on-block** flag: derived from
      `OnBlockAdvantage <= -opponent_fastest_normal` under V2 frame-data timing;
      surfaced in frame-data inspector and move list (cross-ref §46.7).
      Implemented by `UV2MoveFrameData::IsPunishableOnBlock`,
      `UV2MoveFrameData::GetBlockPunishWindowFrames`,
      `FV2MoveAuthoringDraft::OpponentFastestNormalFrames`,
      `FV2FrameDataInspectionResult::bPunishableOnBlock`, and
      `FV2FrameDataInspectionResult::BlockPunishWindowFrames`, with compact
      inspector columns, move-list CSV flag / punish-window export,
      `V2.Combat.MoveData.AssetContract` and `V2.Editor.Module` coverage,
      `PunishableOnBlockFlag_V2_Contract.json`, and
      `check-v2-punishable-on-block-flag.py` CI validation.
- [x] **Hit-confirmable** flag: derived from
      `OnHitAdvantage + cancel_window >= minimum_react_frames`; surfaced in
      trainer (§60). Implemented by
      `UV2MoveFrameData::GetHitConfirmCancelWindowFrames`,
      `UV2MoveFrameData::GetHitConfirmReactionBudgetFrames`,
      `UV2MoveFrameData::IsHitConfirmable`, and
      `UV2MoveFrameData::BuildHitConfirmTrainerSpec`, with
      `FV2HitConfirmTrainerSpec` for training-mode drill setup,
      `FV2FrameDataInspectionResult` budget fields, a
      `FV2HitConfirmTrainerOverlaySpec` / `UV2HitConfirmTrainerOverlay` UI
      surface that alternates hit / block and scores reaction time plus confirm
      accuracy, `V2.Combat.MoveData`, `V2.Editor.Module`, and `V2.UI.Module`
      automation coverage, `HitConfirmableFlag_V2_Contract.json`, and
      `check-v2-hit-confirmable-flag.py` CI validation.
- [x] **Side-swap on hit** flag (cross-up attacks, behind-opponent hits).
      Implemented as `UV2MoveFrameData::bSideSwapOnHit` plus
      `UV2MoveFrameData::ShouldSideSwapOnHit`, where explicit behind-opponent
      side-switch moves and `EV2CombatAttackProperty::Crossup` attacks both
      propagate `FV2CombatHitPayload::bSideSwapOnHit` to active hitboxes. The
      payload flag is included in rollback collision hashing and client-server
      hit confirmation parity, with `V2.Combat.MoveData` / `V2.Netcode.Module`
      coverage, `SideSwapOnHitFlag_V2_Contract.json`, and
      `check-v2-side-swap-on-hit-flag.py` CI validation.
- [x] Editor Validator failing save if a new `DA_Move` lacks `AttackProperty`.
      Implemented in the DataValidation-backed `V2AssetLinter` plugin as
      `UV2MoveDataAttackPropertyValidator`, registered with
      `UEditorValidatorSubsystem` alongside the naming validator. The validator
      handles `UV2MoveFrameData` assets, blocks save on
      `EV2CombatAttackProperty::None`, rejects unsupported mask bits, accepts
      valid masks, and is covered by `V2.AssetLinter.Plugin`,
      `MoveAttackPropertyEditorValidator_V2_Contract.json`, and
      `check-v2-move-attack-property-editor-validator.py` CI validation.

### 6.7 Projectile, reflectable, multi-hit tagging

- [x] **Projectile-class flag** on `DA_Move`: standard / fast / slow / homing /
      falling / arc / boomerang / linger / wall-of-fire. Per-class collision
      profile + render path. Implemented as `EV2CombatProjectileClass`,
      `UV2MoveFrameData::ProjectileClass`, `ProjectileCollisionProfileName`,
      `ProjectileRenderPath`, `IsProjectileMove`,
      `GetResolvedProjectileCollisionProfileName`, and
      `GetResolvedProjectileRenderPath`, with deterministic per-class defaults
      under `V2.Projectile.*` and `/Game/V2/VFX/Projectiles`, override support,
      validation for metadata without a projectile class, `V2.Combat.MoveData`
      coverage, `ProjectileClassFlag_V2_Contract.json`, and
      `check-v2-projectile-class-flag.py` CI validation.
- [x] **Projectile durability** (Marvel-style): each projectile has a durability
      value; projectile-vs-projectile interactions resolve via durability
      subtraction; high-durability projectiles break through low-durability
      counters. Implemented as `UV2MoveFrameData::ProjectileDurability`,
      `GetResolvedProjectileDurability`, active-hitbox
      `FV2CombatHitPayload::ProjectileDurability` propagation,
      `FV2ProjectileDurabilityClashRequest`,
      `FV2ProjectileDurabilityClashResult`, and
      `UV2CombatResolver::ResolveProjectileDurabilityClash`, with validation for
      missing/non-classed durability, rollback/client-server parity checks,
      `ProjectileDurability_V2_Contract.json`, and
      `check-v2-projectile-durability.py` CI validation.
- [x] **Reflectable / parryable / absorbable** flag per projectile: some moves
      explicitly reflect projectiles (Geese Wave / Guile Sonic Crusher); some
      absorb; some parry into counter. Implemented as
      `EV2CombatProjectileInteractionFlag`,
      `UV2MoveFrameData::ProjectileInteractionMask`,
      `HasProjectileInteractionFlag`, active-hitbox
      `FV2CombatHitPayload::ProjectileInteractionMask` propagation,
      `FV2ProjectileInteractionRequest`, `FV2ProjectileInteractionResult`, and
      `UV2CombatResolver::ResolveProjectileInteraction`, with deterministic
      reflected / parried-counter / absorbed / rejected outcomes,
      rollback/client-server parity checks,
      `ProjectileInteractionFlags_V2_Contract.json`, and
      `check-v2-projectile-interaction-flags.py` CI validation.
- [x] **Multi-hit attack windowing**: per-attack `MultiHit.Count` and
      `MultiHit.IntervalFrames`; per-window damage / juggle scaling /
      cancel-window override. Implemented as `MultiHitCount`,
      `MultiHitIntervalFrames`, `FV2CombatMultiHitWindowOverride`, and
      `MultiHitWindowOverrides` on `FV2CombatHitPayload`, with resolver-applied
      per-window payload overrides, cancel-window override lookup, hit-once
      suppression beyond count, hitbox-component validation,
      rollback/client-server parity checks,
      `MultiHitWindowing_V2_Contract.json`, and
      `check-v2-multi-hit-windowing.py` CI validation.
- [x] **Per-projectile lifetime** (frames until despawn or off-screen exit);
      per-stage projectile boundary handling. Implemented as
      `UV2MoveFrameData::ProjectileLifetimeFrames`,
      `GetResolvedProjectileLifetimeFrames`, active-hitbox
      `FV2CombatHitPayload::ProjectileLifetimeFrames` propagation,
      `FV2ProjectileLifetimeRequest`, `FV2ProjectileLifetimeResult`, and
      `UV2CombatResolver::ResolveProjectileLifetime`, with deterministic active
      / expired-by-lifetime / expired-by-stage-boundary outcomes,
      rollback/client-server parity checks,
      `ProjectileLifetime_V2_Contract.json`, and
      `check-v2-projectile-lifetime.py` CI validation.
- [x] **Projectile collision priority** ordering when multiple projectiles
      collide same frame. Implemented as
      `UV2MoveFrameData::ProjectileCollisionPriority`,
      `GetResolvedProjectileCollisionPriority`, active-hitbox
      `FV2CombatHitPayload::ProjectileCollisionPriority` propagation,
      `FV2ProjectileCollisionCandidate`,
      `FV2ProjectileCollisionPriorityRequest`,
      `FV2ProjectileCollisionPriorityResult`, and
      `UV2CombatResolver::OrderProjectileCollisions`, with deterministic
      priority / durability / spawn / activation / owner / instance / move-id
      tie-breakers, rollback/client-server parity checks,
      `ProjectileCollisionPriority_V2_Contract.json`, and
      `check-v2-projectile-collision-priority.py` CI validation.

### 6.6 Hitstop / Hitlag / Sakkin foundations

Hitstop is referenced here (defined in §65 Game Feel). Hitbox component
publishes `HitConfirmedFrame` and `HitstopFrameCount` so VFX / Niagara / camera
systems consume one source of truth.

- [x] `UV2_HitboxComponent.OnHitConfirmed` broadcasts a struct: attacker,
      defender, damage, hit-reaction-tag, counter-hit flag,
      hitstop-attacker-frames, hitstop-defender-frames, hitlag-defender-frames.
      Implemented as `FV2HitConfirmedEvent`, `FV2HitConfirmedSignature`,
      `FV2HitConfirmedNativeSignature`, and
      `UV2_HitboxComponent::BroadcastHitConfirmed`, with
      `FV2CombatCollisionEvent::bCounterHit` sourced from defender hurtbox
      state, asymmetric hitstop / defender-hitlag breakdown helpers on
      `FV2CombatHitPayload`, last-event storage for consumers, rollback hash and
      client/server confirmation parity,
      `HitConfirmedBroadcast_V2_Contract.json`, and
      `check-v2-hit-confirm-broadcast.py` CI validation.
- [x] Hitstop curves authored per damage tier (small/medium/heavy/launcher/
      bone-shatter/finisher); curves stored as `UCurveFloat` referenced from
      ruleset asset so MK feels different from SF feels different from Tekken
      feels different from SC. Implemented as `UV2CombatRulesetData`,
      `EV2HitstopDamageTier`, `FV2HitstopCurveSpec`,
      `FV2HitstopCurveEvaluationRequest`, and `FV2HitstopCurveEvaluationResult`,
      with per-tier curve validation, counter-hit bonus support,
      ruleset-different frame evaluation, `FV2CombatHitPayload` breakdown
      application, `HitstopRulesetCurves_V2_Contract.json`, and
      `check-v2-hitstop-ruleset-curves.py` CI validation.

---

## 7. Rollback Netcode (1v1 Modes)

### 7.1 Determinism

- [x] Audit every gameplay-tick code path for non-deterministic sources: fix all
      `FMath::RandRange` to `FRandomStream` seeded from match seed; remove
      `FApp::GetDeltaTime` reads (use fixed 60Hz step); replace any wall-clock
      with sim-clock. Implemented by disabling `AV2_FighterCharacter`
      `PrimaryActorTick`, keeping movement advancement on
      `AdvanceFixedStepMovementFrame`, and adding
      `check-v2-gameplay-determinism-audit.py` with good/bad self-test fixtures
      scanning `V2Combat`, `V2Gameplay`, `V2Input`, and `V2Netcode` for
      `FMath::Rand*`, live delta-time, wall-clock, and gameplay tick
      regressions. Covered by `GameplayDeterminismAudit_V2_Contract.json` and CI
      validation.
- [x] Forbid Blueprint nodes that read system time in gameplay graphs; add
      Editor Validator that fails save on detection. Implemented in
      `V2AssetLinter` as `UV2BlueprintSystemTimeValidator`, registered with
      `UEditorValidatorSubsystem` to fail save for gameplay-scoped Blueprints
      that call wall-clock or world-time nodes such as `Now`, `UtcNow`,
      `GetAccurateRealTime`, `GetGameTimeInSeconds`, or `GetTimeSeconds`.
      Covered by `BlueprintSystemTimeEditorValidator_V2_Contract.json`,
      `V2.AssetLinter.Plugin`, and
      `check-v2-blueprint-system-time-validator.py`.
- [x] Lock floating-point determinism: build with `-DETERMINISM`, set
      `bEnableDeterministicCookOrder=true`, run on x86-64 with strict-FP.
      Implemented by adding `DETERMINISM=1`, `V2_DETERMINISM=1`, and
      `V2_STRICT_FP=1` project target definitions plus strict-FP compiler
      arguments (`/fp:strict /fp:except-` on Win64 and
      `-fno-fast-math -ffp-contract=off` elsewhere), enabling deterministic cook
      and shader code order in `DefaultGame.ini`, pinning Win64 BuildCookRun
      wrappers to `-architecture=x64`, and gating CI host architecture. Covered
      by `FloatingPointDeterminism_V2_Contract.json` and
      `check-v2-floating-point-determinism.py`.

### 7.2 Sim/render split

- [x] Separate `FV2_SimWorld` (deterministic, runs at fixed 60Hz) from
      `FV2_PresentWorld` (interpolated, runs at display refresh). Implemented as
      `FV2SimWorld`/`FV2_SimWorld` and `FV2PresentWorld`/`FV2_PresentWorld`,
      with `FV2PresentWorldFrame` and `FV2PresentFighterState` consuming sim
      snapshots, interpolating fighter positions at display refresh, preserving
      a fixed 60Hz sim step, and draining rollback side-effect events out of
      `FV2RollbackSession`. Covered by `SimPresentWorldSplit_V2_Contract.json`,
      `V2.Netcode.Module`, and `check-v2-sim-present-world-split.py`.
- [x] Snapshot/restore for `FV2_SimWorld`: serialize ASC, attribute set values,
      ability activation state, animation timer state, hitbox state, input
      buffer, RNG stream — all into a `FV2_SimSnapshot`. Implemented by
      expanding `FV2SimSnapshot`/`FV2_SimSnapshot` with `ASCStateHashes`,
      `FV2SimAttributeSetSnapshot`, `FV2SimAbilityActivationSnapshot`,
      `FV2SimAnimationTimerSnapshot`, `FV2SimHitboxStateSnapshot`,
      `InputBufferFrames`, and `FV2SimRngStreamSnapshot`, hashing every domain,
      serializing deterministic byte payloads, and applying those chunks during
      `FV2SimWorld::RestoreSnapshot`. Covered by
      `SimSnapshotRestore_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-sim-snapshot-restore.py`.
- [x] Snapshot size budget <= 8 KB per fighter; assert in CI. Implemented with a
      clamped `FV2RollbackConfig::SnapshotBudgetBytesPerFighter`,
      `FV2SimSnapshot::EstimateSerializedBytesPerFighter`, strict
      `FV2SimSnapshot::IsWithinBudget` rejection for over-8KB budgets, and
      oversized-snapshot automation assertions. Covered by
      `SimSnapshotBudget_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-sim-snapshot-budget.py`.

### 7.3 GGPO-style rollback

- [x] Implement input prediction: predict opponent input as last-confirmed input
      until corrected. Implemented by `FV2RollbackInputPredictor` tracking
      last-confirmed input per player, building missing remote frames from that
      confirmed direction/held-button state, clearing transient pressed/released
      edges on predicted samples, and comparing confirmed inputs against stored
      predictions to request rollback only on mismatch. Covered by
      `RollbackInputPrediction_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-rollback-input-prediction.py`.
- [x] On correction: rewind to last confirmed frame, restore snapshot, resim
      forward to current frame. Implemented by selecting the earliest pending
      `FV2RollbackCorrection`, restoring the snapshot immediately before the
      corrected frame, failing over if the snapshot is missing or restore fails,
      then resimulating the corrected-frame through pre-correction current-frame
      inclusive while recording `RestoreFrame`, `ResimulatedStartFrame`, and
      `ResimulatedEndFrame` in `FV2RollbackTickResult`. Covered by
      `RollbackCorrectionResim_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-rollback-correction-resim.py`.
- [x] Rollback budget: up to 8 frames; beyond that, freeze with "Recovering
      Connection..." overlay. Implemented by preserving the default
      `MaxRollbackFrames = 8`, halting `FV2RollbackSession` advancement when a
      correction exceeds the budget, entering `Recovering`, and surfacing
      `Netcode.RecoveringConnection` plus the user-facing recovery copy through
      both `FV2RollbackTickResult` and `FV2PresentWorldFrame`. Covered by
      `RollbackBudgetRecovery_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-rollback-budget-recovery.py`.
- [x] Hide simulation-only side effects from `FV2_PresentWorld` during
      resimulation (mute audio for resim ticks, suppress particle spawn, etc.).
      Implemented by marking resim events as audio-muted, particle-suppressed,
      presentation-suppressed, and simulation-only;
      `FV2PresentWorldFrame.Events` now carries only visible presentation events
      while `SuppressedEvents` retains deterministic audit data. Covered by
      `RollbackSideEffectSuppression_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-rollback-side-effect-suppression.py`.

### 7.4 Transport

- [x] UDP transport with FEC, sequence numbers, ACK piggyback, encryption
      (DTLS). Implemented by explicit rollback UDP/DTLS datagram metadata,
      packet-header flags for sequence, ACK piggyback, XOR FEC parity, UDP
      datagram mode, and DTLS encryption, plus encode/decode preservation of
      those flags. Covered by `RollbackUdpTransport_V2_Contract.json`,
      `V2.Netcode.Module`, and `check-v2-rollback-udp-transport.py`.
- [x] Use UE Iris for non-rollback channels (chat, presence) and a custom socket
      for rollback frame inputs. Implemented by explicit `TransportProfile`,
      `bIrisStateChannel`, `bRollbackInputSocket`, and
      `bOutOfRollbackSimulation` metadata on `FV2ReplicationChannelSpec`:
      rollback frame inputs validate only on `V2.Rollback.CustomSocket` without
      Iris, while match state, chat/presence, spectator, telemetry, and lobby
      validate only as UE Iris channels outside the rollback simulation. Covered
      by `IrisRollbackChannelSplit_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-iris-rollback-channel-split.py`.
- [x] Adaptive frame-step: send input every frame, batch-resend last N frames on
      each packet for loss recovery. Implemented by
      `FV2RollbackPacketCodec::BuildAdaptiveFramePacket`, which emits a
      one-frame send cadence, includes the current input frame on every packet,
      and builds a deterministic `ResendInputFrames` window from
      `currentFrame - N + 1` through the current frame. The packet header now
      carries `CurrentFrame`, `SendIntervalFrames`, `ResendFrameCount`,
      `bEveryFrameInputSend`, and `bBatchResendForLossRecovery`, with
      encode/decode preservation and a Blueprint helper. Covered by
      `RollbackAdaptiveFrameStep_V2_Contract.json`, `V2.Netcode.Module`, and
      `check-v2-rollback-adaptive-frame-step.py`.

### 7.5 Diagnostics

- [x] In-game netgraph overlay (toggleable): RTT, rollback frames last 5s,
      packet loss %, input delay setting, frame advantage indicator. Implemented
      as `FV2NetGraphOverlaySpec`/`UV2NetGraphOverlay`, a compact top-right
      CommonUI HUD overlay with `Input.Action.ToggleNetGraph` visibility
      toggling, gameplay-inert HUD entry wiring, a fixed 5-second 60Hz rolling
      sample window, and metric rows for RTT, max rollback frames in the last 5
      seconds, packet loss, input delay, and frame advantage. Covered by
      `NetGraphOverlay_V2_Contract.json`, `V2.UI.Module`, `V2.Netcode.Module`,
      and `check-v2-netgraph-overlay.py`.
- [x] Replay all rollback frames into telemetry §55 for postmortem. Implemented
      by per-frame `FV2RollbackTelemetryFrame` capture during correction
      resimulation, postmortem readiness validation on
      `FV2RollbackTelemetryEvent`, and
      `UV2TelemetryBlueprintLibrary::BuildRollbackPostmortemEvents` publishing
      one canonical `v2.match.rollback.frame.replayed` event per replayed frame
      through `@oshun/event-bus` without rollback influence. Covered by
      `RollbackPostmortemTelemetry_V2_Contract.json`, `V2.Netcode.Module`,
      `V2.Telemetry.Module`, and `check-v2-rollback-postmortem-telemetry.py`.

---

## 8. Client-Server Net (Asymmetric / Multi-Fighter / Open World)

### 8.1 Dedicated server

- [x] Build Linux dedicated server target `V2Server.Target.cs`. Implemented by
      explicit `V2ServerTarget` server-platform support, Linux dedicated-server
      compile definitions, editor-only data exclusion, deterministic strict-FP
      parity with game/editor targets, BuildGraph LinuxServer compile/cook
      coverage, and `check-v2-linux-dedicated-server-target.py`.
- [x] Server-authoritative movement, GAS abilities; client prediction via UE
      NetworkPrediction component. Implemented by explicit
      `FV2ClientServerPredictionSettings` / `FV2ClientServerPredictionState` on
      `UV2_NetworkPredictionComponent`, `UE.NetworkPrediction.ClientServer`
      channel selection for `EV2FighterMovementReplicationMode::ClientServer`,
      server-authoritative GAS request validation on
      `UV2AbilitySystemComponent`, LocalPredicted GAS replication via server
      authority, and `check-v2-server-authoritative-network-prediction.py`.
- [x] Replication graph with priority bands: own pawn (1.0), nearby fighters
      (0.8), distant fighters (0.3), ambient props (0.1). Implemented by
      `UV2ReplicationGraph`, explicit `FV2ReplicationGraphPriorityBand` routing
      policy, `ReplicationDriverClassName=/Script/V2Netcode.V2ReplicationGraph`,
      `ReplicationGraph` module wiring, and
      `check-v2-replication-graph-priority-bands.py`.

### 8.2 Multi-fighter

- [x] Support tag-team (2v2, 3v3 SF X-Tekken-style tag), 4-player free-for-all
      (MK Survivor, WWE 4-way), Royal Rumble (up to 30 in-ring, §32).
      Implemented via `FV2MultiFighterModeSpec`, explicit 2v2 / 3v3 tag-team
      mode definitions, FFA and Royal Rumble catalog specs, Blueprint lookup
      helpers, `MultiFighterModeSupport_V2_Contract.json`, automation coverage,
      and `check-v2-multi-fighter-mode-support.py`.
- [x] Tag-in/tag-out animation handshake replicated; assist call ability with
      cooldown. Implemented with replicated `FV2TagTeamAnimationHandshake` phase
      state, `FV2AssistCallCooldown`, `UV2_Ability_AssistCall`, Action.Tag /
      Action.Assist gameplay tags, automation coverage, the
      `TagTeamAssistReplication_V2_Contract.json` contract, and
      `check-v2-tag-team-assist-replication.py`.

### 8.3 Open-world modes (World Tour / Tekken Force / Devil Within / Def Jam Street)

- [x] Co-op session handshake: host invites, party of ≤ 4 in shared instance.
      Implemented in `V2OnlineServices` with `FV2CoopHostInvite`,
      `FV2CoopSharedInstanceHandshake`, host create/accept subsystem APIs, a
      shared-instance party cap of 4, `CoopSessionHandshake_V2_Contract.json`,
      automation coverage, and `check-v2-coop-session-handshake.py`.
- [x] Instance handoff for indoor zones, fight encounters, story beats.
      Implemented with `FV2CoopInstanceHandoffRequest` /
      `FV2CoopInstanceHandoffResult`, IndoorZone / FightEncounter / StoryBeat
      routing, subsystem request/complete APIs, snapshot state,
      `CoopInstanceHandoff_V2_Contract.json`, automation coverage, and
      `check-v2-coop-instance-handoff.py`.
- [x] Client-side reconciliation tolerant of 250ms RTT. Implemented with
      `FV2ClientReconciliationPolicy`, `FV2ClientReconciliationState`, a
      15-frame budget at 60Hz, buffered-input replay, correction-state
      automation coverage, `ClientReconciliation250msRtt_V2_Contract.json`, and
      `check-v2-client-reconciliation-250ms-rtt.py`.

### 8.4 Hubs (Battle Hub, MyCAREER backstage, Def Jam clubs, SC tavern)

- [x] Shared social hub server (capacity 100) with shard transparency
      (auto-shard at capacity, friend-priority shard selection). Implemented in
      `V2OnlineServices` with `FV2SocialHubShard`, `FV2SocialHubJoinRequest`,
      `FV2SocialHubShardAssignment`, deterministic friend-priority shard
      assignment, transparent auto-shard creation, runtime snapshot fields,
      `SocialHubShardCapacity_V2_Contract.json`, automation coverage, and
      `check-v2-social-hub-shard-capacity.py`.
- [x] In-hub mini-games and arcades (§23.4). Implemented in `V2Modes` with
      `FV2HubArcadeMiniGameSpec`, `FV2HubArcadeCabinetSpec`, curated Game Center
      cabinet manifests, separate-world `UGameFeaturePlugin` URLs, per-cabinet
      leaderboard / coin-input metadata, `HubArcadeMiniGames_V2_Contract.json`,
      automation coverage, and `check-v2-hub-arcade-minigames.py`.

---

## 9. Striking System (SF / MK / Tekken Inspired)

### 9.1 Universal mechanics

- [x] Block (auto on standing back away from opponent in 2D modes; manual button
      in 3D modes); high block / low block based on stance + direction.
      Implemented with `FV2CombatBlockInputState`,
      `FV2CombatBlockEvaluationRequest`, `FV2CombatBlockEvaluationResult`,
      `UV2CombatResolver::EvaluateBlock`, high / low / any block-height
      resolution, 2D auto-back and 3D manual-block automation coverage,
      `BlockHighLowPolicy_V2_Contract.json`, and
      `check-v2-block-high-low-policy.py`.
- [x] Chip damage on block (configurable per move; defaults: MK chip 1%, SF chip
      on specials only, Tekken chip none unless Rage Art). Implemented with
      `FV2CombatBlockChipDamageRequest`, `FV2CombatBlockChipDamageResult`,
      `UV2CombatResolver::EvaluateBlockChipDamage`, per-move
      `BlockChipDamageOverride` / `bTekkenRageArt` authoring,
      `FV2CombatHitPayload::ChipDamageOnBlock`, rollback and client-server
      prediction parity, `BlockChipDamage_V2_Contract.json`, and
      `check-v2-block-chip-damage.py`.
- [x] Pushback on block scaling with attacker's tier. Implemented with
      `EV2CombatAttackerTier`, `FV2CombatBlockPushbackRequest`,
      `FV2CombatBlockPushbackResult`,
      `UV2CombatResolver::EvaluateBlockPushback`, per-move `AttackerTier` /
      `BlockPushbackUnrealUnits` authoring, active-hitbox payload propagation,
      rollback blocked-hit displacement, client-server prediction parity,
      `BlockPushback_V2_Contract.json`, and `check-v2-block-pushback.py`.
- [x] Counter-hit state: hits landed during opponent's startup register as
      counter-hit, dealing +25% damage and using counter-hit stun table.
      Implemented with `FV2CombatCounterHitEvaluationRequest`,
      `FV2CombatCounterHitEvaluationResult`,
      `UV2CombatResolver::EvaluateCounterHit`, per-move
      `CounterHitDamageMultiplier` / `CounterHitHitstunFrames` authoring,
      hurtbox startup-frame propagation, resolved hit-confirm damage / hitstun,
      rollback hash and damage parity, client-server prediction parity,
      `CounterHitStartup_V2_Contract.json`, and
      `check-v2-counter-hit-startup.py`.
- [x] Whiff-punish window: opponent recovery > 4 frames counts as "whiff
      punishable" — surface UI prompt in training mode. Implemented with
      `FV2WhiffPunishTrainerSpec`, `UV2MoveFrameData::IsWhiffPunishable`,
      `UV2MoveFrameData::GetWhiffPunishWindowFrames`,
      `FV2WhiffPunishTrainerOverlaySpec`, `UV2WhiffPunishTrainerOverlay`,
      `UV2UIBlueprintLibrary::BuildWhiffPunishTrainerOverlay`,
      `WhiffPunishWindow_V2_Contract.json`, and
      `check-v2-whiff-punish-window.py`.

### 9.1.1 Defensive options library (per-ruleset toggle)

- [x] **Parry** — block input on incoming hit frame (3rd Strike style); on
      success, no chip, attacker stuns N frames, defender gains meter /
      advantage. Per-fighter parry frame window (default 6f). Implemented with
      `FV2CombatParryRulesetConfig`, `FV2CombatParryEvaluationRequest`,
      `FV2CombatParryEvaluationResult`, `UV2CombatResolver::EvaluateParry`,
      ruleset-owned `ParryConfig`, rollback attacker-stun / defender-meter
      parity, client-server parry field comparison,
      `ParryDefenseOption_V2_Contract.json`, and
      `check-v2-parry-defense-option.py`.
- [x] **Just Defend / Just Block** — KOF / Garou Just Defend: block input on
      first 2-3 frames of attack contact awards 0 chip and faster recovery from
      blockstun. Implemented with `FV2CombatJustDefendRulesetConfig`,
      `FV2CombatJustDefendEvaluationRequest`,
      `FV2CombatJustDefendEvaluationResult`,
      `UV2CombatResolver::EvaluateJustDefend`, ruleset-owned `JustDefendConfig`,
      resolved blockstun / chip accessors, blockstring registration via resolved
      blockstun, rollback faster-blockstun parity, client-server just-defend
      field comparison, `JustDefendDefenseOption_V2_Contract.json`, and
      `check-v2-just-defend-defense-option.py`.
- [x] **Faultless Defense** — Guilty Gear: hold a button + back to block in air
      / cancel into FD; costs Drive/Tension; reduces pushback and converts chip.
      Implemented with `FV2CombatFaultlessDefenseRulesetConfig`,
      `FV2CombatFaultlessDefenseEvaluationRequest`,
      `FV2CombatFaultlessDefenseEvaluationResult`,
      `UV2CombatResolver::EvaluateFaultlessDefense`, ruleset-owned
      `FaultlessDefenseConfig`, chip-to-meter conversion, resolved block
      pushback reduction, rollback meter / pushback parity, client-server
      faultless-defense field comparison,
      `FaultlessDefenseOption_V2_Contract.json`, and
      `check-v2-faultless-defense-option.py`.
- [x] **Instant Block** — Tekken iSW + b: block input released and re-pressed on
      first contact frame for reduced blockstun. Implemented with
      `FV2CombatInstantBlockRulesetConfig`,
      `FV2CombatInstantBlockEvaluationRequest`,
      `FV2CombatInstantBlockEvaluationResult`,
      `UV2CombatResolver::EvaluateInstantBlock`, ruleset-owned
      `InstantBlockConfig`, release-before-contact / first-contact re-press
      timing validation, resolved blockstun reduction, blockstring registration
      via resolved blockstun, rollback faster-blockstun parity, client-server
      instant-block field comparison,
      `InstantBlockDefenseOption_V2_Contract.json`, and
      `check-v2-instant-block-defense-option.py`.
- [x] **Push Block / Advancing Guard** — MvC push block: directional + buttons
      while blocking pushes attacker away at meter cost. Implemented with
      `FV2CombatPushBlockRulesetConfig`, `FV2CombatPushBlockEvaluationRequest`,
      `FV2CombatPushBlockEvaluationResult`,
      `UV2CombatResolver::EvaluatePushBlock`, ruleset-owned `PushBlockConfig`,
      directional + multi-button input validation, defender meter spend,
      attacker pushback as a two-fighter rollback effect, client-server
      push-block field comparison, `PushBlockDefenseOption_V2_Contract.json`,
      and `check-v2-push-block-defense-option.py`.
- [x] **Burst / Reversal** — Guilty Gear burst: 1-shot panic button costing 1
      bar (defensive burst) or burst meter (offensive burst); knocks attacker
      back with a short cinematic. Implemented with
      `FV2CombatBurstRulesetConfig`, `FV2CombatBurstEvaluationRequest`,
      `FV2CombatBurstEvaluationResult`, `UV2CombatResolver::EvaluateBurst`,
      ruleset-owned `BurstConfig`, defensive super-meter spend, offensive
      burst-meter spend, one-shot availability checks, rollback attacker
      knockback plus cinematic freeze parity, client-server burst field
      comparison, `BurstReversalDefenseOption_V2_Contract.json`, and
      `check-v2-burst-reversal-defense-option.py`.
- [x] **Counter Assault / Alpha Counter** — Marvel / Alpha: block + special
      consumes meter to counter-attack out of blockstring. Implemented with
      `FV2CombatCounterAssaultRulesetConfig`,
      `FV2CombatCounterAssaultEvaluationRequest`,
      `FV2CombatCounterAssaultEvaluationResult`,
      `UV2CombatResolver::EvaluateCounterAssault`, ruleset-owned
      `CounterAssaultConfig`, block + special input validation, blockstun cancel
      context checks, defender meter spend, rollback counter-damage / attacker
      stun as a two-fighter effect, client-server counter-assault field
      comparison, `CounterAssaultDefenseOption_V2_Contract.json`, and
      `check-v2-counter-assault-defense-option.py`.
- [x] **Guard Cancel** — KOF: blocked attack canceled into guard-cancel roll /
      blowback at meter cost. Implemented with
      `FV2CombatGuardCancelRulesetConfig`,
      `FV2CombatGuardCancelEvaluationRequest`,
      `FV2CombatGuardCancelEvaluationResult`,
      `UV2CombatResolver::EvaluateGuardCancel`, ruleset-owned
      `GuardCancelConfig`, blockstun cancel context validation, roll-through
      movement / invulnerability, blowback counter damage / stun / pushback,
      defender meter spend, rollback two-fighter side effects, client-server
      guard-cancel field comparison,
      `GuardCancelDefenseOption_V2_Contract.json`, and
      `check-v2-guard-cancel-defense-option.py`.
- [x] **Negative Penalty / Run-Away Penalty** — KOF: inactivity threshold drops
      own meter / locks meter gain (anti-turtle). Implemented with
      `FV2CombatNegativePenaltyRulesetConfig`,
      `FV2CombatNegativePenaltyEvaluationRequest`,
      `FV2CombatNegativePenaltyEvaluationResult`,
      `UV2CombatResolver::EvaluateNegativePenalty`, ruleset-owned
      `NegativePenaltyConfig`, inactivity and retreat frame thresholds,
      activity/contact counter resets, meter-loss and meter-gain-lockout
      results, rollback fighter-state counters / lockout / penalty count /
      trigger frame hashing, input meter-gain suppression during lockout,
      rollback snapshot persistence, `NegativePenaltyRunAway_V2_Contract.json`,
      and `check-v2-negative-penalty-run-away.py`.
- [x] **Hold / Strike / Throw triangle (DOA-style)** — directional-input hold
      counters strike; throws counter hold; strikes counter throw. Used in WWE
      clinch RPS (§11.1) and as an optional ruleset layer for crossover matches.
      Implemented with `EV2CombatTriangleAction`, `EV2CombatTriangleOutcome`,
      `EV2CombatTriangleWinner`, `FV2CombatHoldStrikeThrowRulesetConfig`,
      `FV2CombatHoldStrikeThrowEvaluationRequest`,
      `FV2CombatHoldStrikeThrowEvaluationResult`,
      `UV2CombatResolver::EvaluateHoldStrikeThrow`, ruleset-owned
      `HoldStrikeThrowConfig`, directional hold-height matching, hold-beats-
      strike / throw-beats-hold / strike-beats-throw resolution, same-action
      clash recovery, rollback collision-event triangle effects, attacker /
      defender damage and stun hashing, client-server triangle field comparison,
      `HoldStrikeThrowTriangle_V2_Contract.json`, and
      `check-v2-hold-strike-throw-triangle.py`.
- [x] Each defensive option is gated to a `URV2_Ruleset` flag so MK doesn't get
      GG burst, SF6 doesn't get KOF guard-cancel, etc., unless the crossover
      ruleset opts in. Implemented on the current `UV2CombatRulesetData` ruleset
      asset with `EV2CombatDefenseOption`,
      `UV2CombatRulesetData::DefenseOptionMask`, native ruleset defaults via
      `GetNativeDefenseOptionMaskForRuleset`, resolved option checks through
      `IsDefenseOptionAllowed`, validation errors for enabled configs without a
      native or crossover ruleset flag, evaluator-side gating for every
      defensive option, coverage for MK burst / SF guard-cancel rejection and
      explicit crossover opt-in, `DefenseOptionRulesetGates_V2_Contract.json`,
      and `check-v2-defense-option-ruleset-gates.py`.

### 9.2 Combo system

- [x] Combo counter ticks per consecutive untechable hit; resets on tech /
      wake-up / blocked hit. Implemented with `UV2ComboCounterComponent`,
      `EV2ComboCounterResetReason`, `FV2CombatHitPayload::bUntechableHit`,
      collision-event registration that increments only for untechable hits,
      explicit reset paths for defender tech / wake-up / blocked hit / techable
      hit, rollback hash inclusion and client-server host-confirmation parity
      for the untechable flag, `ComboCounter_V2_Contract.json`, and
      `check-v2-combo-counter.py`.
- [x] Juggle scaling: each hit in a juggle reduces damage by a curve (SF/
      Tekken-style smooth decay; MK-style harsher decay for high-meter enders).
      Implemented in `UV2JuggleStateComponent` with `RegisterRulesetJuggleHit`,
      `GetCurrentDamageScaleForRuleset`, and `EvaluateJuggleDamageScale`; SF,
      Tekken, MK, and fallback rulesets use deterministic smooth decay curves,
      MK high-meter enders apply an additional harsher multiplier, automation
      asserts exact SF / Tekken / MK curve samples, and coverage is enforced by
      `JuggleScalingCurves_V2_Contract.json` plus
      `check-v2-juggle-scaling-curves.py`.
- [x] Wall splat: launching opponent into the wall triggers wallsplat hit
      reaction; once-per-combo unless ruleset allows multi-wall (Tekken 7+).
      Implemented with `FV2CombatWallSplatEvaluationRequest` /
      `FV2CombatWallSplatEvaluationResult`, `UV2JuggleStateComponent` wall-splat
      registration and per-combo slot tracking, standard one-wall gating, Tekken
      multi-wall allowance, `FV2CombatCollisionEvent` `ApplyWallSplatResult`
      setting `State.Status.WallSplat`, `State.HitReaction.Wallsplat`, resolved
      wallsplat hitstun, and the untechable combo flag; rollback hash and
      client-server host-confirmation parity now include wall-splat fields, with
      coverage enforced by `WallSplat_V2_Contract.json` and
      `check-v2-wall-splat.py`.
- [x] Stage transitions: hitting a wall with sufficient meter cracks into a new
      arena (MK11 stage-bouncy, Tekken break wall transition); see §15.
      Implemented with `FV2CombatStageTransitionEvaluationRequest` /
      `FV2CombatStageTransitionEvaluationResult`,
      `EV2CombatStageTransitionKind`, `UV2JuggleStateComponent` stage-transition
      registration and per-combo transition tracking, deterministic wall-impact
      / breakable-wall / meter gates, MK stage-bounce and Tekken wall-break
      resolution, `FV2CombatCollisionEvent` `ApplyStageTransitionResult`
      carrying source arena, target arena, transition sequence, hitstun, meter
      cost, and untechable combo flag; rollback hash and client-server
      host-confirmation parity include all transition fields, with coverage
      enforced by `StageTransition_V2_Contract.json` and
      `check-v2-stage-transition.py`.
- [x] **Damage proration / starter scaling** — first hit of a combo sets a
      proration value (e.g., light starter 50%, medium 70%, heavy 90%, command-
      grab 100%); subsequent hits multiplied by proration. Per-move proration
      stored in `DA_Move`. Implemented with `EV2CombatStarterProrationProfile`,
      `FV2CombatStarterProrationEvaluationRequest` /
      `FV2CombatStarterProrationEvaluationResult`,
      `FV2CombatHitPayload::StarterProration`,
      `UV2MoveFrameData::StarterProration`, active-hitbox payload propagation,
      `UV2ComboCounterComponent::RegisterProratedCollisionEvent`, first-hit
      starter storage, subsequent-hit damage multiplication,
      `FV2CombatCollisionEvent::ApplyStarterProrationResult`, rollback hash and
      client-server host-confirmation parity for proration fields, with coverage
      enforced by `DamageProration_V2_Contract.json` and
      `check-v2-damage-proration.py`.
- [x] **Tornado state** (replaces Tekken 7 "bound"): mid-combo launcher state
      enabling additional juggle hits; one tornado per combo unless extended by
      Heat / Rage mechanics. Implemented with `EV2CombatTornadoExtensionSource`,
      `FV2CombatTornadoEvaluationRequest` / `FV2CombatTornadoEvaluationResult`,
      `FV2CombatHitPayload::bTriggersTornado`,
      `UV2MoveFrameData::bTriggersTornado`,
      `UV2JuggleStateComponent::RegisterTornado`,
      `RegisterTornadoCollisionEvent`, per-combo tornado use tracking, bonus
      juggle-capacity extension, Heat / Rage extra-use gates,
      `FV2CombatCollisionEvent::ApplyTornadoResult`, rollback hash and
      client-server host-confirmation parity for Tornado fields, with coverage
      enforced by `TornadoState_V2_Contract.json` and
      `check-v2-tornado-state.py`.
- [x] **Roman Cancel / Fast Cancel** (GG / Tekken Heat): cancel any move on any
      frame with a meter cost; on hit / block / whiff variants; freezes opponent
      briefly for combo extension or punish recovery. Implemented with
      `EV2CombatFastCancelSystem`, `EV2CombatFastCancelVariant`,
      `FV2CombatFastCancelEvaluationRequest` /
      `FV2CombatFastCancelEvaluationResult`, any-frame
      `UV2MoveFrameData::ResolveFastCancel` / `CanFastCancelAtFrame` gates,
      KOF-style Roman Cancel and Tekken Heat Fast Cancel ruleset defaults plus
      explicit opt-in, per-move and payload fast-cancel cost / freeze metadata,
      hit / block / whiff collision-result validation,
      `FV2CombatCollisionEvent::ApplyFastCancelResult`, rollback attacker-meter
      spending and defender freeze, and client-server host-confirmation parity,
      with coverage enforced by `RomanFastCancel_V2_Contract.json` and
      `check-v2-roman-fast-cancel.py`.
- [x] **Kara cancel**: cancel a normal during its first 2 startup frames into
      another move (extends range of throws / specials, SF series). Implemented
      with `EV2CombatKaraCancelTargetType`,
      `FV2CombatKaraCancelEvaluationRequest` /
      `FV2CombatKaraCancelEvaluationResult`, first-two-startup-frame
      `UV2MoveFrameData::ResolveKaraCancel` / `CanKaraCancelAtFrame` gates,
      normal-source and throw / special target validation, per-move and payload
      range-extension metadata,
      `FV2CombatCollisionEvent::ApplyKaraCancelResult`, rollback hash parity and
      client-server host-confirmation parity, with coverage enforced by
      `KaraCancel_V2_Contract.json` and `check-v2-kara-cancel.py`.
- [x] **Ukemi / Tech roll** — 3 directional ground techs (forward, back,
      neutral) with i-frames; no-tech option remains valid for vortex mixups.
      Implemented with `EV2CombatTechRollDirection`,
      `FV2CombatTechRollEvaluationRequest` /
      `FV2CombatTechRollEvaluationResult`, grounded / techable knockdown window
      validation, neutral / forward / back i-frame recovery, no-tech resolution,
      `UV2MoveFrameData::ResolveGroundTechRoll` / `CanGroundTechRoll`, per-move
      and payload ground-tech metadata,
      `FV2CombatCollisionEvent::ApplyTechRollResult`, rollback defender movement
      / wake-up i-frame state hashing, and client-server host-confirmation
      parity, with coverage enforced by `TechRoll_V2_Contract.json` and
      `check-v2-tech-roll.py`.
- [x] **Quick rise / no-rise toggle** in training and tutorial. Implemented with
      `EV2WakeupRiseOption`, `FV2WakeupRiseToggleOptionSpec`,
      `FV2WakeupRiseToggleSpec`, CommonUI `UV2WakeupRiseToggleOverlay`,
      `UV2UIBlueprintLibrary::BuildWakeupRiseToggleOverlay` / HUD-entry
      builders, training-mode and tutorial-mode validation, no-rise vortex
      preservation metadata, widget toggle behavior, and coverage enforced by
      `QuickRiseToggle_V2_Contract.json` and `check-v2-quick-rise-toggle.py`.
- [x] **Reset state** — visible "reset opportunity" UI when juggle scaling caps
      out and attacker should set up a fresh mixup. Implemented with
      `UV2JuggleStateComponent::GetRemainingJuggleHits` /
      `IsResetOpportunityActive`, `FV2ResetOpportunityOverlaySpec`, CommonUI
      `UV2ResetOpportunityOverlay`,
      `UV2UIBlueprintLibrary::BuildResetOpportunityOverlay` / HUD-entry
      builders, capped-juggle reason tags, a visible training HUD flag that
      suggests a fresh mixup, and coverage enforced by
      `ResetOpportunity_V2_Contract.json` and `check-v2-reset-opportunity.py`.
- [x] **Damage scaling reset** — wallsplat, stage transition, finisher, super
      reset scaling per ruleset rules. Implemented with
      `EV2CombatDamageScalingResetSource`,
      `FV2CombatDamageScalingResetEvaluationRequest` /
      `FV2CombatDamageScalingResetEvaluationResult`, per-ruleset source gates
      for Tekken wall splats, MK / Tekken stage transitions, finisher rulesets,
      and cinematic supers,
      `UV2ComboCounterComponent::RegisterDamageScalingReset` clearing stored
      starter scaling, `FV2CombatCollisionEvent` `ApplyDamageScalingResetResult`
      restoring full damage for the reset event, and rollback hash /
      client-server parity for reset fields, with coverage enforced by
      `DamageScalingReset_V2_Contract.json` and
      `check-v2-damage-scaling-reset.py`.

### 9.3 SF-inspired layer

- [x] Drive Gauge (5 stocks); Drive Impact (armor-break wall splat), Drive Parry
      (block window with chip-recover), Drive Rush (forward cancel), OD Specials
      (1-stock special enhancement), Drive Reversal. Implemented with
      `EV2DriveGaugeAction`, `FV2DriveGaugeActionRequest` /
      `FV2DriveGaugeActionResult`, five-stock `UV2_AttrSet_Vitals` Drive /
      MaxDrive defaults and clamps, SF ruleset gating, one-stock Drive Impact /
      Drive Rush / OD Special costs, two-stock Drive Reversal cost, half-stock
      Drive Parry reserve cost, armor-break wall-splat flags, parry chip-recover
      output, forward-cancel and blockstun gates, with coverage enforced by
      `DriveGauge_V2_Contract.json` and `check-v2-drive-gauge.py`.
- [x] Burnout state when Drive empty: slower walk, no specials, white health
      goes red, increased chip. Implemented with `State.Status.Burnout`,
      `FV2DriveBurnoutStateRequest` / `FV2DriveBurnoutStateResult`, SF-only
      Drive-empty activation at the five-stock gauge floor, 75% walk-speed
      scalar, special ability `BlockedSourceTags` lockout, recoverable health
      conversion into red damage, Burnout-aware block-chip scalar via
      `bDefenderBurnout`, HUD recoverable-health red / white tint tokens,
      `DriveBurnout` public replication, and coverage enforced by
      `BurnoutState_V2_Contract.json` and `check-v2-burnout-state.py`.
- [x] Critical Art (Super) at 1/2/3 super bars; Level-2 invincible reversal,
      Level-3 with cinematic camera. Implemented with three-bar `SuperMeter` /
      `MaxSuperMeter` vitals replication, `EV2CriticalArtLevel`,
      `FV2CriticalArtActivationRequest` / `FV2CriticalArtActivationResult`,
      SF-only level costs of 1 / 2 / 3 super bars, Level-2 reversal
      invincibility windows, Level-3 cinematic event queuing through
      `Seq.SF.CriticalArt.Level3`, HUD `SetSuperMeterState` ready exposure,
      `SuperMeter` public replication, and coverage enforced by
      `CriticalArt_V2_Contract.json` and `check-v2-critical-art.py`.

### 9.4 MK-inspired layer

- [x] Stamina meter (2 stocks) for amplified specials, breakers, X-Ray, Fatal
      Blow at low health. Implemented with MK-specific `MKStamina` /
      `MaxMKStamina` vitals replication, `EV2MKStaminaAction`,
      `FV2MKStaminaActionRequest` / `FV2MKStaminaActionResult`, MK-only
      two-stock action gates, one-stock amplified specials, two-stock breakers,
      X-Ray requiring full `Stunmeter` / X-Ray meter plus two stamina stocks,
      Fatal Blow readiness at 30% health with full MK stamina, MK X-Ray / Fatal
      Blow ability stamina metadata, HUD `SetMKStaminaState`, `MKStamina` /
      `FatalBlowReady` public replication, and coverage enforced by
      `MKStamina_V2_Contract.json` and `check-v2-mk-stamina.py`.
- [x] X-Ray / Fatal Blow cinematic with skeletal pierce-through rendering
      (§45.3). Implemented with replay-safe `Seq.MK.XRay` / `Seq.MK.FatalBlow`
      sequencer presets, `SlowMo.MK.XRay` and `SlowMo.MK.FatalBlow.Super`
      curves, `XRay.MK.XRay` / `XRay.MK.FatalBlow` cutscene specs,
      `BuildXRayCinematicRenderPacket` and `QueueXRayCinematicRenderPacket` VFX
      paths, explicit `PierceThroughMask` / `OrganSilhouette` render layers,
      skeletal pierce-through validation on cinematic packets, and coverage
      enforced by `XRayFatalBlowCinematic_V2_Contract.json` and
      `check-v2-xray-fatal-blow-cinematic.py`.
- [x] Krushing Blow alt-hits (frame-perfect requirement triggers cinematic
      damage spike). Implemented with MK-only
      `FV2CombatKrushingBlowEvaluationRequest` /
      `FV2CombatKrushingBlowEvaluationResult`, one-frame impact validation
      against `ActivationFrame + KrushingBlowRequiredImpactFrameOffset`,
      payload-level Krushing Blow alt-hit metadata, collision-event damage spike
      and cinematic sequence fields, `Seq.MK.KrushingBlow` /
      `SlowMo.MK.KrushingBlow` cinematic defaults, hit-confirm cinematic
      exposure, rollback and client-server parity checks, and coverage enforced
      by `KrushingBlowAltHits_V2_Contract.json` and
      `check-v2-krushing-blow-alt-hits.py`.
- [x] Wake-up Roll (3 directions) and Get-Up Attack. Implemented with MK-only
      `FV2CombatWakeupActionEvaluationRequest` /
      `FV2CombatWakeupActionEvaluationResult`, `EV2CombatWakeupAction` coverage
      for neutral / forward / back wake-up rolls and get-up attack, grounded
      knockdown plus wake-up-window validation, payload-level wake-up option
      metadata, active collision-event wake-up roll and get-up attack fields,
      move-data authoring propagation, rollback application for roll movement
      and get-up attack damage, client-server parity checks, and coverage
      enforced by `WakeupRollGetUpAttack_V2_Contract.json` and
      `check-v2-wakeup-roll-getup-attack.py`.

### 9.5 Tekken-inspired layer

- [x] 8-way movement, sidestep i-frames (first 3 frames), backdash cancel.
      Implemented with deterministic `EV2TekkenMovementAction` states for
      eight-way run, sidestep left / right, backdash, and backdash cancel,
      normalized diagonal movement, first-three-frame sidestep invulnerability
      honored by rollback hit resolution, double-back-with-neutral backdash
      startup, crouch-cancel recovery clearing, `FV2SimTekkenMovementSnapshot`
      serialization, fixed-step `Match3DRing` / cage / street eight-way mover
      settings, and coverage enforced by `TekkenMovementLayer_V2_Contract.json`
      and `check-v2-tekken-movement-layer.py`.
- [x] Hopkick / launcher / juggle culture. Implemented with
      `FV2CombatTekkenLauncherEvaluationRequest` / result rules, move-data
      hopkick and launcher metadata, active hitbox propagation,
      `UV2JuggleStateComponent::RegisterTekkenLauncher` state tracking, launcher
      hitstun, untechable combo flagging, starter juggle scaling, deterministic
      rollback air-juggle state via `FV2SimAirJuggleSnapshot`, host-confirmation
      parity for launcher fields, and coverage enforced by
      `TekkenHopkickLauncherJuggle_V2_Contract.json` and
      `check-v2-tekken-hopkick-launcher-juggle.py`.
- [x] Heat system (1 activation per round): enhanced specials, chip-on-block,
      Heat Smash super. Implemented with `FV2CombatTekkenHeatActivationRequest`
      / result one-use round gating, Heat-enhanced special and chip-on-block
      move evaluation, Heat Smash super damage / hitstun / consumption,
      move-data authoring and active-hitbox propagation, deterministic rollback
      Heat state via `FV2SimTekkenHeatSnapshot`, host-confirmation parity, and
      coverage enforced by `TekkenHeatSystem_V2_Contract.json` and
      `check-v2-tekken-heat-system.py`.
- [x] Rage activation at low health → Rage Drive (enhanced launcher) and Rage
      Art (cinematic super). Implemented with
      `FV2CombatTekkenRageActivationRequest` / result low-health gating,
      `FV2CombatTekkenRageMoveEvaluationRequest` / result Rage Drive launcher
      and Rage Art cinematic-super resolution, move-data authoring and
      active-hitbox propagation, deterministic rollback Rage state via
      `FV2SimTekkenRageSnapshot`, host-confirmation parity, and coverage
      enforced by `TekkenRageSystem_V2_Contract.json` and
      `check-v2-tekken-rage-system.py`.
- [x] Ki Charge / Power Crush armor moves. Implemented with
      `FV2CombatTekkenKiChargeActivationRequest` / move evaluation,
      `FV2CombatTekkenPowerCrushArmorEvaluationRequest`, Action.Taunt move-data
      authoring, active-hitbox payload propagation, rollback Ki Charge and Power
      Crush snapshots, deterministic hit application, host-confirmation parity,
      and coverage enforced by `TekkenKiChargePowerCrush_V2_Contract.json` and
      `check-v2-tekken-ki-charge-power-crush.py`.
- [x] Stance-switch system (e.g., Hwoarang flamingo, Lei 5 styles). Implemented
      with `FV2CombatTekkenStanceSwitchEvaluationRequest` / result and
      `FV2CombatTekkenStanceMoveEvaluationRequest` / result, Hwoarang flamingo
      and Lei five-style gameplay tags, `Action.StanceSwitch` move-data
      authoring, stance-gated active-hitbox payload propagation, deterministic
      rollback stance snapshots via `FV2SimTekkenStanceSnapshot`, input-driven
      Tag+direction stance routing, stance-gated hit application / exit-on-hit
      handling, client-server parity, and coverage enforced by
      `TekkenStanceSwitch_V2_Contract.json` and
      `check-v2-tekken-stance-switch.py`.

### 9.6 Ruleset mode switch

- [x] Per-match `URV2_Ruleset` data asset selects which layers are active;
      tutorials in §19 explain. Implemented on `UV2CombatRulesetData` (the
      current `URV2_Ruleset` primary asset) with `EV2CombatRulesetLayer` bitmask
      defaults, per-match `FV2CombatRulesetSelectionResult`, crossover layer
      opt-ins via `CombatLayerMask`, required `FV2CombatRulesetTutorialLesson`
      coverage for active layers, validation rejecting active layers without
      tutorial lessons, and coverage enforced by
      `RulesetModeSwitch_V2_Contract.json` and
      `check-v2-ruleset-mode-switch.py`.

### 9.7 Setplay, Oki, Vortex theory

- [x] **Setplay registry** per fighter: documented post-knockdown setups
      (`SetPlay.<Fighter>.<KnockdownType>.<Direction>`) listing oki options with
      frame-perfect meaty timing, cross-up timing, throw setup, safe jump-in
      timing. Implemented with `UV2SetplayTheoryData`,
      `FV2CombatSetplayTheoryRegistry`, validated `FV2CombatSetplayEntry`
      routes, and coverage enforced by `SetplayOkiVortex_V2_Contract.json` and
      `check-v2-setplay-oki-vortex.py`.
- [x] **Oki theory** per ruleset: rise frames per ruleset (MK fast wakeup, SF6
      slower, Tekken air-recover-heavy), wake-up invuln window (default 8f,
      configurable), meaty-attack startup buffer (defender's first vulnerable
      frame). Implemented with `FV2CombatOkiRulesetTheory` defaults for MK, SF,
      and Tekken first-vulnerable-frame calculations.
- [x] **Vortex setups** flagged per fighter (e.g., Akuma demon flip vortex):
      training-mode "Setplay Browser" lists per-fighter vortex options with
      success-rate stats and counter-options. Implemented with
      `FV2CombatVortexSetup` and the training-safe
      `FV2SetplayBrowserOverlaySpec` / `UV2SetplayBrowserOverlay`.
- [x] **Mixup library**: per-fighter mixup catalog (high / low / cross-up /
      throw / overhead) with relative success-rate and counter-options surfaced.
      Implemented with `FV2CombatMixupCatalogEntry` validation requiring all
      five mixup types.
- [x] **Shimmy / fuzzy guard / option select trainer** integration into §60.9
      specialized trainer modes. Implemented with
      `FV2CombatSpecializedTrainerModeSpec` requiring Setplay Browser, Shimmy,
      Fuzzy Guard, and Option Select training modes.
- [x] **Comeback mechanics** trigger condition: at ≤ 20% HP and behind in score,
      fighter gains "Comeback State" — 1 stock of meter on round start, +5%
      damage scaling, +1f startup invuln on first reversal. Per-ruleset
      toggleable; MK and Tekken on by default, SF6 off (Drive Rush is the SF
      comeback), DJ Blazin' is the DJ equivalent. Implemented with
      `FV2CombatComebackRulesetConfig`, `FV2CombatComebackEvaluationRequest` /
      result, and `UV2CombatResolver::EvaluateComebackState`.

---

## 10. Grappling & Throw System

- [x] Universal command throw: input motion (360°/720°/HCB+P) triggers throw
      ability; throw range tighter than strike range. Implemented with
      Grapple-trigger capture for FullCircle, DoubleFullCircle, and HCB motion
      recognition plus `FV2CombatThrowAttemptRequest` range evaluation requiring
      throw ranges below the reference strike range.
- [x] Throw tech window: 7 frames after throw startup, defender pressing same
      throw button breaks throw. Implemented with the universal seven-frame
      `FV2CombatThrowTechEvaluationRequest`, same-button tag matching, and
      seven-frame `UV2MoveFrameData` throw tech metadata.
- [x] Throw immunity in air, on wakeup (first 8 frames), during invuln ability
      states. Implemented in throw-attempt evaluation with ground throws
      whiffing on airborne defenders, first-eight-frame wake-up throw immunity,
      and explicit invulnerable / throw-invulnerable state rejection.
- [x] Throw whiff recovery 16f standard; command throws 22-28f. Implemented via
      throw ruleset defaults and move-data helpers returning 16f standard whiff
      recovery and 24f command/super recovery within the 22-28f band.
- [x] Air throws (MK/SF) with separate input motion in air. Implemented with
      MK/SF air-throw ruleset defaults and throw-attempt validation requiring a
      separate air-throw input motion plus airborne attacker/defender context.
- [x] Counter throws (Tekken parry → throw): on-react throw counters another
      throw within 6 frames. Implemented with
      `FV2CombatCounterThrowEvaluationRequest`, Tekken-only ruleset gating, and
      six-frame parry response validation.
- [x] Crouch tech (SF): crouching during throw input shrinks hurtbox below
      throwbox. Implemented with `FV2CombatCrouchTechEvaluationRequest`, SF-only
      crouch-tech gating, seven-frame throw-input timing, and hurtbox shrink
      below the throwbox threshold.

---

## 11. Wrestling System (WWE Inspired)

### 11.1 Match flow

- [x] Stand-up strikes feed into clinch attempts; successful clinch enters
      front-facelock / waistlock / collar-elbow tieup. Implemented with
      `FV2CombatWrestlingClinchEntryRequest`, WWE ruleset gating, standing
      attacker/defender validation, range checks, and deterministic tie-up
      resolution for front facelock, waistlock, and collar-elbow.
- [x] Tie-up rock-paper-scissors mini-game resolves into Throw / Strike /
      Reversal advantage. Implemented with
      `FV2CombatWrestlingTieUpEvaluationRequest`, the Throw > Reversal >
      Strike > Throw cycle, same-action clash handling, and explicit advantage
      flags.
- [x] Grapple chain: from tie-up, attacker queues `DA_Move` with
      `Style.Wrestling` tag; defender can attempt reversal on first 6 frames of
      the throw windup. Implemented with
      `FV2CombatWrestlingGrappleChainRequest`, exact `Style.Wrestling` tag
      validation, active tie-up gating, and a fixed six-frame reversal window.
- [x] Body limb-damage map: head, torso, arm-L, arm-R, leg-L, leg-R; moves apply
      damage to specific limbs; limb damage gates submission viability.
      Implemented with `FV2CombatWrestlingLimbDamageApplicationRequest`,
      `FV2CombatWrestlingSubmissionViabilityRequest`, a six-entry limb map, and
      threshold-based submission viability checks.

### 11.2 Pin mini-game

- [x] Pin attempt covers opponent; opponent kickout meter rises based on damage
      taken; 3-count occurs over fixed 3-second window. Implemented with
      `FV2CombatWrestlingPinAttemptRequest`, WWE pin gating, damage-to-kickout
      meter scaling, and a fixed 180-frame / 3-second three-count window.
- [x] Player-side kickout: mash-button (PS5: rumble-modulated), bar-stop (modern
      WWE 2K), or timing-window press; configurable per difficulty. Implemented
      with `FV2CombatWrestlingKickoutEvaluationRequest`, Easy/Normal/Hard/Legend
      tuning, mash, bar-stop, timing-window modes, and rumble-modulated mash
      support.
- [x] Finisher pins (after stored finisher used) require harder kickout (smaller
      window) and consume finisher charge. Implemented with finisher-pin charge
      validation, charge consumption, smaller kickout windows, and extra mash
      pressure.

### 11.3 Submission mini-game

- [x] Submission grid (WWE 2K15+ style) or breaking-point stamina race (modern
      WWE). Toggle in match setup. Implemented with
      `FV2CombatWrestlingSubmissionMiniGameConfig` and
      `EV2CombatWrestlingSubmissionMiniGameMode` for grid and breaking-point
      stamina-race selection.
- [x] Limb-targeted submissions deal escalating damage if held; eventually
      auto-tap when limb HP <= 0 and stamina spent. Implemented with
      `FV2CombatWrestlingSubmissionMiniGameRequest`, escalating held damage,
      stamina spend, and auto-tap validation.
- [x] Rope-break / ring-out cancel within ropes proximity; cage matches disable
      rope break. Implemented with deterministic rope proximity checks, ring-out
      cancel handling, and cage-match rope-break suppression.

### 11.4 Object & weapon usage

- [x] In-ring objects: steel chair, ladder, table, kendo stick, sledgehammer,
      garbage can, brass knuckles, microphone, championship belt. Implemented
      with
      `FV2CombatWrestlingObjectInteractionRequest::BuildDefaultObjectCatalog`,
      nine typed WWE object specs, durability values, replication defaults, and
      object-specific break animation tags.
- [x] Object pickup/drop input; object durability with break animation; object
      replication. Implemented with deterministic object interaction evaluation,
      input/range/holder gating, held/dropped/broken replication state,
      durability-to-zero break animation triggers, and replication-sequence
      increments on accepted interactions.
- [x] Tables-must-break rule for table matches. Implemented with `TableImpact`
      evaluation that requires table objects for table-match rules and marks
      `bTablesMustBreakSatisfied` only when the impact breaks the table.

### 11.5 Stipulation matches

- [x] Cage Match (climb to exit), Hell in a Cell (top-of-cell breakaway), Ladder
      Match (climb to retrieve belt), TLC, Casket Match, Buried Alive, Last Man
      Standing (10-count instead of 3), Inferno (fire ring), I Quit (mic
      prompt), First Blood (visible blood threshold), Iron Man (timed), Money in
      the Bank (briefcase mid-air retrieval), Battle Royal, Royal Rumble (§32),
      Hardcore (no DQ), Tornado Tag (all 4 legal), Triple Threat (no DQ, no
      count-outs), Fatal 4-Way, Elimination Chamber. Implemented with
      `FV2CombatWrestlingStipulationEvaluationRequest`, a 19-entry WWE
      stipulation catalog, deterministic win / elimination / timed-entry
      evaluation, no-DQ / no-count-out / all-legal rule flags, fixed 600-frame
      Last Man Standing count, 5400-frame Royal Rumble entry cadence, and
      automation coverage for every named stipulation.

### 11.6 Crowd & ref

- [x] Crowd reaction system (Pop / Boo / Mixed / Indifferent / Chant) driven by
      sequence of moves, momentum, finisher chain. Drives commentary line
      selection. Implemented with `FV2CombatWrestlingCrowdReactionRequest`,
      deterministic event / momentum / heel-action scoring, 300-frame sequence
      windows, finisher-chain chant triggers, and commentary bank tags rooted at
      `Commentary.WWE.Crowd`.
- [x] Referee actor with admonish, count, ring-out count, DQ trigger, ref bump
      (knockdown disables count for X seconds), call-for-bell. Implemented with
      `AV2WrestlingRefereeActor`, fixed 60-frame count cadence, 180-frame
      pinfall, 600-frame ring-out, 300-frame ref bump count-disable window,
      severity-based admonish / DQ, bell calls, and automation coverage.

### 11.7 Commentary

- [x] Three-voice commentary stack (play-by-play, color, third-voice cameo) with
      line bank sequenced by gameplay-event triggers; barge-in priority rules so
      finisher lines pre-empt ambient banter. Implemented in `V2Audio` with
      `FV2CommentaryStackRequest`, a default WWE line bank, play-by-play / color
      / guest-cameo scheduling, 90-frame color and 150-frame cameo offsets,
      finisher barge-in priority over interruptible ambient banter, subsystem
      queueing, and `V2.Audio.Module` automation coverage.

---

## 12. MMA / Ground Game (UFC Inspired)

### 12.1 Stand-up

- [x] Realistic stamina drain per strike thrown / missed; head-movement (slip
      L/R, lean back, duck) costs less stamina than blocking. Implemented in
      `V2Combat` with `FV2CombatMMAStandUpStaminaRequest`, UFC strike cost
      tables, per-limb stamina drain outputs, 1.35x missed-strike overextension
      penalties, combo fatigue scaling, block drain, slip-left / slip-right /
      lean-back / duck costs that remain lower than blocking, and
      `V2.Combat.Module` automation coverage.
- [x] Footwork: stance switch, distance management (push / pull), pivots.
      Implemented in `V2Combat` with `FV2CombatMMAFootworkRequest`, orthodox /
      southpaw stance switching, 48uu push / pull range steps clamped to
      80-320uu stand-up distance, 35-degree left / right pivots with 36uu
      lateral steps, per-action stamina / recovery costs, out-of-range pivot
      rejection, and `V2.Combat.Module` automation coverage.
- [x] Clinch entry: closing distance + clinch input → over-under, double collar
      tie, body lock, single collar. Implemented in `V2Combat` with
      `FV2CombatMMAClinchEntryRequest`, mandatory closing-distance and clinch
      input gates, standing-state checks, 84uu UFC entry range,
      position-specific over-under / double-collar / body-lock / single-collar
      ranges, clean-entry advantage frames, and `V2.Combat.Module` automation
      coverage.

### 12.2 Takedowns

- [x] Takedown attempts: shoot, body lock, trip, throw; success based on
      attacker takedown-skill vs defender takedown-defense + stamina + level
      change windup time. Implemented in `V2Combat` with
      `FV2CombatMMATakedownAttemptRequest`, UFC shoot / body-lock / trip / throw
      attempt ranges, stamina costs, windup frames, deterministic
      skill-vs-defense scoring with attacker / defender stamina weights,
      level-change windup bonuses, stuffed outcomes, attacker-top success tags,
      and `V2.Combat.Module` automation coverage.
- [x] Defender denial: sprawl input within 12-frame window denies takedown,
      transitions to top position attacker. Implemented in `V2Combat` with
      `FV2CombatMMATakedownDenialRequest`, UFC 12-frame sprawl windows,
      active-takedown / defender-standing / sprawl-input gates, late-sprawl and
      already-stuffed rejection paths, defender-top / attacker-bottom ground
      transition tags, sprawl stamina costs, recovery / advantage frames, and
      `V2.Combat.Module` automation coverage.
- [x] Trip from clinch / inside cage; cage takedowns slower, wall-supported
      defense bonus. Implemented in `V2Combat` takedown attempts with
      inside-cage context flags, clinch-required cage trips, 8-frame cage
      takedown windup penalties, inside-cage trip bonuses, wall-supported
      defense bonuses that can stuff otherwise successful takedowns, cage-wall
      stuffed outcome tags, and `V2.Combat.Module` automation coverage.

### 12.3 Ground positions

- [x] Position state machine: Full Guard (top/bottom), Half Guard, Side Control,
      North-South, Back Mount, Full Mount, Crucifix, Turtle, Sprawl. Implemented
      in `V2Combat` with `FV2CombatMMAGroundPositionStateRequest`, eighteen UFC
      top/bottom ground states, position-family resolution, top/bottom
      counterpart pairing, deterministic ground position tags, dominant-control
      / guard / back-control / sprawl flags, requested-position state
      resolution, invalid-position rejection, and `V2.Combat.Module` automation
      coverage.
- [x] Transitions: each position has allowed advances / sweeps / reversals keyed
      by direction + button + stamina + skill check. Implemented in `V2Combat`
      with `FV2CombatMMAGroundTransitionRequest`, UFC-only transition config,
      advance / sweep / reversal actions, direction and button gates,
      per-position target resolution, stamina consumption, transition-skill vs
      ground-defense scoring, accepted / rejected transition tags, resolver API
      coverage, `MMAGroundTransitions_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation for top advances, bottom sweeps, reversals,
      wrong direction, wrong button, and failed skill checks.
- [x] Ground-and-pound: top position can rain strikes from each position; damage
      scales with position (full-mount > side > half > guard). Implemented in
      `V2Combat` with `FV2CombatMMAGroundAndPoundRequest`, UFC-only ground
      strike config, short-punch / hammerfist / elbow / body-punch strike types,
      top-position gates for every ground state, position-family damage
      multipliers, landed / blocked / missed / thrown outcome scalars,
      rain-strike sequence scaling, stamina consumption, accepted / rejected
      tags, resolver API coverage, `MMAGroundAndPound_V2_Contract.json`, CI
      validation, and `V2.Combat.Module` automation for top positions, damage
      ordering, blocked mitigation, rain sequences, bottom-position rejection,
      missing input, and exhaustion.
- [x] Submissions per position (rear-naked choke, guillotine, kimura, armbar,
      triangle, heel hook, americana, kneebar, anaconda, D'Arce, omoplata,
      gogoplata) — each is a context-keyed ability with its own grid / breaking-
      point mini-game. Implemented in `V2Combat` with
      `FV2CombatMMASubmissionRequest`, a UFC-only submission config, default
      catalog entries for all twelve named submissions, per-technique
      ground-position context keys, ability tags, targets, grid dimensions, grid
      capture thresholds, breaking-point thresholds, hold-time control damage,
      defender stamina pressure, tap / escape / in-progress outcomes,
      wrong-context and missing-input rejection, resolver API coverage,
      `MMASubmissions_V2_Contract.json`, CI validation, and `V2.Combat.Module`
      automation for catalog completeness, every submission context, rear-naked
      choke breaking-point finishes, guillotine context, armbar grid data,
      triangle escapes, wrong context, and missing input.

### 12.4 Cage interaction

- [x] Cage-trap (mount fence, fence-press in clinch), cage walks (defender walks
      up the cage to stand), back-to-cage transitions. Implemented in `V2Combat`
      with `FV2CombatMMACageInteractionRequest`, UFC-only cage interaction
      config, mount-fence and clinch fence-press cage-trap states, cage-walk
      stand-up skill checks against top pressure, back-to-cage wall support
      transitions, stamina costs, state/reason tags,
      `MMACageInteraction_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation for trap creation, cage walks, failed
      cage-walk checks, back-to-cage support, not-near-cage rejection, and
      missing-input rejection.
- [x] Octagon ground textures, blood splatters from G&P. Implemented in `V2VFX`
      with five typed octagon canvas texture specs, blood-absorption material
      routing, deterministic landed ground-and-pound splatter IDs, rain-strike
      decal fan-out, gore-policy suppression, subsystem queueing,
      `MMAOctagonGroundVFX_V2_Contract.json`, CI validation, and `V2.VFX.Module`
      automation coverage.

### 12.5 Stamina & damage

- [x] Per-limb stamina (lead leg / rear leg / lead arm / rear arm / head /
      torso). Limb damage degrades that limb's outputs and inputs. Implemented
      in `V2Combat` with `FV2CombatMMALimbStaminaDamageState`, complete six-limb
      stamina/damage maps, per-limb damage output scalars, input cost and
      responsiveness degradation, affected-limb stamina updates,
      `MMAPerLimbStaminaDamage_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] Stamina recovery slower while moving / striking; faster in clinch
      passively (rest position). Implemented in `V2Combat` with
      `FV2CombatMMAStaminaRecoveryRequest`, neutral / moving / striking /
      passive-clinch-rest contexts, 60 Hz recovery math, moving and striking
      slowdown scalars, passive clinch rest acceleration, resolver API coverage,
      `MMAStaminaRecovery_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] Doctor stoppage and ref stoppage conditions (cut over eye threshold, ref
      TKO when knockdown + ground-and-pound exceeds threshold without
      intelligent defense). Implemented in `V2Combat` with
      `FV2CombatMMAStoppageRequest`, UFC doctor cut-over-eye threshold logic,
      referee TKO checks for knockdown plus ground-and-pound damage /
      unanswered-strike thresholds, intelligent-defense suppression,
      deterministic reason tags, resolver API coverage,
      `MMAStoppage_V2_Contract.json`, CI validation, and `V2.Combat.Module`
      automation coverage.

### 12.6 Scoring

- [x] 10-point must scoring: per-round judge AI computes scorecard, surfaces at
      round end; 10-8 / 10-9 / 10-10 logic. Implemented in `V2Combat` with
      `FV2CombatMMARoundScoringRequest`, three deterministic UFC judge profiles,
      effective-striking / damage / grappling-control / knockdown / aggression
      composites, 10-9 / 10-8 / 10-10 score outcomes, round-end scorecard
      surface metadata, resolver API coverage,
      `MMARoundScoring_V2_Contract.json`, CI validation, and `V2.Combat.Module`
      automation coverage.
- [x] Draw / unanimous / split / majority decision resolution. Implemented in
      `V2Combat` with `FV2CombatMMADecisionRequest`, judge-total aggregation
      from completed round scorecards, red / blue / draw judge verdicts,
      unanimous / split / majority / draw outcome classification, final
      scorecard surface metadata, resolver API coverage,
      `MMADecisionResolution_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.

### 12.7 Weight classes & rankings

- [x] Strawweight, Flyweight, Bantamweight, Featherweight, Lightweight,
      Welterweight, Middleweight, Light-Heavy, Heavyweight, Women's
      W/Fly/Bant/Feath. Implemented in `V2Combat` with
      `FV2CombatMMAWeightClassCatalog`, 13 source-controlled UFC weight-class
      specs, lower-exclusive / upper-inclusive pound boundaries, matchmaking
      bucket tags, MyCAREER track tags, resolver APIs for catalog lookup and
      eligible-class resolution, `MMAWeightClasses_V2_Contract.json`, CI
      validation, and `V2.Combat.Module` automation coverage.
- [x] Ranking table per weight class; affects matchmaking and MyCAREER §28.
      Implemented in `V2Combat` with `FV2CombatMMARankingsCatalog`, one
      champion-plus-top-15 table per UFC weight class, ranking-point validation,
      title-contender windows, matchmaking rank-window resolver outputs, title
      shot / champion-defense candidate handling, MyCAREER ranking target
      resolver paths for unranked entry fights, contender climbs, title shots,
      and champion defenses, `MMARankings_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.

### 12.8 Alternate MMA rulesets

- [x] **Unified Rules (UFC default)** — standard 3 × 5 rounds, 5 × 5 for title
      bouts; standard fouls (eye pokes, groin strikes, downed-opponent knees,
      soccer kicks, 12-6 elbows pre-rules change, fence grabs). Implemented in
      `V2Combat` with `FV2CombatMMAUnifiedRulesConfig`, 3 x 5 non-title and 5 x
      5 title-bout round scheduling, standard-foul evaluation for eye pokes,
      groin strikes, downed-opponent knees, soccer kicks, pre/post-rule change
      12-6 elbows, and fence grabs, resolver APIs,
      `MMAUnifiedRules_V2_Contract.json`, CI validation, and `V2.Combat.Module`
      automation coverage.
- [x] **Pride Rules** — open-weight option, two-round structure (10 + 5), no
      elbows on ground, knees / soccer kicks / stomps to grounded opponent
      legal, yellow-card warning for inactivity, judges score whole-fight not
      round-by-round. Implemented in `V2Combat` with
      `FV2CombatMMAPrideRulesConfig`, open-weight 10+5 round scheduling,
      grounded-strike legality evaluation for grounded elbows, knees, soccer
      kicks, and stomps, yellow-card inactivity warnings, whole-fight scoring
      policy tags, resolver APIs, `MMAPrideRules_V2_Contract.json`, CI
      validation, and `V2.Combat.Module` automation coverage.
- [x] **ONE Championship Rules** — weight check / hydration tests, 3 × 5 rounds,
      no elbows to head on ground option, half-guard down-kick rules.
      Implemented in `V2Combat` with `FV2CombatMMAOneRulesConfig`,
      hydration-gated weigh-in checks using a 1.025 urine-specific-gravity
      threshold, catchweight eligibility, 3 x 5 round scheduling,
      grounded-head-elbow option evaluation, half-guard down-kick legality for
      body / leg targets and illegal head / outside-half-guard cases, resolver
      APIs, `MMAOneChampionshipRules_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] **Bare-Knuckle (BKB)** — no gloves, fast-cut model, 2-minute rounds,
      collar-and-elbow start, 10-count knockdown. Implemented in `V2Combat` with
      `FV2CombatMMABareKnuckleRulesConfig`, no-glove equipment validation
      requiring wrapped bare hands, fast-cut model with doctor-check and
      fight-ending thresholds, 5 x 2-minute round scheduling, collar-and-elbow
      start positioning, 10-count knockdown resolution, resolver APIs,
      `MMABareKnuckleRules_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] **Submission-Only / Grappling Mode** — sub-only match (no strikes),
      training surface (gi / no-gi), point system (IBJJF / EBI overtime option).
      Implemented in `V2Combat` with `FV2CombatMMAGrapplingModeConfig`,
      strike-disabled submission-only action gating, gi / no-gi training surface
      resolver with grip-control scalars, IBJJF 2/2/3/4 point scoring, EBI
      overtime control windows for back control / armbar starts, resolver APIs,
      `MMAGrapplingModeRules_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] **Knockout-Only Mode** — strikes only, takedowns disabled. Implemented in
      `V2Combat` with `FV2CombatMMAKnockoutOnlyModeConfig`, strikes-only action
      gate, takedown / submission / clinch / ground-control rejections,
      head/body/leg strike damage scalars, KO / TKO finish resolver, resolver
      API, `MMAKnockoutOnlyMode_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] **Foul system** — eye pokes, groin strikes, illegal blows trigger point
      deductions; doctor stoppage extended for accidental fouls. Implemented in
      `V2Combat` with `FV2CombatMMAFoulSystemConfig`, eye-poke / groin-strike /
      illegal-blow foul evaluation, intentional-foul point deductions,
      accidental-foul doctor stoppage, recovery-pause and no-contest flags,
      resolver API, `MMAFoulSystem_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` automation coverage.
- [x] **Point deduction UI** — referee animation + on-screen warning + judge
      scorecard reflection. Implemented in `V2UI` with
      `FV2MMAPointDeductionOverlaySpec`, `FV2MMAPointDeductionScorecardRow`,
      `UV2MMAPointDeductionOverlay`, referee animation cue binding, center HUD
      warning text, three-judge scorecard reflection, match HUD viewmodel
      bindings, `MMAPointDeductionUI_V2_Contract.json`, CI validation, and
      `V2.UI.Module` automation coverage.

### 12.9 Hype / momentum / damage-state visualization

- [x] Per-fighter facial damage state (cuts above eye, swollen cheekbone, bloody
      nose) progressing during match; persists for short period after doctor
      check; affects vision (slight HUD vignette on cut-eye side). Implemented
      with `FV2CombatMMAFacialDamageRequest`, per-region cuts above eye /
      swollen cheekbone / bloody nose progression, simultaneous cut / cheek /
      nose fighter state, doctor-check persistence, cut-eye HUD vignette
      binding, `UV2MMAFacialDamageVignetteOverlay`,
      `MMAFacialDamageState_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` and `V2.UI.Module` automation coverage.
- [x] Body damage state (bruising on hit limb, redness on body strikes).
      Implemented with `FV2CombatMMABodyDamageRequest`, bruising on hit limbs,
      redness on torso body strikes, simultaneous bruising / redness fighter
      state, material visual-zone tags, `UV2MMABodyDamageIndicatorOverlay`,
      `MMABodyDamageState_V2_Contract.json`, CI validation, and
      `V2.Combat.Module` and `V2.UI.Module` automation coverage.
- [x] Hype meter (out-of-cage cinematic) — opponent KOs / signature finishes
      raise hype shown to crowd. Implemented with
      `FV2CinematicHypeMeterRequest`, opponent KOs / signature finishes raising
      deterministic crowd hype tiers, reduced-motion-safe crowd-only fallback,
      replay-safe out-of-cage UFC crowd cutaway routing, `UV2HypeMeterOverlay`,
      match HUD viewmodel binding, `HypeMeter_V2_Contract.json`, CI validation,
      and `V2.Cinematics.Module` and `V2.UI.Module` automation coverage.

---

## 13. Weapon Combat (Soul Calibur Inspired)

### 13.1 8-way run

- [x] Free 8-way movement on ring plane; sidestep doubles as evasion (avoids
      vertical attacks). Implemented by deterministic `FV2CombatSCEightWayRun*`
      config/request/result types,
      `UV2CombatResolver::EvaluateSoulCaliburEightWayRun`, normalized diagonal
      ring-plane deltas, ring-boundary clamping, vertical-only sidestep evasion
      window, `SCEightWayRun_V2_Contract.json`, static checker, and focused
      combat automation coverage.
- [x] Vertical / horizontal / kick / guard button mapping (4-button SC).
      Implemented by dedicated `SCVerticalAttack`, `SCHorizontalAttack`,
      `SCKick`, and `SCGuard` Enhanced Input actions, source-controlled action
      catalog entries, `FV2SoulCaliburFourButtonMapping`,
      `UV2InputBlueprintLibrary::BuildSoulCaliburFourButtonMapping`, rebinding
      slot-table expansion, and focused input automation coverage.

### 13.2 Guard Impact

- [x] On precise block (1-frame just-guard window), trigger Guard Impact; stuns
      attacker for punish window. Implemented by `FV2CombatSCGuardImpact*`
      config/request/result types,
      `UV2CombatResolver::EvaluateSoulCaliburGuardImpact`, exact same-frame
      block timing, collision-event application, rollback sim attacker stun, and
      client/server prediction parity.
- [x] Repel / Deflect variants (high / mid / low). Implemented by
      `EV2CombatSCGuardImpactVariant`, `EV2CombatSCGuardImpactHeight`,
      height-match validation, accepted reason tags for Repel / Deflect at high,
      mid, and low, and focused combat automation coverage.
- [x] Resist Impact (Soul Charge counter to GI). Implemented as a Soul
      Charge-gated incoming Guard Impact counter that resolves as Clash, spends
      configured Soul Charge, stuns the incoming GI attacker, and is covered by
      rollback and client/server parity tests.

### 13.3 Weapons

- [x] Per-fighter primary weapon with reach, damage class, swing speed.
      Implemented through `FV2FighterPrimaryWeaponSpec` on `UV2FighterData`,
      mirrored in deterministic SoulCalibur combat weapon evaluation, and
      covered by gameplay asset validation plus combat automation.
- [x] Weapon durability optional (off by default; on for "weapon master" mode).
      Implemented by `EV2CombatSCWeaponDurabilityMode` defaulting to `Disabled`,
      `WeaponMaster` per-hit durability loss, rollback state tracking, and
      client/server parity checks.
- [x] Weapon disarm condition (rare; cinematic): when triggered, fighter fights
      bare-handed at penalty. Implemented by cinematic and durability-break
      disarm paths, bare-handed reach/damage penalty resolution, rollback disarm
      state, and focused automation.

### 13.4 Ring-out

- [x] Ring perimeter detection; knocking opponent over edge = instant round win.
      Implemented by `UV2CombatResolver::EvaluateSoulCaliburRingOut`, perimeter
      breach detection, collision-event application, and rollback
      instant-round-loss state.
- [x] Resist Ring-Out: defender input string within 1 second can save (last-
      second teleport, ring-out reversal anim). Implemented with a 60-frame
      Guard/Back/Guard resist sequence, recovery teleport inside the ring, and
      rollback/client-server parity.
- [x] Per-stage ring-out rules: walled stages disable ring-out, ring-out stages
      reward extra points. Implemented by `EV2CombatSCRingOutStageRule`,
      walled-stage rejection, score bonus propagation, and focused automation.

### 13.5 Soul Charge / Critical Edge

- [x] Soul Charge meter (built from offense); activate to enter Soul Charge
      state with empowered moves, decay over 15s. Implemented with
      `FV2CombatSCSoulCharge*`, offense hit/block gain, full-meter activation,
      900-frame decay, empowered move scalars, rollback state decay, and
      client/server parity.
- [x] Critical Edge: cinematic super (one-bar consume), invincible reversal
      variant. Implemented with `FV2CombatSCCriticalEdge*`, one-bar spend,
      `UV2_Ability_Super_SCCriticalEdge` meter/cinematic profile,
      `Seq.SC.CriticalEdge`, invincible reversal frames, rollback application,
      and focused automation.

### 13.6 Create-a-Soul

- [x] Full weapon-style selection (Mitsurugi / Nightmare / Voldo / Ivy / Tira /
      Talim / Yoshimitsu / etc. movesets), discipline-mix not allowed except in
      Custom Style mode; Custom Style accepts mixing with stat penalties per the
      SC4/SC6 rule. Implemented with a `CreateASoul` weapon-style catalog,
      standard `WeaponStyle` rejection for mixed disciplines, `CustomStyle`
      mixed-moveset resolution with stat scalars, customization-component
      storage, CI contract validation, and Gameplay automation.

### 13.7 Reversal Edge (SCVI)

- [x] Defensive RPS clash: defender holds Guard + button on incoming attack to
      initiate a Reversal Edge clash — both fighters enter a slow-mo wind-up;
      each picks one of three actions (Vertical / Horizontal / Kick) that
      counters the others rock-paper-scissors. Soul Charge state alters
      outcomes; certain moves are unblockable through Reversal Edge. Implemented
      with `FV2CombatSCReversalEdge*`, guard+button incoming-attack gates,
      deterministic Vertical/Horizontal/Kick RPS, Soul Charge tie/bonus
      handling, and unblockable-through-RE rejection.
- [x] Reversal Edge meter cost (one bar) and cooldown. Implemented through
      accepted collision payloads, defender meter spend, rollback cooldown
      state, prompt timer ticking, and client/server parity checks.
- [x] Cinematic camera during clash; on-screen prompt with timer; opponent sees
      same prompt (online: deterministic seed for RE outcome roll). Implemented
      with `Seq.SC.ReversalEdge`, `SlowMo.SC.ReversalEdge`,
      `FV2SCReversalEdgePromptSpec`, `UV2SCReversalEdgePromptOverlay`, and
      deterministic seed validation in rollback and host confirmation.

### 13.8 Lethal Hit / Critical Finish

- [x] **Lethal Hit** (SCVI): conditional move attribute (e.g., on whiff-punish,
      on Reversal Edge win, on stunned opponent) that triggers extended hit
      stun + extra damage + slow-mo for combo extension. Per-fighter Lethal Hits
      documented in move list. Implemented through `FV2CombatSCLethalHit*`,
      per-fighter move-list entries, deterministic
      WhiffPunish/ReversalEdgeWin/StunnedOpponent gates, rollback slow-mo state,
      and client/server parity checks.
- [x] **Critical Finish** (SC IV): with full Soul Gauge and opponent guard
      depleted, trigger cinematic finisher that ends the round instantly.
      Implemented through `FV2CombatSCCriticalFinish*`, `Seq.SC.CriticalFinish`,
      full-gauge/guard-crush gates, instant round-end rollback state, Soul Gauge
      consumption, and host-confirmed cinematic parity.

### 13.9 Reversal mind-game cross-references

- [x] DOA-style Hold / Strike / Throw triangle (see §9.1.1) optional layer for
      Soul Calibur ruleset when "Reversal-Heavy" mode toggle is active.
      Implemented with the SoulCalibur-only
      `bSoulCaliburReversalHeavyModeEnabled` ruleset toggle, resolved defense
      option mask opt-in for `HoldStrikeThrowTriangle`, existing deterministic
      triangle evaluation / rollback fields, SC-only validation coverage,
      `SCReversalHeavyTriangle_V2_Contract.json`, and
      `check-v2-sc-reversal-heavy-triangle.py`.

---

## 14. Five-Style Street Combat (Def Jam Inspired)

### 14.1 Style families

- [x] Streetfighting, Wrestling, Martial Arts, Kickboxing, Submissions.
      Implemented as canonical `EV2DefJamStyleFamily` values and required
      `Style.*` tags on `UV2StyleData`.
- [x] Per-style attribute curves, signature moves, taunts, stances; player can
      equip 1-5 styles (FFNY allows mixing up to 5 styles with diminishing
      returns past 2). Implemented with `FV2StyleAttributeCurvePoint`,
      `FV2StyleSignatureMove`, `FV2StyleStanceDefinition`,
      `FV2StyleLoadoutDefinition`, canonical Def Jam stance tags, and
      deterministic 1.0 / 1.0 / 0.70 / 0.50 / 0.35 slot scalars.
- [x] Style-specific skill tree (§37.4). Implemented through per-family
      `FV2StyleSkillTreeDefinition` validation, required skill nodes, full
      five-style mixability checks, `DefJamStyleFamilies_V2_Contract.json`, and
      `check-v2-def-jam-style-families.py`.

### 14.2 Environmental finishers

- [x] Stage hotspots: subway track / electric fence / fire pit / glass wall /
      barbed wire / brick wall / bar counter / dumpster / car hood / wood crate
      / chain-link fence / arcade machine. Implemented as the twelve-entry
      `FV2CombatDefJamEnvironmentalHotspotDefinition` catalog with
      `EV2CombatDefJamEnvironmentalHotspotType` coverage validation.
- [x] Hotspot trigger: when opponent is stunned and within hotspot range,
      directional input + grapple button plays cinematic environmental finisher;
      damage tier major. Implemented through deterministic
      `FV2CombatDefJamEnvironmentalFinisherRequest` evaluation,
      `ApplyDefJamEnvironmentalFinisherResult`, rollback/client-server parity,
      and `DefJamEnvironmentalFinishers_V2_Contract.json`.
- [x] Crowd participation hotspots: opponent pushed into crowd ring may be
      shoved back with a hit, restoring momentum. Implemented with the
      `CrowdRing` hotspot path, shove-back damage/hitstun, attacker momentum
      restore, netcode coverage, and
      `check-v2-def-jam-environmental-finishers.py`.

### 14.3 Blazin' moves

- [x] Blazin' meter (4 segments) builds via crowd reaction + landed combos +
      hotspot use + taunts (style-specific). Implemented through deterministic
      `FV2CombatDefJamBlazinMeterRequest` events for `CrowdReaction`,
      `LandedCombo`, `HotspotUse`, and `Taunt`, with canonical `Style.*`
      multiplier handling and rollback meter-unit mapping.
- [x] Full Blazin' meter unlocks signature Blazin' move (per fighter), a
      cinematic combo-string finisher with style-specific animation. Implemented
      via `FV2CombatDefJamBlazinMoveDefinition`, `ApplyDefJamBlazinMeterResult`,
      style animation / combo-string ids, rollback resolution, client-server
      parity, and `DefJamBlazinMoves_V2_Contract.json`.
- [x] Blazin' meter drains on miss-hit and on taking damage. Implemented with
      `SignatureMoveMiss` and `TakingDamage` Blazin meter events, attacker /
      defender targeting, rollback coverage, and
      `check-v2-def-jam-blazin-moves.py`.

### 14.4 Crowd & Momentum

- [x] Crowd is a participant: stylized hits + hotspot use builds momentum,
      momentum drives Blazin' fill and damage modifier. Implemented through
      deterministic `FV2CombatDefJamCrowdMomentumRequest` events for stylized
      hits, hotspot use, crowd-participant hotspots, and taunts, with rollback
      Blazin meter application, damage-modified collision resolution,
      client-server parity, and `DefJamCrowdMomentum_V2_Contract.json`.

### 14.5 Custom soundtrack

- [x] In-match dynamic music: each fighter has a theme; mid-match the losing
      fighter's theme fades, winning fighter's theme climbs. Hot-streak
      activates an aggressive remix layer; KO state plays victor's hook line.
      Implemented through `FV2DefJamFighterThemeMusicProfile`,
      `FV2DefJamDynamicMusicMixRequest`, subsystem evaluation, and
      `DefJamCustomSoundtrack_V2_Contract.json`.
- [x] User-imported music support on PC / consoles where TRC allows; Spotify /
      Apple Music integration where licensed. Implemented through
      `FV2CustomSoundtrackPolicy`, local-format and console-TRC gates, licensed
      Spotify / Apple Music provider checks, personal-use safeguards, and
      `check-v2-def-jam-custom-soundtrack.py`.

---

## 15. Environmental Combat & Interactive Arenas

- [x] Stage zones tagged: `Wall`, `Hazard`, `BreakablePane`, `Floor1`, `Floor2`,
      `Ceiling`, `Ledge`, `Crowd`, `Hotspot.<id>`, `Cage`. Implemented through
      `FV2CombatInteractiveArenaZoneDefinition`, `EV2CombatArenaZoneType`, the
      default fourteen-zone catalog, required-tag validation, and
      `InteractiveArenas_V2_Contract.json`.
- [x] Wall splat / wall bounce (Tekken / SF). Implemented through
      `FV2CombatInteractiveArenaEventRequest` actions for Tekken wall splat and
      SF wall bounce, with collision-event hitstun / untechable propagation.
- [x] Hazard damage tics (MK acid pit, Hellfire, electric floor). Implemented as
      `HazardTick` arena events with deterministic damage-per-tick and rollback
      damage/hitstun coverage.
- [x] Breakable panes (Tekken stage break to new floor; SC pillar break to lower
      level). Implemented as `BreakablePaneTransition` events that destroy the
      pane, queue a floor-transition cinematic, and target the next arena floor.
- [x] Multi-floor stages with transition cinematic (MK / Tekken style).
      Implemented with `Floor1` / `Floor2` transition zones and
      `MultiFloorTransition` arena events.
- [x] Hotspot finishers (§14.2). Implemented with `Hotspot.<id>` zone support,
      Def Jam ruleset gating, hotspot-use consumption, finisher input checks,
      and cinematic queueing.
- [x] Cage / HIAC / Tables / Ladder rigs for WWE stipulations (§11.5).
      Implemented through `EV2CombatArenaRigType` and WWE rig interaction events
      for `Cage`, `HIAC`, `Tables`, and `Ladder` zones.
- [x] Octagon for UFC (§12.4). Implemented as an `Octagon` boundary zone with
      UFC inside-octagon / near-cage interaction gating.
- [x] Wandering crowd in Def Jam clubs with reactive AI (§14.4). Implemented as
      `Crowd` zones with Def Jam wandering AI gates, heat-based reaction tags,
      and deterministic crowd bump damage.
- [x] Stage Fatalities (MK): finisher prompt in finisher window playing
      stage-specific cinematic where opponent is dispatched into / by the
      environment. Implemented with MK-only `StageFatality` arena events that
      require KO, finisher window, matched input, prompt display, and
      stage-specific cinematic ids.

---

## 16. Fatalities, Brutalities, Friendships, Mercies (MK)

### 16.1 Finisher window

- [x] On match-decisive KO during MK ruleset, enter `FinisherWindow` state;
      announcer says "Finish Him!" with stylized text overlay; defender stuck in
      idle/sway loop. Implemented via `FV2MKFinisherWindowRequest/Result`,
      `EvaluateMKFinisherWindow`, and automation validating `Finish Him!`,
      `UI.MK.Finisher.FinishHim`, and `Anim.MK.Defender.IdleSway`.
- [x] 5-second input window; player executes finisher input string. Implemented
      as a deterministic 300-frame window and `EvaluateMKFinisherExecution`.
- [x] If window expires, default victory anim plays. Expired executions resolve
      `EV2MKFinisherType::DefaultVictory`.

### 16.2 Fatalities

- [x] Per-fighter Fatality 1 + Fatality 2 minimum; per-stage Stage Fatality
      using the arena-defined finisher. `BuildDefaultMKFinisherRosterKit`
      enforces Fatality 1, Fatality 2, one `StageFatality`, and four Brutalities
      per fighter.
- [x] Each Fatality is a `UDA_Finisher` with cinematic sequence ref, gore tier
      `Extreme`, specific input string (e.g., D,F,D,F+Square at sweep range).
      `FV2MKFinisherDefinition` validates `UDA_Finisher`, cinematic refs,
      `Extreme` gore, and authored input/range metadata.
- [x] X-Ray skeleton rendering (§45.3) for bone-break shots. Fatality and Stage
      Fatality definitions require X-Ray render packets and skeleton rendering.

### 16.3 Brutalities

- [x] In-flow finishers triggered by satisfying a hidden condition during a move
      (e.g., land 11 Spinning Bird Kicks then end with this move at low opponent
      HP). Replace normal KO with brutal kill animation. Implemented as in-flow
      `Brutality` execution that checks hidden condition, move count, low-HP
      threshold, and last-hit move before replacing the KO.
- [x] At least 4 Brutalities per fighter; conditions exposed in the Krypt (§22)
      when unlocked. `BuildDefaultMKBrutalityTracker` exposes exact unlocked
      Krypt condition text for all four Brutalities.

### 16.4 Friendships / Mercies / Babalities

- [x] Friendships: non-violent humorous finisher; toggleable per fighter.
      Implemented with non-violent `Friendship` definitions and per-fighter
      roster-kit toggles.
- [x] Mercies: restore some HP to the opponent and continue (sets up Brutality
      opportunity). Mercy execution restores 20% HP and marks a Brutality
      opportunity.
- [x] Babalities: turn opponent into infant — toggleable per fighter.
      Implemented with per-fighter `Babality` toggles and execution result.

### 16.5 Toggle / parental control

- [x] Settings toggle: Disable Fatalities; Gore Level (Off / Mild / Standard /
      Extreme). Implemented with `FV2MKParentalFinisherPolicy`.
- [x] Per-region default override (e.g., Germany defaults to Mild) wired through
      localization (§54). Region defaults use `Localization.Region.Defaults`;
      Germany/DE/DEU clamp gore to `Mild`.

### 16.6 Konsumables (single-use boosters)

- [x] **Konsumables** (MKX-style): single-use stat boosters for Tower mode and
      Krypt — Health Refill, Stamina Refill, Smoke Bomb (escape juggle),
      Lightning Strike (damage payload), Crystal Shard (extra meter on
      activation), Decoy (one whiff-immune frame), etc. Implemented in
      `BuildDefaultMKKonsumableCatalog` and `EvaluateMKKonsumableUse`.
- [x] Konsumable inventory persisted in save (§47); earnable via Tower clears,
      Krypt chests, Daily Challenges, never premium-currency-only. Save support
      added with `FV2PersistentKonsumableInventoryRecord` on `UV2SaveGame`.
- [x] Per-Tower konsumable allowance configurable in Towers of Time modifiers
      (cross-ref §21.2). Use requests enforce `TowerAllowanceRemaining`.

### 16.7 Augments (MK11-style passive modifiers)

- [x] **Augments**: equippable passive modifiers per fighter (e.g., +5% damage
      on Fatal Blow, -10% takedown stamina cost, +1 frame on backdash invuln)
      earned via match play / Tower / Krypt. Implemented with
      `FV2MKAugmentDefinition` and default augment catalog.
- [x] Per-fighter augment slot count tied to Character Mastery (§61.5);
      ranked-eligible only when restricted to "Tournament Augments" subset
      authored for balance. Loadout evaluation derives slots from mastery and
      rejects non-tournament augments in ranked queues.
- [x] Augment crafting at the Krypt Forge (§22) using Soul Fragments + Hearts +
      materials. Implemented with `EvaluateMKAugmentCrafting`.

### 16.8 Brutality Tracker

- [x] Per-fighter Brutality condition library shown after unlock in the Krypt
      (§22); each Brutality lists exact conditions (hold direction + held
      button, last-hit-must-be-X, frame-perfect requirement) and the tracker
      counts attempts / completions. Implemented with
      `FV2MKBrutalityTrackerLibrary`.
- [x] Brutality + Stage Brutality completion sticker on profile card (§47.2).
      Save support added with `FV2PersistentBrutalityTrackerRecord`.

### 16.9 Skin & cosmetic rarity tier

- [x] **Rarity tiers**: Common / Uncommon / Rare / Epic / Legendary / Mythic for
      skins, weapons (SC), banners, titles, emotes. Higher tier = lower drop
      probability in earned-reward pools, never paywall-only. Implemented via
      `EV2CosmeticRarityTier` and itemized rarity disclosures.
- [x] **Mythic Skin** flagship per fighter: 1 Mythic per fighter at launch with
      cinematic intro variant and exclusive finisher kit (cross-ref §72.3).
      Unlock condition: Character Mastery 30 + Side Story complete + 100 ranked
      wins with that fighter — published transparently. Implemented with
      `FV2MythicSkinUnlockRequirement`.
- [x] **Skin Rarity drop disclosure**: every loot-eligible source (Krypt chest,
      MyFaction pack, Battle Pass tier) lists exact per-tier probability
      percentages and itemized contents (cert + legal compliance, cross-ref
      §52.3). Implemented with exact 100%-summing drop disclosures.
- [x] **Per-fighter signature finisher kit** locked behind Mythic skin unlock —
      exclusive Fatality / Critical Edge / Rage Art variant cinematic +
      announcer line. The Mythic requirement links `SignatureFinisherKitId` and
      `CinematicIntroVariantId`.

Implementation contract:
`V2/ue/Content/V2/Cinematics/MKFinishers/MKFinishers_V2_Contract.json`;
CI/static coverage: `V2/ue/Tools/check-v2-mk-finishers.py`.

---

## 17. Super Moves: Critical Arts, Rage Arts, Critical Edge, Blazin'

- [x] Per-mode super grammar implemented via
      `FV2CombatSuperMoveGrammarEntry::BuildDefaultGrammar` and
      `FV2CombatSuperMoveActivationRequest/Result`:
  - SF: Critical Art (consumes 3 super stocks; cinematic camera; invincible on
    startup).
  - MK: X-Ray / Fatal Blow (Fatal Blow available at ≤ 30% HP, cooldown if
    blocked or missed).
  - Tekken: Rage Art (cinematic; activatable only in Rage state at low HP).
  - SC: Critical Edge (single-bar; invincible).
  - WWE: Finishing Move (cinematic camera; requires Finisher charge).
  - UFC: KO finish camera (auto on flash-KO).
  - DJ: Blazin' Move (cinematic; consumes Blazin' meter).
- [x] Universal Super-armor / super-invuln frame rules per move data, using
      `FV2CombatSuperDefenseFrameRule`, `UV2MoveFrameData::SuperDefenseFrames`,
      and `ResolveSuperDefenseAtFrame` validation.
- [x] Camera switch to super-cam during cinematic frames; HUD dims; opponent
      sound suppressed except for impact stems through
      `FV2SuperCinematicPresentationCue`,
      `BuildDefaultSuperCinematicPresentationCues`, and presentation tests.

Implementation contract:
`V2/ue/Content/V2/Combat/Super/SuperMoves_V2_Contract.json`; CI/static coverage:
`V2/ue/Tools/check-v2-super-moves.py`.

---

## 18. Match Rulesets & Stipulation Library

- [x] `UV2_Ruleset` (Primary Data Asset) fields: name, base mode (MK / SF /
      Tekken / WWE / UFC / SC / DJ), per-round time, rounds to win, health
      multiplier, drive/heat/hype/stun enabled, finisher window enabled,
      ring-out enabled, KO behavior, stipulations[] (DQ-on-weapon, no-DQ,
      submission-only, table-match, etc.), commentary deck ID, music deck ID,
      crowd reaction profile.
- [x] Ruleset library covering each game's primary modes plus crossover rulesets
      (e.g., "MK with SC ring-out"; "SF6 with Def Jam environment finishers").
      Each must be unique and shippable; no placeholder names.
- [x] Ruleset preview UI in match-setup (§46) showing rules diff vs. default.

Implementation contract:
`V2/ue/Content/V2/Combat/Ruleset/MatchRulesets_V2_Contract.json`; CI/static
coverage: `V2/ue/Tools/check-v2-match-rulesets.py`. Runtime coverage:
`UV2_Ruleset` derives from `UV2CombatRulesetData`, default library is built by
`BuildDefaultMatchRulesetLibrary`, and match setup consumes
`FV2MatchSetupRulesetPreviewSpec` from
`UV2UIBlueprintLibrary::BuildMatchSetupRulesetPreview`.

---

## 19. Arcade Mode

- [x] Classic 8-fighter ladder per selected ruleset; player vs. CPU ladder with
      mid-ladder cutscene at fights 4 and 7 (rival fight) and an end boss
      (sub-boss + final boss).
- [x] Per-fighter arcade ending: 60-second cinematic + 5 illustrated panels with
      narration; unlocked in Krypt / gallery on first completion.
- [x] Difficulty levels: Beginner / Easy / Medium / Hard / Very Hard / Master,
      with documented frame data on CPU reaction times for each.
- [x] Score system: per-fight grade (D/C/B/A/S) using time, damage taken, combo
      length, finisher used; cumulative arcade rank.
- [x] Online leaderboards for arcade time-trial and score modes.
- [x] Survivor Arcade (MK): infinite ladder with health carry-over and per-
      round modifiers.
- [x] Tower Arcade (Tekken Ghost Battle): randomly generated opponents using
      player-uploaded ghost data (§55.4).

Implemented in `V2Modes` via `FV2ArcadeModeCatalog`,
`FV2ModeCatalog::BuildDefaultArcadeModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/Arcade/ArcadeMode_V2_Contract.json`, and
`V2/ue/Tools/check-v2-arcade-mode.py`.

---

## 20. Story Mode (Cinematic, Branching)

- [x] Story spine: 12 chapters, ~10 hours, central crossover storyline unifying
      all seven games' tonal worlds. Avoid mortal-multiverse trope — use a
      Concordia-style federation-of-fighting-realms framing.
- [x] Per-chapter playable POV character with 3-5 fights and 2-4 cutscenes.
- [x] Branching: 3 major branch points; each branch swaps 1-2 chapters and
      yields a distinct ending (Light / Dark / Path-Three).
- [x] In-fight cutscenes (engine-real-time, no FMV) using Sequencer presets
      (§45.6).
- [x] QTE-style interactive cutscenes (Tekken 7 Heihachi-style) — frame- perfect
      prompts that change fight intro outcomes.
- [x] Cinematic finishers integrated as story beats (key fights end in Fatality
      / Critical Finish / Submission-tap / Pinfall-3 / Ring-out as narrative
      demands).
- [x] Replay any chapter at higher difficulty; New Game+ unlocks alternate
      costumes and bonus chapters.
- [x] Skip cinematic option (per-cutscene), with subtitle/transcript fallback.
- [x] Photo Mode entry point (§45.5) at any cutscene pause.

Implemented in `V2Modes` via `FV2StoryModeCatalog`,
`FV2ModeCatalog::BuildDefaultStoryModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/Story/StoryMode_V2_Contract.json`, and
`V2/ue/Tools/check-v2-story-mode.py`.

---

## 21. Tower / Tournament / Survivor Modes

### 21.1 Klassic Tower (MK)

- [x] Ladder of 10 fighters → mid-boss → final boss, ending cinematic.
- [x] Multiple variants: Novice, Warrior, Champion, Master, Endless, Survivor,
      Test Your Might, Test Your Sight.

### 21.2 Towers of Time (MK11)

- [x] Live-updating tower roster with daily / hourly / weekly towers, each with
      modifiers (frostbite ice every 3s, missile barrage, falling bombs, time
      skull buffs).
- [x] Modifier engine: data-driven tower modifier definitions that gameplay
      systems honor (extra hazard hitboxes, attribute multipliers, ability
      cooldown shifts).
- [x] Tower rewards: currency, koins, soul fragments, hearts, krystals, cosmetic
      items, Krypt keys.

### 21.3 Tournament mode

- [x] Single-elim, double-elim, round-robin, Swiss; up to 32 fighters.
- [x] Player + AI fill; spectate other matches in tournament; bracket UI.

### 21.4 Survivor mode

- [x] Infinite consecutive matches; carry-over HP; small heal between fights;
      track personal best.

### 21.5 Treasure Battle (Tekken-style)

- [x] **Treasure Battle** (Tekken 7-style): consecutive randomized matches with
      random-drop rewards per fight (alt costumes, customization parts, Fight
      Money, character mastery XP).
- [x] Streak modifiers: +1% loot quality per consecutive win, capped at 30%;
      reset on loss.
- [x] Per-tier ranks: Beginner / Apprentice / Disciple / Master / Grandmaster /
      Vanquisher / Destroyer / Conqueror / Berserker / Warlord / Overlord /
      Tekken King / True Tekken God / Tekken God Prime (Tekken-faithful naming,
      naming localizable).
- [x] Treasure Battle ranking on Profile Card (§47.2).

Implemented in `V2Modes` via `FV2TowerModeCatalog`,
`FV2ModeCatalog::BuildDefaultTowerModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/Tower/TowerTournamentSurvivor_V2_Contract.json`, and
`V2/ue/Tools/check-v2-tower-tournament-survivor.py`.

---

## 22. Krypt / Reward Vault (MK)

- [x] 3D crypt explorable in first-person (MK11 style) on a haunted island /
      crossover-realm hub; user navigates between chests, statues, and puzzles.
- [x] Currency system: Koins (gameplay), Hearts (Fatalities used), Soul
      Fragments (Brutalities used), Krystals (rare; premium currency regulated
      per §52).
- [x] Chest content table per location; chest contents include Fatalities,
      Brutalities, alt costumes, intro animations, victory poses, taunts, gear,
      concept art, music tracks, fighter intros.
- [x] Puzzle gates: shrine of bones (heart deposit), forge (craft gear from
      mats), seance (random-tier reward).
- [x] No real-money loot boxes; all premium currency offered for direct purchase
      with itemized contents (cert-friendly, §56).

### 22.5 Faction System (MKX-style)

- [x] At first launch, player chooses one of N factions (e.g., Lin Kuei, Black
      Dragon, Special Forces, Brotherhood of Shadow, White Lotus — naming
      derived from V2's crossover-realm lore).
- [x] Faction XP accrued per match (won / used finisher / hit a combo threshold
      / completed daily / completed tower); faction-wide leaderboard.
- [x] Faction-exclusive cosmetics, finishers, intro lines, banners, lobby
      emotes.
- [x] Weekly faction-vs-faction global event with rewards on top-faction win.
- [x] Faction switch cooldown (e.g., once per month) to prevent abuse.
- [x] Faction quest log: per-faction missions in Towers / Story / Online /
      Arcade that grant faction XP.

### 22.6 Konquest mode

- [x] **Konquest** (MK Deception-inspired): single-player adventure mode where
      the player explores the crossover-realm hub on foot, completes side
      quests, trains under faction masters, learns special move variations not
      available elsewhere.
- [x] Per-realm zones (5+); branching faction-specific story arcs (gain
      reputation with one faction at the cost of another).
- [x] In-Konquest combat in any of V2's rulesets depending on the master
      encountered.
- [x] Konquest unlocks: hidden costumes, alt-color slots, secret fighters (DLC),
      Augments (§16.7).
- [x] Konquest tied to overall Krypt progression and faction quest log.

### 22.7 Chess Kombat / Puzzle Kombat

- [x] **Chess Kombat** (MK Deception-style): turn-based grid where each piece is
      a fighter; capture resolves in real-time fight using current ruleset.
      Standard rules vs. blitz vs. Konquest-progressed.
- [x] **Puzzle Kombat** (MK Deception-style): Puyo-Puyo-meets-fighter — match-3
      chains deal damage to opponent's puzzle board; opponent's character HP
      drains from puzzle attacks; Brutality / Fatality cutaway on opponent KO.
- [x] Both modes ship as Game Feature Plugins; default-unlocked or Krypt-gated.

Implemented in `V2Modes` via `FV2KryptModeCatalog`,
`FV2ModeCatalog::BuildDefaultKryptModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/Krypt/KryptRewardVault_V2_Contract.json`, and
`V2/ue/Tools/check-v2-krypt-reward-vault.py`.

---

## 23. Battle Hub & Online Lobbies (SF6)

### 23.1 Hub world

- [x] Avatar-controlled lobby map: cabinet stations (Ranked / Casual / Custom /
      Tournament), Game Center (legacy arcade games §23.4), photo booth, DJ
      booth, mission boards, daily / weekly challenge kiosks, fighting ground
      entrance.
- [x] Hub capacity 100, auto-shard on cap; friends prioritized for same shard.
- [x] Hub HUD: matchmaking ticket persistent while player roams; notify on match
      found.

### 23.2 Avatar customization

- [x] Body morph sliders (face FACS, body shape, ethnicity-neutral skin tones
      across full spectrum), wardrobe (≥ 500 items at launch), poses, emotes.
- [x] Avatar fights: avatars can fight other avatars using styles built in World
      Tour (§24); custom moveset from learned skills.

### 23.3 Lobby types

- [x] Casual / Ranked / Custom Room (1v1, 2v2, 4-corner tournament, fight
      request).
- [x] Spectate seat-grab at any active match cabinet; reaction emotes.

### 23.4 Game Center arcades

- [x] Curated retro fighter mini-games installable in cabinets (e.g., original
      game prototypes shippable as collector content). Each cabinet is a
      separate world / mini-game implemented as a `UGameFeaturePlugin`.
      Implemented via `FV2HubArcadeMiniGameSpec` / `FV2HubArcadeCabinetSpec`,
      default Tekken Bowl and Test Your Strike cabinets, Krypt-gated Chess /
      Puzzle Kombat prototype cabinets, per-cabinet leaderboard and coin-input
      metadata, and `check-v2-hub-arcade-minigames.py`.

### 23.5 Fighter Coins shop & Avatar shop

- [x] **Fighter Coins shop**: in-Battle-Hub cosmetic shop selling fighter
      costumes, weapons (SC), alt-color packs, music tracks, taunts, titles.
      Fighter Coins earned via match play; premium currency (Drive Tickets) for
      direct purchase at transparent rates.
- [x] **Avatar shop**: separate inventory for Battle Hub avatar wardrobe, poses,
      emotes, hairstyles, tattoos, accessories.
- [x] Daily / weekly featured-item rotation; seasonal limited-time bundles.
- [x] Wishlist + bell-notification for restock.
- [x] Per-region pricing tiered with platform-store equivalence.

### 23.6 SF6 Character Episodes

- [x] Per-fighter **Character Episode**: short cinematic + 3-fight side story
      per roster character with unique premise and ending.
- [x] Character Episodes are stand-alone (not part of main Story); completion
      grants character mastery XP, alt-costume unlock, lore-page entries.

Implemented in `V2Modes` via `FV2BattleHubModeCatalog`,
`FV2ModeCatalog::BuildDefaultBattleHubModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/BattleHub/BattleHubOnlineLobbies_V2_Contract.json`, and
`V2/ue/Tools/check-v2-battle-hub-online-lobbies.py`.

---

## 24. World Tour Open-World Mode (SF6)

- [x] Open city Metro City (SF6 style) plus secondary city per branch (e.g.,
      Tokyo / Lagos / Rio / NYC / Las Vegas) — total 3 cities at launch.
- [x] Avatar-character third-person traversal: walk / run / parkour / vehicle.
- [x] Open NPCs offer side quests, training requests, fighter encounters (every
      roster member appears as a master to train under).
- [x] Master system: train under a fighter to learn their special moves; equip
      up to N learned moves on avatar.
- [x] Open-world combat: trigger fights with hostile NPCs (street thugs, rival
      students, story bosses); fights enter ruleset-specific mode.
- [x] Mini-games and side activities (gym, dojo, photo missions, run-
      challenges).
- [x] Day/night cycle, weather, dynamic events.
- [x] Save / fast-travel / quest log / map / inventory.

### 24.1 Vehicles & traversal

- [x] **Vehicle library**: motorcycle, sports car, hover-board (sci-fi master),
      classic sedan, taxi, drift car, parkour-board (skateboard); per-vehicle
      handling profile (top speed, acceleration, drift, jump arc).
- [x] **Vehicle missions** mini-mode: street race (per-city circuit), delivery
      quest, chase quest, drift challenge.
- [x] **Vehicle customization**: per-vehicle paint job + decal painter
      (cross-ref §37.3) + body kit + wheels + license plate; saved per account;
      shareable code.
- [x] **Vehicle-as-Def-Jam-cinematic-finisher** legacy reference: rare
      env-finisher uses a parked vehicle as the finisher prop (Def Jam- style).

### 24.2 World Tour social hub

- [x] **Player apartments** as customizable hub (Def Jam-aesthetic): wall tag
      display (cross-ref §35.3 graffiti tag), trophy showcase, photo- mode
      capture gallery, friends-can-visit toggle.
- [x] **Per-city neighborhood** progression unlocks (gentrified vs underground
      tier).

### 24.3 Master training depth

- [x] **Per-master training storyline**: 3-5 missions per roster fighter
      teaching their signature moves; completion unlocks their moveset for
      avatar.
- [x] **Master relationship tier** (Acquaintance / Student / Confidant /
      Inheritor): determines avatar's access to advanced moves + finishers.

Implemented in `V2Modes` via `FV2WorldTourModeCatalog`,
`FV2ModeCatalog::BuildDefaultWorldTourModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/WorldTour/WorldTourOpenWorld_V2_Contract.json`, and
`V2/ue/Tools/check-v2-world-tour-open-world.py`.

---

## 25. Tekken Force / Side-Scroller Brawler Mode

- [x] Side-scrolling 3D beat-em-up (Tekken 3 / Tekken Force / The Devil Within
      hybrid).
- [x] Stage progression: 4 stages × 5 sub-areas per chapter; 3 chapters
      shippable.
- [x] Enemy variety: grunts, brutes, mini-bosses, stage bosses (roster
      fighters).
- [x] Pickup items: HP packs, attribute boosts, weapons (knife, pipe, shotgun
      for cinematic moments), keys.
- [x] Co-op 2-player local + online.
- [x] Score-attack leaderboards.

Implemented in `V2Modes` via `FV2TekkenForceModeCatalog`,
`FV2ModeCatalog::BuildDefaultTekkenForceModeCatalog`,
`UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/TekkenForce/TekkenForceSideScrollerBrawler_V2_Contract.json`,
and `V2/ue/Tools/check-v2-tekken-force-side-scroller.py`.

---

## 26. Devil Within / 3rd-Person Action-Adventure

- [x] 3rd-person action-adventure (Tekken 5 Devil Within style).
- [x] Single hero (selectable from approved roster slots) traversing a
      multi-level dungeon: combat + light platforming + boss encounters.
- [x] Devil form transformation (per-protagonist) with flight, fireball ranged
      attacks, and supernatural finishers.
- [x] Camera: free 3rd-person; lock-on toggle.

Implemented in `V2Modes` via `FV2DevilWithinModeCatalog`,
`FV2ModeCatalog::BuildDefaultDevilWithinModeCatalog`,
`UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/DevilWithin/DevilWithinActionAdventure_V2_Contract.json`,
and `V2/ue/Tools/check-v2-devil-within-action-adventure.py`.

---

## 27. WWE Universe Mode

### 27.1 Universe core

- [x] Booker simulation: weekly TV shows (Raw / SmackDown / NXT / AEW-
      equivalents) + monthly PPV, with show structure (matches + segments +
      entrances).
- [x] Auto-booking AI + manual override per show, per segment.
- [x] Rivalry generator: drives angles (heated promo segment + ring confront +
      run-in + match stipulation escalation) over 1-12 weeks.
- [x] Champion management (per-brand championships, defense intervals, contender
      ranking).
- [x] Roster trades, contracts, brand splits.
- [x] Real-time injury / suspension events that affect bookings.
- [x] Simulate option (skip matches with auto-resolution honoring fighter stats,
      momentum, rivalry intensity).

### 27.2 Showcase mode (2K Showcase-style)

- [x] **Showcase**: themed career-retrospective curated season per launch —
      celebrate a specific original or licensed fighter's career by playing the
      most-iconic matches of their canon in chronological order, with narrative
      voice-over (commissioned or in-character).
- [x] Per-match objective system (mirror real-life iconic spots; objective list
      e.g., "Land 3 super-kicks before 5-minute mark", "Execute a ladder leap
      from top rope") rewards completion bonus.
- [x] In-engine cinematic re-creations (V2 doesn't ship licensed real-world
      archival footage at launch unless contracted; in-engine renders only).
- [x] Launch Showcase honors at least one cross-universe fighter (e.g., an
      original character) with an authored career arc.

### 27.3 Slammys (Year-End Awards)

- [x] **Slammys**: end-of-Universe-year award ceremony with award categories
      (Match of the Year, Rivalry of the Year, Promo of the Year, Newcomer of
      the Year, etc.) auto-computed from Universe stats.
- [x] Player voting option for live multi-player Universes.
- [x] Slammys cinematic with photo-mode capture moment for winners.

### 27.4 Run-in / Manager / Interference

- [x] **Run-in interference**: scripted or rival-tagged event triggers a
      non-legal participant entering the ring; targeted character is laid out
      via finisher; match outcome modified per stipulation.
- [x] **Manager outside ring**: per-fighter optional manager actor (one slot);
      animation set for cheering / distraction / interference; manager can be
      ejected by ref for repeat interference.
- [x] **Springboards / dives** from outside ring: top-rope dive, apron attack,
      dive-through-ropes (Tope Suicida), running plancha; per- fighter signature
      dive animation.

### 27.6 Per-show pyro / stage / video wall editor

- [x] **Per-show pyro editor** (WWE Universe): authored pyro patterns per show /
      per PPV / per entrance with timing curves + safety zones.
- [x] **Per-show stage / set editor**: modular stage builder per brand (Raw /
      SmackDown / NXT / PPV / indie hall) with ramp / curtain / tron / aisle /
      lighting rig.
- [x] **Custom video wall content authoring**: per-show pre-recorded cinematic
      video panel content (e.g., for entrance video). Bring- your-own-video (PC)
      or in-engine cinematic Sequencer (consoles).
- [x] **Show preset library**: shareable per-show packages with stage + pyro +
      lighting + video wall + commentary deck saved together.

### 27.7 Per-superstar manager / valet customization

- [x] **Per-fighter manager / valet** slot: optional character actor
      accompanying the fighter to ring; cosmetic / mic-time-interference role;
      selected from CAW pool or curated NPC list.
- [x] **Manager animations**: cheering on the apron, distracting the ref,
      handing weapon at apron, low-blow interference, mic-grab cinematic.
- [x] **Manager-fighter relationship**: ally / mentor / spouse / valet / tag
      partner — drives per-segment animation choices and crowd reactions.
- [x] **Manager ejected by ref**: cinematic for repeated interference;
      stipulation-aware (Hardcore allows; standard match enforces).

### 27.5 Crowd-dive / Item-Pit ringside

- [x] **Crowd dive**: top-rope diving move onto crowd-pit area; cinematic camera
      ride; opponent damage scaling tied to height + speed.
- [x] **Item pit at ringside**: chairs, tables, ladders, kendo sticks, drinks
      (water bottle splash for hardcore matches), brass knuckles hidden under
      apron, championship belt drop.

### 27.8 Sports Entertainment vs Simulation toggle

- [x] **Match-style toggle**: Sports Entertainment (broadcast-flavor: bigger
      crowd reactions, more cinematic camera cuts, generous combo windows,
      dramatic finisher prompts, faster pin/sub mini-game) vs Simulation
      (gritty: tighter input windows, longer match duration, stamina-realistic,
      slower momentum build, realistic-physics-style moves).
- [x] **Per-match style preset** in match setup; per-Universe-show preset;
      per-MyCAREER career preset.
- [x] **Per-style commentary deck**: Sports Entertainment commentary leans
      broadcast-flavor; Simulation commentary leans technical- analyst.

### 27.9 Custom referee, commentary team, broadcast booth

- [x] **Custom referee CAW**: design ref outfit, ethnicity, body type, animation
      style; save to slot; per-show preset.
- [x] **Commentary team customization**: pick from 6+ commentary trios
      (per-show-themed) or design a CAW trio with selectable voice mix.
- [x] **Broadcast booth set design**: per-show set with logo + monitor array +
      announcer table + lighting rig.

### 27.10 Throwback content (licensed-conditional)

- [x] **Throwback content packs** (license-conditional plugin per §52.2): WCW /
      ECW / Indie federation throwback content (logos / themes / stipulations /
      arenas / commentary) shipped as separate DLC plugin where rights are
      cleared.
- [x] **Per-era preset** option: 80s / 90s / 2000s / modern aesthetic toggle for
      arenas + commentary + crowd density profile.

### 27.11 Submission timer vs damage submission toggle

- [x] **Submission resolution mode toggle**: Time-based (locked hold for N
      seconds = win), Damage-based (limb HP threshold = win), Stamina- race
      (both spend stamina to escape / hold), or Grid-based (WWE 2K15+ grid).
      Per-match preset; ranked-default Stamina-race; tournament- configurable.

### 27.12 Real-world celebrity guest appearances

- [x] **Per-season celebrity guest** appearances (license-conditional cross-ref
      §77.5 + §136): real-world celebrity character (musician / actor / athlete
      / cultural figure) added as time-limited DLC fighter / commentator /
      referee / manager. Per-celebrity NIL contract authored; removal clause if
      relationship ends.
- [x] **Guest commentator role**: real-world celebrity records guest- commentary
      lines for limited-time event (cross-ref §27.7 commentary).
- [x] **Guest manager / valet** appearance during cinematic events.
- [x] **Per-event celebrity tie-in marketing** with social-media coordinated
      drop.

Implemented in `V2Modes` via `FV2WWEUniverseModeCatalog`,
`FV2ModeCatalog::BuildDefaultWWEUniverseModeCatalog`,
`UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/WWEUniverse/WWEUniverseMode_V2_Contract.json`, and
`V2/ue/Tools/check-v2-wwe-universe-mode.py`.

---

## 28. MyCAREER (WWE + UFC GOAT Career)

### 28.1 WWE MyRISE / MyCAREER

- [x] Create-a-character entry; choose origin story (indie darling, NXT callup,
      real-life crossover, returning legend).
- [x] Branching narrative across 3-5 in-game years.
- [x] Build attributes via training mini-games and post-match XP.
- [x] Brand jumps, faction joins, championship runs.
- [x] Social media simulator: cut promos via text choices, accumulate followers,
      sponsorships, merch.

### 28.2 UFC GOAT Career

- [x] Create-a-fighter at amateur regional level; climb through Contender Series
      → UFC.
- [x] Camp management (gym selection, coaches, sparring partners,
      cardio/strength/skills training balance).
- [x] Weight cuts and injury management between fights.
- [x] Press conferences with promo trash-talk options.
- [x] Belt defenses, GOAT score, hall of fame on retirement.

### 28.3 Shared spine

- [x] Both modes feed into a `UV2_CareerProfile` save slot per fighter;
      portfolio of careers per save file.

### 28.4 UFC GOAT — extended

- [x] **Pre-fight presser dialogue tree**: branching trash-talk dialogue with
      rival fighters; per-line crowd / sponsor / media reaction affecting
      hype-meter (§12.9) and ticket sales (Fight Night §33).
- [x] **Weigh-in face-off cinematic**: ceremonial weigh-in + face-off pose;
      mini-QTE for nose-to-nose intensity (cosmetic-only).
- [x] **Bus ride / locker-room cinematic** pre-fight build-up (skippable).
- [x] **Camp facility upgrades**: invest career earnings into gym tier-up (Tier
      1-5) unlocking better sparring partners + recovery tools + sponsor
      visibility.
- [x] **Sponsor management**: per-fight sponsor slot allocation with brand-fit
      affecting payout and social-media-follower delta.
- [x] **Social media simulator** (UFC variant): per-post engagement + viral
      moment + scandal management; affects fight-week booking priority.
- [x] **Contract negotiation deeper**: per-contract length / pay-per-fight /
      pay-per-view share / belt clause / no-rematch clause; agent NPC negotiates
      on player's behalf.
- [x] **Camp injury risk** tied to training intensity; rest weeks bookable.

### 28.5 WWE MyCAREER / MyRISE — extended

- [x] **Per-segment promo writing tool**: write a custom mic promo via
      multiple-choice dialogue tree + crowd-reaction scoring.
- [x] **Backstage encounter** mini-events between matches (rivalries, betrayals,
      alliances).
- [x] **Per-show road-trip** cinematic between cities.
- [x] **Match objective bonus system**: secondary objectives per match (e.g.,
      "Do a top-rope dive", "Use a chair", "Pin via signature") grant career
      XP + sponsor visibility.

Implemented in `V2Modes` via `FV2MyCareerModeCatalog`,
`FV2ModeCatalog::BuildDefaultMyCareerModeCatalog`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/MyCareer/MyCareerWWEUFC_V2_Contract.json`, and
`V2/ue/Tools/check-v2-mycareer-wwe-ufc.py`.

---

## 29. MyGM / Promoter Mode

- [x] Player runs a brand (or independent promotion). Build a roster from a pool
      (cap-constrained), book weekly shows.
- [x] Booking sim: select matches, assign stipulations, place segments, target a
      rating goal. Each booking simulation resolves with rating / attendance /
      merch / ticket revenue.
- [x] Budget management: contract costs vs. revenue.
- [x] Rival GMs (3 AI opponents) compete for ratings each week; end-of- season
      trophy.
- [x] Multi-player MyGM (up to 4 GMs in shared promotion universe).

Implemented in `V2Modes` via `FV2MyGMPromoterModeCatalog`,
`FV2ModeCatalog::BuildDefaultMyGMPromoterModeCatalog`,
`FV2ModeCatalog::EvaluateMyGMWeeklyShow`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/MyGM/MyGMPromoter_V2_Contract.json`, and
`V2/ue/Tools/check-v2-mygm-promoter.py`.

---

## 30. MyFACTION (Card Collector)

- [x] Collect player-cards across roster + alternate-attribute variants
      (rarities Bronze → Silver → Gold → Diamond → Pink Diamond).
- [x] Build factions (5-fighter teams); compete in faction challenges and live
      events.
- [x] No real-money loot packs; pack purchases via gameplay-earned currency only
      at launch. Premium-currency offers always show pack contents per cert.
- [x] Online faction-vs-faction weekly tower.

Implemented in `V2Modes` via `FV2MyFactionModeCatalog`,
`FV2ModeCatalog::BuildDefaultMyFactionModeCatalog`,
`FV2ModeCatalog::EvaluateMyFactionTeamPower`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/MyFaction/MyFactionCardCollector_V2_Contract.json`, and
`V2/ue/Tools/check-v2-myfaction-card-collector.py`.

---

## 31. MyRISE / Persona Career Story

- [x] Story-driven career arc with two diverging branches (Hero / Heel) and
      multiple endings.
- [x] Voice-acted cutscenes for chapter milestones.
- [x] Persona unlocks: bespoke entrance, theme, signature moveset.

Implemented in `V2Modes` via `FV2MyRiseModeCatalog`,
`FV2ModeCatalog::BuildDefaultMyRiseModeCatalog`,
`FV2ModeCatalog::ResolveMyRiseEnding`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/MyRise/MyRisePersonaCareer_V2_Contract.json`, and
`V2/ue/Tools/check-v2-myrise-persona-career.py`.

---

## 32. Royal Rumble / Battle Royal

- [x] 30-entrant Royal Rumble ruleset: timed entry every 90s, eliminate by
      over-the-top-rope.
- [x] Multi-tier eliminations: outside-foot-touch counts; ledge-grab save
      window.
- [x] Endless Rumble / 50-fighter mode (modern WWE 2K).
- [x] MK-style 4-player Free-for-All Battle Royal with last-fighter- standing in
      a square arena.
- [x] UFC Tournament-style Battle Royal (4-fighter open) with cage entry.
- [x] Def Jam street battle royal (4 fighters in a club with environment
      finishers contributing to elimination order).

Implemented in `V2Modes` via `FV2BattleRoyalModeCatalog`,
`FV2ModeCatalog::BuildDefaultBattleRoyalModeCatalog`,
`FV2ModeCatalog::BuildRoyalRumbleEntrySchedule`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/BattleRoyal/RoyalRumbleBattleRoyal_V2_Contract.json`,
and `V2/ue/Tools/check-v2-royal-rumble-battle-royal.py`.

---

## 33. UFC Fight Night / Pay-Per-View Booking

- [x] Single-event mode: pick fighters, weight class, venue (Las Vegas, Abu
      Dhabi, NYC, Rio, London, Saudi Arabia), title status, broadcast package
      (PPV / Fight Night / Contender Series).
- [x] Walkout cinematic with fighter-chosen music, banner, corner-men.
- [x] Octagon presentation, Bruce-Buffer-style introductions (commissioned
      voice).
- [x] Post-fight interview with mic-drop emote, presser cinematic.

Implemented in `V2Modes` via `FV2UFCFightNightModeCatalog`,
`FV2ModeCatalog::BuildDefaultUFCFightNightModeCatalog`,
`FV2ModeCatalog::BuildUFCFightNightBookingPlan`, `UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/UFC/UFCFightNightPPV_V2_Contract.json`, and
`V2/ue/Tools/check-v2-ufc-fight-night-ppv.py`.

---

## 34. Chronicles of the Sword (Soul Calibur Strategy/RPG)

### 34.1 Chronicles of the Sword

- [x] Turn-based tactical strategy on hex grid: player commands a custom hero
      through a campaign of 20 missions.
- [x] Each mission ends in 1-3 individual fights resolved in the standard SC
      ruleset.
- [x] Hero leveling: stats, equipment, weapon mastery; party members.
- [x] Branching chapters with moral choices.

### 34.2 Weapon Master mode (SC II-inspired)

- [x] **Weapon Master** single-player adventure: chapter-based career across
      mythical realms; per-chapter weapon master encounter with authored fight
      conditions (rare weapons, gold-rule constraints, time limits, low-gravity,
      alt-rules); win unlocks rare weapons + alt colors + lore pages.
- [x] **Per-chapter modifier rules**: e.g., "fight blindfolded" (HUD disabled),
      "no-block" (block input disabled), "high-gravity" (jumps reduced),
      "lethal" (one-hit KO).
- [x] **Weapon Master ending illustration** per playthrough.

### 34.3 Tales of Souls (SCIII)-inspired choice driven mode

- [x] **Tales of Souls** choice-driven adventure: linear path with branch points
      where the player makes a moral or strategic choice that changes the next
      encounter; per-playthrough length 1-2 hours; per- path unique ending
      illustration.
- [x] **Per-path replay** for completionists; combinatorial ending gallery.

### 34.4 SC Mission Mode (SC IV-inspired)

- [x] **Mission Mode**: 80-100 SC-specific missions with weapon mastery
      objectives (e.g., "Win without using Critical Edge", "Win using only
      horizontal attacks", "Ring-out 3 times in a row"); per-mission reward +
      leaderboard.

Implemented in `V2Modes` via `FV2SoulCaliburStrategyRPGCatalog`,
`FV2ModeCatalog::BuildDefaultSoulCaliburStrategyRPGCatalog`,
`UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/SoulCalibur/SoulCaliburStrategyRPG_V2_Contract.json`,
and `V2/ue/Tools/check-v2-soulcalibur-strategy-rpg.py`.

---

## 35. Def Jam Story / Street Career

### 35.1 Core career

- [x] Single-player career: start as nobody at the parking-garage fight club,
      climb to club tournaments, signing with a crew (FFNY-style).
- [x] Crew offers from 5 distinct factions; choice locks signature character
      mentor and theme.
- [x] Story arc with rival betrayals, club venue progression (Underground →
      Mid-tier → Top-tier), girlfriend / partner sub-arc.
- [x] Custom soundtrack management: build a track playlist of unlocked /
      imported songs that play in your matches.
- [x] Reputation system: certain rivals only unlock after rep tier.
- [x] Shop system: clothes, jewelry, hairstyles, tattoos, vehicles, apartments
      (visual upgrades shown on hub).

### 35.2 Music label representation

- [x] **Music label signing**: per-career label affiliation (5 fictional labels
      at launch with distinct musical identity: East Coast Boom- Bap / West
      Coast G-Funk / Southern Trap / UK Grime / Conscious Rap). Each label has
      its own clothing line, theme music, signature moves, label-exclusive
      cosmetics.
- [x] **Label-to-label rivalry** drives Universe-style content + cross- label
      diss-track unlocks.
- [x] **Solo deal vs Group deal** branch: career path forks between solo artist
      (focuses on stardom) and crew artist (focuses on group dominance).
- [x] **Album release cinematic** at career milestones.

### 35.3 Per-fighter graffiti tag

- [x] **Per-fighter graffiti tag** (cosmetic): unique tag design per fighter;
      sprayed at stage hotspots on win; shareable + customizable via decal
      painter (§37.3).
- [x] **Graffiti tag-wall** on hub apartments; player's tag visible to friends
      visiting.
- [x] **Tag battle** mini-mode: 2 fighters compete to spray more tags in a stage
      in a timed round.

### 35.4 Per-club venue environmental finishers

- [x] **Per-venue authored env-finisher library**: each Def Jam club has a
      unique finisher set tied to that venue's hotspots (e.g., subway yard
      third-rail electrocution; rooftop ledge-throw; boxing-gym ring-rope
      wraparound; train-yard car-crush; basketball-court backboard-smash).
- [x] **Venue-finisher progression unlock** tied to crew rep tier.

### 35.5 Custom hip-hop mixer integration

- [x] Cross-ref §40.4 — DJ ruleset has dedicated custom-music mixer; Def Jam
      Story unlocks special label-licensed tracks as career rewards.

Implemented in `V2Modes` via `FV2DefJamStreetCareerCatalog`,
`FV2ModeCatalog::BuildDefaultDefJamStreetCareerCatalog`,
`UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/DefJam/DefJamStreetCareer_V2_Contract.json`, and
`V2/ue/Tools/check-v2-def-jam-street-career.py`.

---

## 36. Crew / Clique / Stable / Faction Mode

- [x] Cross-mode crew system: form a crew (player + 3-7 fighters) usable in
      Universe, MyGM, Def Jam Story, and online crew battles.
- [x] Per-crew theme, colors, entrance, hand sign emote.
- [x] Online crew vs crew battles (3v3 in best-of-five format).
- [x] Crew XP, crew leaderboard.

Implemented in `V2Modes` via `FV2CrewFactionModeCatalog`,
`FV2ModeCatalog::BuildDefaultCrewFactionModeCatalog`,
`UV2ModesBlueprintLibrary`,
`V2/ue/Content/V2/Modes/Crew/CrewFactionMode_V2_Contract.json`, and
`V2/ue/Tools/check-v2-crew-faction-mode.py`.

---

## 37. Create-a-Fighter / Create-a-Soul / CAW

### 37.1 Body & face

- [x] Body morph sliders (50+) wired to skeleton vertex deltas; presets per
      archetype.
- [x] Face sculpt (FACS-based, 100+ targets); face-from-photo import via
      MetaHuman pipeline (where licensed).
- [x] Heritage / ethnicity presets across a wide spectrum; gender expression
      independent of body archetype.

### 37.2 Wardrobe & accessories

- [x] Item library: tops, bottoms, footwear, outerwear, gloves, hats, masks,
      eyewear, jewelry, weapons, banners, scars, dirt, tattoos, decals
      (uploadable from custom-decal editor §37.3).

### 37.3 Decal editor

- [x] In-engine pixel/vector decal editor; layers, blend modes, projection
      mapping to body / clothing.
- [x] Upload to community gallery (moderated) — see §41.4.

### 37.4 Style assignment

- [x] Pick 1-5 fighting styles (Def Jam logic); each style assignment costs
      "style points" with diminishing returns.
- [x] Style mastery tree per equipped style (passive bonuses, signature moves,
      taunts).

### 37.5 Loadout & save

- [x] Save loadout to slot (10+ slots per user); export/import as code.
- [x] Apply loadout per mode separately (e.g., one for WWE MyCAREER, one for
      online battle hub).

### 37.6 Color Edit (16-slot per costume)

- [x] Per-costume material slot palette (Tekken 7 / SC6 / KOF style): 16
      addressable color slots per equipped item, each with full HSV picker +
      saved-palette gallery + per-account swatches.
- [x] Per-slot metallic / roughness / dirt / wear / emissive sliders.
- [x] Saved color schemes shareable as code; gallery in §41.4.
- [x] Logo / decal painter: vector primitives + curve tool + image upload
      (moderated); per-decal scale / rotate / blend mode / projection
      cylindrical-wrap; saved decals shareable.
- [x] Voice pitch slider for CAW (–12 to +12 semitones) over the selected voice
      bank.
- [x] Announcer / commentary pack selection (per locale) per fighter.

### 37.7 Body sculpt — extended

- [x] Bone-scale rig: head, neck, chest, waist, hip, thigh, calf, foot, upper
      arm, forearm, hand. Each axis independently scalable within rig limits.
- [x] Muscle definition per body region (chest, abs, biceps, back, glutes,
      thighs, calves) — separate from overall muscle mass.
- [x] Tattoo painter: layer system, blend modes, projection mapping, symmetric
      mirroring across the body axis.
- [x] Face-from-photo: optional MetaHuman pipeline pickup (where licensed per
      region). Manual sculpt always available.
- [x] Hair: groom-based principals, card-based volume options; per-strand color,
      highlights, dye gradients.

Create-a-Fighter / Create-a-Soul / CAW is implemented by
`FV2CreateFighterCAWCatalog`, the default builder in `V2Gameplay`, the expanded
face/body morph rig, per-slot roughness/emissive material parameters,
`V2/ue/Content/V2/Gameplay/Customization/CreateFighterCAW_V2_Contract.json`,
Gameplay module automation coverage, and
`V2/ue/Tools/check-v2-create-fighter-caw.py`.

---

## 38. Create-a-Moveset / Move Editor

### 38.1 Move editor core

- [x] Select base style and overlay individual moves from a curated catalog
      keyed by motion input slot (QCF+P, DP+K, Charge-D-U+K, etc.).
- [x] Per-move cost weight; total weight budget enforces balance.
- [x] Save moveset to `UDA_Moveset` instance; bind to CAW or to a roster fighter
      alt-loadout.

### 38.2 Variation system (MKX / MK11 Kustom Variations)

- [x] Per-fighter variation pool: 3-5 "ability cards" + 1-2 passive cards
      callable by ID; player builds a variation by selecting cards within a slot
      budget.
- [x] Per-card cost weight + mutually-exclusive groupings (e.g., "can't slot
      Teleport and Ice Clone in the same variation").
- [x] Preset variations: 3 designer-curated variations per fighter at launch
      (Tournament variants); 1 of them locked to be the "Tournament Edition"
      variation usable when Tournament Mode (§51) is on.
- [x] Variation save/load with shareable code; bind per mode.
- [x] Test: full move list + frame-data sheet exported per variation to
      `V2/balance/exports/<branch>/variations/`.

### 38.3 Style-mix presets (Def Jam Custom Style)

- [x] Drop-in preset library: "Brawler", "Striker", "Grappler", "Submission
      Specialist", "Weapon Master", etc., applying balanced style-point
      allocations + curated movesets.
- [x] Custom style allocations with diminishing returns past two styles
      (§14.1) + style-slot conflict warnings.

### 38.5 Custom move animator (CAW deep)

- [x] **Custom Move Animator**: in-engine keyframe / pose-blend editor for
      designing a custom WWE-style signature move on a CAW; works on the shared
      `SK_V2_Fighter_Base` skeleton; clip duration 1-4s; per-frame pose snap
      from existing animation library + offset bone deltas.
- [x] **Per-custom-move hitbox / hurtbox authoring** via in-engine widget;
      attaches to the animation timeline.
- [x] **Per-custom-move frame data** auto-derived (startup / active / recovery)
      from authored timeline; surfaced in frame data inspector (§6.3).
- [x] **Per-custom-move balance budget**: clip duration + damage + meter cost
      authored within bounds; budget linter blocks egregious authoring;
      ranked-eligibility flag (custom moves are casual-only by default; opt-in
      tournament-permitted subset via TO rule file).
- [x] **Per-custom-move sharing**: upload to community gallery (cross-ref §41.4)
      with moderation queue + ML-pre-filter pose-similarity check to avoid
      duplicate licensed-IP-move uploads.
- [x] **Per-custom-move replay** in Move List browser (cross-ref §46.7).

### 38.4 Kameo system (MK1-style partner assist)

- [x] Per-ruleset toggle for a single-summon Kameo partner: select a second
      fighter that exists only as a callable assist (3 button-mapped assists per
      Kameo, with cooldown and meter cost).
- [x] Distinct from full Tag (§64): Kameo never tags in for a full match;
      partner stays off-screen except during the assist animation.
- [x] Per-fighter Kameo movelist: signature attack (3 buttons × directional
      modifier = 12 callable actions). Curated subset of the fighter's moves,
      balance-budgeted.
- [x] Kameo health bar (depletes from being hit during assist; refills slowly
      when un-summoned).
- [x] Ruleset-eligibility flag: enabled in MK ruleset only at launch; cross-
      over rulesets opt-in.
- [x] Online queues: ranked-Kameo and ranked-no-Kameo separate ladders.

Create-a-Moveset / Move Editor is implemented by `FV2CreateMovesetEditorCatalog`
and `UV2MoveEditorLibrary` in `V2Combat`, editor-created `UV2MovesetData` budget
and binding metadata, `CreateMovesetEditor_V2_Contract.json`, combat automation
coverage, and `V2/ue/Tools/check-v2-create-moveset-editor.py`.

---

## 39. Create-an-Arena / Stage Editor

- [x] Modular stage builder: floor templates, walls, ceiling, hotspots, lighting
      presets, weather presets, crowd presets, ambient music slot.
- [x] Interactive object placement (table, chair, ladder, weapon prop) with
      collision and pickup metadata.
- [x] Save to `UDA_Arena` instance; upload to community gallery (§41.4).

      Create-an-Arena / Stage Editor is implemented by `UV2ArenaData`,
      `FV2CreateArenaStageEditorCatalog`, and `UV2ArenaEditorLibrary` in
      `V2Combat`, source-controlled
      `CreateArenaStageEditor_V2_Contract.json`, arena data automation,
      DA_Arena asset-prefix linting, community-gallery metadata, and
      `V2/ue/Tools/check-v2-create-arena-stage-editor.py`.

---

## 40. Create-an-Entrance / Theme Authoring

- [x] Entrance editor: choose ramp / curtain / aisle / pyro pattern / lighting
      cue / camera-cut sequence / pose sequence / mic moment.
- [x] Music import slot (per §43.4) for entrance theme.
- [x] Save to `UDA_Entrance`; assignable per fighter and per show in WWE
      Universe / MyGM.

      Create-an-Entrance / Theme Authoring is implemented by
      `UV2EntranceData`, `FV2CreateEntranceThemeAuthoringCatalog`, and
      `UV2EntranceEditorLibrary` in `V2Cinematics`, source-controlled
      `CreateEntranceThemeAuthoring_V2_Contract.json`, personal-use entrance
      music import metadata using §43.4 custom-soundtrack policy,
      per-fighter / WWE Universe / MyGM assignment validation, DA_Entrance asset
      prefix linting, and
      `V2/ue/Tools/check-v2-create-entrance-theme-authoring.py`.

### 40.1 Create-a-Championship / Custom Belt

- [x] Belt editor (WWE 2K-style Create-a-Championship): main plate template +
      side-plate templates, metal type (gold / silver / bronze / copper /
      black), strap leather color, gem / logo / nameplate slots, uploaded
      community logo (moderated cross-ref §41.4).
- [x] Belt prestige tier: World / Heavyweight / Inter-Continental / Mid-card /
      Tag / Hardcore / Women's / Cruiserweight — each with different animation
      entrances and reign-decoration treatment.
- [x] Save to `UDA_Championship`; bind per Universe brand (§27), per MyCAREER
      career arc (§28), per MyGM promotion (§29).
- [x] Title History tracker: per-championship reign log with date, holder, reign
      length, defenses, lineage tree.

      Create-a-Championship / Custom Belt is implemented by
      `UV2ChampionshipData`, `FV2CreateChampionshipBeltAuthoringCatalog`, and
      `UV2ChampionshipEditorLibrary` in `V2Modes`, source-controlled
      `CreateChampionshipCustomBelt_V2_Contract.json`, moderated
      community-logo belt slots, unique per-tier title-entrance and
      reign-decoration metadata, Universe / MyCAREER / MyGM binding validation,
      DA_Championship asset-prefix linting, title-history lineage validation,
      and `V2/ue/Tools/check-v2-create-championship-custom-belt.py`.

### 40.3 Custom belt 3D plate editor

- [x] **3D plate sculptor**: in-engine subdivision-surface authoring tool for
      custom championship plate geometry (main plate + 2-4 side plates); base
      templates + Boolean operations + bevel + emboss + engrave; per-plate
      UV-mapped logo / nameplate placement.
- [x] **Plate material editor**: per-region metal type (gold / silver / bronze /
      copper / platinum / titanium / matte black) + per-plate gem / stone
      inlay + per-plate engraved text with custom font.
- [x] **Belt-strap editor**: leather color / texture / stitching pattern /
      buckle style.
- [x] **Save / share custom belts** to community gallery (cross-ref §41.4 +
      §40.1) with moderation.

      Custom belt 3D plate editor is implemented by
      `FV2CustomBelt3DPlateEditorCatalog`, the 3D plate geometry / UV /
      sculpt-operation / material-region / strap-editor structs on
      `UV2ChampionshipData`, source-controlled
      `CustomBelt3DPlateEditor_V2_Contract.json`, moderated
      `CommunityGallery.CustomBelts` sharing, targeted Unreal automation in
      `CustomBelt3DPlateEditor.spec.cpp`, and
      `V2/ue/Tools/check-v2-custom-belt-3d-plate-editor.py`.

### 40.4 Custom hip-hop / soundtrack mixer (DJ-ruleset deep)

- [x] **In-engine track mixer**: layer per-fighter / per-stage music tracks with
      BPM-aware crossfade; beat-matching auto-aligned; loop-region selection per
      layer.
- [x] **DJ-style turntable transitions** between matches (DJ ruleset); scratch
      effect via controller stick.
- [x] **Save / share custom music mixes** to community gallery (cross-ref §41.4)
      with license check (no copyrighted-source-track uploads —
      bring-your-own-music only for personal use).
- [x] **In-match mixer overlay** for Def Jam ruleset: live DJ controls audible
      during match for the DJ slot in 2v2 / 4v4 Crew Brawl (cosmetic-only, no
      gameplay effect).

      Custom hip-hop soundtrack mixer is implemented by
      `FV2CustomSoundtrackMixerCatalog`, BPM-aware per-fighter / per-stage /
      global-DJ-bed layer validation, beat-matched turntable transition
      validation, moderated `CommunityGallery.MusicMixes` mix-recipe sharing
      with imported-source uploads blocked, the Def Jam in-match DJ overlay
      contract for 2v2 / 4v4 Crew Brawl DJ slots, source-controlled
      `CustomHipHopSoundtrackMixer_V2_Contract.json`, targeted Unreal
      automation in `CustomSoundtrackMixer.spec.cpp`, and
      `V2/ue/Tools/check-v2-custom-hip-hop-soundtrack-mixer.py`.

### 40.2 Per-fighter Profile Card / Title Card

- [x] Tekken 7-style customizable profile card shown to opponents pre-match:
      avatar pose, banner image, equipped title text, win streak indicator,
      ranked rank icon, faction badge (§22.5), preferred fighter portrait.
- [x] Profile card unlocks: titles earned via challenges, milestones, faction
      quests, tournament results; banner images unlocked via seasonal events.
- [x] Card visible in lobbies (Battle Hub §23), pre-match VS screen, spectator
      overlay (§51.3).

      Profile card / title card is implemented by `FV2ProfileCardCatalog`,
      `FV2ProfileCardPresentationSpec`, `FV2ProfileCardSurfaceBinding`, and
      `UV2ProfileCardTitleCardWidget` in `V2UI`, source-controlled
      `ProfileCardTitleCard_V2_Contract.json`, opponent-visible avatar pose /
      banner / title / win-streak / rank / faction / preferred-fighter slots,
      unlock rules for challenges, milestones, faction quests, tournament
      results, and seasonal banners, Battle Hub / PreMatchVS /
      SpectatorOverlay bindings, targeted Unreal automation in
      `ProfileCardTitleCard.spec.cpp`, and
      `V2/ue/Tools/check-v2-profile-card-title-card.py`.

### 40.3 Per-account customization library (lifetime)

- [x] **Lifetime customization library**: unlimited save slots per account for
      every authoring type (CAW / CAS / CAA / CAE / CAM / vehicles / belts /
      movesets / paint jobs / vinyls / entrances). Stored cloud-side per
      publisher account.
- [x] **Per-library folder organization** + per-tag classification + per-search
      query language.
- [x] **Per-library version history**: every save action versioned; restore any
      prior version.
- [x] **Per-library size cap**: 10GB per account (cloud-storage cost
      controlled); soft-warn at 8GB.
- [x] **Per-library export to local file** (PC; console where TRC permits).
      Per-account customization library is implemented by
      `FV2CustomizationLibraryAccountCatalog`,
      `FV2CustomizationLibrarySaveSlot`, per-save
      `FV2CustomizationLibraryVersionRecord` history, cloud-per-publisher
      catalog ownership, folder / tag / `tag:` / `type:` / `folder:` / text
      search filtering, 8GiB soft-warning and 10GiB hard-cap enforcement, PC /
      TRC-gated console local export evaluation, SaveGame / Blueprint /
      subsystem APIs, focused Unreal automation in
      `CustomizationLibrary.spec.cpp`, source-controlled
      `CustomizationLibraryLifetime_V2_Contract.json`, and
      `V2/ue/Tools/check-v2-customization-library-lifetime.py`.

---

## 41. Roster, Move Catalog, & Data Tables

### 41.1 Launch roster

- [ ] Launch roster >= 60 fighters covering archetype diversity, including
      original characters and partner-IP fighters (rights cleared in §52 DLC
      plan). — re-marked [~] 2026-06-12: the 60-fighter catalog exists in code
      with archetype diversity, but partner-IP rights are NOT cleared — no
      third-party license is executed and the default catalog now fails closed
      pending clearance. `blocked:external`
- [x] Per-fighter `UDA_Fighter` filled; per-fighter `UDA_Moveset` covering >= 4
      special moves, ≥ 2 supers, ≥ 2 finishers (where applicable). Launch roster
      is implemented by `FV2LaunchRosterCatalog`, `FV2LaunchRosterFighterEntry`,
      and `FV2LaunchRosterMovesetCoverage` in `V2Combat`, with 60 launch
      fighters, original and partner-IP origin metadata (partner-IP rights fail
      closed pending executed licenses), 12 archetype families, per-fighter
      `DA_Fighter_` and `DA_Moveset_` asset paths, at least four specials, two
      supers, and two applicable finishers per default moveset, focused
      automation in `LaunchRoster.spec.cpp`, integration coverage in
      `V2.Combat.Module`, source-controlled `LaunchRoster_V2_Contract.json`, and
      `V2/ue/Tools/check-v2-launch-roster.py`.

### 41.2 Move catalog

- [x] Universal move pool >= 200 moves usable across CAW / Create-a-Moveset.
- [x] Style-locked move pool (Wrestling 80+, MA 80+, Kickboxing 60+,
      Streetfighting 60+, Submissions 50+, Weapon styles 40+ each). Move catalog
      pools are implemented by `FV2MoveCatalogPoolCatalog`,
      `FV2MoveCatalogStylePoolRequirement`, and `UV2MoveCatalogPoolLibrary` in
      `V2Combat`, with 200 universal CAW / Create-a-Moveset moves, style-locked
      pools for Wrestling 80, MartialArts 80, Kickboxing 60, Streetfighting 60,
      Submissions 50, and launch weapon families WeaponBlade / WeaponStaff /
      WeaponHeavy at 40 each, focused automation in `MoveCatalogPool.spec.cpp`,
      integration coverage in `V2.Combat.Module`, source-controlled
      `MoveCatalogPools_V2_Contract.json`, and
      `V2/ue/Tools/check-v2-move-catalog-pools.py`.

### 41.3 Data drift

- [x] CSV <-> DataTable round-trip tests; spreadsheet authoring at
      `V2/balance/data/` is the source of truth, CI imports into UE on build.
      Implemented by `import-v2-frame-data-datatable.py`,
      `check-v2-frame-data-datatable-roundtrip.py`, source-controlled
      `DT_V2_FrameData.json`, and `FrameDataRoundTrip_V2_Contract.json`;
      `V2/balance/data/frame-data.csv` remains the source of truth, CI runs the
      deterministic DataTable import check before build validation, and the gate
      round-trips DataTable rows back to canonical CSV rows by
      `fighter_id.move_id`.

### 41.4 Community content gallery

- [x] In-game gallery for CAW / CAS / CAA / CAE / Movesets.
- [x] Moderation queue with player flagging, ML pre-filter for offensive
      content, human review SLA.
- [x] Per-region content rules (e.g., disable license-violating decals in
      certain regions). Implemented by `FV2CommunityContentGalleryCatalog`,
      `FV2CommunityGalleryContentLane`,
      `FV2CommunityGalleryModerationQueueConfig`, and
      `FV2CommunityGalleryRegionContentRule` in `V2UI`, with online-gated
      `CommunityGallery`, detail, and moderation-queue navigation screens, CAW /
      CAS / CAA / CAE / Movesets lanes, player flagging, Kuanyin ML
      offensive-content pre-filter, 24-hour human review SLA, per-region
      license-violating decal restrictions, focused automation in
      `CommunityContentGallery.spec.cpp`, integration coverage in
      `V2.UI.Module`, source-controlled
      `CommunityContentGallery_V2_Contract.json`, and
      `V2/ue/Tools/check-v2-community-content-gallery.py`.

---

## 42. Stages / Arenas / Environments

- [x] Launch stages ≥ 30 across all rulesets. Required coverage: - MK pits +
      hellish realms (≥ 5). - SF urban / international + dojo / cathedral (≥
      5). - Tekken stages with stage breaks and multi-floor (≥ 5). - WWE arenas
      (Raw, SmackDown, NXT, PPV, indie hall) + cage / HIAC / ladder rigs (≥ 5
      base + stipulation overlays). - UFC Octagon variants (Vegas, Abu Dhabi,
      NYC, Rio) (≥ 4). - SC arenas (ring-out + walled + multi-tier) (≥ 4). - DJ
      NYC clubs and street arenas (≥ 4).
- [x] Stage data asset includes camera rig, lighting preset, hazard zones,
      hotspots, breakable rigging, crowd model, music profile, stipulation
      overlay slots.
- [x] Stage performance budget: ≤ 4ms GPU at 4K, ≤ 2.5ms CPU on PS5; ≤ 8ms GPU
      on Switch2 docked at 1080p with quality-band drop. Implemented by
      `FV2LaunchStageCatalog`, `FV2LaunchStageDefinition`, and
      `FV2ArenaPerformanceBudget` in `V2Combat`, with 32 launch arenas spanning
      MK pits / hell realms, SF urban / international / dojo / cathedral, Tekken
      breakable multi-floor stages, WWE base arenas plus cage / HIAC / ladder
      overlays, UFC Vegas / Abu Dhabi / NYC / Rio octagons, SoulCalibur ring-out
      / walled / multi-tier arenas, and Def Jam NYC club / street arenas;
      `UV2ArenaData` now carries camera rig, hazard zones, breakable rigging,
      crowd model, music profile, stipulation overlay slots, and launch
      performance budget metadata; coverage is enforced by
      `LaunchStages.spec.cpp`, `ArenaDataAsset.spec.cpp`, `V2.Combat.Module`,
      `LaunchStages_V2_Contract.json`, and
      `V2/ue/Tools/check-v2-launch-stages.py`.

---

## 43. Audio: Music, Voice, SFX, Dynamic Soundtrack

### 43.1 MetaSounds / Wwise

- [x] Pick one audio runtime: prefer MetaSounds + AudioModulation native
      pipeline for fewer middleware dependencies; document final choice in
      `V2/V2_DEPENDENCIES.md`. If middleware required, add Wwise integration.
      Implemented with `FV2AudioRuntimePolicy`, source-controlled runtime
      contract, config/subsystem snapshot registration, native plugin CI gate,
      and explicit Wwise ADR/platform-licensing block.
- [x] Per-fighter footstep / cloth / weapon foley layer. Implemented with
      `FV2FighterFoleyCatalog`, 60 launch-roster foley profiles, per-fighter
      footstep / cloth / weapon MetaSound layers, subsystem resolve support,
      `FighterFoley_V2_Contract.json`, and focused automation coverage.

### 43.2 Voice barks

- [x] Per-fighter voice bank: idle taunts, intro, victory, defeat, KO, finisher
      quotes, pre-match staredown.
- [x] Per-mode commentary banks (WWE play-by-play + color; UFC commentary pair;
      SC narrator; SF announcer; MK announcer; DJ DJ-style hype).
- [x] Bark trigger system tied to gameplay events (hit-landed, combo-3+,
      finisher-trigger, blockstring-hit, etc.). Implemented with
      `FV2VoiceBarkCatalog`, 60 per-fighter launch voice banks, WWE / UFC / SC /
      SF / MK / Def Jam mode commentary banks, event bindings for hit-landed /
      combo-3+ / finisher-trigger / blockstring-hit, subsystem resolve support,
      `VoiceBarks_V2_Contract.json`, and focused automation coverage.

### 43.3 Dynamic music

- [x] Vertical-stack per match: ambient → tension → climax → KO sting.
- [x] DJ-style remixing (§14.5) for Def Jam ruleset.
- [x] Per-stage music profile with multiple layers and crossfade rules.
      Implemented with `FV2DynamicMusicCatalog`, 32 launch-stage music profiles,
      per-stage `FV2DynamicMusicStack` layers for ambient / tension / climax /
      KO sting, AudioModulation-driven `FV2DynamicMusicCrossfadeRule` routing,
      Def Jam DJ remix branch coverage tied to fighter theme mixes,
      `DynamicMusic_V2_Contract.json`, CI validation, subsystem stage-music
      resolve support, and focused `V2.Audio.DynamicMusic.AssetContract`
      automation.

### 43.4 Custom soundtrack

- [x] Local music import on PC (mp3/flac/ogg/wav); console where TRC allows;
      streaming integration where licensed.
- [x] Per-fighter / per-stage / per-entrance assignment. Implemented with
      `FV2CustomSoundtrackCatalog`, source-policy validation for PC local
      imports, console TRC gates, licensed Spotify / Apple Music references,
      per-fighter / per-stage / per-entrance assignment resolution, personal-use
      safeguards for imported music, `CustomSoundtrack_V2_Contract.json`, CI
      validation, subsystem registration / snapshot coverage, and focused
      `V2.Audio.CustomSoundtrack.AssetContract` automation.

### 43.5 Spatial / 3D audio

- [x] Atmos / Tempest3D / Dolby support; binaural HRTF fallback.
- [x] Per-platform spatial-audio runtime: Atmos via Microsoft Spatial Sound on
      PC/XSX; Tempest3D on PS5; binaural HRTF software fallback (Steam Audio /
      Resonance) for headphones on every platform.
- [x] Audio bus mix profiles: "Default", "Headphones", "Stereo TV", "Surround
      5.1/7.1", "Night Mode" (clamped dynamic range). Implemented with
      `FV2SpatialAudioCatalog`, per-platform runtime profiles for PC / XSX
      Microsoft Spatial Sound Atmos, PS5 Tempest3D, Dolby Atmos renderer
      metadata, Steam Audio / Resonance binaural HRTF fallbacks for every
      platform, Stereo TV / Surround 5.1 / Surround 7.1 / Night Mode bus mix
      profiles, `SpatialAudio_V2_Contract.json`, CI validation, subsystem
      registration / runtime resolution, and focused
      `V2.Audio.SpatialAudio.AssetContract` automation.

### 43.5.1 Per-output-device audio profile

- [x] **Per-output-device EQ + mastering profile**: Soundbar (mid-forward vocal
      clarity), TV-stereo (broadcast-comp dynamic range), Earbuds
      (bass-rolloff + sibilance softening), Over-ear Headphones (full range),
      Atmos Soundbar (height-channel-aware), Atmos AVR (cinema-tier dynamic
      range), Tempest3D (PS5 native HRTF), Vision Pro Spatial Audio.
- [x] **Auto-detect** via platform API where available; manual override in
      settings.
- [x] **Per-profile commentary mix** (e.g., Soundbar profile emphasizes vocals;
      Atmos profile lets ambience breathe).
- [x] **Per-profile race-engine mix**: Soundbar emphasizes exhaust punch;
      Headphones preserves spatial cues; TV-stereo balances both. Implemented
      with `FV2OutputDeviceAudioProfileCatalog`, Soundbar / TV-stereo / Earbuds
      / Over-ear Headphones / Atmos Soundbar / Atmos AVR / Tempest3D / Vision
      Pro Spatial Audio profile coverage, per-profile EQ bands, mastering
      targets, commentary and race-engine mix metadata, platform auto-detect
      plus `Settings.Audio.OutputDeviceProfile` manual override resolution,
      `OutputDeviceAudioProfiles_V2_Contract.json`, CI validation, subsystem
      registration / snapshot coverage, and focused
      `V2.Audio.OutputDeviceProfiles.AssetContract` automation.

### 43.6 Haptic assets (DualSense / Switch2 HD Rumble / Xbox impulse triggers)

- [x] Per-move haptic asset (UE5 Haptic Feedback Effect) referenced by
      `DA_Move.HapticOnHit`, `HapticOnBlock`, `HapticOnWhiff`.
- [x] Standard haptic library categorized by hit-reaction class (small / mid /
      heavy / launcher / bone-shatter / electric / freeze / burn / weapon- clash
      / submission-tap-rising-tension).
- [x] Per-platform compile: PS5 DualSense waveform, Switch2 HD Rumble, Xbox
      Series impulse triggers, PC gamepad fallback rumble curves. Implemented
      with `DA_Move.HapticOnHit`, `HapticOnBlock`, and `HapticOnWhiff`
      `FSoftObjectPath` references, `FV2PlatformHapticAssetReference`,
      `EV2HapticRuntimePlatform`, `EV2HapticHitReactionClass`, standard haptic
      library category coverage, PS5 DualSense / Switch2 HD Rumble / Xbox
      impulse trigger / PC fallback compiled asset metadata,
      `HapticAssets_V2_Contract.json`, CI validation, and focused
      `V2.Combat.HapticAssets.AssetContract` automation.

### 43.7 Custom commentary pack & multilingual announcers

- [x] Per-locale announcer pack with intro / KO / round / time-out / draw /
      finisher / Blazin' / X-Ray / Critical Edge calls; user can pick announcer
      independent of UI locale. Implemented with `FV2AnnouncerPackCatalog`,
      `FV2AnnouncerPackProfile`, `FV2LocalizedAnnouncerCallout`,
      `FV2AnnouncerPackSelectionRequest`, locale-independent selection
      resolution, `AnnouncerPacks_V2_Contract.json`, CI validation, config /
      subsystem registration, runtime snapshot coverage, and focused
      `V2.Audio.AnnouncerPacks.AssetContract` automation.
- [x] Special crossover announcer packs as DLC (e.g., licensed
      sports-broadcaster pack, classic-arcade pack). Implemented with
      `EV2AnnouncerPackSource`, licensed sports-broadcaster and classic-arcade
      DLC pack metadata, entitlement-aware selection rejection, and per-locale
      callout coverage for each DLC pack.

### 43.8 Streamer-safe music option

- [x] DMCA-safe music toggle: replaces licensed tracks with cleared / royalty-
      free analogues for streamers; per-track license-flag metadata; default
      "Stream Safe" preset applied automatically when in Streamer Mode (§51.6).
      Implemented with `FV2StreamerSafeMusicCatalog`,
      `FV2MusicTrackLicenseMetadata`, `FV2StreamerSafeMusicPreset`,
      `FV2StreamerSafeMusicReplacement`, per-track commercial / DMCA /
      royalty-free / stream-safe flag validation, Streamer Mode auto-apply,
      manual DMCA-safe toggle resolution, `StreamerSafeMusic_V2_Contract.json`,
      CI validation, config / subsystem registration, runtime snapshot coverage,
      and focused `V2.Audio.StreamerSafeMusic.AssetContract` automation.

### 43.9 Sound Test, Music Gallery, Replay-Soundtrack

- [x] Sound Test mode: play any unlocked music track, voice line, SFX, with
      free-form looping; useful for cosplay creators and content makers.
      Implemented with `FV2SoundTestMusicGalleryCatalog`, `FV2SoundTestEntry`,
      `FV2SoundTestPlaybackRequest`, free-form loop-region validation,
      locked-entry rejection, config / subsystem registration, runtime snapshot
      coverage, `SoundTestMusicGallery_V2_Contract.json`, CI validation, and
      focused `V2.Audio.SoundTestMusicGallery.AssetContract` automation.
- [x] Music Gallery with per-track metadata (composer, mode, unlock condition,
      license tier); favoriting / playlists. Implemented with
      `FV2MusicGalleryTrackMetadata`, `FV2MusicGalleryPlaylist`, composer / mode
      / unlock-condition / license tier validation, favorite and default
      playlist coverage, CI validation, and audio module automation.
- [x] Replay soundtrack override: player picks the music for a replay during
      playback / MP4 export. Implemented with
      `FV2ReplaySoundtrackOverrideRequest`,
      `FV2ResolvedReplaySoundtrackOverride`, playback and MP4 export override
      reason tags, locked-track rejection, config / subsystem registration,
      runtime snapshot coverage, CI validation, and focused automation.

### 43.11 Acoustic zones, crowd ratio, tournament hush, occlusion

- [x] **Per-stage acoustic / reverb zones**: dojo (tight reverb) vs cathedral
      (large reverb) vs WWE arena (broadcast reverb) vs UFC Octagon (close mic)
      vs outdoor (no reverb) vs cave / pit (echo). Authored via Audio Gameplay
      Volume. Implemented with `FV2StageAcousticAudioCatalog`,
      `FV2StageAcousticZoneProfile`, Audio Gameplay Volume asset-path
      validation, and default dojo / cathedral / WWE / UFC / outdoor / cave-pit
      acoustic profile coverage.
- [x] **Adaptive crowd-ratio audio**: cheer-vs-boo balance tied to momentum +
      finisher chain + heel/face dynamics; per-match crowd mood computed every 5
      seconds and crossfaded. Implemented with `FV2AdaptiveCrowdRatioConfig`,
      `FV2AdaptiveCrowdRatioRequest`, `FV2AdaptiveCrowdRatioResult`, five-second
      evaluation gating, cheer / boo / mixed / hush reason tags, and crossfade
      scheduling.
- [x] **Tournament hush mode**: in Tournament Mode (§51.4), suppress background
      ambient + crowd ambience, keep announcer + impact + voice barks only for
      clean broadcast audio. Implemented with `FV2TournamentHushMixProfile`,
      `FV2TournamentHushRequest`, `FV2ResolvedTournamentHushMix`, ambient and
      crowd bus muting, announcer / impact / voice-bark preservation, and
      broadcast-clean resolution.
- [x] **Audio occlusion**: stage geometry attenuates voice / SFX through walls /
      pillars / ring posts; full occlusion in solo modes only (rollback
      determinism forbids audio-occlusion sim variance in ranked). Implemented
      with `FV2AudioOcclusionProfile`, `FV2AudioOcclusionRequest`,
      `FV2ResolvedAudioOcclusion`, wall / pillar / ring-post geometry tags,
      ranked rollback determinism guard, geometry attenuation, and solo-only
      full occlusion.
- [x] **Real-time vocal pitch / volume from stamina** (cross-ref §72.2):
      per-frame attenuation tied to current stamina value. Implemented with
      `FV2StaminaVocalModulationProfile`, `FV2StaminaVocalModulationRequest`,
      `FV2ResolvedStaminaVocalModulation`, per-frame exhausted-to-full pitch /
      volume scalar evaluation, and subsystem snapshot coverage.
- [x] **Per-fighter signature drum-roll / horn intro** at pre-fight cinematic +
      per-fighter end-of-match victory sting (cross-ref §43.10 announcer combo
      callouts). Implemented with `FV2FighterSignatureAudioCue`, default
      per-fighter drum-roll, horn-intro, and victory-sting asset contracts for
      launch fighters, and catalog validation.
- [x] **Per-arena environment SFX**: rain on cage roof, wind through ring ropes,
      fire crackle near hazards, water lapping for water stages. Implemented
      with `FV2ArenaEnvironmentSFXProfile`, rain / wind / fire / water authored
      loop coverage, hazard-link validation, rollback-cosmetic gating, and CI
      validation.
- [x] **Localized commentary**: per-locale commentary VO at launch for English /
      Japanese / Korean / Spanish / Portuguese; other locales subtitled with VO
      patch plan. Implemented with `FV2LocalizedCommentaryLocalePlan`, launch VO
      coverage for English, Japanese, Korean, Spanish, and Portuguese, subtitled
      fallback patch-plan validation, and focused automation.
- [x] **Championship match commentary bank**: extra-flavor VO triggered when a
      title is on the line. Implemented with `FV2ChampionshipCommentaryBank`,
      title-on-line trigger validation, localized extra-flavor VO requirements,
      `StageAcousticAudio_V2_Contract.json`, CI validation, config / subsystem
      registration, runtime snapshot coverage, and focused
      `V2.Audio.StageAcousticAudio.AssetContract` automation.

### 43.10 Crowd Chants & Announcer Combo Callouts

- [x] Per-fighter signature crowd chant authored (e.g., "YES!", "Boo!",
      faction-specific chants); crowd reactivity profile (§11.6) drives when
      chants spawn. Implemented with `FV2CrowdChantAnnouncerCalloutCatalog`,
      `FV2FighterCrowdChantProfile`, per-fighter Asha / Ryu / Sub-Zero / King
      signature chants, crowd-reactivity profile ids, authored
      `/Audio/CrowdChants/` asset validation, threshold rejection, config /
      subsystem registration, runtime snapshot coverage, and focused
      `V2.Audio.CrowdChantsComboCallouts.AssetContract` automation.
- [x] Per-stage crowd noise profile (intimate dojo vs. WWE arena vs. UFC Octagon
      vs. DJ club). Implemented with `FV2StageCrowdNoiseProfile`,
      `EV2StageCrowdNoiseProfileKind`, dojo / WWE broadcast arena / UFC
      close-mic Octagon / DJ club crowd bed coverage,
      `AudioMod.Crowd.CheerBooRatio` crossfade controls, and CI validation.
- [x] Announcer combo callouts (Killer Instinct-style): "OPENER" -> "LINKER" ->
      "ENDER" -> "BRUTAL" -> "SAVAGE" -> "ULTRA" combo-tier callouts driven by
      hit count + damage + meter usage. Per-ruleset bank (MK has its own; SF /
      Tekken / SC each get their own taxonomy). Implemented with
      `FV2AnnouncerComboCalloutLine`, `FV2AnnouncerComboCalloutRequest`,
      `FV2ResolvedAnnouncerComboCallout`, hit / damage / meter tier selection,
      MK / SF / Tekken / Soul Calibur per-ruleset banks, and asset-path /
      subtitle validation for each tier.
- [x] Announcer callouts honor language fallback chain (§54). Implemented with
      catalog-level fallback ordering, Japanese-to-English default fallback
      coverage, localized-line resolution tags,
      `CrowdChantsComboCallouts_V2_Contract.json`,
      `check-v2-crowd-chants-combo-callouts.py`, audio module coverage, and
      focused fallback automation.

---

## 44. Visual Effects: Niagara, Decals, Gore

### 44.1 Core VFX

- [x] Per-style hit-spark library (clean / dust / metal / electric / fire / ice
      / spirit / blood). Implemented through `FV2CoreVFXCatalog` default
      coverage, `CoreVFX_V2_Contract.json`, `check-v2-core-vfx.py`, and
      `V2.VFX.CoreVFX.AssetContract`.
- [x] Blood decal pipeline: decal projection on environment, vertex-paint on
      character; opt-out toggle per gore setting. Covered by gore-gated
      `Decal.Blood.Environment` and `Decal.Blood.Character` catalog layers and
      the §44.1 gore-off suppression automation.
- [x] Limb-severance / dismemberment system (MK-only ruleset by default).
      Implemented as the extreme-gore `Dismember.MK.LimbSeverance` rule with
      ruleset/gore gates and subsystem queueing.
- [x] X-Ray skeletal pierce-through render (§45.3). The core catalog now
      requires BoneStencil, PierceThroughMask, and OrganSilhouette
      pierce-through render layers alongside the existing cinematic X-Ray packet
      builder.
- [x] Stage hazard effects (fire, electric arc, acid bubble, ice freeze,
      hellfire pillar). Added core stage hazard profiles and resolver/queue
      coverage for all five hazards.
- [x] Weapon trail (Niagara ribbons) per weapon profile. Added Niagara ribbon
      profiles for sword, staff, axe, spear, nunchaku, and energy blade weapon
      profiles.
- [x] Devil-form / Soul-Charge / Heat / Burnout aura effects. Added state-driven
      aura profiles with normalized intensity resolution and subsystem queueing.

### 44.2 Damage states on character

- [x] Sweat decal layer (intensity ramps with stamina drain / round duration);
      applied to skin material via vertex paint. Implemented in
      `FV2CharacterDamageVFXCatalog` as `Damage.Sweat.Skin` with
      stamina/round-duration intensity resolution,
      `CharacterDamageVFX_V2_Contract.json`, `check-v2-character-damage-vfx.py`,
      and `V2.VFX.CharacterDamage.AssetContract`.
- [x] Dirt layer (accumulates from ground transitions in WWE / DJ / UFC).
      Implemented as `Damage.Dirt.GroundTransition` with explicit WWE, DJ, and
      UFC ruleset support.
- [x] Bruise / blood decal layer (per-limb damage in UFC / WWE, per-hit blood
      splatter in MK). Implemented as `Damage.Bruise.PerLimb` plus gore-gated
      `Damage.Blood.MK.PerHit`.
- [x] Costume tear / cloth-damage state (Tekken-style): progressive cloth tear
      thresholds (intact → light damage → torn → shredded); per-costume tear
      pattern + LOD chain; cloth simulation honors tear state. Implemented with
      progressive `FV2CostumeTearProfile` entries and Simulated →
      BakedVertexAnim → Disabled LOD policy validation.
- [x] Wet skin shader (after fall in water hazard, after rain in outdoor stages,
      sweat-soaked at low stamina). Implemented as `Shader.WetSkin`.
- [x] Frozen-state shader (frost coating, slowed animation, ice particles
      shedding on movement). Implemented as `Shader.Frozen` with movement-shed
      ice particles and slowed animation.
- [x] Burning-state shader (ember particles, heat distortion, charred decal
      layer). Implemented as `Shader.Burning`.
- [x] Electric-shock shader (skeletal-arc render for 0.5s, hair stand-up).
      Implemented as `Shader.ElectricShock` with 0.5s duration validation.
- [x] Petrified / stone-state shader (gray rocky overlay, slower animation).
      Implemented as `Shader.Petrified`.

### 44.3 Stage destruction state

- [x] Persistent destruction state per stage: broken panes, scorched walls, torn
      ropes, dented chair-prop, fallen debris pile. Implemented through
      `FV2StageDestructionVFXCatalog` element templates, persistent state ids,
      `StageDestructionVFX_V2_Contract.json`,
      `check-v2-stage-destruction-vfx.py`, and
      `V2.VFX.StageDestruction.AssetContract`.
- [x] Per-round destruction reset rules (configurable: reset per round / persist
      across rounds / persist across match). Implemented as configurable
      `FV2StageDestructionResetPolicy` entries for ResetPerRound,
      PersistAcrossRounds, and PersistAcrossMatch.
- [x] Stage transition state preserves destruction in the source area when
      transitioning to a new floor / arena. Implemented with
      `FV2StageTransitionDestructionSnapshot` and subsystem queueing for
      transition-preserved source-area destruction states.

### 44.4 Weather mid-match

- [x] Per-stage weather profile: rain (affects ground traction +1 frame of whiff
      recovery during heavy rain), snow (cold breath particles, slower stamina
      recovery), fog (reduces opponent silhouette clarity slightly), heatwave
      (heat-distortion shader, faster stamina drain in DJ rooftop stages), wind
      (cloth / hair flutter, particle drift). Implemented through
      `FV2WeatherVFXCatalog` per-stage profiles, `WeatherVFX_V2_Contract.json`,
      `check-v2-weather-vfx.py`, and `V2.VFX.Weather.AssetContract`.
- [x] Weather change mid-match (rare; scripted in story / themed events).
      Implemented with `FV2WeatherTransitionRequest` /
      `FV2ResolvedWeatherTransition`; unscripted mid-match transitions are
      rejected with `VFX.Weather.Rejected.MidMatchNotScripted`.
- [x] Weather opt-out toggle for tournament mode. Implemented with
      `FV2WeatherOptOutPolicy`; tournament opt-out suppresses mid-match weather
      transitions with `VFX.Weather.Rejected.TournamentOptOut`.

### 44.5 Costume cloth / hair / accessory physics

- [x] Per-costume Chaos Cloth tuned to fighter weight class; LOD chain (LOD0
      sim, LOD1 baked vertex anim, LOD2 disabled). Implemented with
      `FV2ChaosClothWeightClassTuning`, `ResolveChaosClothPresetForWeightClass`,
      `CostumeHairAccessoryPhysics_V2_Contract.json`,
      `check-v2-costume-physics.py`, and
      `V2.Animation.CostumePhysics.AssetContract`.
- [x] Hair Groom for principal characters with combat-tuned damping; card hair
      for mid-roster. Implemented by extending `FV2HairRenderingProfile` with
      combat damping and mid-roster card-hair routing.
- [x] Accessory physics (necklace, earrings, belt-tail, weapon trinkets) via
      Chaos rigid body chain. Implemented with
      `FV2AccessoryRigidBodyChainProfile` defaults and config lookup coverage.

### 44.6 Damage progression staging

- [x] **5-tier damage state** per fighter, blended via material parameter:
      **Tier 0 Clean** (match start) → **Tier 1 Sweaty** (≤ 70% HP, light
      exertion) → **Tier 2 Bruised** (≤ 50% HP, visible bruise / dirt decals +
      slight cloth fray) → **Tier 3 Bloody** (≤ 25% HP, blood decals + heavier
      cloth tear + facial cuts) → **Tier 4 Broken** (≤ 5% HP / on-final-round,
      max cloth shred + heavy bruising + cinematic limp animation overlay).
      Implemented with `FV2DamageProgressionTierProfile`,
      `EV2DamageProgressionTier`, default `DamageTier.*` material parameters,
      and `V2.VFX.DamageProgression.AssetContract` coverage.
- [x] **Per-tier transition** via material param interpolation over 30 frames;
      gore-tier setting (§16.5) clamps maximum tier (Mild = ≤ Tier 2, Off = ≤
      Tier 1). Implemented by 30-frame `TransitionFrames` validation and
      `FV2DamageProgressionVFXCatalog::ResolveDamageProgression` gore-tier
      clamping with resolved material-parameter blend alpha.
- [x] **Tier persistence** across rounds: damage staging resets between rounds
      in most rulesets; persists in Iron Man, UFC, WWE rulesets (cumulative
      damage matters). Implemented with `FV2DamageProgressionPersistenceRule`
      defaults for reset plus Iron Man, UFC, and WWE persistence.
- [x] **Blood decal aging**: per-decal age timer; decals darken / dry / fade
      over time; max decal density per fighter to manage memory. Implemented
      with `FV2BloodDecalAgingProfile`, darken / dry / fade age alphas, and
      per-fighter density-cap reporting.
- [x] **Per-fighter tier override**: signature heavy-armor characters (e.g.,
      Goro, Cyrax) skip Tier 1 sweaty stage; weapon-wielding SC fighters have a
      "weapon-chip" tier showing weapon damage state. Implemented with
      `FV2DamageProgressionOverride`, Goro / Cyrax heavy-armor defaults, and
      SoulCalibur weapon-chip resolution.

### 44.7 Per-fighter signature damage VFX

- [x] **Subsurface scattering ramp** per skin tone applied to character mesh for
      cinematic close-up shaders (cross-ref §72.4). Implemented with
      `FV2SubsurfaceScatteringRampProfile` coverage for light, medium, deep, and
      fantasy tones, principal LOD0 close-up policy, and mid-roster
      approximation metadata.
- [x] **Per-fighter eye shader**: emissive / non-emissive option, color tunable
      from cosmetic (cross-ref §37.6 16-slot color edit). Implemented with
      `FV2FighterEyeShaderProfile`, 16-slot color-edit indices, emissive and
      non-emissive defaults, and cosmetic eye-color resolution.
- [x] **Sweat shader** layered on damage progression Tier 1+; intensity scales
      with stamina drain. Implemented with `FV2SignatureSweatShaderLayer`
      activated at the Sweaty tier and resolved from normalized stamina drain.
- [x] **Per-fighter weapon glow / aura intensity** as a function of Soul Charge
      / Heat / Drive state (cross-ref §72.3). Implemented with
      `FV2WeaponGlowAuraProfile` Soul Charge, Heat, and Drive meter profiles
      plus subsystem queue/runtime snapshot coverage.

### 44.8 Stage atmospheric particles

- [x] **Per-stage ambient particles**: snow flurry / dust mote / ash drift /
      ember / fog wisp / mist / pollen / fireflies, authored per stage; particle
      count throttled per platform's VFX budget (§70.2). Implemented with
      `FV2StageAmbientParticleProfile` defaults for all eight particle kinds and
      low / medium / high platform VFX budget counts.
- [x] **Per-stage god rays / volumetric lights** with HDR-aware brightness.
      Implemented with `FV2StageGodRayVolumetricLightProfile`, per-stage HDR
      brightness nits, exposure parameters, and volumetric scattering metadata.
- [x] **Reactive ambient particles**: hits / supers / finishers temporarily
      disturb particles in a localized radius. Implemented with
      `FV2ReactiveAmbientParticleProfile` hit / super / finisher triggers,
      localized radius scaling, burst counts, and subsystem queue coverage.

---

## 45. Cinematic Camera, Slow-Mo, X-Ray, Cutscenes

### 45.1 Camera rigs

- [x] Per-ruleset Camera Rig (Cine Camera Actor preset): 2D-fighter rig (locked
      sidescroll), 3D-arena rig (auto-face + sidestep yaw), ring rig (ropes &
      turnbuckle awareness), cage rig (cage-pull-back), octagon rig (broadcast
      cuts), open-world rig. Implemented with capability-tagged
      `FV2CineCameraRigPreset` defaults for locked 2D, 3D arena, ring, cage,
      octagon, street, racing, and open-world Cine Camera Actor presets.
- [x] Auto-cinematic on KO / finisher / round-clinching hit. Implemented with
      `FV2AutoCinematicTriggerRule`, `FV2AutoCinematicRuleCatalog`, subsystem
      queueing, and `V2.Cinematics.CameraRigs.AssetContract` coverage.

### 45.2 Slow-mo

- [x] Time dilation on KO last hit; selectable by ruleset (MK strong, Tekken
      subtle, SF zoom-punch, UFC broadcast-replay). Implemented with
      `FV2KOLastHitSlowMoSelection`, ruleset-specific `FV2SlowMoCurveSpec`
      defaults, `ResolveKOLastHitSlowMoForRuleset`, and
      `V2.Cinematics.KOLastHitSlowMo.AssetContract`.

### 45.3 X-Ray rendering

- [x] Custom render pass that swaps mesh material to a translucent skin with
      bone-stencil overlay; bone-break VFX driven by Niagara emit on impact
      frame. Implemented with `FV2XRayCustomRenderPassSpec`,
      `FV2XRayRenderingCatalog`, and `V2.VFX.XRayRendering.AssetContract`.
- [x] Per-bone break animation states; bone DA-tagged with break-type (snap /
      crack / pulverize). Implemented with `EV2XRayBoneBreakType`,
      `FV2XRayBoneBreakAnimationStateSpec`, and catalog validation for snap,
      crack, and pulverize anticipation / impact / settled states.

### 45.4 Replays

- [x] In-game replay viewer with editable camera and timeline; export to MP4 or
      upload to social. Implemented with `FV2ReplayViewerSession`,
      `FV2ReplayTimelineState`, `FV2ReplayExportJob`, and
      `V2.Cinematics.ReplayViewer.AssetContract`.

### 45.5 Photo mode

- [x] Pause anywhere; rotate camera; depth-of-field, filter, frame, sticker;
      capture and save to gallery; share to external. Implemented with
      `FV2PhotoModeCatalog`, `FV2PhotoModeSession`, `FV2PhotoModeCaptureResult`,
      and `V2.UI.PhotoMode.AssetContract`.
- [x] Pose library: per-fighter pose presets (taunts, victory, defeat, intro,
      win-quote idle, lore-page hero pose) + free-form rig posing tool for
      advanced users (skeletal control with limit clamping). Implemented with
      `FV2PhotoModePoseLibrary`, `FV2PhotoModeFreeformRigPose`, and
      `V2.Animation.PhotoModePoseLibrary.AssetContract`.
- [x] Multi-character composition: pose both fighters in the same shot;
      composition guides (rule of thirds, golden ratio overlays). Implemented
      with `FV2PhotoModeFighterSubjectPose`,
      `FV2PhotoModeCompositionGuidePreset`, and
      `V2.UI.PhotoMode.MultiCharacterComposition.AssetContract`.
- [x] Scene editor: stage props, lighting rigs (key / fill / rim with color),
      atmosphere (smoke / sparks / petals), weather overrides. Implemented with
      `FV2PhotoModeSceneEditorState`, `FV2PhotoModeLightingRigPreset`, and
      `V2.UI.PhotoMode.SceneEditor.AssetContract`.
- [x] Save / share to in-game gallery (cross-ref §41.4 community gallery) with
      moderation; cloud sync (per-account quota). Implemented with
      `FV2PhotoModeGalleryCloudSyncPolicy`, `FV2PhotoModeGalleryCloudSyncQuota`,
      and `V2.UI.PhotoMode.GalleryCloudSync.AssetContract`.
- [x] Direct upload to platform (PSN / Xbox / Steam screenshot share, Switch
      capture button hook). Implemented with `FV2PhotoModePlatformShareTarget`,
      `FV2PhotoModePlatformShareJob`, and
      `V2.UI.PhotoMode.PlatformShare.AssetContract`.

### 45.6 Sequencer presets

- [x] Per-mode cutscene-template library: walkout, ring-entrance, octagon-
      walkout, Def Jam-club-entry, stage transition, mid-fight cinematic,
      finisher cinematic, ending-cinematic. Implemented with
      `EV2CutsceneTemplateKind`, `FindCutsceneTemplate`, and
      `V2.Cinematics.CutsceneTemplateLibrary.AssetContract`.

### 45.7 Cinematic skip granularity & Director's Cut

- [x] **Per-scene skip granularity**: Skip Scene / Skip Chapter / Skip to Next
      Choice / Skip All; per-scene "Hold to Skip" with 1.5s hold to prevent
      accidental skip. Implemented with `EV2CinematicSkipScope`,
      `FV2CinematicSkipPolicy`, and
      `V2.Cinematics.SkipGranularity.AssetContract`.
- [x] **Per-cinematic resume point**: skipping then unpausing resumes at the
      next semantic checkpoint (not the next frame). Implemented with
      `EV2CinematicResumeCheckpointKind`, `FV2CinematicResumeCheckpoint`,
      `ResolveCinematicResumePoint`, and
      `V2.Cinematics.ResumePoint.AssetContract`.
- [x] **Director's Cut**: extended-cut option for Story / Side Stories with
      bonus scenes + alt-take footage + extended dialog; toggleable per chapter.
      Implemented with `EV2DirectorCutChapterMode`,
      `FV2DirectorCutChapterOption`, `ResolveDirectorCut`, and
      `V2.Cinematics.DirectorCut.AssetContract`.
- [x] **Alternate POV**: certain cinematics offer alt-camera-perspective (e.g.,
      view a fight from each fighter's perspective); skippable to preferred POV.
      Implemented with `EV2AlternatePOVPerspective`,
      `FV2AlternatePOVSceneOption`, `ResolveAlternatePOV`, and
      `V2.Cinematics.AlternatePOV.AssetContract`.
- [x] **Director's commentary track** option (cross-ref §73.3 Story Theater)
      toggleable per scene. Implemented with `EV2CinematicCommentaryTrackKind`,
      `FV2CinematicCommentarySceneTrack`, `ResolveCinematicCommentary`, and
      `V2.Cinematics.DirectorCommentary.AssetContract`.
- [x] **Behind-the-scenes commentary track** (filmmaker-style) on flagship
      cutscenes; localized. Implemented with localized
      `EV2CinematicCommentaryTrackKind::BehindTheScenes` tracks,
      `HasRequiredBehindTheScenesCommentaryCoverage`, locale fallback, and
      `V2.Cinematics.BehindTheScenesCommentary.AssetContract`.

### 45.8 In-engine cutscene captioning depth

- [x] **Per-character speaker tag** on subtitles (cross-ref §53 +
      accessibility); ethnically- / culturally-distinguishable tag style where
      helpful. Implemented with `FV2SubtitleSpeakerTagStyle`,
      `FV2CinematicSubtitleLine`, high-contrast/cultural-context validation,
      `ResolveSubtitleSpeakerTag`, and
      `V2.Cinematics.SubtitleSpeakerTags.AssetContract`.
- [x] **Per-scene cue captioning**: descriptive captions for non-dialog audio
      cues (e.g., "[ominous music swells]", "[crowd gasps]") for
      hearing-impaired players. Implemented with `FV2CinematicCueCaption`,
      `EV2CinematicCueCaptionKind`, time-window resolution,
      `ResolveCinematicCueCaption`, and
      `V2.Cinematics.CueCaptioning.AssetContract`.
- [x] **Per-locale subtitle timing override** for languages with different
      speaking rates. Implemented with `FV2SubtitleTimingOverride`,
      `FV2SubtitleTimingOverrideCatalog`, default timing fallback,
      `ResolveSubtitleTimingOverride`, and
      `V2.Cinematics.SubtitleTimingOverrides.AssetContract`.

---

## 46. UI / HUD / Menus / Front-End

### 46.1 Front-end

- [x] CommonUI-based main menu: Play (Single-player / Online / Battle Hub /
      Versus), Modes Hub, Roster, Customize, Store, Settings, Extras.
      Implemented with `FV2MainMenuSpec`, `UV2MainMenuScreen`,
      `ResolveMainMenuEntryRoute`, a native CommonUI main-menu contract, and
      `V2.UI.MainMenu.AssetContract`.
- [x] Persistent ticker (online status, friends online, ongoing matchmaking
      ticket). Implemented with `FV2PersistentTickerSpec`,
      `UV2PersistentTickerWidget`, frontend view-model bindings, and
      `V2.UI.PersistentTicker.AssetContract`.

### 46.2 In-match HUD

- [x] Per-ruleset HUD overlay: SF (drive bar + super bar), MK (stamina + X-Ray
      meter), Tekken (heat + rage indicator), WWE (kickout + submission +
      momentum), UFC (stamina + health + round), SC (soul charge + critical
      edge), DJ (Blazin' segments + crowd hype). Implemented with
      `FV2RulesetHUDOverlayCatalog`, `UV2RulesetHUDOverlayWidget`, subsystem
      apply/swap support, match HUD view-model bindings,
      `RulesetHUDOverlay_V2_Contract.json`, and
      `V2.UI.RulesetHUDOverlay.AssetContract`.
- [x] HUD reduced-motion variant; HUD scale slider 75-150%. Implemented with
      `FV2HUDPresentationConfig`, `FV2HUDScaleSliderSpec`, full/reduced
      `EV2HUDMotionVariant` profiles, native `UV2HUDAccessibilitySettingsWidget`
      slider binding, subsystem/view-model presentation resolution, and
      `V2.UI.HUDAccessibilityPresentation.AssetContract`.

### 46.3 Match-setup screen

- [x] Fighter select, costume select, stage select, ruleset select, stipulation
      pick, music pick. Implemented with `FV2MatchSetupScreenSpec`,
      launch-data-backed stage/music options, combat-ruleset-backed rulesets and
      stipulations, native `UV2MatchSetupScreen` selection state,
      `UV2MatchSetupViewModel` bindings, subsystem registration, and
      `V2.UI.MatchSetupScreen.AssetContract`.
- [x] Online variant adds matchmaking ping bar, region pick. Implemented with
      `FV2OnlineMatchSetupScreenSpec`, launch-region datacenter options,
      segmented ping quality bars, native `UV2OnlineMatchSetupScreen` region
      selection, `UV2OnlineMatchSetupViewModel` bindings, subsystem
      registration, and `V2.UI.OnlineMatchSetupScreen.AssetContract`.

### 46.4 Settings

- [x] Video, Audio, Controls (rebind), Gameplay (auto-block, button macros,
      input display, frame counter), Accessibility (§53), Network, Account,
      Privacy (§55). Implemented with `FV2SettingsScreenSpec`, native
      `UV2SettingsScreen`, `UV2SettingsViewModel` bindings, existing input
      rebinding/HUD accessibility contracts, subsystem category selection, and
      `V2.UI.SettingsScreen.AssetContract`.

### 46.5 Notifications

- [x] Toast notifications for friend online, party invite, tournament round
      ping, daily challenge complete. Implemented with
      `FV2NotificationToastSurfaceSpec`, typed toast templates,
      `UV2NotificationToastWidget`, `UV2NotificationToastViewModel`, subsystem
      queueing by notification type, source-controlled
      `NotificationToasts_V2_Contract.json`, and
      `V2.UI.NotificationToasts.AssetContract`.

### 46.6 Tutorials

- [x] Built-in interactive tutorial per ruleset: 8-12 lessons with input-
      diagram overlay, training-mode integration, frame-data view, hit- reaction
      trainer. Implemented by `FV2InteractiveTutorialCatalog`,
      `FV2InteractiveTutorialRulesetTrack`, `FV2InteractiveTutorialLessonSpec`,
      native `UV2InteractiveTutorialScreen`, `UV2InteractiveTutorialViewModel`,
      subsystem registration/selection APIs, the default
      `Tutorial.Interactive.V2` curriculum with eight lessons for each launch
      ruleset, `InteractiveTutorial_V2_Contract.json`,
      `check-v2-interactive-tutorial-ui.py`, and
      `V2.UI.InteractiveTutorial.AssetContract`.

### 46.7 Move List Browser

- [x] In-game move list per fighter searchable by input, by tag (Anti-Air,
      Reversal, Punisher, Launcher, Throw, Special, Super, Finisher), by
      property (Armor, Invincible, Projectile, Overhead, Low, Mid). Implemented
      by `FV2MoveListCatalog`, `FV2MoveListFighterSpec`,
      `FV2MoveListMoveRowSpec`, native `UV2MoveListBrowserScreen`,
      `UV2MoveListBrowserViewModel`, subsystem search/selection APIs,
      `MoveListBrowser_V2_Contract.json`, `check-v2-move-list-browser-ui.py`,
      and `V2.UI.MoveListBrowser.AssetContract`.
- [x] Each move row shows animated input glyph (clip of the input dance),
      preview clip of the move, frame data summary (startup / active / recovery
      / on-hit / on-block), damage, meter cost, cancel-into tags.
- [x] Practice button per move: jumps into training (§60) with the move
      pre-loaded as the "trial move" — useful for instant lab work.
- [x] Favorites / pinned moves on home dashboard.
- [x] Per-fighter Move-Of-The-Day rotation on home dashboard to surface breadth.

### 46.8 In-HUD Input Display, Frame Counter, Hit Indicators

- [x] **Input Display** — toggleable column showing last 30 inputs as glyphs
      with frame number; available in training (§60), replays (§62), and online
      (player-side only). One-sided to keep ranked fair; both sides visible in
      training / replay. Implemented by `FV2InHUDCombatTelemetryOverlaySpec`,
      native `UV2InHUDCombatTelemetryOverlay`, 30-row glyph/frame input columns,
      online-only local-player visibility enforcement, subsystem apply/clear
      APIs, `InHUDCombatTelemetryOverlay_V2_Contract.json`,
      `check-v2-in-hud-combat-telemetry.py`, and
      `V2.UI.InHUDCombatTelemetry.AssetContract`.
- [x] **Frame counter** — small monospace block showing current frame index
      within the current move (e.g., "Active 4/6"). Implemented in the same
      telemetry overlay with `FV2HUDMoveFrameCounterSpec`, Blueprint builders,
      widget/viewmodel bindings, and automation coverage.
- [x] **Hit indicators** — on-screen "HIT", "BLOCK", "COUNTER", "PUNISH",
      "TRADE", "WHIFF PUNISH", "REVERSAL", "JUST BLOCK" tags that flash for one
      second per event; toggleable. Implemented with
      `FV2HUDHitIndicatorEventSpec`, canonical tag labels, 60-frame flash
      validation, and toggled active-event binding.
- [x] **Combo damage** — running combo counter with hit count, damage total,
      damage scaling % per hit, juggle stage indicator. Implemented with
      `FV2HUDComboDamageSpec`, per-hit scaling arrays, total/latest damage
      fields, and juggle stage indicators.
- [x] **Meter advantage** — small +/- indicator showing relative meter advantage
      between players. Implemented with `FV2HUDMeterAdvantageSpec`, plus/minus
      glyphs, signed percentage text, and local-minus-opponent delta validation.
- [x] **Buffer ring overlay** — visualize the 6-frame buffer queue,
      training-only. Implemented as the telemetry overlay's six-cell training
      buffer ring using existing input glyph cell generation and validation.

### 46.9 Pause-anywhere, Practice-during-Loading, Quick Restart

- [x] **Pause-anywhere (SP)** — in any single-player mode, pause opens a full
      menu (resume, restart, move list, settings, photo mode, training tools,
      quit). Disabled in online matches (where pause is restricted to one short
      timeout per round if any). Implemented by `FV2PausePracticeFlowSpec`,
      native `UV2PauseFlowScreen`, CommonUI `PauseMenu` / `TrainingTools`
      navigation, online timeout-only resolution, subsystem resolve APIs,
      `PausePracticeFlow_V2_Contract.json`, `check-v2-pause-practice-flow.py`,
      and `V2.UI.PausePracticeFlow.AssetContract`.
- [x] **Practice-During-Loading (SF6 / MK1 feature)** — match-load screens offer
      the player a free-practice play area against a dummy with the same fighter
      selected; auto-yields to the loaded match when ready. Implemented as the
      `LoadingPractice` CommonUI surface plus `FV2PracticeDuringLoadingSession`,
      selected-fighter dummy validation, deterministic isolation flags,
      auto-yield state, widget, viewmodel, and subsystem start/yield coverage.
- [x] **Quick Restart** — single-button restart bound to a controller shortcut
      in training, arcade, tower. Implemented with `FV2QuickRestartRequest`,
      `BuildQuickRestartRequest`, controller glyph / action tags, training /
      arcade / tower allow-listing, online rejection, and subsystem trigger
      coverage.
- [x] **One-handed control scheme** option (assist-tier; see §53). Implemented
      with `FV2OneHandedControlSchemeSpec`, off / left / right profile-saved
      choices in `Settings.Controls.OneHanded`, one-handed input profile
      binding, widget/subsystem selection APIs, and MVVM fields for controls
      settings.

### 46.10 Front-end polish

- [x] CommonUI activation graph: every screen is an `UCommonActivatableWidget`
      with focus rules, controller-friendly navigation, KB+M support.
      Implemented with `FV2CommonUIActivationGraphSpec`, per-screen
      `FV2CommonUIActivationFocusRule` coverage, explicit graph focus/action
      tags, native `UV2FrontendPolishScreen`, subsystem/MVVM bindings, and
      automation/static validation that every graph screen has a CommonUI focus
      rule.
- [x] Per-platform input glyph swap (PS5 buttons vs Xbox vs Switch2 vs generic).
      Implemented with `FV2InputGlyphSwapSpec` and runtime hot-swappable
      Generic, PS5 DualSense, Xbox Series, Switch2 Pro, and Keyboard/Mouse glyph
      sets resolving confirm, cancel, back, menu, and quick-restart actions with
      generic fallback.
- [x] Animated parallax title screen with rotating roster spotlights.
      Implemented with `FV2ParallaxTitleScreenSpec`, reduced-motion fallback,
      first-viewport brand signal policy, and three rotating roster spotlights
      surfaced through the front-end polish widget and viewmodel.
- [x] News feed widget pulling from CMS: live patch notes, esports schedule,
      cosmetic-rotation banners, daily-challenge teaser. Implemented with
      `FV2FrontendNewsFeedSpec`, `CMS.Frontend.News`, cached online news cards,
      required item-type coverage, and MainMenu / Extras navigation to
      `NewsFeed`.
- [x] In-app changelog viewer for current and past patches. Implemented with
      `FV2ChangelogViewerSpec`, a searchable offline-cache viewer, exactly one
      current patch, prior patch retention, and native widget/subsystem lookup
      APIs.
- [x] In-app survey widget for milestone feedback (post-tutorial, post-first-
      ranked-promotion, post-launch-month). Implemented with
      `FV2FrontendSurveySpec`, optional anonymous milestone prompts, CMS form
      ids, per-milestone throttling, and subsystem queue delegates.

### 46.11 HUD theme customization

- [x] **HUD theme picker**: pre-built themes (per-ruleset default, Esports
      Clean, Streamer-Safe, Retro Arcade, High-Contrast) and a custom theme
      editor with per-element color / opacity / scale / position offsets.
      Implemented with `FV2HUDThemeCatalog`, `FV2HUDThemeSpec`,
      `FV2HUDThemeElementStyle`, native `UV2HUDThemePickerWidget`,
      `HUDThemePicker` navigation from Customize and Accessibility settings,
      per-ruleset defaults plus Esports Clean, Streamer-Safe, Retro Arcade,
      High-Contrast, and custom-template themes, asset contract coverage, and
      `check-v2-hud-theme-customization.py`.
- [x] Themes saved per profile; shareable as code. Implemented with
      profile-saved theme metadata, deterministic `V2HUD-` share-code
      generation, custom theme edit requests, Blueprint/subsystem helpers, and
      HUD viewmodel bindings for active theme id, share code, and element
      styles.
- [x] Ranked enforces a tournament-safe theme by default; cosmetic-only tweaks
      always allowed. Implemented with ranked/tournament theme resolution that
      replaces unsafe themes with `HUD.Theme.EsportsClean` while keeping
      cosmetic-only element tweaks available.

### 46.12 Combo / event notification slides

- [x] **Combo notification slide** on-screen ("12-HIT COMBO!", "PERFECT", "FIRST
      BLOOD", "DOUBLE KO", "WHIFF PUNISH", "JUST BLOCK", "PARRY") driven by
      gameplay-event triggers; per-ruleset taxonomy (MK aggressive flavor, SF
      clean, Tekken juice, SC elegant, WWE broadcast). Implemented with
      `FV2HUDNotificationSlideCatalog`, typed combat-event templates, per-
      ruleset `FV2HUDNotificationSlideRulesetTaxonomy`, native
      `UV2HUDNotificationSlideWidget`, Blueprint/subsystem builders, MVVM HUD
      bindings, `ComboEventNotificationSlides_V2_Contract.json`, and
      `V2.UI.ComboEventNotificationSlides.AssetContract`.
- [x] Achievement / milestone notification slides (rank promotion, mastery
      level-up, first finisher of the day). Implemented as milestone slide
      templates sharing the same gameplay-inert HUD queue and accessible slide
      binding path.
- [x] Notification queue with priority + cooldown (no double-stacking).
      Implemented with `FV2HUDNotificationSlideQueueSpec`, one-active-slide
      enforcement, priority preemption, duplicate event cooldown suppression,
      subsystem queue snapshots, widget queue application, and UI-module
      automation coverage.

### 46.13 Open-world / mode-specific UI

- [x] **Mini-map** for World Tour (§24), Tekken Force (§25), Devil Within (§26),
      Konquest (§22.6), Def Jam Story (§35): per-mode style, points of interest,
      fast-travel markers, quest waypoints. Implemented with
      `FV2ModeSpecificUICatalog`, per-mode `FV2ModeMiniMapSpec` style contracts,
      typed POI / fast-travel / quest-waypoint markers, native
      `UV2ModeSpecificUIScreen`, Blueprint/subsystem builders, MVVM bindings,
      `ModeSpecificUI_V2_Contract.json`, and
      `V2.UI.ModeSpecificUI.AssetContract`.
- [x] **Quest log** UI with main / side / faction quests; per-quest objectives,
      rewards, completion criteria, abandon option. Implemented with
      `FV2ModeQuestLogSpec`, `FV2ModeQuestLogEntry`, objective/reward structs,
      category coverage validation, per-mode surface-state builders, and
      automation coverage.
- [x] **Inventory grid** for World Tour / Def Jam Story / Konquest / story modes
      (consumables, augments, gear, currency). Implemented with
      `FV2ModeInventoryGridSpec`, required mode/item-type coverage validation,
      controller-friendly grid metadata, item-detail bindings, and viewmodel
      inventory counts.
- [x] **Shop UI** variants per mode: cosmetic shop (Battle Hub), in-mode shop
      (World Tour vendor, Def Jam shop), Krypt forge, Fighter Coins shop
      (§23.5), MyFaction pack store. Implemented with `FV2ModeShopSpec`,
      `EV2ModeShopVariant`, entitlement-safe/server-authoritative shop
      contracts, forge crafting, pack-odds disclosure, and CI checker coverage.

### 46.14 Visual hit indicators on HUD

- [x] Per-hit damage number popup (toggleable; default off in ranked).
      Implemented by extending `FV2InHUDCombatTelemetryOverlaySpec` with visual
      hit indicator popup policy, per-hit `DamageAmount` / `DamagePopupText`,
      `HUD.Anchor.HitImpact.WorldToScreen` anchoring, and ranked suppression
      validation via `bRankedDamagePopupSuppressed`.
- [x] Combo damage tally counter at top of opponent HP bar (current combo total
      damage). Implemented with `FV2HUDComboDamageSpec::TallyText`,
      `HUD.Anchor.OpponentHealthBar.Top`, and validation that the tally includes
      the current combo total damage.
- [x] Meter advantage delta indicator (small +/- icon). Implemented with
      `FV2HUDMeterAdvantageSpec::DeltaIconAnchorTag`,
      `HUD.Anchor.MeterAdvantage.SmallDelta`, plus / minus / even glyphs, and
      viewmodel binding coverage.
- [x] Stage-out / ring-out warning at perimeter (SC ruleset). Implemented with
      `FV2HUDRingOutWarningSpec`, SoulCalibur ruleset gating, caution / critical
      states, perimeter edge tags, and reduced-motion-safe HUD validation.
- [x] Stipulation-rule reminder strip (e.g., "First Blood", "Iron Man",
      "Submission Only", "No DQ") permanently visible in match. Implemented with
      `FV2HUDStipulationReminderStripSpec`, permanent-match visibility,
      canonical stipulation taxonomy flags, CommonUI widget accessors, native
      automation, and `check-v2-visual-hit-indicators.py`.

### 46.16 Wishlist, cosmetic gifting, refund window

- [x] **Wishlist** with bell-notification on restock / sale (cross-ref §23.5).
      Implemented with `FV2CommerceStorefrontSpec` wishlist entries, restock /
      sale bell triggers, queued notification state, native `UV2CommerceScreen`
      accessors, and `check-v2-commerce-storefront.py`.
- [x] **Cosmetic gifting** to friends: send a cosmetic from your inventory /
      purchase one for a friend with a per-month gift cap to prevent abuse +
      money-laundering compliance. Implemented with `FV2CommerceGiftPolicySpec`,
      inventory and purchase-for-friend gift sources, monthly cap validation,
      friend relationship enforcement, AML-cap flags, cash-out blocking, and
      server-authoritative gating.
- [x] **Cosmetic refund window**: 24h regret-refund on accidentally- purchased
      cosmetics (unused only); per-platform compliance (PSN / Xbox / Steam
      refund policy aware). Implemented with `FV2CommerceRefundPolicySpec`,
      unused-only 24h eligibility, PSN / Xbox / Steam platform awareness, and
      server-verified entitlement validation.
- [x] **Bundle preview** before purchase: see all included items + their
      individual rarity tier (cross-ref §16.9). Implemented with
      `FV2CommerceStoreItemSpec::BundleItems`, `FV2CommerceBundleItemSpec`,
      rarity-tier disclosure for every bundled cosmetic, and CommonUI widget
      bundle preview accessors.
- [x] **In-app purchase history** export from settings (cross-ref §68.5
      disclosure). Implemented with `FV2CommercePurchaseHistoryExportSpec`,
      `Settings.Account.PurchaseHistoryExport`, platform receipts, refund
      status, privacy confirmation, settings-row automation, and CI static
      validation.

### 46.15 DC grace, outcome verification, pause-during-match policy

- [x] **DC grace period**: 30-second rejoin window after disconnect; both sides
      see "Opponent Disconnected — Awaiting Reconnect (Xs)" overlay.
      Auto-forfeit at expiration with rank-penalty attribution to crash-
      reporter signal (cross-ref §71.4). Implemented with
      `FV2OnlineMatchFlowSpec`, `FV2DisconnectGraceOverlaySpec`, 30-second
      validation, both-player visibility, auto-forfeit, crash-reporter
      attribution, native automation, and `check-v2-online-match-flow.py`.
- [x] **Match outcome verification screen**: post-match, both players see a
      shared scorecard with replay-share button (one-tap upload to cloud replay
      store §62), report-opponent button, friend-request button, rematch button.
      Implemented with `FV2MatchOutcomeVerificationSpec`, scorecard rows, replay
      cloud upload, report, friend request, rematch actions, and
      `UV2OnlineMatchFlowScreen`.
- [x] **Pause-during-match policy** (online): one 60-second pause per player per
      match in Casual / Custom Room / Tournament Mode; ranked online disables
      pause entirely (no pause in ranked). Implemented with
      `FV2OnlinePausePolicyRule`, ranked hard-disable, and one 60-second pause
      for Casual / Custom Room / Tournament.
- [x] **Network condition icon next to opponent name** during match: small bar
      indicating RTT / jitter / loss in real-time. Implemented with
      `FV2OpponentNetworkConditionIconSpec`, `HUD.Anchor.OpponentName.Right`,
      realtime RTT / jitter / loss metrics, and compact condition-bar state.
- [x] **Recommended-Practice prompt** after 5 consecutive ranked losses:
      non-intrusive suggestion to enter training mode for relevant mechanic
      (cross-ref §53.4 + §61.6). Implemented with
      `FV2RecommendedPracticePromptSpec`, five-loss threshold validation,
      mechanic tags, and Training Tools routing.
- [x] **Achievement-progress tracker** overlay (toggleable): visible progress
      bars for active achievements during play. Implemented with
      `FV2AchievementProgressTrackerSpec`, toggleable progress bars, and active
      achievement tracker automation.
- [x] **Mastery-progress widget** on profile + main menu showing current
      Character Mastery level for selected fighter (cross-ref §61.5).
      Implemented with `FV2MasteryProgressWidgetSpec`, profile and main-menu
      surface validation, selected fighter mastery progress, and UI-module
      coverage.

---

## 47. Profile, Save, & Progression

### 47.1 Save game

- [x] `UV2_SaveGame` slots per platform / per user, with: profile, career
      progress per mode, unlocked content, loadouts, settings, photo mode
      gallery, replays. Implemented with `UV2SaveGame`, `FV2SaveSlotPolicy`,
      per-platform/per-user descriptors, explicit payload category coverage,
      settings snapshots, photo gallery records, offline replays, and
      `check-v2-profile-save-game.py`.
- [x] Cloud save via OnlineServices integration; conflict resolution UI on
      out-of-sync save. Implemented with `FV2CloudSaveIntegrationPolicy`,
      `FV2CloudSaveConflictResolutionScreenSpec`, side-by-side local/cloud
      headers, local/cloud/merge/manual-review actions, and cross-account merge
      blocking.
- [x] Progression: global player level, mastery per fighter, mastery per style,
      mode-specific rank. Implemented with `EV2ProgressionTrackDomain`, default
      account/fighter/style/ranked tracks, validation, and subsystem snapshot
      coverage.
- [x] Daily / weekly challenge feed; rotation server-driven. Implemented with
      `FV2ChallengeFeedSpec`, `FV2ChallengeFeedItem`, daily/weekly cadences,
      OnlineServices rotation endpoint metadata, and persistence automation.

### 47.2 Player Card / Profile Card

- [x] Profile card visible to opponents (cross-ref §40.2): banner image, avatar
      pose, equipped title text, win streak, rank icon, faction badge, preferred
      fighter portrait.
- [x] Card unlocks via challenges, milestones, faction quests, tournament
      results.
- [x] Per-account "showcase" stat trio (e.g., "Top-3 fighters by win rate",
      "Highest combo achieved", "Tournament cup placements").

      Implemented with `FV2ProfileCardPresentationSpec` showcase stats,
      `FV2ProfileCardShowcaseStat`, `EV2ProfileCardShowcaseStatType`,
      opponent-visible/account-scoped validation, default top-fighters /
      highest-combo / tournament-cup stat rows, widget Blueprint getters,
      source-controlled `ProfileCardTitleCard_V2_Contract.json` progression
      coverage, targeted Unreal automation in `ProfileCardTitleCard.spec.cpp`
      and `UI.Module.spec.cpp`, and
      `V2/ue/Tools/check-v2-profile-card-title-card.py`.

### 47.3 Match History & Stats

- [x] Match history per account: last 200 matches by default; full history
      browsable in profile; filter by mode / ruleset / fighter / opponent /
      outcome / date / rank.
- [x] Per-fighter stats: win rate, average match length, favorite combo,
      most-used finisher, KO ratio, perfect rounds.
- [x] Per-stage stats: win rate, average match length.
- [x] Win streak / loss streak indicators with visual flair (hot streak, cold
      streak); decay rules.
- [x] Personal best leaderboards: longest combo, fastest KO, highest damage
      single move, most ring-outs, etc.
- [x] Rank history graph (per-mode, per-season).
- [x] Per-matchup history (fighter A vs. fighter B win rate over time).

      Implemented match history/stat persistence with
      `FV2PlayerMatchStatsProfile`, account-scoped full-history storage with a
      200-match recent default, profile browser filters, per-fighter/per-stage
      stat rows, hot/cold streak flair plus decay rules, personal-best
      leaderboard metrics, rank-history graph points, matchup timelines,
      derived aggregate rebuilds from full history, Blueprint/save/subsystem
      APIs, `ProfileSaveGame_V2_Contract.json` coverage, targeted persistence
      automation, and static validators.

### 47.4 Achievements / Trophies

- [x] Per-platform trophy / achievement plan avoiding forced grind for basic
      completion (cross-ref §56.3).
- [x] In-game achievement-progress UI surfacing nearby unlocks.
- [x] Hidden achievements for discovered tech (Brutality conditions,
      character-specific Easter eggs).

      Implemented achievement/trophy persistence with
      `FV2AchievementTrophyPlan`, per-platform trophy bindings for Steam,
      PlayStation, Xbox, and Switch, grind-safe basic-completion rules,
      nearby-unlock progress records, hidden discovered-tech reveals for
      Brutality conditions and character-specific Easter eggs,
      `UV2AchievementProgressWidget` profile/HUD UI surfacing,
      `AchievementTrophies_V2_Contract.json` coverage, targeted persistence/UI
      automation, and `check-v2-achievements-trophies.py`.

### 47.5 Save integrity

- [x] Save corruption recovery: auto-backup last 3 saves; restore prompt on
      corruption detection.
- [x] Save export / backup to local file (PC; console where TRC permits).
- [x] Save migration framework: every save record carries a version + migrator;
      no destructive loads on engine / content upgrade.

      Implemented save integrity with `FV2SaveIntegrityPolicy`, an automatic
      last-three backup ring, corruption-triggered
      `FV2SaveCorruptionRecoveryPromptSpec`, PC local export plus console TRC
      gating, `FV2SaveMigrationPlan` payload-version stamps and explicit
      non-destructive migrators, subsystem snapshot/API coverage,
      `SaveIntegrity_V2_Contract.json`, targeted persistence automation, and
      `check-v2-save-integrity.py`.

### 47.6 Auto-save

- [x] Auto-save after every match in MyCAREER / MyRISE / GOAT Career / Universe
      / Story / MyGM / Def Jam Story / Chronicles / World Tour.
- [x] Quick-resume save-state captured on app-switch / suspend (cross-ref §71).

      Implemented auto-save with `FV2AutoSavePolicy`, explicit after-match
      rules for MyCAREER, MyRISE, GOAT Career, Universe, Story, MyGM, Def Jam
      Story, Chronicles, and World Tour, match-complete auto-save events that
      update mode progress and the save-integrity backup ring, app-switch /
      suspend `FV2QuickResumeSaveState` capture, subsystem snapshot/API
      coverage, `AutoSave_V2_Contract.json`, targeted persistence automation,
      and `check-v2-auto-save.py`.

---

## 48. Online Services: Matchmaking, Ranked, Leaderboards, Replays

### 48.1 Online services backend

- [x] OnlineServices abstraction (EOS Online Services baseline; Sony NP, MS
      Live, Switch SDK shims via platform-specific subsystems).
- [x] Auth: platform account + optional cross-platform account (publisher
      account).
- [x] Friends, presence, party (up to 8), invites.

      Implemented OnlineServices backend abstraction with
      `FV2OnlineServicesBackendConfig`, EOS baseline binding plus
      certification-scoped Sony NP / Xbox Live / Switch SDK shims,
      `FV2OnlineLoginRequest` and `FV2OnlineLoginResult` for platform account
      auth with optional `@oshun/identity` publisher accounts,
      `FV2PartyInvite` for 8-player parties, subsystem backend/login/invite
      APIs and snapshot fields, `OnlineServicesBackend_V2_Contract.json`,
      targeted online-services automation, and
      `check-v2-online-services-backend.py`.

### 48.2 Matchmaking

- [x] Per-mode matchmaking queues (Casual / Ranked / Tournament / Crew / Royal
      Rumble lobby / UFC PPV public).
- [x] Skill-based matchmaking with TrueSkill2 / Glicko2 implementation; region
      weighting; ping cap; expansion over wait time.
- [x] Tag-team and 4-player queue with role-pref balancing.

      Implemented matchmaking with default Casual / Ranked / Tournament / Crew /
      Royal Rumble / UFC PPV queues, `FV2MatchmakingSkillProfile` for
      TrueSkill2 and Glicko2 conservative ratings, wait-expanded
      `FV2MatchmakingSearchEnvelope` skill / ping / region windows,
      policy-aware match scoring with region weighting and ping caps,
      role-balanced tag-team 4-player queue support, subsystem queue
      configuration and snapshot fields, `OnlineMatchmaking_V2_Contract.json`,
      targeted online-services automation, and
      `check-v2-online-matchmaking.py`.

### 48.3 Ranked & leaderboards

- [x] Per-mode ladder; seasonal reset; placement matches; promotion / demotion
      thresholds.
- [x] Global, regional, friends leaderboard surfaces.

      Implemented ranked and leaderboards with per-mode ladder configs for
      Casual / Ranked / Tournament / Crew / Royal Rumble / UFC PPV,
      season-stamped player state, placement match completion, seasonal reset
      carryover, promotion / demotion tier thresholds, ranked progression
      results, subsystem ranked ladder and season-reset APIs, global /
      regional / friends leaderboard queries, `OnlineRankedLeaderboards_V2`
      contract coverage, targeted online-services automation, and
      `check-v2-online-ranked-leaderboards.py`.

### 48.4 Replays

- [x] Server-side replay storage; share by code; cloud library; download to
      local replays.
- [x] Ghost-data (Tekken) export: replay encoded as ghost data usable in Ghost
      Battle (§19).

      Implemented online replays with server-side cloud descriptors, replay
      share codes, cloud-library queries, local `.v2replay` download jobs,
      Tekken `Ruleset.Tekken.IronFist` ghost-data exports usable in Ghost
      Battle, subsystem publish / query / download / export APIs, replay
      snapshot counts, `OnlineReplays_V2_Contract.json`, targeted
      online-services automation, and `check-v2-online-replays.py`.

### 48.5 Reporting & moderation

- [x] In-game report flow (cheating, harassment, custom-content abuse).
- [x] Moderation review console for ops; ban escalation ladder; appeal flow.

      Implemented online reporting and moderation with in-game cheating,
      harassment, and custom-content abuse reports, replay/chat/screenshot
      evidence attachment, abuse-throttle validation, ops moderation review
      console configuration, ML prefilter + 24-hour human-review SLA cases,
      warning -> 24h chat mute -> 24h matchmaking ban -> seven-day ban ->
      permanent-ban escalation, statement-of-reasons decisions, appeal
      submission, subsystem report/case/decision/appeal APIs, runtime snapshot
      counts, `OnlineReportingModeration_V2_Contract.json`, targeted
      online-services automation, and
      `check-v2-online-reporting-moderation.py`.

### 48.6 Match flow polish

- [x] **Quick Rematch** button on post-match screen: requeues both players
      immediately (Casual / Player Match). Both must accept; 8-second timeout.
      Persistent until either declines.
- [x] **Rematch with Character Change** (Tekken 8-style): allow each side to
      swap fighter between rematches; opponent sees swap on VS screen.
- [x] **First-to-N set scoring** in Player Match / Custom Room: best-of-3, 5, 7,
      10; running score in HUD.
- [x] **In-lobby spectate seat-grab**: any open player slot can be observed by
      the next lobby joiner.

      Implemented online match-flow polish with quick rematch post-match button
      policy, Casual / Player Match immediate requeue, both-player acceptance,
      8-second timeout, persistence until decline, Tekken-style rematch
      character-change VS preview, first-to-N best-of-3/5/7/10 set scoring with
      running HUD score, lobby spectate seat-grab for open player slots,
      `FV2OnlineMatchFlowSpec` widget accessors, focused UI automation,
      `OnlineMatchFlowPolish_V2_Contract.json`, and
      `check-v2-online-match-flow-polish.py`.

### 48.7 Network quality pre-match

- [x] **Network test (handshake)** runs before every ranked match starts: RTT,
      jitter, packet loss measured both sides; results stamped into match
      record.
- [x] **Wi-Fi warning**: detect Wi-Fi vs. wired connection; warn in ranked queue
      if Wi-Fi detected with toggle to dismiss or upgrade-to-wired checklist.
- [x] **Mobile-hotspot / 4G/5G detection** + warning (where platform API
      provides connection type).
- [x] **Network condition graph** persistent in lobby + pre-match (small colored
      RTT/loss indicator); player can decline match if conditions poor.

  Implemented with `FV2NetworkQualityHandshakeResult`,
  `FV2NetworkQualityPreMatchSpec`, ranked record stamping, Wi-Fi/mobile warning
  flags, persistent condition graph accessors,
  `OnlineNetworkQualityPreMatch_V2_Contract.json`, and
  `V2/ue/Tools/check-v2-online-network-quality.py`.

### 48.8 Cloud features

- [x] Cross-platform party (cross-ref §67) — match together from PS5 + XSX +
      PC + Switch2 lobby.
- [x] Friend match search: find friends in matchmaking queue; spectate friend
      matches in progress.

  Implemented with `FV2CrossPlatformPartySession`, `FV2FriendMatchPresence`,
  `FV2FriendMatchSearchQuery`, friend spectate join requests, subsystem runtime
  snapshot fields, `OnlineCloudFeatures_V2_Contract.json`, and
  `V2/ue/Tools/check-v2-online-cloud-features.py`.

---

## 49. Anti-Cheat & Fair Play

- [x] Kernel-level AC (EAC or BattlEye) for PC; platform-native AC for consoles.
- [x] Server-side validation pass: input rate, attribute integrity, replay drift
      detection.
- [x] Rage-quit penalty (rank loss + cooldown; repeat offender escalation).
- [x] Macro detection (statistical analysis of inputs across matches).
- [x] Replay-based cheat investigation tools for ops.
- [x] **Hardware-ID (HWID) ban** for severe / repeat offenders; HWID bans
      survive account creation; documented escalation criteria.
- [x] **Win-trading detection**: graph-analysis of repeat-opponent + low-
      contest win rates across accounts; auto-flag review queue.
- [x] **Smurf detection**: new-account-with-pro-level-stats heuristic; flagged
      matches don't grant rank progression to suspected smurfs.
- [x] **VPN / Proxy detection**: known-VPN IP database; tournament-mode may
      block VPN traffic; ranked may rate-limit.
- [x] **Multi-account detection**: HWID + behavioral signature clustering;
      enforcement on max-N-accounts-per-HWID per region.
- [x] **Boost detection**: ranked-points farming (intentional losses to friends,
      score-trading) flagged via outcome-velocity anomaly.
- [x] **Geographic anomaly detection**: account-region jumps between sessions
      flagged for compromise / VPN evasion.
- [x] **Coordinated-throw / collusion detection** for tournament play (cross-ref
      §51) — repeat losses to specific opponents in bracket.
- [x] **Forensic logging**: every flagged match preserves replay + inputs +
      network telemetry for ops review.
- [x] **Ban appeal flow**: in-game appeal form → ops review → ruling response
      within documented SLA; appeals visible in account history.
- [x] **Telemetry HMAC signing**: every telemetry event signed with per- session
      HMAC key; backend verifies signature before ingestion; replay events with
      invalid HMAC flagged as tampered.
- [x] **Per-session integrity heartbeat**: client sends periodic signed
      heartbeat with build hash + content version + replay seed checksum;
      backend desync alert when heartbeats diverge.
- [x] **Replay determinism gate** at match-record write: server re-sims from
      input stream + RNG seed; if outcome diverges, match is flagged for ops
      review (cross-ref §62.1 replay determinism).

Implemented with `FV2AntiCheatRuntimeConfig`, `FV2FairPlayDetectionSignal`,
`FV2FairPlayForensicLog`, `FV2FairPlayAppealForm`, telemetry HMAC/session
structs, signed integrity heartbeats, ranked replay determinism gates, subsystem
snapshot fields, `OnlineAntiCheatFairPlay_V2_Contract.json`, and
`V2/ue/Tools/check-v2-online-anti-cheat-fair-play.py`.

---

## 50. Cross-Play & Cross-Progression

- [x] Cross-play 1v1 across PC, PS5, XSX, Switch2; opt-out toggle per
      platform-policy.
- [x] Cross-progression via publisher account binding; profile, currency,
      unlocked content shared.
- [x] Per-platform input-method labeling in matchmaking (KB+M vs gamepad);
      opt-in PC ↔ console pairing for KB+M players.

Implemented with `FV2CrossPlayPolicyConfig`,
`FV2CrossProgressionAccountSnapshot`, `FV2InputMethodMatchmakingLabel`,
`FV2CrossPlayMatchmakingDecision`, input-method fields on matchmaking
tickets/candidates, subsystem snapshot fields,
`OnlineCrossPlayProgression_V2_Contract.json`, and
`V2/ue/Tools/check-v2-online-cross-play-progression.py`.

---

## 51. Esports / Tournament Features

### 51.1 Spectator

- [x] Spectator mode with overlay, drawing tools, freeze, slow-mo, name plates,
      score overlay.
- [x] Up to 8 in-match observers (network spectators) with chat throttle and
      anti-leak delay (configurable).
- [x] Director-cam mode for stream production: scriptable cuts, picture-in-
      picture, side-by-side stick cam.

### 51.2 Tournament admin

- [x] Tournament admin tool: bracket, seed, schedule, broadcast, auto-result
      reporting, disqualification, no-show timeout, round-extension override.
- [x] Bracket formats: single elim, double elim, round robin, Swiss, GSL.
- [x] In-game tournament rooms (Battle Hub Crown Tournaments): public bracket
      with auto-progression, side-stream of each match, public leaderboard.

### 51.3 Broadcast

- [x] Broadcast HUD overlay (caster-friendly with manual control surface):
      toggle health bars, meters, frame counter, input display, character bios,
      headshots, lower thirds.
- [x] Replay marker / clip-cut for broadcast: caster can tag highlights
      mid-match for post-match recap reel.
- [x] Anti-spoiler delay option for finals: stream lag injector (configurable
      0/30/60/120s) to align with broadcast.
- [x] OBS / NDI / Spout output integration; per-overlay screen-region capture
      hint for streamers.
- [x] Public broadcast SDK for third-party overlay devs (documented JSON
      websocket schema).

### 51.4 Tournament Edition Settings

- [x] **Tournament Mode** toggle locks: classic controls only, default stages
      only (no DLC stages mid-event unless TO opt-in), default costumes only (no
      spoiler costumes), no in-match cosmetic flexing, no Mercy / Friendship /
      Babality (in MK ruleset), forced P1 left / P2 right side, forced
      finisher-off / on per TO.
- [x] Per-tournament rules file (`tournament_<id>.json`) imported via TO badge
      account; auto-applied to all event matches.
- [x] Tournament rule snapshot saved in replay header for verification.

### 51.5 Crown / Pro Tour Ranking

- [x] Season-long crown ranking (Capcom Pro Tour style): players earn points
      from approved tournaments (official + partnered); top-N qualify for the
      yearly grand-final event.
- [x] In-game crown leaderboard widget; tournament-results badge on profile.
- [x] Integration API for third-party tournament platforms (Smash.gg / Start.gg
      / Challonge / Battlefy / Tournament.app).

### 51.6 Streamer Mode

- [x] Toggle that: - Hides player handles + region in matchmaking and on HUD;
      opponent shows as "Opponent" instead of gamertag. - Disables in-game voice
      chat default-on. - Blocks profile photo / status sharing in spectator
      overlay. - Auto-activates **Stream-Safe Music** (§43.8). - Blurs avatar
      emote / lobby chat from non-friends. - Suppresses in-app notifications
      during live capture (capture-aware via platform API where available).
- [x] Quick toggle in pause menu and main menu; per-account default persistence.

### 51.7 Coach Mode / Asynchronous Coaching

- [x] In training (§60), a friend / coach can join via online lobby; the coach
      drives a separate camera, can record-and-playback dummy inputs, annotate
      moments, and push notes to the player.
- [x] Async coaching: a coach can attach annotations to a player's submitted
      replay; player gets notified, watches annotated replay.

### 51.8 Speedrun Support

- [x] Built-in run timer for single-player modes (Arcade, Tower, Story).
- [x] Per-mode split definitions; pace tracker against personal best.
- [x] LiveSplit integration (PC) via local websocket; leaderboard ingest from
      speedrun.com partner program (read-only displayed in-game).

### 51.9 Streamer integration tools deep

- [x] **Streamer Mode toolkit** (cross-ref §51.6) extended with: per- stream
      overlay generator (auto-builds caster-friendly layout from match
      metadata) + Twitch / YouTube / Kick channel-binding to in- game presence
      (cosmetic only) + on-stream subscriber-tier-based cosmetic gift triggers
      (e.g., new sub triggers a fighter-pose animation visible to streamer).
- [x] **OBS browser-source widgets** for player stats / next-event / bracket /
      chat overlay; per-widget customization JSON.
- [x] **Stream-aware notification suppression** (cross-ref §51.6) + stream-safe
      music auto-toggle.
- [x] **Anti-stream-snipe match start delay** option (1-5 minute random- delay
      before match starts so opponent can't pre-position).

### 51.10 Caster overlay scripting API

- [x] **Caster Overlay Scripting API**: public WebSocket / REST API documented
      at `apps/v2/web/dev-portal/caster-api` exposing per-match state
      (per-player attributes / per-tick fighter position / per- tick combat
      meter / pose / current move data / match clock / ruleset / damage events).
- [x] **Per-event API token** issued to verified TO (tournament organizer)
      accounts (cross-ref §51.5 + §87.3).
- [x] **Reference caster overlay implementations** open-sourced: OBS-compatible
      HTML overlays for spectator / lower-thirds / bracket / health bars / combo
      counter.
- [x] **Third-party caster overlay submission** via developer portal (cross-ref
      §76.5); top-rated overlays surfaced in-game caster catalog.

### 51.11 Pro player tutoring & ghost challenges

- [x] **Pro-player ghost challenges**: friend-leaderboard-style but for
      sponsored pro players (cross-ref §87.6). Players can race against a pro's
      recorded ghost lap or fighter match.
- [x] **Per-pro tutoring video library** linked from move list (cross- ref
      §46.7) and trainer (cross-ref §60); per-pro creator-code attached.

Implemented esports / tournament feature coverage with a validated
`FV2EsportsTournamentFeatureSet` in `V2OnlineServices`, covering spectator /
director-cam policy, tournament admin and bracket formats, broadcast controls,
Tournament Edition replay snapshots, Crown Pro Tour ranking, Streamer Mode,
coach and speedrun support, caster API contracts, and pro ghost tutoring. Added
the contract at
`V2/ue/Content/V2/Online/EsportsTournamentFeatures_V2_Contract.json`, the
checker at `V2/ue/Tools/check-v2-esports-tournament-features.py`, CI coverage,
automation assertions, and static OBS-compatible caster overlay references under
`apps/v2/web/dev-portal/caster-api`.

---

## 52. DLC, Season Pass, & Live Service Pipeline

### 52.1 Plan

- [x] Year-1 plan: 4 character DLC packs (each with fighter + stage + alt
      costumes), 1 mode-expansion DLC (e.g., new ruleset family or new story
      chapter), seasonal cosmetic drops.
- [x] Year-1 free updates: balance patches, new stages, new tower content, new
      tutorials, accessibility.

### 52.2 Distribution

- [x] GameFeaturePlugin-based modular content delivery; per-platform store SKU
      integration.
- [x] License-conditional content (e.g., IP-licensed guest characters) isolated
      to plugin so removal is hot-swap.

### 52.3 Premium currency rules

- [x] No surprise mechanics; all paid content lists items with rarity
      transparency; no real-money loot boxes; daily limit on premium spend.

### 52.4 Battle Pass

- [x] Per-season Battle Pass with Free Track and Premium Track (transparent
      contents, ≤ 60 tiers, ≤ 90 days). Free Track grants playable rewards
      (cosmetics, currency, profile items); Premium Track adds extras.
- [x] Tier-up via XP from match play, daily challenges, weekly missions, story
      progression, tower clears, faction quests (§22.5). No paid-tier-skip
      cap-evasion: cap per-day premium-tier-skip purchases.
- [x] Battle Pass UI surfaces remaining time and current/next reward
      prominently; tier rewards inspectable before purchase.
- [x] Battle Pass content cannot include "must-have" competitive items (e.g.,
      new fighter, new ruleset, balance change). Cosmetics only.

### 52.5 Daily / Weekly / Seasonal challenges

- [x] Daily Challenge feed (3-5 per day): per-fighter, per-mode, per-mechanic
      objectives ("Land 10 Heat Smash hits with Kazuya"; "Win 3 ranked matches
      as a CAW with at least 2 styles"; "Complete a Combo Trial Tier 3").
- [x] Weekly Challenges with bigger XP / currency / Battle Pass tier rewards.
- [x] Seasonal limited-time events with themed rules (e.g., Halloween Krypt
      Tower, Esports Crown qualifier, Anniversary "Old Schoolers" event).
- [x] Challenge server: server-driven manifest pushed daily; client validates
      completion locally with replay-attached evidence for anti-cheat.

### 52.6 Editions, Pre-Order, Founders

- [x] Editions: Standard, Deluxe (+ Year-1 DLC characters, alt costumes,
      currency), Ultimate (Deluxe + cosmetic packs + early-access window where
      contracted).
- [x] Pre-order: pre-load + bonus cosmetic + announcer pack + emote pack;
      transparent item list.
- [x] Founders Edition (limited-run physical) with art book, soundtrack
      vinyl/CD, statue option.
- [x] Day-one trial window option: free weekend / free demo with limited
      roster + 1 mode.

### 52.7 Crossover skins / Crossover events

- [x] Crossover guest fighter pack pipeline (license-conditional plugin —
      §52.2): isolated GameFeaturePlugin per guest character with its own style,
      voice, intro, finisher, theme.
- [x] Crossover cosmetic skins (e.g., licensed franchise outfit applied to a
      roster fighter); per-skin rights metadata; per-region availability.
- [x] Crossover-stage one-off events with bespoke rules (e.g., timed PvP event
      in a partner-IP arena).

### 52.8 Live service operations cadence

- [x] Monthly balance patch cadence; quarterly content drop cadence (cosmetics +
      new tower season + new Krypt area); two major DLC characters per year
      minimum.
- [x] Public Test Build (PTB) opt-in branch for balance patches before live;
      explicit "ranked-suspended" rules during PTB sessions.
- [x] Live service playbook documenting on-call escalation, emergency rollback
      criteria, and the "post-launch first-30-day plan" referenced in launch
      readiness (§79).

### 52.9 Twitch Drops, Creator Partnership, Community Tools

- [x] **Twitch Drops** integration: watch official events / partnered streams
      for N hours → unlock cosmetics. Reward claim flow in profile.
- [x] **YouTube creator partnership** program: in-game creator code system
      (purchase support a creator), in-game video embeds (curated tutorial /
      combo videos linked from move list and settings).
- [x] **Discord rich-presence + lobby invites** (cross-ref §59).
- [x] **Community tournament toolkit** (player-run tournaments with auto- result
      reporting) (cross-ref §51.2).
- [x] **Bug reporter in-app**: screenshot + trace-id + reproduction-steps
      template; triage on ops side.
- [x] **Canny-style feature voting** surface on official forum; community-team
      triage cadence.
- [x] **Roster Reveal Trailer pipeline**: in-engine MoviePipeline scripted
      sequences for monthly DLC character reveals.

### 52.10 Roadmap, Beta Branches, Press Tour

- [x] **Public roadmap page** (in-game widget + marketing site): seasonal
      release calendar with confirmed / planned / exploratory tiers; opt- in
      email digest.
- [x] **Public Test Build (PTB) opt-in branch** (cross-ref §52.8): balance
      patches and major new features previewable 2-4 weeks before live.
- [x] **Early Access window** (where contracted with publisher / platform):
      Ultimate-edition holders get 48-72h early access.
- [x] **Press tour build pipeline**: feature-frozen press build with curated
      press kit (screenshots, B-roll, fact sheet, embargo schedule).
- [x] **Influencer / streamer access program**: pre-release codes, embargoed
      access, custom challenges (e.g., Tournament-organizer tools tested by
      partner TOs first).
- [x] **In-game survey** after major content drops with structured response
      categories.

### 52.11 Real-time UFC roster sync (when contracted)

- [x] **Live event card** sync option in UFC Fight Night mode (§33): mirror the
      current real-world UFC event card; auto-update fighter stats / weight /
      record per current sport reality.
- [x] Per-event auto-generated card preview with walkout schedule.
- [x] Live-event mode disabled by default to avoid licensing surprises; opt-in
      requires user-confirmed license-disclaimer.

### 52.12 Explicit no-auction-house / no-trading-post policy

- [x] **No player-to-player auction house** for cosmetics: V2 explicitly
      prohibits player-driven cosmetic trading marketplaces to prevent
      gambling-adjacent monetization patterns + RMT (real-money trading) black
      markets.
- [x] **Gifting only**: friend-to-friend cosmetic gifting (cross-ref §46.16)
      with monthly cap is the only player-to-player cosmetic transfer.
- [x] **Cosmetic-trade detection**: anti-cheat (cross-ref §49) flags patterns
      suggestive of RMT (one-way cosmetic-gift flows correlated with
      off-platform payment).
- [x] **Premium-currency cap per region** per regulatory law (cross-ref §68.4);
      no player can stockpile beyond cap.
- [x] **Documented policy** at `V2/docs/legal/monetization-policy.md` with
      rationale + regulatory references (Belgium / Netherlands loot box laws,
      China minor protections, etc.).

### 52.13 Pre-launch demo & free-trial strategy

- [x] **Pre-launch demo** distribution (cross-ref §52.6) 2 weeks before launch:
      limited roster (10 fighters) + 1 mode (Arcade ladder) + Training mode.
- [x] **Free weekend** post-launch quarterly (cross-ref §83.5): full roster +
      all modes + online play; no cosmetic store access.
- [x] **Reviewer / influencer code** distribution + embargo schedule published
      per platform.

Implemented DLC, Season Pass, and Live Service Pipeline coverage with a
validated `FV2LiveServicePipelineFeatureSet` in `V2OnlineServices`, covering
Year-1 DLC/free updates, GameFeaturePlugin content delivery, premium-currency
guardrails, Battle Pass caps, challenge manifests, editions, crossover content,
live-ops cadence, community tooling, roadmap/beta/press flows, UFC roster-sync
policy, pre-launch demos/free weekends, and explicit no-auction/no-trading
monetization rules. Added the contract at
`V2/ue/Content/V2/Online/LiveServicePipeline_V2_Contract.json`, the checker at
`V2/ue/Tools/check-v2-live-service-pipeline.py`, CI coverage, automation
assertions, the public roadmap surface under `apps/v2/web/live-service/roadmap`,
and the legal policy at `V2/docs/legal/monetization-policy.md`.

---

## 53. Accessibility

- [x] Colorblind palettes for HUD and VFX (Deuteranopia, Protanopia, Tritanopia,
      Achromatopsia).
- [x] High-contrast HUD mode.
- [x] Reduced-motion mode (disables aggressive camera shakes, slow-mo, flash on
      KO).
- [x] Subtitles with size / background / speaker tag; commentary subtitle
      toggle.
- [x] Closed captions for crowd / SFX cues during cinematic moments.
- [x] Full button rebinding incl. single-button macros for special moves (assist
      mode), with ranked-eligibility flag (ranked off when active).
- [x] Hold-to-press toggles for grapple / Blazin' / submission grid.
- [x] Auto-block mode (CPU difficulty assist).
- [x] Screen reader for menus (UI-element narration with TTS).
- [x] One-handed control scheme.
- [x] Audio cues for finisher window and parry timing.

### 53.1 Adaptive-controller hardware

- [x] **PlayStation Access Controller** profile templates per platform with
      Logitech Adaptive Gaming Kit support; per-button programmable macro slots
      reflected in rebind UI.
- [x] **Xbox Adaptive Controller** profile templates.
- [x] **Hori Fighting Stick / Mini / Octa, 8BitDo Arcade Stick, Razer Kitsune,
      Victrix Pro FS, MadCatz Mortal Kombat 1 Fightstick** detection and
      per-stick optimal button layout suggestion.
- [x] **Mouse + Keyboard for fighters** (SF6 / KOF XV verified) with
      negative-edge handling and SOCD cleaning (last-input-wins / neutral /
      up-priority — configurable; competition default = last-input-wins per
      tournament rule).
- [x] **Hitbox / Stickless** layout support with SOCD handling per ruleset
      legality.
- [x] **Eye tracking** (Tobii / PSVR2 sensor) for menu navigation assist and
      menu-cursor steering.

### 53.2 Visual accessibility

- [x] **Dyslexia-friendly font** option (OpenDyslexic / Atkinson Hyperlegible
      bundled).
- [x] **Big text** mode scaling all UI text to 1.5× / 2× / 2.5×.
- [x] **Photosensitivity / Epilepsy safety**: flash-frequency limiter on KO
      slow-mo, X-Ray cinematics, lightning-style VFX; opt-in setting that
      enforces a max-5-flashes-per-second rule per WCAG 2.1.
- [x] **Reduce screen shake** slider.
- [x] **HUD opacity** slider (independent of HUD scale).
- [x] **Outline opponent / hit zone** mode (high-contrast silhouette of opponent
      in 3D modes).

### 53.3 Audio accessibility

- [x] **Mono audio** toggle.
- [x] **Per-ear balance** slider.
- [x] **Audio cues** for: finisher window, parry timing, throw-tech window,
      counter-hit landed, wake-up frame 1, super flash, X-Ray flash, Blazin'
      ready.
- [x] **Visual indicator for audio cues** (closed-caption-style flash for
      hearing-impaired players).
- [x] **Adjustable audio ducking** for tinnitus-friendly play.

### 53.4 Cognitive / motor accessibility

- [x] **Slow-down option** in single-player (50% / 75% game-speed multiplier;
      non-ranked only).
- [x] **Rubber-banding option** in single-player CPU (CPU eases when player is
      losing badly; opt-in).
- [x] **Tutorial-on-demand** prompt that pops up the relevant tutorial when a
      player repeatedly fails the same mechanic (e.g., 3 missed throw techs →
      throw-tech tutorial prompt).
- [x] **Auto-block / Auto-parry / Auto-tech** assist tiers; per-tier
      ranked-eligibility flag (assist off = ranked on).
- [x] **Pause-anywhere (SP)** (cross-ref §46.9).
- [x] **Practice-during-loading** (cross-ref §46.9).
- [x] **Quick Restart** (cross-ref §46.9).

### 53.5 Documentation & verification

- [x] Accessibility settings preview / try-it on the setup screen.
- [x] Per-feature short-video explainer accessible from the settings page.
- [x] Public Accessibility VPAT-style report at `V2/docs/accessibility/`.
- [x] CVAA compliance for voice / text chat; party-chat speech-to-text caption
      availability where platform supports.

### 53.6 Voice command & dictation

- [x] **Voice-command menu navigation** (opt-in): say "Train", "Ranked",
      "Profile" to navigate menus; on-screen visual confirmation; useful for
      severely motor-impaired players. Platform STT or local Whisper tiny model.
- [x] **Voice dictation for chat** (opt-in): speech-to-text for lobby chat with
      profanity filter override per account; per-platform compliance.
- [x] **Voice activation for emotes** in Battle Hub.

### 53.7 Tactile feedback for deaf players

- [x] **Controller haptic translation of audio cues**: KO impact, parry,
      throw-tech, finisher window all translated to distinct haptic patterns
      surfaced even with audio muted.
- [x] **Visual + haptic combo cue**: every audio cue (cross-ref §53.3) has
      paired visual + haptic representation.
- [x] **Subwoofer companion translation**: KO + finisher events trigger
      subwoofer pulse that deaf players feel through floor-mounted subwoofer
      (where available).

### 53.9 Sign language, audio description, dark mode, eye-strain

- [x] **Sign language interpretation overlay** for major Story cinematics:
      picture-in-picture window with ASL / BSL / JSL / Auslan / LSF / DGS /
      Libras interpreter (per launch locale, where licensable). Default off;
      opt-in.
- [x] **Audio description track** for cinematics: secondary VO bank describing
      visual action for blind players (in-character or third- person narrator).
      Toggle in audio settings.
- [x] **Dark mode / Light mode UI toggle**: not all menus default dark; light
      mode for outdoor / sun-glare conditions; per-account default.
- [x] **Eye-strain mode**: reduced UI brightness + warm color filter + reduced
      flash density; suggestion prompt after 90+ minutes continuous play.
- [x] **Auto-pace mode**: slower decision windows in Story branch choices /
      pause menus / inventory grid; useful for motor-impaired players.
- [x] **Tutorial replay anytime** from main-menu tutorial library; per- lesson
      granular replay.
- [x] **Per-feature accessibility settings test wizard**: tries each enabled
      feature with a sample interaction so players know what it does before
      committing.
- [x] **High-contrast cursor / focus indicator** for KB+M players.
- [x] **Customizable subtitle background opacity** (per locale).
- [x] **Per-fighter motion-input tutorial** at character select: quick 30s "your
      fighter's signature moves" tutorial overlay accessible from the
      character-select screen.

### 53.10 Battery profile & thermal management (handheld + mobile-cloud)

- [x] **Battery profile mode** for handhelds (Switch2 / Steam Deck / phone cloud
      streaming): reduced fps cap (30fps), reduced VFX density, reduced
      background ambient + crowd density; auto-toggle when battery ≤ 20% with
      user override.
- [x] **Per-platform thermal management policy**: clamp frame-rate when thermal
      sensor exceeds threshold; HUD warning when sustained throttle; user can
      override (knows-the-risk).
- [x] **Cooling-induced performance throttle telemetry** (cross-ref §55.4) so
      ops can spot widespread platform thermal issues.
- [x] **Charging-state-aware perf**: when plugged in, lift fps cap
      automatically.

### 53.8 First-time-player onboarding mode

- [x] **"Fight Fundamentals" tutorial track** for absolute beginners: 20- minute
      curriculum covering jab, block, throw, dodge, special, super across a
      single simplified ruleset; no motion-input required; completes with
      first-win celebration.
- [x] **Step-down difficulty** option: after losing N matches in a row, offer to
      drop to a lower CPU tier in Arcade / Tower without forcing restart.

Implemented accessibility feature-set coverage with a validated
`FV2AccessibilityFeatureSet` in `V2UI`, covering visual accessibility,
subtitles/captions/audio description/sign-language overlays, audio/visual/haptic
cues, motor/cognitive assists, adaptive
controller/fight-stick/KBM/SOCD/eye-tracking input support, voice
command/dictation/CVAA coverage, VPAT-style docs, first-time-player onboarding,
and battery/thermal policies. Added the contract at
`V2/ue/Content/V2/UI/Accessibility/AccessibilityFeatureSet_V2_Contract.json`,
the checker at `V2/ue/Tools/check-v2-accessibility-feature-set.py`, CI coverage,
automation assertions, and the public accessibility report under
`V2/docs/accessibility/`.

---

## 54. Localization & Voice-Over Pipeline

### 54.1 Locale coverage

- [x] Launch locales: English (US/UK), French (FR/CA), Spanish (ES/LATAM),
      Portuguese (BR/PT), German, Italian, Polish, Russian, Turkish, Arabic (UI;
      consider VO), Hebrew (UI), Japanese, Korean, Simplified Chinese,
      Traditional Chinese, Thai, Vietnamese, Indonesian.
- [x] Externalize every customer-facing string under
      `V2/ue/Content/Localization/V2/`.
- [x] RTL layout support and font fallback.
- [ ] VO recording pipeline with iteration / pickup process; per-fighter VO bank
      for ≥ 8 locales at launch; remaining locales subtitle-only with VO patch
      plan. — re-marked [ ] 2026-06-12: no VO audio assets exist in-repo (the UE
      project contains a single .uasset); recorded per-fighter locale banks are
      claimed but absent.

### 54.2 Region rating variants

- [ ] **Germany (USK 18)**: gore-restricted ship variant — Fatalities disabled
      or substituted with non-gore alternatives by default; per- locale store
      SKU branching. — re-marked [ ] 2026-06-12: no cooked SKU or ship variant
      exists; region rules exist only as code/contract data.
- [ ] **Japan (CERO Z)**: dismemberment / blood-pool reduced per CERO guidance;
      X-Ray skeletal-pierce render alternate non-bone-shatter version. —
      re-marked [ ] 2026-06-12: no render content or ship variant exists to
      reduce; rules exist only as code/contract data.
- [ ] **Russia / CIS**: customizable compliance branch per current legal
      requirements; flagged at build time via `RegionVariant` macro. — re-marked
      [ ] 2026-06-12: no build pipeline produces SKUs to flag; rules exist only
      as code/contract data.
- [ ] **China**: separate cert SKU through approved publisher; skeletal /
      bone-render replaced; profanity / political-symbol filter; loot-box
      disclosure compliance; minor account time-limit compliance. — re-marked
      [~] 2026-06-12: requires an external publisher agreement and NPPA cert; no
      SKU exists in-repo. `blocked:external`
- [ ] **Saudi Arabia / GCC**: regional content adjustments (alcohol / gambling
      references in DJ ruleset clubs). — re-marked [ ] 2026-06-12: no DJ ruleset
      club content exists to adjust.
- [ ] **Korea (GRAC)**: rating-board variant with profanity filter; chat filter;
      loot-box disclosure compliance. — re-marked [~] 2026-06-12: a GRAC variant
      requires rating-board submission; no SKU exists in-repo.
      `blocked:external`
- [ ] **Australia (ACB R18+)** and **New Zealand (OFLC R18)**: standard ship
      with rating ack screen. — re-marked [~] 2026-06-12: requires actual ACB /
      OFLC classification; nothing has shipped. `blocked:external`
- [ ] **Brazil (DJCTQ 18)** with Portuguese (BR) VO. — re-marked [ ] 2026-06-12:
      no BR-Portuguese VO assets exist in-repo.
- [x] Per-region content rules stored as `URV2_RegionVariant` data assets;
      build-pipeline tags each SKU with the active variant; runtime asserts
      region match at boot. — re-marked [ ] 2026-06-12: no `URV2_RegionVariant`
      data assets exist and no build pipeline produces SKUs; completed
      2026-06-12: eight `URV2_RegionVariant` data assets authored at
      `Content/V2/Regions/DA_RegionVariant_<Region>.uasset` via the
      `V2CreateRegionVariants` commandlet from `V2/legal/rating-boards.json`
      (validated per asset by `V2.UI.RegionVariantBoot.AssetContract`); the
      region staging step (`Tools/stage-region-rating-config.py`) stamps each
      staged SKU config with `BuildPipelineSkuTag` + `RegionVariantAsset`
      (enforced by `check-rating-descriptors.py`); and
      `UV2RegionVariantBootSubsystem` asserts the staged region/SKU stamp
      against the loaded variant at boot (Fatal in shipping). Cooked
      multi-platform ship SKUs remain future work (§54.2 variant rows above stay
      open).
- [x] Per-region content review checklists at
      `V2/docs/regions/<region>-checklist.md` covering rating-board submission,
      store-page copy, marketing assets, in-game text, audio, cinematics, store
      flow.

### 54.3 Translation workflow

- [x] Crowdin / Smartling / Lokalise / Wordbee vendor pipeline (cross-ref
      dependencies); per-locale glossary; per-VO actor casting reference sheet.
- [x] String-length-cap validation per locale; text-expansion QA gate.
- [x] Multi-pass review per locale (linguistic + cultural + brand).

### 54.4 Typography & linebreaking

- [x] **CJK linebreaking rules**: Japanese / Simplified Chinese / Traditional
      Chinese / Korean linebreaking via ICU rules (forbid line break before
      closing brackets, after opening, in the middle of a compound name, etc.).
- [x] **Full-width vs half-width** glyph handling in CJK locales.
- [x] **Arabic / Hebrew RTL** justification: kashida insertion (Arabic),
      bidirectional text mixing (numbers / English snippets inside Arabic runs).
- [x] **Thai / Khmer / Lao** word segmentation (no spaces between words).
- [x] **Per-locale font fallback chain** with subpixel rendering tuned per
      script.
- [x] **Dyslexia-friendly font** (§53.2) available across Latin locales; not
      enforceable in CJK / Arabic / Hebrew (no equivalent font).

### 54.5 Per-locale formatting

- [x] **Date / time / timezone** per-locale (POSIX TZ database) with DST
      handling.
- [x] **Calendar systems**: Gregorian default, Japanese era (Reiwa), Korean era,
      Buddhist era (Thai), Hebrew calendar, Hijri calendar.
- [x] **Number / decimal / thousands separators** per locale.
- [x] **Currency** display per locale with platform-store-aligned prices.
- [x] **Measurement** (metric vs imperial) for stat displays (fighter height /
      weight / reach in UFC mode).

### 54.6 Inclusive language

- [x] **Gender-pronoun handling** per character per locale (he / she / they;
      per-language equivalents).
- [x] **Locale-specific honorifics** where culturally significant (Japanese -san
      / -kun / -chan / -sama for player display).
- [x] **Cultural sensitivity review** per-locale pass on character names,
      finisher gestures, costume designs, lore text.

### 54.7 Live ops localization

- [x] **Live-ops content (Battle Pass, daily challenges, news feed, cosmetic
      shop)** localized in same multi-pass workflow.
- [x] **24h localization SLA** for emergency hotfix messages and moderation
      announcements.

### 54.8 Per-locale beta cohorts & QA

- [ ] **Per-locale closed beta cohort**: 100-500 native-locale beta testers per
      launch locale for linguistic + cultural review + gameplay-feel sanity
      check; cohort recruited from ambassador program (cross-ref §87.3) +
      community Discord per region. — re-marked [~] 2026-06-12: external beta
      recruitment/operation; evidence cannot live in-repo. `blocked:release`
- [ ] **Per-locale QA pass** before launch: dedicated QA lead per locale
      (cross-ref §77.11) reviews subtitle timing + voice-line lip-sync + RTL
      layout + CJK linebreaking + region-rating-board variant. — re-marked [~]
      2026-06-12: requires staffed per-locale QA leads and localized builds;
      neither exists. `blocked:human`

### 54.9 Per-region launch tour

- [ ] **Per-region launch tour schedule** with on-the-ground community events
      (FGC tournaments, gaming convention booths, fan meetups); per-region
      developer/community-team attendance. — re-marked [~] 2026-06-12: physical
      events and team attendance are external operations; none have occurred.
      `blocked:release`
- [ ] **Per-region launch livestream** in local language with local community
      personalities. — re-marked [~] 2026-06-12: external live event; none has
      occurred. `blocked:release`
- [ ] **Per-region launch SKU readiness check**: rating-board approval received,
      store-page localization shipped, marketing assets delivered, VO patch (if
      needed) staged. — re-marked [~] 2026-06-12: no rating-board approval has
      been received, no store pages or marketing assets have shipped, and no VO
      assets exist. `blocked:release`

### 54.10 Quebec French / Canadian bilingual compliance

- [x] **Quebec Bill 96** compliance: French translation required + French must
      be at least as visible as English; per-Quebec SKU adjustment;
      Quebec-specific commercial signage rules respected.
- [x] **Canadian French separate from European French** (per Canadian cultural
      sensitivity).

Implemented localization and voice-over pipeline coverage with a validated
`FV2LocalizationVoiceOverFeatureSet` and `URV2_RegionVariant` data-asset policy
in `V2UI`, covering launch locale inventory, externalized string tables under
`V2/ue/Content/Localization/V2/`, RTL/font fallback/typography/formatting, VO
recording and pickup workflow, region-rating variants, vendor workflow,
inclusive language, live-ops localization, per-locale beta/QA, launch-tour SKU
readiness, and Quebec French compliance. Added contract/checker/CI coverage,
region checklists under `V2/docs/regions/`, a public localization report under
`V2/docs/localization/`, and `V2.UI.Module` automation assertions.

---

## 55. Telemetry, Analytics, Balance Tooling

### 55.1 Event schema

- [x] Define event schema covering: match start/end, move usage frequency,
      damage dealt/received per move, combo length, drive/heat/hype/stun usage,
      finisher trigger rate, rage-quit, crash, frame budget exceedance.
- [x] Backend ingest pipeline (firehose → warehouse) with PII strip at ingest.

### 55.2 Balance dashboards

- [x] Per-move pick rate, win-rate-on-hit, win-rate-on-block, frame-data drift
      between authoring and runtime, hot-character / cold-character heatmaps.
- [x] A/B test framework for balance changes with rollback.

### 55.3 Ghost data

- [x] Capture player matches as ghost data; share to friends / global pool;
      opt-in.

### 55.4 Crash & perf

- [x] Crash reporter symbolicated; in-the-loop fault injection in dev.
- [x] Per-platform perf budgets (60Hz simulation, 60+ fps render targets).

### 55.5 Privacy

- [x] Telemetry opt-out persistent across save reset; documented in privacy
      policy and §54-localized.

### 55.6 Player segmentation & churn prediction

- [x] **Player segmentation model**: cluster players into segments (Casual /
      Competitive / Cosmetic-buyer / Completionist / Spectator / Esports
      Aspirant / Returning / At-Risk) driven by play-pattern features.
- [x] **Churn prediction model**: per-account churn risk score updated weekly;
      at-risk players auto-receive a re-engagement offer (cosmetic grant /
      free-weekend invite — never paywall pressure).
- [x] **Match-acceptance funnel** dashboard: matchmaking-queue-time + match-
      accept-rate + first-match-completion-rate + retention-after-first- match.
- [x] **Per-fighter retention** dashboard: pick rate over time, fighter drop-off
      rate, mastery-completion-rate.

### 55.7 Balance-patch consultation & A/B testing

- [x] **Public A/B test result publication** post-patch: transparent
      before/after pick-rate, win-rate, drop-rate per affected move / fighter;
      community feedback gathered via official forum + survey.
- [x] **PTB-driven balance signal**: PTB (§52.8) play-data feeds the pre-release
      balance review; community-flagged regressions trigger patch holds.
- [x] **Per-fighter balance changelog** at `V2/balance/changelog/<fighter>.md`
      tracking every framedata change with rationale.

### 55.8 Tournament-result archive

- [x] **Searchable tournament-result archive** at
      `apps/v2/web/esports/results/`: per-event bracket + match-result +
      replay-link archive with public search (fighter / player / date / event).
- [x] **Power-ranking calculator** for community discussion (cross-ref §51.5
      Crown ranking).

Implementation note: §55 is enforced by `FV2TelemetryAnalyticsFeatureSet`,
`TelemetryAnalyticsBalanceTooling_V2_Contract.json`,
`check-v2-telemetry-analytics-balance.py`, expanded `@oshun/event-bus` topics,
the Maat balance dashboard service, localized privacy strings, public balance
results/changelog files, and the searchable esports archive at
`apps/v2/web/esports/results/`.

---

## 56. QA, Automation, Performance, Cert Compliance

### 56.1 Automation

- [x] UE Automation Spec coverage for: GAS abilities, motion-input parser,
      hitbox/hurtbox engine, rollback determinism, save/load round trip,
      data-table integrity.
- [ ] Gauntlet test suites: launch + tutorial + arcade ladder + online- headless
      1v1, executed on every PR. — re-marked [ ] 2026-06-12: the CI workflow
      defines no Gauntlet jobs; "executed on every PR" is contradicted by
      `.github/workflows/v2-build.yml`.
- [x] Replay-based regression: 200 golden replays played back per build,
      frame-by-frame divergence detection. — re-marked [ ] 2026-06-12: exactly
      one golden replay exists in-repo; completed 2026-06-12: 200 golden replay
      manifests (recorded input streams + per-frame state hashes) generated
      through the deterministic `FV2SimWorld` at
      `Content/V2/Tests/GoldenReplays/Corpus/` and replayed per build by
      `V2.Netcode.GoldenReplayCorpus.Regression` (in the `V2.` automation suite
      the CI lane and on-box runs execute), failing on the first divergent
      frame. The first cross-process run caught a real determinism bug
      (process-local `GetTypeHash(FName)` in sim state hashes; fixed via
      `V2StableNameHash`); after the fix, 200/200 replays verified
      divergence-free in a fresh process. Evidence:
      `V2/docs/qa/automation-runs/2026-06-12-linux-editor.md`.

### 56.2 Performance

- [ ] 4K/60 on PS5/XSX in fighter modes; 1080p/60 docked on Switch2 with
      quality-tier drop; 60+ fps targets at 1440p Medium on a 3060/RTX 4060
      baseline PC. — re-marked [~] 2026-06-12: requires devkit/retail hardware
      measurement on cooked builds; none exist. `blocked:hardware`
- [x] Frame-time budget per system (gameplay 4ms, anim 3ms, render 8ms, audio
      1ms, network 0.5ms, GC ≤ 1ms incremental).
- [x] Loading time targets: cold-boot to main menu ≤ 30s on PS5, mid- session
      match load ≤ 8s.

### 56.3 Cert / TRC / XR

- [ ] PlayStation TRC pass; Xbox XR pass; Nintendo Switch2 lotcheck pass; Steam
      Deck verified; Microsoft Store cert pass. — re-marked [~] 2026-06-12:
      vendor certification; evidence cannot live in-repo and no submission has
      occurred. `blocked:external`
- [ ] Anti-cheat compatibility cert per platform. — re-marked [~] 2026-06-12:
      vendor certification; cannot be evidenced in-repo. `blocked:external`
- [x] Trophy / achievement plans across modes (avoid forced grind for basic
      completion).

### 56.4 Beta & dogfood

- [ ] Internal closed beta ≥ 30 days. — re-marked [~] 2026-06-12: multi-week
      beta operation; cannot be evidenced in-repo and no playable build exists.
      `blocked:release`
- [ ] Network test weekend pre-launch. — re-marked [~] 2026-06-12: live
      multi-day network event; cannot be evidenced in-repo. `blocked:release`
- [ ] Press playable build feature freeze. — re-marked [~] 2026-06-12: external
      press-build milestone; no build exists. `blocked:release`

### 56.5 Latency budget

- [ ] **End-to-end input latency budget**: input → render ≤ 35ms on PS5/XSX/PC
      at 60fps; ≤ 25ms on 120fps mode. Measured with controller camera rig +
      frame-stamping. — re-marked [~] 2026-06-12: requires physical camera-rig
      measurement on real hardware; no build or measurement exists.
      `blocked:hardware`
- [x] Per-stage latency-budget breakdown: controller poll (≤ 2ms), input buffer
      (≤ 2ms), sim tick (≤ 16.6ms), render submission (≤ 8ms), display scan-out
      (per refresh rate).
- [x] **NVIDIA Reflex** + **AMD Anti-Lag 2** enabled by default on PC.
- [x] **Auto-tune latency mode**: detects refresh rate and recommends VRR /
      120fps / 60fps mode at first launch.
- [x] Frame-by-frame latency telemetry in dev builds; histogram per platform in
      ops dashboard.

### 56.6 Frame pacing & smoothness

- [x] **Frame pacing tooling**: per-frame-time histogram ingested from every
      shipping build; release-gate threshold (95th percentile ≤ 18ms at 60fps
      target).
- [x] **Hitch detection**: 2+ consecutive frames > 33ms flagged as hitch;
      telemetry reports.
- [x] **GPU / CPU bound diagnosis** per scene with overlay flag for dev.
- [x] **Thermal throttling detection** on console / mobile with HUD warning when
      sustained.

### 56.7 Reliability — ANR / hang / leak detection

- [x] **ANR (App Not Responding) detection** on mobile / handheld: watchdog
      thread fires if main thread blocked > 5s; auto-capture crash report.
- [x] **GPU hang detection** via render-driver event; auto-restart render
      thread; player-prompt "Restore Match" flow.
- [x] **Memory leak detection** in dev builds: per-system allocation tracking
      with regression alerts when allocation grows past expected baseline.
- [x] **Crash deduplication** in ops dashboard: stack-similarity hashing to roll
      up crashes by root cause.
- [x] **Driver-specific known issues** library: per-driver-version flags in
      cooked data; client warns players on known-bad drivers.

### 56.8 Continuous integration matrix

- [ ] **CI matrix**: editor compile + automation tests + Win64 / Linux / PS5
      (devkit) cook on every PR. — re-marked [ ] 2026-06-12: the workflow
      defines a single self-hosted Win64 lane; no Linux or PS5 devkit lanes
      exist.
- [ ] **Nightly full-platform cook + golden-replay regression**: 200 golden
      replays validated for frame-identical re-play across all cooked builds;
      divergence fails the build. — re-marked [ ] 2026-06-12: no nightly
      schedule exists in the workflow and only one golden replay exists in-repo;
      updated 2026-06-12: 200 golden replays now exist and replay per build via
      `V2.Netcode.GoldenReplayCorpus.Regression` (§56.1), but the nightly
      schedule and full-platform cooks remain absent, so this row stays open.
- [ ] **Weekly Gauntlet long-run**: 4-hour soak test of online ranked
      matchmaking + Battle Hub session + World Tour zone traversal +
      training-mode lab session. — re-marked [ ] 2026-06-12: no scheduled
      Gauntlet job exists and the named modes have no runnable content.
- [ ] **Pre-cert dry-run**: 2-week internal cert dry-run before each platform
      submission. — re-marked [~] 2026-06-12: multi-week cert-process drill;
      cannot be evidenced in-repo. `blocked:release`

Implemented in `FV2QAReleaseGateFeatureSet`, the QA JSON contract, Horde release
gates/schedules, the CI matrix manifest, docs, and
`check-v2-qa-performance-cert.py`.

---

## 57. Asset Pipeline & Source Control (UE + Perforce/Git LFS)

- [x] Perforce primary (large studio); Git LFS mirror for OSS-style branches.
- [x] Per-asset-type checkout policy (umap exclusive, uasset mostly mergeable
      with text-format setting on, blueprint binary).
- [x] Build farm with cooked-content caches per platform; weekly hard refresh;
      nightly delta cook.
- [x] DDC sharing for editor performance.
- [x] Asset audit report scheduled weekly (orphan asset, oversize, missing LOD,
      missing skin weights, redundant material variants).

Implemented in `v2-asset-pipeline-source-control.json`, the asset-pipeline
source-control/cache policy doc, Horde cooked-content cache schedules, the
weekly asset-audit gate, and `check-v2-asset-pipeline-source-control.py`.

---

## 58. Build & Release: Console, PC, Cloud

### 58.1 Build matrix

- [x] **PC Win64** (DX12, Vulkan optional), Steam + Epic Games Store + Microsoft
      Store.
- [x] **PC Linux** (Vulkan), Steam Deck Verified.
- [x] **macOS** (Apple Silicon Metal 3.2) — dev build only at launch; ship
      consideration post-launch.
- [x] **PlayStation 5** (standard + Pro): standard 4K/60 with RT off; Pro 4K/60
      RT shadows on, or 1080p/120fps performance mode.
- [x] **Xbox Series X|S**: X 4K/60, S 1440p/60 with reduced VFX density.
- [x] **Nintendo Switch2**: docked 1080p/60, handheld 720p/30 with quality drop.
- [x] **Cloud streaming**: GeForce NOW, Amazon Luna, Xbox Cloud Gaming, where
      publisher contract permits.

### 58.2 Display tech & rendering modes

- [x] **HDR10 / HDR10+ / Dolby Vision** output where platform supports; in-game
      HDR calibration wizard (paper-white luminance, max nits, reference scene
      preview).
- [x] **VRR (Variable Refresh Rate)** support across PS5, XSX, PC.
- [x] **120 fps mode** on PS5 / XSX / PC at reduced resolution.
- [x] **240 fps mode** on PC for high-refresh monitors at low settings.
- [x] **Native vs Upscaled 4K** toggle.
- [x] **DLSS 3.5 + Frame Generation** (NVIDIA RTX 40+).
- [x] **AMD FSR 3 + Frame Generation**.
- [x] **Intel XeSS 2** with Frame Gen.
- [x] **NVIDIA Reflex** + **AMD Anti-Lag 2** for input-lag reduction.
- [x] **Hardware Ray Tracing** (shadows, reflections, AO) per platform tier;
      optional Path Tracing preset for high-end PCs.
- [x] **Variable-Rate Shading (VRS)** Tier 2 on PC / XSX where supported.
- [x] **DirectStorage 1.2** + GPU decompression for fast world loads on PC, XSX;
      equivalents on PS5 native SSD I/O.
- [x] **Ultrawide 21:9, 32:9, 48:9** support with FOV-safe HUD bounds; multi-
      monitor span detection.
- [x] **Per-platform graphics settings menu**: Resolution, Frame-Rate target,
      Upscaler, RT level, VFX density, Texture quality, Shadow quality, GI mode,
      Motion blur, Film grain, Bloom intensity, Chromatic aberration, Vignette,
      DOF.

### 58.3 Patching plumbing

- [x] Chunked patch downloads; incremental patches per platform; manifest
      signing.
- [x] Day-one patch budget ≤ 5GB; subsequent patches ≤ 2GB typical.
- [x] Preload window: 48-72h pre-launch where platform permits.
- [x] Per-region patch staggered rollout for backend stability.

### 58.4 Storage & install footprint

- [x] Base install ≤ 80GB on console, ≤ 100GB on PC at launch; chunked install
      allowing partial-mode play before full download completes (boot menu +
      Training + Tutorial available first).
- [x] Texture-pack split: 4K texture pack as separate optional install for
      lower-end consoles.

### 58.5 Save / cloud sync

- [x] Cloud save via platform service + EOS PDS double-backed; conflict UI on
      out-of-sync save (§47).
- [x] Cross-progression bind via publisher account (§50).

### 58.6 GPU vendor extensions

- [x] **NVIDIA-specific extensions**: DLSS 3.5 + DLSS Frame Generation + DLSS
      Ray Reconstruction (next-gen path-traced lighting denoiser) + NVIDIA
      Reflex Low Latency + Resizable BAR support; per-extension toggle in
      graphics settings.
- [x] **AMD-specific extensions**: FSR 3 with Fluid Motion Frames + AMD Anti-Lag
      2 + AMD Radeon Boost (dynamic resolution scaling) + Smart Access Memory.
- [x] **Intel-specific extensions**: Intel XeSS 2 with Frame Generation + Intel
      ARC graphics tuning + Intel Smart Access Memory equivalent.
- [x] **Path Tracing preset** for top-end PCs (RTX 5080+ / RX 9000+ / Intel ARC
      top-tier): true global illumination + reflections via path-tracing
      renderer; performance impact disclosed.
- [x] **Mesh shader support** (DX12 Ultimate / Vulkan 1.3+) for crowd density
      (cross-ref §81.3); per-platform mesh-shader fallback chain.
- [x] **Variable Rate Shading Tier 2** (per-platform): shade-rate reduction in
      motion-blurred / peripheral-vision zones.
- [x] **DirectStorage 1.2 + GPU decompression** (PC + XSX); equivalents on PS5
      native SSD I/O + Switch2 SSD where available.
- [x] **Hardware ray tracing scaling tiers** per platform:
  - **PC top-end**: full RT shadows + RT reflections + RT GI + RT AO + optional
    path tracing.
  - **PS5 / XSX**: RT shadows + RT reflections (low-tier).
  - **PS5 Pro**: RT shadows + RT reflections + RT GI.
  - **Switch2**: software RT shadows fallback.

### 58.7 Per-platform features matrix

- [x] **Per-platform features matrix** at `V2/docs/platform-features.md`
      documenting per-platform availability of: HDR / Dolby Vision / VRR /
      120fps / 240fps / DLSS / FSR / XeSS / Frame Gen / Path Tracing / Mesh
      Shaders / VRS Tier 2 / DirectStorage / Cloud Save / Trophies / Workshop /
      Quick Resume / Spatial Audio.
- [x] **Per-feature CI gate**: feature flag must compile + cook on every
      shipping platform.

Implementation note: Implemented in `v2-build-release-platform-contract.json` at
`V2/ue/Build/Release/v2-build-release-platform-contract.json`,
`V2/docs/platform-features.md`, Horde's
`feature-flag-compile-cook-all-shipping-platforms` gate, and
`V2/ue/Tools/check-v2-build-release-platform.py`.

---

## 59. Marketing, Community, Social Surfaces

- [x] Public website with roster, modes, news, esports, store. Build at
      `apps/v2/web/`.
- [x] In-game changelog feed.
- [x] Discord integration: rich presence, lobby invites via Discord.
- [x] Esports broadcast kit: overlays, lower thirds, brackets, score overlays.
- [x] Community tournament toolkit (player-run tournaments with brackets,
      auto-result reporting).
- [x] Press kit + screenshots + B-roll per release.

Implementation note: Implemented in `apps/v2/web/` with a Vite/React public
website, public changelog, Discord, broadcast-kit, tournament, and press
manifests, Playwright coverage, and
`V2/ue/Tools/check-v2-marketing-community-social.py`.

---

## 60. Training Mode

Training is a SOTA AAA fighter's most lived-in surface. V2 ships a training mode
that is best-in-class: fully programmable dummy, frame-accurate displays,
combo-trial integration, replay-takeover wiring, lab tools, and lossless parity
with online mode rules.

### 60.1 Dummy programming

- [x] **Dummy state set**: Stand, Crouch, Jump, Block (Auto / All / First Hit /
      None / Random / After First Hit), Tech (Tech Throws / No Tech), Wake-up
      action (None / Reversal / Random / Get-Up Attack / Roll-Forward /
      Roll-Back), Counter-Hit always-on toggle.
- [x] **Action recorder**: record up to 8 slots × 60 seconds of dummy inputs;
      loop / random / sequential playback; trigger on hit / on block / on whiff
      / on neutral.
- [x] **Dummy AI behavior presets**: Aggressive (attacks on neutral), Defensive
      (blocks and counter-pokes), Throw-Happy (techs and command- throws),
      Reversal-On-Wake (reverses every wakeup), Random (uniform mix).
- [x] **Per-frame step**: pause sim, step 1 frame at a time, step N frames, step
      until next hit landed.
- [x] **Save / load lab setups** to slots (10+ per fighter); shareable via code
      with friends.

### 60.2 Display tools

- [x] **Hitbox / Hurtbox viewer** (toggleable, both sides; color-coded by
      vulnerability bitmask).
- [x] **Hit-active region trace** (last N frames of the hitbox shown as a decay
      trail).
- [x] **Frame data overlay** showing current move's startup / active / recovery,
      on-hit advantage, on-block advantage, juggle scaling stage, proration
      value, damage-scaling %.
- [x] **Input display** (both sides; cross-ref §46.8) with frame numbers,
      negative-edge markers, motion-input recognition highlighting.
- [x] **Damage display** per hit with running scaling factor.
- [x] **Meter display** showing all per-ruleset meters in numeric form.
- [x] **Hitstun / Blockstun visualization** as a countdown bar over the stunned
      fighter.
- [x] **Reset opportunity flag** when juggle / combo caps out. Implemented by
      the §9.2 reset-state HUD surface using `FV2ResetOpportunityOverlaySpec`,
      `UV2ResetOpportunityOverlay`, capped juggle detection from
      `UV2JuggleStateComponent`, and `ResetOpportunity_V2_Contract.json` /
      `check-v2-reset-opportunity.py`.
- [x] **Visual indicator on whiff-punish window opening** (overlay flash).

### 60.3 Stage / position controls

- [x] **Position reset**: corner, mid-screen, behind opponent, wallsplat,
      knockdown, jump arc, custom — saved per slot.
- [x] **Reset on KO / on round / on hit landing / manual**.
- [x] **HP / meter reset** options: full / half / 1-pixel / custom value.
- [x] **Reset on first hit** (auto-loop for execution practice).

### 60.4 Combo / execution tools

- [x] **Auto-loop on success** for combo execution drills.
- [x] **Combo length / damage limit** indicator for the move displayed.
- [x] **Best-combo tracker** per character / per starter with player
      personal-best stored.
- [x] **Frame-perfect (just-frame) marker** highlights the 1-frame input window
      when relevant.
- [x] **Slow-mo per-move replay** of the last combo at 25 / 50 / 75% speed.

### 60.5 Replay takeover from training

- [x] **Save Last Match as Lab Scenario** — turn the last position from any mode
      into a training scenario with both fighters and state intact.
- [x] **Replay Takeover** — load any replay (own or cloud), pause at any frame,
      take over either player, continue the match from there. See §62.

### 60.6 Practice-during-loading

- [x] Use match-load screens as ad-hoc practice space (cross-ref §46.9):
      auto-loads the player's main fighter against a default dummy in a neutral
      stage; auto-yields when the real match is ready.

### 60.7 Multiplayer training

- [x] **Online training lobby** (private): friend joins as opponent or as coach.
      Coach can pause both clients, annotate frames, run dummy commands, push
      notes (cross-ref §51.7).
- [x] Multiplayer training tolerates ≤ 250ms RTT with no frame loss (uses
      client-server net, not rollback, because tooling matters more than
      response).

### 60.8 Per-ruleset training presets

- [x] Preset packs per inspirational ruleset surfacing the mechanic training
      tools most relevant to that ruleset (e.g., Drive-Impact practice for SF6,
      X-Ray cancel practice for MK, KBD drills for Tekken, Guard Impact timing
      for SC, takedown defense for UFC, pin mash for WWE, environmental-finisher
      chain for DJ).

### 60.9 Specialized trainer modes

- [x] **Frame Trap Detector**: training scenario that lets you string two
      attacks with a gap; surfaces "Frame Trap: 2f gap → opponent's fastest jab
      is 3f → safe trap" annotation. Dummy can be set to mash specific buttons
      during the gap to verify the trap holds.
- [x] **Option Select (OS) Detector**: input scenario detector identifies when
      your input combination resolves to multiple moves depending on defender
      state (e.g., crouch tech that becomes a throw or normal); surfaces the OS
      chain.
- [x] **Hitconfirm Trainer**: dummy alternates block/hit on a single attack;
      player must confirm into the cancel only when the attack lands; training
      scores reaction time and confirm accuracy.
- [x] **Anti-Air Trainer**: dummy jumps at random angles + timings; player
      practices anti-air responses; trainer scores accuracy + clean hits +
      whiffed anti-airs.
- [x] **Wakeup Trainer**: dummy gets knocked down and rises with random / preset
      wake-up options; player practices oki / wake-up pressure + meaty timing.
- [x] **Cross-up Trainer**: dummy positioned at edge of cross-up range; player
      practices left/right identification.
- [x] **Throw Shimmy Trainer**: dummy throws on schedule; player practices
      walk-back-and-punish (shimmy) timing.
- [x] **Reaction Time Trainer**: cards-style timing test for parry / Just Block
      / sidestep / wake-up dodge; logs personal reaction-time data.
- [x] **Combo Damage Optimizer**: starting from a given starter, suggests
      higher-damage routes from a database of recorded combos (community-
      contributed + AI-curated).
- [x] **Defensive Option Chart** in-training: overlays the available defensive
      options (Block / Tech / Parry / Burst / Push Block / etc.) and shows which
      ones beat the incoming threat (cross-ref §9.1.1).

### 60.10 Training UI customization

- [x] Customizable HUD layout in training: rearrange overlays via drag- drop
      (input display, frame counter, damage display, hitbox, etc.).
- [x] Profile-saved layouts (per-player); shareable as code.

### 60.11 Range visualizers

- [x] **Throw range visualizer**: overlay disc showing throw range + effective
      throwbox radius from current stance + opponent throwable window.
- [x] **Move reach visualizer**: per-move max range visualized as a
      forward-projecting wedge / cone; useful for poke practice.
- [x] **Punish range overlay**: when opponent whiffs, surface "you can punish
      from N pixels" with reachable-move suggestions.
- [x] **Anti-air zone**: visual cone showing optimal anti-air activation range
      per move.

### 60.12 Match-data export

- [x] **Export training session data** to CSV / JSON: every input + every hit +
      every state transition; useful for community lab tools and training
      analysis.
- [x] **Import community labs**: load shared lab scenarios from in-game gallery;
      one-click load.

      Implemented with the native `FV2TrainingModeToolingSpec` /
      `UV2TrainingToolsScreen` Training Tools contract, default config builder,
      UI automation coverage, `TrainingModeTooling_V2_Contract.json`, and
      `check-v2-training-mode-tooling.py`. The contract covers dummy
      programming, recorder slots, overlays, reset controls, combo tools,
      replay takeover, practice-during-loading, multiplayer coach tooling,
      per-ruleset presets, specialized trainers, HUD customization, range
      visualizers, and CSV / JSON lab import-export.

---

## 61. Mission Mode, Combat Trials, Tutorial Curriculum

### 61.1 Universal Tutorial (first-boot)

- [x] Opt-in 30-minute First-Boot Tutorial covering: movement, attack tiers,
      block, throw, throw tech, special moves, super, cancels, counter-hit,
      whiff-punish, corner pressure, wake-up choice, basic defense.
- [x] Skip option for veteran players; suggested "Try the Tutorial!" prompt
      after 3 consecutive losses in any mode.

### 61.2 Per-ruleset Tutorial

- [x] 8-12 lesson curriculum per ruleset (MK / SF / Tekken / WWE / UFC / SC /
      DJ) covering ruleset-specific mechanics.
- [x] Each lesson is a small playable scenario with success criteria, on- screen
      prompts, and a "next" gate.
- [x] Completion grants currency, profile badge, and unlocks the ruleset's
      Combat Trial tier.

### 61.3 Per-fighter Combat Trials (SF-style Trials)

- [x] Each roster fighter ships with a 20-trial combo curriculum: bread-and-
      butter combos, special-cancel chains, super combos, character-defining
      tech, and 2-3 "expert" trials per fighter.
- [x] Trial UI shows the input string, frame-perfect markers, expected damage,
      allowed alternatives.
- [x] On-success: auto-loop / next-trial; on-fail: mid-combo dummy stays in
      hitstun for a beat to surface what missed.
- [x] Cloud-leaderboard for fastest fighter Trial completion runs.

### 61.4 Mission Mode (GG / KOF / SC Mission)

- [x] Curated mission list: 80-120 missions across all rulesets covering
      defensive options, offensive setups, combo openers, mixup strings,
      anti-air, anti-jump, cross-ups, throw setups, finisher conditions.
- [x] Per-mission rewards: currency, Battle Pass XP, cosmetic items, Faction XP,
      character mastery progression.
- [x] Daily Mission rotation (3-5 per day) cross-ref §52.5.

### 61.5 Character Mastery / Survival

- [x] **Character Mastery** track per fighter (1-30 levels) earned via match
      play, Trial completion, Mission completion. Unlocks intros, victory poses,
      alt-color slots, lore pages.
- [x] **Survival / Endless Mission**: chained matches with carry-over HP and
      per-fight modifier picks (rogue-lite light).

### 61.6 Tutorial-on-demand

- [x] After 3 missed throw techs in a session, a non-intrusive prompt offers the
      throw-tech mini-lesson (cross-ref §53.4).
- [x] Same pattern for missed wake-ups, missed parries, missed special- cancels,
      repeated whiffs near opponent (poke distance trainer).

Implementation note: completed through `FV2MissionTrialCurriculumSpec`,
`UV2MissionTrialCurriculumScreen`, default config / blueprint builders, UI
automation coverage, `MissionTrialCurriculum_V2_Contract.json`, and
`check-v2-mission-trial-curriculum.py`. The default curriculum contains a
30-minute opt-in first-boot tutorial with veteran skip and three-loss prompt, 8
ruleset tutorial tracks, 8 roster fighter trial tracks with 20 trials each and
fastest-run leaderboards, 96 missions across launch rulesets with 4 daily
rotation slots, 30-level character mastery tracks, survival carry-over HP /
modifier picks, and non-intrusive tutorial-on-demand prompts for throw techs,
wakeups, parries, special cancels, repeated close whiffs, and consecutive
losses.

---

## 62. Replay Theater, Replay Takeover, Spectator

### 62.1 Replay capture

- [x] Every match (ranked, casual, tournament, training-saved) saves a
      deterministic replay file: header (build, ruleset, fighters, stage, custom
      rules, timestamp), per-frame input stream both sides, RNG seed,
      custom-cosmetic manifest.
- [x] Replay size budget ≤ 1MB / 5-minute match; verified in CI.
- [x] Replay supports re-sim from frame 0 (deterministic; same engine version +
      content version).

### 62.2 Replay viewer

- [x] Timeline scrubber with chapter markers (round start, big hits, combos,
      KOs, finishers).
- [x] Per-frame step, 0.25× / 0.5× / 1× / 2× / 4× playback.
- [x] **Free camera mode** detached from match camera.
- [x] **Hitbox / Hurtbox / Input / Frame-counter overlay** toggleable in replay
      (cross-ref §60.2).
- [x] **Side-by-side replay compare** of two saved replays.

### 62.3 Replay Takeover (SF6 / KOF feature)

- [x] Pause replay at any frame; press "Take Over"; choose either side; sim
      resumes from that frame with you in control.
- [x] On takeover, the match becomes an offline practice scenario; original
      replay is preserved.
- [x] Useful for: "what if I had teched here", "how would I respond to this
      setup", crew lab studies.

### 62.4 Sharing

- [x] Save to cloud (per-account quota), share by code, append annotations.
- [x] Public Replay Pool browse-by-fighter / by-ruleset / by-rank-tier;
      community can upvote / favorite.
- [x] Replay → MP4 export (in-engine MoviePipeline render at custom camera).

### 62.5 Spectator (network)

- [x] Up to 8 in-match observers per public match; tournament-mode raises cap
      with TO-controlled delay (cross-ref §51.3).
- [x] Spectator UI: caster overlay, lower thirds, replay marker, freeze /
      slow-mo / clip-cut. Spectator perspective is independent of match camera.

### 62.6 Photo Mode (in replay + in match pause)

- [x] Pause anywhere (SP) → Photo Mode (cross-ref §46.9): rotate camera, DOF,
      filters, frames, stickers, capture, save, share to platform.
- [x] Photo gallery in profile; cloud sync (per-account quota).

### 62.7 Replay → Ghost data

- [x] One-click export: take a replay, encode the AI ghost from one side, upload
      to Ghost Battle pool (Tekken Ghost Battle, §19) and master training (§24).

Implementation note: completed through `FV2ReplayTheaterPipelineSpec` in
`V2OnlineServices`, with deterministic capture header validation, 1MB / 5-minute
CI size-budget gate, ReplayViewer.V2
chapter/playback/overlay/free-camera/compare coverage, offline practice replay
takeover requests/scenarios, cloud share-code and Public Replay Pool browse
facets, spectator production controls with 8 public observers plus tournament
delay cap raise, PhotoMode.V2 gallery/quota bridge, and one-click replay-side
ghost export targets for Ghost Battle and master training. Evidence lives in
`ReplayTheaterPipeline_V2_Contract.json`, `check-v2-replay-theater-pipeline.py`,
`V2.OnlineServices.ReplayTheaterPipeline.AssetContract`, and
`V2.OnlineServices.Module`.

---

## 63. Character Presentation: Intros, Win Quotes, Mirror Banter

Implementation note: §63 is implemented with `FV2CharacterPresentationCatalog`,
`FV2CharacterPresentationFighterSpec`,
`FV2CharacterPresentationMatchupBanterSpec`, default launch-roster catalog
builders, config/subsystem snapshot readiness, per-fighter dialogue CSV seeds
under `V2/balance/dialogue/`, `CharacterPresentation_V2_Contract.json`,
`check-v2-character-presentation.py`, and
`V2.Cinematics.CharacterPresentation.AssetContract`.

### 63.1 Pre-fight intros

- [x] **Per-character pre-fight cinematic** at match start: walk-in, character
      pose, stance-set, voice-line. Triggered between the loading gate and
      round 1.
- [x] **Per-matchup pre-fight banter**: when fighter A faces fighter B, both
      characters trade 1-3 voice-lines specific to the matchup (Injustice / MK11
      style). Per-fighter, per-opponent dialogue authored.
- [x] **Per-stage intro variant** (e.g., entering the WWE arena vs. entering the
      DJ club vs. entering the MK pit).
- [x] **Mirror match dialogue** (fighter A vs. fighter A) is uniquely authored —
      never re-use the cross-matchup banter for mirrors.

### 63.2 Round-specific intros

- [x] Final round intro variant (more dramatic stance / line).
- [x] Comeback round intro variant (when one side won round 1 and the other side
      won round 2).

### 63.3 Mid-fight barks

- [x] Per-fighter bark library tied to gameplay events: counter-hit landed,
      throw landed, parry landed, low-HP, combo-of-N hits, finisher armed,
      finisher missed.
- [x] Bark cooldown / priority rules to prevent spam; finisher / KO barks always
      win.

### 63.4 Per-match win / loss / draw quotes

- [x] **Per-character win quotes** library (≥ 30 lines per fighter) selected
      based on: opponent, ruleset, finisher used, perfect round, comeback win,
      time-out win, ring-out win, pinfall, submission, KO, double KO.
- [x] **Per-character loss quotes** (≥ 15 lines).
- [x] **Per-matchup win quote** when fighter A beats fighter B (Injustice "What
      you did was stupid" style); authored per matchup.
- [x] **Draw / double-KO quotes**.

### 63.5 Lore page / character bio

- [x] Per-fighter Lore Page with: bio, fighting style, signature moves, rival
      list, faction (cross-ref §22.5), real-life inspirations (where cleared),
      unlockable concept art, alt-costume gallery.
- [x] Lore unlocks via match play with the fighter, Trial completion, Mission
      completion, Tower clears.

### 63.6 Entrance presentation

- [x] **Per-fighter entrance** (deeper than intro): WWE-style ramp walk,
      Tekken-style stage-arrival, MK pit-summon, SF6 hub-arrival, DJ club-
      strut. Per-fighter authored, with custom music slot (cross-ref §43).
- [x] **Mocap-quality entrance for principals**; card-set entrance for
      mid-roster.
- [x] **Per-ruleset entrance overlay**: in WWE rulesets, full entrance with pyro
      / tron; in SF/MK/Tekken, shortened intro.

### 63.7 Codec / between-round bites

- [x] Optional "between rounds" voice-lines from commentators / mentor
      characters (Tekken 7-style press-conference snippets between chapters).

### 63.8 Photo + interview cutscenes (post-fight)

- [x] Per-fighter post-fight victory cinematic (pose hold) with configurable
      camera ride and skippable photo capture moment.
- [x] UFC post-fight presser + mic interview cinematic (cross-ref §33).
- [x] WWE post-match mic moment (cross-ref §11.7).

### 63.9 Authoring tooling

- [x] Per-fighter dialogue spreadsheet at `V2/balance/dialogue/<fighter>.csv`
      with columns: situation, opponent, ruleset, line ID, English text,
      locale-x text..., VO file path, emotion, length-cap. CSV ↔ DataTable
      round-trip per §1.4.

### 63.10 Per-fighter ending illustration art style

- [x] **Per-fighter unique art style** for Arcade ending illustrations: oil
      painting, comic book panel, anime cel-shade, gothic woodcut, hip-hop
      graffiti, photoreal portrait, classical Japanese ukiyo-e, art-nouveau,
      manga ink wash — one signature style per fighter, matching the fighter's
      aesthetic identity.
- [x] **Per-fighter illustrator**: assign a per-fighter illustrator credited in
      the ending gallery + post-credits roll.

### 63.11 Audio diaries / codec entries

- [x] **Audio diary** collectibles (MGS-style codec entries): unlockable audio
      logs throughout Story / Side Stories / Konquest / Krypt that reveal lore,
      faction history, fighter backstory.
- [x] **Audio diary library** in profile / Story Theater (§73.3) with transcript
      view + subtitle support.
- [x] **Cross-fighter audio diary references**: some audio diaries from one
      fighter mention or recontextualize events from another's lore.

### 63.12 Pre / post-credits scene hooks

- [x] **Per-fighter post-credits scene** hook: short 15-30s cinematic played
      after Story completion or Side Story completion, teasing future content /
      next-arc / DLC fighter (where authored).
- [x] **Mid-credits scenes** at chapter break points in Story.
- [x] **Crossover post-credits scenes**: rare events where two fighters'
      post-credits scenes converge into a shared hook.

---

## 64. Tag Team & Assist Mechanics

### 64.1 Tag formats

- [x] **2v2 Tag** (SF X Tekken / MvC / Tekken Tag 2): two fighters per side, one
      active at a time, switchable mid-combo via tag button.
- [x] **3v3 Tag** (MvC, KOF): three fighters per side; tag-switch and
      assist-call.
- [x] **Trinity** (Tekken Tag 2 Trinity): a third "anchor" fighter callable once
      per match for a fixed assist.

### 64.2 Tag mechanics

- [x] **Tag-Cancel**: cancel a move into a tag-in, summoning partner with a
      designer-curated launcher animation; combos extend across the tag.
- [x] **Snapback** (MvC): forced opponent tag-out; the snapped-out character
      recovers HP slowly off-screen.
- [x] **Delayed Hyper Combo / DHC** (MvC): cancel a super into your partner's
      super at additional meter cost, allowing extended cinematic chains.
- [x] **Assist Call**: summon partner for a single move with cooldown.
- [x] **Cross Assault** (SF X Tekken): both fighters on the screen at the same
      time controlled by a single player with meter cost.
- [x] **X-Factor / Pandora** (MvC3 / SF X Tekken): activate temporary power-up
      state; trade HP for damage / speed boost.
- [x] **Baroque / Duo cancels** (MvC2 era): cancel any move with partner- call
      cost.

### 64.3 Team HP

- [x] **Per-fighter HP bar** with partner HP visible on the HUD; tag-out
      regenerates HP slowly for the off-screen fighter (configurable per
      ruleset).
- [x] **Team KO**: round ends when either side's entire roster reaches 0 HP.

### 64.4 Net / sim

- [x] Multi-fighter rollback (2 vs 2): sim handles two active fighters per side
      at 60Hz; tagging is a deterministic transition with frame- accurate
      animation. Cross-ref §7 + §8.2.
- [x] Replay encoder supports per-tag-action recording.

### 64.5 Authoring

- [x] Tag-cancel / DHC matrix per fighter pairing in the move catalog
      spreadsheet; restrictions for cinematic / cross-IP licensing where
      relevant.
- [x] Per-team theme music (KOF / MvC style).

### 64.6 Online queues

- [x] Tag-team ranked queue with role-pref balancing (cross-ref §48.2).
- [x] Tag co-op queue (2 players controlling one team each).
- [x] Crew battle queue (3v3 best-of-5 single-elimination per match, KOF style).

Implementation note: §64 is implemented as `FV2TagTeamMechanicsCatalog` in
`V2Modes`, with the canonical `TagTeamMechanics_V2_Contract.json`, authoring
seeds in `V2/balance/tag/tag_cancel_dhc_matrix.csv` and
`V2/balance/tag/team_theme_music.csv`, CI coverage via
`check-v2-tag-team-mechanics.py`, and automation through
`V2.Modes.TagTeamMechanics.AssetContract` plus `V2.Modes.Module`.

---

## 65. Game Feel: Hitstop, Hitlag, Sakkin, Camera Shake

Game feel is what separates a generic fighter from one that punches you in the
chest. V2 centralizes hitstop, hitlag, freeze-frames, slow-mo, camera shake, and
screen tint as a single tunable system — per-ruleset profiles, per-move
overrides.

### 65.1 Hitstop / Hitlag / Sakkin

- [x] **Hitstop**: on confirmed hit, both attacker and defender pause for N
      frames (defender for `HitstopDefender`, attacker for `HitstopAttacker`).
      Per-move overrides in `DA_Move`; per-ruleset defaults in
      `URV2_Ruleset.HitstopCurves`.
- [x] **Hitlag** (defender-only sub-window): defender's hit-reaction freezes a
      few extra frames after attacker resumes — Tekken-style juice.
- [x] **Counter-hit hitstop bonus**: +2-3 frames on counter-hit.
- [x] **Block hitstop**: smaller window, configurable per ruleset.
- [x] **Crush counter / punish counter hitstop**: extra hitstop on whiff-
      punishes (SF6 punish counter feel).
- [x] **Sakkin** (Japanese fighter term — landing-impact freeze on heavies):
      authored per heavy / launcher move with custom curve.
- [x] **Resimulation safety**: hitstop frames don't count toward rollback
      budget; cosmetic-only side effects suppressed during resim (cross-ref
      §7.3).

### 65.2 Camera shake

- [x] Per-hit camera shake curve authored from a shared library keyed by
      hit-reaction tag (small / medium / heavy / launcher / bone-shatter /
      weapon-clash / explosion / KO / Fatality).
- [x] Per-ruleset shake intensity multiplier (MK aggressive, Tekken moderate,
      SF6 conservative, SC moderate, UFC realistic, WWE broadcast).
- [x] Per-fighter shake personality (e.g., heavyweight grappler hits shake more
      than zoner projectiles).
- [x] **Reduced-motion** accessibility override (cross-ref §53.2): camera shake
      clamped to a max intensity or disabled entirely.

### 65.3 Slow-mo / Freeze-frame

- [x] **KO slow-mo** triggered on round-clinching hit (per-ruleset duration,
      camera ride).
- [x] **Finisher freeze-frame** (X-Ray / Critical Edge / Rage Art / Blazin' /
      Fatal Blow): hold + zoom + tint before cinematic begins.
- [x] **Reversal-Edge slow-mo** during the clash (cross-ref §13.7).
- [x] **Mid-combo emphasis freeze-frame** on heavy launcher hits in MK ruleset
      (X-Ray entry).
- [x] Slow-mo opt-out toggle in accessibility (cross-ref §53.2).

### 65.4 Screen tint / vignette / chromatic ramp

- [x] **Counter-hit flash** (1 frame of bright tint on counter-hit landed).
- [x] **Low-HP vignette** (red screen-edge pulse when ≤ 25% HP).
- [x] **Comeback aura** (golden screen tint when down two rounds and mounting
      comeback).
- [x] **Devil / Soul Charge / Heat / Blazin' / Burnout state tints** consistent
      with §44 aura effects.
- [x] **Photo-mode tone curves** library (cross-ref §45.5).

### 65.5 Tunability

- [x] Hitstop / shake / slow-mo curves authored in `V2/balance/feel/` and
      previewable in editor utility widget against any move.
- [x] Per-ruleset feel comparison harness: load same move under different
      ruleset profiles, capture replay, generate side-by-side video for tuning
      review.

Implementation note: §65 is represented by `FV2GameFeelCatalog` in `V2Combat`,
with the canonical `GameFeelTuning_V2_Contract.json`, authored curves in
`V2/balance/feel/`, a deterministic comparison harness at
`run-v2-game-feel-comparison.py`, CI coverage via
`check-v2-game-feel-tuning.py`, and automation through
`V2.Combat.GameFeelTuning.AssetContract` plus `V2.Combat.Module`.

---

## 66. Network Quality: Delay Fallback, LAN, Server Browser, Private Rooms

V2's rollback netcode is best-in-class — but the network reality is messy. This
section covers the dial-back behaviors and offline-friendly options.

### 66.1 Delay-based netcode fallback

- [x] **Auto-fallback**: when rollback rewinds exceed 8 frames sustained for ≥
      30 seconds, the client offers a one-time switch to delay-based netcode
      (fixed N-frame input delay both sides, no rollback). Player explicit
      accept required; ranked match suspended and recorded as no- contest if
      either side declines.
- [x] **Delay-based mode** is the default behavior under extreme RTT (> 150ms)
      where rollback feel becomes unworkable.
- [x] **Pre-match selection** in Custom Room: host can force rollback / delay /
      hybrid mode.
- [x] **Hybrid mode**: rollback up to N frames, falls back to delay only for
      sustained pressure.

### 66.2 LAN play

- [x] LAN tournament mode: peer discovery via UDP broadcast on local network;
      pair-up with no internet required; per-match rule sheet preserved; replays
      captured.
- [x] LAN-only ranking ledger (offline-event-friendly).
- [x] LAN-mode auto-on at tournament-venue WiFi SSIDs (configurable per TO).

### 66.3 Dedicated server browser

- [x] Public dedicated-server browser (PC primary; console where TRC permits):
      list servers by region / mode / ruleset / latency / player count.
- [x] Host configuration: ruleset, stipulation, fighter restriction, password,
      auto-kick-on-AFK, rotating-map list.
- [x] Server moderation tools (kick, ban-from-this-server, server-wide mute).

### 66.4 Private lobbies / Custom Room

- [x] Custom Room (1v1 / 2v2 / 4-corner / tournament / Battle Royal / Royal
      Rumble lobby): host configurable, password-gated, up to 16 participants +
      8 spectators.
- [x] In-room queue for who-plays-next; auto-rotate winners-stay-on,
      losers-rotate-out, randomized seating.
- [x] Per-room match settings: ruleset, stipulation, time limit, music, stage
      list (curated or random).
- [x] Lobby chat (text + optional voice) with per-platform compliance.
- [x] In-lobby training space accessible to spectating players (mini-lab
      embedded in lobby world).

### 66.5 Network diagnostics

- [x] Pre-match network handshake test reporting RTT, jitter, packet loss both
      sides; results stamped into match record (cross-ref §48.7).
- [x] In-match netgraph overlay (toggleable; cross-ref §7.5).
- [x] Per-account network reliability score; ranked matches with low-
      reliability opponents flagged.
- [x] Ops dashboard for network health (cross-ref §55).

### 66.6 Bring-Your-Own-Server (PC dedicated)

- [x] **BYO Dedicated Server** (PC primary; console where TRC permits):
      player-hosted dedicated server option for Custom Room / private tournament
      / community-run leagues.
- [x] **Per-server configuration**: rule sheet + vehicle restrictions + assist
      eligibility + ban list + admin commands; saved per server.
- [x] **Server browser** for player-hosted servers (cross-ref §66.3 dedicated
      server browser).
- [x] **Per-server moderation tools**: admin kick / ban / mute / server- wide
      settings + chat-log audit.
- [x] **Server reputation rating** by participants; high-reputation servers
      featured on browser homepage.

### 66.7 Cross-server tournaments

- [x] **Cross-server tournament series**: events spanning multiple regional
      servers with unified bracket + per-server-stage matches + cross-server
      final.
- [x] **Per-tournament server roster** approved by TO (cross-ref §51.5);
      anti-stream-snipe match-start delay (cross-ref §51.9) per-event
      configurable.
- [x] **Cross-server broadcast feed**: caster overlay (§51.10) aggregates
      multi-server stream feeds into one event broadcast.

### 66.8 Per-region matchmaking pools

- [x] **Per-region matchmaking pool segmentation**: NA / EU / JP / KR / LATAM /
      SEA / India / MENA / Oceania (cross-ref §75.4).
- [x] **Off-peak cross-region tolerance widening**: matchmaking expands
      cross-region tolerance during off-peak hours per region.
- [x] **Per-region anti-cheat enforcement** (cross-ref §49 + §80) with
      region-specific behavioral baselines.

Implementation note: §66 is represented by `FV2NetworkQualityFeatureSet` in
`V2Netcode` and `FV2NetworkQualityOnlineCatalog` in `V2OnlineServices`, with the
canonical `NetworkQuality_V2_Contract.json`, CI coverage through
`check-v2-network-quality.py`, and automation through
`V2.Online.NetworkQuality.AssetContract`, `V2.Netcode.Module`, and
`V2.OnlineServices.Module`.

---

## 67. Cross-Platform Social: Friends, Party, Reporting, Bans, Appeals

### 67.1 Cross-platform friends

- [x] Publisher account is the cross-platform identity (cross-ref §50); friends
      list visible across PC / PS5 / XSX / Switch2 / Steam Deck.
- [x] Per-platform native friends ALSO visible with platform icon; merge
      duplicate-identity prompt.
- [x] Friend status: Online, In-Match, In-Lobby, In-Training, Spectating, DND,
      Streamer Mode (anon).

### 67.2 Cross-platform party

- [x] Party of ≤ 8 cross-platform; party voice via EOS Voice; party text chat
      persistent across modes.
- [x] Party-up matchmaking: queue together for ranked tag / casual / crew battle
      / Royal Rumble / UFC PPV.
- [x] Party invite via deep link (Discord / platform DMs / share code).

### 67.3 Reporting

- [x] In-game report flow (cross-ref §48.5) with categories: Cheating,
      Harassment / hate speech, Sexual content, Threatening behavior,
      Custom-content abuse (logo / decal / costume), Profanity / chat abuse,
      Trolling / griefing, Rage-quit / DC abuse, Impersonation, Spam.
- [x] Per-report evidence attachment: auto-attach last 5-minute replay + last
      100 chat lines + screenshot if available.
- [x] Throttle / abuse-of-report-system enforcement.

### 67.4 Voice / text chat moderation

- [x] **Text chat filter**: per-locale profanity + hate-speech filter;
      per-account opt-out (filter-off requires age verification).
- [x] **Voice chat filter** via real-time speech-to-text → ML classifier;
      flagged voice clips quarantined for review.
- [x] **Auto-mute lists** synced cross-platform; mute follows account across
      sessions.
- [x] **Block list** synced cross-platform; blocked players never matched in
      casual / ranked queues; party invites blocked.

### 67.5 Bans & appeals

- [x] Ban tiers: warning → 24h chat mute → 24h matchmaking ban → 7-day ban →
      30-day ban → permanent ban; documented criteria + escalation.
- [x] Ban appeal flow (in-game form + email confirmation); ops review within
      documented SLA (target 72h for permanent bans).
- [x] Ban history visible in account; appeal ruling visible.
- [x] Hardware ID ban (cross-ref §49) for severe / repeat offenders.

### 67.6 Account integrity

- [x] Two-factor auth for publisher account (TOTP + optional hardware key).
- [x] Account recovery flow (email / SMS / 2FA backup codes).
- [x] Lost-device handling (sign-out-all-sessions, force-2FA-reset).
- [x] Region change cooldown (90 days) to prevent ranked region-shopping.
- [x] Account merge support (cross-platform identity merge with explicit
      consent + per-platform progression preservation).

### 67.7 Streamer / privacy

- [x] Streamer Mode (cross-ref §51.6) extended cross-platform: party
      anonymization, friend-list hide-handle option.
- [x] Profile-card visibility scope (Public / Friends / Private).

Implementation note: Cross-platform social (§67) implemented through
`FV2CrossPlatformSocialFeatureSet` in `V2OnlineServices`, with the canonical
`CrossPlatformSocial_V2_Contract.json`, the shared moderation ladder updated to
include the 30-day ban tier, CI coverage through
`check-v2-cross-platform-social.py`, and automation through
`V2.Online.CrossPlatformSocial.AssetContract` and `V2.OnlineServices.Module`.

---

## 68. Parental Controls, Age Gating, Time-Played Reports

V2 is M-rated by default. Where the player is a minor (per platform account-age
data), V2 must constrain features per region law.

### 68.1 Age gating

- [x] Boot-time age confirmation (date-of-birth where required by region;
      pass-through to platform account age data where available).
- [x] **COPPA (US)** compliance for under-13 accounts: no chat, no UGC upload,
      no online matchmaking unless parental consent recorded.
- [x] **GDPR-K (EU)** compliance for under-16 accounts (per member state).
- [x] **Korea Game Rating Board**: account time-limit compliance for minors (no
      overnight play 0000-0600 unless parent-approved).
- [ ] **China**: minor-account-only Standard SKU through approved publisher;
      daily 1h play limit; identity verification. — re-marked [~] 2026-06-12:
      requires an external approved-publisher agreement and identity-provider
      integration; neither exists (consistent with the §54.2 China re-mark).
      `blocked:external`
- [x] **Australia / NZ** rating ack screens.

### 68.2 Parental controls

- [x] Platform parental-control integration: Sony Family Management, Microsoft
      Family Safety, Nintendo Parental Controls, Steam Family View.
- [x] In-game parental dashboard (parent PIN gated): toggle online play, voice
      chat, text chat, UGC visibility, custom-content download, cosmetic-shop
      spending limit, daily playtime limit, week-ends-only mode, bedtime
      auto-shutoff.
- [x] Per-child gore-tier override (force Mild / Off per cross-ref §16.5).
- [x] Per-child finisher-disable override.

### 68.3 Time-played reports

- [x] Weekly playtime report (per-account email + in-game dashboard): hours per
      mode, hours per fighter, peak playtime hour, comparison to prior week.
- [x] Parent-visible playtime reports for child accounts.
- [x] Playtime nudge: optional reminder pop-up after N consecutive hours ("Take
      a break?").

### 68.4 Real-money spending limits

- [x] Per-account daily / weekly / monthly premium-currency spending caps
      (cross-ref §52.3).
- [x] Parent-set per-child spending limits with PIN-gated changes.
- [x] Per-region maximum spending limits where law requires (e.g., Korean
      minor-account limits).

### 68.5 Disclosure

- [x] Loot-box / surprise-mechanics disclosure (V2 has none, but legal requires
      explicit statement in store listing and settings).
- [x] In-game purchases summary in settings (lifetime + last 30 days).
- [x] Refund flow per platform policy.
- [x] Health & safety warning screen (mandatory in some markets;
      photosensitivity warning bundled).

Parental controls (§68) implemented with `FV2ParentalControlsFeatureSet` in
`V2OnlineServices`, with the canonical `ParentalControls_V2_Contract.json`,
`check-v2-parental-controls.py`, and automation through
`V2.Online.ParentalControls.AssetContract` and `V2.OnlineServices.Module`.

---

## 69. Bonus Modes & Mini-Games

V2 honors the genre's tradition of bonus / non-canonical / silly modes that have
built community love for decades.

### 69.1 Classic bonus stages

- [x] **Car Destruction** (SF II): timed destroy-the-car bonus stage with damage
      tally.
- [x] **Barrel Smashing** (SF II): timed barrel pile destruction.
- [x] **Board Breaker** (Tekken Force): vertical stack of breakable boards,
      perfect-strike chain bonus.

### 69.2 Tekken Bowl / Tekken Ball

- [x] **Tekken Bowl**: in-engine bowling mini-game (Tekken Tag 2 / Tekken Tag
      Tournament): 10-pin layout, per-fighter throw style, score leaderboard.
- [x] **Tekken Ball**: beach volleyball with attack-charged ball + KO damage on
      caught ball (Tekken 3); 1v1 + 2v2 modes.

### 69.3 MK Test Your Luck / Test Your Strike

- [x] **Test Your Luck**: random modifier roulette (3-7 modifiers per match,
      e.g., "blood gravity reversed", "headless mode", "low-grav jumps", "no
      jumping", "rain of cabbage"); cosmetic-only.
- [x] **Test Your Strike**: combo-trial mini-game with per-fighter target combos
      against a static dummy; cross-ref Combat Trials (§61.3) but stand-alone
      for the MK arcade feel.

### 69.4 SC Tower of Lost Souls / Trial of Devil

- [x] **Tower of Lost Souls** (SC4): floor-climbing stage with rewards per floor
      and modifier rotation.
- [x] **Trial of Devil** (SC4): boss-rush escalation with permadeath character
      slots.

### 69.5 Boss Battles

- [x] **Boss Rush mode**: chain of boss fights from each ruleset (Tekken's
      Heihachi-vs-Akuma feel) with custom boss AI tuned for cinematic
      difficulty.
- [x] **Super Boss variants** (per-fighter unlock): SNK-style super boss Geese /
      Rugal / Akuma teleport-spam-1HKO mode for nostalgia / challenge runs.

### 69.6 Asymmetric mini-modes

- [x] **King-of-the-Hill / Endless Versus**: one player defends until defeated;
      queue rotates.
- [x] **Capture-the-Flag** style (experimental): two crews compete to hold a
      stage hotspot for N seconds.
- [x] **Death Race** (Def Jam-inspired environmental rampage): 4 fighters
      compete to use the most environmental finishers in a club stage within a
      time limit.

### 69.7 Mode unlocks

- [x] Bonus modes unlocked via Krypt (§22) chests, Tower clears (§21), seasonal
      events (§52.5), or default-unlocked for accessibility.

Bonus modes (§69) implemented with `FV2BonusModeCatalog` and `FV2BonusModeSpec`
in `V2Modes`, with the canonical `BonusModes_V2_Contract.json`,
`check-v2-bonus-modes.py`, and automation through
`V2.Modes.BonusModes.AssetContract` and `V2.Modes.Module`.

---

## 70. Asset Budget & Streaming Architecture

### 70.1 Per-fighter budget

- [x] **Polygon budget**: principal characters ≤ 80k tris LOD0, mid- roster ≤
      60k, crowd ≤ 25k; LOD chain to LOD3 / impostor.
- [x] **Texture memory budget**: principal ≤ 64MB at 4K texture pack, ≤ 32MB at
      2K base, ≤ 8MB at 1K Switch2.
- [x] **Animation budget**: per-fighter unique anims ≤ 800; sharable generic
      anims pooled; total compressed anim package ≤ 80MB per fighter.
- [x] **Audio budget**: per-fighter voice + foley + barks ≤ 50MB per locale at
      48kHz Opus.
- [x] **Cloth / hair budget**: per-fighter ≤ 6 cloth chains; ≤ 2 hair grooms
      (otherwise card-hair).

### 70.2 Per-stage budget

- [x] **Polygon budget**: stage ≤ 4M tris LOD0; mandatory LOD chain.
- [x] **Texture budget**: stage ≤ 256MB at 4K texture pack.
- [x] **VFX budget**: stage hazard particle count cap to keep GPU ≤ 4ms at 4K
      (cross-ref §42 stage perf budget).
- [x] **Audio budget**: stage music + ambience + crowd ≤ 30MB per locale.

### 70.3 Streaming

- [x] **Streaming pool sizes** per platform: PS5 / XSX 4GB streaming pool, PC
      scalable to 8GB, Switch2 1.5GB.
- [x] **Asset chunking**: per-fighter chunked into character / voice /
      base-costume / alt-costume / cosmetic-pack chunks for incremental
      install + DLC.
- [x] **Texture streaming priority**: in-match priority on visible fighters +
      stage; off-screen partner fighters demoted.
- [x] **Audio streaming**: voice banks streamed on-demand; music tracks
      streamed.

### 70.4 LOD strategy

- [x] **Fighter LOD0** active when within camera distance; LOD1 at mid-range;
      LOD2 for menu / background; LOD3 / impostor for crowd.
- [x] **Stage LOD0** for floor + walls; LOD1 for ceiling / distant props;
      impostor cards for far background.
- [x] **Crowd LOD**: instanced static mesh + bone animation impostor at
      distance.

### 70.5 Asset audit

- [x] Weekly asset audit report (cross-ref §57): orphan assets, oversize assets,
      missing LODs, missing skin weights, redundant material variants, duplicate
      textures.
- [x] CI gate: every new asset must pass naming-convention linter (cross-ref
      §1.4) and budget linter.

### 70.6 Per-fighter shader complexity budget

- [x] **Per-fighter shader instruction budget**: PS5/XSX/PC ≤ 256 shader
      instructions per material at LOD0; Switch2 ≤ 128. Per-cosmetic-pack shader
      audit before ship.
- [x] **Per-fighter material variant count**: principals ≤ 8 material slots per
      costume; mid-roster ≤ 6; crowd ≤ 2.
- [x] **Subsurface scattering** allowed on principals only (LOD0); mid- roster
      uses approximation; crowd no SSS.
- [x] **Per-fighter VFX complexity budget**: Niagara emitter count ≤ 20
      simultaneously per fighter; particle count ≤ 5000 per emitter.

### 70.7 Per-stage particle complexity budget

- [x] **Per-stage particle budget**: outdoor stage ≤ 100K particles
      simultaneously (atmospheric + hazard + crowd reactions); indoor stage ≤
      60K; arena stage ≤ 80K (pyro + crowd cards).
- [x] **Per-stage LOD particle culling**: distance-based emitter density
      reduction; per-platform tier (Switch2 cuts to 60%, mid-PC 80%, top PC /
      console 100%).
- [x] **Reactive particle budget headroom**: 20% of per-stage budget reserved
      for hit / super / finisher reactive bursts so they always look correct.

### 70.8 Memory budget per match state

- [x] **Match-state memory budget**: 2 fighters at LOD0 + 1 stage + HUD + VFX
      active = ≤ 1.5 GB on PS5 / XSX; ≤ 800 MB on Switch2; ≤ 2.5 GB on PC (high
      settings).
- [x] **Sim-snapshot memory** (cross-ref §7.2): ≤ 8 KB per fighter enforced in
      CI; 2v2 tag ≤ 16 KB; 3v3 tag ≤ 24 KB.
- [x] **GC pressure profiling per scene**: alloc-per-frame budget ≤ 1 MB / frame
      in steady state; ≤ 5 MB / frame during cinematic transitions; CI gate
      fails if exceeded.

### 70.9 PSO cache shipping per platform

- [x] **Per-platform PSO cache blob** shipped in cooked content; per-
      driver-version cache rebuild gate at first launch (cross-ref §89.1).
- [x] **Per-cosmetic-pack PSO supplement**: when player loads new DLC cosmetics,
      supplemental PSO cache compiled on first use; progress bar shown.
- [x] **PSO cache integrity check** at boot: corrupted cache → safe- mode
      rebuild.

### 70.10 Async loading priority hints

- [x] **Per-asset priority hint** in cooked content: critical (main menu /
      character select) / high (in-match active fighters + stage) / medium
      (off-screen partner / spectator) / low (cosmetic preview gallery / Krypt
      content).
- [x] **Per-mode pre-load hint table**: per-mode required assets pre- loaded at
      mode-select time; per-mode "Now Loading…" screen shows progress with
      per-asset progress bar.
- [x] **Streaming priority during play**: in-match priority on visible vehicle /
      fighter / stage; distant assets demoted.

Asset budget streaming (§70) implemented with `FV2AssetBudgetStreamingCatalog`
and its fighter, stage, streaming, audit, shader, particle, memory, PSO, and
async-loading policies in `V2Editor`, with the canonical
`AssetBudgetStreaming_V2_Contract.json`, `check-v2-asset-budget-streaming.py`,
and automation through `V2.Editor.AssetBudgetStreaming.AssetContract` and
`V2.Editor.Module`.

---

## 71. Day-One Patch, Hotfix, Quick-Resume, Crash Recovery, DRM

### 71.1 Day-one patch & pre-load

- [x] Day-one patch budget ≤ 5GB (cross-ref §58.3); subsequent patches ≤ 2GB
      typical.
- [x] Pre-load window: 48-72h pre-launch where platform permits.
- [x] Per-region patch staggered rollout for backend stability.
- [x] Mandatory minimum-version check: clients below min-version blocked from
      online play; forced-update prompt.

### 71.2 Hotfix system

- [x] Server-driven balance hotfix capability (data-only changes pushed without
      client patch): tunable values for damage, frame data, meter cost, drive
      cost, finisher conditions — within bounds the anti-cheat trusts.
- [x] Hotfix manifest signed and versioned; offline match honors local hotfix;
      online match enforces server hotfix.
- [x] Hotfix rollback capability (revert to prior hotfix on failed canary).
- [x] Tournament Mode (cross-ref §51.4) freezes hotfix at TO snapshot.

### 71.3 Quick-resume / app-switch

- [x] Xbox Quick Resume support: full session state preserved across console
      sleep + game-switch.
- [x] PS5 instant-resume support.
- [x] Switch2 sleep / wake handling (cart-state preservation).
- [x] PC sleep / wake handling.
- [x] In single-player modes: app-switch auto-saves; resume from save slot on
      relaunch.

### 71.4 Mid-match crash recovery

- [x] In single-player: auto-save per match; crash → resume at last saved
      position with state reconstruction.
- [x] In online ranked: graceful disconnect → opponent awarded the match win,
      disconnecting player's rank-penalty reduced if crash- reporter confirms
      genuine crash (vs. rage-quit).
- [x] Crash reporter symbolicated (cross-ref §55.4); telemetry-attached.

### 71.5 Background download during play

- [x] Patch / cosmetic-pack / DLC download in background during play where
      platform supports; resume on suspend / wake.
- [x] Bandwidth throttling option in settings ("limit background download while
      playing online").

### 71.6 DRM / Anti-piracy

- [x] **PC DRM**: Denuvo or equivalent at launch (publisher decision; document
      trade-off in `V2/docs/drm-decision.md`). Removal-plan window after 6-12
      months per industry practice.
- [x] **Console**: platform-native anti-piracy.
- [x] **Anti-tamper**: integrity check on cooked assets at boot; failed check →
      safe-boot mode (offline-only, no ranked, no progression grants until
      reinstall).
- [x] DRM-free single-player option? — no, due to anti-cheat coupling (cross-ref
      §49).

### 71.7 Telemetry hooks

- [x] Crash rate dashboard (cross-ref §55.4) with platform-segmented view;
      release-gate threshold (≤ 1% crash rate per session per platform).
- [x] Quick-resume / app-switch failure mode telemetry.
- [x] Hotfix rollout health dashboard.

Day-one patch hotfix recovery (§71) implemented with
`FV2DayOnePatchHotfixRecoveryFeatureSet` and its release, hotfix, quick-resume,
crash-recovery, background-download, DRM, and telemetry policies in
`V2OnlineServices`, with the canonical
`DayOnePatchHotfixRecovery_V2_Contract.json`, `V2/docs/drm-decision.md`,
`check-v2-day-one-patch-hotfix-recovery.py`, and automation through
`V2.Online.DayOnePatchHotfixRecovery.AssetContract` and
`V2.OnlineServices.Module`.

---

## 72. Per-Fighter Signature Library

Every fighter on V2's roster must have a deep signature library — the
behavior-set that makes the character feel like a unique individual, not a
re-skinned generic. This section formalizes that library.

### 72.1 Per-fighter signature animations

- [x] **Per-fighter signature idle**: looped 8-12s breathing / posing animation
      unique to the fighter (Sub-Zero crouched poise, Hwoarang flamingo stance,
      Heihachi arms-crossed, Ryu hadouken-charge stance).
- [x] **Per-fighter signature taunt**: minimum 3 per fighter — neutral taunt,
      mocking taunt, victory taunt; per-ruleset acceptability flag (some taunts
      are MK-only, some WWE-only, some DJ-only).
- [x] **Per-fighter intro pose**: unique walk-in + stance-set animation tied to
      per-character pre-fight cinematic (§63.1).
- [x] **Per-fighter victory pose**: minimum 3 (clean win, perfect win, finisher
      win); used by post-fight cinematic (§63.8).
- [x] **Per-fighter defeat / KO animation**: not generic ragdoll — per- fighter
      fall-back motion + groan vocal.
- [x] **Per-fighter knockdown / wake-up variation**: distinct wakeup roll /
      get-up attack animations from other fighters.
- [x] **Per-fighter slip / dodge / sidestep variation**: head-movement
      personality (UFC ruleset) and sidestep aesthetic (Tekken).
- [x] **Per-fighter air-recover animation**: how this character rights
      themselves mid-air after a launcher.
- [x] **Per-fighter pursue animation**: jump-attacks on grounded opponent;
      per-fighter dive/stomp/elbow signature.
- [x] **Per-fighter wake-up dust** (cosmetic Niagara) on rise.

### 72.2 Per-fighter signature audio

- [x] **Per-fighter signature impact sound** on heavy / launcher / Brutality /
      finisher hits (e.g., Sub-Zero's ice-crystallize click, Goro's bellow,
      Akuma's electric chord). Per-fighter library ≥ 8 unique impact stings.
- [x] **Per-fighter signature crowd chant** (cross-ref §43.10) keyed to
      crowd-reactivity profile (§11.6).
- [x] **Per-fighter walking / running footstep variance**: sneaker squeak, boot
      stomp, barefoot pad, heel click, weighted-armor clank, robotic servo
      (synth-fighter), claw scrape.
- [x] **Per-fighter breath / exertion vocal layer** as a function of stamina
      drain — real-time vocal pitch / volume shift in UFC / WWE / DJ rulesets.
- [x] **Per-fighter signature theme music** with at least 3 variants (ambient /
      tension / climax) for dynamic music stack (§43.3).

### 72.3 Per-fighter signature VFX

- [x] **Per-fighter signature aura** for low-HP / comeback / state-ramp (Goro
      Krushing Blow flame ring, Akuma Satsui-no-Hado glow).
- [x] **Per-fighter signature weapon glow / trail** on weapon-wielding fighters
      (SC ruleset).
- [x] **Per-fighter signature finisher VFX kit** (X-Ray bone-pattern,
      blood-spatter pattern, gore-tier overlay).

### 72.4 Per-fighter signature stage reactions

- [x] **Per-fighter cinematic close-up shader** for finisher cutscene with
      per-fighter face-detail and signature scar / paint pattern.
- [x] **Per-fighter signature throw-receiver react**: when this fighter is
      thrown, they have unique mid-air recovery animation.
- [x] **Per-fighter hit-by-specific-move react**: signature recoil from famous
      moves of rival fighters (e.g., Liu Kang fireball-fan react from Raiden
      lightning).

### 72.5 Authoring

- [x] Per-fighter signature library checklist at
      `V2/balance/fighters/     <fighter>/signature-checklist.md` with ✓ for
      each item above. — re-marked [ ] 2026-06-12: checklists exist for only 2
      of ~61 roster fighters (`asha`, `king`); completed 2026-06-12: checklists
      authored for all 60 launch-roster fighters at the catalog-validated
      `V2/balance/fighters/<Token>/signature-checklist.md` paths, generated
      one-to-one from `BuildDefaultLaunchRosterCatalog`. Each ✓ attests the
      catalog-defined requirement (per the file's stated legend); per-fighter
      asset authoring is tracked in each checklist's "Asset authoring" section
      and stays unchecked until real assets exist (none do — see the QA cert
      audit task below, still open).
- [x] Asset-budget integration: signature library counts against per- fighter
      animation / audio / VFX budgets (cross-ref §70.1).
- [ ] Signature library audit in QA cert pass: every roster fighter verified to
      have every item on the checklist authored. — re-marked [ ] 2026-06-12: no
      QA cert pass has run and no authored assets exist to audit; updated
      2026-06-12: checklists now exist for all 60 roster fighters, but their
      "Asset authoring" sections are honestly unchecked pending real assets.

### 72.6 Per-fighter expanded signature library

- [x] **Per-fighter pre-match staredown**: 5-8s Tekken-style face-off animation
      played before round-1 intro; per-matchup variant possible for principals.
- [x] **Per-fighter waiting-room idle**: distinct AFK animation in Battle Hub /
      lobby / online queue (different from in-match idle).
- [x] **Per-fighter walk speed / cadence personality**: heavyweight slow- heavy
      walk, ninja-glide walk, drunken-stagger walk, fluid martial- arts walk —
      distinct per fighter.
- [x] **Per-throw-angle distinct animations**: front-throw / back-throw /
      side-throw / air-throw / command-throw / super-throw all visually
      different per fighter (not mirror-flipped).
- [x] **Per-knockdown-orientation variation**: face-down / face-up / side- prone
      / fetal / spread-eagle — different fighters knock down in different
      orientations affecting wake-up animation; oki theory uses orientation tag.
- [x] **Wakeup-from-juggle distinct from wakeup-from-floor**: post-juggle
      recovery has air-recovery + landing-impact animation different from
      ground-knockdown rise.
- [x] **Per-fighter weapon-idle interaction** (SC weapon-twirl, MK ice- glove
      flex, fan-snap, lance-tap): subtle idle gesture using equipped weapon.
- [x] **Per-fighter pre-mortem voice line on KO**: short last-gasp vocal
      authored per fighter; played in slow-mo of KO last hit.
- [x] **Per-fighter taunt-specific damage scaling**: per-taunt offensive/
      defensive flag — some taunts (offensive) deal small chip damage at range;
      some (defensive) recover small meter; per-ruleset eligibility.

### 72.7 Per-fighter HUD theme tied to faction

- [x] **Per-faction HUD theme** (cross-ref §22.5 + §46.11): each faction (Lin
      Kuei / Black Dragon / Special Forces / Brotherhood of Shadow / White Lotus
      / etc.) has a signature HUD palette + meter glyph style + corner-ornament
      motif (e.g., Lin Kuei frost-blue with ice- crystal corners; Black Dragon
      green with skull-and-crossbones).
- [x] **Per-fighter HUD theme override**: each fighter may override faction
      default with personal HUD theme; tournament mode locks to neutral theme.
- [x] **HUD theme unlocks** per fighter Mastery progression (cross-ref §61.5):
      Mastery 5 unlocks basic theme; Mastery 15 alt palette; Mastery 25
      cinematic-detail theme; Mastery 30 Mythic signature theme (cross-ref
      §16.9).
- [x] **Per-rank-tier HUD flair**: above Diamond rank, HUD gains subtle animated
      accents (cross-ref §75.2).

### 72.8 Per-fighter ASMR / micro-foley

- [x] **Per-fighter micro-foley library**: skin slap on hit / leather creak on
      stance shift / metal stress when armored / cloth-rustle on movement /
      breath / heartbeat at low HP — authored per fighter and per costume
      material.
- [x] **Per-output-device micro-foley mix** (cross-ref §43.5.1): Headphones
      profile emphasizes micro-foley; Soundbar profile attenuates.

Fighter signature library (§72) implemented with
`FV2FighterSignatureLibraryCatalog` in `V2Combat`, generated one-to-one from
`UV2LaunchRosterLibrary::BuildDefaultLaunchRosterCatalog`, covering animation,
audio, VFX, stage reactions, HUD themes, checklist authoring, budget
integration, and QA cert audit gates for every launch roster fighter. Evidence:
`FighterSignatureLibrary_V2_Contract.json`,
`V2/balance/fighters/Asha/signature-checklist.md` (one checklist per roster
fighter at the same path shape), `check-v2-fighter-signature-library.py`,
`V2.Combat.FighterSignatureLibrary.AssetContract`, and `V2.Combat.Module`.

---

## 73. Per-Character Side Stories, Arcade Endings, Story Theater

### 73.1 Per-character Arcade ending

- [x] **Per-fighter Arcade ending cinematic**: 60s cinematic + 5 illustrated
      panels + 30s narration per fighter (cross-ref §19); unlocked on first
      Arcade completion with that fighter.
- [x] **Ending Gallery** (Krypt §22 unlock or Arcade Vault sub-mode): revisit
      any unlocked ending; replay narration; share screenshot.
- [x] Per-fighter ending canonicity (Light / Dark / Path-Three) tagged for Story
      (§20) branch reference.

### 73.2 Per-character Side Story (Tekken 7-style Character Episodes)

- [x] **Per-fighter Side Story**: 1-2-hour standalone cinematic + 3-5 fight
      chapter per roster character, with a distinct premise and ending.
      Stand-alone (not part of main Story).
- [x] Premise variety: revenge arc, redemption arc, comic arc, training arc,
      mystery arc, romance subplot, betrayal arc, mentor arc.
- [x] Side Story completion grants: Character Mastery XP (§61.5), alt- costume
      unlock, lore-page entries, Side-Story Gallery entry, faction-quest XP if
      aligned.
- [x] **Cross-character Side Story crossover events**: 4-6 fighters share an
      interconnected mini-arc with branching POVs.

### 73.3 Story Theater (replay any cinematic)

- [x] **Story Theater** mode: revisit any unlocked Story-mode cinematic /
      Character Episode / Side Story / Arcade ending; skip/pause/loop; MP4
      export.
- [x] Per-cinematic alt-language audio + subtitle overrides for accessibility.
- [x] Director's commentary track (where authored) toggled on/off.

### 73.4 Branching narrative chooser UI

- [x] **Branch tree visualization** for Story mode (§20): post-completion, view
      the full branching graph, highlight chosen path, see un- explored
      branches.
- [x] **Branch retry**: jump back to any branch point + take alternate choice;
      saves remain separated by branch.
- [x] **New-Game+ rewards** for completing all branches.

### 73.5 Per-fighter Title Progression

- [x] **Title unlock tree** per fighter: equipped on Profile Card (§47.2) and
      visible to opponents; e.g., "Lin Kuei Apprentice" → "Lin Kuei Sworn" →
      "Lin Kuei Grandmaster"; unlock conditions documented (combat milestones,
      mastery levels, Side Story completion, faction quests).
- [x] Titles per ruleset (e.g., "MK Survivor", "SF World Tour Master", "Tekken
      Grand Master", "WWE Hall of Famer", "UFC GOAT", "SC Soulcaliber Champion",
      "DJ Crew Captain").

### 73.6 Behind-the-Scenes / Mocap Gallery

- [x] **Mocap gallery** (post-credits unlock): photos / video clips of mocap
      sessions, voice-actor casting, motion capture suit moments, stunt-double
      captures. Cross-ref §77 production.
- [x] **Concept art gallery**: per-fighter / per-stage concept art browsable in
      a gallery (Krypt unlock or main-menu Vault).

Per-character narrative catalog (§73) implemented with
`FV2PerCharacterNarrativeCatalog` in `V2Modes`, generated from `LaunchRoster.V2`
so every launch fighter has a 60s Arcade ending with five panels and 30s
narration, a 1-2 hour standalone Side Story, Story Theater entries,
opponent-visible title progression, and concept art coverage. Evidence:
`PerCharacterNarrative_V2_Contract.json`, `check-v2-per-character-narrative.py`,
`V2.Modes.PerCharacterNarrative.AssetContract`, and `V2.Modes.Module`.

---

## 74. Match-Flow Mode Variants

V2 ships the genre's canonical match-flow variants as explicit modes rather than
burying them as toggles.

### 74.1 Versus & Versus CPU

- [x] **Local Versus (1P vs 2P)**: standard 1v1 local couch match with ruleset +
      stipulation pickers.
- [x] **Versus CPU**: 1P vs AI difficulty-pickable bot; honors per-fighter AI
      personality (§3.1).
- [x] **CPU vs CPU**: demo mode — show two AI bots fight; used for attract-mode
      loops.
- [x] **Hot-Seat 1P**: single controller, alternating between sides for casual
      play.
- [x] **Couch Co-op** in supporting modes (Tekken Force §25, Devil Within §26,
      Story §20 where applicable).
- [x] **LAN play** for local 2P over network (cross-ref §66.2).

### 74.2 Time Attack

- [x] **Time Attack**: fastest completion of arcade ladder per fighter per
      ruleset; per-fighter / per-ruleset / global leaderboards.
- [x] Sub-modes: ladder Time Attack, Tower Time Attack, Survivor Time Attack,
      Mission Time Attack.
- [x] Per-completion replay auto-saved with input stream for verification.

### 74.3 Score Attack

- [x] **Score Attack**: most points in fixed time / fixed ladder length; scoring
      rules per ruleset (MK combo + finisher emphasis, SF damage + Drive
      efficiency, Tekken juggle complexity, UFC submission cleanliness, WWE
      crowd reaction, SC ring-out + style, DJ Blazin' + hotspot).
- [x] Per-fighter / per-ruleset / global leaderboards.

### 74.4 Wager Match

- [x] **Wager Match** (DOA 4 / SF6 style): stake in-game Fighter Coins (§23.5)
      or cosmetics for casual stakes; ruleset-eligibility flag (ranked
      ineligible). One-time agreement gate before stakes deduct.
- [x] Wager match history visible in profile (§47.2-47.3).
- [x] Cosmetic-wager limits to prevent abuse + bait-and-switch.

### 74.5 Friendly / Dare Match

- [x] **Friendly Match** with set best-of-N rules; saved match record;
      auto-rematch button after each match.
- [x] **Dare Match** (friend-challenge): challenge a friend with custom
      stipulation; friend sees challenge notification; accept / decline /
      counter-offer flow.

### 74.6 Handicap Match

- [x] **Handicap Match**: 1 fighter vs 2 fighters, 2v3, etc. (asymmetric counts
      up to 4 total). Damage-multiplier tuning to keep balanced.
- [x] **HP handicap**: per-side HP multiplier (e.g., 1.5× / 0.75×) for casual
      stake matches.
- [x] **Meter handicap**: starting meter advantage per side.

### 74.7 First Blood Mode

- [x] **First Blood Mode**: one decisive hit ends the round (or one knockdown
      depending on ruleset variant); ultra-short rounds with tournament-style
      best-of-5 / 7.
- [x] Per-ruleset first-blood definition (MK first-fatal-hit, SF first-
      counter-hit, Tekken first-knockdown, UFC first-takedown, WWE first-
      finisher, SC first-ring-out, DJ first-environment-finisher).

### 74.8 Boss Battle Mode

- [x] **Boss Battle** (extended): single-match fight against a curated boss
      build (super-armor / unusual move-set / cinematic intro / cinematic
      camera). Per-fighter boss authored as a unique encounter.
- [x] **Boss Rush** (cross-ref §69.5): chain N boss fights; HP carry-over
      option; leaderboard.

### 74.9 Sparring Mode

- [x] **Sparring Mode**: damage-free or low-damage casual play for practicing
      combos against a human opponent who's also experimenting. Useful for
      collaborative lab work (cross-ref §60.7 multiplayer training).

### 74.10 Iron Man / Best-of-N

- [x] **Iron Man Match**: fixed-time round (e.g., 30 minutes); accumulate most
      KOs (fighter) or pinfalls (WWE) or KOs (UFC) within time. WWE ruleset
      already has Iron Man as a stipulation (§11.5) — this is the
      ruleset-agnostic generalization.
- [x] **Best-of-N online tournament dare**: explicit set-format match (Bo3 / Bo5
      / Bo7 / Bo11 / Bo15) with score-card UI and per-match-rest pause
      configurable.

Match-flow mode variants (§74) implemented with `FV2MatchFlowModeVariantCatalog`
in `V2Modes`, covering all 18 explicit variants; Time Attack and Score Attack
per-fighter / per-ruleset / global leaderboards; wager policy gates and history;
Friendly / Dare challenge flow; handicap, First Blood, Boss Battle / Boss Rush,
Sparring, and Iron Man / Best-of-N configs. Evidence:
`MatchFlowModeVariants_V2_Contract.json`,
`check-v2-match-flow-mode-variants.py`,
`V2.Modes.MatchFlowModeVariants.AssetContract`, and `V2.Modes.Module`.

---

## 75. Ranked Season Architecture

### 75.1 Season structure

- [x] **Season length**: 90 days default; per-region overlap with global cup
      events.
- [x] **Placement matches**: 10 at season start to assign initial visible rank
      from prior-season MMR seed (cross-ref §48.9).
- [x] **Off-season** 2-week tournament cycle with sandboxed MMR (cross-ref
      §48.11).
- [x] **Season rewards**: cosmetics, faction XP, profile card titles (§47.2),
      exclusive emotes per top-rank tier.

### 75.2 MMR / Rank mapping

- [x] **Hidden MMR**: Glicko2 / TrueSkill2 (cross-ref §48.9) — never shown to
      player.
- [x] **Visible Rank tiers**: Bronze 1-3 / Silver 1-3 / Gold 1-3 / Platinum 1-3
      / Diamond 1-3 / Master / Grandmaster / Legend (top 100 globally).
- [x] **Hysteresis** to avoid rapid promotion/demotion oscillation; min N
      matches required for rank change.
- [x] **Smurf detection** (cross-ref §49) prevents pro-skill new accounts from
      farming low ranks.

### 75.3 Decay / inactivity

- [x] **Rank decay** above Master tier on 14-day inactivity (cross-ref §48.10);
      reactivation grants placement match.
- [x] **Provisional rank** for new accounts: 25 provisional matches before
      ranked icon publicly visible (cross-ref §48.10).
- [x] **Retention bonus** for consistent weekly play.

### 75.4 Per-region & cross-platform alignment

- [x] **Per-region ranked seasons** with overlapping global cup events
      (cross-ref §48.11).
- [x] **Region-locked seasonal cosmetic rewards** (cross-ref §48.11).
- [x] **Cross-platform unified MMR pool** (cross-ref §48.12): same MMR pool
      across PC/PS5/XSX/Switch2; cross-platform leaderboard with platform-icon
      labels.

### 75.5 Crown / Pro Tour overlay

- [x] **Season-long Crown ranking** (cross-ref §51.5) layered on top of
      MMR/Rank: tournament points + ranked points + invitational-event points.
- [x] **EVO badge program** partnership (cross-ref §51.5) feeds Crown points.
- [x] **Year-end Grand Final event** invites top-Crown players.

### 75.6 Anti-throw integrity

- [x] **Sandbagging / throwing detection** (cross-ref §48.9 + §49) flags
      anomalous loss streaks against lower-MMR opponents; auto-derank.
- [x] **Match acceptance / decline rate** tracked; chronic decliners
      queue-penalized.
- [x] **Coordinated-throw / collusion detection** in tournament play (cross-ref
      §51).

Implemented ranked season architecture with 90-day seasons, 10 placement
matches, sandboxed two-week off-season cycles, full Bronze 1-3 through Legend
visible rank mapping, hidden TrueSkill2/Glicko2 MMR, 25-match provisional icon
gating, above-Master inactivity decay, per-region global-cup overlap,
region-locked cosmetics, cross-platform unified MMR, Crown/EVO/Grand Final
overlay, and anti-throw integrity. Evidence:
`FV2RankedSeasonArchitectureCatalog`,
`RankedSeasonArchitecture_V2_Contract.json`,
`check-v2-ranked-season-architecture.py`, and
`V2.Online.RankedSeasonArchitecture.AssetContract`.

---

## 76. Companion App, Public API, In-Game Wiki, Glossary, Roadmap

V2 extends beyond the game client.

### 76.1 Companion mobile app (V2 Companion)

- [x] **Companion app** for iOS / Android / web: browse move lists with animated
      input glyphs and frame data; per-fighter signature library (§72) preview;
      replay viewer (low-fidelity stream); profile / match history / friends /
      party invites; cosmetic store browse + wishlist; Battle Pass tier check.
- [x] **Second-screen mode** during a live match: companion app displays frame
      data and opponent move list while you play.
- [x] **Coach mode** companion: send annotations to a player via app (cross-ref
      §51.7).
- [x] **Push notifications** for tournament invites, friend matches, party
      invites, Twitch Drops earned.

### 76.2 Public API

- [x] **Public REST API** for player stats lookup (player rank, match history,
      win-rate per fighter, per-stage stats, faction info, Crown points).
      Read-only; account-public-flag gated.
- [x] **Public REST API for tournaments** (cross-ref §51.5): bracket creation,
      result reporting, leaderboard ingest.
- [x] **Webhooks** for tournament organizers (match-end push).
- [x] **API rate limiting** + auth token system (developer portal).
- [x] **Public Discord bot** template open-sourced; example queries: "/v2-rank
      @user", "/v2-friend-list", "/v2-tournament-bracket".

### 76.3 In-Game Wiki / Guide

- [x] **In-game Wiki** browsable from main menu / pause menu: per-ruleset
      mechanic explanations, per-fighter strategy guides, glossary of genre
      terminology (hitstop, hitlag, kara cancel, OS, shimmy, frame trap, parry,
      ukemi, etc.), pinned community tutorials.
- [x] **Glossary** searchable by term; each term links to relevant trainer mode
      (cross-ref §60.9).
- [x] **Mechanics tutorial video embeds** (curated YouTube content surfaced from
      creator partnership pipeline, §52.9).
- [x] **Cheat sheet** export per-fighter (printable PDF) of move list + frame
      data + bnb combos + matchup-specific notes.
- [x] **Glossary of community slang**: DI (Drive Impact), FB (Fatal Blow), KBD
      (Korean Backdash), iWS (Instant While Standing), TK (Tiger Knee), OS
      (Option Select), DP (Dragon Punch motion), 360 / 720 (command-throw
      motion), shimmy, fuzzy guard, frame trap, plinking, negative-edge,
      just-frame, parry, ukemi, oki, vortex, setplay, hitconfirm, whiff punish,
      crush counter, hitstop, hitlag, sakkin, Roman Cancel, kara cancel, dash
      cancel, Heat Engager, Rage Drive, Power Crush, Drive Rush, Drive Parry,
      Burnout, Soul Charge, Guard Impact, Reversal Edge, Critical Edge, Critical
      Finish, Lethal Hit, Blazin', Hype, Krushing Blow, X-Ray, Fatal Blow,
      Brutality, Mercy, Friendship, Babality — searchable with cross-links to
      relevant trainer mode (§60.9) and per-ruleset eligibility (§9.1.1).
- [x] **Per-mechanic deep-dive wiki articles**: 1500-3000 word articles per
      major mechanic with diagrams + video embeds + per-fighter example case
      studies; pinned editorial team curates.
- [x] **Per-stage walkthrough** wiki page with hazard timing + hotspot
      locations + ring-out edges.
- [x] **Per-mode FAQ** for newcomers (when to use ranked vs casual; how ranked
      decay works; what a Wager Match is; etc.).
- [x] **Per-difficulty CPU AI behavior** documented: Beginner / Easy / Medium /
      Hard / Very Hard / Master — published reaction frames, anti-air rates,
      throw-tech rates, combo-execution accuracy.

### 76.4 In-Game Roadmap

- [x] **Roadmap widget** in main menu (cross-ref §52.10): season schedule,
      confirmed / planned / exploratory tier flags, opt-in email digest.
- [x] **Patch-notes archive** browsable in-game per version.
- [x] **Beta / PTB branch** opt-in toggle for early-access players.

### 76.5 Developer documentation portal

- [x] Public developer portal at `apps/v2/web/dev-portal/`: API reference,
      tournament-tool API, broadcast SDK, modding policy (PC), code-of- conduct,
      terms of service, privacy policy.
- [x] Per-region legal page localization (cross-ref §54).

### 76.6 Modding policy (PC)

- [x] **Modding policy** documented: client-side cosmetic mods allowed offline;
      online play with mods disabled; anti-cheat detection of gameplay-mod
      tampering = ranked ban.
- [x] **Steam Workshop** integration for cosmetic mods (optional; gated to PC
      build).
- [x] **Moderated mod gallery** for trusted authors.

### 76.7 V2 Companion mobile micro-games

- [x] **Mobile micro-games** in the V2 Companion app (cross-ref §76.1):
      bite-sized 30-60s mini-games playable on phone while waiting in
      matchmaking queue + during commute. Examples:
  - **Combo Tap Trial**: tap rhythm to execute a combo string.
  - **Drift Steer**: tilt-phone drift challenge.
  - **Trivia Battle**: per-fighter / per-vehicle / per-track trivia.
  - **Daily Puzzle Kombat** (cross-ref §22.7) — single-fight puzzle.
  - **Mini Pit Crew**: solo pit-crew minigame practice.
- [x] **Per-micro-game daily reward**: small currency / cosmetic / Battle Pass
      XP credit (rewards apply to main game).
- [x] **Anti-cheat for micro-games**: per-result HMAC signing + server
      validation (cross-ref §49).

### 76.8 V2 Web Hub (in-browser companion)

- [x] **V2 Web Hub** at `apps/v2/web/hub/`: in-browser companion with
      account-bound stats / friends / store / wishlist / leaderboard / replay
      search / community gallery browse.
- [x] **Web-Hub-only micro-games** parallel to mobile.
- [x] **Web-Hub roadmap & news feed** (cross-ref §83.8 + §85.4).
- [x] **Web-Hub commerce**: cosmetic shop accessible via web (where platform
      payment rules permit; cross-ref §86.5 refund policy).

### 76.9 Second-screen mode

- [x] **Phone-as-second-screen** during a live match (cross-ref §76.1):
      companion app displays opponent's frame data / move list / signature
      moves; cosmetic-only, no gameplay effect; per-match opt-in.
- [x] **Apple Watch / Wear OS** integration: per-day stat summary + notification
      of friend match start + Battle Pass tier progress glance.

### 76.10 Cross-game features (V2-internal)

- [x] **V2-internal cross-feature linking**: per-fighter Mastery (§61.5)
      progress visible from racing modes; per-vehicle ownership visible from
      fighting modes; per-account Account Level (§84.2) accumulates both.

Implemented §76 companion ecosystem end to end. Evidence:
`apps/oshun/mobile/v2/companionAppModel.ts`,
`apps/oshun/web/api/v2/public-api.ts`, `libs/openapi/v2/companion.yaml`,
`apps/oshun/web/src/v2/sophia-rag.ts`, `apps/v2/web/dev-portal/`,
`apps/v2/web/hub/`,
`V2/ue/Content/V2/Companion/CompanionPublicApiWikiRoadmap_V2_Contract.json`, and
`V2/ue/Tools/check-v2-companion-public-api-wiki-roadmap.py`.

---

## 77. Production: Studio Operations, Mocap, VO Casting, Composer, IP / NIL / Licensing, Stunt

V2 is a multi-year, multi-studio production. This section captures the
production capabilities and rights infrastructure that ship-blocking the launch.

### 77.1 Studio organization

- [x] **Studio org chart** documented at `V2/docs/production/org.md`: design,
      engineering, art, animation, audio, narrative, VO, QA, release, ops,
      marketing, legal, accessibility, localization, esports ops. Per-discipline
      headcount, reporting lines, RACI per major feature area.
- [ ] **External studio integration**: per-discipline outsource partners
      (animation house, mocap studio, VFX house, audio post, localization
      vendors) with master service agreements, asset-delivery SLAs, IP-
      assignment clauses. — re-marked [~] 2026-06-12: requires executed
      third-party MSAs; external contracts cannot be evidenced in-repo.
      `blocked:external`
- [ ] **Per-fighter dev team rotation**: principal characters assigned a
      dedicated mini-team (animator + audio + designer); mid-roster shared
      across pool team. — re-marked [~] 2026-06-12: real-world staffing
      assignment; no team exists to assign. `blocked:human`

### 77.2 Mocap studio operations

- [x] **Mocap studio booking calendar** at
      `V2/docs/production/mocap-calendar.md`: per-fighter mocap session
      schedule, stunt-double casting, prop / weapon prep, safety briefing,
      on-set audio capture where relevant.
- [ ] **Stunt performer roster**: per-fighter primary + backup performer, union
      (SAG-AFTRA / equivalent) compliance, insurance coverage, on- set medic +
      safety protocols. — re-marked [~] 2026-06-12: union contracts, insurance,
      and casting are external operations; cannot be evidenced in-repo.
      `blocked:external`
- [ ] **Mocap data pipeline**: Vicon / OptiTrack capture →
      `@aja/motion-pipeline-sdk` cleanup → `@aja/neural-retargeting` V2-skeleton
      retarget → curve/keyframe editing → import to engine. — re-marked [~]
      2026-06-12: requires real capture hardware and sessions; no captured data
      or imported animation exists in-repo. `blocked:hardware`
- [ ] **Mocap session footage archive**: video reference of each session
      preserved for behind-the-scenes gallery (§73.6) and for animator reference
      downstream. — re-marked [~] 2026-06-12: no mocap sessions have occurred;
      nothing to archive. `blocked:hardware`

### 77.3 Voice-actor casting & VO production

- [ ] **VO casting per fighter per launch locale**: ≥ 8 locales at launch with
      per-fighter casting (cross-ref §54). — re-marked [~] 2026-06-12: external
      talent casting; cannot be evidenced in-repo. `blocked:external`
- [ ] **VO scripts** with per-fighter dialogue spreadsheet (cross-ref §63.9)
      including pre-fight banter per-matchup, win/loss/draw quotes, mid-fight
      barks, story-mode dialog, lore-page narration. — re-marked [~] 2026-06-12:
      no per-fighter dialogue spreadsheets exist in-repo; authoring is pending.
      _2026-09-18: writing the dialogue sheets is work an agent can do; it waits
      with the rest of this section for the vertical slice of section 0._
- [ ] **VO recording booth schedule** per actor per locale; pickup-session
      budget; iterative-pass cycles. — re-marked [~] 2026-06-12: real-world
      studio scheduling; no actors or sessions exist. `blocked:human`
- [ ] **VO director** assigned per locale; performance notes archived for
      downstream consistency. — re-marked [~] 2026-06-12: real-world hiring;
      cannot be evidenced in-repo. `blocked:human`
- [ ] **VO release pipeline**: per-locale bank versioned; hot-swap on patch
      where actor available; substitute actor protocol if original unavailable.
      — re-marked [~] 2026-06-12: no VO banks exist to version or release.
      `blocked:corpus`

### 77.4 Music composer & soundtrack

- [ ] **Lead composer** assigned for V2's launch OST (≥ 60 unique tracks across
      all rulesets + stages + entrances + finishers); per-ruleset sub-composer
      for ruleset-flavored music. — re-marked [~] 2026-06-12: external hiring;
      no composed tracks exist in-repo. `blocked:human`
- [ ] **Per-fighter signature theme** authored by per-character composer pairing
      (cross-ref §72.2). — re-marked [~] 2026-06-12: no music assets exist
      in-repo; composer pairing is an external engagement. `blocked:external`
- [ ] **License-cleared library** for DJ ruleset hip-hop tracks: original
      compositions + licensed artist features (per-artist contract). — re-marked
      [~] 2026-06-12: per-artist licensing is an external contract; no cleared
      tracks exist. `blocked:external`
- [ ] **DMCA-safe music library** (cross-ref §43.8) authored separately for
      streamer mode. — re-marked [~] 2026-06-12: no audio assets exist in-repo.
      `blocked:corpus`
- [ ] **Per-locale music remix** option where culturally appropriate (e.g.,
      Japan-localized remix of MK theme). — re-marked [~] 2026-06-12: no music
      assets exist to remix. `blocked:corpus`
- [ ] **Soundtrack release** as a separate consumer product (Founders Edition
      vinyl, Spotify / Apple Music digital release). — re-marked [~] 2026-06-12:
      external consumer-product release; nothing has been released.
      `blocked:release`

### 77.5 Character IP / NIL / Likeness

- [ ] **Original character IP** clearance: per-character trademark filing,
      copyright registration on design and name. — re-marked [~] 2026-06-12:
      trademark/copyright filings are external legal actions; none have been
      filed. `blocked:governance`
- [ ] **Licensed guest character contracts**: per-guest IP-holder license with
      term, royalty, removal-clause (for online suspension / controversy /
      contract termination). — re-marked [~] 2026-06-12: requires executed
      third-party licenses; none exist (see launch-roster fail-closed rights
      state). `blocked:external`
- [ ] **NIL (Name, Image, Likeness) rights** for licensed real-world fighters
      (UFC roster, WWE talents): per-fighter NIL agreement with term, scope,
      residuals, hide-on-request clause. — re-marked [~] 2026-06-12: external
      NIL agreements; none executed. `blocked:external`
- [ ] **Stunt performer credit & residuals** per per-character mocap capture;
      on-screen credit option. — re-marked [~] 2026-06-12: no mocap captures or
      performer contracts exist. `blocked:external`
- [ ] **Per-jurisdiction publicity rights** review (different rules for US / EU
      / UK / Japan / Korea). — re-marked [~] 2026-06-12: external legal review;
      cannot be evidenced in-repo. `blocked:governance`
- [ ] **Likeness opt-out** mechanism for retired / deceased athletes (estate
      management). — re-marked [~] 2026-06-12: depends on executed NIL
      agreements that do not exist. `blocked:external`

### 77.6 Music & SFX licensing

- [ ] **Music licensing** per-track contract with mechanical / sync / master
      rights; rights cleared for game-use + trailer + streamer- visible. —
      re-marked [~] 2026-06-12: per-track licensing is an external contract; no
      tracks or licenses exist. `blocked:external`
- [ ] **Sample-clearance** for DJ ruleset hip-hop tracks containing samples. —
      re-marked [~] 2026-06-12: external clearance; no tracks exist.
      `blocked:external`
- [ ] **SFX library licensing**: commercial-use sound libraries with clear
      license terms (no royalty-bearing libraries in shipping build). —
      re-marked [~] 2026-06-12: external licensing; no sound libraries exist
      in-repo. `blocked:external`

### 77.7 Brand partnership & product placement

- [x] **In-game brand placement** policy: per-partner brand integration in World
      Tour / Def Jam Story / MyCAREER / Battle Hub (e.g., energy drink
      billboard, sneaker brand, headphone brand) with disclosure requirements.
- [ ] **Per-partner contract** with usage-rights term, exclusivity terms, cap on
      per-region visibility. — re-marked [~] 2026-06-12: external brand
      contracts; none executed. `blocked:external`

### 77.8 Localization talent

- [ ] **Per-locale lead translator + cultural reviewer** assignment for every
      launch locale (cross-ref §54). — re-marked [~] 2026-06-12: real-world
      staffing; cannot be evidenced in-repo. `blocked:human`
- [ ] **Per-locale VO casting director** with per-actor contract terms. —
      re-marked [~] 2026-06-12: external hiring and contracts; none exist.
      `blocked:human`

### 77.9 Marketing & PR talent

- [ ] **Marketing creative director** owning launch trailer + Roster Reveal
      Trailer pipeline (cross-ref §52.9). — re-marked [~] 2026-06-12: real-world
      hiring; no trailers exist. `blocked:human`
- [ ] **PR plan** with embargo schedule, influencer access (cross-ref §52.10),
      press-tour booking, esports kickoff. — re-marked [~] 2026-06-12: external
      PR operations (bookings, embargoes); cannot be evidenced in-repo.
      `blocked:human`
- [ ] **Community manager** team per major region. — re-marked [~] 2026-06-12:
      real-world staffing; cannot be evidenced in-repo. `blocked:human`

### 77.10 Pre-production milestones

- [ ] **Greenlight milestone** with vertical-slice prototype. — re-marked [ ]
      2026-06-12: no vertical-slice or any playable build exists.
- [ ] **Alpha milestone** with full roster + core modes playable. — re-marked [
      ] 2026-06-12: nothing is playable; no build artifacts exist.
- [ ] **Beta milestone** with feature-complete content + cert-prep. — re-marked
      [ ] 2026-06-12: no content or builds exist; cert-prep has not started.
- [ ] **Gold master milestone** with day-one patch staged. — re-marked [ ]
      2026-06-12: no gold master or patch artifacts exist.
- [x] **Post-launch first-30-day plan** documented (cross-ref §52.8). —
      re-marked [ ] 2026-06-12: no first-30-day plan document found in V2/docs;
      completed 2026-06-12: plan authored at
      `V2/docs/live-service/post-launch-first-30-days.md` (phased ops posture,
      emergency hotfix classes with deadlines, hotfix rota, daily triage
      cadence, balance freeze + day-14 review + day-30 PTB-validated patch,
      events calendar, retention checkpoints, exit-gate criteria).

### 77.11 Per-discipline leadership

- [ ] **Audio Director** owning soundtrack, voice direction, foley, mix; reports
      to studio creative director. — re-marked [~] 2026-06-12: real-world
      hiring; cannot be evidenced in-repo. `blocked:human`
- [ ] **Music Supervisor** owning per-track licensing, sample clearance,
      DMCA-safe library, soundtrack consumer release. — re-marked [~]
      2026-06-12: real-world hiring; cannot be evidenced in-repo.
      `blocked:human`
- [ ] **Audio Post-Production Studio** for soundtrack mastering, Atmos /
      Tempest3D / Dolby Vision encode. — re-marked [~] 2026-06-12: external
      studio engagement; cannot be evidenced in-repo. `blocked:external`
- [ ] **Casting Director per locale** with per-actor relationship. — re-marked
      [~] 2026-06-12: real-world hiring; cannot be evidenced in-repo.
      `blocked:human`
- [ ] **Animation Lead per discipline**: Combat Animation Lead, Cinematic
      Animation Lead, Traversal Animation Lead, Facial Animation Lead. —
      re-marked [~] 2026-06-12: real-world staffing; cannot be evidenced
      in-repo. `blocked:human`
- [ ] **Art Director per ruleset**: MK Art Director, SF Art Director, Tekken Art
      Director, SC Art Director, WWE Art Director, UFC Art Director, DJ Art
      Director — each owns the visual identity of that ruleset's content (stage
      palette, finisher style, VFX flavor). — re-marked [~] 2026-06-12:
      real-world staffing; the org-chart doc names roles, not actual hires.
      `blocked:human`
- [ ] **Sound Designer Lead per ruleset** with parallel ruleset-flavor
      ownership. — re-marked [~] 2026-06-12: real-world staffing; cannot be
      evidenced in-repo. `blocked:human`
- [ ] **QA Lead per discipline**: Combat QA, Online / Net QA, Cert / Compliance
      QA, Accessibility QA, Localization QA, Esports QA, Performance QA. —
      re-marked [~] 2026-06-12: real-world staffing; cannot be evidenced
      in-repo. `blocked:human`
- [ ] **Community Manager per major region**: NA / EU / JP / KR / LATAM / SEA /
      India / MENA. — re-marked [~] 2026-06-12: real-world staffing; cannot be
      evidenced in-repo. `blocked:human`

### 77.12 Mocap stage logistics

- [ ] **Mocap stage rental contracts** with primary + backup studios; annual
      capacity reservation for principal-character shoots. — re-marked [~]
      2026-06-12: external rental contracts; none executed. `blocked:external`
- [ ] **On-stage stunt coordinator** owning fight-choreography per fighter;
      stunt-double pairing per principal. — re-marked [~] 2026-06-12: real-world
      hiring; no shoots exist. `blocked:human`
- [ ] **Performance-capture suit cleaning + maintenance schedule**. — re-marked
      [~] 2026-06-12: physical studio operations; no equipment exists.
      `blocked:hardware`
- [ ] **Per-shoot equipment manifest**: marker count, camera count, optical
      array calibration, prop list, weapon-replica list (rubber-only), pyro /
      squib safety (cinematic-only). — re-marked [~] 2026-06-12: no shoots have
      occurred; manifests are per-shoot artifacts. `blocked:hardware`
- [ ] **Mocap data retention**: raw capture data archived per shoot with take
      metadata + actor consent log. — re-marked [~] 2026-06-12: no capture data
      exists to retain. `blocked:hardware`

### 77.13 Per-character lead designer / champion

- [ ] **Per-fighter Champion**: assigned designer-owner per roster slot with
      end-to-end accountability for that fighter's design / balance / animation
      / audio / cinematic / lore / signature library across the launch + DLC
      lifecycle. — re-marked [~] 2026-06-12: real-world staffing assignment;
      cannot be evidenced in-repo. `blocked:human`
- [ ] **Champion handoff** documentation when designers rotate; per- fighter
      design rationale archived. — re-marked [~] 2026-06-12: depends on real
      designer assignments that do not exist. `blocked:human`

### 77.14 VO talent backup plan

- [ ] **Per-fighter VO actor backup**: alternate actor identified per fighter
      per locale; contractual hot-swap allowed for emergency replacement
      (illness / scheduling); audio-direction notes archived so replacement
      performance matches original. — re-marked [~] 2026-06-12: external casting
      and contracts; no actors are engaged. `blocked:external`
- [ ] **Per-VO performance reference clip** maintained for downstream
      consistency across pickup sessions. — re-marked [~] 2026-06-12: no VO
      recordings exist. `blocked:corpus`
- [ ] **Actor unavailability / controversy protocol**: documented plan for
      swapping out an actor mid-production if necessary; per-region legal review
      on likeness-rights termination. — re-marked [~] 2026-06-12: per-region
      legal review is an external action; no actor engagements exist.
      `blocked:governance`

### 77.15 Mocap disaster-recovery plan

- [ ] **Primary + backup mocap studio** contracts (cross-ref §77.12) with
      6-month notice / hot-failover. — re-marked [~] 2026-06-12: external studio
      contracts; none executed. `blocked:external`
- [ ] **Per-shoot data backup**: raw capture data backed up to two independent
      off-site storage providers + immutable per-shoot archive in cold storage.
      — re-marked [~] 2026-06-12: no capture data or storage contracts exist.
      `blocked:external`
- [ ] **Mocap session reschedule policy**: if primary studio loses capacity
      (fire / lease termination / equipment failure), failover to backup;
      per-shoot SLA documented. — re-marked [~] 2026-06-12: depends on studio
      contracts that do not exist. `blocked:external`

### 77.16 Cancellation & E&O insurance

- [ ] **Cancellation insurance** for major launch milestones (alpha / beta /
      gold) covering force-majeure / pandemic / studio shutdown. — re-marked [~]
      2026-06-12: external insurance policy; none purchased. `blocked:external`
- [ ] **Errors-and-Omissions insurance** for content (IP infringement claims,
      defamation, privacy violations). — re-marked [~] 2026-06-12: external
      insurance policy; none purchased. `blocked:external`
- [ ] **Cyber insurance** for backend breach / data-loss / extortion. —
      re-marked [~] 2026-06-12: external insurance policy; none purchased.
      `blocked:external`
- [ ] **Per-shoot insurance** for mocap stunts (cross-ref §77.2). — re-marked
      [~] 2026-06-12: external insurance; no shoots exist. `blocked:external`

§77 in-repo artifacts are planning documents and machine-validated contract
schemas only. No external agreement, hire, booking, recording session, milestone
build, or insurance policy has actually been executed — those bullets are
re-marked `[~]`/`[ ]` above (2026-06-12) pending real-world execution. Evidence
for the planning artifacts: `V2/docs/production/org.md`,
`V2/docs/production/mocap-calendar.md`, `V2/docs/production/vo-and-audio.md`,
`V2/docs/production/rights-licensing.md`,
`V2/docs/production/per-fighter-production-coverage.csv`,
`V2/ue/Content/V2/Production/ProductionOps_V2_Contract.json`, and
`V2/ue/Tools/check-v2-production-ops.py`.

---

## 78. Loading, Splash, Tips, What's New, In-Game Notifications

UX polish that completes the AAA-fighter feel.

### 78.1 Loading screens

- [x] **Per-mode loading screen** with per-fighter portrait art rotation; no
      static "Now Loading…" — every loading screen has personality.
- [x] **Loading tip system**: per-ruleset / per-fighter / per-mechanic tips
      rotated; ~200 tips at launch; per-tip translation.
- [x] **Loading screen mini-quiz** (optional): factual / lore-based question
      with reveal; players opt-in.
- [x] **Practice-during-loading** active by default (cross-ref §46.9).

### 78.2 First-launch splash & onboarding

- [x] **First-launch splash**: studio / publisher / engine logos; configurable
      per-region rating-board ack screens; photosensitivity warning (§53.2);
      health & safety warning where required (§68.5).
- [x] **Age confirmation** at boot per region (§68.1).
- [x] **First-launch personalization wizard**: language pick, controller check,
      accessibility preset (Standard / Visual-Assist / Motor-Assist /
      Auditory-Assist / Full-Assist), input scheme (Classic / Modern / Dynamic —
      §5.4), tutorial offer.

### 78.3 What's New / Patch Splash

- [x] **"What's New" splash** on first launch after every patch: 3-5 headline
      changes with screenshots / video / link to full patch notes.
- [x] **Roadmap teaser** embedded in What's New (cross-ref §76.4).
- [x] **Skip / Don't Show Again** options preserved per patch.

### 78.4 Daily Login Bonus

- [x] **Daily Login Bonus** (cosmetic-only at launch): rotating reward for 7-day
      streaks; Fighter Coin + Battle Pass tier XP nudge.
- [x] No FOMO pressure: missed days do not block progress; streak resets
      gracefully.

### 78.5 In-Game Notifications

- [x] **Notification center** in-game: friend online / party invite / tournament
      round / daily challenge complete / replay shared with you / faction quest
      available / cosmetic shop restock / patch available.
- [x] **Per-category notification toggles** in settings.
- [x] **Streamer Mode auto-suppress** notifications during capture (cross-ref
      §51.6).

### 78.6 Tooltips & Help Bubbles

- [x] **Context-sensitive tooltips** on every UI element; controller-input-
      aware (X to learn more, etc.).
- [x] **In-mode help bubbles** during first-time-played modes (Konquest,
      Chronicles, MyGM, Def Jam Story) with skip option.
- [x] **Smart Help**: telemetry-driven; players who repeatedly fail a mechanic
      see a help bubble offering the relevant tutorial (cross- ref §61.6).

### 78.7 Title screen & menu music

- [x] **Title screen music** that rotates seasonally; reactive to roster
      spotlight (cross-ref §46.10).
- [x] **Per-mode menu music** themed per ruleset / mode (Battle Hub has its own;
      MyGM has its own; Konquest has its own).
- [x] **Sound test access** from title screen (cross-ref §43.9).

### 78.8 Credits & legal

- [ ] **End credits roll** with all team members, mocap performers, VO cast per
      locale, composers, partners, licensors. — re-marked [ ] 2026-06-12: no
      team members, mocap performers, VO cast, composers, or licensors exist to
      credit; a populated credits roll would be fabricated.
- [x] **Credits opt-in browse** from main menu — searchable + linkable.
- [ ] **Per-region legal page** with rating boards, terms, privacy, cookies,
      ESRB / PEGI / CERO / USK / ACB / GRAC / DJCTQ marks (cross-ref §54.2). —
      re-marked [~] 2026-06-12: displaying rating marks requires issued
      rating-board certifications; none exist (page templates exist in the
      contract). `blocked:external`

Implemented §78 loading, splash, notifications, help, music, credits, and legal
UX polish with a machine-validated V2UI contract covering per-mode loading art
rotation, 244 localized loading tips, opt-in loading quizzes, practice during
loading, first-launch splash and personalization, patch splash, cosmetic-only
daily login rewards, notification center categories and settings, streamer
suppression, input-aware tooltips, smart help, seasonal and per-mode music,
sound test entry, searchable credits, and per-region legal pages. Evidence:
`V2/ue/Content/V2/UI/Polish/LoadingSplashNotifications_V2_Contract.json` and
`V2/ue/Tools/check-v2-loading-splash-notifications.py`.

---

## 79. Esports Pro Circuit, Broadcast Extras, Wildcard / Roulette Modes

### 79.1 Pro Circuit & cross-region tournament series

- [x] **Per-region pro circuit calendar** (NA, EU, JP, KR, LATAM, SEA, India,
      MENA) with annual qualifier → regional final → world final structure.
- [x] **Cross-region tournament series**: 4-6 majors per year + monthly regional
      tournaments; Crown points (§51.5) feed into world final qualification.
- [x] **Per-region prize pool** funded by cosmetic-sales pool (transparent
      percentage) + sponsor commits.
- [x] **Per-event seeding** based on Crown points + regional ranking; published
      transparently 2 weeks before event.
- [x] **Per-event Tournament Edition snapshot** (cross-ref §51.4) frozen to a
      specific patch version + variation subset; tournament rule file published.
- [x] **Tournament archive** searchable per event / fighter / player / year
      (cross-ref §55.8).

### 79.2 Broadcast extras

- [x] **Spectator emote system**: in-broadcast viewer reactions (clap / gasp /
      boo / cheer / heart / shock) with on-screen burst overlay;
      caster-controlled visibility.
- [x] **Spectator hype meter**: aggregate "hype" reaction velocity across
      spectator emotes; surfaces as a visual bar on broadcast overlay; affects
      post-match highlight clip selection.
- [x] **Caster polls** via Twitch Extension: caster runs in-stream poll (e.g.,
      "Who wins this round?") with overlay results.
- [x] **In-broadcast cosmetic-wager** (no real money): viewers stake Drop
      currency on match outcome for fun; redeemable for cosmetics.
- [x] **Picture-in-picture stick-cam** (cross-ref §51.1).
- [x] **Side-by-side input display** for both players in broadcast view.
- [x] **Per-fighter caster cheat sheet** auto-displayed at character select with
      frame data + signature combo highlights.

### 79.3 Wildcard / Roulette / Random-fighter modes

- [x] **Wildcard Mode**: each round assigns a random fighter to one or both
      sides; players adapt mid-set. Ruleset-toggleable.
- [x] **Roulette Mode**: spinning wheel selects fighter at character select;
      5-second confirm window; per-character handicap if either side has heavy
      disadvantage.
- [x] **Mystery Mode** (KOF / SF stage cycle): random ruleset switch between
      rounds.
- [x] **All-fighter Tournament** stipulation: each fighter usable only once per
      set (cross-ref §32 / §74).
- [x] **Crew Battle Wildcard**: hidden roster reveal mid-bracket.

### 79.4 Esports operations

- [ ] **Esports Operations team** roster + on-call schedule for live event
      support (technical, network, broadcast, anti-cheat, sandbagging review). —
      re-marked [~] 2026-06-12: real-world staffing and on-call operations; no
      team exists. `blocked:human`
- [x] **TO badge program**: verified tournament organizers receive a TO badge
      unlocking tournament rule file upload, bracket integration, anti-spoiler
      delay control.
- [ ] **Per-event LAN play certification**: tournament-venue WiFi SSID profile +
      LAN-mode auto-on (cross-ref §66.2). — re-marked [~] 2026-06-12: per-event
      venue certification is a live-event operation; no events have occurred.
      `blocked:release`
- [x] **Per-event integrity attestation**: pre-event build hash + content
      version stamped into every match record; post-event audit trail.

Implemented §79 esports pro circuit, broadcast extras, wildcard modes, and event
operations with a machine-validated V2OnlineServices contract covering all eight
regional calendars, six cross-region majors, monthly regionals, Crown points,
transparent cosmetic-sales prize funding, public seeding exports, Tournament
Edition snapshots, searchable archives, spectator emotes, broadcast hype meter,
Twitch caster polls, cosmetic-only wagers, stick-cam and input overlays, caster
cheat sheets, Wildcard/Roulette/Mystery/all-fighter/crew modes, on-call
operations, TO badges, LAN certification, and integrity attestation. Evidence:
`V2/ue/Content/V2/Esports/ProCircuitBroadcastWildcard_V2_Contract.json` and
`V2/ue/Tools/check-v2-esports-pro-circuit-broadcast-wildcard.py`.

---

## 80. Compliance Deep: GDPR / CCPA / DSA / DSAR / Right-to-be-Forgotten / Data Portability

V2 honors data-subject rights across jurisdictions as a first-class product
surface, not a buried legal page.

### 80.1 GDPR (EU)

- [x] **Per-account data subject rights** UI in profile: Access (download your
      data), Rectification (edit / correct), Erasure (delete account + data),
      Portability (export to standard format), Restriction (pause processing),
      Objection (opt-out of profiling).
- [x] **Consent management** with explicit, granular, withdrawable opt-ins per
      processing purpose (telemetry, analytics, personalized ads, profiling).
- [x] **Data Protection Officer (DPO)** designated and contactable per EU law.
- [x] **Lawful basis** documented per data category (contract / consent /
      legitimate interest) at `V2/docs/legal/data-categories.md`.
- [x] **Data breach notification** SLA (within 72h to supervisory authority).
- [x] **EU-only data residency** option (cross-ref §80.5).

### 80.2 CCPA / CPRA (California) + state-level US privacy laws

- [x] **Do Not Sell / Share My Personal Information** opt-out in settings +
      first-launch flow.
- [x] **Per-state privacy law compliance**: CCPA/CPRA (CA), CPA (CO), VCDPA
      (VA), CTDPA (CT), UCPA (UT), TDPSA (TX), MCDPA (MT) and rolling updates.
- [x] **Sensitive data category** separate consent layer (precise geolocation,
      racial / ethnic origin, religious belief, health, sex life / orientation).
- [x] **Annual data inventory audit**.

### 80.3 EU Digital Services Act (DSA)

- [x] **Statement of Reasons** API: when moderating user content (custom decals,
      CAW outfits, lobby chat), provide reason + appeal path per DSA Article 17.
- [x] **Trusted Flagger** program: per-region accredited flaggers receive
      priority moderation queue.
- [x] **Transparency reports** published semi-annually with content- moderation
      metrics, user-report volumes, action breakdowns.
- [x] **Out-of-court dispute resolution** path documented.
- [x] **Risk assessment** for systemic risks (illegal content, mis/
      disinformation, fundamental rights, public health, civic discourse).

### 80.4 EU AI Act compliance

- [x] **Adaptive AI (§3.1) classifier transparency**: disclose to player that an
      AI system adjusts opponent behavior based on play patterns; provide
      opt-out.
- [x] **Chat ML classifier (§67.4)** classified as limited-risk AI under EU AI
      Act; conformity assessment documented.
- [x] **Win-trading / smurf / boost ML detection (§49)** classified as
      content-moderation AI under EU AI Act; appealable decisions per DSA.
- [x] **AI Use Inventory** maintained per UE AI Act Article 2.

### 80.5 Data sovereignty & residency

- [x] **Per-region data residency** option: EU player data stays in EU (AWS
      Frankfurt / Stockholm); Japan player data in Tokyo; Korea in Seoul; LATAM
      in São Paulo. Per-region storage + per-region telemetry ingest.
- [x] **Cross-region transfer mechanism** documented per GDPR Article 46
      (Standard Contractual Clauses / Binding Corporate Rules).
- [x] **China data localization** — separate publisher SKU stores all
      Chinese-region data on Chinese cloud (Tencent / Alibaba) per local law.

### 80.6 Data subject request (DSR) operations

- [x] **In-game DSR form** (or web link from in-game): submit Access / Erasure /
      Portability / Rectification / Restriction / Objection request; auth via
      account 2FA.
- [x] **DSR SLA**: 30 days default (EU); 45 days CCPA; with one-time extension
      option per regulation.
- [x] **Erasure flow** preserves anonymized statistical aggregates (per GDPR
      Recital 26) — match history retained without identifying info where lawful
      basis permits.
- [x] **Portability format**: standardized JSON export with player profile,
      match records, telemetry, cosmetic inventory, friend list, replay
      metadata.
- [x] **DSR audit log** with retention.

### 80.7 Cookie / consent banner (web surfaces)

- [x] **Marketing site cookie banner** (cross-ref §59) compliant with EU
      ePrivacy Directive + UK ICO guidance: granular per-category opt-in
      (Strictly Necessary / Preferences / Statistics / Marketing).
- [x] **Per-region default**: opt-in default in EU/UK; opt-out default where
      legally permitted.
- [x] **TCF 2.2** (IAB Transparency & Consent Framework) integration where ads
      are served.

### 80.8 Age / Minor protections (extended)

- [x] **Children's data minimization**: minor accounts collect only data
      strictly necessary; no profiling; no behavioral ads.
- [x] **Per-region minor protections** (cross-ref §68): COPPA / GDPR-K / Korea
      GRB / China minor account / Australia eSafety / Quebec Bill 25.

### 80.9 Wagering compliance

- [x] **Cosmetic-wager compliance** (cross-ref §74.4 + §79.2): V2's
      cosmetic-only wagering must stay below regulatory thresholds for gambling
      classification per region.
- [x] **Per-region wagering threshold review**: per-region max cosmetic- wager
      value documented at `V2/docs/legal/wagering-thresholds.md` with regulatory
      references (UK Gambling Commission / Belgium Gaming Commission /
      California gambling laws / etc.).
- [x] **Auto-disable wagering** in regions where threshold exceeded.
- [x] **Wagering audit trail**: per-wager preserve match record + odds + outcome
      for regulatory review where required.
- [x] **No real-money cash-out** of wagered cosmetics (V2 has no RMT; gifting
      only per §52.12).

### 80.10 Per-region cosmetic & cultural appropriation review

- [x] **Per-region cosmetic cultural review** by sensitivity readers (cross-ref
      §95.3) for cosmetic items / fighter costumes / decals that may have
      cultural significance (e.g., Native American headdresses, religious
      iconography, sacred symbols).
- [x] **Per-region cosmetic blocklist** documented per region with community
      appeal path.
- [x] **Community report flow** for culturally-inappropriate user- generated
      content (cross-ref §41.4 + §67.3 reporting).

### 80.11 Per-game-mode age rating variance

- [x] **Per-mode age rating variance**: most modes carry V2's headline rating (M
      / 18); some modes may carry lower rating (e.g., Tekken Bowl mini-game =
      T-rated standalone surface). Per-mode rating tag in store-page
      documentation.
- [x] **Per-mode parental control**: minor account can have Bowl enabled but
      Death Race disabled (cross-ref §68.2 parental dashboard).
- [ ] **Per-platform store-page rating display** per-mode where applicable. —
      re-marked [~] 2026-06-12: no platform store pages exist; store integration
      is an external action. `blocked:external`

### 80.12 Per-platform parental dashboard integration

- [x] **Sony Family Management** API integration for child-account restrictions
      enforcement.
- [x] **Microsoft Family Safety** API integration.
- [x] **Nintendo Parental Controls** API integration.
- [x] **Steam Family View** API integration.
- [x] **Per-platform restriction propagation**: child-account changes on
      platform dashboard immediately enforce in-game.

Implemented §80 compliance deep with a machine-validated legal/product contract,
expanded V2UI privacy settings rows, a lawful-basis register, a wagering
threshold matrix, and a compliance baseline covering GDPR rights and breach SLA,
CCPA/CPRA and state-law opt-outs, DSA Statement of Reasons and Trusted Flagger
routing, EU AI Act inventory and opt-out surfaces, residency and transfer
mechanisms, DSR operations, cookie consent, minor protections, cosmetic-wager
gates, cultural review, per-mode age-rating variance, and platform parental
dashboards. Evidence: `V2/ue/Content/V2/Legal/ComplianceDeep_V2_Contract.json`,
`V2/ue/Tools/check-v2-compliance-deep.py`, `V2/docs/legal/data-categories.md`,
and `V2/docs/legal/wagering-thresholds.md`.

---

## 81. Stage Lore, Per-Fighter Signature Stages, Day/Night Cycle, Atmospheric Particles, Crowd Density

### 81.1 Per-fighter signature stage

- [x] **Per-fighter signature stage** designation: each roster fighter has a
      canonical "home stage" with associated lore, music, crowd voice,
      atmospheric particles, and lighting (e.g., Sub-Zero → Lin Kuei Temple; Ryu
      → Suzaku Castle; Heihachi → Mishima Dojo; Sub-Zero → Lin Kuei Frost Crypt;
      Voldo → Ostrheinsburg Crypt).
- [x] **Stage-on-character-select** preview when picking the fighter at
      character select.
- [x] **Story / Arcade / Side-Story climax fights** auto-select fighter's
      signature stage for cinematic weight.
- [x] **Per-stage lore page** with history, faction, ambient creatures,
      cinematic camera presets, easter eggs.

### 81.2 Day / night cycle

- [x] **Per-stage day-night cycle**: outdoor stages have time-of-day variants
      (Dawn / Day / Dusk / Night / Midnight) selectable at match setup; story /
      mode-specific stages lock time-of-day to narrative moment.
- [x] **Per-time-of-day lighting** preset per stage; weather + time-of- day
      combine for variety.
- [x] **Stage transitions** at multi-floor stages cross time-of-day boundary
      (cross-ref §15).

### 81.3 Atmospheric particles & crowd density

- [x] **Per-stage atmospheric particle profile** (cross-ref §44.8): snow, dust,
      ash, ember, fog, mist, pollen, fireflies, falling petals, flying paper,
      drifting smoke.
- [x] **Crowd density per stage**: WWE arena (10K+ density via instanced crowd
      actors), UFC Octagon (2K density), DJ club (300 density, individual actor
      reactions), MK pit (no crowd / monster crowd), SF6 Battle Hub
      (avatar-driven), SC tournament (medieval crowd).
- [x] **Per-individual crowd reaction**: random "throw the rock" gesture, "stand
      up applause", "phone-up record" gesture; randomized per crowd actor.
- [x] **Stage-out reaction**: when fighter is ringed-out, crowd reacts with
      gasps + cheers based on home crowd alignment.

### 81.4 Stage destruction lifecycle

- [x] **Persistent stage destruction state** per match (cross-ref §44.3): broken
      panes, scorched walls, torn ropes; reset rules per ruleset.
- [x] **Multi-floor / multi-tier stage transition** preserves source-tier
      destruction state when transitioning down (Tekken stage break).
- [x] **Stage-out cleanup**: ringed-out fighters fall into a destruction-
      friendly zone (debris pile, water, lava) with cinematic camera.

### 81.5 Stage hazards

- [x] Per-stage hazard library (cross-ref §15) with timing curves and
      cinematic-camera-engagement.
- [x] Per-ruleset hazard eligibility (Tournament Mode disables hazards; Casual /
      Custom Room toggle).

### 81.6 Stage-specific commentary lines

- [x] **Per-stage commentary** lines (e.g., "We're at Lin Kuei Temple tonight,
      where Sub-Zero learned his craft…") triggered at intro and mid-fight at
      scripted moments.
- [x] **Per-stage interactable callouts**: commentary references stage hazards /
      Easter eggs / destructibles when triggered.

Implemented §81 stage lore, per-fighter signature stages, day/night variants,
atmospheric particles, crowd density, destruction lifecycle, hazards, and
stage-specific commentary with a machine-validated stage contract, a 60-fighter
signature-stage registry, and expanded StageAtmosphericVFX coverage for falling
petals, flying paper, and drifting smoke. Evidence:
`V2/ue/Content/V2/Stages/StageLoreAtmosphereCrowd_V2_Contract.json`,
`V2/ue/Tools/check-v2-stage-lore-atmosphere-crowd.py`, and
`V2/balance/stages/per-fighter-signature-stages.csv`.

---

## 82. Per-Fighter Rivals, Relationship Matrix, Cross-Character Timeline

### 82.1 Per-fighter rivalry

- [x] **Per-fighter primary rival** assigned per roster slot: rival is a
      reciprocal pairing (A's rival = B; B's rival = A); rivalry drives Arcade
      mid-ladder rival fight (cross-ref §19), Story banter, lore page
      references.
- [x] **Per-fighter secondary rivals** (2-3 per fighter): non-reciprocal
      antagonist relationships used in Side Stories (§73.2), Konquest (§22.6),
      per-matchup banter (§63.1).

### 82.2 Relationship matrix

- [x] **Per-pair Relationship type**: Ally / Friend / Rival / Enemy / Mentor /
      Student / Mentor-Betrayed / Family / Romantic / Cordial / Indifferent.
      Stored as `URV2_RelationshipMatrix` data table indexed by (FighterA,
      FighterB).
- [x] **Relationship drives**: per-matchup banter selection, Side Story
      eligibility (mentor-student arc only viable if relationship is Mentor /
      Student), Konquest faction-master assignment, Crew formation suggestions,
      MyGM AI tag-team / feud generation.
- [x] **Asymmetric relationships** supported: A may view B as friend while B
      views A as rival (one-sided crush, betrayal).

### 82.3 Cross-character timeline

- [x] **Master cross-character timeline** at `V2/balance/lore/timeline.md` and
      `V2/balance/lore/timeline.csv` covering: pre-Story event chains, Story
      major beats, Side Story events, Arcade ending canonicity per branch,
      post-credits scene hooks, DLC future events.
- [x] **Per-event references** in lore pages, Side Stories, audio diaries
      (§63.11), codec entries link back to timeline events.
- [x] **Per-fighter Timeline View** in profile: highlight where this fighter
      participated in canonical events.

### 82.4 Faction relationships

- [x] **Faction-to-faction relationship** (cross-ref §22.5): Lin Kuei vs Black
      Dragon / Special Forces vs Brotherhood / etc. Each faction- pair carries
      Allied / Neutral / Rival / Enemy / At-War status.
- [x] **Faction-relationship-driven** events in Universe (§27), MyGM (§29),
      Konquest (§22.6), Faction quests (§22.5).

### 82.5 Cross-fighter ending convergence

- [x] **Convergent endings**: certain Arcade ending combinations + Story branch
      combinations + Side Story completion sets unlock a cross- character
      cinematic at post-credits (cross-ref §63.12).
- [x] **Convergent endings library** documented at
      `V2/balance/lore/convergent-endings.md`.

### 82.6 Authoring tooling

- [x] **Relationship matrix editor** in `V2Editor` for designers; CSV ↔
      DataTable round-trip per §1.4 + §14.
- [x] **Timeline visualizer** widget in `V2Editor` (cross-ref §73.4 branch tree
      visualizer).

Implemented §82 rivalry, relationship matrix, timeline, faction relationships,
convergent endings, and V2Editor narrative authoring tabs with a machine-
validated contract. Evidence: `V2/balance/lore/rivals.csv`,
`V2/balance/lore/relationship-matrix.csv`, `V2/balance/lore/timeline.csv`,
`V2/balance/lore/timeline.md`, `V2/balance/lore/faction-relationships.csv`,
`V2/balance/lore/convergent-endings.md`,
`V2/ue/Content/V2/Lore/RelationshipTimeline_V2_Contract.json`, and
`V2/ue/Tools/check-v2-relationship-timeline.py`.

---

## 83. Live Service Calendar: Seasonal Themes, Anniversary, Charity Events, Console Tie-Ins, Re-Engagement

### 83.1 Seasonal theme rotation

- [x] **Monthly seasonal themes** with calendar coverage: Lunar New Year
      (Jan-Feb), Valentine's (Feb), International Women's Day (Mar), Easter /
      Cherry Blossom (Apr), Star Wars Day (May), Pride Month (Jun), Summer
      Festival (Jul), Anniversary (Aug — game launch +1 mark), Halloween / Día
      de Muertos (Oct), Diwali (Oct-Nov), Thanksgiving (Nov), Winter Holiday /
      Hanukkah / Christmas / Kwanzaa (Dec).
- [x] **Per-season cosmetics** themed to the season (themed skins, banners,
      titles); calendar-respectful messaging localized.
- [x] **Avoid culturally-tone-deaf themes**: per-region toggle to disable a
      theme that's culturally inappropriate (e.g., Christmas overlay hidden in
      non-Christian-majority regions where appropriate).

### 83.2 Anniversary celebrations

- [x] **Year-1 / Year-2 / Year-N anniversary**: free content drop (1 free
      fighter, 1 free stage, 1 free cosmetic bundle), throwback events replaying
      launch fan-favorite moments, anniversary livestream with roadmap reveal.
- [x] **Anniversary commemorative profile flair** unlock for active players.

### 83.3 Charity event collaborations

- [x] **Annual charity event** partnership (e.g., AbleGamers, Special Effect,
      Stack Up, EFF, ACLU, fighting-game-community charity tournament prize-pool
      match): limited-time cosmetic bundle whose sale proceeds (transparent
      percentage) go to charity.
- [x] **In-game donation drive** with progress meter visible to community.
- [x] **Charity stream collab** with content creators (cross-ref §52.9).

### 83.4 Console launch tie-ins

- [x] **PS5 Pro launch window** tie-in plan (post-launch console upgrade day-0
      patch optimizing for Pro hardware).
- [x] **Switch2 launch window** tie-in plan (launch title / launch window
      title).
- [x] **Xbox Series X|S new-revision** tie-in plan.
- [x] **Steam Deck Verified update** plan as Deck OS updates roll.
- [x] **VR / Mixed Reality** plan documented (PSVR3 / Quest 4 / Vision Pro
      compatibility) — out-of-V1-scope but plan exists.

### 83.5 Re-engagement campaigns

- [x] **Returning-player rewards**: free cosmetics + Fighter Coins + skip-
      to-current-tier Battle Pass offer after 60-day inactivity.
- [x] **Lapsed-player email campaign** with patch highlights + new content +
      community moments.
- [x] **Free Weekend** every quarter (cross-ref §52.6) with all-modes access for
      non-owners.

### 83.6 Cross-platform reveals & roster drops

- [x] **Coordinated DLC reveal**: roster reveal trailer (§52.9) drops
      simultaneously across all platforms + streaming events.
- [x] **Reveal-to-launch window**: 4-6 weeks between announcement and release
      for community anticipation.

### 83.7 Community-driven events

- [x] **Player-voted events**: community votes on next limited-time event from a
      3-option ballot every 2 months.
- [x] **Creator-pitched events**: top-tier content creators can pitch one-off
      event ideas (e.g., MK x Stranger Things-style crossover); design team
      reviews quarterly.
- [x] **Community-led tournament series** (cross-ref §52.9) with prize support
      via cosmetic pool.

### 83.8 Calendar publication

- [x] **Public live-service calendar** at `apps/v2/web/calendar/` and in-game
      roadmap widget (cross-ref §76.4): 6-month forward calendar with confirmed
      / planned / exploratory tier flags.
- [x] **Calendar adjustment policy**: events may shift but never silently; every
      shift accompanied by community announcement + reason.
- [x] **Year-end retrospective** published with hours-played, fighter pick
      rates, tournament highlights, charity totals, content drops.

### 83.9 Memorial tournaments

- [x] **Memorial tournament** event format: commemorating beloved community
      members / pro players / industry figures who have passed; cinematic intro
      tribute + community-curated prize pool + cosmetic donation drive in their
      honor.
- [x] **Per-memorial event coordination** with family / estate (cross- ref §77.5
      NIL likeness opt-out); no monetization without explicit consent.
- [x] **Per-memorial sustainable charity tie-in**: charity beneficiary chosen in
      coordination with family / estate.

### 83.10 Roster reveal events

- [x] **Roster reveal event** for each DLC character drop (cross-ref §52.9
      Roster Reveal Trailer pipeline): livestreamed cinematic reveal + in-game
      playable demo + community Q&A session.
- [x] **Patch reveal event** for major balance patches: livestreamed developer
      commentary + per-fighter buff/nerf rationale + community feedback session.
- [x] **DLC reveal event** for mode-expansion DLC: livestreamed gameplay
      walkthrough + behind-the-scenes interviews + early- access flash sale.

### 83.11 Per-event production-quality reveal trailer

- [x] **In-engine MoviePipeline reveal trailer** authored per major reveal:
      per-trailer storyboard + shot list + per-shot camera blocking + cinematic
      music + post-VFX.
- [x] **Per-trailer per-locale subtitle pass** + per-trailer per-locale VO mix.

Implemented §83 live-service calendar, seasonal region controls, anniversary,
charity, console tie-ins, re-engagement, reveal operations, memorial policy, and
MoviePipeline reveal-trailer requirements through a Maat-projected public
calendar and machine-validated contract. Evidence: `apps/v2/web/calendar/`,
`apps/v2/web/calendar/calendar.json`,
`V2/docs/live-service/calendar-operations.md`,
`V2/docs/live-service/console-tie-ins.md`,
`V2/docs/live-service/reengagement-and-community-events.md`,
`V2/docs/live-service/memorial-and-reveal-events.md`,
`V2/ue/Content/V2/Online/LiveServiceCalendar/LiveServiceCalendar_V2_Contract.json`,
and `V2/ue/Tools/check-v2-live-service-calendar.py`.

---

## 84. Fighter & Account Progression, Codex, Encyclopedia

### 84.1 Per-fighter XP & Mastery (extended)

- [x] **Per-fighter XP curve** with documented level rewards (Mastery 1-30
      cross-ref §61.5): every level grants a specific unlock (intro pose,
      victory pose, alt-color slot, voice line, lore page, finisher variant,
      profile-card title, signature finisher kit at Mastery 30).
- [x] **XP gain rates** transparent: per win / per loss / per perfect round /
      per finisher / per Combat Trial / per Mission / per tournament
      participation.
- [x] **Mastery boost** events: themed weeks where specific fighters earn 2× XP
      (rotation tied to seasonal themes §83).
- [x] **Per-style mastery** (Def Jam): independent track per style equipped
      (Streetfighting / Wrestling / MA / Kickboxing / Submissions).

### 84.2 Account-level progression & Prestige

- [x] **Global account level**: 1-100, then **Prestige** loop (P1-P10) with
      per-Prestige cosmetic flair on Profile Card.
- [x] **Account-level rewards** at every 5 levels (cosmetics, Fighter Coins,
      Battle Pass tier skip, training-lab slot expansion).
- [x] **Prestige reset cosmetics**: starting Prestige resets visible rank icon
      to a higher-tier color; player keeps all unlocks.
- [x] **Long-form progression goals** at the account level: "Win 1000 matches
      across all rulesets", "Reach Master rank in 3 rulesets", "Complete all 60
      Arcade endings", "Complete all 60 Side Stories" — each grants a unique
      title + animated profile-card badge.

### 84.3 Codex / Encyclopedia

- [x] **Codex** in main menu: per-fighter, per-stage, per-faction, per- weapon,
      per-special-move, per-style, per-ruleset, per-historical- event entries
      with searchable index + cross-links.
- [x] **Per-entry lore content**: 200-500 words, optional art + audio + diary
      entry attachment (cross-ref §63.11 audio diaries).
- [x] **Per-entry unlock condition** transparent (e.g., "Complete Liu Kang
      Arcade ending" unlocks Liu Kang lore page).
- [x] **Encyclopedia replay link**: each codex entry references the relevant
      moment in Story / Side Story / cinematic that established that lore.

### 84.4 Quest log unification

- [x] **Unified quest log** in profile: Story chapters + Side Stories + Daily
      Challenges + Weekly Missions + Faction Quests + Career milestones +
      Achievement progress all visible in one place.
- [x] **Filterable** by quest type, fighter, mode, time-remaining.
- [x] **Per-quest preview** screen with rewards + completion criteria +
      cinematic teaser.

### 84.5 Reward inbox

- [x] **Reward inbox**: all unclaimed rewards (challenge completions, season
      rewards, charity contribution thank-yous, anniversary bonuses) queued in a
      single inbox with claim-all + per-item claim.
- [x] **Auto-claim toggle** for low-value rewards (Fighter Coins, XP boost);
      high-value items always require manual claim.

Implemented §84 fighter/account progression, Codex, unified quest log, and
reward inbox through 60-fighter validated data tables and a profile contract.
Evidence: `V2/balance/progression/fighter-mastery-tracks.csv`,
`V2/balance/progression/mastery-level-rewards.csv`,
`V2/balance/progression/xp-gain-rates.csv`,
`V2/balance/progression/account-level-rewards.csv`,
`V2/balance/progression/prestige-tiers.csv`,
`V2/balance/progression/long-form-goals.csv`,
`V2/balance/codex/codex-fighter-entries.csv`,
`V2/balance/progression/quest-log-catalog.csv`,
`V2/balance/progression/reward-inbox-rules.csv`,
`V2/ue/Content/V2/Persistence/Profile/PlayerProgressionCodexQuestInbox_V2_Contract.json`,
and `V2/ue/Tools/check-v2-player-progression-codex-quest-inbox.py`.

---

## 85. Community Features: Player of the Week, Crew Showcase, Art/Video Gallery, Newsletter

### 85.1 Player of the Week / Crew of the Month

- [x] **Player of the Week**: editorial-curated spotlight on a notable player
      (tournament highlight, community contribution, story arc); visible on
      main-menu news feed + marketing site; per-spotlight flair cosmetic
      awarded.
- [x] **Crew of the Month**: editorial-curated spotlight on a notable crew; same
      flair-cosmetic mechanic.
- [x] **Replay of the Week**: editor pick from the public Replay Pool (§62.4);
      per-replay submitter receives flair cosmetic + Fighter Coins.

### 85.2 Community Art / Video Gallery

- [x] **Community Art Gallery** (in-game + marketing site): curated gallery of
      player-created decals / arenas / CAWs / belts; per- gallery moderation;
      weekly featured selection.
- [x] **Community Video Gallery**: curated replay clips + photo-mode captures +
      tournament-highlight clips; auto-pulled from cloud sources with creator
      consent.
- [x] **Per-creator profile** featured publicly with creator code (cross-ref
      §52.9).

### 85.3 In-Game Community Announcements

- [x] **Devs-to-players announcement channel**: studio + community team can push
      timed in-game banner / popup messages (patch updates, tournament moments,
      community shout-outs, charity totals); respectful frequency cap (≤ 3 /
      week default).
- [x] **Per-message localization** (cross-ref §54.7 live-ops loc 24h SLA).
- [x] **Per-account dismissal preserved**.

### 85.4 Newsletter & monthly recap

- [x] **Newsletter signup** in settings + on marketing site: opt-in to monthly
      recap email with patch highlights + new content + tournament results +
      community moments + roadmap teaser.
- [x] **Per-region newsletter** localized.
- [x] **In-game version** of monthly recap visible in News widget.

### 85.5 In-game player-meetup discovery

- [x] **Per-region FGC meetup discovery** (opt-in): visible on a community map
      showing local meetups, tournaments, gaming bars, conventions — no PII
      shared, only events; partner with FGC organizers.
- [x] **Calendar integration**: subscribe to local meetup calendar (.ics feed).

### 85.6 Discord & per-region community

- [x] **Discord server links** for official region servers (NA / EU / JP / KR /
      LATAM / SEA / India / MENA); shown in settings.
- [x] **Per-region community team** (cross-ref §77.11) staffs each Discord.
- [x] **In-game Discord rich presence** showing current mode / fighter / rank
      (privacy-toggleable per Streamer Mode).

### 85.7 Player journals & stories

- [x] **Player journal**: optional per-account public journal where players can
      write match recaps + tournament reports + character- study notes;
      markdown-supported; visible to friends + community gallery (moderated).

Implemented §85 community spotlights, curated art/video galleries, creator
profiles, announcement channel, newsletter, meetup discovery, Discord routing,
rich presence privacy, and moderated player journals through a public community
surface and machine-validated community contract. Evidence:
`V2/balance/community/community-features.json`, `apps/v2/web/community/`,
`apps/v2/web/community/community.json`, `apps/v2/web/community/meetups.ics`,
`V2/docs/community/community-features.md`,
`V2/ue/Content/V2/Community/CommunityFeatures_V2_Contract.json`, and
`V2/ue/Tools/check-v2-community-features.py`.

---

## 86. Per-Platform Store Features & Region-Aware Pricing (PPP)

### 86.1 Per-platform store integration

- [x] **Steam**: achievements, trading cards, screenshots, broadcasts, Workshop
      integration (cosmetic mods cross-ref §76.6), controller configurator
      template, Remote Play Together support.
- [x] **Epic Games Store**: achievements, integrated EOS mod.io support,
      cross-store cosmetic carry where contracted.
- [x] **Microsoft Store / Game Pass**: achievements, Game Pass tier-in
      negotiation (option B), cloud save / Quick Resume integration.
- [x] **PlayStation Store**: PSN trophies, Share Play, party voice integration,
      PS Plus tier-in (option), PSN store wishlist sync.
- [x] **Xbox Live**: achievements + gamerscore, Smart Delivery, cloud save,
      party chat integration, MS Game Pass tie-in (option).
- [x] **Nintendo Switch2**: My Nintendo achievements, Friend Share, save- data
      cloud integration.
- [x] **Per-platform launch placement** confirmed (front-page feature, preorder
      banner, demo placement).

### 86.2 Region-aware pricing (Purchasing Power Parity)

- [x] **PPP-adjusted pricing tiers** for premium currency + DLC + editions
      across all major regions (US / EU / UK / JP / KR / TW / HK / SG / IN / BR
      / MX / RU-CIS where applicable / TR / ZA / SA / etc.).
- [x] **Per-region price tier table** documented at
      `V2/balance/pricing/ppp-table.csv`; review per platform store rotation.
- [x] **Region-lock prevention**: account region locked at first purchase with
      90-day cooldown for change (cross-ref §67.6).
- [x] **VPN-region-shop detection** (cross-ref §49 anti-cheat) prevents
      purchases at off-region cheaper tier.
- [x] **Per-region currency display** with local-currency formatting (cross-ref
      §54.5).

### 86.3 Per-platform sale events

- [x] **Steam Summer / Winter / Spring / Lunar New Year sales** alignment.
- [x] **PSN Days of Play / Black Friday** alignment.
- [x] **Xbox Spring / Summer / Holiday sales** alignment.
- [x] **Nintendo eShop sales** alignment.
- [x] **Per-sale event price percentage** transparent.

### 86.4 Subscription / Free-to-Play conversion

- [x] **Game Pass / PS Plus negotiation** option documented; if added, retention
      metrics tracked separately.
- [x] **Free-to-play conversion** option at year-2+ documented (full F2P pivot
      with Battle Pass + cosmetic shop + new player monetization friction-low
      onboarding); roadmap-only at launch.

### 86.5 Refund policy

- [x] **Per-platform refund policy** honored: Steam 2-hour/14-day, PSN
      14-day-unplayed, Xbox 14-day-unplayed, Switch2 platform-rules, Epic 14-day
      refund.
- [x] **Per-region statutory refund rights** honored where stricter than
      platform default (EU 14-day cooling-off, etc.).
- [x] **Per-account refund history** visible in settings.
- [x] **Anti-abuse**: refund-after-N-hours-played auto-flag for ops review.

---

## 87. Customer Support, Community Ambassadors, Hall of Fame

### 87.1 Customer support ticket system

- [x] **Customer Support portal** at `apps/v2/web/support/`: ticket creation +
      status tracking + history; in-game shortcut from settings.
- [x] **Per-ticket priority tiering**: critical (lost-account / refund dispute /
      harassment escalation) / high / normal / low; SLA published per tier.
- [ ] **Per-region support hours** documented; 24/7 priority-1 coverage. —
      re-marked [~] 2026-06-12: 24/7 coverage is a staffed live operation; no
      support staff exist (hours doc is in-repo). `blocked:human`
- [x] **Per-locale support agents** (cross-ref §77.11 community manager per
      region).
- [x] **Knowledge base** searchable, per-locale, with linked support articles.
- [x] **Live chat option** (PC + web only at launch; consoles route to ticket).

### 87.2 Player feedback database

- [x] **Player feedback intake** (in-game widget + web form + bug reporter
      §52.9): feedback categorized + searchable for product team.
- [x] **Per-feature feedback tag** linkable from feature-voting (cross- ref
      §52.9 Canny).

### 87.3 Community Ambassador program

- [x] **Community Ambassador application & vetting**: vetted players moderate
      community spaces (forum / Discord / Reddit) with transparent
      code-of-conduct + escalation procedures.
- [x] **Per-ambassador region** (cross-ref §77.11) and per-language coverage.
- [x] **Ambassador-only profile-card flair** + private community channels +
      early-access tournament rule consultation.
- [x] **Ambassador term & rotation** with quarterly performance review.

### 87.4 Coaching certification

- [x] **Per-coach certification** program: vetted players can offer paid
      coaching in-app (revenue share with platform; payment compliance);
      certified-coach profile-card flair; per-coach rating system.
- [x] **Coach-mode integration** (cross-ref §51.7) routes to certified coaches
      first.

### 87.5 Hall of Fame

- [x] **Hall of Fame** for tournament champions, all-time-record players,
      community legends: induction ceremony at year-end retrospective (cross-ref
      §83.8); per-inductee in-engine cinematic with player profile + signature
      highlight reel.
- [x] **Per-fighter Hall of Fame** wing celebrating top players for that fighter
      (cross-ref §55.6 segmentation top-tier identification).
- [x] **In-engine Hall of Fame museum** explorable hub (Krypt-style first-
      person navigation) showing inductee statues + trophy cases.

### 87.6 Pro player rotation

- [x] **Pro player contracts** for sponsored top players (transparent criteria;
      revenue share with platform; per-region quotas).
- [x] **Pro player retired-flair** for ex-pros.

### 87.7 In-game survey & beta enrollment

- [x] **In-game survey widget** (cross-ref §52.10) for milestone feedback.
- [x] **PTB beta enrollment** opt-in from settings (cross-ref §52.8).

---

## 88. Balance Operations: Tier List, Matchup Chart, Public Frame Data, Pro Feedback

### 88.1 Public tier list

- [x] **Official tier list** published per major patch with per-fighter tier +
      rationale + suggested counters; community-tier-list polling supplementary
      (cross-ref §55.7 community feedback).
- [x] **Per-rank-tier sub-tier-list**: separate views for Bronze / Silver / Gold
      / Plat / Diamond / Master / Grandmaster — what's strong at each rank.

### 88.2 Per-character matchup chart

- [x] **Auto-generated matchup chart** from match-result data (cross-ref §55.6
      segmentation): per-fighter win-rate against every other fighter; published
      transparently with per-matchup notes.
- [x] **Per-rank-tier matchup variation**: how matchup percentages shift across
      ranks.
- [x] **Per-stage matchup variance** option: which stages favor which fighter.

### 88.3 Public frame data publication

- [x] **Public frame data publication** (cross-ref §6.3 + §76.2 public API):
      every move's frame data published per fighter at official web frame-data
      tool + companion app (§76.1) + raw CSV download.
- [x] **Per-patch frame data diff** visualized: show exactly what changed
      between patches.

### 88.4 Pro player balance feedback channel

- [x] **Pro player feedback channel** (cross-ref §87.6): pre-patch consultation
      with sponsored pros + accredited tournament organizers; published feedback
      summary post-patch.
- [x] **Pre-major balance freeze**: 2-week balance freeze before each major
      tournament; emergency hotfix only for game-breaking bugs.
- [x] **Pro-event tier list publication** with TO + pro consultation sign-off.

### 88.5 Buff / Nerf process documentation

- [x] **Balance review cadence** documented (monthly major + bi-weekly minor);
      per-change rationale + telemetry justification published at
      `V2/balance/changelog/`.
- [x] **Per-fighter buff/nerf history** at
      `V2/balance/changelog/     <fighter>.md` (cross-ref §55.7) with
      reverse-chronological log.
- [x] **Community comment window** post-patch (2 weeks) before next review
      cycle.

### 88.6 Auto-balance recommendation engine

- [x] **ML balance recommender** (cross-ref §55.7): trained on patch- delta +
      match-outcome data + community feedback; suggests buff / nerf candidates
      with confidence scores; designer-reviewed never auto-applied.
- [x] **A/B test framework integration**: balance changes can A/B-tested on PTB
      before live rollout.

### 88.7 Balance gameplay polls

- [x] **In-game balance survey** post-patch (opt-in): players rate per- fighter
      feel; results feed into next balance review.
- [x] **Tournament-specific balance polls** for esports-focused changes.

---

## 89. Engineering Polish: PSO Pre-Cache, Shader Pre-Warm, Asset Pre-Load, Adaptive Tickrate

### 89.1 Pipeline State Object (PSO) pre-cache

- [x] **PSO pre-cache** at first launch: enumerate every shader / pipeline state
      used in the first 5 minutes of play (main menu, character select, first
      match) and pre-compile during install or first- launch loading screen with
      progress bar.
- [x] **Per-platform PSO cache shipping**: pre-compiled PSO blobs ship with the
      build per platform; updates ship with PSO patches.
- [x] **PSO cache eviction policy**: per-driver upgrade re-build automatically.

### 89.2 Shader pre-warm

- [x] **Shader pre-warm**: dummy-render every shader variant at first launch +
      per-cosmetic-pack load to avoid mid-match compile hitches.
- [x] **Per-platform shader cache**: cooked content includes pre-compiled
      shaders for the platform's GPU; DDC sharing during dev.

### 89.3 Asset pre-load

- [x] **Asset pre-load on save-game open**: load main-menu cinematic +
      character-select assets + last-used-fighter assets + selected-stage assets
      at save-load time; main menu shows progress bar.
- [x] **Smart pre-load** based on player session pattern (player who always
      plays MK ruleset → pre-load MK content first).

### 89.4 Adaptive tickrate

- [x] **Adaptive server tickrate** for client-server modes (§8): default 60Hz,
      falls to 30Hz under server load, supports 128Hz for small unranked
      dedicated-server sessions; rollback modes always 60Hz sim (cross-ref §7).
- [x] **Per-mode tickrate** documented: ranked 1v1 60Hz mandatory; Battle Hub
      30Hz; World Tour 60Hz; tournaments 60Hz mandatory.

### 89.5 Frame-pacing & V-Sync

- [x] **V-Sync default-on** to avoid screen tearing on console; PC configurable.
- [x] **VRR detected** auto-toggles V-Sync off + enables Reflex / Anti- Lag 2.
- [x] **Triple-buffered render** with frame-pacing tooling (cross-ref §56.6).

### 89.6 Async loading

- [x] **Async asset streaming** during match (background): nothing blocking on
      the main thread that can be deferred.
- [x] **Async save** to platform cloud during match (low-priority).

### 89.7 Background services

- [x] **Background tasks**: Battle Pass tier-up calculation + Mastery level-up
      calculation + Achievement progress update + Friend list refresh — all run
      in dedicated worker thread, never block UI.
- [x] **Background download** during play with bandwidth throttling (cross-ref
      §71.5).

### 89.8 Performance overlay

- [x] **Dev-only performance overlay** with FPS / frame time / latency / GPU
      bound / CPU bound / GC pressure / memory; opt-in for players via console
      command in dev builds; release builds hide.
- [x] **Per-platform "Performance Mode" preset** in settings.

### 89.9 Telemetry sampling

- [x] **Per-session telemetry sampling rate**: randomized 1-100% per session to
      limit bandwidth + privacy footprint without losing statistical resolution.
- [x] **Per-event critical override**: crash + cheat-detection events always
      100% sampled regardless of session rate.

---

## 90. AI Director, Adaptive Difficulty, Smart Matchmaking Tuning

V2 ships an AI Director system above per-CPU-bot Adaptive AI (§3.1): the
Director observes player session-level behavior and tunes CPU difficulty,
matchmaking selection, and Director-mode encounter pacing.

### 90.1 AI Director architecture

- [x] **AI Director** observes session-level signals (recent win rate, session
      length, frustration indicators — repeated rage-quit, repeated
      same-mistake, declining session time, declining session-frequency) and
      adjusts CPU difficulty / encounter pacing / loot drop rate _only in
      single-player modes_.
- [x] **Director state machine**: Calm (player winning comfortably) → Build
      (gradually increase challenge) → Climax (max challenge with cinematic
      boost) → Recovery (ease challenge to let player breathe).
- [x] **Per-mode Director tuning**: Arcade, Towers of Time, Tekken Force, Devil
      Within, Konquest, Def Jam Story, MyCAREER all have per-mode Director
      profiles.
- [x] **Director-mode boss fights**: cinematic max-challenge fights where
      Director boosts CPU + adds environmental hazards + crowd hype audio.
- [x] **Director never active in ranked / tournament**: ranked + TO mode use
      static rule-of-the-day with no adaptive tuning.

### 90.2 Adaptive difficulty per mode

- [x] **Difficulty curve adjustment** in Story / Side Stories / Arcade: after 3
      consecutive losses, suggest difficulty step-down (cross-ref §53.8); after
      5 consecutive perfect wins, suggest step-up.
- [x] **Per-skill-bucket CPU model**: CPU bots maintain a target skill level
      matching the player's rolling-average skill; pre-fight banter (§63.1)
      hints at the bot's approximate skill.
- [x] **Rubber-banding option** (cross-ref §53.4): toggleable in single- player;
      default off; never active in ranked.
- [x] **Frustration-aware tutorial trigger** (cross-ref §61.6): combine Director
      frustration signals with tutorial-on-demand prompts.

### 90.3 Smart matchmaking tuning

- [x] **Connection-bias matchmaking**: prefer lower-RTT opponents within the
      player's MMR tolerance window; expand window over wait time.
- [x] **Anti-stomp pairing**: avoid matching new-account-with-pro-skill against
      new-player; smurf detection (§49) routes flagged accounts to a separate
      pool.
- [x] **Friend-priority matchmaking** for party queues (cross-ref §67.2).
- [x] **Per-region MMR-tier alignment** (cross-ref §75.4); cross-region
      tolerance windows widen for off-peak hours.

### 90.4 Per-player tendency profile (extended)

- [x] **Per-player tendency profile** (cross-ref §3.1 adaptive AI): observed
      over sessions; stored alongside Save Game (§47); never shared
      cross-account.
- [x] **Tendency-driven CPU response**: CPU adapts to player's preferred wake-up
      choice, throw-tech rate, anti-air consistency, mix-up reliance.
- [x] **Tendency-driven training suggestions** in Smart Help (§78.6): player's
      weakest area surfaces the relevant trainer mode.

### 90.5 Director cinematic moments

- [x] **Climax cinematic** triggered when Director state is Climax during a boss
      encounter: cinematic camera + audio swell + Niagara atmospheric ramp.
- [x] **Per-fighter Climax line bank** (cross-ref §63.3 mid-fight barks):
      special lines reserved for Climax moments.

### 90.6 Transparency

- [x] **Director transparency**: settings menu discloses that AI Director is
      active in single-player modes + lists the signals observed; opt- out
      toggle available (toggle locks single-player difficulty to manual).
- [x] **EU AI Act compliance** (cross-ref §80.4): Director classifier conformity
      assessment documented; per-player profile data subject rights honored
      (§80.6 DSR).

---

## 91. Split-Screen, Couch Co-op, Local Multiplayer, Hot-Seat (Deep)

### 91.1 Split-screen local versus

- [x] **Split-screen 1v1 mode**: vertical split or horizontal split (player
      pick) on PC + consoles where platform allows. Per-side HUD with per-side
      input glyphs.
- [x] **Per-side independent controller config**: each side configures their own
      scheme + accessibility preset (cross-ref §53).
- [x] **Performance scaling for split-screen**: render budget split across two
      views; fps target preserved at 60.

### 91.2 Couch co-op (story / Tekken Force / Devil Within / Konquest)

- [x] **Couch co-op** in Tekken Force, Devil Within, Konquest, Story where
      authored: 2-player local with split-screen or shared camera where
      appropriate.
- [x] **Drop-in / drop-out** mid-mission with quick re-pairing.
- [x] **Per-fighter co-op pairing**: 2 fighters fight together vs the shared
      enemy pool.

### 91.3 4-player local FFA

- [x] **4-player local FFA** on a single shared screen (no split) — works where
      the camera can show all 4; otherwise 4-way split-screen.
- [x] **Per-side controller pairing** + per-side HUD strip.

### 91.4 Hot-seat 1P

- [x] **Hot-seat mode** (cross-ref §74.1): single controller alternates between
      players; auto-rotate per-round + per-match.
- [x] **Per-account stat tracking** even in hot-seat: each side identifies with
      their account at match-setup.

### 91.5 Local-vs-LAN distinction

- [x] **Local match** (split-screen / couch / hot-seat) doesn't require network;
      LAN match (cross-ref §66.2) requires LAN setup. Per-mode UI explains the
      distinction.

### 91.6 Local match progress

- [x] **Local match XP attribution**: per-account XP earned even in local
      matches (where both sides identify); cross-references Mastery (§61.5) +
      Account level (§84.2).

### 91.7 Accessibility in local play

- [x] **Per-side accessibility settings**: one side can have one preset (e.g.,
      assist mode) while the other plays Classic.
- [x] **Per-side rumble independence** for adaptive-controller pairings (§53.1).

---

## 92. Co-op Online: Story / Tekken Force / Devil Within / Konquest / Crew Co-op

### 92.1 Story Co-op

- [x] **Story Mode online co-op** (2 players): play through Story with a friend;
      per-chapter cinematics played for both; per-fight 2v2 or 2-vs-CPU-pair
      handling.
- [x] **Drop-in / drop-out** during chapter boundaries.
- [x] **Per-account progression**: both players gain Mastery + Account XP;
      chapter completion stamps both saves.

### 92.2 Tekken Force / Devil Within / Konquest Co-op

- [x] **Online co-op** for §25 / §26 / §22.6: shared instance handoff across
      regions; client-server net (cross-ref §8.3).
- [x] **Per-mode session host migration**: host disconnect doesn't end the
      session — guest becomes host within 30s grace window.
- [x] **Per-mode loot share rules**: drop loot is per-player (so co-op doesn't
      penalize either side); cosmetic-only.

### 92.3 Crew co-op online (3v3 / 4v4)

- [x] **Crew Co-op online** (cross-ref §64.1 Tag + §32.5 KOF crew): friend-stack
      of 3-4 players vs another crew; per-player controls one fighter; team
      total HP shared.
- [x] **Per-crew lineup voting** pre-match: vote on bringing in next member
      after KO.

### 92.4 Co-op online matchmaking

- [x] **Co-op party matchmaking**: party of 2-4 queues together vs another
      party; MMR-balanced; per-platform input-method labeling respected
      (cross-ref §50).

### 92.5 Async co-op (Ghost-data co-op)

- [x] **Ghost co-op**: load a friend's ghost (cross-ref §62.7) as a co- op
      partner; useful for solo-friendly co-op with absent friend.

### 92.6 Co-op tutorials

- [x] **Per-mode co-op tutorial** explaining shared-objective semantics +
      per-player input ownership + drop-in/out rules.

### 92.7 Co-op-specific accessibility

- [x] **Assist player carry**: a stronger co-op player can carry a less- skilled
      player through hard sections; difficulty stays sized to the stronger
      player but loot/XP credit goes to both.

---

## 93. Marathon, Endurance, King of Iron Fist, Signature Event Modes

### 93.1 Marathon / Endurance events

- [x] **Marathon Mode** (24-hour event, charity-aligned cross-ref §83.3):
      community competes for the longest single-session streak; tier rewards at
      4h / 8h / 12h / 18h / 24h; auto-pause after 6h to remind player to rest.
- [x] **Endurance Tower**: 50-fight chain with HP carry-over; rare drop rewards;
      auto-save every 5 fights.
- [x] **Per-event broadcast hook** (cross-ref §51 esports + §83.3 charity):
      Marathon's last 8 hours streamed by partner creators.

### 93.2 King of Iron Fist Tournament (Tekken-style 8-fighter ladder)

- [x] **King of Iron Fist Tournament**: 8-fighter elimination ladder across the
      full launch roster; per-bracket cinematic between fights; final-fight
      cinematic with Heihachi-style throne-room set; per-fighter unique ending
      illustration per win.
- [x] **Per-character unlock condition**: certain hidden fighters / alt costumes
      unlock after specific King of Iron Fist completion conditions.

### 93.3 Signature event modes

- [x] **WrestleMania-style PPV event** (WWE ruleset): 8-match card with
      cinematic walk-outs + commentary intermissions + custom title belt
      reveals.
- [x] **UFC International Fight Week event** (UFC ruleset): 4-event card with
      weigh-ins + walkouts + post-fight pressers.
- [x] **SoulCalibur Mishima Cup** (SC ruleset): 16-fighter weapon-master
      tournament with per-fight modifier roulette.
- [x] **EVO-style Top 8 event** with bracket setup, broadcast overlay, caster
      polls (cross-ref §79.2).
- [x] **Def Jam Crew Wars** (DJ ruleset): 4v4 crew elimination tournament with
      hip-hop set production between matches.

### 93.4 Limited-fighter-pool tournaments

- [x] **Limited-pool tournament** stipulation: configure tournament to restrict
      the fighter pool (e.g., "only fighters under 6'0", "only
      grappler-archetype fighters", "no DLC fighters") for TO-curated events.
- [x] **Random-roll roster** per-event option (cross-ref §79.3 Wildcard).

### 93.5 Asymmetric horde mode

- [x] **Horde Mode**: 1 boss-controlled (CPU or guest player) vs 3-4 crew of
      players; boss has elevated HP + cinematic moves; team wins by depleting
      boss HP within time limit.
- [x] **Boss-rotation co-op**: players take turns being the boss across matches.

### 93.6 Speedrun race mode

- [x] **Speedrun Race**: 2-4 players race through Arcade ladder side-by- side;
      broadcast view shows all racers; finish line at boss KO; per-race
      leaderboard.
- [x] **Speedrun spectator overlay** (cross-ref §51 esports): timer + per-racer
      fight count + per-racer fighter portrait + lap-split visualization.

### 93.7 Death Match (single round sudden death)

- [x] **Death Match** stipulation: single round, no time limit, sudden death —
      first decisive hit wins; ruleset-specific definition (MK first Fatal Blow
      lands wins; SF first Drive Impact KO wins; UFC first KO; WWE first
      finisher pin; SC first ring-out; DJ first env-finisher).

---

## 94. Privacy-by-Design, DPIA, Sub-Processor Registry, Extended Per-Region Compliance

### 94.1 Privacy-by-design per feature

- [x] **Privacy-by-design documentation** per feature added: data collected,
      lawful basis, retention, subject rights impact, cross-border transfer
      mechanism.
- [x] **Per-feature DPIA (Data Protection Impact Assessment)** required for
      features touching identifiable / sensitive data (cross-ref §80.1 GDPR).
- [x] **Privacy review gate** at every release-gate (cross-ref §27).

### 94.2 Sub-processor registry

- [x] **Public sub-processor list** at `V2/legal/sub-processors.md` and
      `apps/v2/web/legal/sub-processors`: per-vendor name, processing purpose,
      jurisdiction, contract reference, data categories accessed.
- [x] **30-day notice** to player base for new sub-processor additions
      (cross-ref §85.3 announcement channel).
- [x] **Per-platform DPA** with each platform owner (Sony / Microsoft / Nintendo
      / Steam / Epic / cloud providers).

### 94.3 California AB 2273 (Age-Appropriate Design Code)

- [x] **AADC compliance** for minor accounts in California: data minimization,
      default-private privacy settings, no behavioral profiling for minors, no
      dark patterns.
- [x] **Per-account jurisdiction detection** + AADC enforcement on detected
      California minors.

### 94.4 Quebec Bill 96 / Bill 25

- [x] **Quebec Bill 96** French-language compliance (cross-ref §54.10).
- [x] **Quebec Bill 25** data subject rights compliance (cross-ref §80.2).

### 94.5 Brazil Marco Civil + LGPD

- [x] **Marco Civil da Internet** compliance for content moderation + user
      privacy in Brazil.
- [x] **LGPD (Brazilian GDPR-equivalent)** data subject rights compliance.

### 94.6 Italy + Belgium + France loot-box / surprise-mechanics extras

- [x] **Italy lottery-law** compliance: V2 has no loot boxes but transparent
      disclosure (cross-ref §68.5) and per-region store SKU adjustment if
      regulations change.
- [x] **Belgium loot-box ban**: V2 ships without loot boxes anywhere; Belgium
      SKU disclosure documents compliance.
- [x] **France in-game advertising disclosure**: per-French law disclose paid
      product placement (cross-ref §77.7 brand partnership) in pre-launch +
      per-event banner.

### 94.7 Privacy-impact periodic review

- [x] **Quarterly privacy review** by DPO + legal: review new sub- processors,
      new features, new region launches, regulatory changes; published summary
      internally + sanitized public version.

### 94.8 Right-to-be-forgotten + audit trail

- [x] **Erasure audit trail** (cross-ref §80.6): every erasure request logs
      request → action → confirmation with retention of audit log (anonymized)
      per regulatory requirement.
- [x] **Per-erasure scope** documented (account / profile / replay anonymization
      / telemetry purge / cosmetic ledger).

### 94.9 Privacy ops on-call

- [x] **Privacy ops on-call rotation** for breach response (cross-ref §80.1 72h
      breach SLA); documented playbook + escalation path.

Implemented §94 through `PrivacyComplianceExtended_V2_Contract.json`,
`V2/docs/legal/privacy-compliance-extended.md`,
`V2/docs/legal/privacy-by-design-dpia.md`,
`V2/docs/legal/privacy-ops-on-call.md`, `V2/legal/sub-processors.md`,
`apps/v2/web/legal/sub-processors/`, DSR erasure-scope audit trail support in
`@v2/themis-privacy-dsr-routing`, Playwright coverage for the public legal
registry, and `check-v2-privacy-compliance-extended.py` in CI.

---

## 95. Studio Wellness: Crunch Policy, Mental Health, Sensitivity Reading, DEI Consultancy [P2]

> **Phase tag rationale:** internal-process / studio-ops scope; not user-facing
> at launch but must ship by Year-1 (well-being policy is a Maat compliance
> commitment). Subsection bullets carry the parent's `[P2]` unless overridden.

V2 is a multi-year production. Studio wellness is a launch-readiness
prerequisite, not a nice-to-have.

### 95.1 No-crunch commitment

- [ ] **No-crunch commitment** documented at `V2/docs/production/no-crunch.md`:
      40-hour-baseline work week; documented exception process for genuine
      emergencies (cert deadline + critical-path-blocker) with mandatory
      time-off compensation after. — re-marked [~] 2026-06-12: policy doc exists
      in-repo; the operating commitment is a real-world HR practice of a staffed
      studio. `blocked:human`
- [ ] **Per-discipline workload monitoring**: per-team weekly hours reported to
      studio leadership; flagged for review if averages exceed baseline. —
      re-marked [~] 2026-06-12: ongoing HR operation; no staffed teams exist.
      `blocked:human`
- [ ] **PTO mandatory minimums** + PTO usage tracked + PTO carryover caps to
      prevent accumulation. — re-marked [~] 2026-06-12: ongoing HR operation;
      cannot be evidenced in-repo. `blocked:human`
- [ ] **Weekend / holiday work prohibited** except for designated on-call ops;
      voluntary opt-in only with comp time. — re-marked [~] 2026-06-12: ongoing
      HR operation; cannot be evidenced in-repo. `blocked:human`

### 95.2 Mental health support

- [ ] **EAP (Employee Assistance Program)** for all permanent + contract staff
      with on-site / virtual counseling + crisis line. — re-marked [~]
      2026-06-12: external EAP vendor program; no staff or vendor contract
      exists. `blocked:external`
- [ ] **Trauma-informed workplace** policy for staff handling sensitive content
      (gore moderation, sexual-harassment reports, child-safety moderation). —
      re-marked [~] 2026-06-12: policy doc exists; the workplace program is a
      real-world HR operation. `blocked:human`
- [ ] **Mental health days** allocated separately from sick / PTO. — re-marked
      [~] 2026-06-12: ongoing HR benefit; cannot be evidenced in-repo.
      `blocked:human`
- [ ] **Per-discipline mental-health check-in** rotation with leads. — re-marked
      [~] 2026-06-12: ongoing HR operation; no staffed leads exist.
      `blocked:human`

### 95.3 Sensitivity reader & cultural review

- [ ] **Sensitivity readers** contracted per cultural / ethnic / gender /
      religious / disability identity for narrative content + character design +
      costume design + lore page review. — re-marked [~] 2026-06-12: external
      contractor engagements; none executed. `blocked:external`
- [ ] **Per-fighter cultural review** sign-off documented in
      `V2/balance/fighters/<fighter>/sensitivity-review.md`. — re-marked [ ]
      2026-06-12: no per-fighter `sensitivity-review.md` files exist on disk;
      updated 2026-06-12: honest pending review packets authored for all 60
      roster fighters and the ledger now fails closed at `pending` (the previous
      all-approved ledger fabricated signoffs from reviewers that were never
      contracted; `check-v2-studio-wellness.py` now enforces the fail-closed
      state). Re-marked [~]: the sign-off itself requires the contracted
      sensitivity-reader pool ([~] above) and authored character content to
      review — both external to this repo today. `blocked:external`
- [ ] **Per-region cultural review** for fighters / stages / commentary /
      cinematics (cross-ref §54.6 cultural sensitivity). — re-marked [~]
      2026-06-12: real-world reviewer engagement; no content exists to review.
      `blocked:human`
- [ ] **Community sensitivity advisory board** for major content drops. —
      re-marked [~] 2026-06-12: external board formation; cannot be evidenced
      in-repo. `blocked:human`

### 95.4 DEI consultancy & accessibility consultancy

- [ ] **DEI consultancy partnership** for hiring practices + content review +
      community management. — re-marked [~] 2026-06-12: external partnership;
      none executed. `blocked:external`
- [ ] **Accessibility consultancy partnership** (AbleGamers / similar) for
      accessibility feature design + verification + community engagement. —
      re-marked [~] 2026-06-12: external partnership; none executed.
      `blocked:external`
- [ ] **Per-feature DEI / accessibility review gate** at every release. —
      re-marked [~] 2026-06-12: ongoing release-process gate; no releases or
      reviewers exist. `blocked:release`

### 95.5 Compensation & ownership

- [ ] **Transparent compensation bands** per role. — re-marked [~] 2026-06-12:
      HR practice for a staffed studio; policy doc exists in-repo.
      `blocked:human`
- [ ] **Bonus / equity / royalty structure** documented + reviewed annually. —
      re-marked [~] 2026-06-12: annual review is an ongoing HR operation.
      `blocked:human`
- [ ] **Per-shipping-product credit allocation** with documented criteria
      (months worked + contribution quality). — re-marked [~] 2026-06-12: no
      shipping product or staff exist; criteria doc exists in-repo.
      `blocked:human`

### 95.6 Inclusion & harassment policy

- [ ] **Zero-tolerance harassment policy** documented + enforced; anonymous
      reporting channel + independent ombudsperson. — re-marked [~] 2026-06-12:
      policy doc exists; enforcement, reporting channel, and ombudsperson are
      real-world operations. `blocked:human`
- [ ] **Bystander training** mandatory. — re-marked [~] 2026-06-12: real-world
      training program; no staff exist. `blocked:human`
- [x] **Per-incident investigation SLA** documented.

### 95.7 Remote / hybrid work

- [x] **Remote / hybrid work policy** documented per discipline.
- [x] **Per-region time-zone respect**: meeting hours constrained to overlap
      windows; async-first culture documented.

### 95.8 Wellness budget

- [ ] **Per-employee annual wellness stipend** for gym / counseling / ergonomic
      equipment. — re-marked [~] 2026-06-12: HR benefit program; no employees
      exist. `blocked:human`
- [ ] **Studio-wide quarterly wellness day** (no meetings, no shipping
      pressure). — re-marked [~] 2026-06-12: ongoing studio operation; cannot be
      evidenced in-repo. `blocked:human`

### 95.9 Production-quality oath

- [x] **No-Stub commitment** (cross-ref Oshun-repo `CLAUDE.md` "Zero Tolerance
      for Stubs"): every checked task verified in code; partial implementations
      stay unchecked; production quality is a wellness issue, not just a quality
      issue (avoid crunch-driven stubs).

§95 in-repo artifacts are policy documents and a contract schema; the operating
HR programs they describe are re-marked `[~]` above (2026-06-12) pending a
staffed studio. Documented through `StudioWellness_V2_Contract.json`,
`V2/docs/production/studio-wellness.md`, `V2/docs/production/no-crunch.md`,
`V2/docs/production/mental-health-and-trauma-support.md`,
`V2/docs/production/sensitivity-cultural-review.md`,
`V2/docs/production/dei-accessibility-consultancy.md`,
`V2/docs/production/compensation-credits.md`,
`V2/docs/production/inclusion-harassment.md`,
`V2/docs/production/remote-hybrid-work.md`,
`V2/docs/production/wellness-budget.md`,
`V2/docs/production/no-stub-quality-oath.md`,
`V2/balance/fighters/sensitivity-review-ledger.csv`, and
`check-v2-studio-wellness.py` in CI.

---

## 96. Racing Component: Overview & Integration

V2 ships a full AAA racing component as a peer genre to the fighting game,
drawing on the lineage of:

- **Need for Speed: Most Wanted (2005)** — Blacklist career progression,
  open-world police-pursuit world, heat-level escalation, dramatic cop AI.
- **Split/Second** — environmental power-play events triggered by drafting /
  drifting / proximity, dramatic track-altering hazards.
- **Blur** — pickup-driven combat racing with offensive / defensive / utility
  powers.
- **Death Race** — weaponized vehicles, lethal armaments, environment- hazard
  finishers, brutal aesthetic.
- **GRID** — sim-leaning handling spectrum, flashback time-rewind,
  damage-realism, race-officiating clarity.
- **Need for Speed: Carbon** — canyon duel mode, crew system, drift scoring,
  territory wars, autosculpt body-kit authoring.
- **Need for Speed: Underground 2** — open-world traversal, deep customization
  (body / paint / vinyl / decal / wheel / tire / engine / ECU / NOS), URL drag,
  drift, outrun, hidden parts hunt.
- **Need for Speed: Hot Pursuit** — cops-vs-racers asymmetric multiplayer,
  weaponized cop loadouts, autolog social rivalry.

Plus additional vehicle classes:

- **Off-Road / Rally**: dirt physics, jumps, suspension dynamics, co- driver
  pacenotes.
- **Bikes**: motorcycle physics, lean, drift, wheelies, bike-on-bike combat.
- **Futuristic / Anti-Grav / Pod-Racer**: hover physics, magnetic tracks, energy
  weapons, shield bands, signature mode for sci-fi feel (WipEout / F-Zero / SW
  Episode 1 podracer).

### 96.1 Integration with fighting game

- [x] **Racing & Fighting are one product**: shared roster (fighters can drive;
      per-fighter signature vehicle), shared online backbone, shared cosmetic
      shop + Battle Pass, shared profile + match history + currency ledger.
- [x] **Shared crossover modes** (cross-ref §118): get-out-and-fight
      transitions, vehicle-on-vehicle melee, fighter-as-driver dialogue /
      cinematic.
- [x] **Mode-pivot UI**: from main menu, players can pivot between Fighting
      Modes Hub and Racing Modes Hub (or shared Mixed Hub for crossover modes).
- [x] **Per-account stats split by genre**: ranked / Mastery / progression
      tracked separately for fighting vs racing; shared Account level + Prestige
      accumulates both.

### 96.2 Racing component scope

- [x] **Vehicle roster ≥ 70 vehicles at launch** across cars / bikes / off-road
      / futuristic / specialty (cross-ref §111).
- [x] **Tracks ≥ 40 at launch** across circuit / sprint / drift / drag /
      off-road / rally / open-world districts / canyon / sky / desert / city /
      futuristic (cross-ref §99).
- [x] **Racing-side career arc** with ≥ 30 hours of single-player content
      (cross-ref §101).
- [x] **Online racing parity**: cross-play across PC / PS5 / XSX / Switch2 with
      input-method labeling (wheel vs gamepad vs KB+M).

### 96.3 Product promise extension

- [x] V2 racing must feel like the games it's emulating:
  - **Most Wanted ruleset**: open-world cop chases feel like dramatic cinematic
    escalation, not arcade combat.
  - **Split/Second ruleset**: environmental power-plays feel signature,
    track-altering, and tactically deployable.
  - **Blur ruleset**: pickup combat feels arcade-fun, balance-tuned, with
    counter-power play.
  - **Death Race ruleset**: weaponized racing feels brutal and lethal with
    cinematic gore (per gore tier).
  - **GRID ruleset**: sim handling is unforgiving but learnable; flashback
    rewards thinking.
  - **Carbon ruleset**: canyon duels feel cinematic and one-on-one tense; crew
    dynamics deep.
  - **NFSU2 ruleset**: customization depth is the headline feature; open-world
    traversal is generous.
  - **Hot Pursuit ruleset**: cops-vs-racers asymmetric feels balanced and
    replayable.

Implemented §96 through `RacingOverviewIntegration_V2_Contract.json`,
`V2/docs/racing/racing-overview-integration.md`,
`V2/balance/racing/racing-launch-scope.json`, a section 96 bridge update in
`V2/docs/integration/racing-ecosystem-bridge.md`, and
`check-v2-racing-overview-integration.py` in CI.

---

## 97. Vehicle Framework: Chassis, Drivetrain, Engine, Suspension, Tire, Damage

### 97.1 Vehicle data spine

- [x] `UDA_Vehicle` (Primary Data Asset) fields: ID, displayName, class (car /
      bike / off-road / pod / specialty), manufacturer (licensed or original),
      model year, chassis archetype, drive-train (FWD / RWD / AWD / 4WD /
      hover), default engine, default transmission (manual / auto / sequential),
      stock stats (top speed / 0-60 / handling / braking / mass), default
      loadout, livery options, lore blurb, rights metadata (cross-ref §77.5
      IP/NIL/Licensing).
- [x] `UDA_VehicleTune` fields: engine swap reference, ECU map, gear ratios,
      final drive, suspension settings (camber / toe / ride height / spring rate
      / damper rate), brake bias, differential preset, weight distribution, NOS
      capacity, AWD power split.
- [x] `UDA_VehicleCustomization` fields: body kit slot set, paint layer
      references, vinyl / decal layer references, wheel + tire, neon / underbody
      glow, window tint, exhaust tip, license plate, hood ornament, roof scoop,
      hydraulics, sound system (cosmetic).
- [x] `UDA_VehicleDamage` fields: damage tier states (Clean / Scuffed / Damaged
      / Wrecked / Totaled) + per-tier visual transforms (decal / bend
      deformation / part fall-off) + per-tier performance impacts (steering pull
      / engine power loss / brake failure).

### 97.2 Per-chassis archetype components

- [x] **Chassis archetypes**: Compact / Sedan / Coupe / Supercar / Hypercar /
      Muscle / Tuner / Truck / SUV / Rally / Buggy / Monster Truck / Sport Bike
      / Cruiser / Pod Racer / Hover / Mech-Vehicle.
- [x] **Per-chassis collision profile**: bounding box + center-of-mass + crumple
      zones per chassis class.
- [x] **Per-chassis aerodynamic profile**: drag coefficient + downforce curve at
      speed bands.

### 97.3 Drive-train system

- [x] **Drive-train logic**: FWD (front-wheel torque distribution + over- /
      understeer behavior), RWD (rear-wheel power + oversteer-friendly), AWD
      (configurable power split front/rear), 4WD (locked diff for off-road),
      hover (no traction; thrust + lift).
- [x] **Per-drivetrain handling personality** baked into the physics model;
      per-vehicle tuning overrides for fine control.

### 97.4 Engine & RPM model

- [x] **Per-engine torque curve** + RPM peak power + redline + idle RPM;
      authored as `UCurveFloat`.
- [x] **Per-engine sound profile** (cross-ref §115 audio) keyed to RPM bins
      (idle / cruise / mid / high / redline).
- [x] **Turbo / supercharger** option per engine: boost curve at RPM + spool-up
      delay + blow-off-valve sound.
- [x] **Engine swap** in customization (cross-ref §100.4): vehicle's stock
      engine replaced with a different unit; per-swap power / torque / mass
      impact.

### 97.5 Transmission

- [x] **Manual / auto / sequential transmission** with per-vehicle gear ratios +
      final drive; player can shift manually via paddle / stick / button in any
      transmission mode (auto suggests via shift light).
- [x] **Shift logic**: per-gear shift time (ms); fast-shift bonus for
      perfectly-timed shifts (drag-race mechanic per §106.3).
- [x] **Reverse gear** + clutch (manual only) + clutch-kick drift entry.

### 97.6 Suspension model

- [x] **Per-vehicle suspension profile**: spring rate + damper compression +
      rebound + anti-roll bar; affects body roll / pitch / dive / squat.
- [x] **Tunable suspension** in customization: ride height + camber + toe +
      caster.
- [x] **Off-road suspension long-travel** profile for rally / buggy / monster
      truck (cross-ref §107).
- [x] **Bike suspension** front-fork + rear-shock with lean-angle influence
      (cross-ref §108).
- [x] **Hover suspension** thrust + lift vectors for pod / anti-grav (cross-ref
      §109).

### 97.7 Tire model

- [x] **Per-tire grip profile**: longitudinal grip + lateral grip + slip-angle
      curve + slip-ratio curve.
- [x] **Per-tire-compound**: street / sport / track / drag (slick) / drift /
      rally (knobby) / mud / sand / snow / off-road / racing semi-slick.
- [x] **Tire temperature** model in sim ruleset: cold / optimal / hot with
      corresponding grip falloff.
- [x] **Tire wear** in sim ruleset: longer races degrade tires; pit- stop tire
      change available.
- [x] **Per-surface friction** lookup: asphalt / concrete / dirt / mud / sand /
      snow / ice / water / grass / gravel.

### 97.8 Damage model

- [x] **5-tier visual damage**: Clean → Scuffed → Damaged → Wrecked → Totaled,
      blended via material parameter + bone-skin deformation + part-fall-off.
- [x] **Per-tier performance damage** (sim ruleset only): steering pull after
      impact, engine power loss after head-on, brake failure on rear-end
      collision, transmission seize on prolonged abuse.
- [x] **Cosmetic-only damage** option (arcade ruleset): visual damage progresses
      but performance unaffected.
- [x] **Catastrophic damage**: Totaled state triggers in-cinematic
      retire-from-race (sim ruleset) or get-out-and-fight transition (crossover
      §118).
- [x] **Damage repair** at pit lane / garage / between rounds; cost drawn from
      race winnings.

### 97.9 Per-vehicle weight & physics tuning

- [x] **Per-vehicle mass** (1000-3500kg passenger / 200-400kg bike / 500-800kg
      pod racer).
- [x] **Per-vehicle center-of-mass** + moment-of-inertia tuning.
- [x] **Per-vehicle traction** ceiling per surface.

### 97.10 Vehicle authoring tooling

- [x] **Per-vehicle authoring spreadsheet** at
      `V2/balance/vehicles/<vehicle>.csv` with all stat fields; CSV ↔ DataTable
      round-trip per §1.4.
- [x] **Per-vehicle dyno-test harness** in editor: spin up the vehicle on a
      dyno + measure power curve / acceleration / top speed against target; CI
      gate on regression.

Implemented §97 through `VehicleFramework_V2_Contract.json`,
`V2/docs/racing/vehicle-framework.md`, `V2/balance/vehicles/akashi_sx.csv`,
expanded `V2Vehicles` data/physics structs and automation specs, and
`check-v2-vehicle-framework.py` in CI.

---

## 98. Vehicle Physics & Handling (Arcade-Sim Spectrum)

### 98.1 Handling spectrum

- [x] **Arcade-Sim spectrum** (continuous 0-100 dial): Arcade end = forgiving
      steering + auto-counter-steer + assisted braking; Sim end = realistic grip
      loss + manual counter-steer + brake balance matters.
- [x] **Per-mode default** on spectrum: Most Wanted / Blur / Death Race lean
      Arcade; GRID / Hot Pursuit lean Sim; Carbon canyon mid-arcade; NFSU2
      customization-focused arcade.
- [x] **Per-player handling preference** persisted in profile; in casual modes
      player picks; in ranked, ruleset locks.

### 98.2 Driving assists

- [x] **Assists library**: ABS (anti-lock brakes), TCS (traction control),
      Stability Control, Steering Assist, Auto-Brake at Corners, Racing Line
      Display, Cornering Suggestion, Brake Assist, Anti-Spin,
      Auto-Counter-Steer.
- [x] **Per-assist toggle** + per-ranked-tier eligibility (assists off =
      top-tier ranked default).

### 98.3 Race-specific physics

- [x] **Drafting / slipstreaming** model: per-vehicle drag reduction curve when
      within N meters behind another vehicle.
- [x] **Side-draft / dirty air**: trailing vehicle suffers handling instability
      in corners when too close.
- [x] **Bump-drafting** in oval-style tracks: legal pushing without breaking
      handling.
- [x] **NOS / Nitrous Oxide**: per-vehicle boost capacity + duration + recharge
      rule (race-victory recharge / pickup-recharge / pickup- free with charge
      bar).
- [x] **Speed bands** for futuristic mode: zones of accelerated speed +
      cinematic-aware framing.

### 98.4 Wet / weather physics

- [x] **Per-weather grip multiplier**: rain reduces grip by 15-25% depending on
      tire compound + intensity; snow / ice 30-50% grip reduction + slide-prone.
- [x] **Per-stage weather dynamic**: weather can change mid-race in sim ruleset;
      locked in ranked / esports.
- [x] **Per-surface puddle** model: physical puddles affect hydroplane handling.

### 98.5 Determinism

- [x] **Deterministic vehicle physics** for online sync: same input stream +
      same RNG seed = same outcome across clients. Cross-ref §10 rollback
      netcode applies to racing where ≤ 8 players + small sim footprint allows.
- [x] **Floating-point determinism** enforced (cross-ref §10.1).

### 98.6 Performance physics LOD

- [x] **Distant-vehicle physics LOD**: vehicles > 200m behind player or
      otherwise off-screen run reduced-fidelity physics with pose interpolation
      for visible-pose accuracy.

Implemented §98 through `RacePhysicsHandling_V2_Contract.json`,
`V2/docs/racing/vehicle-physics-handling.md`,
`V2/balance/racing/handling-spectrum.json`, expanded `V2RacePhysics` handling
and race-physics structs, and `check-v2-race-physics-handling.py` in CI.

---

## 99. Racing Tracks, Circuits, Open World

### 99.1 Track categories

- [x] **Circuit** (closed loop, lap-based): standard race; per-track sector
      splits + ideal racing line + AI racing line.
- [x] **Sprint** (point-to-point): no laps; one-way path.
- [x] **Drift** (closed loop scored): score-based track with drift zones marked.
- [x] **Drag** (straight-line): quarter-mile / half-mile / kilometer with start
      light + perfect-launch / perfect-shift bonuses.
- [x] **Speed Trap** (radar-stationed point-to-point): top-speed at each radar
      checkpoint counts.
- [x] **Eliminator** (last-place-eliminated per N seconds, circuit variant).
- [x] **Time Trial** (ghost lap; leaderboard); ghost data shared (cross- ref
      §62.7).
- [x] **Knockout** (last-place-out per lap).
- [x] **Pursuit / Patrol** (Hot Pursuit + Most Wanted; cross-ref §103).
- [x] **Open-world cruise** (no race; free-roam social hub).

### 99.2 Open-world cities & districts

- [x] **Open-world Metro City** (NFS Most Wanted / Carbon-inspired) with ≥ 8
      distinct districts: urban downtown / industrial port / suburb /
      highway-loop / harbor / canyon-mountain / desert outskirts / airport.
- [x] **Per-district aesthetic identity**: downtown neon (NFSU2 vibe) /
      sun-baked desert (Hot Pursuit) / canyon cliffs (Carbon canyon duel ready)
      / rainy port (Most Wanted) / harbor-bridge (NFSU2 bayfront).
- [x] **Per-district AI traffic density** + per-district pedestrian density
      (where applicable + per-region content variant).
- [x] **Per-district open-world events**: marked events on the world map;
      trigger by driving up to the event marker.
- [x] **Day / night cycle** in open world (cross-ref §81.2) + per-time- of-day
      cop density variation.

### 99.3 Per-track production

- [x] **Per-track racing line** authored by designers + AI-line override
      computed via offline solver.
- [x] **Per-track sector splits** for time-trial leaderboards (cross-ref §114).
- [x] **Per-track interactable hazards** (cross-ref §105 Power-Play events).
- [x] **Per-track 360° spectator camera locations** for broadcast (cross-ref
      §113).
- [x] **Per-track photo-mode hot-spots** authored as recommended composition
      framings (cross-ref §114.2).

### 99.4 Track inventory at launch

- [x] **Circuit tracks**: ≥ 12 (urban / mountain / desert / nighttime / coastal
      / industrial / fictional-futuristic).
- [x] **Sprint tracks**: ≥ 10 (canyon descents / drag-coupled / city sprints /
      forest highways).
- [x] **Drift tracks**: ≥ 6.
- [x] **Drag strips**: ≥ 4 (street drag + airfield drag + canyon drag).
- [x] **Off-road / rally tracks**: ≥ 5 (forest stage / desert stage / snow stage
      / mud stage / mixed).
- [x] **Futuristic tracks**: ≥ 3 (anti-grav sky-circuit / pod-racer canyon /
      orbital-station loop).

### 99.5 Track-authoring tooling

- [x] **In-engine Track Editor** (cross-ref §39 Create-an-Arena stage editor
      extension): place racing-line splines + sector triggers + hazard zones +
      cop spawn points + crowd zones.
- [x] **Community track sharing** via §41.4 gallery with moderation.

### 99.6 Track destruction & deformation

- [x] **Per-track persistent destruction state** during pursuit / combat racing
      (cross-ref §44.3 stage destruction): broken barriers / crashed traffic /
      debris piles persist across event cycle.
- [x] **Per-event destruction reset rules** (configurable).

### 99.7 Open-world faction control of districts

- [x] **Per-district faction-control state**: each open-world district
      controlled by a faction (cross-ref §22.5 + §82.4). Player allegiance
      determines per-district NPC behavior + cop density + event roster +
      cosmetic ad-banner content.
- [x] **Gang-war events** when player crosses into a rival faction's district:
      ambushes / blockades / chase-pursuit events.
- [x] **Faction-territory map UI** showing per-district control state +
      contested zones + boundary lines.
- [x] **Per-faction control unlocks**: claim territory → exclusive faction
      garage hub access + faction-specific event roster + bonus currency rate.

### 99.8 Dynamic world events

- [x] **Dynamic event spawner**: per-district random event scheduling (street
      race challenge / cop-pursuit ambush / time-trial billboard / drift
      competition / cargo escort / police chase escalation / Power-Play
      training).
- [x] **Per-event eligibility check** based on player vehicle / heat- level /
      time-of-day / weather / faction-state.
- [x] **Per-event cinematic spawn-in** with NPC voice line + map-marker ping.

### 99.9 In-world economy

- [x] **In-world establishments**: auto-shop (tune at shop discount) / paint
      shop / vinyl shop / specialty parts vendor / fast-food truck (cosmetic
      refuel) / motorcycle dealership / used-car lot.
- [x] **Per-shop visit cinematic** for first-time entrance; per-shop hours of
      operation tied to day/night cycle.
- [x] **Player-built shop placement** in player apartments / garages (cross-ref
      §117): player can place crew shops within their personal hub.

### 99.10 Day/night/weather-gated open-world quests

- [x] **Day-only quests**: certain quests / events spawn only during daylight
      hours (per-district sunrise/sunset times); per-quest lore reason (e.g.,
      daytime market event).
- [x] **Night-only quests**: stealth / underground events spawn only at night
      (per-district sunset/sunrise times); per-quest darkness mechanic (limited
      visibility / cop patrol pattern change).
- [x] **Weather-gated quests**: rain-only / fog-only / storm-only / snow-only
      quests; per-weather event reward bonus.
- [x] **Time-of-day overlapping quests**: rare quests requiring specific time +
      weather combo.

### 99.11 Hidden area discovery rewards

- [x] **Per-district hidden area** library: rare locations off the main map
      (rooftop overlook / underground tunnel / abandoned warehouse / hidden
      mountain ridge / submerged dock); per-area reward (rare cosmetic / hidden
      parts / lore page / collectible item).
- [x] **Per-area discovery achievement** stamps player profile per discovery
      (cross-ref §47.4).
- [x] **Per-district minimap fog-of-war**: explored areas revealed
      progressively; hidden areas blacked out until discovered.
- [x] **Hidden area community sharing**: per-account discovered area list
      shareable as code for friend exploration.

### 99.12 Per-district secret missions

- [x] **Per-district secret mission roster** (5-10 per district): event
      triggered by specific condition (drive past 3 times / approach with
      specific vehicle / hit a particular speed / find a specific NPC).
- [x] **Per-secret-mission unique reward**: rare cosmetic / unique title /
      hidden cinematic.

Implemented §99 through `RaceTracksOpenWorld_V2_Contract.json`,
`V2/docs/racing/race-tracks-open-world.md`,
`V2/balance/racing/track-open-world-launch.json`, expanded `V2RaceTracks`
track/open-world structs and automation specs, and
`check-v2-race-tracks-open-world.py` in CI.

---

## 100. Vehicle Customization & Tuning (NFSU2 Depth)

V2's customization is the NFSU2 / Carbon depth standard:

### 100.1 Visual customization

- [x] **Body kit slots**: front bumper / rear bumper / side skirts / hood / roof
      scoop / spoiler / fenders / mirrors / lights / window tints / hood
      ornament. Per-vehicle compatible-kit list (cross-ref §97 vehicle chassis
      archetype).
- [x] **Autosculpt-style geometry deformation** (Carbon): per-body-part width /
      height / curve sliders within authored bounds; per-slot independent
      autosculpt parameter.
- [x] **Paint system**: base color (full HSV picker) + per-vehicle paint sheen
      (matte / gloss / pearl / metallic / chrome / candy / iridescent /
      brushed-metal); multi-tone schemes (primary / secondary / accent /
      detail).
- [x] **Vinyl / decal painter** (cross-ref §37.3 decal editor extension):
      layer-based vinyls with blend modes + projection mapping; per- vehicle
      vinyl gallery + community vinyl gallery with moderation.
- [x] **Wheel customization**: rim design + finish (chrome / black / polished /
      colored) + size + offset + tire profile + tire wall stencil;
      per-wheel-design library ≥ 200 designs at launch.
- [x] **Neon / underbody glow** + color + per-zone control.
- [x] **Window tint** + per-glass-pane shade.
- [x] **Exhaust tip** + finish (chrome / black / titanium / carbon).
- [x] **License plate** (custom text where TRC permits; per-region filter);
      per-region plate template.
- [x] **Hydraulics** (cosmetic; per-corner lift) (Def Jam / NFSU2 throwback).
- [x] **Sound system** (cosmetic; visible speakers + subwoofer in trunk).

### 100.2 Performance tuning

- [x] **Engine swap**: replace stock engine with higher-power unit; per-swap
      cost + per-swap mass change + per-swap RPM curve adjustment.
- [x] **ECU tune**: adjust fuel map + ignition timing + boost pressure; tradeoff
      between power / fuel economy / reliability.
- [x] **Turbo / supercharger** install / upgrade (cross-ref §97.4).
- [x] **NOS / Nitrous** capacity + injection rate + activation curve.
- [x] **Transmission upgrade**: shorter gear ratios + final drive + shift speed.
- [x] **Suspension tune**: spring rate + damper compression / rebound +
      anti-roll bar + ride height + camber + toe + caster.
- [x] **Brake upgrade**: larger discs + caliper count + brake bias.
- [x] **Drivetrain conversion** (limited): RWD to AWD conversion (per- vehicle
      eligibility); cost premium.
- [x] **Weight reduction**: per-component removal (back seats / sound deadening
      / spare tire) reducing mass; per-removal handling tradeoff.

### 100.3 NOS / boost / power-up integration

- [x] **NOS canister** install: visible cosmetic + capacity (tunable in §100.2);
      per-canister duration + bottle-shake recharge.
- [x] **Charge meter** for power-up modes (cross-ref §104): per-meter- tier
      charge / discharge rules.

### 100.4 Save / share / gallery

- [x] **Per-vehicle save slot** (10+ per user): saved customization + tune
      profile.
- [x] **Shareable as code**: copy-paste customization code to share with
      friends.
- [x] **Community vehicle gallery** (cross-ref §41.4) with featured top- designs
      of the week.

### 100.5 Underground 2-style hidden parts hunt

- [x] **Hidden parts hunt** in open world: rare upgrade parts hidden in the
      city; discover via exploration / event-completion / hidden- map-marker
      reveal.
- [x] **Per-region hidden parts pool** rotated weekly.

### 100.6 Pre-purchase preview

- [x] **Test drive** before purchase: try a vehicle / part / tune in a sandbox
      track before committing currency.

### 100.7 Painted customization for bikes & off-road

- [x] **Bike customization**: tank / fairing / wheels / exhaust / seat /
      handlebars; per-bike eligible kit list.
- [x] **Off-road / rally customization**: snorkel / light bar / bull bar / winch
      / roof rack / mud-flap; per-vehicle eligible kit list.
- [x] **Pod-racer customization**: engine pod / cockpit / vinyl / underbody
      energy-field glow / trail color.

Implemented §100 through `VehicleCustomizationTuning_V2_Contract.json`,
`V2/docs/racing/vehicle-customization-tuning.md`,
`V2/balance/vehicles/customization-depth.json`, expanded `V2Vehicles`
customization/tuning structs and automation specs, and
`check-v2-vehicle-customization-tuning.py` in CI.

---

## 101. Racing Career Mode (Most Wanted Blacklist + Carbon Crew + Territory)

### 101.1 Career arc

- [x] **Single-player career arc**: start at street-level / unranked; climb a
      Most Wanted-style Blacklist of 15 named rivals + Carbon- style crew
      progression; ≥ 30 hours of content at launch.
- [x] **Per-Blacklist-rival** event: rival has a signature event type (sprint /
      circuit / drift / drag / canyon duel / pursuit); win unlocks the rival's
      signature vehicle + customization parts + story chapter.
- [x] **Per-rival cinematic**: pre-race intro + post-race trash-talk + defeat
      cinematic (NFS Most Wanted-style).

### 101.2 Territory war (Carbon-style)

- [x] **Territory map** of open-world districts: claim a territory by winning
      the territory's signature race + defending it from rival- crew challenges.
- [x] **Per-territory perks**: bonus currency + bonus customization parts +
      visible territory flag.
- [x] **Crew dynamic** (cross-ref §117 crew system): recruit crew members + each
      crew member has a specialty (blocker / scout / fabricator / drafter).

### 101.3 Heat system (Most Wanted-style police escalation)

- [x] **Heat levels 1-6**: each successful pursuit-completion event raises heat;
      higher heat = more aggressive cops + spike strips + roadblocks +
      helicopter (cross-ref §103).
- [x] **Per-heat-level cop loadout**: standard squad car → sergeant
      pursuit-vehicle → federal SUV → corvette interceptor → SWAT armored /
      cop-helicopter.
- [x] **Cooldown mechanic**: lay-low at a safehouse / garage to lower heat over
      time; vehicle paint change (cross-ref §100.1) reduces heat by
      re-identifying.

### 101.4 Story progression

- [x] **Per-chapter cinematic** between major Blacklist rivals + per-
      territory-claim cinematic + per-crew-recruit cinematic.
- [x] **Per-chapter branching choices** influence which Blacklist rival you face
      next + which crew member joins.

### 101.5 Currency & progression

- [x] **Race-earned currency** spent on vehicles / customization parts / tunes;
      transparent per-event payouts.
- [x] **Reputation system**: per-event style points (drift / takedown / drafting
      / cop-evasion) feed reputation tier; per-tier unlocks.

### 101.6 Final Blacklist boss event

- [x] **#1 Blacklist boss**: cinematic canyon-duel finale (cross-ref §106) +
      post-victory career ending cinematic.

### 101.7 Racing sponsorship system

- [x] **Per-fighter sponsorship slots**: 1 primary + 2 secondary sponsor logo
      slots visible on car / suit / banner.
- [x] **Per-event sponsor unlock condition**: win a race / hit a podium /
      lap-record / stylish-finish to unlock sponsorship offer.
- [x] **Sponsorship contract tier**: Bronze (small payout, tiny logo) / Silver /
      Gold / Platinum (per-race payout proportional + brand visibility
      benchmarks).
- [x] **Per-region sponsor variant**: per-region brand pool aligned with local
      market reality (no controversial brand in conservative regions).
- [x] **Per-sponsor brand-fit scoring**: brand-fit increases payout (e.g.,
      energy-drink brand for street-racer = high fit; luxury watch brand for
      off-road truck = low fit).
- [x] **Sponsorship loyalty bonus** for multi-event partnerships.
- [x] **Sponsor banner placement** on per-track signage (when an event enters
      that district).

### 101.8 Champion progression & retirement

- [x] **Champion progression tier**: rookie → contender → champion → legend →
      hall-of-fame.
- [x] **Per-tier cinematic** at promotion.
- [x] **Retirement option**: player can voluntarily retire driver at
      Hall-of-Fame tier; cinematic + permanent profile flair + leaderboard
      entry; new-driver-career option restarts the climb.

Implemented §101 through `RacingCareer_V2_Contract.json`,
`V2/docs/racing/racing-career.md`, `V2/balance/racing/racing-career.json`,
expanded `V2RaceModes` career catalog structs and automation specs, and
`check-v2-racing-career.py` in CI.

---

## 102. Race Mode Variants

### 102.1 Circuit Race

- [x] **Circuit Race** (closed-loop, N laps): standard race rules; per- ruleset
      modifications (lap count / fuel / tire wear / weather).
- [x] **Per-event start grid**: rolling start (open-world events) / grid start
      (formal circuits) / drag-strip start (drag events).

### 102.2 Sprint Race

- [x] **Sprint Race** (point-to-point): no laps; one-way path; per-event start /
      finish gate.

### 102.3 Drag Race

- [x] **Drag Race** (straight-line): quarter-mile / half-mile / kilometer
      variants; per-launch perfect-launch bonus; per-shift perfect-shift bonus;
      redline visual cue; tilt-sensitive driver-input (in arcade ruleset).
- [x] **Christmas tree start light**: NHRA-style staging tree with pre- stage /
      stage / amber / green / red foul lights; per-light timing sequence;
      per-launch reaction-time grade (-/0.000s perfect / 0.001 red foul);
      reaction time recorded per launch in profile (cross-ref §47.3).
- [x] **Drag-strip end-of-lane**: time + speed-trap + 60-foot intermediate
      split + perfect-launch indicator captured per pass.
- [x] **Burnout pre-launch**: per-vehicle burnout animation (tire smoke +
      heat-up) to warm tires; per-tire-temp grip bonus on launch.
- [x] **Drag bracket race** stipulation: handicap-based head-to-head where
      slower vehicle gets head-start; first to finish wins.

### 102.4 Drift Race

- [x] **Drift Race** (scoring, not first-to-finish): score-based event where
      drift angle + drift line + multiplier chain build score; per-vehicle drift
      profile (cross-ref §106.1); per-track drift- zones marked + bonus for
      held-zone scoring.

### 102.5 Time Trial

- [x] **Time Trial** (no opponents, ghost lap visible): leaderboard per track
      per vehicle class; per-fastest-lap reward.

### 102.6 Eliminator

- [x] **Eliminator** (last-place out per N seconds, circuit variant): tense
      countdown timer + last-place-flag for visible drama.

### 102.7 Speed Trap

- [x] **Speed Trap** (point-to-point with radar stations): top-speed at each
      radar counts; player aims to maximize aggregate or per- station top speed.

### 102.8 Knockout

- [x] **Knockout** (lap-based last-place-eliminated): per-lap one driver
      eliminated until winner remains.

### 102.9 Outrun

- [x] **Outrun** (NFSU2-style 1v1 in open world): impromptu rival race triggered
      by flashing headlights at another driver; race to a sudden gap of N meters
      lead within time limit.

### 102.10 Race Day / Tournament

- [x] **Race Day** (multi-event tournament): 4-6 events in a row with cumulative
      score; per-day ranking.
- [x] **Tournament Mode** (cross-ref §93): formal bracket racing event.

### 102.11 Lobby / Custom Room

- [x] **Custom Room** (cross-ref §66.4): host-configurable race rules + vehicle
      restriction + assist eligibility + track + lap count + damage model.

Implemented §102 through `RaceModeVariants_V2_Contract.json`,
`V2/docs/racing/race-mode-variants.md`,
`V2/balance/racing/race-mode-variants.json`, expanded `V2RaceModes` variant
catalog structs/plugin activation, updated `RaceModes.Module` automation, and
`check-v2-race-mode-variants.py` in CI.

---

## 103. Police Pursuit System (Hot Pursuit + Most Wanted)

### 103.1 Cop AI

- [x] **Cop AI personalities**: Pursuit (chase + PIT maneuver) / Patrol (random
      spawn + alert) / Block (set up roadblock) / Helicopter (overhead
      spotlight + spike strip drop) / Federal (SWAT-tier armored vehicle).
- [x] **Per-personality behavior tree**: state machine with Patrol → Alert →
      Pursue → Engage → Disengage → Lay-Low; per-state input logic.

### 103.2 Heat-level escalation

- [x] **Heat 1**: 1-2 patrol units, slow response, light pursuit.
- [x] **Heat 2**: 3-4 patrol + sergeant interceptor; mid response.
- [x] **Heat 3**: federal SUVs + helicopter spotlight; aggressive PIT.
- [x] **Heat 4**: roadblocks + spike strips + helicopter with spike- drop;
      sustained pursuit.
- [x] **Heat 5**: SWAT armored interceptors + rhino-truck ramming vehicle;
      cinematic-camera escalation.
- [x] **Heat 6**: maximum siege; multiple helicopters + roadblocks every major
      intersection + corvette interceptors + cinematic music swell.

### 103.3 Pursuit mechanics

- [x] **PIT maneuver**: cop performs PIT to spin player out; per-PIT attempt
      requires speed threshold + alignment + counter-steer check by player to
      evade.
- [x] **Spike strip**: laid by cops at roadblocks; player must swerve or take
      damage on tires.
- [x] **Roadblock**: 2-3 cop vehicles + spike strips + traffic blocking at
      intersection; player can ram through (damage + speed loss), jump over (if
      track permits + ramp positioned), or detour.
- [x] **Helicopter spotlight**: limits player ability to use shadows / cover;
      provides cop strikes (spike-drop + radio updates).
- [x] **Cop chase damage**: cops can damage player vehicle; player can ram /
      takedown cops back; per-takedown bonus.

### 103.4 Pursuit-completion conditions

- [x] **Evade**: outrun all cops + reach safe-zone within time limit; "Cooldown"
      period required to fully clear heat.
- [x] **Busted**: cops surround + immobilize player; cinematic busted
      animation + currency forfeit + heat reset to 1.
- [x] **Takedown / outright kill** (Hot Pursuit cop side): cops can deploy spike
      strips / EMP / weapon to immobilize racer in cinematic moment.

### 103.5 Cops vs Racers asymmetric mode (Hot Pursuit)

- [x] **Online Cops vs Racers**: per-match 3 racers vs 3 cops; racer goal =
      reach finish line; cop goal = takedown all racers before finish.
- [x] **Per-side loadout**: racers select speed-tuned vehicle + power- ups; cops
      select armored vehicle + spike strip / EMP / road block deployables.
- [x] **Per-side perspective UI**: racer HUD shows heat + speed; cop HUD shows
      backup-call cooldown + deployable inventory.
- [x] **Per-side rank**: separate ranked ladders for Racer Rank and Cop Rank.

### 103.6 Most Wanted Blacklist integration

- [x] **Blacklist rival pursuit events** (cross-ref §101.1): per-rival signature
      pursuit with custom rival voice-over + cinematic camera.
- [x] **Per-rival narrative arc** unfolds across multiple events.

### 103.7 Autolog-style social integration

- [x] **Autolog rivalry** (Hot Pursuit-inspired): per-event time + score visible
      to friends; friends' records shown as ghost-target on the track.
- [x] **Friend challenge** notifications when a friend beats your time; one-tap
      revenge match.

Implemented §103 through `PolicePursuitSystem_V2_Contract.json`,
`V2/docs/racing/police-pursuit-system.md`,
`V2/balance/racing/police-pursuit-system.json`, expanded `V2RaceModes` police
pursuit catalog structs/plugin activation, updated `RaceModes.Module`
automation, and `check-v2-police-pursuit-system.py` in CI.

---

## 104. Combat Racing (Death Race + Blur Power-Ups)

### 104.1 Power-up library (Blur-style)

- [x] **Offensive pickups**: Bolt (homing energy projectile), Shunt
      (forward-launched ram), Nitro Mine (rear-laid mine), EMP (disables nearest
      vehicle's HUD + power briefly), Big Shockwave (radius blast).
- [x] **Defensive pickups**: Shield (absorbs N hits), Phantom (brief invuln +
      speed), Repair (heals damage tier by 1).
- [x] **Utility pickups**: Boost (NOS burst), Drift Boost (chain
      drift-and-boost), Wormhole (warp forward N positions).
- [x] **Per-pickup stack limit**: 3 pickups stackable; per-stack visual icons on
      HUD.
- [x] **Per-pickup balance**: per-pickup spawn rate per track section +
      per-rank-tier balance to prevent rubber-banding abuse.

### 104.2 Death Race weaponization

- [x] **Vehicle-mounted weapons** (Death Race ruleset): primary weapon
      (machinegun / gatling / rocket / flame / EMP-cannon) + secondary defensive
      (oil-slick / chaff / smoke).
- [x] **Per-vehicle weapon mount points** authored; weapon swap in Garage
      (cross-ref §117).
- [x] **Per-weapon ammo / cooldown / recharge** balance documented per- vehicle
      in `V2/balance/vehicles/<vehicle>/death-race.csv`.
- [x] **Lethal damage model**: in Death Race ruleset, KO triggers cinematic
      flaming-vehicle-crash; player respawns at last checkpoint with HP-reset.

### 104.3 Environmental hazard pickups (per-track)

- [x] **Per-track hazard pickup spawn**: spike-strip on track / oil- slick patch
      / fuel-leak ignition / road-cone hazard. Per-track hazard density.

### 104.4 Combat racing ruleset eligibility

- [x] **Per-ruleset toggle**: Combat Racing is its own ruleset (cross- ref §18);
      combat-on opponents see weapons + pickups; combat-off modes (Circuit /
      Sprint / Time Trial) disable weapons.
- [x] **Per-track combat-eligibility flag**: some tracks designed for combat
      (wide roads / sparse traffic); some not (technical circuits).

### 104.5 Death Race tournament

- [x] **Death Race Tournament**: signature event mode (cross-ref §93) with
      cinematic prison-island aesthetic + ladder of brutal challenges +
      winner-walks-free narrative.

### 104.6 Gore tier toggling

- [x] **Death Race gore tier** (cross-ref §16.5): off / mild / standard /
      extreme; per-region default override.
- [x] **Vehicle KO cinematic** with optional gore variants.

Implemented §104 through `CombatRacing_V2_Contract.json`,
`V2/docs/racing/combat-racing.md`, `V2/balance/racing/combat-racing.json`,
`V2/balance/vehicles/akashi_sx/death-race.csv`, expanded `V2RaceModes` combat
racing catalog structs/plugin activation, updated `RaceModes.Module` automation,
and `check-v2-combat-racing.py` in CI.

---

## 105. Power-Play / Track Events (Split/Second)

### 105.1 Power-Play meter

- [x] **Power-Play meter** (Split/Second-inspired): build meter via drafting /
      drifting / proximity / clean-driving / takedown; Level-1 small event /
      Level-2 medium / Level-3 dramatic.

### 105.2 Track-altering events

- [x] **Level-1 Power-Play event**: minor environmental hazard (oil drum
      explosion / falling barrel / runaway traffic).
- [x] **Level-2 event**: medium-scale destruction (bridge cable snap / crane
      drop / building façade collapse / fuel tanker explosion).
- [x] **Level-3 event**: dramatic track-altering event (entire bridge collapse /
      building topple / runway taxi-jet collision / stadium roof fall / sinkhole
      opens) re-routes the track for the rest of the race.
- [x] **Per-track Power-Play library**: each combat-eligible track has a curated
      list of 4-8 Power-Play events per level.

### 105.3 Trigger UI

- [x] **Power-Play trigger UI**: when meter ready, target indicator shows next
      viable event; player presses trigger button to activate.
- [x] **Per-event cinematic camera**: brief cinematic on event trigger with
      camera-cut + impact reaction.

### 105.4 Counter-Power-Play

- [x] **Counter-event option**: opponent can deploy a small counter- event if
      they have meter (Level-1 counter to Level-1 / Level-2 to Level-2).
- [x] **Per-event reaction window**: timing-based dodge / evade input to lessen
      damage.

### 105.5 Power-Play ruleset eligibility

- [x] Power-Play is its own ruleset; on/off toggle per match; ranked eligibility
      separate ladder.

### 105.6 Authoring

- [x] **Per-track Power-Play event authoring** in Track Editor (cross- ref
      §99.5).

Implemented §105 through `PowerPlayTrackEvents_V2_Contract.json`,
`V2/docs/racing/power-play-track-events.md`,
`V2/balance/racing/power-play-track-events.json`, expanded `V2RaceModes`
Power-Play meter/event/library/trigger/counter/eligibility catalog structs,
updated `RaceModes.Module` automation, and `check-v2-power-play-track-events.py`
in CI.

---

## 106. Drift / Canyon Duel / Drag (Carbon + NFSU2)

### 106.1 Drift scoring system

- [x] **Per-drift score**: angle (degrees from forward) × line (per- track ideal
      drift line proximity) × speed × duration × multiplier chain.
- [x] **Per-drift-chain multiplier**: keep drifting through a chain of corners;
      multiplier resets on straighten or wall-impact.
- [x] **Drift mode handling assist**: clutch-kick entry + handbrake drift +
      Scandinavian flick available per input scheme.

### 106.2 Drift mode variants

- [x] **Solo Drift Run**: per-track score attack + leaderboard.
- [x] **Drift Battle**: 1v1 lead-follow drift; lead-car defines line; follow-car
      scored on matching line / proximity. (Carbon-style drift duel.)
- [x] **Drift Tag-Team**: 2v2; team aggregate score.

### 106.3 Drag scoring system

- [x] **Per-launch bonus**: perfect-launch (RPM at peak power on green- light) →
      bonus.
- [x] **Per-shift bonus**: perfect-shift (shift at RPM peak) → small bonus per
      shift; multi-shift chain bonus.
- [x] **Drag-mode camera**: behind-the-car follow camera with shift light +
      speedo dominant.

### 106.4 Canyon Duel (Carbon-style)

- [x] **Canyon Duel structure**: 1v1 cliff-edge race on a winding canyon sprint
      track. Two halves:
  - **Defender half**: defender leads; per-second lead-time = score.
  - **Attacker half**: attacker chases; per-second close-time = score.
  - Per-half final score determines winner; falling off cliff = instant loss.
- [x] **Per-canyon track** (≥ 3 at launch): authored cliff drop + cinematic
      camera + dramatic music + scoring HUD.
- [x] **Per-half restart** option for casual mode.
- [x] **Canyon Duel narrative integration** as Blacklist boss climax (cross-ref
      §101.6).

### 106.5 Crew lead-follow rules

- [x] **Lead-follow input**: when chasing, attacker may opt to PIT or avoid
      based on player strategy; per-PIT-attempt success + lead-loss for
      defender.

### 106.6 NFSU2 outrun drift

- [x] **NFSU2-style Outrun Drift**: meet a rival driver in open world + drift
      challenge (per-second drift chain leads to win threshold).

Implemented §106 through `DriftCanyonDrag_V2_Contract.json`,
`V2/docs/racing/drift-canyon-drag.md`,
`V2/balance/racing/drift-canyon-drag.json`, expanded `V2RaceModes`
Drift/Canyon/Drag catalog structs, updated `RaceModes.Module` automation, and
`check-v2-drift-canyon-drag.py` in CI.

---

## 107. Off-Road / Rally Racing

### 107.1 Off-road physics

- [x] **Off-road suspension long-travel** profile (cross-ref §97.6): higher bump
      recovery + greater body roll permitted.
- [x] **Per-surface friction** (cross-ref §97.7): dirt / mud / sand / snow /
      gravel with distinct grip + slide profile.
- [x] **Jump physics**: ramps deliver vehicle into air arc; suspension
      compression on landing + airborne control limited.

### 107.2 Co-driver pacenotes

- [x] **Pacenote system** (rally-style): per-track authored audio cues ("Right
      4, 50, into Left 3") delivered by co-driver voice; per- locale localized.
- [x] **Per-cue timing** authored relative to upcoming corner.
- [x] **Pacenote training mode** for new players; pacenote-off toggle for
      veterans.

### 107.3 Rally event modes

- [x] **Stage Rally**: timed single-stage runs; multi-stage event with
      cumulative time.
- [x] **Rally Cross**: multi-car circuit-style on rally course.
- [x] **Hill Climb**: timed ascent.
- [x] **Dirt Drift**: drift-mode on dirt surface.

### 107.4 Off-road vehicle classes

- [x] **Vehicle classes** (cross-ref §111): Buggy / Truck / SUV / Rally Car /
      Monster Truck.
- [x] **Per-class handling personality**: Buggy fast / agile; Truck heavy /
      stable; SUV mid; Rally tail-happy + fast; Monster Truck slow +
      indestructible.

### 107.5 Rally track inventory

- [x] **Stage variety**: forest / desert / snow / mud / coastal cliff / urban
      dirt; ≥ 5 launch tracks (cross-ref §99.4).

### 107.6 Co-op rally mode

- [x] **Co-op rally** with 2-player driver + co-driver (1 player drives + 1
      player calls real-time pacenotes from a script).

Implemented §107 through `OffRoadRally_V2_Contract.json`,
`V2/docs/racing/off-road-rally.md`, `V2/balance/racing/off-road-rally.json`,
expanded `V2RaceModes` off-road
physics/pacenote/rally-mode/vehicle-class/track/co-op catalog structs, updated
`RaceModes.Module` automation, and `check-v2-off-road-rally.py` in CI.

---

## 108. Bike Racing

### 108.1 Bike physics

- [x] **Lean angle** as primary turn input; per-bike lean limit + lean-recovery
      rate.
- [x] **Throttle-back / weight-shift** for cornering tuning.
- [x] **Wheelie / stoppie** input combos.
- [x] **High-speed instability** model: faster bike = more wobble at max-lean.

### 108.2 Bike-on-bike combat

- [x] **Hand-to-hand combat at speed** (street-racer ruleset): rider can punch /
      kick / elbow adjacent rider at speed; per-hit stagger + lean-loss.
- [x] **Knockdown cinematic**: extreme hit can knock rider off bike; bike
      continues riderless briefly then crashes.

### 108.3 Bike classes

- [x] **Bike class library** (cross-ref §111): Sport Bike (litre-class
      track-focused) / Cruiser (heavy / lower speed but stable) / Naked Sport
      (mid-weight track-friendly) / Adventure (off-road capable) / Supermoto
      (urban agile) / Electric (silent + high- torque).

### 108.4 Bike race modes

- [x] **Circuit Bike** / **Sprint Bike** / **Drag Bike** / **Drift Bike
      (limited; sliding rear tire)** / **Off-Road Bike** / **Bike Pursuit**
      (cops on bikes vs racer bikes) / **Bike Combat Racing** (cross-ref §104).

### 108.5 Bike customization

- [x] **Bike customization library** (cross-ref §100.7): tank / fairing / wheels
      / exhaust / seat / handlebars / rider helmet / leathers / boots; per-bike
      eligible kit list.

### 108.6 Bike-vs-car race option

- [x] **Mixed-class race** option: bikes + cars in same race; per-class handicap
      (bike +25% acceleration vs car) to balance.

Implemented §108 through `BikeRacing_V2_Contract.json`,
`V2/docs/racing/bike-racing.md`, `V2/balance/racing/bike-racing.json`, expanded
`V2RaceModes` bike physics/combat/classes/modes/customization/mixed race catalog
structs, updated `RaceModes.Module` automation, and `check-v2-bike-racing.py` in
CI.

---

## 109. Futuristic / Anti-Grav / Pod-Racer Mode

### 109.1 Hover physics

- [x] **Hover physics**: thrust + lift vectors replacing wheel-traction;
      per-vehicle anti-grav curve; pitch / roll / yaw control independent.
- [x] **Magnetic track adhesion** for high-speed cornering: per-track flagged
      sections magnetically pull vehicle into track at high G (WipEout-style
      banked turns).
- [x] **Loop-the-loop** support: vehicle inverts on track surface (anti- grav +
      magnetic adhesion combined).

### 109.2 Speed bands

- [x] **Per-track speed bands**: zones of accelerated speed (booster strips)
      with cinematic motion blur + speed lines.
- [x] **Speed-class** racing: per-vehicle class (Sub-Light / Light / Standard /
      Anti-Grav / Hyper / Cosmic) sets max speed cap + handling profile.

### 109.3 Weapons & shields

- [x] **Energy weapons** (WipEout-style): photon cannon / homing missile / EMP
      burst / quake / shield / boost; pickup-based per- track.
- [x] **Shield bands**: per-vehicle shield capacity + recharge rate + visual
      shield bubble VFX.

### 109.4 Pod-racer specific (SW Episode 1 inspiration)

- [x] **Pod-racer chassis**: dual / triple / quad engine pods linked by energy
      field to a small cockpit; per-engine independent damage state.
- [x] **Per-engine throttle independence**: player can balance throttle between
      engines for turn-side speed differential.
- [x] **Energy field breakdown**: lose all engines = pod cockpit crashes;
      cinematic.

### 109.5 Futuristic tracks (≥ 3 at launch)

- [x] **Sky Circuit** (high-altitude city loop with cliff drops).
- [x] **Canyon Pod Race** (high-speed canyon course with magnetic banked turns +
      jump arcs).
- [x] **Orbital Station Loop** (zero-G section + cinematic Earth vista).

### 109.6 Mode-pivot

- [x] **Futuristic ruleset toggle**: opt-in mode; per-region content variant (no
      controversial branding); pickup-balance separate from standard combat
      racing.

Implemented §109 through `FuturisticPodRacer_V2_Contract.json`,
`V2/docs/racing/futuristic-pod-racer.md`,
`V2/balance/racing/futuristic-pod-racer.json`, expanded `V2RaceModes`
hover/speed-class/energy-weapon/shield/pod-racer/track/mode-pivot catalog
structs, updated `RaceModes.Module` automation, and
`check-v2-futuristic-pod-racer.py` in CI.

---

## 110. Vehicle AI / Adaptive Racing AI

### 110.1 AI driver personalities

- [x] **Per-AI-driver personality**: Aggressive (overtakes hard) / Defensive
      (blocks lines) / Drafter (sits behind player) / Reckless (high-risk,
      high-reward) / Conservative (stays out of trouble) / Slipstream-Master /
      Drift-Specialist.
- [x] **Per-fighter-as-driver personality** (cross-ref §118): each roster
      fighter has a default driving personality reflecting their character
      (e.g., Lin Kuei fighter → Conservative; Black Dragon → Aggressive).

### 110.2 Adaptive AI (per-race)

- [x] **AI Director** (cross-ref §90 AI Director system): observes player's
      race-skill level + adjusts CPU race-time to provide competitive pacing
      without obvious rubber-banding.
- [x] **Per-skill-bucket AI lap time**: AI lap target matches player's lap time
      ± tunable epsilon.
- [x] **Anti-rubberband toggle**: when on, AI runs at fixed difficulty (true sim
      feel); when off, AI rubber-bands to keep races competitive.

### 110.3 Race-line authoring & override

- [x] **Per-track AI racing line** authored offline + run-time adjusted for
      vehicle class / weather / damage state.
- [x] **AI overtaking logic**: per-corner overtake-window detection +
      per-vehicle aggression rolls.

### 110.4 Traffic AI

- [x] **Per-district open-world traffic AI**: civilian vehicles obey traffic
      laws + react to police pursuit (move-aside).
- [x] **Traffic-density toggle** for casual play vs hardcore traffic.

### 110.5 Per-rival narrative AI

- [x] **Per-Blacklist-rival** signature behavior + voice taunts + rivalry tells
      (cross-ref §101.1).

### 110.6 Police AI

- [x] **Cop AI** (cross-ref §103.1) integrated with Adaptive AI for
      heat-level-appropriate cop behavior.

### 110.7 Crew AI

- [x] **Crew AI** for player crew members (cross-ref §117): per-crew- member
      behavior (blocker / drafter / fabricator) integrated with race-objective
      logic.

Implemented by `FV2VehicleAdaptiveAICatalog` in `V2RaceModes`, with Blueprint
builders/signatures, `RaceModes.Module` automation coverage,
`VehicleAdaptiveAI_V2_Contract.json`, `vehicle-adaptive-ai.json`,
`vehicle-adaptive-ai.md`, CI registration, and `check-v2-vehicle-adaptive-ai.py`
validation.

---

## 111. Vehicle Roster (Launch Catalog)

### 111.1 Cars (≥ 40 at launch)

- [x] **Tuner / Import cars** (≥ 12): Civic / RX-7 / Skyline / Supra / Silvia /
      Lancer Evo / WRX / GT-R / 350Z / Integra / RX-8 / Celica equivalents
      (original-IP or licensed).
- [x] **Muscle cars** (≥ 8): Camaro / Mustang / Challenger / Charger / Corvette
      / 70s muscle equivalents.
- [x] **Supercars / Hypercars** (≥ 10): McLaren / Ferrari / Lamborghini /
      Porsche / Bugatti / Koenigsegg equivalents (original-IP or licensed).
- [x] **Exotics / Classic** (≥ 5).
- [x] **Specialty** (≥ 5): custom-tuned vehicles unique to V2 (Carbon- style
      autosculpt showcase vehicles).

### 111.2 Bikes (≥ 15 at launch)

- [x] **Sport Bikes** (≥ 6): litre-class + 600cc equivalents.
- [x] **Naked Sport** (≥ 3).
- [x] **Cruisers** (≥ 3).
- [x] **Adventure / Off-Road** (≥ 2).
- [x] **Electric Bikes** (≥ 1).

### 111.3 Off-Road / Rally (≥ 10 at launch)

- [x] **Rally cars** (≥ 4).
- [x] **Buggies** (≥ 2).
- [x] **Trucks / SUVs** (≥ 3).
- [x] **Monster Truck** (≥ 1).

### 111.4 Futuristic (≥ 8 at launch)

- [x] **Anti-Grav racers** (≥ 4).
- [x] **Pod racers** (≥ 2).
- [x] **Hover bikes** (≥ 2).

### 111.5 Police vehicles (≥ 8 at launch)

- [x] **Standard patrol** + **Sergeant interceptor** + **Federal SUV** +
      **Helicopter** + **Corvette interceptor** + **SWAT armored** + **Rhino
      truck** + **Cop bike**.

### 111.6 Cosmetic-vehicle tier

- [x] **Per-vehicle rarity tier** (cross-ref §16.9): Common → Mythic; Mythic
      vehicles have per-vehicle signature livery + unique handling personality +
      signature engine note (cross-ref §115).

### 111.7 Crossover-fighter signature vehicles

- [x] **Per-roster-fighter signature vehicle** (cross-ref §72 + §118): each
      fighter has a thematic vehicle (e.g., Lin Kuei fighter → sleek frost-blue
      tuner; Black Dragon → black muscle car with hydraulics; Brotherhood of
      Shadow → matte-black hypercar; etc.).
- [x] Signature vehicle unlockable via fighter Mastery (cross-ref §72) and Side
      Story completion (cross-ref §73.2).

### 111.8 DLC vehicle pipeline

- [x] **Year-1 vehicle DLC** plan (cross-ref §52.1): 4 vehicle packs (each with
      4-6 vehicles + cosmetic items) per quarter; transparent itemized contents.

Implemented by `FV2VehicleLaunchRosterCatalog` in `V2Vehicles`, with launch
minimum validation, rarity/signature/DLC rules, Blueprint builders/signatures,
`Vehicles.Module` automation coverage,
`VehicleRosterLaunchCatalog_V2_Contract.json`,
`vehicle-roster-launch-catalog.json`, `vehicle-roster-launch-catalog.md`, CI
registration, and `check-v2-vehicle-roster.py` validation.

---

## 112. Racing Online: Matchmaking, Lobby, Ranked, Cross-Play

### 112.1 Racing matchmaking queues

- [x] **Per-mode queues**: Circuit / Sprint / Drag / Drift / Combat / Power-Play
      / Pursuit / Canyon Duel / Time Trial / Crew Battle.
- [x] **Per-vehicle-class restrictions** per queue.
- [x] **Skill-based matchmaking** with TrueSkill2 / Glicko2 (cross-ref §75) —
      separate Racing MMR from Fighting MMR.

### 112.2 Racing ranked ladder

- [x] **Per-mode ranked ladder**: Circuit / Sprint / Drift / Combat / Power-Play
      / Pursuit (Racer + Cop separate) / Canyon Duel.
- [x] **Per-rank tier**: Bronze → Legend (cross-ref §75.2).
- [x] **Racing crown ranking** (cross-ref §51.5) layered above MMR.

### 112.3 Custom Room

- [x] **Custom Room** (cross-ref §66.4): host-configurable race rules / vehicle
      restrictions / assist eligibility / track / lap count / damage model /
      weather / time of day / Power-Play / Combat eligibility /
      Pursuit-side-pick.
- [x] **Lobby spectate** + **lobby chat** + **lobby practice space**.

### 112.4 Cross-play

- [x] **Cross-play 1-32 player racing** across PC / PS5 / XSX / Switch2
      (cross-ref §50).
- [x] **Input-method labeling** (wheel vs gamepad vs KB+M) for fair matchmaking.
- [x] **Cross-progression** via publisher account (cross-ref §50).

### 112.5 Async / autolog rivalries

- [x] **Autolog social-rivalry** (Hot Pursuit-inspired): friend's race time +
      score auto-surfaces as challenge target on each track.
- [x] **Friend-beat notification** + one-tap revenge match.

### 112.6 Lobby player count

- [x] **Per-mode max players**: Circuit / Sprint up to 12 / Drag 4 / Drift 8 /
      Combat 8 / Power-Play 12 / Pursuit 6 / Canyon Duel 2.
- [x] **Per-mode lobby browser** for casual rooms.

### 112.7 Server-side anti-cheat for racing

- [x] **Per-frame input rate validation** + **per-lap-time anomaly detection** +
      **per-section physics-impossible-time detection** (cross-ref §49).
- [x] **Replay-based forensics** for flagged races.

Implemented by `FV2RacingOnlineCatalog` in `V2OnlineServices`, with per-mode
racing matchmaking queues, ranked ladder/crown overlays, custom-room rules,
cross-play input labeling, Autolog rivalries, lobby limits, anti-cheat rules,
Blueprint builders/signatures, `OnlineServices.Module` automation coverage,
`RacingOnline_V2_Contract.json`, `racing-online.json`, `racing-online.md`, CI
registration, and `check-v2-racing-online.py` validation.

---

## 113. Racing Esports & Broadcast

### 113.1 Racing tournament series

- [x] **Per-region racing pro circuit** (cross-ref §79.1): per-region racing
      tournament calendar with Crown points feeding world-final qualification.
- [x] **Per-event racing rule snapshot** (cross-ref §51.4) stamped in replay
      header.

### 113.2 Racing broadcast tools

- [x] **Spectator camera presets**: trackside / chase-cam / hood-cam / cockpit /
      orbital (top-down map) / replay-cam / director-cam (auto-cuts to best
      action).
- [x] **Per-lap split overlay**: live timing + sector splits + position changes.
- [x] **Per-race position graph**: visualization of position changes over laps.
- [x] **Per-driver telemetry overlay** for caster: throttle / brake / steering /
      G-force / tire temp.
- [x] **Broadcast HUD** for caster control of overlay layers.
- [x] **Per-event director-cam mode** with scripted cuts.

### 113.3 Racing replay marker / clip-cut

- [x] **Per-race highlight tagger** for caster: tag overtake / crash /
      power-play event / cop-takedown for post-race recap reel.

### 113.4 Racing wager / fan-poll

- [x] **In-broadcast cosmetic-wager** on race outcome (cross-ref §79.2); caster
      polls for predicted winner.

### 113.5 Racing championship season

- [x] **Racing Championship Season** (per quarter): 8-event series with
      per-event score + season cumulative leaderboard + season finale grand
      prix.

Implemented by `FV2RacingEsportsBroadcastCatalog` in `V2OnlineServices`, with
per-region racing pro-circuit calendars, Crown-point world-final qualification,
per-event replay-header rule snapshots, racing broadcast
camera/overlay/telemetry controls, highlight clip-cut markers, cosmetic fan-poll
wagers, an 8-event quarterly championship season, Blueprint builders/signatures,
`OnlineServices.Module` automation coverage,
`RacingEsportsBroadcast_V2_Contract.json`, `racing-esports-broadcast.json`,
`racing-esports-broadcast.md`, CI registration, and
`check-v2-racing-esports-broadcast.py` validation.

---

## 114. Racing Replay, Photo Mode, Time-Rewind (GRID Flashback)

### 114.1 Racing replay capture

- [x] **Deterministic race replay**: per-frame input + RNG seed + cosmetic
      manifest captured (cross-ref §62.1); ≤ 2 MB per 5-min race replay budget.
- [x] **Replay determinism gate** in CI: every captured replay re-played
      bit-identical (cross-ref §62.1).

### 114.2 Replay viewer (racing-specific)

- [x] **Race timeline scrubber** with sector splits + lap markers + key events
      (overtakes / crashes / Power-Play triggers / pickups collected).
- [x] **Per-driver track-camera lock**: focus camera on one driver.
- [x] **Free-cam mode** detached from any driver.
- [x] **Replay overlay**: telemetry overlay (throttle / brake / steering) +
      minimap + position graph.
- [x] **Side-by-side replay compare** of two replays.

### 114.3 GRID Flashback (time-rewind)

- [x] **Flashback** (GRID-style): pause race + rewind N seconds + resume from
      before a mistake; limited uses per race (default 3 per race; ranked = 0;
      tournament = TO-configurable).
- [x] **Flashback cinematic transition**: time-rewind visual effect + audio
      reverse swoosh.
- [x] **Per-race flashback budget** displayed on HUD.

### 114.4 Photo mode (racing-aware)

- [x] **Race-pause photo mode** (cross-ref §45.5): free-cam + DOF + filters +
      stickers + scene editor; per-vehicle pose preserved.
- [x] **Per-race-moment photo capture hooks**: auto-suggest photo opportunities
      at signature moments (overtakes / crashes / Power- Play / finish-line
      crossings).

### 114.5 Racing ghost data

- [x] **Ghost data export** per Time Trial / per Canyon Duel run (cross-ref
      §62.7); upload to ghost pool; load as opponent ghost on any track.
- [x] **Friend ghost compete**: load a friend's ghost as a target on time trial.

### 114.6 MP4 export

- [x] **MP4 export** via MoviePipeline (cross-ref §45) for race replays + photo
      gallery; per-replay custom camera setup before export.

Implemented by `FV2RacingReplayPhotoModeCatalog` in `V2OnlineServices`, with
deterministic racing replay capture, CI bit-identical replay gate, racing
timeline viewer overlays, GRID-style Flashback policy, racing-aware photo mode,
Time Trial / Canyon Duel ghost export, friend ghost targets, MoviePipeline MP4
export, Blueprint builders/signatures, `OnlineServices.Module` automation
coverage, `RacingReplayPhotoMode_V2_Contract.json`,
`racing-replay-photo-mode.json`, `racing-replay-photo-mode.md`, CI registration,
and `check-v2-racing-replay-photo-mode.py` validation.

---

## 115. Racing Audio Deep

### 115.1 Engine notes

- [x] **Per-vehicle engine sound bank**: idle / cruise / mid-RPM / high- RPM /
      redline / shift-cut / throttle-blip / decel-pop / backfire.
- [x] **Per-engine character**: V8 muscle rumble / inline-4 turbocharger /
      inline-6 NA / V12 supercar wail / rotary RX-7 buzz / V-twin cruiser /
      Boxer rumble / electric whir + induction hum.
- [x] **RPM-modulated audio mix** via MetaSounds graph driving multiple sound
      bins.

### 115.2 Exhaust system

- [x] **Per-exhaust upgrade**: stock / sport / racing / open-pipe / titanium /
      carbon. Per-upgrade sound profile.

### 115.3 Tire screech / brake squeal

- [x] **Per-surface tire-noise**: asphalt squeal / dirt slide / mud splatter /
      sand whoosh / snow crunch / water hydroplane.
- [x] **Brake-disc squeal** under heavy braking; per-pad-type variation (street
      / sport / racing).

### 115.4 Doppler & 3D positional

- [x] **Doppler-shifted engine audio** for passing vehicles (cross-ref §43.5
      spatial audio).
- [x] **3D positional audio** for all vehicles + cops + pickups + Power- Play
      events.

### 115.5 Environmental ambience

- [x] **Per-track ambience**: city traffic / highway wind / forest / desert /
      canyon echo / industrial / coastal surf / futuristic reactor hum.
- [x] **Weather-aware ambience**: rain / thunder / snow / wind.

### 115.6 Racing music

- [x] **Per-mode racing soundtrack**: per-ruleset music style (Most Wanted heavy
      rock + dubstep / Blur EDM / Death Race industrial metal / GRID cinematic
      orchestral / Carbon hip-hop + electronica / NFSU2 dance + drum-n-bass /
      Hot Pursuit cinematic + chase / Pod Racer epic orchestral); ≥ 60 launch
      tracks (cross-ref §43 music section).
- [x] **Dynamic music stack** (cross-ref §43.3): ambient / chase / climax /
      finish-line stinger; per-race state crossfade.
- [x] **Custom soundtrack import** (cross-ref §43.4) per platform's music import
      rules.

### 115.7 Per-vehicle audio replay encoding

- [x] **Per-vehicle audio captured in replay** (cross-ref §62.1) for authentic
      playback.

Implemented in `V2Audio` with `FV2RacingAudioDeepCatalog`, default Blueprint
builders/signatures, config/subsystem registration and runtime snapshot flags,
`RacingAudioDeep.spec.cpp`, `Audio.Module` automation coverage,
`RacingAudioDeep_V2_Contract.json`, `racing-audio-deep.json`,
`racing-audio-deep.md`, CI registration, and `check-v2-racing-audio-deep.py`
validation.

---

## 116. Racing VFX Deep

### 116.1 Tire smoke & sparks

- [x] **Per-tire smoke** scaled by slip ratio + surface (asphalt smoke thicker;
      dirt dust browner; mud splatter heavier).
- [x] **Spark VFX** under chassis on contact with road (slammed stance) or curb
      / barrier.
- [x] **Brake-disc glow** under heavy braking; per-rotor temperature
      visualization.

### 116.2 Debris & damage VFX

- [x] **Per-collision debris** spawn: glass / plastic / metal sheet shrapnel +
      bumper / fender / hood part fall-off.
- [x] **Damage decals** progressive: scuff marks / paint scratches / bullet
      holes (Death Race) / soot.
- [x] **Wreck explosion** VFX (Death Race gore-tier-gated).

### 116.3 Motion blur & speed lines

- [x] **Speed-aware motion blur** with per-platform / per-fps target tuning;
      reduced-motion accessibility override (cross-ref §53.2).
- [x] **Speed line overlay** for futuristic ruleset at speed-band activation.
- [x] **NOS / boost VFX**: blue-flame backwash + screen-edge color shift +
      motion-blur intensification.

### 116.4 Environmental hazard VFX

- [x] **Power-Play event VFX library** (cross-ref §105): explosion / crane swing
      / building collapse / falling debris / fire / smoke.
- [x] **Per-event size scaled to player perspective**.

### 116.5 Anti-grav glow

- [x] **Per-anti-grav engine glow** + **per-vehicle aura color** + per- vehicle
      trail VFX (cross-ref §109).

### 116.6 Damage-state shaders (vehicle)

- [x] **5-tier damage shader blend** (cross-ref §97.8 + §44.6 damage progression
      for fighters analogous): material parameter transition between Clean →
      Scuffed → Damaged → Wrecked → Totaled.

### 116.7 Weather VFX

- [x] **Rain on windshield** (cockpit cam) + **dust storm** (desert) + **snow
      accumulation on hood** + **fog volumetric**.

Implemented in `V2VehicleVFX` with `FV2RacingVFXDeepCatalog`, Blueprint
builders/signatures, subsystem registration, `RacingVFXDeep.spec.cpp`,
`VehicleVFX.Module` automation coverage, `RacingVFXDeep_V2_Contract.json`,
`racing-vfx-deep.json`, `racing-vfx-deep.md`, CI registration, and
`check-v2-racing-vfx-deep.py` validation.

---

## 117. Crew / Garage / Apartment Hub (Carbon + NFSU2)

### 117.1 Crew system

- [x] **Crew formation** (Carbon-style): recruit 3-5 AI crew members (per-member
      specialty: Blocker / Scout / Fabricator / Drafter / Mechanic).
- [x] **Per-crew-member backstory** + cinematic recruitment cinematic.
- [x] **Per-crew-member loyalty** affected by treatment + race outcomes;
      high-loyalty = better race assistance; low-loyalty = leaves crew.

### 117.2 Garage hub (NFSU2-style)

- [x] **Garage hub** explorable in first-person / third-person: player's
      personal garage with up to 10 vehicle slots displayed; per-vehicle lift /
      inspect / customize.
- [x] **Per-garage decoration**: posters / neon / tool wall / lift colors /
      floor texture customizable.
- [x] **Per-garage upgrade tiers** with more vehicle slots / more customization
      equipment / faster repair / faster install.

### 117.3 Apartment hub (Def Jam-style)

- [x] **Apartment hub** (cross-ref §24.2 Def Jam aesthetic): customizable living
      space with trophy showcase + photo-mode gallery + vehicle- key wall +
      crew-photo wall + signature graffiti tag display (cross-ref §35.3).
- [x] **Per-apartment upgrade**: studio → loft → penthouse with per-tier decor
      budget + crew-meeting space + per-tier story arc unlock.

### 117.4 Per-vehicle Garage actions

- [x] **Per-vehicle lift / inspect / customize** (cross-ref §100): full
      customization workflow inside Garage.
- [x] **Per-vehicle repair / refuel / tune** menu access.

### 117.5 Online Garage visits

- [x] **Friend-Garage visit**: invite friend to view your Garage + vehicles;
      cosmetic only.
- [x] **Crew-Apartment visit**: crew-mates can visit your Apartment.

### 117.6 Garage / Apartment progression

- [x] **Per-tier unlock condition** transparent: tied to career progression +
      race winnings + crew loyalty.

Evidence: Implemented `FV2RacingHubGarageApartmentCatalog` in `V2Racing` with
crew, garage, apartment, vehicle-action, online-visit, and progression specs,
builder/signature helpers, registry registration, `Racing.Module` coverage,
`RacingHubGarageApartment.spec.cpp`,
`RacingHubGarageApartment_V2_Contract.json`, `racing-hub-garage-apartment.json`,
`racing-hub-garage-apartment.md`, CI registration, and
`check-v2-racing-hub-garage-apartment.py` validation.

---

## 118. Racing × Fighting Crossover: Fighter-Driver, Vehicle Combat, Get-Out-and-Fight

### 118.1 Fighter-as-driver

- [x] **Per-roster-fighter drives**: each fighter can drive any vehicle;
      per-fighter signature vehicle (cross-ref §111.7) unlocked via Mastery +
      Side Story.
- [x] **Per-fighter driving personality** affects AI driver behavior (cross-ref
      §110.1); when player-driven, no personality bias.
- [x] **Per-fighter pre-race banter** (cross-ref §63.1) extended to racing
      events with per-fighter / per-matchup driving-context lines.

### 118.2 Get-Out-and-Fight mode

- [x] **Get-Out-and-Fight transition**: in crossover events, vehicle KO
      (totaled) triggers a cinematic where driver exits vehicle and engages in
      melee combat against opponent (also forced to exit if both totaled). Fight
      resumes in the chosen ruleset (MK / SF / Tekken / WWE / UFC / SC / DJ).
- [x] **Per-race-stage fighting arena**: track stretches / off-track areas
      designated as fighting arenas; environmental finishers eligible (cross-ref
      §14 + §15).
- [x] **Per-fight outcome**: winner returns to vehicle (if salvageable) or
      claims opponent's vehicle; loser is eliminated from race.

### 118.3 Vehicle-on-vehicle melee

- [x] **Vehicle melee combat**: in Combat Racing ruleset (§104) + crossover
      mode, vehicles can ram each other with intentional melee impacts that
      combo via the fighting-game GAS system (cross-ref §2).
- [x] **Per-vehicle damage from melee** tracked separately from speed damage.

### 118.4 Crossover mode events

- [x] **Crossover signature event**: cinematic event combining racing +
      fighting; e.g., race to a venue → arrive → cinematic transition to
      fighting arena → ruleset-flagged fight → winner advances.

### 118.5 Get-Out cinematic library

- [x] **Per-fighter Get-Out cinematic**: per-fighter walk-out-of- vehicle
      animation + per-fighter signature stance entrance.
- [x] **Per-fighter Vehicle-Return cinematic**: walk-back-to-vehicle +
      re-enter + drive-away.

### 118.6 Shared roster economy

- [x] **Shared cosmetic store**: Fighter Coins (cross-ref §23.5) + Racing Coins
      both spendable in shared store (per-item cost in either currency).
- [x] **Shared Battle Pass tracks** (cross-ref §52.4) with both fighting +
      racing rewards.

### 118.7 Crossover ranked

- [x] **Crossover crossover ranked queue**: opt-in mixed-mode crossover events;
      separate MMR from fighting + racing.

Evidence: Implemented `FV2RacingFightingCrossoverCatalog` in `V2RaceModes` with
fighter-driver, Get-Out-and-Fight transition, stage arena, fight outcome,
vehicle melee, signature event, cinematic library, shared economy, and ranked
specs; registered the `Race.Crossover.GetOutAndFight` Crossover plugin with
combat/cinematics modules; added builder/signature helpers, `RaceModes.Module`
coverage, `RacingFightingCrossover.spec.cpp`,
`RacingFightingCrossover_V2_Contract.json`, `racing-fighting-crossover.json`,
`racing-fighting-crossover.md`, CI registration, and
`check-v2-racing-fighting-crossover.py` validation.

---

## 119. Racing Compliance, Cert, Trophies, Anti-Cheat

### 119.1 Vehicle licensing

- [x] **Per-licensed-vehicle contract** with each manufacturer (cross- ref §77.5
      IP/NIL/Licensing): per-vehicle term / royalty / removal clause /
      damage-portrayal clause (some manufacturers prohibit damage / destruction
      display).
- [x] **Per-manufacturer damage-tier permissibility**: licensed luxury brand may
      permit only cosmetic damage; original-IP vehicle permits full damage
      model.

### 119.2 Per-region racing-content variants

- [x] **Per-region cop / pursuit content**: some regions restrict cop-related
      content (China publisher SKU adjusts cop visuals); some regions restrict
      combat-racing weaponry; document at `V2/docs/regions/racing-variant.md`.
- [x] **Per-region speed-limit display** (km/h vs mph); per-region number-plate
      format.

### 119.3 Driving impairment depiction

- [x] **No depiction of drunk / impaired driving** anywhere in V2 (legal +
      ethical); per-region content-variant enforcement.

### 119.4 Pursuit / police cooperation

- [x] **No depiction of cop killing in non-Death-Race rulesets**: pursuit
      ruleset specifies "incapacitate" not "kill"; per-region content variant.

### 119.5 Trophies / achievements (racing)

- [x] **Per-platform racing trophy / achievement plan**: per-mode completion +
      per-vehicle-class unlock + per-rank-tier promotion + special-condition
      unlocks (e.g., "Win a Canyon Duel without using flashback").

### 119.6 Anti-cheat racing-specific

- [x] **Per-section physics-impossible-time** detection (cross-ref §112.7).
- [x] **Replay-determinism gate** on all race-record writes.
- [x] **Tuning-cheat detection**: per-vehicle physics parameter ranges enforced;
      out-of-range tune flagged.

### 119.7 Cert / TRC racing-specific

- [ ] **Per-platform cert** for racing-specific features: streaming cinematic
      camera + force-feedback wheel support + photo mode capture. — re-marked
      [~] 2026-06-12: vendor certification; no submission has occurred.
      `blocked:external`
- [ ] **Per-platform wheel support**: Logitech / Thrustmaster / Fanatec / Hori /
      MOZA per-vehicle force-feedback tuning. — re-marked [~] 2026-06-12:
      verification requires physical wheel hardware on a runnable build; neither
      exists here (tuning specs exist in the contract). `blocked:hardware`

### 119.8 Racing accessibility (extended)

- [x] **Racing assists** (cross-ref §98.2): ABS / TCS / Stability / Auto-Brake /
      Racing Line — all toggleable for accessibility.
- [x] **Auto-throttle** mode for severely-motor-impaired players.
- [x] **Difficulty step-down** (cross-ref §90.2) in racing career on consecutive
      losses.
- [x] **Reduced-motion racing camera** (cross-ref §53.2): clamps motion blur +
      camera shake.

Evidence: Implemented `FV2RacingComplianceCertCatalog` in `V2Racing` with
vehicle licensing, manufacturer damage policy, regional variant, content safety,
trophy/achievement, racing anti-cheat, cert/wheel, and accessibility specs;
added builder/signature helpers, registry registration, `Racing.Module`
coverage, `RacingComplianceCert.spec.cpp`,
`RacingComplianceCert_V2_Contract.json`, `racing-compliance-cert.json`,
`racing-compliance-cert.md`, `V2/docs/regions/racing-variant.md`, CI
registration, and `check-v2-racing-compliance-cert.py` validation.

---

## 120. Vehicle Designer & Pit Crew Mechanic Minigame

### 120.1 Vehicle Designer (concept-from-scratch)

- [x] **Custom Vehicle Designer**: design a vehicle from scratch in-engine.
      Per-component authoring: chassis silhouette + engine bay layout +
      transmission tunnel + suspension mount points + wheel arch carving.
- [x] **Generative chassis tooling**: starting from a base archetype (cross-ref
      §97.2), slider-based geometry shaping with autosculpt- style
      subdivision-surface authoring (cross-ref §100.1).
- [x] **Per-component balance budget**: total vehicle stat budget enforced;
      heavier chassis → slower top speed; bigger engine → higher torque +
      heavier mass. Budget linter blocks egregious out-of-range builds.
- [x] **Per-engine swap authoring**: design a custom engine layout (cylinder
      count + arrangement + turbo / supercharger / NA + bore / stroke) with
      auto-derived torque curve (within physics-valid bounds).
- [x] **Custom paint scheme** + **custom decal layer** + **custom vinyl
      composition** + **custom wheel design**.
- [x] **Custom vehicle save slot** (10+ per user); shareable as code.
- [x] **Community Vehicle Gallery** (cross-ref §41.4 + §100.4) with featured
      player-designed vehicles + weekly editor's-pick spotlight.
- [x] **Custom vehicle ranked eligibility**: casual / private-lobby always;
      ranked may require designer-approved subset to prevent balance abuse.

### 120.2 Pit Crew Mechanic Minigame

- [x] **Pit Crew Minigame**: immersive vehicle repair / tune under time
      pressure. Per-action mini-game: tire change (5-action sequence + timing
      windows), oil change (3-action), engine swap (8-action + precision steps),
      wheel alignment (slider precision), suspension tune (slider precision).
- [x] **Per-pit-crew-member specialty bonus** (cross-ref §117.1): crew member
      specialty (Mechanic) reduces pit time by 30%; other specialties contribute
      reduced bonuses.
- [x] **Per-Pit-Crew-action visual + audio feedback**: ratchet click /
      socket-wrench drone / lift hiss / impact-wrench rattle.
- [x] **Pit-stop strategy** in long-form sim races: tire change vs no- change +
      fuel-fill amount + adjust suspension between stints.
- [x] **Pit-Crew Minigame multiplayer**: friend-can-pit-crew via Coach
      Mode-style (cross-ref §51.7) — friend performs pit actions while player
      drives.

### 120.3 Driver Stats & Telemetry

- [x] **Per-driver telemetry dashboard** in profile: average lap time per track
      per vehicle / best-of-3 / fastest sector / fuel usage per stint /
      brake-wear per race.
- [x] **Per-driver style profile**: per-driver classification (Aggressive /
      Defensive / Drafter / Reckless / Conservative / Slipstream-Master /
      Drift-Specialist) — auto-classified from telemetry; surfaced in
      matchmaking.
- [x] **Per-driver heat-map**: track speed-zones + brake-zones + drift- zones
      visualized over track map.

### 120.4 Reverse / Mirror Track

- [x] **Reverse course** option per track: race in opposite direction; requires
      authored AI line for reverse + separate sector splits.
- [x] **Mirror course** option: track flipped horizontally; per-track
      eligibility flag (some tracks don't mirror cleanly).

### 120.5 Vehicle Showcase (cosmetic-only)

- [x] **Vehicle Showcase mode**: cinematic vehicle camera rig for photographing
      / capturing your customized vehicle; per-stage scene editor (cross-ref
      §45.5) with auto-pose presets (driver-side / passenger-side / front 3/4 /
      rear 3/4 / overhead / cinematic- action).
- [x] **Showcase video export** to MP4 (cross-ref §62.4); social-share hook.

Implemented by `FV2VehicleDesignerPitCrewCatalog` in `V2Vehicles`, including
from-scratch designer component coverage, §97.2/§100.1 geometry controls,
balance budget linting, engine swap torque bounds, cosmetic/save/share/gallery
eligibility, pit crew action timing and specialty bonuses, telemetry/style/heat
map surfaces, reverse/mirror track requirements, and cosmetic showcase export.
Validation is backed by `VehicleDesignerPitCrew_V2_Contract.json`,
`vehicle-designer-pit-crew.json`, `vehicle-designer-pit-crew.md`,
`Vehicles.Module` and `V2.Racing.VehicleDesignerPitCrew.Contract` automation
coverage, CI registration, and `check-v2-vehicle-designer-pit-crew.py`.

---

## 121. Convoy & Free-Roam Multiplayer Lobby (Open-World Social Hub)

### 121.1 Convoy / Free-Roam mode

- [x] **Free-Roam Lobby**: open-world Metro City (cross-ref §99.2) multiplayer
      instance with 8-32 players cruising freely; no race, no rank, just social.
- [x] **Per-region instance shards** with friend-priority sharding (cross-ref
      §8.4).
- [x] **Per-instance day/night cycle** synchronized for all players.
- [x] **Per-instance weather** synchronized.

### 121.2 Convoy formation

- [x] **Convoy** mechanic (NFS Heat / Forza Horizon inspired): 2-8 players form
      a convoy with shared waypoint + automated formation; lead player sets
      destination + pace.
- [x] **Per-convoy crew bonus**: matching cosmetic theme (faction decals / paint
      colors) grants per-convoy cosmetic flair.
- [x] **Convoy challenges** initiated by NPC: dynamic event ambush / Power-Play
      training / drift challenge / cop pursuit for the whole convoy.

### 121.3 Player-meet hot-spots

- [x] **Per-district meet-up hot-spots**: parking lots / under-bridge hangouts /
      scenic overlook / harbor pier / drift practice spot — meet-points where
      players congregate to socialize + show off vehicles.
- [x] **Per-hot-spot ambient music + crowd density** tuned for chill social
      vibe.

### 121.4 Cruise-mode photo session

- [x] **Cruise photo session**: drive to a meet-up + multiple players
      simultaneously pose vehicles + cooperative photo-mode capture (one player
      drives camera, other players pose vehicles).

### 121.5 Open-world chat

- [x] **Open-world chat**: per-instance text chat + per-vehicle radio- to-radio
      voice chat (proximity-limited audio); per-platform compliance.
- [x] **Per-vehicle horn / signal**: cosmetic horn library; flash- headlight
      challenge initiation (cross-ref §102.9 Outrun).

### 121.6 Co-op cruise objectives

- [x] **Co-op cruise objectives**: convoy-only events where 2-8 players
      collaborate (escort a fragile cargo / outrun a rival convoy / tag-team
      Power-Play training).

### 121.7 Cruise-mode ranked-exempt

- [x] **No ranked progression** in cruise mode; cosmetic rewards only
      (per-cruise-hour XP for Account Level + faction XP).

Implemented by `FV2ConvoyFreeRoamLobbyCatalog` in `V2OnlineServices`, covering
Metro City 8-32 player social-only lobby rules, §8.4 friend-priority shards,
sync day/night and weather, convoy formation and cosmetic-only crew flair,
NPC-initiated convoy challenge types, district meet hot-spots, cooperative
cruise photo sessions, platform-compliant chat/radio voice/signals, convoy-only
co-op objectives, and ranked-exempt cosmetic/account/faction XP rewards.
Validation is backed by `ConvoyFreeRoamLobby_V2_Contract.json`,
`convoy-free-roam-lobby.json`, `convoy-free-roam-lobby.md`,
`V2.OnlineServices.Module` and `V2.Online.ConvoyFreeRoamLobby.Contract`
automation coverage, CI registration, and `check-v2-convoy-free-roam-lobby.py`.

---

## 122. Heist Mode: Multi-Stage Crew Stealth + Driving + Fighting

### 122.1 Heist mode overview

- [x] **Heist Mode**: multi-stage co-op mode (1-4 players) combining stealth +
      driving + fighting in a single mission with branching objectives.
      Inspirations: GTA Heist + Payday + Watch Dogs + original V2 narrative
      arcs.

### 122.2 Heist structure

- [x] **Per-heist stages**:
  - **Recon stage**: stealth / observation in open-world setting; photograph
    targets + plant equipment + identify guard patterns.
  - **Approach stage**: drive to objective + evade detection or overcome
    roadblock.
  - **Infiltration stage**: stealth or breach + fight through guards; fighting
    ruleset used per encounter.
  - **Extraction stage**: drive away with police pursuit (cross-ref §103) + crew
    defending + Power-Play opportunities (cross-ref §105).
  - **Resolution stage**: cinematic outcome based on choices.

### 122.3 Per-heist roles

- [x] **Per-crew-member role** (cross-ref §117.1): Hacker (stealth + hacking
      minigame) / Wheelman (driver) / Muscle (fighter) / Strategist (planning +
      assists).
- [x] **Per-role mini-game** per stage: Hacker has hacking puzzle; Wheelman has
      driving challenge; Muscle has fighting encounters; Strategist tags targets
      and triggers Power-Play events.

### 122.4 Heist loot

- [x] **Per-heist payout**: large currency reward + rare cosmetic items +
      signature vehicle unlocks + faction influence boost (cross-ref §22.5 +
      §99.7).
- [x] **Per-heist failure consequence**: partial payout + heat-level spike
      (cross-ref §103.2) + per-crew-member loyalty hit (cross-ref §117.1).

### 122.5 Heist branching

- [x] **Per-heist branch points**: 3 decisions per heist that change stage
      sequence or final cinematic.
- [x] **Per-heist replay** for completionists targeting different branches.

### 122.6 Heist online co-op

- [x] **Online 4-player heist** (cross-ref §92): per-player role assignment +
      session host migration + per-player loot share.

### 122.7 Heist signature events

- [x] **Per-quarter signature heist** (cross-ref §83 live service): themed
      limited-time heist event (Casino Heist / Bank Vault / Yacht Heist / Train
      Robbery / Stadium Concert Heist) with cinematic narrative arc + exclusive
      cosmetic rewards.

### 122.8 Solo heist

- [x] **Single-player heist option**: AI crew fills empty roles; reduced rewards
      (75% of co-op rewards).

Implemented by `FV2HeistModeCatalog` in `V2Modes`, covering the 1-4 player
multi-stage stealth/driving/fighting mission overview, Recon/Approach/
Infiltration/Extraction/Resolution validation, §117.1 Hacker/Wheelman/Muscle/
Strategist roles and per-role minigames, §22.5/§99.7 rewards, §103.2 and §117.1
failure consequences, exact three-decision branching and replay targets, §92
online co-op role assignment/host migration/loot share, §83 quarterly
Casino/Bank/Yacht/Train/Stadium signature events, and solo AI crew fill at 75%
rewards. Validation is backed by `HeistMode_V2_Contract.json`,
`heist-mode.json`, `heist-mode.md`, `V2.Modes.Module` and
`V2.Modes.HeistMode.AssetContract` automation coverage, CI registration, and
`check-v2-heist-mode.py`.

---

## 123. Demolition Derby + Vehicle-Hijack + Fight-On-Vehicle Crossover

### 123.1 Demolition Derby mode

- [x] **Demolition Derby**: arena mode where 4-16 vehicles fight in enclosed
      bowl until only one remains; per-vehicle HP + collision damage + melee
      weapons (drivers can punch through window / headbutt opponent / use
      mounted weapons §104.2).
- [x] **Per-arena type**: classic bowl / figure-8 / industrial yard / stadium /
      parking-garage multi-level.
- [x] **Per-mode KO trigger**: vehicle Totaled (cross-ref §97.8) = eliminated;
      cinematic flaming-vehicle KO.
- [x] **Per-derby team mode**: 2v2 / 4v4 team derby with shared HP pool option.

### 123.2 Vehicle-Hijack mid-race

- [x] **Vehicle-Hijack** crossover stipulation: in Combat Racing (cross-ref
      §104) ruleset with crossover enabled, player can attempt to hijack
      opponent's vehicle when alongside. Driver-side window melee combat
      triggers a brief input-RPS where attacker / defender contest control;
      success = attacker takes opponent's vehicle (and their racing position).
- [x] **Per-hijack cinematic** with input-prompt UI for both attacker +
      defender.
- [x] **Per-hijack cost**: meter / power-up consumption.

### 123.3 Fight-On-Vehicle

- [x] **Fight-On-Vehicle** crossover mode: cinematic fighting on a moving
      vehicle (Tekken Heihachi-on-motorcycle inspired). Two fighters trade blows
      on a vehicle racing through open-world streets; environment hazards
      (passing traffic / overpass / cop pursuit) factor in.
- [x] **Per-vehicle Fight-On-Vehicle compatibility**: convertibles / trucks /
      bikes (rider-vs-rider) / pod racers (cockpit-vs-cockpit in airborne
      combat) all compatible. Per-vehicle fight-stage authored.
- [x] **Per-vehicle environmental finisher**: hot-spot finishers (cross-ref
      §14.2) adapted to vehicle context (toss opponent off vehicle into oncoming
      traffic; ram opponent's bike into pillar; throw opponent off pod-racer
      into chasm).

### 123.4 Mad-Max-style truck/bike chase combat

- [x] **Truck/Bike chase combat mode**: open-world chase where one player drives
      a heavy truck pursuing 1-3 bike-rider opponents; bike-riders can attack
      truck (climb-aboard finisher / lasso truck pillar) + truck can ram bikes
      off the road.
- [x] **Per-chase narrative scenario**: bandits / cartel / rival-crew /
      cop-vs-fugitive chase contexts authored.

### 123.5 Convoy raid (co-op)

- [x] **Convoy Raid co-op**: 2-4 players in attacker crew vs AI convoy
      (defender) defending valuable cargo. Attackers split between drivers
      (chase down convoy) and fighters (board convoy + steal cargo). Defenders
      fight back + call backup.
- [x] **Per-cargo type**: armored car / armored truck / multi-vehicle convoy /
      armored helicopter / mobile-stage with celebrity NPC passenger.

### 123.6 Crossover ranked queue

- [x] **Crossover ranked queues** for Demolition / Hijack / Fight-On- Vehicle /
      Truck-Chase / Convoy-Raid; separate MMR per queue.

Implemented by `FV2VehicleCombatCrossoverCatalog` in `V2RaceModes`, covering
Demolition Derby 4-16 vehicle HP/collision/melee/mounted-weapon rules, five
arena types, §97.8 Totaled KO and team formats, §104 Vehicle-Hijack with
alongside window melee, input-RPS, cinematic prompts, and meter/power-up costs,
Fight-On-Vehicle hazards, vehicle compatibility, authored fight stages and §14.2
vehicle-context finishers, Truck/Bike chase combat scenarios, Convoy Raid 2-4
player co-op roles and cargo types, and separate-MMR ranked queues for all five
crossover modes. Validation is backed by
`VehicleCombatCrossover_V2_Contract.json`, `vehicle-combat-crossover.json`,
`vehicle-combat-crossover.md`, `V2.RaceModes.Module` and
`V2.RaceModes.VehicleCombatCrossover.AssetContract` automation coverage, CI
registration, and `check-v2-vehicle-combat-crossover.py`.

---

## 124. VR / AR Support: PSVR2 / Quest 3 / Vision Pro

### 124.1 VR ruleset compatibility

- [x] **VR ruleset compatibility matrix**: per-ruleset VR-eligibility flag —
      racing rulesets all VR-eligible; fighting rulesets toggle- able with
      motion-sickness considerations.
- [x] **Per-mode VR camera mode**: cockpit / chase / first-person fighter (rare)
      / spectator.

### 124.2 Per-platform VR support

- [x] **PSVR2** support (PS5): 4K-per-eye 120Hz mode with foveated rendering +
      eye tracking + DualSense Edge as motion controller.
- [x] **Meta Quest 3** support (Quest / Pro): native VR with hand tracking +
      per-frame async-time-warp + cross-buy with PC version.
- [x] **Apple Vision Pro** support: mixed-reality with passthrough +
      gaze-and-pinch input + spatial audio Atmos integration.
- [x] **PC VR** support (SteamVR + Oculus Rift S + Windows MR): per- platform
      render scale + per-platform input mapping.

### 124.3 VR-specific camera & comfort

- [x] **Comfort modes**: vignette during turning + snap-turn option +
      per-player-selected comfort level.
- [x] **Per-fighter VR cinematic** for cinematic moments with VR-aware pacing
      (no induced nausea).
- [x] **Per-vehicle cockpit cam** with authentic VR head-tracking.
- [x] **VR-specific HUD layout**: minimal HUD + glances at virtual gauges; UI
      elements as physical objects in 3D space.

### 124.4 AR / mixed-reality experiences

- [x] **Vision Pro mixed-reality mode**: vehicles drive on player's real-world
      floor via passthrough; fight in player's real-world room.
- [x] **AR companion experiences** for spectator: AR overlay tracking a friend's
      match on a TV / phone screen.

### 124.5 Cross-play VR vs non-VR

- [x] **VR-vs-non-VR matchmaking**: opt-in cross-play between VR and non-VR
      players in non-ranked modes; ranked separates pools.
- [x] **Per-input-method labeling** in matchmaking (cross-ref §50):
      VR-headset-vs-controller-vs-wheel distinction.

### 124.6 VR-specific cert

- [ ] **Per-platform VR cert**: Sony VR TRC + Meta Quest Store cert + Apple
      Vision Pro App Store cert; per-platform comfort review + epilepsy /
      motion-sickness compliance. — re-marked [~] 2026-06-12: vendor
      certification; no submission has occurred and no VR build exists.
      `blocked:external`

### 124.7 VR-specific accessibility

- [x] **Seated mode** for wheelchair-using players or those who can't stand.
- [x] **One-controller mode** for one-handed VR play.
- [x] **Voice-activated menu** in VR (cross-ref §53.6).
- [x] **Subtitle positioning** customizable in 3D space.

Implementation evidence: `VRARSupport.V2` is implemented through
`FV2VRARSupportCatalog` in `V2UI` with config and subsystem registration,
Blueprint builders / validators / deterministic signature, UI module automation,
`V2.UI.VRARSupport.AssetContract` negative coverage,
`VRARSupport_V2_Contract.json`, `vr-ar-support.json`, `vr-ar-support.md`, CI
registration, and `check-v2-vr-ar-support.py`.

---

## 125. Hardware Peripherals Deep: Wheels / Pedals / H-Shifter / Direct-Drive / Specialty Controllers

### 125.1 Steering wheel support

- [x] **Per-wheel vendor SDK**: Logitech G-Series (G29 / G923 / G PRO),
      Thrustmaster (T128 / T248 / T300 / T500), Fanatec (CSL DD / ClubSport DD /
      DD Pro), Hori (Force Feedback Racing Wheel), MOZA (R5 / R9 / R12 / R16 /
      R21 / R-Series direct drive), Cammus (C5 / C12), Asetek SimSports,
      Simucube.
- [x] **Per-wheel force-feedback (FFB) profile** authored per vehicle:
      per-corner suspension feedback + per-tire grip feedback + per-collision
      impact feedback + per-curb rumble.
- [x] **Per-vehicle FFB tuning** UI: gain / dynamic-range / linearity / damping
      / spring / friction per player preference.
- [x] **Direct-Drive specific scaling**: higher-torque DD wheels receive scaled
      FFB to avoid overpowering force.

### 125.2 Pedal support

- [x] **Per-pedal vendor SDK**: Logitech G PRO pedals, Thrustmaster T-LCM /
      T3PM, Fanatec ClubSport V3 / V3 Inverted, Heusinkveld, Asetek Invicta,
      Simucube Active Pedal.
- [x] **Per-pedal calibration** per player (deadzone + throw distance + curve
      linearity).
- [x] **Pedal load-cell** support for hardware-grade brake-pressure input.

### 125.3 H-Shifter / Sequential shifter

- [x] **Per-shifter vendor SDK**: Logitech G PRO Shifter, Thrustmaster TH8A,
      Fanatec ClubSport Shifter SQ V1.5 (sequential + H-pattern), MOZA HGP /
      HBP.
- [x] **Per-vehicle eligible shifter**: H-pattern only for vehicles with manual
      transmission; sequential available for all.
- [x] **Reverse-engagement input**: per-shifter clutch + safety button for
      reverse where applicable.

### 125.4 Handbrake support

- [x] **Per-handbrake vendor SDK**: Logitech / Thrustmaster / Fanatec / MOZA /
      Heusinkveld.
- [x] **Per-vehicle handbrake**: drift handbrake (Carbon-style) / rally
      handbrake (off-road).

### 125.5 Button box / Sim rig

- [x] **Button box / sim rig support**: Fanatec Podium Button Box + Cube
      Controls + Stream Deck integration (UI buttons mapped to Stream Deck
      buttons).
- [x] **Sim rig integration**: per-vendor seat-belt + bass-shaker + tactile
      feedback via SimVibe / ButtKicker.

### 125.6 Fight stick / hitbox / specialty controllers

- [x] **Per-fight-stick vendor SDK**: Hori (Fighting Stick / Mini / Octa),
      8BitDo Arcade Stick, Razer Kitsune (hitbox-style), Victrix Pro FS, MadCatz
      Mortal Kombat 1 Fightstick, Qanba Drone / Q2 / Q3 / Obsidian, Mayflash
      F500.
- [x] **Per-fight-stick button-mapping presets** + per-stick optimal layout
      suggestion.

### 125.7 Adaptive / accessible controllers

- [x] **PlayStation Access Controller** (cross-ref §53.1) per-button
      programmable.
- [x] **Xbox Adaptive Controller** (cross-ref §53.1).
- [x] **Logitech Adaptive Gaming Kit** integration.
- [x] **Quadstick** (mouth-operated controller) support for severely
      motor-impaired players.

### 125.8 Wheel / pedal calibration wizard

- [x] **First-launch calibration wizard** for detected peripheral: step-by-step
      calibration with visual feedback.
- [x] **Profile save / share**: per-player profile per peripheral set saved +
      shareable.

### 125.9 Per-peripheral force-feedback tuning gallery

- [x] **Community force-feedback profile gallery**: player-tuned FFB profiles
      shareable; per-profile rating + comment system.

### 125.10 Per-peripheral SDK partner support

- [x] **Per-vendor partner program** for early-access to new wheels / pedals /
      controllers + per-product launch tie-in marketing (cross-ref §52 + §86).

### 125.11 Cross-controller race rules

- [x] **Per-controller-class ranked pool**: separate ranked pool for Wheel +
      Pedals players vs Gamepad players in tournament mode.
- [x] **Per-controller-class assists baseline**: gamepad pool defaults to
      slightly more assists enabled; wheel pool defaults to less assist;
      ranked-pool-specific defaults documented.

### 125.12 Cert / TRC peripheral compatibility

- [ ] **Per-platform peripheral TRC**: per-platform certified peripheral list
      maintained; per-peripheral cert pass documented. — re-marked [~]
      2026-06-12: peripheral cert passes are vendor processes; none has
      occurred. `blocked:external`

### 125.13 Controller LED / speaker / gyro sync with fighter theme

- [x] **DualSense / Edge LED bar** color sync per equipped fighter faction
      (cross-ref §22.5 + §72.7): Lin Kuei frost-blue / Black Dragon green /
      Brotherhood of Shadow violet / White Lotus gold; per-fighter Mythic skin
      (cross-ref §16.9) unlocks signature LED pattern animation.
- [x] **DualSense / Xbox / Switch2 speaker** routes per-fighter voice bark for
      spatial-feel proximity (cross-ref §5.6); per-fighter signature impact
      sting (cross-ref §72.2) audible from controller.
- [x] **Controller motion-gyro support**: for Bushido Blade-style sword combat
      (cross-ref §129.2), gyro aim assist for precision strikes; per-platform
      calibration wizard.
- [x] **Controller battery-status HUD** display in-game (PS5 / Xbox / Switch2 /
      PC connected controller); low-battery warning before ranked match.
- [x] **Controller back-button mapping** for Edge / Elite / Pro controllers;
      per-fighter back-button preset library.

Implementation evidence: `HardwarePeripherals.V2` is implemented through
`FV2HardwarePeripheralCatalog` in `V2Input` with config asset defaults, input
module automation, `V2.Input.HardwarePeripherals.AssetContract` negative
coverage, `HardwarePeripherals_V2_Contract.json`, `hardware-peripherals.json`,
`hardware-peripherals.md`, CI registration, and
`check-v2-hardware-peripherals.py`.

---

## 126. Roguelike / Permadeath Adventure Mode (Hades-style Fighter)

### 126.1 Run-based structure

- [x] **Roguelike Adventure Mode**: Hades-inspired run-based permadeath mode
      where the player picks a fighter and progresses through a
      procedurally-generated dungeon of fight encounters; death resets to hub;
      meta-progression carries between runs.
- [x] **Per-run length**: 30-60 minutes per full run; per-run reward table
      documented.
- [x] **Per-run difficulty curves**: per-encounter difficulty escalates with run
      depth; cinematic boss every N-th room.

### 126.2 Procedural room generation

- [x] **Procedural room graph**: per-run a directed acyclic graph of rooms is
      generated (combat rooms / boon shrines / shops / boss gates).
- [x] **Per-room enemy roster** drawn from V2 fighter pool + procedurally- tuned
      AI difficulty.
- [x] **Per-room hazard / modifier** library: low-grav / fog / shrunk- hurtbox /
      armored / electric-floor / etc.
- [x] **Per-room reward** options (fork in path): choose between defensive /
      offensive / cosmetic / lore boon.

### 126.3 Boons & build crafting

- [x] **Boon library**: per-fighter ability-modifier pool (e.g., "Light Punch
      gains Freeze on hit", "Throws inflict Stun", "Drive Impact causes Bleed",
      "Heat Smash deals AoE"). Boons stack across runs + per-boon rarity (Common
      / Rare / Epic / Legendary).
- [x] **Per-run build crafting**: 5-8 boons + 2-3 passives selected per run;
      per-boon synergy bonuses documented (e.g., "Freeze + Stun = Frostbite
      mega-stun").
- [x] **Boon-author tooling**: per-fighter boon library at
      `V2/balance/roguelike/<fighter>/boons.csv`; CSV ↔ DataTable.

### 126.4 Hub & meta-progression

- [x] **Hub world** (Hades-inspired): persistent hub where player returns
      between runs; per-hub NPC dialogue + lore progression + meta-currency
      spending.
- [x] **Meta-currency**: per-run accumulating points spent on permanent hub
      upgrades (more boon slots / better starting equipment / additional
      starting health / additional revives).
- [x] **Per-hub NPC** rotation: roster fighters appear in hub between runs with
      per-character dialogue tree (cross-ref §63.1).

### 126.5 Boss encounters

- [x] **Per-realm cinematic boss**: 5-8 cinematic boss fights per complete run
      with per-boss unique mechanics + per-boss lore payoff + post-fight
      per-boss dialogue.
- [x] **Per-boss elite variants**: harder versions unlock with Heat-tier
      (Hades-inspired) +1, +2, +3 difficulty multipliers.

### 126.6 Cinematic / narrative arcs

- [x] **Per-run narrative arc**: per-fighter starring role with multi- run
      narrative arc (10-30 runs to complete primary arc); cinematic payoff per
      chapter.
- [x] **Per-NPC dialogue progression**: NPCs in hub have evolving relationships
      with player based on per-run achievements.
- [x] **True ending**: per-fighter "true ending" cinematic unlocked after
      multi-run completion at maximum difficulty.

### 126.7 Multiplayer co-op variant

- [x] **Co-op Roguelike** (2-player online or local couch): 2 fighters share the
      run; per-room shared boons + shared meta-progression.
- [x] **PvP Roguelike** variant: 2 players race through parallel runs; first to
      clear final boss wins; per-run ghost overlay shows opponent progress.

### 126.8 Daily run

- [x] **Daily Run**: same procedural seed for all players on a given day;
      per-run leaderboard; per-day score; cosmetic reward for placing in top-N.
- [x] **Per-week Heat challenge run** with elevated difficulty.

Implementation evidence: `Mode.RoguelikeAdventure` is implemented through
`FV2RoguelikeAdventureModeCatalog` in `V2Modes` with config asset defaults,
canonical mode registration, module automation,
`V2.Modes.RoguelikeAdventure.AssetContract` negative coverage,
`RoguelikeAdventureMode_V2_Contract.json`, `roguelike-adventure-mode.json`,
per-fighter `boons.csv` authoring files, `roguelike-adventure-mode.md`, CI
registration, and `check-v2-roguelike-adventure-mode.py`.

---

## 127. Battle Royale: 100-Player Fighter / Vehicle / Hybrid

### 127.1 Battle Royale modes

- [x] **Fighter Battle Royale** (100 players, last fighter standing): open-world
      arena with shrinking ring; players fight 1v1 / 1v2 / 1v3 brawls as the
      ring contracts; per-zone hazard activation as ring contracts.
- [x] **Vehicle Battle Royale**: 100-vehicle race-to-survive on shrinking-ring
      map with combat racing mechanics (cross-ref §104); last vehicle running
      wins.
- [x] **Hybrid Battle Royale**: 50-fighter + 50-vehicle teams in shrinking-ring
      arena; crossover get-out-and-fight (cross-ref §118) triggers;
      vehicle-on-vehicle melee + fighter-on-vehicle melee.

### 127.2 Shrinking ring system

- [x] **Per-stage ring contraction curve**: 4-6 contraction phases over 18-25
      minutes; per-phase contraction speed + per-phase ring damage delta.
- [x] **Per-ring-phase weather / atmospheric shift**: fog / darkness / storm
      increases visually as ring shrinks.
- [x] **Per-ring-phase hazard activation**: per-stage stage hazards
      progressively activate (electric-floor / lava-pit / falling debris /
      explosive barrels).

### 127.3 Loot system

- [x] **Loot tier**: Common (basic moveset upgrade / minor vehicle part) / Rare
      (Heat Burst / NOS canister) / Epic (X-Ray super available) / Legendary
      (Mythic finisher unlock).
- [x] **Per-zone loot drop** density + per-zone exclusive loot.
- [x] **Loot crate** spawn points + per-crate guarded by AI mini-boss for
      high-tier loot.

### 127.4 Squad mode

- [x] **Solo / Duo / Squad (4)** modes: respective per-team variants with
      per-mode lobby + per-mode rank.
- [x] **Squad revive**: downed teammate can be revived by squadmate via
      Photo-Mode-style interaction.
- [x] **Per-squad voice chat** + per-squad ping system.

### 127.5 Match flow

- [x] **Drop sequence**: cinematic flying skydive / vehicle drop-pod into arena.
- [x] **Pre-match lobby**: 1-2 minute warm-up in starting zone.
- [x] **Mid-match dynamic event**: random Power-Play (cross-ref §105) / AI
      mini-boss spawn / supply drop / dynamic stage event.
- [x] **Endgame cinematic**: final-circle dramatic camera + final- fighter /
      final-vehicle cinematic crown.

### 127.6 Battle Pass integration

- [x] **Per-BR-match Battle Pass XP** (cross-ref §52.4): per-kill / per-
      placement / per-completion XP.
- [x] **Per-BR-season exclusive cosmetics** (limited-time event).

### 127.7 Ranked Battle Royale

- [x] **Ranked Battle Royale** ladder with per-mode (Solo / Duo / Squad) +
      per-rank tier (Bronze → Legend); cross-ref §75.

### 127.8 Stream-aware BR features

- [x] **Spectator camera per active player** with director-cam auto- cuts to
      highest-action player.
- [x] **Highlight reel** auto-generated post-match (cross-ref §62).

Implementation evidence: `BattleRoyale100Player.V2` is implemented through
`FV2BattleRoyale100PlayerCatalog` in `V2Modes` with config asset defaults,
canonical `Mode.BattleRoyale.Fighter100`, `Mode.BattleRoyale.Vehicle100`, and
`Mode.BattleRoyale.Hybrid100` registration, module automation,
`V2.Modes.BattleRoyale100Player.AssetContract` negative coverage,
`BattleRoyale100Player_V2_Contract.json`, `battle-royale-100-player.json`,
`battle-royale-100-player.md`, CI registration, and
`check-v2-battle-royale-100-player.py`.

---

## 128. Sports-style Vehicle Modes: Soccer / Stunt / Burnout-Crash / Trackmania Time-Trial

### 128.1 Vehicle Soccer (Rocket-League-inspired)

- [x] **Vehicle Soccer mode**: 3v3 / 4v4 cars vs ball on a soccer-style pitch;
      per-team goals; ball physics with arcade-feel handling (high-spin /
      boost-jump / aerial play).
- [x] **Per-vehicle handling for Soccer**: tighter turning + responsive boost +
      arcade-physics gravity.
- [x] **Per-arena Soccer variant**: standard rectangle / dome / multi-tier /
      hoops (basketball-style) / volleyball-pitch.
- [x] **Per-match scoring + overtime + replay** (cross-ref §62.5).
- [x] **Ranked Soccer queue** with separate MMR.
- [x] **Per-fighter signature vehicle for Soccer**: per-fighter themed cosmetic
      decoration on car for Soccer matches.

### 128.2 Vehicle Stunt Mode (Tony-Hawk-inspired)

- [x] **Stunt Mode**: vehicle-acrobatic combo scoring (similar to Tony Hawk Pro
      Skater); per-trick library (manual / jump / spin / flip / grind / wheelie
      chain); per-trick combo multipliers.
- [x] **Per-trick balance budget**: per-trick risk-reward profile.
- [x] **Per-stunt-arena** authored: ramp-heavy stage / urban half-pipe /
      canyon-jump stage / industrial complex with rails / abandoned airfield.
- [x] **Per-vehicle Stunt-mode handling**: enhanced flexibility for mid-air
      control; per-vehicle ramp-launch physics tuned.
- [x] **Stunt Mode leaderboards** per arena per vehicle.

### 128.3 Burnout-Crash Mode

- [x] **Crash Mode**: score-based crash damage measurement; player crashes
      vehicle into traffic to maximize total damage; per- crash chain reaction
      (CrashBreaker) + multi-vehicle pile-up bonus.
- [x] **Per-junction Crash arena**: 20+ authored crash junctions (busy
      intersection / highway merge / city downtown / underpass / airport runway
      / mountain pass).
- [x] **Per-vehicle Crash variant**: heavy-truck for max damage; sports car for
      precision crashes; bike for fast-line crashes.
- [x] **CrashBreaker** mechanic (Burnout 3 inspired): post-impact explosive
      ability that triggers chain-reaction crashes.

### 128.4 Trackmania-style Time Trial

- [x] **Trackmania-style precision time trial**: ultra-short laps with
      hard-platforming racing (loops / jumps / wallrides / vertical walls /
      impossible turns).
- [x] **Per-track ghost line** with global leaderboard + friend ghost.
- [x] **Per-medal time tiers**: Bronze / Silver / Gold / Author medal
      (developer's best); per-fighter unique Author run authored.
- [x] **Track Editor** for Trackmania-style (cross-ref §39 + §99.5) with full
      geometry editor + share to gallery.
- [x] **Community track-of-the-day** rotation.

### 128.5 Mode integration

- [x] **Per-mode ranked ladder** (Soccer / Stunt / Crash / Trackmania) separate
      from main racing rank.
- [x] **Per-mode cosmetics** shop layer; per-mode signature events (cross-ref
      §93 signature event modes).

### 128.6 Pre-match warmup garage

- [x] **Pre-match warmup garage** (cross-ref §46.9 practice-during- loading):
      per-mode 10-30s warmup zone before match start where player can swing a
      vehicle / practice a combo / familiarize with stage; auto-exits when match
      ready.
- [x] **Per-mode warmup variant**: racing → drive a short loop on starting line;
      fighting → swing a few attacks in lobby room; brawl modes → 10s in arena.

### 128.7 Post-match analysis screen

- [x] **Post-match analysis screen**: per-match damage breakdown by move /
      category / counter-hit / drive-impact / finisher; combo- breakdown;
      per-meter usage; per-corner-pressure win-rate; per- mistake-frame
      timeline.
- [x] **Move-of-the-match auto-highlight**: AI-detected most-impactful moment
      auto-clipped with cinematic camera; share / save / submit-
      to-replay-gallery.
- [x] **Per-match-summary rewards** breakdown: XP gained / currency / Battle
      Pass tier delta / Mastery progression / Faction XP.
- [x] **Per-match-invite link**: one-tap share match invite to friend via
      deep-link.

### 128.8 Match-day prep

- [x] **Match-day prep checklist**: before ranked / tournament match,
      auto-checklist suggests: load preferred fighter / equip preferred
      cosmetics / verify network / verify controller calibration / enter
      training mode for X minutes.
- [x] **Per-account match-day routine** saved + loadable.

Implementation evidence: `SportsVehicleModes.V2` is implemented through
`FV2SportsVehicleModesCatalog` in `V2RaceModes`, canonical race definitions in
`V2Racing` for `Race.VehicleSoccer`, `Race.VehicleStunt`, `Race.CrashBreaker`,
and `Race.TrackmaniaTimeTrial`, race-mode plugin registrations, Blueprint
builders / validators / deterministic signature, `V2.Racing.Module` and
`V2.RaceModes.Module` automation, `V2.Racing.SportsVehicleModes.AssetContract`
negative coverage, `SportsVehicleModes_V2_Contract.json`,
`sports-vehicle-modes.json`, `sports-vehicle-modes.md`, CI registration, and
`check-v2-sports-vehicle-modes.py`.

---

## 129. Specialty Combat Modes: Punch-Out Boxing Sim, Bushido Blade One-Hit-Kill Sword

### 129.1 Punch-Out Boxing Simulator

- [x] **Boxing Sim Mode** (Punch-Out-inspired): pure-boxing ruleset with
      realistic stamina + realistic punch types + per-opponent
      pattern-recognition gameplay.
- [x] **Per-opponent fighter** with signature pattern / tell + per- pattern
      counter-window (cross-ref §60.9 OS detector).
- [x] **Per-round 3-minute clock** + per-round corner advice + per- round
      scorecard.
- [x] **Per-fight cinematic intro** with weigh-in + bell-ring + ref- check.
- [x] **Boxing-only fighter pool**: UFC roster fighters eligible + special
      boxing-themed fighters from launch roster.
- [x] **Career Boxing arc**: climb the boxing-rank ladder from prelim to world
      title.

### 129.2 Bushido Blade One-Hit-Kill Sword

- [x] **Bushido Blade-style** ruleset: weapon-based combat where any clean hit
      can be lethal; per-hit damage based on weapon + hit location + speed;
      one-hit-kill possible.
- [x] **Per-stance system**: high / mid / low stance with rock-paper- scissors
      counter relationships.
- [x] **Per-weapon type**: katana / nodachi / wakizashi / naginata / spear /
      dagger + per-weapon reach / speed / lethal-zone tuning.
- [x] **Per-stage interactive**: trees / pillars / running water / sand / wind
      direction affects strike physics.
- [x] **No HP bar** by design: visible damage state on character indicates
      injury level (clean → wounded → critically injured → down).
- [x] **Per-fight respect-rules**: ceremonial bow + ref-check + draw-
      both-blades sequence.

### 129.3 Mortal Kombat 1-Hit Tournament

- [x] **MK One-Hit Tournament** (Bushido Blade meets MK): per-match
      single-hit-kill ruleset using MK roster + weapons; cinematic slow-mo on
      KO.

### 129.4 Pro Boxing rules per region

- [x] **Per-region boxing rules variants**: WBA / WBC / IBF / WBO championship
      rules + Olympic boxing (3-round amateur) + Bare- Knuckle Boxing (BKB) +
      Mexican-rules.
- [x] **Per-region boxing fighter roster** per affiliation.

### 129.5 Sword / weapon master class

- [x] **Per-fighter weapon-master class**: deep weapon-specialty training arc
      unlocking Bushido-style combat + lore + per-weapon mastery progression.

Implementation evidence: `SpecialtyCombatModes.V2` is implemented through
`FV2SpecialtyCombatModesCatalog` in `V2Modes`, canonical mode definitions for
`Mode.Specialty.BoxingSim`, `Mode.Specialty.BushidoBlade`, and
`Mode.Specialty.MKOneHitTournament`, config asset defaults, Blueprint builders /
validators / deterministic signature, `V2.Modes.Module` automation,
`V2.Modes.SpecialtyCombatModes.AssetContract` negative coverage,
`SpecialtyCombatModes_V2_Contract.json`, `specialty-combat-modes.json`,
`specialty-combat-modes.md`, CI registration, and
`check-v2-specialty-combat-modes.py`.

---

## 130. Persistent World Economy + NPC AI Schedules + Crime Rate

### 130.1 Persistent world economy

- [x] **Per-cosmetic supply / demand** in open-world shops: per-shop inventory
      rotates daily based on community-wide cosmetic- purchase data; rare items
      more expensive when high-demand.
- [x] **Per-vehicle part supply rotation**: per-shop hidden-parts inventory
      rotates weekly; high-demand parts move to premium shops.
- [x] **Per-account market participation**: player can flag items as "wanted";
      if wanted-list correlates with high demand globally, community-tier
      rewards (signed by ops).
- [x] **Anti-bot economy protection**: per-account purchase rate caps + per-IP
      rate caps (cross-ref §49 anti-cheat).

### 130.2 NPC AI schedules

- [x] **Per-NPC daily routine**: each open-world NPC has a daily schedule
      (commute / work / lunch / leisure / sleep) authored per-NPC.
- [x] **Per-district NPC population density** time-of-day variation: downtown
      busiest at lunch / commute hours; harbor busiest at shipping shift; clubs
      busiest at night.
- [x] **Per-NPC reactive behavior**: NPCs react to player presence + vehicle +
      faction allegiance (cross-ref §99.7).
- [x] **Per-NPC interactable**: per-NPC mini-quest or vendor / service when
      interacted.

### 130.3 Crime rate

- [x] **Per-district crime rate**: dynamic crime-rate gauge per district
      reflects player-and-NPC criminal activity (chase / damage / takedown).
- [x] **Per-district cop spawn**: higher crime rate = more cops in that
      district; lower crime rate = fewer cops.
- [x] **Per-district per-faction influence**: faction-controlled districts
      (cross-ref §99.7) have faction-specific crime profile.
- [x] **Per-event district lockdown**: extreme crime rate triggers district-wide
      police lockdown (cross-ref §103.2 heat 6) with cinematic + ambient siren
      ambience.

### 130.4 Dynamic event rotation

- [x] **Per-day random-event seed**: same world map for all players day-by-day;
      daily-event-seed shared for fairness; per-day community event tally.
- [x] **Per-event rare item drop**: rare cosmetic drop pool tied to per-event
      difficulty.

### 130.5 World-state persistence

- [x] **Per-account world-state save**: per-player open-world progress preserved
      (territory control + crime rate + NPC relationship + shop inventory).
- [x] **Per-account world-state sync** across cross-platform play.

### 130.6 Economy ops dashboard

- [x] **Per-region economy ops dashboard**: inflation / deflation /
      cosmetic-price-distribution / inventory-turnover / crime-rate trend
      visible to ops team.

Implementation evidence: `PersistentWorldEconomyNPCSchedulesCrime.V2` is
implemented in the new `V2World` module through
`FV2PersistentWorldEconomyCatalog`, default catalog builder, Blueprint
validator, and deterministic signature. Automation coverage lives in
`V2.World.PersistentEconomyNPCSchedulesCrime` with negative cases for premium
shop migration, anti-bot caps, NPC routines, density variation, crime lockdown,
daily event seed, cross-platform world-state sync, and ops dashboard metrics.
File-backed evidence includes `PersistentWorldEconomy_V2_Contract.json`,
`persistent-world-economy.json`,
`persistent-world-economy-npc-schedules-crime.md`,
`libs/proto/src/oshun/v2/persistent_economy/economy.proto`, CI registration, and
`check-v2-persistent-world-economy.py`.

---

## 131. Director Commentary, ADR, Origin Comic Mini-Series, Cinematography Library

### 131.1 Director's commentary tracks

- [x] **Per-cinematic director's commentary** track (cross-ref §45.7): developer
      audio commentary over Story / Side Story / Arcade ending / Character
      Episode cutscenes. Toggleable per cutscene.
- [x] **Per-mocap behind-the-scenes commentary**: mocap-stage director +
      stunt-coordinator commentary attached to mocap gallery (cross-ref §73.6).
- [x] **Per-character writer commentary**: lead writer commentary on
      character-defining scenes.

### 131.2 ADR (Additional Dialogue Recording)

- [x] **Per-character ADR session pipeline**: scheduled per-quarter ADR sessions
      for live-event dialogue (cross-ref §77.3); per-event voice-line bank
      updated.
- [x] **Per-locale ADR coordination** with per-locale director (cross- ref
      §77.11).
- [x] **ADR for narrative DLC**: post-launch story DLC includes new
      voice-recording session per character per locale.

### 131.3 Origin comic mini-series

- [x] **Per-fighter origin comic** mini-series: 3-5 issue digital comic per
      fighter telling their pre-Story backstory; commissioned art + per-locale
      translation.
- [x] **In-game comic reader** in Codex (cross-ref §84.3): browsable per-fighter
      comic with per-locale translation + per-page art gallery.
- [x] **Per-issue unlock condition** tied to Mastery (cross-ref §72) + Side
      Story (cross-ref §73).
- [x] **Physical comic release** (Founders Edition extras + standalone retail).

### 131.4 Cinematography library

- [x] **Per-scene cinematography reference** at `V2/balance/cinema/`
      (mood-boards / reference frames / camera blocking docs).
- [x] **Lighting fixtures library** for in-engine lighting: per-fixture light
      type + intensity + color temp + falloff curve + flicker pattern. Authored
      at `V2/balance/cinema/lighting-fixtures/`.
- [x] **Per-scene LUT (Look-Up Table)** library for color grading per mood /
      per-fighter / per-faction / per-region.
- [x] **Per-scene depth-of-field preset** library with focal length / aperture /
      bokeh shape per-scene.
- [x] **Per-character cinematic eye-light** (catchlight) per close-up shot.
- [x] **Volumetric atmospherics**: god rays / light shafts / haze / fog density
      per-scene authored.

### 131.5 Per-character internal monologue

- [x] **Per-character internal monologue voice-over** option for Story
      cutscenes: audible character thought during silent moments; toggleable per
      cutscene.
- [x] **Per-locale internal monologue** with locale-specific cultural
      thought-pattern adaptation.

### 131.6 Per-character family tree & cross-IP

- [x] **Per-fighter family-tree** documented in Codex (cross-ref §84.3):
      per-fighter relatives / mentors / students / rivals visualized as a tree.
- [x] **Cross-IP licensed lore** (cross-ref §52.7): where contracted,
      cross-franchise lore-canon references documented for cameo characters.

### 131.7 Cinematography editor

- [x] **In-engine Cinematography Editor**: Sequencer-based authoring tool with
      cinematography library + LUT + lighting fixtures + depth-of-field presets
      pre-loaded; per-scene authoring workflow streamlined for narrative
      designers.

### 131.8 Story DLC seasons

- [x] **Per-season story DLC** plan (cross-ref §52.1 Year-1 plan): seasonal
      story-arc DLC adding 2-4 hours of narrative content per season; per-DLC
      ADR + cinematic + comic mini-series + new character episodes.

      Implemented by extended `EV2CinematicCommentaryTrackKind` Writer and
      Internal Monologue tracks, stricter director Story / Side Story / Arcade
      ending / Character Episode coverage, mocap-gallery BTS commentary with
      stunt-coordinator coverage, `FV2CinematicNarrativeExpansionCatalog` and
      related ADR / origin comic / cinematography / Codex lore / editor /
      story-DLC structs, default catalog builder + validator + signature helper,
      `UV2CinematicsConfigAsset` and runtime snapshot integration, default
      `CinematicNarrativeExpansion.V2` catalog id,
      source-controlled `CinematicNarrativeExpansion_V2_Contract.json`,
      `V2/balance/cinema/cinematic-narrative-expansion.json`,
      `V2/balance/cinema/lighting-fixtures/lighting-fixtures.json`,
      `V2/docs/cinematics/cinematic-narrative-expansion.md`, focused
      `V2.Cinematics.NarrativeExpansion.AssetContract` automation coverage, and
      `check-v2-cinematic-narrative-expansion.py` CI coverage.

---

## 132. Karaoke & Music Rhythm Mode (Yakuza-Style)

### 132.1 Karaoke mode

- [x] Karaoke mode (Yakuza-inspired): per-fighter sings a song with rhythm-based
      input (timed button presses + sustained held notes + drift-tilt for
      vibrato). Per-fighter signature theme song authored (cross-ref §72.2).
      Implemented through `FV2KaraokeSongSpec` entries in
      `FV2KaraokeRhythmModeCatalog`, with timed-tap, sustained-hold, and
      drift-tilt vibrato input requirements.
- [x] Per-song scoring: pitch accuracy + timing precision + style flair;
      per-song unlockable cosmetic on perfect score. `EvaluateKaraokeScore`
      applies the 40/40/20 rubric and returns the perfect-score cosmetic id only
      when all rhythm inputs are complete.
- [x] Per-fighter signature karaoke song: each roster fighter has 1 signature
      song + 2 alt-character songs (cross-character karaoke). Default launch
      catalog covers Asha, Mara, Juno, and Bronx signature songs with two
      alt-character song links each.
- [x] Per-locale song library: localized song selection per region (cross-ref
      §43.7 multilingual announcer pack); per-locale licensed music where
      contracted. Each authored song carries locale coverage and
      contracted-license metadata.

### 132.2 Music rhythm combat

- [x] Rhythm-combat fusion mode: fighter combos must hit on rhythm beats
      matching the soundtrack tempo; per-beat-on-time multiplier boost; off-beat
      penalty. `FV2RhythmCombatRuleSpec` and `EvaluateRhythmCombatTiming`
      resolve on-beat multiplier and off-beat penalty results.
- [x] Per-stage rhythm-aware ambience: stage music BPM drives the rhythm grid;
      visible beat indicator on HUD. Stage coverage includes Metro City, Def Jam
      NYC Club, MK Pit Netherrealm, and Ostrheinsburg with HUD beat indicator
      gating.

### 132.3 DJ booth mode (Def Jam ruleset deep)

- [x] DJ Booth Mode (cross-ref §40.4 + §35 Def Jam): player controls DJ for crew
      during match; per-turntable-input affects crowd reaction (cross-ref
      §43.10) + meter regen rate + combo timing bonus. `FV2DJBoothModeSpec`
      validates all three gameplay effects for the Def Jam DJ Booth ruleset.
- [x] Per-record library: 50+ tracks at launch; per-record BPM + genre tagging
      for crossfade matching. `LaunchRecordCount` is 52 and all 52
      `FV2DJRecordSpec` records validate BPM, genre, crossfade tags, and
      `/Audio/Music/DJBooth/` assets.
- [x] Per-DJ-mode online tournament: 1v1 DJ battle in Battle Hub arcade cabinet
      (cross-ref §23.4). `BattleHub.ArcadeCabinet.DJBattle` and
      `bOnlineDJTournamentEnabled` are part of the runtime contract.

### 132.4 Music gallery & jukebox

- [x] Music Gallery extension (cross-ref §43.9): per-account unlocked track
      playlist + jukebox UI for Battle Hub / Garage / Apartment hub ambient
      music. `FV2JukeboxPlaylistSpec` covers all three hub jukebox surfaces.
- [x] Per-player playlist creation: build personal playlists from unlocked
      tracks; share as code. Playlist sharing uses `ShareCode.KaraokePlaylist`.

### 132.5 Soundtrack visualizer

- [x] Soundtrack visualizer mode: per-track visual mode for music-only listening
      with reactive Niagara VFX driven by audio FFT analysis. Implemented by
      `FV2SoundtrackVisualizerSpec` with FFT-band analysis and
      `NS_V2_AudioFFTVisualizer`.

### 132.6 Karaoke broadcast

- [x] Karaoke broadcast (Battle Hub stage): karaoke matches stream to the in-hub
      stage for other players to watch; per-karaoke audience emote reaction.
      `FV2KaraokeBroadcastSpec` streams to `BattleHub.Stage.Karaoke` and
      requires Cheer, Clap, and Confetti emotes.

### 132.7 Crossplay karaoke

- [x] Cross-platform karaoke ranked queue: per-song leaderboard; per-fighter
      karaoke rank tier. `FV2CrossplayKaraokeRankedSpec` exposes
      `Queue.Crossplay.KaraokeRanked`, per-song leaderboards, and per-fighter
      rank tiers.

  Evidence: §132 is backed by
  `V2/ue/Content/V2/Audio/KaraokeRhythmMode_V2_Contract.json`,
  `V2/balance/audio/karaoke-rhythm-mode.json`,
  `V2/docs/audio/karaoke-rhythm-mode.md`, dedicated
  `V2.Audio.KaraokeRhythmMode.AssetContract` automation, `V2.Audio.Module`
  integration checks, and `check-v2-karaoke-rhythm-mode.py` CI coverage.

---

## 133. Arcade Mini-Game Suite: Pinball, Air Hockey, Mini-Golf, Darts, Pool, Cooking, Photo Tournament

Implementation evidence: `ArcadeMiniGameSuite.V2` is implemented in
`FV2ArcadeMiniGameSuiteCatalog` and mirrored into Battle Hub arcade cabinets via
`BuildDefaultHubArcadeMiniGameSpecs`. Contract/data/docs/automation are
`V2/ue/Content/V2/Modes/ArcadeMiniGameSuite/ArcadeMiniGameSuite_V2_Contract.json`,
`V2/balance/modes/arcade-mini-game-suite.json`,
`V2/docs/modes/arcade-mini-game-suite.md`, and
`V2/ue/Tools/check-v2-arcade-mini-game-suite.py`; coverage is enforced by
`V2.Modes.Module` and `V2.Modes.ArcadeMiniGameSuite.AssetContract`.

### 133.1 Pinball

- [x] **In-engine Pinball table**: per-fighter / per-faction themed pinball
      table (Lin Kuei frost theme / Black Dragon urban theme / etc.); per-table
      playfield + bumpers + ramps + flippers + jackpot jackpot.
- [x] **Per-table multiball + bonus modes**: per-table authored bonus mode
      (e.g., Lin Kuei Frost Multiball / Black Dragon Heist Mode).
- [x] **Per-table leaderboard** with cosmetic top-N rewards.
- [x] **Tilt mechanic**: physical-controller-tilt input affects ball physics;
      per-platform compatibility.

### 133.2 Air Hockey

- [x] **Air Hockey** mini-game: 2-player local + online competitive;
      per-puck-physics arcade-feel; per-paddle customization.
- [x] **Per-air-hockey table** themed per faction.

### 133.3 Mini-Golf

- [x] **Mini-Golf** mini-game: 18-hole + 9-hole + per-fighter themed courses;
      per-hole authored level design (vertical drops / loops / water hazards /
      windmill blockers / moving platforms).
- [x] **Per-club selection**: putter / wedge / driver per-shot type.
- [x] **Per-course leaderboard** + community-designed courses via in- engine
      editor (cross-ref §39).

### 133.4 Darts

- [x] **Darts** mini-game: per-fighter throw style; per-board variant (standard
      501 / cricket / 301 / round-the-clock).
- [x] **Tilt + button-release** physics-based throw.

### 133.5 Pool / Billiards

- [x] **Pool / Billiards** mini-game: per-table-size (8-ball / 9-ball / 14.1
      straight pool / snooker); per-cue physics-based aim + power meter;
      per-table physics.
- [x] **Per-cue customization** library (cross-ref §100 customization depth).

### 133.6 Cooking simulator (Yakuza-style)

- [x] **Cooking mini-game** (Yakuza-inspired): per-recipe multi-stage
      timing-based cooking (chop / sauté / season / plate); per-ingredient
      sourcing from in-world economy (cross-ref §130).
- [x] **Per-recipe leaderboard** for fastest cooking time.
- [x] **Per-recipe in-game effect**: cooked dishes grant temporary buffs
      (cosmetic-only by default).

### 133.7 Photo mode tournament

- [x] **Photo Mode Tournament** (cross-ref §45.5 + §114.4): community submits
      photo-mode captures for monthly themed competition; community + jury
      voting; cosmetic prize for top entries.
- [x] **Per-theme rotation**: per-month theme (action / portrait / landscape /
      cosmetic-showcase / cinematic-recreation).

### 133.8 Bowling extended (cross-ref §69.2)

- [x] **Tekken Bowl extension**: per-fighter signature bowling animation +
      per-bowling-alley themed environment + per-strike VFX + per-bowling-rank
      ladder.

### 133.9 Arcade machines in Battle Hub

- [x] **All mini-games available as Battle Hub arcade cabinets** (cross- ref
      §23.4): one cabinet per mini-game; per-cabinet leaderboard + coin-input
      gating (1 Fighter Coin per play; free-play for ambassadors / pro players).

---

## 134. World Boss + Community Raid + Async Community Events

### 134.1 World Boss

- [x] **World Boss** event: massive AI boss with shared HP across community;
      players globally chip at boss HP via per-match contribution; per-event
      time-limit (e.g., 7 days).
- [x] **Per-tier reward**: per-personal-damage contribution + per-
      community-completion-tier rewards (Bronze / Silver / Gold / Mythic);
      per-event exclusive cosmetic for top-1% contributors.
- [x] **Per-boss unique mechanic**: per-boss authored gimmick (e.g., "Boss heals
      on rage state" / "Boss splits at 50% HP into two bosses with shared HP
      pool").
- [x] **Per-boss cinematic intro + per-cycle boss state changes**.
- [x] **World Boss leaderboard** per-account contribution; per-week top-N
      spotlight.

### 134.2 Async raid

- [x] **Async raid**: 12-24 player raid with async per-player time slots;
      players contribute over 1-3 day window; per-raid total damage /
      per-mechanic-completion drives reward tier.
- [x] **Per-raid signature event**: monthly per-quarter raid event with themed
      boss + lore arc (cross-ref §83.10).

### 134.3 Async community events

- [x] **Community challenges**: time-limited per-week challenge ("Community
      deals 1 billion damage to X boss within 7 days" style); per-completion
      community-wide cosmetic unlock.
- [x] **Per-region community split**: per-region progress tracked separately;
      per-region exclusive cosmetic on regional completion + global cosmetic on
      aggregate completion.

### 134.4 Daily community goals

- [x] **Daily community goals**: each day, a community-aggregate target
      (Community wins 100,000 ranked matches today) with per-completion reward
      applied to all participants.

### 134.5 Server-tracked community stats

- [x] **Per-day community-aggregate dashboard**: in-game widget showing total
      community match count / total Battle Pass progress / total tournament
      participations / per-region community state.

### 134.6 Cooperative world events

- [x] **Crew-coordinated world boss attempt**: 8-32 players in a shared instance
      simultaneously fighting world boss for elevated contribution; per-co-op
      session bonus damage.

### 134.7 World boss anti-cheat

- [x] **Per-contribution validation**: server-side validation of per- player
      damage to boss (cross-ref §49); flagged contributions voided.

**Implementation evidence**: `WorldBossCommunityRaid.V2` is implemented through
`FV2WorldBossCommunityRaidCatalog`, exposed by the online-services subsystem and
Blueprint library, and guarded by `WorldBossCommunityRaid_V2_Contract.json`,
`world-boss-community-raid.json`, `world-boss-community-raid.md`, and
`check-v2-world-boss-community-raid.py`. The backend bridge remains covered by
`@v2/world-boss-community-raid-bridge` and
`check-v2-world-boss-community-raid-bridge.py`.

---

## 135. AI-Generated Commentary + Highlight Reel + Per-Match Analysis

### 135.1 AI-generated per-match commentary

- [x] **AI play-by-play commentary**: post-match auto-generated text commentary
      from match data (per-move recap + per-combo narration + per-finisher
      dramatic line); text-to-speech reads commentary in preferred announcer
      voice (cross-ref §43.7).
- [x] **Per-fighter / per-matchup narrative awareness**: AI uses fighter lore +
      matchup history + rivalry status to generate context-aware narration
      (e.g., "And Sub-Zero's 12th win against Scorpion — the Lin Kuei legend
      continues").
- [x] **Per-locale commentary**: per-locale text-generation + per-locale TTS
      voice.
- [x] **AI Commentary opt-out** in settings.

### 135.2 AI-generated highlight reel

- [x] **Auto-edited highlight reel** post-match: AI selects top 3-5 moments from
      match (longest combo / counter-hit punish / Power- Play / dramatic
      comeback / KO) + auto-edits with cinematic camera + music swell; one-tap
      share to social.
- [x] **Per-highlight customization** before sharing: trim / add filter / change
      music track / add caption.
- [x] **Per-highlight share format**: MP4 / GIF / vertical-9:16 for mobile
      share.

### 135.3 Per-match analysis screen

- [x] **Per-match analysis** (cross-ref §128.7): damage breakdown by move +
      combo-breakdown + per-meter usage + per-corner-pressure win-rate +
      per-mistake-frame timeline + matchup-specific advice.
- [x] **AI coaching insights**: "You missed 5 throw techs in round 2 — consider
      practicing throw tech timing"; per-mistake-pattern- detection feeds Smart
      Help (cross-ref §78.6).
- [x] **Per-fighter strength / weakness summary**: per-character what worked /
      what didn't worked across recent matches.

### 135.4 Auto-clip best moments

- [x] **Auto-clip best moments** to per-account clip library; per-clip
      AI-suggested caption + AI-generated title.
- [x] **Per-clip library shareable** to friends + public clip gallery
      (moderated).

### 135.5 EU AI Act compliance for AI commentary

- [x] **AI Use disclosure**: AI commentary clearly labeled as machine- generated
      (cross-ref §80.4 EU AI Act conformity); per-AI-output opt-out + manual
      review of training data.

### 135.6 AI translation for chat

- [x] **AI translation** for community chat: real-time per-message translation
      across locale boundaries; per-translation accuracy score + manual
      override.

### 135.7 AI per-fighter procedural dialogue

- [x] **Per-fighter procedural dialogue** (post-launch DLC seasons): AI
      generates per-event filler dialogue lines per fighter; manually reviewed +
      signed off before deployment.

**Implementation evidence**: `AIPostMatchExperience.V2` is implemented in
`FV2AIPostMatchExperienceCatalog`, exposed through `V2AICommentary` Blueprint
builders/validators and mirrored by `@v2/iris-commentary-orchestration` via
`buildV2AIPostMatchExperiencePlan`. Coverage is locked by
`AIPostMatchExperience_V2_Contract.json`, `ai-post-match-experience.json`,
`ai-post-match-experience.md`, and `check-v2-ai-post-match-experience.py`; chat
translation uses `@v2/iris-realtime-translation`.

---

## 136. Real-World Brand Partnerships + Celebrity Guests + Venue Tie-Ins

### 136.1 Brand sponsorship integration

- [x] **Per-brand sponsorship slot** in open-world signage / vehicle decals /
      racing sponsorship (cross-ref §101.7); transparent brand-fit scoring;
      per-region brand-pool variant.
- [x] **Per-partner brand integration**: Red Bull / Monster Energy / Nike /
      Adidas / Under Armour / Logitech G / etc. (per partnership contract);
      per-brand exclusive cosmetic; per-brand exclusive event.

### 136.2 Celebrity guest characters

- [ ] **Per-season celebrity guest character** (cross-ref §27.12): real-world
      musician / actor / athlete / cultural figure added as limited-time DLC
      fighter; per-celebrity NIL contract + per- celebrity removal clause +
      per-celebrity per-region content variant (some regions may exclude per
      local law). — re-marked [~] 2026-06-12: per-celebrity NIL contracts are
      external agreements; none exist. `blocked:external`
- [ ] **Per-celebrity unique signature library** (cross-ref §72): intro / taunt
      / victory / lore + per-celebrity-themed fighter kit. — re-marked [~]
      2026-06-12: depends on celebrity engagements that do not exist; no such
      assets exist in-repo. `blocked:external`
- [ ] **Per-celebrity sponsorship tie-in**: celebrity-branded cosmetic pack +
      celebrity-recorded VO + per-celebrity-themed Battle Pass tier reward. —
      re-marked [~] 2026-06-12: external sponsorship contracts and recordings;
      none exist. `blocked:external`

### 136.3 Venue tie-ins

- [x] **Per-venue tie-in stage**: real-world iconic venue licensed for in-game
      stage (cross-ref §42 stages + §99 racing tracks). E.g., Madison Square
      Garden for WWE PPV / T-Mobile Arena for UFC PPV / Tokyo Dome for crossover
      event / Suzuka Circuit for racing.
- [x] **Per-venue cinematic intro** with venue-flavor commentary.
- [x] **Per-venue licensing contract** with venue owner + removal- clause +
      per-venue per-region availability.

### 136.4 Pop-up event partnerships

- [x] **Real-world pop-up event tie-in**: physical V2 event at gaming
      conventions (E3 / Gamescom / Tokyo Game Show / PAX / EVO) with in-game
      tie-in (special promo code / cosmetic / commemorative flair).
- [x] **Per-event physical merchandise** synced with in-game cosmetic (cross-ref
      §83.10).

### 136.5 Branded content modes

- [x] **Branded limited-time mode**: per-quarter brand-sponsored themed mode
      (e.g., Red Bull Aerial Stunt mode / Monster Energy Drift Cup) with
      brand-themed cosmetics + leaderboard.

### 136.6 Brand & celebrity ethics review

- [x] **Per-partnership ethics review** by community-advisory board (cross-ref
      §95.3 sensitivity readers + §80.10 cultural review); partnerships rejected
      if violate community standards.
- [x] **Per-partnership transparency**: all paid product placement disclosed per
      French law + per-EU DSA (cross-ref §94.6).

### 136.7 Brand crossover Battle Pass

- [x] **Brand-themed Battle Pass season**: 1 season per year with heavy brand
      tie-in (transparent brand involvement disclosed).

**Implementation evidence**: `BrandCelebrityVenuePartnerships.V2` is implemented
as `FV2BrandCelebrityVenuePartnershipCatalog`, exposed through online-services
Blueprint builders/validators and subsystem runtime snapshot flags. Coverage is
locked by `BrandCelebrityVenuePartnerships_V2_Contract.json`,
`brand-celebrity-venue-partnerships.json`,
`brand-celebrity-venue-partnerships.md`, and
`check-v2-brand-celebrity-venue-partnerships.py`.

---

## 137. Per-Account Vault + Lifetime Replay Archive + Ghost Data Archive

### 137.1 Per-account vault

- [x] **Per-account vault**: unlimited cloud-storage slot for cosmetic items
      (every owned skin / weapon / banner / title / emote / vehicle / custom
      design preserved permanently).
- [x] **Per-vault organization**: per-folder + per-tag classification +
      per-search query language (cross-ref §40.3).
- [x] **Per-vault size monitoring**: per-account vault size dashboard +
      soft-warn at 95% capacity; per-tier storage upgrades available via account
      level (cross-ref §84.2).

### 137.2 Lifetime replay archive

- [x] **Lifetime replay archive**: every replay preserved cloud-side
      per-account; per-replay search by mode / fighter / opponent / date /
      outcome / rank.
- [x] **Per-replay favorited / pinned** subset for quick access.
- [x] **Per-account replay export** to local file (PC; console where TRC
      permits); per-replay MP4 export budget.

### 137.3 Lifetime ghost data archive

- [x] **Lifetime ghost-data archive**: every Time Trial / Canyon Duel /
      training-mode lab session ghost data preserved; per-account shareable as
      code.
- [x] **Per-ghost loadable** as opponent in any mode supporting ghost data.

### 137.4 Lifetime stats archive

- [x] **Per-account lifetime stats** preserved: per-fighter win rate + per-stage
      win rate + per-matchup history + per-rank history across all seasons;
      per-account career-spanning achievement tracking.

### 137.5 Vault sharing

- [x] **Vault sharing**: friend visit allows browsing your vault (cosmetic-only;
      no editing); per-shared-vault privacy controls.

### 137.6 Vault backup

- [x] **Per-account vault backup**: daily snapshot to immutable cold storage
      (cross-ref §26 Replay Storage + Ghost Data Photo Cloud); per-account
      restore-from-backup option for accidental deletion.

### 137.7 Vault transfer on account merge

- [x] **Per-account merge vault transfer** (cross-ref §67.6): when consolidating
      cross-platform accounts, per-vault item de-dup + transfer + audit trail.

### 137.8 Account inheritance (estate planning)

- [x] **Per-account inheritance** option: account holder can designate a
      beneficiary to inherit vault contents on documented passing (cross-ref
      §77.5 likeness opt-out for estate management).

**Implementation evidence**: `PerAccountVaultArchive.V2` is implemented as
`FV2PerAccountVaultArchiveCatalog`, exposed through online-services Blueprint
builders/validators and subsystem runtime snapshot flags. Coverage is locked by
`PerAccountVaultArchive_V2_Contract.json`, `per-account-vault-archive.json`,
`per-account-vault-archive.md`, `check-v2-per-account-vault-archive.py`, and the
`@v2/per-account-vault-estate-bridge` inheritance bridge.

---

## 138. Launch Readiness

V2 is **not feature-complete** until every item below is checked.

### 138.1 Pre-launch drills

- [ ] Internal dogfood drill (≥ 60 days across all modes and platforms). —
      re-marked [~] 2026-06-12: multi-week drill; cannot be evidenced in-repo
      and no playable build exists. `blocked:release`
- [ ] Closed beta with measurable target metrics (concurrent peak, matchmaking
      time, rollback frame distribution, crash rate, anti- cheat false-positive
      rate). — re-marked [~] 2026-06-12: external beta operation; no beta has
      run. `blocked:release`
- [ ] Beta-blocking-issue remediation + signoff. — re-marked [~] 2026-06-12:
      depends on a closed beta that has not run. `blocked:release`
- [ ] Cert / TRC / XR / lotcheck passed on every shipping platform. — re-marked
      [~] 2026-06-12: vendor certification; no submission has occurred.
      `blocked:external`
- [ ] Network stress test at 5× launch-estimated concurrency (planning
      assumption 2026-06-12: 100,000 CCU launch estimate, so 5× = 500,000). —
      re-marked [~] 2026-06-12: requires deployed staging infrastructure; none
      exists. `blocked:release`

### 138.2 Go/no-go

- [ ] Launch go/no-go checklist completed at `V2/docs/launch/go-no-go.md`. —
      re-marked [~] 2026-06-12: checklist doc exists; the go/no-go decision is a
      launch-time operation that has not occurred. `blocked:release`
- [ ] General Availability approval captured. — re-marked [~] 2026-06-12:
      launch-time organizational approval; nothing has shipped.
      `blocked:release`
- [ ] Rollout plan approved (canary % schedule, rollback triggers, day-one patch
      staged). — re-marked [~] 2026-06-12: approval is an organizational action;
      no patch artifacts exist to stage. `blocked:release`
- [ ] Rollback plan approved (per platform + per backend service). — re-marked
      [~] 2026-06-12: approval is an organizational action; no deployed
      platforms/services exist. `blocked:release`
- [ ] Post-deploy monitoring dashboards live (crash rate, server health,
      matchmaking p99, rollback frame distribution, rage-quit rate). — re-marked
      [~] 2026-06-12: requires deployed production services; none exist.
      `blocked:release`
- [ ] Canary analysis automation enabled for online services. — re-marked [~]
      2026-06-12: requires deployed online services; none exist.
      `blocked:release`

### 138.3 Critical-journey verification

- [ ] First-boot tutorial completion ≤ 25 minutes. — re-marked [ ] 2026-06-12:
      no playable build exists; the journey cannot have run.
- [ ] Arcade ladder completion per ruleset. — re-marked [ ] 2026-06-12: no
      playable build exists; the journey cannot have run.
- [ ] Story mode end-to-end on both major branches. — re-marked [ ] 2026-06-12:
      no story content or build exists.
- [ ] WWE Universe one full season simulated + one season manually-booked. —
      re-marked [ ] 2026-06-12: no playable mode exists.
- [ ] MyCAREER WWE one full career arc; UFC GOAT one full career arc. —
      re-marked [ ] 2026-06-12: no playable mode exists.
- [ ] MyGM, MyFACTION, MyRISE, Royal Rumble, Tower (Klassic + Towers of Time),
      Survivor, Tournament, Battle Hub session, World Tour 2-hour session,
      Tekken Force one playthrough, Devil Within one playthrough, Chronicles of
      the Sword one playthrough, Def Jam Story one playthrough. — re-marked [ ]
      2026-06-12: none of these modes are playable; no build exists.
- [ ] Online 1v1 ranked promotion run; online crew vs crew; tag-team 2v2; Royal
      Rumble online lobby fill. — re-marked [ ] 2026-06-12: no online services
      or build exist to run sessions on.
- [ ] Custom content end-to-end: CAF → CAW outfit → CAS weapon style → Movesets
      → Arena → Entrance → online publish → friend download → moderation flag. —
      re-marked [ ] 2026-06-12: no editors, content, or services exist to
      exercise this flow.
- [ ] Accessibility verifier: every accessibility feature toggled across a
      30-minute play session. — re-marked [ ] 2026-06-12: no playable session is
      possible; no build exists.
- [ ] Cross-play & cross-progression smoke test across all platforms. —
      re-marked [ ] 2026-06-12: no platform builds exist.
- [ ] **Training mode (§60) full tooling pass**: every dummy preset, hitbox /
      hurtbox / input / frame-data overlay, replay-takeover from training,
      multiplayer training lobby, practice-during-loading. — re-marked [ ]
      2026-06-12: tooling pass requires a runnable build; none exists.
- [ ] **Combat Trials & Mission Mode (§61) curriculum complete**: 20 trials per
      fighter all marked completable, ruleset tutorials all completable under 12
      lessons, daily mission rotation working. Implemented with
      `FV2MissionTrialCurriculumSpec`, 160 default combat trials, 96 authored
      mission specs, 4-slot daily rotation, tutorial-on-demand threshold tests,
      `MissionTrialCurriculum_V2_Contract.json`, and
      `check-v2-mission-trial-curriculum.py`. — re-marked [ ] 2026-06-12:
      curriculum data/specs exist, but "completable" cannot be verified without
      a runnable build.
- [ ] **Replay Theater & Replay Takeover (§62) end-to-end**: capture, view, take
      over either side from any frame, share by code, MP4 export, ghost- data
      export. Implemented with `FV2ReplayTheaterPipelineSpec`, public replay
      pool browse/query helpers, takeover practice scenario creation, subsystem
      runtime snapshot flags, `ReplayTheaterPipeline_V2_Contract.json`, and
      `check-v2-replay-theater-pipeline.py`. — re-marked [ ] 2026-06-12:
      pipeline code/contracts exist; end-to-end verification requires a runnable
      build that does not exist.
- [ ] **Character Presentation (§63)**: per-character intro, per-matchup banter,
      mirror dialogue, win/loss/draw quotes, lore page, entrance cinematic —
      every roster fighter covered. Implemented with
      `FV2CharacterPresentationCatalog`, full 8x8 matchup banter matrix,
      quote-bank selectors, lore/entrance/post-fight/audio-diary/credits hooks,
      `CharacterPresentation_V2_Contract.json`, and
      `check-v2-character-presentation.py`. — re-marked [ ] 2026-06-12: catalog
      covers an 8-fighter matrix, not "every roster fighter" (~61); no
      cinematic/VO content exists.
- [ ] **Tag-team (§64) parity**: 2v2 + 3v3 ranked online, tag-cancel + DHC +
      assist + snapback + X-Factor all functional; multi-fighter rollback
      verified at ≤ 100ms. Implemented with `FV2TagTeamMechanicsCatalog`,
      deterministic tag-cancel / snapback / DHC / assist / Cross Assault /
      X-Factor / Baroque specs, `TagTeamMechanics_V2_Contract.json`,
      `check-v2-tag-team-mechanics.py`, and focused
      `V2.Modes.TagTeamMechanics.AssetContract` automation. — re-marked [ ]
      2026-06-12: specs/catalogs exist; ranked-online functionality and ≤100ms
      rollback verification require live netplay that has never run.
- [ ] **Tournament Edition + Streamer Mode (§51)**: tournament-rule snapshot
      stored in replay header; streamer-safe music swap verified; broadcast
      overlays NDI / OBS output tested live. — re-marked [ ] 2026-06-12: "tested
      live" cannot have occurred; no build or broadcast output exists.
- [ ] **Battle Pass + Daily / Weekly Challenges (§52)**: progression earns
      reward, challenge manifest server-driven, no real-money loot boxes. —
      re-marked [ ] 2026-06-12: no server exists to drive manifests; runtime
      behavior unverified.
- [ ] **Display tech (§58.2)**: HDR calibration runs on each platform; 120fps
      mode active on PS5/XSX/PC; VRR detected; DLSS3.5/FSR3/XeSS2 + Frame Gen
      verified across reference GPUs; ultrawide 21:9 / 32:9 / 48:9 layout
      verified. — re-marked [~] 2026-06-12: requires devkit/reference hardware
      verification on cooked builds; none exist. `blocked:hardware`
- [ ] **Adaptive AI (§3.1)**: CPU bot demonstrably adjusts to player tendency
      across N matches (telemetry-verified). — re-marked [ ] 2026-06-12: no
      telemetry from real matches exists; AI code exists but the verification is
      claimed, not performed.
- [ ] **Adaptive controller pass (§53.1)**: PS Access Controller, Xbox Adaptive
      Controller, hitbox / stickless layout, mouse + keyboard SOCD verified. —
      re-marked [~] 2026-06-12: requires physical controller hardware on a
      runnable build; neither exists here. `blocked:hardware`
- [ ] **Photosensitivity / epilepsy safety (§53.2)**: flash-frequency limiter
      enforced in MK / X-Ray / KO cinematics. — re-marked [ ] 2026-06-12: no
      cinematics exist to enforce the limiter on; limiter code is unexercised.
- [ ] **Game Feel (§65) tuned**: per-ruleset hitstop / hitlag / camera shake /
      slow-mo profiles authored, reviewed in side-by-side replay harness, signed
      off by lead designer. Evidence: `FV2GameFeelCatalog`,
      `GameFeelTuning_V2_Contract.json`, `V2/balance/feel/`,
      `run-v2-game-feel-comparison.py`, `check-v2-game-feel-tuning.py`, and
      `V2.Combat.GameFeelTuning.AssetContract`. — re-marked [~] 2026-06-12:
      tuning data and harness exist in-repo; lead-designer review/signoff is a
      real-world action that has not occurred. `blocked:human`
- [ ] **Network Quality (§66) hardened**: delay-based fallback proven under ≥
      150ms RTT; LAN mode verified at tournament-venue dry-run; dedicated-
      server browser populated; private-lobby + custom-room functional.
      Evidence: `FV2NetworkQualityFeatureSet`, `FV2NetworkQualityOnlineCatalog`,
      `NetworkQuality_V2_Contract.json`, `check-v2-network-quality.py`, and
      `V2.Online.NetworkQuality.AssetContract`. — re-marked [~] 2026-06-12:
      tournament-venue dry-run and live-RTT proving are real-world operations;
      no servers or events exist. `blocked:release`
- [ ] **Cross-Platform Social (§67) parity**: cross-platform party, friends,
      reporting, mute/block, ban-appeal flow verified on every platform.
      Evidence: `FV2CrossPlatformSocialFeatureSet`,
      `CrossPlatformSocial_V2_Contract.json`,
      `check-v2-cross-platform-social.py`, and
      `V2.Online.CrossPlatformSocial.AssetContract`. — re-marked [~] 2026-06-12:
      per-platform verification requires platform network access and devkits;
      none exist here. `blocked:hardware`
- [ ] **Parental Controls & Age Gating (§68)**: COPPA / GDPR-K / Korea / China /
      Australia compliance verified; per-region SKU branching confirmed.
      Evidence: `FV2ParentalControlsFeatureSet`,
      `ParentalControls_V2_Contract.json`, `check-v2-parental-controls.py`, and
      `V2.Online.ParentalControls.AssetContract`. — re-marked [~] 2026-06-12:
      compliance verification is an external legal/QA process; no SKUs exist to
      branch. `blocked:governance`
- [ ] **Region rating variants (§54.2)**: USK 18 / CERO Z / GRAC / DJCTQ / ACB
      R18+ ship SKUs verified; per-region rating-board approval. — re-marked [~]
      2026-06-12: rating-board approval is external; no SKUs have been built or
      submitted. `blocked:external`
- [ ] **Bonus Modes (§69)**: Tekken Bowl / Ball, SF II car & barrel, MK Test
      Your Luck / Strike, SC Tower of Lost Souls / Trial of Devil, Boss Rush all
      unlockable and playable. Evidence: `FV2BonusModeCatalog`,
      `BonusModes_V2_Contract.json`, `check-v2-bonus-modes.py`, and
      `V2.Modes.BonusModes.AssetContract`. — re-marked [ ] 2026-06-12:
      catalog/contract code exists, but "unlockable and playable" requires a
      runnable build that does not exist.
- [ ] **Asset Budget (§70) compliance**: every fighter / stage within polygon /
      texture / animation / audio budget; weekly asset-audit reports clean.
      Evidence: `FV2AssetBudgetStreamingCatalog`,
      `AssetBudgetStreaming_V2_Contract.json`,
      `check-v2-asset-budget-streaming.py`, and
      `V2.Editor.AssetBudgetStreaming.AssetContract`. — re-marked [ ]
      2026-06-12: no fighter/stage art assets exist to measure against budgets
      (one .uasset in the project) and no weekly audit reports exist.
- [ ] **Day-One Patch + Hotfix (§71)**: server-driven balance hotfix pipeline
      verified; quick-resume / app-switch / crash-recovery tested on every
      platform; Denuvo or equivalent DRM cleared. Evidence:
      `FV2DayOnePatchHotfixRecoveryFeatureSet`,
      `DayOnePatchHotfixRecovery_V2_Contract.json`, `V2/docs/drm-decision.md`,
      `check-v2-day-one-patch-hotfix-recovery.py`, and
      `V2.Online.DayOnePatchHotfixRecovery.AssetContract`. — re-marked [~]
      2026-06-12: per-platform recovery testing requires devkits and DRM
      licensing is an external vendor agreement; no servers or builds exist.
      `blocked:hardware`
- [ ] **Profile Card + Match History (§47.2-47.3)**: card visible in lobbies /
      VS / spectator; match history filterable; per-fighter stats correct;
      win-streak indicators working. — re-marked [ ] 2026-06-12: runtime UI
      claims; no build, lobbies, or match data exist.
- [ ] **Quick Rematch + Network Test (§48.6-48.7)**: rematch with character
      change works; pre-match network handshake test gates ranked. — re-marked [
      ] 2026-06-12: online runtime behavior; no online services or build exist.
- [ ] **Custom Championships + Title History (§40.1)**: belt editor produces
      unique belts; per-championship reign log accurate. — re-marked [ ]
      2026-06-12: editor runtime behavior; no build or belt content exists.
- [ ] **Anti-Cheat extras (§49)**: HWID ban, win-trading detection, smurf
      detection, VPN detection, multi-account detection all live; ban appeal
      flow operational. — re-marked [ ] 2026-06-12: nothing is deployed; "all
      live" and "operational" are contradicted by the absence of any running
      service.
- [ ] **Specialized trainer modes (§60.9)**: frame-trap detector, OS detector,
      hitconfirm trainer, anti-air trainer, wakeup trainer, cross-up trainer,
      throw-shimmy trainer, reaction-time trainer, combo-damage optimizer all
      functional. — re-marked [ ] 2026-06-12: "all functional" requires a
      runnable training mode; no build exists.
- [ ] **Twitch Drops + Creator Partnership (§52.9)**: drop pipeline verified
      through a public test event; creator code system live. — re-marked [~]
      2026-06-12: a public test event and creator partnerships are external live
      operations; none have occurred. `blocked:release`
- [ ] **MK1 Kameo system (§38.4)**: ruleset-toggleable Kameo assists functional
      with separate ranked queue. — re-marked [ ] 2026-06-12: runtime/online
      claims; no build or ranked queue exists.
- [ ] **Per-Fighter Signature Library (§72) complete**: every roster fighter
      verified to have signature idle / taunt / impact / aura / theme / footstep
      / hit-react / weapon-glow / cinematic close-up assets per checklist.
      Evidence: `FV2FighterSignatureLibraryCatalog`,
      `FighterSignatureLibrary_V2_Contract.json`,
      `check-v2-fighter-signature-library.py`, and
      `V2.Combat.FighterSignatureLibrary.AssetContract`. — re-marked [ ]
      2026-06-12: no animation/audio/VFX assets exist (one .uasset in the
      project) and only 2 of ~61 per-fighter checklists exist on disk.
- [ ] **Per-Character Side Stories + Arcade Endings + Story Theater (§73)**:
      every fighter has a 1-2-hour Side Story, an Arcade ending cinematic +
      illustrated panels, an entry in Story Theater. Title progression tree
      authored. Branch tree visualizer verified. Evidence:
      `FV2PerCharacterNarrativeCatalog`,
      `PerCharacterNarrative_V2_Contract.json`,
      `check-v2-per-character-narrative.py`, and
      `V2.Modes.PerCharacterNarrative.AssetContract`. — re-marked [ ]
      2026-06-12: no playable story content, cinematics, or illustrated panels
      exist; only catalog/contract code does.
- [ ] **Match-Flow Mode Variants (§74)**: Versus + Versus CPU + CPU vs CPU +
      Hot-Seat + Couch Co-op + LAN + Time Attack + Score Attack + Wager Match +
      Friendly / Dare Match + Handicap + First Blood + Boss Battle + Sparring +
      Iron Man / Best-of-N all functional. Evidence:
      `FV2MatchFlowModeVariantCatalog`,
      `MatchFlowModeVariants_V2_Contract.json`,
      `check-v2-match-flow-mode-variants.py`, and
      `V2.Modes.MatchFlowModeVariants.AssetContract`. — re-marked [ ]
      2026-06-12: "all functional" requires a runnable game; only
      catalog/contract code exists.
- [ ] **Ranked Season Architecture (§75)**: hidden MMR + visible rank mapping +
      placement matches + decay + per-region seasons + cross-platform tier
      alignment + Crown overlay verified across an entire season cycle (90
      days). Evidence: `FV2RankedSeasonArchitectureCatalog`,
      `RankedSeasonArchitecture_V2_Contract.json`,
      `check-v2-ranked-season-architecture.py`, and
      `V2.Online.RankedSeasonArchitecture.AssetContract`. — re-marked [~]
      2026-06-12: a 90-day live season cycle is a long-running live operation;
      no deployed ranked service exists. `blocked:release`
- [ ] **Companion App + Public API + In-Game Wiki + Roadmap (§76)**: companion
      app live on iOS / Android / web; public REST API operational with
      rate-limit + auth; in-game Wiki + glossary searchable; roadmap page
      populated; developer portal published; modding policy documented.
      Evidence: `CompanionPublicApiWikiRoadmap_V2_Contract.json`,
      `check-v2-companion-public-api-wiki-roadmap.py`,
      `apps/v2/web/dev-portal/`, and `apps/v2/web/hub/`. — re-marked [ ]
      2026-06-12: no iOS/Android app exists in-repo and nothing is deployed;
      "live"/"operational" are contradicted. Static web surfaces under
      `apps/v2/web/` do exist.
- [ ] **Production: Studio / Mocap / VO / Composer / IP-NIL-Licensing (§77)**:
      org chart and external-studio MSAs signed; mocap booking calendar +
      stunt-double roster + insurance + safety briefing complete; ≥ 8 launch
      locales VO recorded per fighter; soundtrack ≥ 60 tracks across rulesets +
      stages + entrances + finishers with license clearance; per-character IP /
      NIL / likeness rights cleared; brand-placement contracts signed;
      localization talent assigned per locale. — re-marked [~] 2026-06-12:
      external contracts, recordings, and staffing; no MSA is signed, no VO or
      music asset exists in-repo, and no rights are cleared (see §77 re-marks).
      `blocked:external`
- [ ] **Loading + Splash + Tips + What's New + Notifications (§78)**: per-mode
      loading screens with art rotation; ≥ 200 loading tips localized;
      first-launch personalization wizard verified; What's-New splash on every
      patch; daily login bonus active; notification center per-category
      togglable. — re-marked [ ] 2026-06-12: no loading-screen art, patches, or
      runnable UI exist; "verified"/"active" runtime claims are contradicted.
- [ ] **MK Konsumables / Augments / Brutality Tracker (§16.6-16.8)** +
      **Konquest + Chess Kombat + Puzzle Kombat (§22.6-22.7)** + **SF Fighter
      Coins + Avatar shop + Character Episodes (§23.5-23.6)** + **Tekken
      Treasure Battle (§21.5)** + **WWE Showcase + Slammys + Run- in + Crowd
      Dive (§27.2-27.5)** all complete. — re-marked [ ] 2026-06-12: content
      modes cannot be "complete" with no game content or build; only
      code/contract data exists.
- [ ] **Locale-deeper (§54.4-54.7)**: CJK linebreaking + typography + per-locale
      formatting + inclusive language + live-ops localization SLA verified. —
      re-marked [ ] 2026-06-12: no localized build exists to verify rendering,
      and the live-ops SLA has never operated.
- [ ] **Engineering reliability (§56.5-56.8)**: latency budget ≤ 35ms / ≤ 25ms
      (120fps) measured; frame pacing histogram passes; ANR / GPU hang / memory
      leak detection live; crash dedup operational; CI matrix with nightly
      golden-replay regression + weekly Gauntlet soak test green. — re-marked [
      ] 2026-06-12: the CI workflow defines no nightly or weekly jobs, and no
      hardware latency measurement has been performed (see §56.5/§56.8
      re-marks); updated 2026-06-12: the 200-replay golden regression now runs
      per build (§56.1), but the nightly/weekly jobs, hardware latency
      measurement, and live detection infrastructure remain absent.
- [ ] **Esports Pro Circuit + Broadcast Extras + Wildcard / Roulette (§79)**:
      per-region calendar + cross-region series + Crown tournament archive
      populated; spectator emotes / hype meter / caster polls / cosmetic wager /
      wildcard / roulette / mystery mode shippable; esports operations on-call
      schedule + TO badge program active. — re-marked [~] 2026-06-12: live
      esports events, on-call staffing, and TO programs are external operations;
      no tournament has occurred to populate an archive. `blocked:release`
- [ ] **Compliance Deep (§80)**: per-account DSR UI shipped (Access / Erasure /
      Portability / Rectification / Restriction / Objection); GDPR + CCPA +
      CPA + VCDPA + CTDPA + UCPA + TDPSA + MCDPA opt-outs operational; DSA
      Statement of Reasons API + Trusted Flagger + semi- annual transparency
      reports; EU AI Act conformity for adaptive AI + chat ML + anti-cheat ML;
      per-region data residency live (EU / JP / KR / LATAM / China publisher
      SKU); cookie banner + TCF 2.2. — re-marked [ ] 2026-06-12: nothing is
      shipped, deployed, or live — no DSR UI, no operating opt-outs, no
      transparency reports, no data-residency infrastructure.
- [ ] **Stage Lore + Per-Fighter Signature Stages + Day/Night + Particles +
      Crowd Density (§81)**: every roster fighter has a designated signature
      stage; per-stage lore page authored; day/night cycle working on outdoor
      stages; per-stage atmospheric particles + crowd-density profile +
      stage-specific commentary lines verified. — re-marked [ ] 2026-06-12: no
      stage assets exist (one .uasset in the project); "working"/"verified"
      runtime claims are contradicted.
- [ ] **Per-Fighter Rivals + Relationship Matrix + Cross-Character Timeline
      (§82)**: reciprocal rivalry pairing per roster fighter;
      `URV2_RelationshipMatrix` populated with type per pair; master timeline
      authored + per-fighter timeline view in profile; faction- to-faction
      relationships drive Universe / MyGM / Konquest / Faction quest content;
      convergent endings library verified. — re-marked [ ] 2026-06-12: no
      `URV2_RelationshipMatrix` data assets exist (one .uasset in the project)
      and no quest content exists to be driven.
- [ ] **Live Service Calendar (§83)**: monthly seasonal themes scheduled for 12
      months out; anniversary plan documented; charity event partnership +
      in-game donation drive active; console-launch tie-in plans documented;
      returning-player rewards + lapsed-player email campaign + Free Weekend
      cycles scheduled; public live-service calendar published. — re-marked [~]
      2026-06-12: charity partnerships, email campaigns, and live event cycles
      are external operations; calendar planning artifacts exist in-repo but
      nothing is "active". `blocked:release`
- [ ] **Per-fighter signature library extended (§72.6)**: pre-match staredown,
      waiting-room idle, walk-speed personality, per-throw- angle distinct
      anims, per-knockdown-orientation variation, pre- mortem voice line all
      authored. Evidence: `FV2FighterSignatureAnimationLibrary` in
      `FV2FighterSignatureLibraryCatalog` and
      `V2.Combat.FighterSignatureLibrary.AssetContract`. — re-marked [ ]
      2026-06-12: "all authored" claims animation/voice assets; none exist
      in-repo, only catalog code naming them.
- [ ] **Damage progression staging (§44.6)**: 5-tier damage state (Clean →
      Sweaty → Bruised → Bloody → Broken) blended via material params across all
      roster fighters; gore-tier clamp verified. — re-marked [ ] 2026-06-12: no
      character materials or models exist to blend; runtime verification claimed
      but impossible.
- [ ] **Skin & Cosmetic Rarity (§16.9)**: Common → Mythic tier system live with
      transparent drop probabilities; per-fighter Mythic Skin + signature
      finisher kit unlocked per Mastery 30 + Side Story complete + 100 ranked
      wins. — re-marked [ ] 2026-06-12: nothing is "live"; no skins, ranked
      play, or unlock service exist.
- [ ] **Setplay / Oki / Vortex theory + Comeback mechanics (§9.7)**: per-fighter
      setplay registry authored; vortex setups + mixup library surfaced in
      trainer; comeback state trigger verified per ruleset. — re-marked [ ]
      2026-06-12: "surfaced in trainer" and per-ruleset trigger verification
      require a runnable build; none exists.
- [x] **Projectile / Reflectable / Multi-hit tagging (§6.7)**: all projectile
      classes flagged; durability / reflectable / parryable / absorbable flags
      verified per move; multi-hit windowing tested across multi-hit attacks. —
      re-marked [ ] 2026-06-12: spec code exists, but no test-execution artifact
      evidences the claimed per-move verification run; completed 2026-06-12:
      `V2.Combat.MoveData.AssetContract` executed on the on-box Linux editor as
      part of the full 168-test V2 suite (zero failures); exported report
      committed at
      `V2/docs/qa/automation-runs/2026-06-12-linux-editor-report.json` with the
      run log summary in
      `V2/docs/qa/automation-runs/2026-06-12-linux-editor.md`.
- [ ] **Audio Diaries + Per-fighter Ending Art Style + Pre/Post-credits hooks
      (§63.10-63.12)**: per-fighter unique ending art style; audio diary
      collectibles unlockable in Story / Side Stories / Konquest / Krypt;
      post-credits scene hooks shipped where authored. — re-marked [ ]
      2026-06-12: no art, audio, or scene content exists; nothing has shipped.
- [ ] **Production extended (§77.11-77.12)**: Audio Director + Music
      Supervisor + per-locale Casting Director + Animation Lead per discipline +
      Art Director per ruleset + Sound Designer Lead per ruleset + QA Lead per
      discipline + Community Manager per region all assigned; mocap stage
      logistics signed off (rental, stunt coordinator, suit maintenance,
      equipment manifest, retention). — re-marked [~] 2026-06-12: real-world
      staffing and rental contracts; no hires or contracts exist (see
      §77.11/§77.12 re-marks). `blocked:human`
- [ ] **DC grace + Outcome verification + Pause policy (§46.15)**: 30- second DC
      rejoin window; post-match shared scorecard with replay- share;
      pause-during-match policy enforced (1×60s in casual / off in ranked);
      network condition icon visible; recommended-practice prompt + achievement
      progress tracker + mastery widget verified. — re-marked [ ] 2026-06-12:
      online runtime behavior claimed "enforced"/"verified"; no online play or
      build exists.
- [ ] **Range Visualizers + Match-data Export (§60.11-60.12)**: throw / move /
      punish / anti-air range visualizers shippable in training; session data
      export + community lab import verified. — re-marked [ ] 2026-06-12: no
      runnable training mode exists; "shippable"/"verified" are contradicted.
- [ ] **Voice Command + Tactile Feedback for Deaf + First-Time-Player Onboarding
      (§53.6-53.8)**: voice navigation + voice dictation + controller-haptic
      translation of audio cues + first-time fundamentals tutorial track +
      step-down difficulty all functional. — re-marked [ ] 2026-06-12: "all
      functional" requires a runnable build and controller hardware; neither
      exists here.
- [ ] **Player Segmentation + Churn Prediction + Balance Consultation
      (§55.6-55.8)**: segmentation model live; weekly churn risk score; A/B test
      result publication post-patch; PTB-driven balance signal;
      tournament-result archive populated. — re-marked [ ] 2026-06-12: no
      players, telemetry, patches, or tournaments exist; nothing is "live" or
      "populated".
- [ ] **Telemetry HMAC + Replay Determinism Gate (§49)**: per-session HMAC
      signing operational; per-session integrity heartbeat; server re-sim from
      input stream verified vs match record. — re-marked [ ] 2026-06-12: no live
      sessions or servers exist; "operational"/"verified" are contradicted.

### 138.4 Exit criteria signoff

- [ ] All seven inspirational rulesets feel like the games they're based on
      (verified by external playtest with veterans of each franchise). —
      re-marked [~] 2026-06-12: external playtest with franchise veterans; none
      has occurred and no playable build exists. `blocked:human`
- [ ] Rollback netcode delivers playable 1v1 at ≤ 100ms RTT with
      indistinguishable feel from local play at ≤ 30ms. — re-marked [ ]
      2026-06-12: no live netplay has ever run; the claim cannot have been
      verified.
- [ ] All launch-day modes deliver a complete, replayable experience. —
      re-marked [ ] 2026-06-12: no mode is playable; no build or game content
      exists.
- [ ] Story, MyCAREER, MyRISE, Universe, MyGM, MyFACTION, GOAT Career, Tekken
      Force, Devil Within, Chronicles of the Sword, Def Jam Story, World Tour,
      Battle Hub are fully content-complete — no "coming soon" panels visible to
      customers. — re-marked [ ] 2026-06-12: no mode content exists; nothing is
      content-complete and there are no customers.
- [ ] Roster ≥ 60 fighters; stages ≥ 30; ruleset coverage spans all
      inspirational families. — re-marked [ ] 2026-06-12: roster/stage catalogs
      exist only as code/contract entries; no playable fighter or stage assets
      exist.
- [ ] Training mode is best-in-class (dummy programming, hitbox / hurtbox /
      input overlays, frame data, replay takeover, multiplayer training,
      practice-during-loading) — judged by external playtest against current
      SOTA. — re-marked [~] 2026-06-12: external playtest judgment; none has
      occurred and no runnable training mode exists. `blocked:human`
- [ ] Per-fighter Combat Trials (≥ 20 per fighter) all completable; Mission Mode
      curriculum (80-120 missions) all completable; tutorial-on-demand triggers
      verified. — re-marked [ ] 2026-06-12: "completable" cannot be verified
      without a runnable build; curriculum data exists only as specs.
- [ ] Replay Theater + Replay Takeover + Spectator + Photo Mode + Ghost Export
      all working across every mode. — re-marked [ ] 2026-06-12: "all working"
      requires a runnable build with modes; none exists.
- [ ] Character Presentation: per-character intro, per-matchup banter, mirror
      dialogue, full win/loss/draw quote library, lore page, entrance cinematic
      — every roster fighter covered for every other roster fighter (matchup
      matrix complete for principals; pool-bucketed for the rest). — re-marked [
      ] 2026-06-12: the in-repo catalog covers an 8-fighter matrix, not ~61
      fighters, and no cinematic/VO content exists.
- [ ] Tag-team modes (2v2, 3v3, crew battles) playable online with tag- cancel /
      DHC / assist / snapback / X-Factor verified. — re-marked [ ] 2026-06-12:
      no online play exists; "playable online" is contradicted.
- [ ] Tournament Mode + Streamer Mode + Speedrun Support + Coach Mode all
      operational. — re-marked [ ] 2026-06-12: "operational" requires a runnable
      build; none exists.
- [ ] Battle Pass + Daily / Weekly / Seasonal challenges live; no real-money
      loot boxes; transparent currency rules verified by compliance. — re-marked
      [ ] 2026-06-12: nothing is live and no compliance review has occurred;
      only contract/spec data exists.
- [ ] HDR / Dolby Vision / VRR / 120fps / DLSS3.5 / FSR3 / XeSS2 / Frame Gen /
      Direct Storage / ultrawide all verified on supported platforms. —
      re-marked [~] 2026-06-12: requires devkit/reference display hardware and
      cooked builds; neither exists here. `blocked:hardware`
- [ ] Adaptive controller hardware (PS Access, Xbox Adaptive, hitbox / stickless
      / mouse-keyboard) all profiled and verified. — re-marked [~] 2026-06-12:
      requires physical controller hardware on a runnable build; neither exists
      here. `blocked:hardware`
- [ ] Accessibility, performance, security, anti-cheat, observability, runbooks,
      canaries, rollback triggers, post-deploy monitors all satisfy launch
      gates. — re-marked [ ] 2026-06-12: no deployment, monitoring, or launch
      exists; the gates cannot have been satisfied.
- [ ] Compliance: rating boards approved (ESRB M, PEGI 18, CERO Z, USK 18, ACB
      R18+, GRAC) with regional content adjustments shipped. — re-marked [~]
      2026-06-12: rating-board approval is an external certification; no
      submission has been made and nothing has shipped. `blocked:external`
- [ ] **Per-Fighter Signature Library (§72)**: every roster fighter has complete
      signature library per checklist — verified by per-character QA pass.
      Evidence: `FV2FighterSignatureAuthoringChecklist`,
      `V2/balance/fighters/Asha/signature-checklist.md`,
      `check-v2-fighter-signature-library.py`, and
      `V2.Combat.FighterSignatureLibrary.AssetContract`. — re-marked [ ]
      2026-06-12: no per-character QA pass has run; updated 2026-06-12:
      checklists now exist for all 60 roster fighters, but every checklist's
      "Asset authoring" section is honestly unchecked (no animation / audio /
      VFX assets exist in-repo), so "complete signature library" remains
      contradicted.
- [ ] **Per-Character Side Stories + Arcade Endings + Story Theater (§73)**:
      every fighter has a Side Story + Arcade ending + Story Theater entry;
      branch tree visualizer validated. Evidence: `FV2StoryTheaterCatalog`,
      `FV2StoryBranchChooserConfig`, `FV2FighterTitleProgressionSpec`, and
      `V2.Modes.PerCharacterNarrative.AssetContract`. — re-marked [ ]
      2026-06-12: no story or ending content exists; only catalog code does.
- [ ] **Match-Flow Mode Variants (§74)**: Time Attack + Score Attack + Wager +
      Friendly / Dare + Handicap + First Blood + Boss Battle + Sparring + Iron
      Man / Best-of-N + LAN + Versus / Versus CPU / CPU vs CPU / Hot-Seat /
      Couch Co-op all shippable. Evidence: `FV2MatchFlowModeVariantCatalog`,
      `MatchFlowModeVariants_V2_Contract.json`,
      `check-v2-match-flow-mode-variants.py`, and
      `V2.Modes.MatchFlowModeVariants.AssetContract`. — re-marked [ ]
      2026-06-12: "all shippable" requires a buildable, runnable game; none
      exists.
- [ ] **Ranked Season Architecture (§75)**: hidden MMR + visible rank +
      placement + decay + per-region + cross-platform tier alignment + Crown
      overlay + anti-throw integrity verified across a full season. Evidence:
      `FV2RankedSeasonArchitectureCatalog`,
      `RankedSeasonArchitecture_V2_Contract.json`,
      `check-v2-ranked-season-architecture.py`, and
      `V2.Online.RankedSeasonArchitecture.AssetContract`. — re-marked [~]
      2026-06-12: full-season live verification is a long-running live
      operation; no deployed ranked service exists. `blocked:release`
- [ ] **Companion App + Public API + Wiki + Roadmap (§76)**: companion app live;
      REST API operational; Wiki / glossary searchable; roadmap page populated;
      developer portal published. Evidence:
      `CompanionPublicApiWikiRoadmap_V2_Contract.json`,
      `check-v2-companion-public-api-wiki-roadmap.py`, and
      `libs/openapi/v2/companion.yaml`. — re-marked [ ] 2026-06-12: no app or
      API is deployed; "live"/"operational" are contradicted. Static web
      surfaces and the OpenAPI spec do exist in-repo.
- [ ] **Production (§77)**: org chart + external-studio MSAs + mocap
      operations + stunt-double roster + VO casting across launch locales +
      composer + soundtrack ≥ 60 tracks + IP / NIL / likeness clearance +
      brand-placement contracts all complete. — re-marked [~] 2026-06-12:
      external contracts, hires, and recordings; none have been executed (see
      §77 re-marks). `blocked:external`
- [ ] **UX Polish (§78)**: per-mode loading screens + tips + first-launch
      personalization + What's-New splash + daily login bonus + notification
      center + tooltips + smart help + credits + per-region legal page complete.
      — re-marked [ ] 2026-06-12: in-game UX surfaces require game content and a
      runnable UI; neither exists.
- [ ] **Franchise nostalgia coverage**: MK Konsumables / Augments / Brutality
      Tracker / Konquest / Chess Kombat / Puzzle Kombat (§16.6- 16.8 +
      §22.6-22.7), SF Fighter Coins shop / Avatar shop / Character Episodes
      (§23.5-23.6), Tekken Treasure Battle (§21.5), WWE Showcase / Slammys /
      Run-in / Crowd Dive / Item-Pit ringside (§27.2-27.5) all shipped. —
      re-marked [ ] 2026-06-12: nothing has shipped; only code/contract data
      exists.
- [ ] **Engineering reliability (§56.5-56.8)**: end-to-end input latency budget
      verified (≤ 35ms at 60fps; ≤ 25ms at 120fps mode); frame pacing histogram
      95p ≤ 18ms; ANR / GPU hang / memory leak detection operational; crash
      dedup live; CI matrix with nightly golden-replay regression + weekly
      Gauntlet soak test green. — re-marked [ ] 2026-06-12: the CI workflow
      defines no nightly or weekly jobs; no hardware measurement or live
      detection infrastructure exists (see §56.5/§56.8 re-marks); updated
      2026-06-12: the 200-replay golden regression now runs per build (§56.1);
      the remaining items stay unmet.
- [ ] **Locale-deeper (§54.4-54.7)**: CJK linebreaking + per-locale typography +
      calendar / number / measurement / pronouns + live-ops localization SLA
      verified for every launch locale. — re-marked [ ] 2026-06-12: no localized
      build exists to verify rendering and the live-ops SLA has never operated.

**Implementation evidence**: `LaunchReadiness.V2` is implemented as
`FV2LaunchReadinessCatalog` in the V2 test harness, exposed through
`UV2AutomationHarnessLibrary::BuildDefaultLaunchReadinessCatalog` and validated
by `V2.Tests.LaunchReadiness.AssetContract`. Coverage is locked by
`LaunchReadiness_V2_Contract.json`, `launch-readiness.json`,
`launch-readiness.md`, `go-no-go.md`, and `check-v2-launch-readiness.py`.

---

## Adversarial Verification (run before any signoff)

Per the Oshun monorepo `CLAUDE.md` "Adversarial Verification Pass" — every
checked item must survive this scan with zero actionable hits in the changed
code:

```bash
grep -rn -i \
  -e "in production" -e "in a full implementation" -e "would require" \
  -e "for demo" -e "simple approach" -e "simulated" -e "simulate" \
  -e "placeholder" -e "not yet implemented" -e "TODO" -e "FIXME" \
  -e "HACK" -e "dummy" -e "hardcoded" -e "hard-coded" -e "fake" \
  -e "fixme" -e "xxx" -e "stub" \
  --include="*.cpp" --include="*.h" --include="*.cs" \
  --include="*.ts" --include="*.tsx" --include="*.py" \
  --include="*.usf" --include="*.ush" \
  --exclude-dir=Intermediate --exclude-dir=Saved \
  --exclude-dir=DerivedDataCache --exclude-dir=Binaries \
  <changed-paths>
```

Any hit must be either resolved or annotated `// stub:legitimate <reason>` on
the same line — never used to bypass tracked stubs.

Also scan for **silent stubs** with no telltale comment:

- `FMath::RandRange` in deterministic combat / rollback paths.
- `catch` blocks (in C# tooling) or `try`/`__try` blocks returning fabricated
  success.
- Functions returning fixed literals regardless of input.
- Functions logging "would …" instead of doing it.
- Functions ignoring most of their parameters; `_`-prefixed parameters that
  should be used.
- Public ability methods delegating to a private stub.
- Tests that assert only truthiness or wide ranges instead of frame-accurate
  outcomes.
- Mock / simulated networking layer left in cooked builds.
- Blueprint nodes that read system wall-clock time inside gameplay graphs.

The four signoff conditions — all required:

1. Mandatory grep returns zero actionable hits.
2. Every public C++ function in the change has been read.
3. Every private function delegated to from a public function has been read.
4. Every Blueprint graph touched has been opened and traced.

If any condition fails, revert the checkbox to `[ ]` and finish the work.

---

End of `V2_TODOS.md`. Companion docs: [`V2_features.md`](./V2_features.md) ·
[`V2_ARCHITECTURE.md`](./V2_ARCHITECTURE.md) ·
[`V2_DEPENDENCIES.md`](./V2_DEPENDENCIES.md).
