Status: V2 launch architecture and full-vision extension architecture
Source: derived from V2/V2_features.md (feature map) and V2/V2_TODOS.md
(implementation backlog)
Audience: engineering, online services, build / release, security, and
production leads
Date: 2026-05-12
This architecture reference has been decomposed into focused pages under
architecture/. This file remains the canonical hub (every section heading is preserved, so existingarch§"…"anchors keep resolving); the in-depth, code-grounded companion pages live underarchitecture/. Start at the architecture page index. The product feature map is inV2_features.md.
Purpose#
This document describes the runtime, package, and integration architecture V2
must ship. It is grounded in the V2 feature map (V2_features.md) and the V2
backlog (V2_TODOS.md), and is anchored to the packages and modules that the V2
Unreal Engine project must contain. Where a section names a module or path, it
names a target artifact unless the path already exists in the repo. The TODO
that first references the artifact owns creating it with tests and validation.
Companion docs: V2/V2_features.md,
V2/V2_TODOS.md, and
V2/V2_DEPENDENCIES.md.
V2 is one game, not a platform. The architecture mirrors that ambition: one shared roster, one shared creator suite, one shared online backbone, and swappable per-ruleset gameplay layers.
Cross-Reference Convention#
Throughout this document, bare §N and §N.M references resolve to
V2_TODOS.md (the backlog has 138 numbered top-level sections and ~1000
numbered subsections; it is the only V2 doc with section numbering used as
hyperlinks). Explicit doc-prefixed references appear where ambiguity matters:
§80→V2_TODOS.md§80 (Compliance Deep) — the default convention.§52.8→V2_TODOS.md§52.8 (Live-service operations cadence).deps§57→V2_DEPENDENCIES.md§57 (Hardware Peripheral SDKs).features§"V2 Product Promise"→V2_features.mdsection by anchor (the features doc is not numbered).arch§"Rollback Netcode"→ this document, by section anchor.
V2_features.md and this document use named anchors, not numbers, to avoid
duplicating the TODOs numbering scheme. The other three V2 docs follow the same
convention.
Table of Contents#
- V2 Product Promise
- Subsystem Glossary
- High-Level Architecture
- Project Layout
- Module Split
- Gameplay Ability System (GAS) Layout
- Animation Pipeline
- Input Pipeline
- Game Feel: Hitstop, Hitlag, Camera Shake
- Combat Authority & Determinism
- Rollback Netcode
- Client-Server Netcode
- Network Quality & Fallback
- Game Modes
- Training, Trials, Replay Pipeline
- Character Presentation Pipeline
- Tag-Team Architecture
- Persistence & Profile
- Online Services Backend
- Anti-Cheat
- Cross-Play & Cross-Progression
- Audio Pipeline
- VFX Pipeline
- Cinematic Pipeline
- UI / HUD Architecture
- Telemetry & Analytics
- Asset Budget & Streaming
- Hotfix, Quick-Resume, Crash Recovery, DRM
- Build, Cook, Patch
- Data Architecture
- Live-Service & DLC
- Accessibility
- Security, Privacy, Compliance
- Observability, Evaluation, Release Gates
- Performance Budgets
- Testing, QA, Cert
- Content Pipeline & Source Control
- Per-Fighter Signature Library Architecture
- Side-Story & Story-Theater Pipeline
- Match-Flow Mode Plugin Matrix (extension)
- Ranked Season Service
- Companion App Architecture
- Production Pipeline
- Compliance & Data-Subject-Rights Architecture
- Esports Backend Architecture
- Live-Service Calendar Service
- Progression & Codex Service
- Community & Support Backend
- Per-Platform Store & PPP Pricing
- Balance Ops Service
- Engineering Polish Pipeline
- AI Director Service
- Local Multiplayer & Co-op Architecture
- Signature Event Mode Plugins
- Privacy-by-Design, DPIA & Sub-Processor Architecture
- Racing Component Architecture
- Vehicle Designer Service & Pit Crew Minigame
- Convoy & Free-Roam Lobby
- Heist Mode Architecture
- Demolition Derby & Crossover Arena
- VR / AR Architecture
- Hardware Peripherals SDK Integration
- Roguelike, Battle Royale, Sports Vehicle, Specialty Combat Architectures
- Persistent World Economy & NPC Schedules
- Director Commentary & Cinematography Pipeline
- Karaoke, Arcade Mini-Games, World Boss, AI Commentary, Vault
- Real-World Brand & Celebrity Pipeline
- Launch Readiness
- Sister-Monorepo Integration Surface
- Sovereign V2 surfaces (never delegated)
- Per-surface mapping (V2 → Oshun owner)
- Generative + procedural pipeline binding
- Integration channels
- Capabilities V2 forces Oshun to build
- Privacy guard on cross-product entitlement
- Event-name convention
- Resolved decision ledger
- Missing V2 surfaces from the per-surface mapping
- Cross-References
V2 Product Promise#
V2 ships as one coherent fighting game that delivers per-ruleset feel matching
each inspirational source on its own terms, held together by one shared roster,
one shared creator suite, and one shared online backbone. V2 must deliver
rollback netcode by default for 1v1 and 2v2 tag modes (multi-fighter
rollback at 60 Hz for 2v2 active fighters per side; 3v3 tag and Royal Rumble / ≥
30 in-ring modes use client-server with input prediction rather than full
rollback), complete launch content across every advertised mode (no "coming
soon" panels), and degrade safely under offline, partial-net, low-bandwidth,
controller-loss, mid-match-disconnect, and provider-outage conditions. See
V2_features.md § "V2 Product Promise" for the full list.
Subsystem Glossary#
The names below are fixed vocabulary for V2; module names, namespaces, and asset paths inherit from them.
Engine modules
| Module | Responsibility |
|---|---|
| V2Core | Engine subsystems, save game, tags registry, dev cheats |
| V2Gameplay | GAS abilities, attributes, gameplay effects, match-state machine |
| V2Combat | Hitbox/hurtbox, frame data, collision authority, juggle/blockstring |
| V2Animation | AnimBP, motion matching, Mover bindings, IK, retargets |
| V2Input | Enhanced Input, motion parser, input buffer, deterministic replay |
| V2Netcode | Rollback engine (1v1 + 2v2 tag), client-server replication (other modes) |
| V2Modes | Game-mode registry, mode-load orchestration, mode-specific HUD |
| V2UI | UMG / CommonUI front-end, in-match HUD, accessibility |
| V2Audio | MetaSounds pipeline, dynamic music, voice barks, commentary |
| V2VFX | Niagara hit sparks, gore decals, X-Ray render, weapon trails |
| V2Cinematics | Sequencer presets, slow-mo, finisher cinematics, replays |
| V2Persistence | Save, profile, currency ledger, offline replay store |
| V2OnlineServices | Login, friends, parties, matchmaking, leaderboards |
| V2Telemetry | Event schema, batched sender, balance dashboards feed |
| V2Editor | Move authoring widget, stage editor, frame-data inspector |
| V2Tests | Automation specs, gauntlet drivers, golden replay harness |
| V2Racing | Race-mode glue, registry of V2RaceMode_* plugins, race HUD shell |
| V2Vehicles | Vehicle chassis class, drivetrain, vehicle GAS attribute sets |
| V2RacePhysics | Chaos vehicle solver, hovercraft / bike-lean / drift physics |
| V2RaceTracks | Track data, checkpoint graph, racing line authoring |
| V2RaceModes | Race mode-state machine, lap timing, position ranking |
| V2VehicleAudio | Engine note, exhaust, tire, surface, racing-music ducking |
| V2VehicleVFX | Smoke, sparks, debris, motion-blur, damage decals |
| V2Peripherals | Force-feedback runtime, per-controller-class pool, calibration UI |
| V2Services | Oshun event-bus + gRPC adapter layer; service observability bindings |
| V2AntiCheat | Anti-cheat client driver, server-validation hooks, replay-hash emitter |
| V2AdaptiveAI | Per-CPU adaptive AI, Director hint baking, style-matchup validation |
| V2AICommentary | AI commentary bridge; routes Iris audio / subtitle output to V2Audio |
| V2DynamicMusic | Vertical-stack dynamic music, DJ remix, commentary-ducking mix |
| V2FrameDataPublisher | Public frame-data CSV export + per-patch diff visualizer feed |
Game-feature plugins (modular, hot-swap)
The table below lists the launch-canonical plugin set; the per-celebrity guest plugin and per-venue racetrack plugin are templated and instantiated per license. This roster is the single source of truth — body sections name plugins from it.
Disk status (2026-06-12):
V2/ue/Plugins/currently contains four V2 plugins on disk —V2AICommentary,V2AdaptiveAI,V2AssetLinter, andV2Editor— plusBellonaUnrealEditor(synced Bellona editor-consumer plugin). None of theV2Mode_*,V2Event_*, orV2RaceMode_*rows below exist as plugins yet; they are planned GameFeature plugin surfaces whose mode identity is currently represented only by theV2Modesregistry module (V2/ue/Source/V2Modes/). The rows remain the canonical spec for what each plugin will own when created.
| Plugin | Owns |
|---|---|
| V2Mode_Arcade | Arcade ladder mode |
| V2Mode_Story | Cinematic story mode + branching narrative |
| V2Mode_Tower | Klassic / Towers of Time / Endless / Survivor |
| V2Mode_Krypt | 3D first-person Krypt explorable hub |
| V2Mode_BattleHub | Avatar lobby world, Game Center cabinets |
| V2Mode_WorldTour | Open-world avatar mode |
| V2Mode_TekkenForce | Side-scrolling brawler mode |
| V2Mode_DevilWithin | 3rd-person action-adventure mode |
| V2Mode_Konquest | MK-style open-realm action-RPG campaign |
| V2Mode_Universe | WWE-style weekly booker sim |
| V2Mode_MyCareer_WWE | Wrestling career arc |
| V2Mode_GOATCareer_UFC | MMA career arc |
| V2Mode_MyGM | Promoter sim |
| V2Mode_MyFaction | Card-collector faction battles |
| V2Mode_MyRise | Story-driven Hero/Heel career |
| V2Mode_RoyalRumble | 30-/50-entrant rumble |
| V2Mode_FightNight | UFC Fight Night / PPV booking |
| V2Mode_Chronicles | Soul Calibur tactical campaign |
| V2Mode_DefJamStory | Street career with crew progression |
| V2Mode_Crew | Crew/clique/stable/faction cross-mode |
| V2Mode_Training | Programmable dummy, lab tools, replay-takeover |
| V2Mode_Mission | Combat Trials + Mission curriculum |
| V2Mode_Replay | Replay viewer, takeover, sharing |
| V2Mode_Spectator | Network spectator + broadcast tools |
| V2Mode_TagTeam | 2v2 / 3v3 / Trinity / Cross-Assault |
| V2Mode_QuestLog | Cross-mode quest tracker / weekly objectives |
| V2Mode_StoryTheater | Per-character side-story cinematic playback |
| V2Mode_SideStory | Side-story per-fighter unlocked from arcade |
| V2Mode_TimeAttack | Score-attack ladder against ghost data |
| V2Mode_ScoreAttack | Score-only ladder variant |
| V2Mode_Wager | Wager-match online lobby |
| V2Mode_Friendly | Friendly lobby with custom rules |
| V2Mode_Handicap | Asymmetric handicap lobby |
| V2Mode_FirstBlood | First-hit-wins variant |
| V2Mode_Boss | Solo boss-rush |
| V2Mode_BestOfN | Best-of-N tournament lobby |
| V2Mode_LAN | LAN UDP discovery + offline tournament |
| V2Mode_LocalVersus | Couch versus + hot-seat |
| V2Mode_BattleRoyale | 100-player BR (fighter / vehicle / hybrid) |
| V2Mode_Roguelike | Hades-style roguelike adventure mode |
| V2Mode_Karaoke | Karaoke + rhythm-combat fusion |
| V2Mode_WorldBoss | Community-shared world boss instance |
| V2Mode_PersistentEcon | Persistent-world economy + NPC schedule mode |
| V2Mode_VehicleSoccer | Rocket-League-style sports-vehicle |
| V2Mode_VehicleStunt | Tony-Hawk-style stunt-vehicle |
| V2Mode_VehicleCrash | Burnout-style crash-junction |
| V2Mode_Trackmania | Trackmania-style time-trial |
| V2Mode_BoxingSim | Punch-Out boxing specialty ruleset |
| V2Mode_BushidoBlade | One-hit-kill sword specialty ruleset |
| V2Mode_Pinball | Pinball mini-game cabinet |
| V2Mode_AirHockey | Air-hockey mini-game cabinet |
| V2Mode_MiniGolf | Mini-golf mini-game |
| V2Mode_Darts | Darts mini-game |
| V2Mode_Pool | Pool mini-game |
| V2Mode_Cooking | Cooking-simulator mini-game |
| V2Mode_Heist | 4-player heist co-op |
| V2Mode_TruckChase | Demolition-derby truck-chase |
| V2Mode_ConvoyRaid | Convoy-raid demolition mode |
| V2Mode_DemolitionDerby | Demolition-derby arena |
| V2Mode_CinematographyEditor | Cinematography library editor (player) |
V2Mode_CelebrityGuest_<id> |
Per-celebrity-guest one-off mode plugin |
| V2Mode_RhythmCombat | Rhythm-combat fusion ruleset |
| V2Mode_TekkenBowl | Tekken Bowl bowling mini-game |
| V2Mode_PhotoTournament | Photo-Mode jury-vote competition |
V2ArcadeCabinetAdHocPlugin |
Ad-hoc per-cabinet plugin for Battle Hub |
| V2Event_KingOfIronFist | Tekken King-of-Iron-Fist signature event |
| V2Event_Marathon | Marathon endurance event |
| V2Event_WrestleMania | WWE PPV-style 8-match card event |
| V2Event_FightWeek | UFC International Fight Week event |
| V2Event_MishimaCup | Soul Calibur 16-fighter Weapon Master event |
| V2Event_EVO_Top8 | EVO-style Top 8 broadcast event |
| V2Event_CrewWars | Def Jam 4v4 crew elimination event |
| V2Event_Horde | Boss-vs-crew asymmetric event |
| V2Event_SpeedrunRace | 2-4 player Arcade race event |
| V2Event_DeathMatch | Single-round sudden-death stipulation event |
| V2RaceMode_Circuit | Closed-circuit lap racing |
| V2RaceMode_PolicePursuit | NFS-style cop pursuit |
| V2RaceMode_Drift | Drift score-attack |
| V2RaceMode_CanyonDuel | NFS Carbon canyon duel |
| V2RaceMode_Drag | Quarter-mile drag |
| V2RaceMode_OffRoad | Off-road / dirt-track |
| V2RaceMode_Bikes | Bike-only mode |
| V2RaceMode_PodRacer | Futuristic pod-racer |
| V2RaceMode_Combat | Combat-racing (weapons enabled) |
| V2RaceMode_PowerPlay | Power-play combat-racing variant |
| V2RaceMode_Free | Free-roam open-world |
| V2RaceMode_Time | Time-trial |
V2RaceTrack_<venue> |
Per-licensed-venue tie-in race-track plugin |
Surfaces
| Surface | Path |
|---|---|
| Game client | V2/ue/ (UE5.5 project) |
| Marketing / web shell tile | apps/oshun/web/src/app/v2/ |
| Standalone web surfaces | apps/v2/web/ |
| Esports / tournament toolkit | apps/v2/esports-tools/ (@v2/esports-tools) |
| Online services backend | apps/v2/ |
| Balance authoring spreadsheets | V2/balance/ |
| Build & release tooling | V2/ue/Build/, V2/tools/release/ (planned — not yet created) |
| Localization workspace | V2/ue/Content/Localization/V2/ + V2/loc/ (planned — not yet created) |
Web surfaces note. Two web homes exist and both are canonical for their own
split: apps/oshun/web/src/app/v2/ is the in-shell product tile — the V2
entry inside the Oshun shell app (Next.js route with the product page, glossary,
roadmap, and public wiki). apps/v2/web/ is the standalone marketing /
community / dev-portal surface set — a Vite SPA (marketing homepage with
roster, modes, news, store, Discord, esports, tournament, and press surfaces)
plus static sub-sites (calendar/, community/, support/, esports/,
dev-portal/, hub/, legal/, live-service/, balance/). Product/shell
integration work belongs in apps/oshun/web/src/app/v2/; public marketing and
companion surfaces belong in apps/v2/web/. Neither replaces the other.
High-Level Architecture#
Project Layout#
V2/
├── V2_TODOS.md Backlog / source of truth
├── V2_features.md Product / feature scope
├── V2_ARCHITECTURE.md This doc
├── V2_DEPENDENCIES.md Dependency registry
├── ue/ Unreal Engine project root
│ ├── V2.uproject
│ ├── Source/ C++ modules (see "Module Split")
│ │ ├── V2.Target.cs
│ │ ├── V2Editor.Target.cs
│ │ ├── V2Server.Target.cs
│ │ ├── V2Core/
│ │ ├── V2Gameplay/
│ │ ├── V2Combat/
│ │ ├── V2Animation/
│ │ ├── V2Input/
│ │ ├── V2Netcode/
│ │ ├── V2Modes/
│ │ ├── V2UI/
│ │ ├── V2Audio/
│ │ ├── V2VFX/
│ │ ├── V2Cinematics/
│ │ ├── V2Persistence/
│ │ ├── V2OnlineServices/
│ │ ├── V2Telemetry/
│ │ ├── V2Editor/
│ │ └── V2Tests/
│ ├── Plugins/ Game-feature plugins (per mode + tooling)
│ ├── Content/ Assets (LFS-tracked)
│ ├── Config/ Default*.ini, Custom config per platform
│ ├── Build/ BuildGraph, target rules, platform configs
│ └── Saved/, Intermediate/, DerivedDataCache/, Binaries/ (gitignored)
├── web/ Marketing site
├── services/ Online services backend
├── tools/ Build, release, esports, mocap, data tooling
├── balance/ Spreadsheets driving DataTables (CSV ↔ DT)
├── loc/ Localization workspace
└── docs/ Architecture, runbooks, launch, content plans
Module Split#
Each module under Source/ carries *.Build.cs, Public/, Private/, and its
module class. Dependencies are declared explicitly; no circular deps.
Rules
- C++ is the primary gameplay language. Blueprint is for designers / data / state graphs / cinematic glue only. Frame-deterministic combat must live in C++.
- No module reaches across more than one layer (e.g., V2UI does not depend on V2Netcode directly).
V2Editoris editor-only — never linked in cooked builds.V2Testsis automation-only — never linked in shipping builds.
Gameplay Ability System (GAS) Layout#
V2 uses GAS as the spine of combat. Layers:
Tags#
- Root tag families authored in
Config/Tags/V2.GameplayTags.ini. - Subset domains:
State.Stance.*,State.Status.*,Action.*,Cancel.*,Rules.Mode.*,Style.*,Weapon.*,Submission.*,Position.*,Stipulation.*,Stage.Hotspot.*.
Attribute Sets#
UV2_AttrSet_Vitals— Health, MaxHealth, RecoverableHealth, Stun, Stamina, Hype, Drive, Heat, Armor, Resolve, Block, Stunmeter.UV2_AttrSet_Movement— WalkSpeed, DashSpeed, RunSpeed, JumpZ, AirControl, SideStepSpeed, BackdashFrames, WakeUpInvulnFrames.UV2_AttrSet_Combat— MeleeDamageMul, BlockReductionMul, ThrowEscapeWindowFrames, CounterHitMul, JuggleScaling.UV2_AttrSet_Wrestling— PinKickoutMeter, SubmissionMeter, LimbDamage, Momentum, SignatureCharge, FinisherCharge, Resilience.UV2_AttrSet_MMA— per-limb stamina, takedown skill / defense, sub skill / defense, transition skill, G&P rating, clinch rating.UV2_AttrSet_Weapon— WeaponDurability, GuardImpactWindow, SoulCharge, RingOutResistance.
Abilities#
- Base
UV2_GameplayAbilitywith input buffer hook, frame-data binding, cancel-window broadcast, ability-tag filter, network mode switch, replay-strip rules. - Subclasses: Strike, Throw, GroundedSpecial, AirSpecial, Projectile, Super (variants for Drive Impact, Rage Art, X-Ray, Critical Edge, Blazin'), Grapple Clinch, Grapple Takedown, Grapple Pin, Grapple Submission, Cinematic Finisher.
Gameplay Effects#
GE_Damage_Strike,GE_Damage_Throw,GE_Damage_Chip,GE_Stun_Delta,GE_Drive_Cost,GE_Heat_Gain,GE_Hype_Gain,GE_LimbDamage_<Limb>,GE_Stamina_Drain,GE_Status_<Status>,GE_RecoverableHealth_Regen(modern SF chip recovery).
Match-State Machine#
- States: Intro → RoundStart → Live → RoundEnd → (RoundStart | MatchEnd | FinisherWindow | PostMatch).
- Per-mode injectable state nodes: MK FinisherWindow, WWE Pin / Submission, UFC RoundEnd judges' interlude, SC RingOut termination, DJ environment-finisher prompt, SF KO replay, Tekken Rage lockout.
Animation Pipeline#
Skeleton & Retarget#
- Canonical
SK_V2_Fighter_Base(UE5 mannequin-compatible) plus archetype variants (Heavyweight, Welterweight, Female, Monster, Child). - IK Rig + IK Retargeter from base to each archetype, with round-trip automation test.
AnimBP#
ABP_V2_Fighter_Base layers (ordered):
- Locomotion state machine (idle / walk / run / dash / backdash / airborne / knockdown / wakeup).
- Upper-body action layer (GAS montage slots: FullBody, UpperBody, LowerBody, Hands).
- Hit-reaction layer (Chooser Tables keyed on hit-reaction tag × stance × damage-tier).
- Stance layer (Tekken stance switches, SC weapon stances).
- Foot IK + look-at IK + opponent-face IK (auto-rotates for 2D rulesets, no-op for free 3D rulesets).
- Additive emotes / breathing / damage tics.
Per-mode AnimBP overlay: SF locks pelvis-yaw to opponent; Tekken adds sidestep blend; WWE adds ragdoll blend and climb/turnbuckle layer; UFC adds full-body grapple and ground-position state machine; SC adds 8-way weapon layer; MK adds X-Ray cinematic insert; DJ adds environment-grab layer.
Motion Matching & Mover#
- Motion matching db for World Tour, Tekken Force, Devil Within, DJ street, MyCAREER backstage, SC Chronicles overworld.
- Mover 2.0 custom modes: Match2D, Match3DRing, Match3DCage, Match3DStreet, ExplorationFree.
Cloth, Hair, Facial#
- Chaos Cloth presets per costume slot, LOD chain.
- Hair groom for principals; card hair for crowd.
- Chaos Flesh (limited) for MK X-Ray gore.
- MetaHuman Animator for principals; Live Link Face for performance capture.
Input Pipeline#
- Enhanced Input + IMC per platform (PS5 with DualSense haptics + adaptive triggers, XSX, Switch2, PC KB+M, PC gamepad, mobile touch).
- Motion-input parser recognizing QCF / QCB / DP / RDP / HCF / HCB / 360 / 720 / charge-back / charge-down / negative-edge / double-tap / plink / just-frame.
- Buffer window configurable per fighter / per move (default 6f, tight 3f, lenient 9f).
- Special-cancel, super-cancel, X-Ray / Heat / Drive cancel buffers.
- WWE / UFC contextual input (single button → context-aware grapple).
- Deterministic byte-stream input encoder for replays.
Game Feel: Hitstop, Hitlag, Camera Shake#
V2's game-feel system is centralized so each ruleset hits like the source it's emulating.
- HitConfirmed broadcast from
UV2_HitboxComponent.OnHitConfirmedcarries a struct (attacker, defender, damage, hit-reaction tag, counter-hit flag, hitstop attacker frames, hitstop defender frames, hitlag defender frames). - Hitstop curves authored per damage tier (small / medium / heavy / launcher
/ bone-shatter / finisher) and stored as
UCurveFloatreferenced fromURV2_Ruleset.HitstopCurves— so MK / SF / Tekken / SC / UFC / WWE / DJ all feel distinct. - Camera shake library keyed on hit-reaction tag × per-ruleset intensity multiplier × per-fighter shake personality. Reduced-motion accessibility clamp.
- Slow-mo / freeze-frame triggered by match-state events (KO, finisher window, Reversal-Edge clash, mid-combo emphasis).
- Screen tint / vignette triggered by gameplay events (counter-hit, low-HP, comeback aura, state-aura).
- Resimulation safety: hitstop frames don't count toward rollback budget (cross-ref Rollback Netcode); cosmetic-only effects suppressed during resim.
- Tuning tool: editor utility widget loads any move and previews the feel curves; side-by-side replay harness compares ruleset profiles.
Combat Authority & Determinism#
Per-Frame Loop#
- Fixed 60Hz sim step. Decouple render (interpolated) from sim (deterministic).
- Per-tick sequence: (1) consume input → (2) tick abilities + state → (3) advance animation timers → (4) sweep hitboxes → (5) apply gameplay effects → (6) emit cosmetic events (deferred to render).
Determinism Rules#
- No
FApp::GetDeltaTimereads in gameplay; sim-clock only. - No
FMath::RandRangein gameplay; useFRandomStreamseeded from match seed. - No system wall-clock in gameplay graphs (Editor Validator enforces).
- Strict-FP build flag; deterministic cook order.
- Blueprint guard list: forbid nodes (Time, World Delta Seconds, Random, Now, GetSystemTime).
Hitbox Authority#
- In rollback modes: shared deterministic simulator decides; no per-hit server arbitration.
- In client-server modes: host authoritative; clients predict; server confirms within RTT/2 + 2 frames.
Rollback Netcode#
Architecture#
FV2_SimWorld(deterministic, 60Hz) separated fromFV2_PresentWorld(interpolated, display refresh).- Snapshot/restore for
FV2_SimWorld: ASC, attributes, ability state, anim timers, hitbox state, input buffer, RNG. Budget ≤ 8KB per fighter. - Input prediction = last-confirmed; correction triggers rewind + resimulation forward.
- Rollback budget ≤ 8 frames; beyond that, "Recovering Connection…" overlay.
- Cosmetic suppression during resimulation (audio mute, particle suppress).
Transport#
- UDP with FEC, sequence numbers, ACK piggyback, DTLS encryption.
- UE Iris for non-rollback channels (chat, presence); custom socket for rollback frame inputs.
- Adaptive send: every-frame inputs + last-N replay piggyback.
Diagnostics#
- Netgraph overlay (RTT, rollback frames last 5s, packet loss %, input delay, frame advantage).
- Telemetry feeds every rollback for postmortem.
Client-Server Netcode#
- Dedicated server target
V2Server.Target.cs(Linux). - Replication graph: own pawn (priority 1.0), nearby fighters (0.8), distant (0.3), ambient props (0.1).
- Multi-fighter: tag-team (2v2, 3v3), 4-player FFA, Royal Rumble (≥ 30 in-ring).
- Open-world: co-op handshake (party ≤ 4); instance handoff at indoor zones / fight encounters / story beats; tolerant of 250ms RTT.
- Hubs: shared social server (capacity 100) with auto-shard and friend-priority.
Network Quality & Fallback#
- Rollback default for 1v1; delay-based fallback for RTT > 150ms or sustained rewind pressure; hybrid in-between.
- LAN tournament mode: UDP broadcast peer discovery, no internet required; LAN-only ranking ledger; auto-on at tournament-venue WiFi SSIDs.
- Dedicated server browser (PC primary; console where TRC permits) with public listings, host config (ruleset, stipulation, fighter restriction, password, AFK kick, rotating-map list), server moderation.
- Custom Room / Private Lobbies: 1v1 / 2v2 / 4-corner / tournament / Battle Royal / Royal Rumble; ≤ 16 participants + 8 spectators; in-room queue (winners-stay-on, losers-rotate-out, randomized seating); in-lobby training space for spectators.
- Pre-match handshake measures RTT, jitter, packet loss; results stamped in match record; player can decline poor-condition match.
- Wi-Fi / mobile-hotspot / 4G/5G detection + warning in ranked queue (where platform API provides connection type).
- Per-account network reliability score with ops dashboard.
Game Modes#
Each mode is a UGameFeaturePlugin registered with V2Modes. Plugin lifecycle:
Per-Mode Architecture Notes#
| Mode | Net model | Save model | Notable |
|---|---|---|---|
| Arcade | Local-only | Per-fighter progress | CPU ladder; mid+end-boss cutscenes |
| Story | Local-only | Branch state + chapter | Sequencer cutscenes; QTE prompts |
| Tower | Local-only | Tower state | Live modifier engine (server-pushed) |
| Krypt | Local-only | Vault unlock state | 3D explorable hub |
| BattleHub | Client-server (hub) + rollback (cab) | Avatar profile | 100-cap shards |
| WorldTour | Client-server (zone) | Quest state | Master training pipeline |
| TekkenForce | Local + co-op (CS) | Score / progress | Side-scroller brawler |
| DevilWithin | Local-only | Save points | 3rd-person action |
| Universe | Local-only | Universe save | Auto/manual booker sim |
| MyCareer (WWE) | Local + online ranked | Career save | Branching narrative |
| GOATCareer (UFC) | Local + online ranked | Career save | Camp / weight management |
| MyGM | Local + multi-GM (CS) | Promotion save | Up to 4 GMs shared |
| MyFaction | Local + online | Faction save | Card collector + faction PvP |
| MyRise | Local-only | Career save | Voice-acted milestones |
| RoyalRumble | Rollback (1v1) + CS (30-/50-) | n/a | Timed entries |
| FightNight | Local + online ranked | Event save | PPV presentation |
| Chronicles | Local-only | Campaign save | Turn-based hex grid |
| DefJamStory | Local-only | Career save | Crew, rep, shop |
| Crew | Online (CS) | Crew save | Cross-mode |
| Training | Local-only + opt-in online lab | Lab scenarios | Programmable dummy, lab overlays |
| Mission | Local-only | Per-fighter mastery | Trials + missions + tutorial |
| Replay / Spectator | Local + online (read-cloud) | Cloud replays | Takeover from any frame |
| TagTeam | Rollback (2v2/3v3) + CS (crews) | Per-team profile | Tag-cancel / DHC / assist / X-Factor |
Training, Trials, Replay Pipeline#
- Sim/Present split (cross-ref Rollback Netcode): training mode runs on the
same deterministic
FV2_SimWorldas live matches; lab tools attach toFV2_PresentWorldfor overlays without affecting determinism. - Replay file format: header (build ID, content hash, ruleset ID, fighter IDs, stage ID, custom-cosmetic manifest, RNG seed, timestamp) + per-frame input stream both sides. Budget ≤ 1MB / 5-min match; gated in CI.
- Replay determinism gate: every replay re-played in CI must produce bit-identical frame outcomes; replays that drift fail the build.
- Replay Takeover: pause replay → snapshot sim state → load training scenario → swap input source for chosen side. Original replay preserved read-only.
- Multiplayer training: uses client-server net (
V2Server.Target.cs) not rollback — tooling-rich semantics over response time. Tolerates ≤ 250ms RTT.
Character Presentation Pipeline#
- Dialogue DB: per-fighter CSV at
V2/balance/dialogue/<fighter>.csvwith columns (situation, opponent, ruleset, line ID, locale-x text, VO path, emotion, length-cap). CSV ↔ DataTable round-trip enforced. - Intro Picker selects from per-character / per-matchup / per-stage / per-round / mirror-match dialogue banks. Mirror matches use a uniquely-authored bank, never the cross-matchup pool.
- Win Quote Picker selects context-aware win quotes per opponent / per finisher / per perfect-round / per comeback / per ring-out / per pinfall / per submission / per KO / per double-KO; per-matchup A-beats-B quotes override generic-bank quotes when authored.
- Bark Router consumes gameplay events (counter-hit, throw, parry, low-HP, combo-of-N, finisher armed, finisher missed) with priority + cooldown; finisher / KO barks win all races.
- Per-fighter Entrance: Sequencer preset library (WWE ramp, Tekken stage-arrival, MK pit-summon, SF6 hub-arrival, DJ club-strut) with per-fighter music slot.
Tag-Team Architecture#
- Rollback for 2v2 / 3v3: each side has 1-3 fighters;
FV2_SimSnapshotbudget per side ≤ 24KB (3 fighters × 8KB). Tagging is a deterministic state transition with frame-accurate animation handshake. - Tag-cancel matrix: per-fighter / per-partner allow-list in the move catalog spreadsheet; restrictions for licensed-IP partners.
- Snapback / DHC / X-Factor / Cross Assault are abilities in
V2Gameplaywith their own GAS subclass; meter costs tracked in attribute set. - Crew battle queue (3v3 KOF single-elim): client-server because matches can rotate fighters mid-set; per-fighter HP carry-over rules.
Persistence & Profile#
UV2_SaveGameslots per platform / per user.- Schema: profile, per-mode career progress, unlocked content, loadouts, settings, photo-mode gallery, replays.
- Cloud save via OnlineServices; conflict resolution UI on out-of-sync.
- Currency ledger: Koins, Hearts, Soul Fragments, Krystals (premium), in-mode
currencies (MyCareer XP, MyFaction tokens, DefJam cash).
@maat/financeowns spend, refund, region-aware pricing, regulatory caps, and sync reconciliation;V2Persistencekeeps the offline ledger cache. - Save migration framework: every save record carries a version + migrator; no destructive loads.
Online Services Backend#
- OnlineServices abstraction (EOS baseline; Sony NP, MS Live, Switch SDK shims via platform-specific subsystems).
- Friends, presence, parties (≤ 8), invites.
- Per-mode matchmaking queues with Glicko2/TrueSkill2, region weighting, ping cap, expansion over wait time, role-pref balancing for tag/FFA.
- Per-mode ranked ladder with seasonal reset, placement, promotion/ demotion thresholds.
- Cloud replay storage with share-by-code, cloud library, local download.
- Ghost-data store for Ghost Battle and master training.
Service contract
- gRPC services:
libs/proto/v2/online/auth.proto,friends.proto,party.proto,matchmaking.proto,lobby.proto,rank.proto,replay.proto,ghost.proto,store.proto,moderation.proto,telemetry.proto. - Key methods:
Auth.SignIn(platform_token) → session,Auth.Refresh(refresh_token) → session.Friends.ListFriends(account_id) → list,Friends.Add(target_id) → ack,Friends.UpdatePresence(state) → ack.Party.Create() → party_id,Party.Join(party_id, account_id) → ack,Party.Invite(target_id, party_id) → ack.Matchmaking.SubmitTicket(mode, prefs) → ticket_id,Matchmaking.PollTicket(ticket_id) → status_or_match,Matchmaking.CancelTicket(ticket_id) → ack.Rank.GetLadder(mode, region, page) → ladder,Rank.RecordMatch(match_result) → ack.Replay.Upload(stream) → replay_id,Replay.Download(replay_id) → stream,Replay.Share(replay_id, visibility) → share_code.Store.ListCatalog(region, currency) → catalog,Store.PurchaseEntitlement(item_id, platform_token) → entitlement.
- Event-bus publishes:
v2.player.session.started,v2.player.session.ended,v2.match.ended,v2.match.replay.hash,v2.player.reported,v2.cosmetic.purchased,v2.party.created,v2.party.disbanded,v2.matchmaking.ticket.completed. - Event-bus subscribes:
kuanyin.action.taken,themis.appeal.resolved,maat.balance.recommendation,iris.commentary.generated. - SLOs: matchmaking ticket p50 ≤ 12 s, p99 ≤ 35 s under 5× expected launch concurrency; auth p99 ≤ 200 ms; replay upload p99 ≤ 8 s for a 10-MB replay; service availability ≥ 99.9% per region.
- Owner: V2 online services team. Cost-tier: standard AWS / EOS bill;
ceiling at
V2/docs/cost/online-services.md.
Anti-Cheat#
V2 anti-cheat layers four lines of defense: kernel-level client drivers,
server-side input + state validation, ML pattern classifiers, and a replay-based
investigation pipeline. The anti-cheat client lives in
V2/ue/Plugins/V2AntiCheat/ and is part of the sovereign-core surface
(arch§"Sovereign V2 surfaces (never delegated)"); kernel-driver hot-patch is
forbidden.
Client-side surface
- PC: Easy Anti-Cheat (EAC) as primary; BattlEye as fallback for titles where EAC has integration friction. Kernel-level driver signed by Epic's EAC chain; init at process launch; teardown only via clean shutdown.
- Consoles: Platform-native anti-cheat — Sony PSN ban-list integration + Sony platform anti-tamper; Microsoft TruePlay + Xbox Live ban list; Nintendo NEX integrity layer. No third-party kernel driver on console.
- Steam Deck (PC mode): EAC Linux build via Proton; verified pre-launch.
Server-side validation contract
- Input rate sanity (≤ 180 inputs / second per player; bursts > 240 trigger flag).
- Attribute integrity: every gameplay-effect application checked against per-ability whitelist; mismatched application = match-invalidate + flag.
- Replay drift detection: every match emits a golden-replay hash to
v2.match.replay.hashevent; server re-simulates 1% of matches end-to-end on a Linux validator pool; drift > 0 frames = flag + manual review. - Rate-limit: matchmaking submissions, friend requests, ranked queue dodges capped per minute per account.
ML cheat classifiers (@v2/nous-anti-cheat-classifiers over
@nous/training + @nous/safety)
- V2 publishes labeled fair-play examples on
@oshun/event-bustopics for match completion, player skill profile updates, ranked point deltas, tournament completion, replay evidence, session starts, account geo changes, and region entitlement checks. @nous/trainingowns the offline training loop for smurf, win-trading, coordinated-throw, and geographic-anomaly classifiers. The V2 bridge requires clean and positive labels for every classifier before a training plan is valid.@nous/safetyhostsV2/docs/ai/model-cards/anti-cheat-classifier-suite.md. The Model Card declares the suite limited-risk, review-only, appealable, and off-rollback.- The V2 bridge also publishes the review-only classifier suite event through
@oshun/audit-platform; V2 publishes anti-cheat audit evidence while Oshun retains and exports the forensic record for investigations. - Classifier output can prioritize fair-play review queues; it cannot issue automatic discipline and cannot influence deterministic rollback frames.
Investigation + appeals
- Replay-based investigation tool at
V2/tools/cheat-investigation/lets ops load any flagged match, scrub frame-by-frame, view raw input stream, attach notes. Tool emitsv2.cheat.investigation.openedandv2.cheat.investigation.closedevents. - Appeals flow via
@v2/themis-dispute-resolutionover@themis/dispute-resolutionStatement-of-Reasons API (DSA-compliant). Appeal resolution SLA: 7 calendar days; failure to resolve triggers escalation to a senior reviewer. - False-positive rate target: ≤ 0.5% of total bans overturned on appeal; ≥ 0.5% triggers a model retrain.
Rage-quit penalty
- First quit in a ranked session: 5-minute matchmaking cooldown.
- Second within 24h: 30-minute cooldown + 50 rank points.
- Third within 24h: 24-hour ban from ranked + 150 rank points.
- Tournament context: any rage-quit forfeits the match per
@uzume/broadcastrules.
Cert constraint: All four platforms require AC enabled at launch for
cross-play; CI gate Tools/check-anti-cheat-cert.py asserts EAC + BattlEye
manifests are present in PC build, platform-native AC bindings are present in
console builds, and the appeal-flow Statement-of-Reasons API is reachable in
staging.
Cross-Play & Cross-Progression#
Cross-play scope
- Cross-play enabled by default for ranked 1v1 / 2v2 tag, custom lobbies, Battle Hub, and World Tour across PC, PS5, PS5 Pro, XSX, and Switch 2.
- Per-platform opt-out: Sony / Microsoft / Nintendo each expose a system cross-play toggle; V2 reads the toggle on session start and reflects it in matchmaking ticket. Toggle changes mid-session do not affect the current match.
- Steam Deck treats as PC for cross-play purposes; Steam Deck Verified rating is launch-blocking.
- iOS / Android companion app is read-only out-of-game; not a play surface.
- Input-method pairing: each ticket carries
InputClass.{KBM, Gamepad, FightStick, FightPad, ArcadeStick, AdaptiveController}; cross-class matchmaking is opt-in per-mode. KBM ↔ Fight Stick is on by default in unranked; opt-in only in ranked. Adaptive controllers always opt-in for both sides.
Cross-progression scope
- Account binding:
@oshun/identityis the single account root; per-platform shadow accounts (PSN / Xbox Live / Nintendo Account / Steam) bind to one Oshun account.@v2/oshun-identity-bindingcomposes the shared@oshun/identitycontract for V2 services, and Unreal mirrors it withFV2OshunIdentityAccountBinding; re-binding requires a 30-day cool-off and a TOTP step. - Shared state: profile, currency ledger (Crowns + per-platform IAP credit), cosmetic inventory, fighter unlocks, ranked rank, Battle Pass progress, Krypt progress, MyCAREER save, MyFACTION roster, replay archive.
- Per-platform-only state: platform achievement / trophy IDs, platform store entitlements that the platform forbids transferring (e.g. Sony bonus cosmetic from a PS5 disc bundle is PS5-only by Sony cert).
- Conflict resolution: save-game version tracked per save; merge on account
first-login per platform uses
last-write-winsfor non-cosmetic state andunion-of-unlocksfor cosmetic / fighter unlocks. - Entitlement-claim API:
@oshun/identityexports the signed claim contract inv2-entitlement-claims.ts;@v2/cross-product-entitlementconsumes the claims for V2 grants and documents the runtime contract atV2/docs/integration/cross-product-entitlement.md.
Cert-blocking edge cases
- Voice chat: cross-platform voice routed through Iris voice; each platform family chat stays on platform-native channels per TRC.
- Reporting: cross-platform report submission allowed; per-platform reporting duties (mandatory PSN report routing) preserved.
- Banning: Oshun-side bans apply across all platforms; platform-side bans apply only on that platform.
- Region-locked content (e.g. Korean variant of a fighter costume): cosmetic inventory entry is region-stamped; cross-region accounts see the cosmetic as locked rather than seeing the wrong variant.
CI gates: Tools/check-cross-play-cert.py validates input-class enumeration
matches per-platform TRC; Tools/check-cross-progression.py validates the
per-platform-only state list against each platform's lotcheck docs.
Audio Pipeline#
- Native pipeline: MetaSounds + Audio Modulation as the baseline. Wwise as
optional middleware if production needs exceed engine native (decision
documented in
V2_DEPENDENCIES.md). - Per-fighter footstep / cloth / weapon foley layer.
- Per-fighter voice bank (idle, taunt, intro, victory, defeat, KO, finisher, staredown).
- Per-mode commentary banks (WWE play-by-play + color; UFC commentary pair; SC narrator; SF announcer; MK announcer; DJ DJ).
- Bark trigger system on gameplay events.
- Dynamic music: vertical-stack per match (ambient → tension → climax → KO sting); DJ-style remix for DJ ruleset.
- Custom soundtrack import: PC mp3/flac/ogg/wav; console where TRC allows; streaming where licensed.
- Spatial audio: Atmos / Tempest3D / Dolby; binaural HRTF fallback.
VFX Pipeline#
- Per-style hit-spark library (clean, dust, metal, electric, fire, ice, spirit, blood).
- Blood decal pipeline (env projection + vertex paint), gore-tier toggle.
- Limb severance / dismemberment (MK-only).
- X-Ray render pass (translucent skin + bone stencil overlay + per-bone break states).
- Stage hazard effects.
- Weapon ribbon trails per weapon profile.
- Aura effects: Devil-form, Soul Charge, Heat, Burnout.
Cinematic Pipeline#
Per-ruleset Cine Camera Rigs. Seven baseline rigs (MK / SF / Tekken / WWE /
UFC / SC / DJ) plus the racing camera. Each rig is a UCineCameraComponent
preset with target distance, FOV, DOF target, look-ahead, post-process override,
and per-event lerp curves. Rigs are data-only assets at
Content/Cameras/<Ruleset>/Rig_<Ruleset>.uasset; selection driven by
gameplay-tag state.
Auto-cinematic triggers
- KO last hit: time-dilation curve from
Content/Curves/KO_<Ruleset>.uasset(0.10× for MK Fatal Blow → 0.35× for SF Drive Impact). - Finisher window: full Sequencer take-over (
Content/Sequences/); player input dropped for the duration; replay re-enters live state at next RoundStart. - Round-clinching hit: half-second slow-mo + camera push-in.
Replay viewer + export
- Replay container is the same deterministic input stream V2Netcode produces;
the viewer re-simulates the match from inputs. Saved at
~/V2/Replays/<id>.v2replay(versioned). - Editable camera + timeline overlay on top of replay re-sim. Camera edits are non-destructive — they layer on top of the original input replay.
- MP4 export via MoviePipeline + encoder priority (see deps§"Media
encoding"): NVENC → AMF → VideoToolbox → Quick Sync → FFmpeg software. 1080p60
default; 4K60 + HDR opt-in. Per-export NIL / IP-rights check via
@themis/likeness(forthcoming) and@v2/aphrodite-licensed-likeness-safety; export is blocked if the match contains a fighter whose NIL grant window has expired or whose licensed-fighter likeness safety gate has been revoked.
Photo Mode
- Mid-match pause-side capture (offline only) and replay-side capture (always-on).
- Rotation / DOF / filters / stickers / frames data-driven from
Content/PhotoMode/. - NIL gate: every photo carries a
LikenessRightsManifest.jsonthat@themis/likenessvalidates before share. Photos with expired-rights fighters are saved locally but cannot be shared online. - C2PA provenance: every shared photo includes a C2PA manifest stamping
origin (player, timestamp, fighter list, stage); cross-ref
Yemaya living scenes provenancealready shipped in V1.
Sequencer-preset library
- Per-mode: walkout, ring entrance, octagon walkout, DJ club entry, stage
transition, mid-fight cinematic, finisher, ending — all under
Content/Sequences/<Mode>/<Beat>/. - Per-fighter signature stage entrance overrides at
Content/Sequences/Fighter/<Fighter>/Entrance.uasset(see arch§"Per-Fighter Signature Library Architecture").
Performance + cert
- Cinematic render budget: ≤ 16.6 ms / frame at 60 Hz on PS5; ≤ 8.3 ms at 120 Hz mode. Cinematic spikes deferred to next safe frame rather than dropping below target.
- MP4 export cert: per-platform encoder pin verified in
V2/ue/Config/<Platform>Engine.ini; PSN ShareStream / Xbox Game DVR integration verified pre-launch.
UI / HUD Architecture#
V2 UI is built on CommonUI 5.5 with the activation framework. Widgets are
all UMG + MVVM (ModelViewViewModel) — no direct ASC access from widget code;
widgets bind to UViewModel instances that mirror ASC attributes.
Layer architecture
- Front-end (
V2/ue/Content/UI/FrontEnd/): CommonUI activation tree. Root activations:MainMenu→ (PlayMenu|OnlineMenu|CreatorSuite|Krypt|Settings|Codex|BattleHub). - In-match HUD (
V2/ue/Content/UI/InMatch/): per-ruleset overlay assets composed from a sharedW_HUD_Base. Per-ruleset overlays (MK / SF / Tekken / WWE / UFC / SC / DJ) inject their meter widgets via theIRulesetHUDinterface; mode-plugin overlays (Royal Rumble entrants strip, UFC scorecard interlude, WWE booking shoutout) inject viaIModeHUD. - Per-mode HUD injection contract: every GameFeaturePlugin that needs HUD
surface declares
HUDInjectionsin its.uplugin; on plugin activation, the V2UI subsystem loads the listedUCommonActivatableWidgetclasses into named slots (Slot.TopLeft,Slot.TopRight,Slot.Center,Slot.Bottom). - Notification center (
W_NotificationCenter): toast queue + persistent drawer. Toast types:FriendOnline,PartyInvite,TournamentRoundPing,DailyChallengeComplete,BattlePassTier,RankUp,ModerationAction,SystemMaintenance. Rate-limited at 1 toast / 2s; queue overflow → drawer. - Settings panels (
W_Settings_*): Video, Audio, Controls (rebind), Gameplay (per-ruleset assists, gore tier, tutorial reminders), Accessibility (cross-ref arch§"Accessibility"), Network, Account, Privacy (cross-ref arch§"Security, Privacy, Compliance"). Each panel binds to a singleUViewModel; settings persist via@oshun/persistence.
MVVM contract
- Every ASC attribute referenced by HUD has a corresponding
FObservableproperty onUMatchViewModel; attribute change notifications flow through the viewmodel, never directly to widgets. This keeps widget code free of GAS includes and makes HUD testable without a live match. - Per-match viewmodel created on
RoundStart, destroyed onMatchEnd. - ViewModels for non-match HUD (notification center, friend list) live on the
UV2UISubsystem(LocalPlayer subsystem).
Accessibility hooks
- HUD scale slider: 75–150% in 5% steps; per-widget min-readable-size constraint asserted at design time (warns if rescale would drop a label below 18 px on a 1080p target).
- Reduced-motion variant: every animated widget has a
Reducedstatic variant; the V2UISubsystem swaps at runtime when the accessibility toggle changes. - Colorblind palettes: 4 palettes (Protanope / Deuteranope / Tritanope /
Monochromacy) applied via
UColorPaletteSubsystem; every widget pulls semantic colors through the palette, never a raw hex. - Screen-reader bridge: NVDA / JAWS / VoiceOver / TalkBack via
@v2/iris-accessibilityover@iris/accessibility; in-match descriptions and real-time match captions use@v2/psyche-caption-streamingover@psyche/caption-streaming, menu trees use the platform-native screen-reader API, and every focusable widget carries anAccessibilityDescriptiontext token.
Tutorial system
- Per-ruleset interactive tutorials (8–12 lessons per ruleset) live as Sequencer-driven UMG overlays composed with a sandbox training-mode match.
- Input-diagram overlay: shared
W_InputDiagramshows controller / KBM / fight-stick / fight-pad bindings; pulls from the active IMC. - Frame-data overlay:
W_FrameDataOverlayreads fromDA_Move_*data assets via the Sophia frame-data RAG (cross-ref arch§"Per-Fighter Signature Library Architecture"). Every release-candidate cook runs@v2/sophia-release-candidate-ingestionover the frame-data spreadsheet and patch-notes corpus through@sophia/ingestionbefore cook artifacts are produced. - Hit-reaction trainer: a
W_ReactionTimerwidget under training mode shows hit-confirm windows in real time.
Performance budget
- HUD render budget: ≤ 0.6 ms / frame at 60 Hz; ≤ 0.3 ms at 120 Hz.
- Widget tree depth caps at 16 to keep the slate prepass under budget;
designer-time linter
Tools/check-widget-tree-depth.pyfails the build on violations.
Telemetry & Analytics#
- Event schema covering standard taxonomy events for session start/end, level load, death, achievement, purchase, UI interaction, error, plus match lifecycle, move usage, damage dealt/received per move, combo length, meter usage, finisher trigger rate, rage-quit, crash, frame budget exceedance.
- V2Telemetry publishes canonical
@oshun/event-bustopics underv2.match.*,v2.cosmetic.*, andv2.player.*; it does not publish to a V2-only telemetry ingest endpoint. - Backend ingest with PII strip at ingest.
- Balance dashboards (pick rate, win-rate-on-hit, win-rate-on-block, frame-data drift, hot/cold heatmaps).
- A/B framework for balance changes with rollback.
- Ghost data capture (opt-in).
- Telemetry opt-out persistent across save reset.
Asset Budget & Streaming#
- Per-fighter polygon budget: principals ≤ 80k tris LOD0, mid-roster ≤ 60k, crowd ≤ 25k; LOD chain to LOD3 / impostor.
- Texture memory budget per fighter: ≤ 64MB at 4K texture pack, ≤ 32MB at 2K base, ≤ 8MB at 1K Switch2.
- Animation budget: ≤ 800 unique anims per fighter; sharable generic anims
pooled in
Content/Animation/Shared/; total compressed package ≤ 80MB per fighter. - Audio budget: per-fighter VO + foley + barks ≤ 50MB per locale at 48kHz Opus.
- Per-stage budget: ≤ 4M tris LOD0; texture ≤ 256MB at 4K pack; VFX GPU ≤ 4ms at 4K; audio ≤ 30MB per locale.
- Streaming pool sizes: PS5 / XSX 4GB, PC scalable to 8GB, Switch2 1.5GB.
- Asset chunking per-fighter: character / voice / base-costume / alt-costume / cosmetic-pack chunks for incremental install + DLC.
- Texture streaming priority: in-match visible fighters + stage prioritized; off-screen partner fighters demoted.
- Crowd LOD: instanced static mesh + bone-animated impostor at distance.
- Asset audit weekly: orphan / oversize / missing-LOD / missing-skin / redundant-material report (cross-ref §57).
Hotfix, Quick-Resume, Crash Recovery, DRM#
- Server-driven balance hotfix (data-only): tunable values for damage, frame data, meter cost, drive cost, finisher conditions — within bounds the anti-cheat trusts.
- Hotfix manifest signed + versioned; offline match honors local hotfix; online enforces server hotfix; rollback capability on failed canary.
- Tournament Mode freezes hotfix at TO snapshot; snapshot stored in replay header.
- Mid-match crash recovery: SP auto-save + state reconstruction on relaunch; online ranked graceful disconnect with crash-vs-rage-quit attribution via crash reporter.
- Quick-resume support per platform (Xbox Quick Resume, PS5 instant-resume, Switch2 sleep, PC sleep) with full session state preservation.
- Background download during play with bandwidth throttling option.
- PC DRM (Denuvo or equivalent) at launch with documented removal-plan window (6-12 months); console platform-native anti-piracy; cooked-asset integrity check at boot → safe-boot mode on tamper detection.
Build, Cook, Patch#
- BuildGraph at
Build/Build.xmlfor Win64, Linux (dedicated server), PS5, XSX, Switch2, Mac (dev only). - UnrealBuildAccelerator / Horde distributed builds with ≥ 75% cache hit-rate gate.
- DDC sharing for editor performance.
- CI workflows on every PR: editor compile, automation tests, Win64 cook.
- Cook frame-budget gate fails CI on regression.
- Chunked patch downloads; incremental patches per platform; manifest signing.
- Day-one patch budget ≤ 5GB; subsequent patches ≤ 2GB typical.
Data Architecture#
- Spreadsheet-of-truth at
V2/balance/data/(Google Sheets export / CSV). - CSV ↔ DataTable round-trip importer in
V2Editor. - Per-asset-type validators (move, fighter, moveset, finisher, style, ruleset, arena, entrance).
- Drift tests: every
DA_Movereferenced from aDA_Movesetexists, every animation referenced exists, every hitbox sequence non-empty. - CSV export of all runtime move frame data to
V2/balance/exports/<branch>/frame-data.csv.
Live-Service & DLC#
- Year-1 plan: 4 character DLC packs, 1 mode-expansion DLC, seasonal cosmetic drops.
- Year-1 free updates: balance patches, new stages, new tower content, new tutorials, accessibility.
- GameFeaturePlugin-based modular content delivery.
- License-conditional content isolated to plugin for hot-swap removal.
- Premium currency rules: transparent items, no real-money loot boxes, daily spend limits.
Accessibility#
V2's accessibility surface is cert-critical (PSN / Microsoft / Nintendo each require certain a11y features to ship) and is architected as a first-class subsystem rather than an after-the-fact toggle pass.
Visual a11y
- Colorblind palettes: 4 palettes (Protanope, Deuteranope, Tritanope,
Monochromacy). Applied via
UColorPaletteSubsystem; widgets pull semantic color (e.g.Color.Damage.Health,Color.Status.Burn) not raw hex. - High-contrast HUD: 2 levels (Medium, High); HUD widgets carry a
HighContrastVariantUMG override. - HUD scale: 75–150% in 5% steps; min-readable-size linter enforces 18 px @ 1080p minimum at any scale.
- Reduced motion: every animated widget has a
Reducedstatic variant; screen-shake, hitstop visual, camera-shake all have reduced variants; ranked-eligibility flag does not flip off when reduced-motion enabled (visual-only accommodation). - Subtitles + closed captions: per-locale, per-speaker, per-effect (e.g.
"[gunshot]" caption tags).
@v2/iris-accessibilityuses@iris/accessibilityfor the accessibility bridge, while@v2/psyche-caption-streaminguses@psyche/caption-streamingfor real-time match captions across HUD, spectator mode, replay transcripts, companion captions, and broadcast observer captions; in-engine subtitle system handles cinematic dialogue.
Motor a11y
- Full input rebinding: every action remappable on every input class (KBM / gamepad / fight-stick / fight-pad / adaptive controller).
- Assist macros: auto-combo-trigger, motion-shortcut (DP → single button), parry-window-extend (+2 frames), block-assist (auto-block when stick neutral). Assist-macros flag flips off ranked-eligibility in the matchmaking ticket; assist-eligible queues match assist-vs-assist or assist-vs-pure-with-handicap.
- Hold-to-press toggles: every "hold" input has a "toggle" alternative; config-driven.
- One-handed scheme: preset rebinding for left-only and right-only play; ships with each platform's adaptive-controller integration.
- Adaptive controller integration: Sony Access Controller (PS5), Microsoft Xbox Adaptive Controller (XSX), Logitech Adaptive Gaming Kit (PC), Quadstick (PC). Per-controller calibration UI from V2Peripherals.
Auditory a11y
- Audio cues for visual events: opt-in audio ping for low-HP, ringside rope position, finisher window, Drive Rush whiff — every gameplay state with critical visual cue has a corresponding audio cue.
- Mono / binaural toggle: for hearing-impaired-in-one-ear players.
- Subtitle-only mode: mutes voice / commentary but retains gameplay SFX.
Cognitive a11y
- Tutorial assist: input prompts persist after first practice (toggle); trial cap removed (some players need 50+ attempts).
- Tooltip everywhere: every menu item carries a tooltip with text and optional voice-over.
@iris/accessibilityintegration:@v2/iris-accessibilitybinds dyslexia-friendly typography, cognitive-load reduction, screen-reader bridge, real-time companion-app assist, native UE accessibility hooks, and accessibility certification gates. It consumes@v2/psyche-caption-streamingover@psyche/caption-streamingas the caption provider while Iris owns the cross-client accessibility semantics.@psyche/caption-streamingintegration:@v2/psyche-caption-streamingowns the real-time match caption session plan for HUD, spectator mode, replay, companion, and broadcast surfaces. Captions are off rollback presentation state and expose no deterministic gameplay input.
Cert + certification targets
- VPAT 2.5 (WCAG 2.1 AA) for marketing site + companion app; certification target ≥ 90% WCAG 2.1 AA criteria pass before launch.
- AbleGamers + Can I Play That community reviews scheduled in pre-launch beta.
- Sony / Microsoft / Nintendo accessibility certification: each platform's
required-a11y-feature list ships in launch build; cert blockers tracked
per-platform at
V2/legal/a11y-cert-checklist.md. - CI gate
Tools/check-a11y-coverage.pyasserts every focusable widget has anAccessibilityDescriptionand every animated widget has aReducedvariant.
Security, Privacy, Compliance#
V2 security/privacy/compliance composes the existing Oshun shared packages
(@oshun/data-residency, @oshun/audit-platform, @oshun/trust-safety) plus
Themis governance, @v2/aphrodite-age-gate over @aphrodite/age-verification,
and @v2/aphrodite-consent-surfaces over @aphrodite/consent-engine. This
section pins the cert-blocking surface; the data-subject-rights request flow is
detailed in arch§"Compliance & Data-Subject-Rights Architecture", and the
privacy-by-design / DPIA / sub-processor governance process is detailed in
arch§"Privacy-by-Design, DPIA & Sub-Processor Architecture".
Auth + identity
- Account binding: Oshun account is the root (
@oshun/identity); per-platform shadow accounts bind via@oshun/auth-clientand the V2@v2/oshun-identity-bindingsurface.FV2SaveHeaderstoresOshunAccountIdandHomeRegionIdseparately fromPlatformUserIdso cloud saves cannot merge across identities. - MFA: TOTP required for account-merge, payment-detail change, and ranked-pro-tier qualification.
- Session: JWT short-lived (15 min) + refresh token (30 days); refresh
rotates on every use; cross-region session sync via
@oshun/cache.
PII handling
- Strip at telemetry ingest:
@oshun/audit-platformpipeline applies a per-field PII allowlist; raw IP, raw device fingerprint, real-name fields never reach analytics warehouse. Per-region routing via@oshun/data-residency. - Per-region storage: EU player data routed to Frankfurt / Stockholm; JP to Tokyo; KR to Seoul; LATAM to São Paulo; CN to publisher-routed cloud; CCPA opt-out honored at ingest.
- DSR routing:
@v2/themis-privacy-dsr-routingcomposes@themis/privacywith@oshun/data-residency; Themis owns the access / erasure / portability / rectification workflow and data-residency owns the subject-home route. SLA per region remains GDPR 30 days, CCPA 45 days, LGPD 15 days. DSR machine-readable exports are JSON + CSV; deletion cascades to all bound shadow accounts. - V2 audit publication: Moderation, anti-cheat, and DSR surfaces publish
canonical events through
@oshun/audit-platform; V2 publishes and Oshun retains and exports the investigation-ready audit trail. - Per-feature consent:
@v2/aphrodite-consent-surfacesreplaces standalone V2 consent handling for telemetry, voice processing, and behavioral profiling. It uses@aphrodite/consent-engine, requires consent receipts when enabled, defaults missing opt-ins to privacy-preserving fallbacks, redacts disallowed data classes, and stays off rollback.
Rating boards + per-region content rules
- Rating boards: ESRB M, PEGI 18, CERO Z, USK 18, ACB R18+, GRAC, ClassInd 18, OFLC R18 — single rating cycle per platform per region.
- Per-region content rules use shared
@oshun/region-rulesperV2/docs/decisions/regional-content-rules-owner.md: China removes blood + finishers + ghost / skeleton imagery; Germany clamps to mild gore and swaps red blood for green / black where applicable; Australia / NZ cook standard gore with finisher pre-clearance; Korea clamps to mild gore and softened finishers. Missing region data defaults to the China most-restrictive profile. - Age gate:
@v2/aphrodite-age-gatereplaces the standalone V2 age gate. It uses@aphrodite/age-verificationas a backend-only driver for gore tier, adult fatalities, and region-conditional cinematics. The Aphrodite brand is not visible to players, and the gate stays off rollback. The primitive-fitness audit keeps the existing Aphrodite primitive but parameterizes it with themature-rated-fighting-gameprofile, rejects the adult-content default profile, uses rating-board / region-rule thresholds, and excludes 2257, performer-protection, and anti-CSAM performer workflows from V2 game content gating. The adult-content default profile is rejected for V2. - Per-region build cooks:
Tools/cook-region.pyproduces per-region cooked content with gore-tier overrides; rating-board manifest atV2/legal/rating-boards.jsonis the source of truth. - 2257 record-keeping: if any CAW / CAF / NIL flow involves licensed
performer likeness,
@themis/likeness(forthcoming) holds the records; out-of-scope for CAW that is purely user-generated likeness. - Licensed-fighter likeness safety:
@v2/aphrodite-licensed-likeness-safetycomposes@aphrodite/performer-sovereigntyand@aphrodite/performer-autonomy. It consumes Themis@themis/likenessstamps by contract, listens forthemis.license.revoked, and blocks the likeness surface plus Bellona cook for revoked, expired, terminated, mismatched, or withdrawn grants.
Cert constraints
- Every rating board requires a separate Manifest + cert submission; cert
windows tracked at
V2/legal/cert-windows.md. - China cert: pursued via publisher route only; the V2 build always passes
Tools/check-cn-content-rules.pybefore publisher hand-off. - EU AI Act: every shipping AI service requires a Model Card + conformity
assessment;
@v2/eu-ai-act-surfacevalidates the Director, AI commentary, anti-cheat classifier suite, and generation-pipeline registry against@nous/safetyModel Cards and@themis/accountabilityAI-system-of-record exports.
Observability, Evaluation, Release Gates#
- All Node packages under
apps/v2/declare@oshun/metricsand@oshun/tracingas required from day one. The UnrealV2Servicesmodule exposes matchingFV2ServiceObservabilityBindingrecords forapps/v2/*andV2/ue/Source/V2Services; the path is off rollback and cannot influence deterministic simulation. - Symbolicated crash reporter; in-the-loop fault injection in dev.
- Per-platform perf dashboards.
- Network-quality dashboard: matchmaking p99, rollback frame distribution, packet loss, rage-quit rate.
- Anti-cheat false-positive rate dashboard.
- Canary analysis automation for online services.
- Release gates: regression suite + golden replays + frame-budget + crash rate + cert pass + RTC pass + canary pass.
Performance Budgets#
| Target | Resolution | FPS | Notes |
|---|---|---|---|
| PS5 (standard) | 4K | 60 | RT off |
| PS5 Pro | 4K | 60 | RT shadows on |
| PS5 Pro (perf mode) | 1080p | 120 | |
| Xbox Series X | 4K | 60 | |
| Xbox Series S | 1440p | 60 | Reduced VFX density |
| Switch2 (docked) | 1080p | 60 | Quality-band drop |
| Switch2 (handheld) | 720p | 30 | Quality-band drop |
| PC baseline (RTX 3060 / 4060) | 1440p | 60 | Medium settings |
| Steam Deck | 800p | 60 | Verified |
Per-frame: gameplay 4ms, anim 3ms, render 8ms, audio 1ms, network 0.5ms, GC ≤ 1ms incremental.
Loading: cold-boot ≤ 30s on PS5; mid-session match load ≤ 8s.
Testing, QA, Cert#
- UE Automation Spec coverage for GAS, motion parser, hitbox engine, rollback determinism, save round-trip, data-table integrity.
- Gauntlet suites: launch + tutorial + arcade ladder + online-headless 1v1, on every PR.
- Replay-based regression: 200 golden replays per build, frame-by-frame divergence detection.
- Cert / TRC / XR / lotcheck on every shipping platform.
- Anti-cheat compatibility cert per platform.
- Trophy / achievement plans across modes.
Content Pipeline & Source Control#
- Perforce primary; Git LFS mirror for OSS-style branches.
- Per-asset-type checkout policy (umap exclusive, uasset mostly mergeable with text-format on, blueprint binary).
- Build farm with cooked-content caches per platform; weekly hard refresh; nightly delta cook.
- Asset audit report weekly (orphans, oversize, missing LODs, missing skin weights, redundant material variants).
Per-Fighter Signature Library Architecture#
Signature library is a per-fighter contract enforced by the checklist at
V2/balance/fighters/<fighter>/signature-checklist.md, asset-budget-gated, and
QA-cert-verified.
Side-Story & Story-Theater Pipeline#
- Side Story plugin (
V2/ue/Plugins/V2Mode_SideStory/) per fighter: Sequencer-driven cinematic + 3-5 scripted fights + branch logic. - Story Theater plugin (
V2/ue/Plugins/V2Mode_StoryTheater/) indexes all unlocked cinematics across Story (§20) / Character Episodes / Side Stories / Arcade endings and presents a browse / replay UI with alt-language audio override + subtitle override + commentary track toggle. - Branch tree visualizer (
V2Mode_StoryTheater) renders the Story branching graph; player can jump back to any branch point and retry. - Ending Gallery in Krypt hub indexes per-fighter Arcade endings.
Match-Flow Mode Plugin Matrix (extension)#
This matrix covers the canonical match-flow variants (versus, time / score attack, wager, handicap, and so on). It is a deliberately separate table from the core-mode matrix in arch§"Game Modes" (Arcade, Story, careers, hubs): that table covers full single-player and online experiences, while this one covers the lightweight match-flow variants that wrap a standard fight.
| Mode | Net | Save | Plugin |
|---|---|---|---|
| Local Versus (1P vs 2P) | Local | Match record | V2Mode_LocalVersus |
| Versus CPU | Local | Match record | shares V2Mode_LocalVersus |
| CPU vs CPU (attract) | Local | n/a | shares V2Mode_LocalVersus |
| Time Attack | Local + leaderboard | Best-time per fighter | V2Mode_TimeAttack |
| Score Attack | Local + leaderboard | Best-score per fighter | V2Mode_ScoreAttack |
| Wager Match | Online ranked-ineligible | Wager ledger | V2Mode_Wager |
| Friendly / Dare | Online friend-only | Match record | V2Mode_Friendly |
| Handicap | Local or online | Match record | V2Mode_Handicap |
| First Blood | Local or online | Match record | V2Mode_FirstBlood |
| Boss Battle | Local | Per-boss progress | V2Mode_Boss |
| Sparring | Local + online lab | n/a | shares V2Mode_Training |
| Iron Man / Bo-N | Online | Set scorecard | V2Mode_BestOfN |
| LAN | LAN UDP broadcast | Match record | V2Mode_LAN |
Ranked Season Service#
Service contract
- gRPC service:
libs/proto/v2/online/rank.proto(cross-ref Online Services contract above). - Key methods:
Rank.RecordMatch(match_result) → mmr_delta,Rank.GetLeaderboard(mode, region, season, page) → ladder,Rank.GetSeasonState(account_id, mode) → season_state,Rank.GetCrownPoints(account_id, season) → points. - MMR model: TrueSkill2 with per-mode μ/σ; visible rank tiers mapped via
static
rank-tier-map.json. Hysteresis: ±1 tier requires ≥ 5 matches in the boundary band. - MMR delta cap: ±32 points per match (prevents single-match swings).
- Placement matches: 10 placement matches at season start before visible rank shown; hidden MMR seeded from prior season − 1.5σ decay.
- Rank decay: Master tier and above decay 50 MMR / 14 days of inactivity; decay stops at Master-tier floor.
- Master tier threshold: top 1% of TrueSkill2-projected pool per region per mode; recalculated weekly.
- Sandbagging detection: ML classifier emits
v2.rank.sandbagging.detectedon confidence ≥ 0.95; manual review opens via@themis/dispute-resolution; confirmed sandbaggers auto-derank 200 MMR. - Event-bus publishes:
v2.rank.season.started,v2.rank.season.ended,v2.rank.tier.promoted,v2.rank.tier.demoted,v2.rank.sandbagging.detected. - Season authority:
@v2/maat-live-service-calendarconsumes@maat/strategyas the source of truth for V2 seasons and Crown Points pool windows; ranked services expose the calendar but do not define it. - SLOs: rank record p99 ≤ 800 ms; leaderboard fetch p99 ≤ 400 ms; season-end snapshot completed within 24h of season close.
- Owner: V2 ranked team. Cost-tier: standard backend; ceiling at
V2/docs/cost/ranked.md.
Companion App Architecture#
- Companion app runs at
apps/oshun/mobile/v2/inside the shared Oshun Expo shell and consumes@oshun/shell-core,@oshun/auth-client,@oshun/concordia-integration,@oshun/trust-safety,@iris/agents, and@sophia/client. It consumes the same Public API as third-party tools; account-public-flag gates which stats are visible. - Second-screen mode during a live match: companion app receives low-bandwidth stream of opponent move list + frame data; no gameplay effect; cosmetic-only.
- Push notifications routed via APNS / FCM with per-category opt-out.
- Modding policy (PC) and Steam Workshop integration documented at
apps/v2/web/dev-portal/.
Service contract
- Public API: handlers at
apps/oshun/web/api/v2/, Next route adapters atapps/oshun/web/src/app/api/v2/, and OpenAPI 3.1 spec atlibs/openapi/v2/companion.yamlregistered by@oshun/openapi. The runtime document is served atGET /api/v2/openapi; generated client SDK remains owned by@oshun/developer-portal. - Knowledge pages: frame-data wiki, combat glossary, and roadmap routes now
live at
/v2/wiki,/v2/glossary, and/v2/roadmapinsideapps/oshun/web. They are backed by@sophia/clientRAG response contracts and render citations from the frame-data schema, public API, companion, and architecture corpus. - Auth: OAuth 2.1 with PKCE; third-party apps register via developer portal,
get per-app scopes; rate-limit per-app via
@oshun/cache. - Key endpoints:
GET /v2/player/{id}/stats— public stats (per-account-public-flag).GET /v2/player/{id}/history?limit=N— match history.GET /v2/replay/{id}— replay stream (auth required for non-public).POST /v2/match/{id}/coach-stream— second-screen low-bandwidth stream.POST /v2/notification/subscribe— push subscription.
- Event-bus subscribes (for push routing):
v2.match.ended,v2.party.invite.created,v2.tournament.round.advancing,v2.daily-challenge.completed,v2.battle-pass.tier.unlocked. - SLOs: API p99 ≤ 400 ms; push delivery p99 ≤ 5 s end-to-end; second-screen stream ≤ 200 ms p99 from match event to companion render.
- Rate limits: 100 req/min per third-party app (unauthenticated baseline); 1000 req/min per registered app; per-account 30 req/min on personal data.
- Owner: V2 platform team. Cost-tier: ceiling at
V2/docs/cost/companion.md; APNS / FCM at vendor standard tier.
Production Pipeline#
- Mocap pipeline: Vicon / OptiTrack recording hardware →
@aja/motion-pipeline-sdkcleanup / contact-root repair →@aja/neural-retargetingV2-skeleton retarget → Bellona/UE import → curve / keyframe edit → Sequencer / AnimBP import. Stunt double + safety + insurance handled at production layer. Every studio capture first passes@v2/aja-consent-nil-ledger, which requires active@aja/consent-managementconsent and a Themis@themis/likenessNIL link before Aja ingest; revocation blocks future Aja processing and Bellona cook for dependent clips. - Licensed likeness safety pipeline:
@v2/aphrodite-licensed-likeness-safetyruns before likeness surfaces, creator-suite publishing, replay export, and Bellona cook.@aphrodite/performer-sovereigntyvalidates approved uses while@aphrodite/performer-autonomyemits the revocation flow that notifies Themis, Kuanyin, and Aja. - VO pipeline: per-locale recording → editing → loudness normalization → Opus encode → per-fighter bank version.
- Music pipeline: composition → license clearance → master + variant authoring → MetaSounds graph build → in-game audio modulation.
- IP / NIL / Likeness layer: per-asset rights metadata stored in
V2/legal/rights-manifest.json; build pipeline verifies every shipping asset has cleared rights or is original-IP. - Pre-production milestone gates: Greenlight → Alpha → Beta → Gold master;
each gate has documented exit criteria stored at
V2/docs/production/milestones/.
Compliance & Data-Subject-Rights Architecture#
- Per-region data residency enforced by
@oshun/data-residencyroute decisions and API gateway routing rules. - DSR SLA: 30d EU / 45d CCPA with one-time extension option.
- DSR workflow ownership: access / erasure / portability / rectification are
owned by
@themis/privacyand exposed to V2 through@v2/themis-privacy-dsr-routing; V2 does not ship a local DSR ops console. - Audit-platform ownership: moderation decisions, anti-cheat review events,
and DSR workflow routes are published through
@oshun/audit-platform. V2 publishes; Oshun retains and exports the retained compliance, audit, and privacy investigation records. - Erasure preserves anonymized aggregates per GDPR Recital 26.
- Portability format: standardized JSON with profile / matches / telemetry / cosmetics / friends / replays.
- Statement of Reasons API publishes machine-readable moderation reasons per DSA Article 17; appealable.
- Themis dispute adapter is
@v2/themis-dispute-resolutionover@themis/dispute-resolution: moderation appeals route to mediator + safety queues, and tournament-result disputes route to auditor-backed Themis challenge review. The adapter is off rollback. - Semi-annual transparency report ingested from moderation pipeline.
Esports Backend Architecture#
- Per-event Tournament Edition snapshot stamped in replay header for audit; rule file uploaded via TO badge.
- Crown points aggregated from the
@maat/strategyPro Circuit calendar + cross-region series through@v2/maat-live-service-calendar. - Wildcard / Roulette / Mystery modes are client-side variants gated by ruleset toggle; results-eligible per tournament rule file.
- Esports Operations team runs live-event on-call.
Service contract
- gRPC service:
libs/proto/v2/esports/esports.proto. - Bracket integration: outbound webhooks to Smash.gg / Start.gg / Challonge
/ Battlefy via
@oshun/inbound-integrations; V2 pulls results (server-authoritative) rather than accepting client-pushed results — every match's result is cryptographically verified against the replay hash before it counts for Crown Points. - Key methods:
Esports.RegisterEvent(rule_file) → event_id,Esports.SubmitResult(event_id, match_result, replay_hash) → ack,Esports.GetBracket(event_id) → bracket,Esports.QualifyForFinals(season_id, region) → qualified[]. - Crown Points formula:
points = base_points[round] × region_factor × participant_factor × season_decay; full formula atV2/docs/esports/crown-points-formula.md. Base points per round (Round-32 = 50, Round-16 = 100, QF = 200, SF = 400, GF = 800). - Event-bus publishes:
v2.tournament.event.started,v2.tournament.round.advancing,v2.tournament.event.completed,v2.crown-points.granted. - Broadcast pipeline:
apps/v2/esports-tools/ships@v2/esports-tools, which composes@uzume/broadcastfor switching, graphics, multiviewer, replay, SRT contribution feeds, stream health, and stream destinations. Standalone OBS / NDI / vMix glue is not primary; OBS WebSocket is retained only for streamer-mode notification suppression. - Arena LED + projection: the same
@v2/esports-toolspackage composes@uzume/luminaand@uzume/prismfor live tournament LED wall layout, lighting pixel maps, projector mapping, structured-light alignment, arena video routes, and show-cue events. It is presentation/show-control state only and exposesmayInfluenceRollback: false. - Veritas fact-checking:
@v2/esports-toolscomposes@veritas/fact-checkingfor post-match reporting, bracket result verification, and esports news publication readiness. Replay, bracket, report, and news claims are scored with explicit evidence and consensus; winner-record conflicts hold publication without changing match authority. - Iris real-time translation:
@v2/iris-realtime-translationcomposes@iris/voicefor spectator chat translation, commentary subtitle localization, broadcast overlays, and companion second-screen feeds. The bridge registers locale receivers per surface and remains presentation-only withmayInfluenceRollback: false. - Twitch Extensions rate-limit: 100 polls / extension / minute; per-extension auth via Twitch JWT.
- SLOs: result ingest p99 ≤ 5 s from submit to bracket update; live bracket fetch p99 ≤ 200 ms; broadcast overlay update p99 ≤ 100 ms.
- Owner: V2 esports ops team. Cost-tier: ceiling at
V2/docs/cost/esports.md; commentary AI cost folds into deps§67.
Live-Service Calendar Service#
- Calendar authority is
@v2/maat-live-service-calendarover@maat/strategy; there is no standalone V2 live-calendar schema. Maat owns seasons, Crown Points, Pro Circuit calendar events, anniversary events, charity events, console tie-ins, community-voted events, and balance ramp windows. - Per-region calendar override: themes that conflict with cultural context
auto-hidden via
RegionVariantdata asset. - Player-facing calendar widget + 6-month forward view + opt-in digest email.
- Re-engagement service: 60d-inactivity trigger → returning-player reward grant + lapsed-player email; bandwidth-throttled (no spam).
Service contract
- gRPC service:
libs/proto/v2/live/calendar.proto. - Key methods:
Calendar.ListEvents(region, range) → events[],Calendar.GetEvent(event_id) → event,Calendar.SubscribeReminder(event_id, channels) → ack. - Event-bus publishes:
v2.calendar.event.starting,v2.calendar.event.ended,v2.calendar.reminder.dispatched. - Re-engagement throttle: ≤ 1 reactivation email / lapsed-player / 30 days; push notification rate-limit ≤ 1 / day / category. Player can opt out per channel.
- SLOs: calendar fetch p99 ≤ 250 ms; event notification dispatch p99 ≤ 60 s from event-start; reactivation email delivery p99 ≤ 10 min.
- Owner: V2 live-ops team. Cost-tier: standard email / push; ceiling at
V2/docs/cost/live-calendar.md.
Progression & Codex Service#
- Per-fighter XP / Mastery computed server-side from match-record + Trial / Mission / Tournament completion events; mirrored to client for HUD display.
- Account level + Prestige loop maintained on the persistence layer
(arch§"Persistence & Profile" + arch§"Cross-Play & Cross-Progression");
transparent per-level rewards table at
V2/balance/progression/account-rewards.csv. - Codex / Encyclopedia content at
V2/balance/codex/(CSV / Markdown ↔ DataTable round-trip per arch§"Data Architecture"); per-entry unlock-condition data table; per-entry replay-link target into Story / Side Story / cinematic Vault. - Unified Quest Log aggregator (
V2Mode_QuestLogplugin) ingesting from every mode's quest source. - Reward Inbox queue persisted per account; auto-claim toggle enforces low-value-only.
Service contract
- gRPC service:
libs/proto/v2/progression/progression.proto. - Key methods:
Progression.GetAccountState(account_id) → state,Progression.RecordEvent(account_id, event) → rewards[],Codex.ListEntries(filter) → entries[],Codex.UnlockEntry(account_id, entry_id) → ack,QuestLog.GetActive(account_id) → quests[],RewardInbox.Pop(account_id) → reward_or_empty,RewardInbox.ConfirmClaim(account_id, reward_id) → ack. - Event-bus publishes:
v2.progression.level.up,v2.progression.mastery.advanced,v2.codex.entry.unlocked,v2.reward.granted. - Event-bus subscribes:
v2.match.ended,v2.trial.completed,v2.mission.completed,v2.tournament.event.completed. - SLOs: state fetch p99 ≤ 300 ms; event-driven reward grant p99 ≤ 3 s end-to-end (event → reward in inbox).
- Owner: V2 progression team. Cost-tier: standard backend; ceiling at
V2/docs/cost/progression.md.
Community & Support Backend#
Service contract
- gRPC + REST services:
libs/proto/v2/community/*.proto; Zendesk webhook integration via@oshun/inbound-integrations. - Key methods:
Support.OpenTicket(account_id, payload) → ticket_id,Support.GetTicket(ticket_id) → ticket,Support.PostMessage(ticket_id, message) → ack.Feedback.Submit(account_id, feedback) → ack,Feedback.Vote(feature_id, vote) → ack.Ambassador.GrantRole(account_id, role) → ack,Ambassador.RevokeRole(account_id, role) → ack.HallOfFame.Induct(account_id, citation) → induction_id.Coach.RegisterCertification(account_id, certification) → ack,Coach.GetRoster(filter) → coaches[].
- SLA tiers (Priority-Tier SLA Router):
- P0 (account compromise, payment dispute, harassment-in-progress): first response ≤ 1 hour, resolution ≤ 24h.
- P1 (cheat report, ban appeal, payment failed): first response ≤ 8 hours, resolution ≤ 72h.
- P2 (cosmetic loss, friend-list bug, UI bug): first response ≤ 48 hours, resolution ≤ 14 days.
- P3 (feature request, general feedback): first response ≤ 7 days, resolution N/A.
- Event-bus publishes:
v2.support.ticket.opened,v2.support.ticket.resolved,v2.feedback.submitted,v2.ambassador.role.granted. - News localization SLA: 24h from English authoring to all 18 launch locales (subtitle level); 7d for full VO patch updates.
- SLOs: ticket open p99 ≤ 1 s; feedback submit fire-and-forget; ambassador console p99 ≤ 500 ms.
- Owner: V2 community ops team. Cost-tier: Zendesk subscription +
Canny + email vendor; ceiling at
V2/docs/cost/community.md.
Per-Platform Store & PPP Pricing#
V2's store integration is per-platform-store-native: each platform store has
its own consumable / entitlement / refund / family-share semantics, and the V2
client surfaces those through a thin IPlatformStore adapter. Non-store
flows (coaching marketplace, donations, esports prize pools, companion-app
subscription) flow through Stripe / Adyen per deps§"Payment processing".
Per-platform store integration
- Steam (Steamworks SDK): consumable IAP via Steam Inventory; entitlement
manifests via Steamworks Web API; Steam Workshop for community cosmetics;
Steam Family Library Sharing honored; refund window 14 days / 2h play (per
Steam policy);
OnlineSubsystemSteamadapter. - PSN: consumable / non-consumable IAP via PSN Commerce; PSN trophies + PS
Plus integration; PS Plus Premium tier may include V2 in catalog; family-share
honored; refund per Sony policy;
OnlineSubsystemPSNadapter. - Microsoft Store (XSX + PC): IAP via Microsoft Commerce; Xbox
achievements + Smart Delivery between XSX and PC; Game Pass tier may include
V2; family-share via Microsoft Family; refund per MS policy;
OnlineSubsystemMSadapter. - Nintendo eShop (Switch 2): IAP via Nintendo eShop; Nintendo Switch Online
integration; cloud save; family-share via Nintendo Family; refund per Nintendo
policy (digital purchases generally non-refundable);
OnlineSubsystemNintendoadapter. - Epic Games Store: IAP via EOS Ecom; achievements via EOS Achievements; EGS
overlay;
OnlineSubsystemEOSadapter (also doubles as cross-platform auth/lobby backbone). - iOS / Android (companion app only — no IAP grants game items): App Store / Play Store IAP for companion-app subscription only; non-item flows.
PPP pricing surface
- PPP table:
@maat/financepublishes the V2 regional pricing policy used by@v2/maat-finance-ledgerand mirrored inFV2MaatFinanceLedgerPolicy. Source data is regenerated quarterly from IMF + World Bank per-capita PPP data and signed via@oshun/configso clients consume the latest table without an app patch. - Per-region price tiers: baseline price × per-region PPP ratio rounded to the nearest platform-store-allowed tier (Steam has discrete tiers per region; Sony / MS / Nintendo similar). Per-region price ceiling capped at baseline; floor at ratio × 0.4 to prevent inversion attacks.
- Local-currency display: client surface shows local-currency price + baseline-currency equivalent + reverse-look-up to regional purchase-power ratio (transparency).
- Per-region price-change cadence: ratio refresh quarterly; no in-month changes (players can plan purchases against a stable price for ≥ 30 days).
- Offline ledger cache:
V2Persistencecan apply a Maat-approved offline cache entry when online authority is unavailable; the entry carries a Maat decision id and reconciles on next online sync before cloud save promotion. - Responsible-play spend insight:
@v2/lakshmi-responsible-play-spend-insightcomposes@lakshmi/behavioral,@lakshmi/budgeting, and@lakshmi/transactionsfor opt-in nudges, parental controls, self-imposed caps, and weekly summary reflection. This surface is off rollback and can only affect store confirmation or guardian approval, never match simulation.
VPN-region-shop detection
- Detection signal:
account_region(set at first purchase + verified at age-gate) vssession_region(geo-IP per-session) vspayment_region(per-IAP). Disagreement on more than one of the three for ≥ 90 days triggers a soft block on purchase. - Action on detection: prompt user to either confirm permanent region change (re-verify age, accept new region's content rules + ratings) or cancel purchase; never silently apply different region rules to the same account.
- Whitelist: known business traveller patterns (consistent home region with brief secondary-region windows) do not trigger the block.
- Honest disclosure: the V2 privacy notice discloses VPN detection as a fraud-prevention measure, not as a punitive cross-region price-arbitrage block (the latter would invite consumer-protection scrutiny in EU / UK).
Cert constraints
- Each platform store must be the exclusive path for items that grant in-game gameplay state on that platform — coaching / donation / subscription are non-item flows and explicitly allowed under TRC.
- CI gate
Tools/check-payment-cert.pyasserts no Stripe / Adyen call path can ever grant a gameplay item or cosmetic on console. - Steam DRM, Sony anti-tamper, Microsoft anti-tamper, Nintendo lotcheck signing all required at submission.
Balance Ops Service#
- Public frame data tool starts as shell-native Sophia knowledge pages at
/v2/wiki,/v2/glossary, and/v2/roadmap, consuming the same cited frame-data corpus that drives runtime data tables (cross-ref arch§"Data Architecture"). Raw CSV download and patch diff views remain owned byV2FrameDataPublisher. - Auto-matchup-chart generator in
apps/v2/balance/ingests match-result events from telemetry → produces per-fighter / per-rank matchup percentage. - ML balance recommender at
apps/v2/ml-balance/proposes buff/nerf candidates with confidence + telemetry justification; designer-reviewed; never auto-applied. - A/B framework integrated with PTB branch (cross-ref §52.8); per-A/B outcome published post-patch.
Service contract
- gRPC service:
libs/proto/v2/balance/balance.proto+ml-balance.proto. - Key methods:
Balance.GetMatchupChart(fighter_id, rank_tier) → chart,Balance.GetFrameData(fighter_id, move_id) → frame_data,MLBalance.GetRecommendations(window, scope) → recommendations[],Balance.PublishPatch(version, changes) → ack. - Event-bus publishes:
v2.balance.dataset.published,v2.balance.recommendation.generated,v2.balance.patch.shipped. - Event-bus subscribes:
v2.match.ended(telemetry feed),maat.balance.dashboard.surface(@v2/maat-balance-dashboardover@maat/intelligence+@maat/dashboard+@maat/reporting),sophia.framedata.published(Sophia citation feed sourced from the@v2/sophia-release-candidate-ingestionrelease-candidate cook hook). - ML threshold: balance recommendation surfaces only when ≥ 5,000-match sample at the target rank tier, win-rate Δ ≥ 5 pp, matchup confidence ≥ 0.95. A/B duration default 14 days (PTB) before promotion.
- SLOs: matchup-chart fetch p99 ≤ 600 ms; recommendation generation weekly cadence (Monday 04:00 UTC).
- Owner: V2 balance team + Maat team. Cost-tier: Maat balance dashboard
pipeline budget at
V2/docs/cost/balance.md; there is no standalone V2 balance dashboard.
Engineering Polish Pipeline#
- PSO pre-cache built into cooked content per platform; runtime PSO cache validation at boot.
- Shader pre-warm at first-launch + per-cosmetic-pack load via dedicated worker thread.
- Asset pre-load scheduled by
V2Persistenceload handler based on per-account session-pattern segment (§55.6). - Adaptive tickrate server-side switch in
V2Netcodededicated-server target; rollback paths exempt. - Per-session telemetry sampling randomized in
V2Telemetryingest layer; crash + cheat events always 100% sampled by event-class override.
AI Director Service#
- Director never active in ranked / tournament — static rule-of-the-day only.
- Per-player tendency profile stored alongside the save game (arch§"Persistence & Profile"); never shared cross-account.
- EU AI Act conformity documented; per-player profile DSR honored.
Service contract
- gRPC service:
libs/proto/v2/director/ai-director.proto. - Key methods:
Director.GetSessionState(player_id, mode) → state,Director.RecordMatchSignal(player_id, signals) → ack,Director.ApplyProfile(player_id, mode, profile) → ack. - Rollback-safety binding (corrected per arch§"Sister-Monorepo Integration
Surface"): offline / training consumes live Psyche tendency hints freely
through
@v2/psyche-ai-director-hintsandV2AdaptiveAI; online rollback-with-CPU defense-in-depth matches sample@psyche/behavior-predictionat match load, baketendency-vector + seedinto the deterministic match-start input stream, and run rollback-deterministic AI from then on. Live mid-match updates queue and apply at the next match-start. Never call Psyche or Director gRPC inside the rollback envelope. - Tunable parameters (per-mode, in
apps/v2/ai-director/profiles/):epsilon ∈ [0.05, 0.30](difficulty drift step), session-signal weights (win-rate / length / frustration / stomp; sum-to-1 vector), recovery-easing rate. - Event-bus publishes:
v2.director.profile.applied,v2.director.signal.recorded. - Event-bus subscribes:
psyche.behavior.prediction,v2.match.ended. - Unreal bridge:
V2AdaptiveAIvalidates that live@psyche/behavior-predictionhints are non-rollback-only and that any rollback-with-CPU hint is serialized intoFV2AdaptiveAIMatchStartInputVectorbeforeV2Netcodestarts simulating. - Shakti style matchup binding:
@shakti/sota-criticalclassifies per-player combat style asboxer,kickboxer,striker,grappler, orsubmission-specialist.@v2/shakti-style-classificationconverts the off-rollbackshakti.player.style.updatedoutput into AI Director matchup hints andV2AdaptiveAIvalidates theFV2AdaptiveAIShaktiStyleClassification/FV2AdaptiveAIStyleMatchupHintcontract. Rollback frames cannot call Shakti; rollback-with-CPU consumers use match-start or next-match snapshots only. - EU AI Act: Director is Limited risk.
@psyche/action-safetyprovides classifier transparency and opt-out,@v2/eu-ai-act-surfacebinds the V2 adapter,@nous/safetyhostsV2/docs/ai/model-cards/adaptive-ai-director.md, and@themis/accountabilityowns the AI-system-of-record and conformity export. User-visible opt-out in Settings switches the player to the static CPU profile before classifier use; profile data remains per-account and DSR delete cascades to Director profile + Psyche tendency vector + Shakti style classification. - SLOs: profile fetch p99 ≤ 100 ms (off-rollback); signal recording fire-and-forget.
- Owner: V2 AI team + Psyche team. Cost-tier: Psyche inference budget at
V2/docs/cost/ai-director.md.
Local Multiplayer & Co-op Architecture#
- Split-screen preserves 60fps target with per-view render budget; per-side accessibility independence.
- Co-op online for Story / Tekken Force / Devil Within / Konquest: client-server net (cross-ref arch§"Client-Server Netcode") with session host migration on host disconnect.
- Crew co-op (3v3 / 4v4) uses tag-team rollback for the 1v1 portions and client-server for crew-rotation moments.
Signature Event Mode Plugins#
Mode plugins for §93 signature events ship as UGameFeaturePlugin:
V2Event_Marathon— 24-hour charity-aligned eventV2Event_KingOfIronFist— 8-fighter elimination ladderV2Event_WrestleMania— WWE PPV-style 8-match cardV2Event_FightWeek— UFC International Fight WeekV2Event_MishimaCup— SoulCalibur 16-fighter Weapon Master tournamentV2Event_EVO_Top8— EVO-style Top 8 broadcast eventV2Event_CrewWars— Def Jam 4v4 crew eliminationV2Event_Horde— Boss-vs-crew asymmetric modeV2Event_SpeedrunRace— 2-4 player Arcade raceV2Event_DeathMatch— single-round sudden death stipulation
Privacy-by-Design, DPIA & Sub-Processor Architecture#
This section covers the proactive privacy-engineering process — privacy-by-design review, Data Protection Impact Assessments, and the sub-processor registry. It is the companion to arch§"Compliance & Data-Subject-Rights Architecture", which covers the reactive data-subject-rights request flow.
- Privacy-by-design + DPIA required on every feature touching identifiable / sensitive data.
- Sub-processor registry at
V2/legal/sub-processors.md+ public view atapps/v2/web/legal/sub-processors. - Per-region compliance variants (cross-ref §54.2 + §80 + §94): AB 2273 /
Bill 96 / Bill 25 / LGPD / Italy / Belgium / France surfacings via
RegionVariantdata asset.
Racing Component Architecture#
V2 ships a full racing component as a peer genre to fighting. Architecture extends existing systems:
Racing Module Split#
These modules extend the module set in arch§"Module Split".
| Module | Responsibility |
|---|---|
| V2Racing | Race-mode registry, race-state machine, racing HUD injection, race rules / scoring / officiating |
| V2Vehicles | Vehicle data assets (DA_Vehicle, DA_VehicleTune, DA_VehicleCustomization, DA_VehicleDamage), per-chassis archetype components, drive-train logic, engine + RPM model, tire model |
| V2RacePhysics | Racing-specific physics (arcade-sim spectrum), off-road suspension, anti-grav hover, bike lean, hover-magnet attraction |
| V2RaceTracks | Track / circuit / open-world racing-zone data, racing-line authoring, AI racing-line, sector splits, replay-deterministic pose recording |
| V2RaceModes | GameInstance registry of race-mode plugins (Circuit / Sprint / Drag / Drift / Time Trial / Eliminator / Pursuit / Combat / Power-Play / Canyon Duel / Rally / Bike / Pod Racer) |
| V2VehicleAudio | Engine notes (per-RPM bin), exhaust, turbo, tire screech, transmission whine, Doppler shifting, environmental ambience |
| V2VehicleVFX | Tire smoke, sparks, debris, motion blur, speed lines, anti-grav engine glow, jump dust, mud splash |
Racing Mode GameFeaturePlugins#
Vehicle Physics Pipeline#
- Determinism boundary for racing. Racing modes ship on client-server with input prediction, not on the rollback envelope from arch§"Rollback Netcode". Continuous-physics solvers (hovercraft, bike-lean, drift) under cross-platform float modes are not bit-identical-deterministic across vendors. The Chaos vehicle solver runs server-authoritative and replicates to all clients; client-side prediction smooths the local pose only, never resimulates physics. The "bit-identical" promise applied to combat (arch§"Combat Authority & Determinism") does not apply to vehicle physics; the corresponding promise here is "server-consistent outcomes across all clients within one frame of replication latency."
- Per-vehicle physics LOD is server-authoritative: the server runs the full physics solver for all vehicles regardless of client camera; clients receive full pose for vehicles inside camera frustum and interpolated pose for distant vehicles. Client physics LOD therefore never affects sync — it affects only local visual quality. There is no client-resimulated physics path for racing.
- Per-mode physics profile: Arcade-Sim continuous dial preset per ruleset; per-vehicle handling personality baked.
Racing AI & Director#
- Cop AI (cross-ref §103) state machine: Patrol → Alert → Pursue → Engage → Disengage → Lay-Low; per-heat-level behavior.
- AI Driver personalities (cross-ref §110): Aggressive / Defensive / Drafter / Reckless / Conservative / Slipstream-Master / Drift- Specialist; per-fighter driving personality reflecting character.
- Racing AI Director (cross-ref arch§"AI Director Service"): observes player race-skill level + tunes CPU race-time within tunable epsilon.
Racing Online#
Racing online extends arch§"Client-Server Netcode" and arch§"Online Services Backend".
- Per-mode matchmaking queues with separate Racing MMR.
- Per-mode ranked ladder (Racing + Cop separate where applicable).
- Cross-play across PC / PS5 / XSX / Switch2 with input-method labeling (wheel vs gamepad vs KB+M).
- Custom Room with full ruleset customization.
- Autolog rivalry (Hot Pursuit-inspired) auto-surfacing friend challenges.
- Per-mode max players: 12 / 4 / 8 / 8 / 12 / 6 / 2 (Circuit / Drag / Drift / Combat / Power-Play / Pursuit / Canyon Duel).
Vehicle Damage Model#
Racing Replay#
Racing replay extends the replay system in arch§"Training, Trials, Replay Pipeline".
- Deterministic race replay ≤ 2MB per 5-min race; replay determinism gate in CI.
- GRID Flashback (time-rewind) supported in non-ranked modes with per-race-budget.
- Photo Mode racing-aware with auto-suggest photo opportunities at signature moments (overtakes / crashes / Power-Play / finish-line).
- Racing ghost data export per Time Trial / Canyon Duel.
Crossover: Racing × Fighting#
- Shared roster + shared online backbone + shared cosmetic store + shared Battle Pass + shared currency ledger.
- Crossover modes (cross-ref §118):
- Fighter-as-driver in any race
- Vehicle-on-vehicle melee combat
- Get-Out-and-Fight transitions
- Crossover signature events (race-then-fight chained)
- Crossover ranked queue with separate MMR from pure fighting or pure racing.
- Per-fighter signature vehicle unlocked via fighter Mastery + Side Story.
Vehicle Designer Service & Pit Crew Minigame#
- Vehicle Designer asset-budget-gated; custom vehicles ranked-eligible only when in the designer-approved subset.
- Pit Crew Minigame integrated with sim-mode racing for pit-stop strategy.
- Per-driver telemetry dashboard in profile (cross-ref §47.3).
Service contract
- gRPC service:
libs/proto/v2/racing/vehicle-designer.proto. - Key methods:
VehicleDesigner.SaveCustom(account_id, payload) → vehicle_id,VehicleDesigner.GenerateShareCode(vehicle_id) → code,VehicleDesigner.ImportShareCode(account_id, code) → vehicle_id,VehicleDesigner.SubmitForApproval(vehicle_id) → review_id,VehicleDesigner.GetGallery(filter) → vehicles[]. - Asset-budget gate: per-vehicle slot has component-cost ceilings (engine tier 1-5 ≤ 100 budget pts; aero ≤ 80; tires ≤ 60; weight reduction ≤ 40). Designer rejects if sum > 240 pts.
- Share-code grammar: Base32-encoded 12-char code over (vehicle hash +
account watermark + creation-time nonce); decoded via
@oshun/cryptoHMAC validation. Codes never expire but can be revoked per-account via moderation. - Approval workflow: Themis Originality Shields verify designs against IP /
brand database per
V2/docs/decisions/originality-shields-launch-gate.md; manual reviewer approves designs that pass. Approved designs eligible for ranked custom-vehicle queues. - Event-bus publishes:
v2.designer.vehicle.saved,v2.designer.vehicle.approved,v2.designer.share.imported. - SLOs: save p99 ≤ 600 ms; approval workflow ≤ 7 calendar days; gallery fetch p99 ≤ 400 ms.
- Owner: V2 racing team + Themis (originality). Cost-tier: storage +
approval-reviewer; ceiling at
V2/docs/cost/vehicle-designer.md.
Convoy & Free-Roam Lobby#
- No ranked progression in cruise mode; cosmetic + XP only.
- Per-instance friend-priority sharding (cross-ref §8.4).
Heist Mode Architecture#
- Per-quarter signature heist (cross-ref §83 live service).
- Solo heist with AI crew at 75% reward.
Service contract
- gRPC service:
libs/proto/v2/heist/heist.proto. Heist instances are dedicated-server hosted (cross-ref arch§"Client-Server Netcode"); not inside the rollback envelope. - Key methods:
Heist.MatchmakeCrew(account_id, role_pref) → crew_id,Heist.StartHeist(crew_id, heist_id, difficulty) → instance_id,Heist.ReportStageOutcome(instance_id, stage, outcome) → ack,Heist.SubmitFinalResult(instance_id, result) → rewards[]. - Per-stage state machine:
Recon(stealth) → Approach(drive) → Infiltration(fight+hack) → Extraction(drive+pursue) → Resolution. Each stage has explicit fail-state + retry budget; ≥ 3 failures in a stage triggers branch to alternate-outcome. - 3 branch decisions at fixed stage transitions; outcome data-driven from
Content/Heist/<HeistId>/branches.dat. - Loot-share algorithm: equal split by default with per-crew Robin-Hood modifier (player who contributed most can voluntarily share more). Anti-abuse: rage-quit forfeits loot share; AFK detected via gameplay-tag inactivity.
- AI guard behavior: state machine
Patrol → Suspicious → Searching → Alerted → Combat → Lost-Sight → Patrol; behavior tree atContent/AI/HeistGuard/. Difficulty scales guard count + perception radius. - Stealth vs fight balance: stealth bypass grants 1.5× loot multiplier; full-combat clear grants 1.0× + bonus combat XP. Mixed outcomes scale linearly.
- Event-bus publishes:
v2.heist.started,v2.heist.stage.completed,v2.heist.completed,v2.heist.failed. - SLOs: crew matchmake p99 ≤ 25 s; dedicated server allocation p99 ≤ 10 s; heist completion ≥ 95% session-success (no server-side disconnects).
- Owner: V2 modes team. Cost-tier: dedicated-server budget; ceiling at
V2/docs/cost/heist.md.
Demolition Derby & Crossover Arena#
- Demolition Derby mode plugins as
V2Mode_DemolitionDerbywith per-arena-type variants. - Vehicle-Hijack input-RPS layer integrated with Combat Racing ruleset (cross-ref §104).
- Fight-On-Vehicle ruleset using fighting GAS system (cross-ref §2) on a moving-vehicle stage; per-vehicle Fight-On-Vehicle compatibility authored.
- Mad-Max truck/bike chase combat plugin
V2Mode_TruckChase. - Convoy Raid co-op plugin
V2Mode_ConvoyRaid(2-4 player attacker vs AI convoy).
VR / AR Architecture#
- VR-specific cert per platform with epilepsy / motion-sickness compliance.
- VR accessibility: seated mode + one-controller mode + voice-activated menu + 3D subtitle positioning.
Hardware Peripherals SDK Integration#
- Per-vendor SDK integration layer at
Source/V2Peripherals/: Logitech / Thrustmaster / Fanatec / Hori / MOZA / Cammus / Asetek SimSports / Simucube / Heusinkveld / Quadstick / PlayStation Access Controller / Xbox Adaptive Controller / Logitech Adaptive Gaming Kit. - Per-vendor force-feedback runtime: per-vehicle FFB profile authored + per-vehicle FFB tuning UI; Direct-Drive specific scaling to avoid overpowering force.
- Per-controller-class ranked pool: Wheel + Pedals vs Gamepad separation in tournament mode with per-pool assists baseline.
- First-launch calibration wizard for detected peripheral.
- Community FFB profile gallery sharing.
Roguelike, Battle Royale, Sports Vehicle, Specialty Combat Architectures#
- Roguelike Hub world persisted between runs; per-run procedural generation seed; per-boon synergy graph data.
- Battle Royale uses client-server net (cross-ref arch§"Client-Server Netcode") with 100-player session sharding; squad-voice via EOS Voice; ring-state is server-authoritative and replicated to all clients consistently (within one frame of replication latency). BR sits outside the rollback envelope described in arch§"Combat Authority & Determinism"; "deterministic" never applies to BR — clients see the same state because the server is the source of truth, not because clients resimulate. Cheat detection runs server-side on the authoritative state.
- Sports Vehicle Modes each ship as own
V2Mode_VehicleSoccer/V2Mode_VehicleStunt/V2Mode_VehicleCrash/V2Mode_TrackmaniaGameFeaturePlugins. - Specialty Combat Modes as
V2Mode_BoxingSim/V2Mode_BushidoBladeplugins.
Persistent World Economy & NPC Schedules#
- Economy ops dashboard (cross-ref arch§"Telemetry & Analytics") for inflation / deflation / cosmetic-price-distribution monitoring.
- NPC schedule + crime-rate state persisted per-account world-state save; cross-platform synced.
Director Commentary & Cinematography Pipeline#
- Per-cinematic commentary track authored as a Sequencer audio sub-track; toggleable at runtime (cross-ref §45.7 + §73.3).
- ADR pipeline integrated with VO production (cross-ref §77.3); per-quarter session scheduled at recording studios.
- Cinematography library assets at
V2/balance/cinema/consumed byV2Mode_CinematographyEditorplugin for authoring tooling. - Per-fighter origin comic content at
V2/balance/comics/<fighter>/with per-locale translation tables. - Story DLC seasons delivered via GameFeaturePlugin (cross-ref §52.2) with full ADR + comics + cinematics bundled per season.
Karaoke, Arcade Mini-Games, World Boss, AI Commentary, Vault#
- Karaoke + Rhythm Mode uses MetaSounds graph with per-track BPM tagging; per-song scoring server-validated to prevent cheating.
- Karaoke rhythm-combat bridge:
@v2/karaoke-rhythm-combat-bridgecomposes Euterpe genesis / accompany / protect, Calliope sound-design, and Iris voice for procedural backing tracks, adaptive accompaniment, DMCA-safe streamer-mode swaps, per-fighter theme variations, and guide-voice speed/pitch directives. The bridge emits cook-time manifests forV2Mode_Karaoke,V2Mode_RhythmCombat,V2DynamicMusic,V2Audio, and the V2-owned pitch/rhythm scoring rubric; it is off rollback and rejects live rhythm-combat frame RPCs. - Arcade Mini-Game plugins: each ships as its own GameFeaturePlugin —
V2Mode_Pinball,V2Mode_AirHockey,V2Mode_MiniGolf,V2Mode_Darts,V2Mode_Pool,V2Mode_Cooking(andV2Mode_PhotoTournamentfor the Photo-Mode jury-vote competition). The Subsystem Glossary enumerates the full plugin list; arcade-cabinet plugins compose withV2Mode_BattleHubfor in-hub cabinet rendering and withV2Mode_QuestLogfor daily achievements. - Maya mini-game suite bridge:
@v2/maya-minigame-suite-bridgereuses Maya games projectile physics, Maya scene readiness, Maya physics readiness, and Maya input mapping forV2Mode_Pinball,V2Mode_AirHockey,V2Mode_MiniGolf,V2Mode_Darts, andV2Mode_Pool. V2 plugins keep per-game rules, scoring, cabinet art, leaderboard schema, quest hooks, and tuning. Maya combat, abilities, items, and inventory systems are explicitly excluded for the basic suite. The bridge is off rollback and rejects live mini-game frame RPCs. - Tekken Bowl arcade cabinet bridge:
@v2/tekken-bowl-arcade-cabinet-bridgereuses Maya gamesProjectilePhysicsSystemfor the Tekken Bowl lane probe and Maya clientMayaClientModPluginManagerfor ad-hoc per-cabinet plugins. The bridge emits thev2.battle-hub.arcade-cabinets.maya-games-pluginscook manifest forV2Mode_BattleHub,V2Mode_TekkenBowl, andV2ArcadeCabinetAdHocPlugin, enforces 1 Fighter Coin play gates with ambassador / pro-player free-play, requires per-cabinet leaderboards, stays off rollback, and rejects live Battle Hub frame RPCs. - World boss community raid bridge:
@v2/world-boss-community-raid-bridgecomposes Themis shared HP governance and contribution-validation schema, Maat per-contribution aggregate dashboard signals, Hathor world-state spawn simulation, and Kuanyin raid defense for grief coordination. The bridge emits thev2.world-boss-community-raid-manifest, publishes only post-match server submission contracts, keeps shared HP display-only, and rejects live rollback frame RPCs. - Per-account vault estate bridge:
@v2/per-account-vault-estate-bridgecomposes Lakshmi estate planning,@oshun/identityaccount inheritance / delegation gates, and Themis transfer audit. The bridge emits thev2.per-account-vault-estate-transfer-manifestand reciprocalv2.per-account-vault-asset-transferschema, requires verified identity, beneficiary readiness, accepted delegation evidence, and immutable transfer audit records, stays off rollback, and rejects live gameplay frame RPCs. - Photo Mode tournament voting bridge:
@v2/photo-mode-tournament-voting-bridgecomposes Kuanyin precognition moderation pre-pass with Themis ranked-choice jury voting and approval voting. The bridge emits thev2.photo-mode-tournament-voting-manifestand reciprocalv2.photo-mode-tournament-voting-profile, certifies winners for community gallery surfaces only, stays off rollback, and rejects live gameplay frame RPCs. - World Boss Service runs as cloud backend (cross-ref §16). World Boss sits outside the rollback envelope: per-contribution damage is computed client-side from the local match's frame-deterministic combat, then submitted to the server after the contributing match ends rather than applied inside the rollback loop. The community-shared HP state is therefore gameplay-inert during any individual match — it never affects the in-match simulation. Clients receive shared-HP updates via server push for HUD display only; the HUD is gameplay-inert per the arch§"Sovereign V2 surfaces (never delegated)" rule. Per-contribution validation runs server-side after match submission; tampered submissions are rejected without affecting any live match.
- AI Commentary Service generates play-by-play text from match telemetry; per-locale text + TTS per-locale voice (cross-ref §43.7); EU AI Act-disclosed (cross-ref §80.4).
- Per-account Vault stored cloud-side with daily immutable cold-storage snapshots; vault transfer on account merge audited.
World Boss Service Contract#
- gRPC service:
libs/proto/v2/world-boss/world-boss.proto. - Key methods:
WorldBoss.GetActiveBoss(region) → boss_state,WorldBoss.SubmitContribution(account_id, match_id, damage) → ack,WorldBoss.GetLeaderboard(boss_id, region, page) → contributors[],WorldBoss.ClaimRewards(account_id, boss_id) → rewards[]. - Determinism boundary: match-time damage submission only; no rollback-loop
reads of shared HP. Damage validation runs the match's golden-replay hash
through
@nous/safetycheat classifier before crediting the account. - Event-bus publishes:
v2.world-boss.spawned,v2.world-boss.defeated,v2.world-boss.contribution.submitted. - SLOs: contribution submit p99 ≤ 2 s; leaderboard fetch p99 ≤ 400 ms; shared-HP update push p99 ≤ 5 s end-to-end.
- Owner: V2 modes team + Hathor (world-state). Cost-tier: ceiling at
V2/docs/cost/world-boss.md.
AI Commentary Service Contract#
- gRPC service:
libs/proto/v2/ai-commentary/commentary.proto. - Determinism rule: off-rollback only; outputs are audio / subtitle inert (cross-ref arch§"Sovereign V2 surfaces (never delegated)" — commentary outputs never feed simulation state).
- V2AICommentary bridge:
V2/ue/Plugins/V2AICommentary/uses@v2/iris-commentary-orchestrationto callcreateMatchCommentaryStreamon@iris/conversation-orchestration. The bridge rejectsfromRollbackFrame=true, records(matchId, cueId, cueTriggerFrame, branchId), and routes only audio/subtitle output back to V2Audio. - Calliope commentator personas:
@v2/calliope-commentator-personasvalidates the@calliope/persona-livelaunch roster atV2/ue/Content/V2/Audio/Commentary/commentator-personas.json. Each commentator has cleared@iris/voicevoice clone metadata. The roster stores brand metadata, talent signoff, deterministic fallback-bank metadata, and audio/subtitle-onlygameplayInertoutput.V2Audioconsumes the roster viaBuildDefaultCommentaryPersonas(). - Psyche commentator face animation:
@v2/psyche-commentary-face-animationconsumes@iris/voiceoutput metadata, then drives@psyche/avatar-lipsyncviseme frames and@psyche/avatar-expressionsARKit expression curves for commentator face animation.V2Audiovalidates the generated/Game/V2/Audio/Commentary/FaceAnimationexport as gameplay-inert and off-rollback. - Euterpe commentary mix ducking:
@v2/euterpe-commentary-duckingreads@euterpe/accompanydynamic music context, uses@euterpe/masterloudness and gain math, and exportsFV2CommentaryDuckingMixSpecautomation fromV2.CommentaryintoV2.DynamicMusic.V2Audioapplies the ducking as audio-mix-only, gameplay-inert, and off-rollback. - Key methods:
Commentary.StreamCommentary(match_stream) → audio_stream,Commentary.GenerateHighlightReel(match_id) → reel_url,Commentary.GenerateAnalysis(match_id) → analysis. - Backed by deps§67: Anthropic Claude Sonnet 4.6 generates the play-by-play
text, ElevenLabs Multilingual v2 synthesizes the TTS audio, and Isis
ai-videoperforms the highlight-reel auto-edit. - Esports cost-ceiling: per-match-per-minute LLM cost capped per
V2/docs/cost/ai-commentary.md; on-cap routes to@iris/conversation-providers-local. - EU AI Act: Limited risk; on-screen "AI commentary" badge mandatory.
V2/docs/ai/model-cards/ai-commentary.mdis hosted by@nous/safety, and@themis/accountabilityowns the conformity export through@v2/eu-ai-act-surface. - SLOs: real-time KO commentary lag p99 ≤ 800 ms from gameplay event to
audio. V2 reserves 420 ms for Iris LLM round trip, 240 ms for persona TTS, 100
ms for Psyche lipsync/expression render, and 40 ms safety margin; on miss, it
falls back to the pre-recorded bank keyed by
(cueKind,ruleset,commentatorId,seed). Highlight reel generation p99 ≤ 90 s for a 5-min match. - Owner: V2 audio team + Iris + Calliope + Psyche + Euterpe. Cost-tier:
ceiling at
V2/docs/cost/ai-commentary.md.
Persistent Economy Service Contract#
- gRPC service:
libs/proto/src/oshun/v2/persistent_economy/economy.proto. - Key methods:
Economy.GetShopInventory(district_id) → inventory,Economy.GetPriceCurve(item_id) → curve,Economy.RecordTransaction(account_id, item_id, qty, price) → ack,NPCSchedule.GetActiveSchedule(district_id, time_of_day) → schedule,CrimeRate.GetDistrictRate(district_id) → rate. - Tick rate: market simulation runs at 1 tick / hour (server-side); NPC schedules tick at 1 / 5min; crime-rate aggregates over 24h windows.
- Anti-bot enforcement:
@nous/safetymarket-bot classifier flags abnormal transaction patterns (rapid alt-account farming, pump-dump on player-driven prices); flagged accounts blocked from market. - Event-bus publishes:
v2.economy.price.shifted,v2.economy.transaction.recorded,v2.crime.lockdown.triggered. - SLOs: inventory fetch p99 ≤ 400 ms; transaction p99 ≤ 800 ms; bot-detection latency ≤ 24h to first flag.
- Owner: V2 world team + Hathor (simulation) + Maat (economy).
Cost-tier: ceiling at
V2/docs/cost/persistent-economy.md.
Real-World Brand & Celebrity Pipeline#
- Per-brand sponsorship slot managed via
V2/legal/sponsorships.mdwith a per-brand contract lifecycle (term / royalty / removal clause). - Per-celebrity guest character ships as
V2Mode_CelebrityGuest_<id>GameFeaturePlugin (license-conditional, removable on contract end). - Per-venue tie-in stage ships as
V2RaceTrack_<venue>plugin with per-venue licensing-conditional manifest. - Per-partnership ethics review workflow at
V2/docs/partnerships/with community-advisory board sign-off.
Launch Readiness#
See V2_TODOS.md § 138 "Launch Readiness". Architecture must satisfy:
- Internal dogfood ≥ 60 days across all modes and platforms.
- Closed beta with measurable target metrics (concurrent peak, matchmaking time, rollback frame distribution, crash rate, AC false-positive rate).
- Cert / TRC / XR / lotcheck on every shipping platform.
- Network stress test at 5× launch-estimated concurrency. Planning assumption (adopted 2026-06-12; revisit at beta): launch-estimated global concurrency = 100,000 CCU — sized against recent AAA fighting-game launches (SF6 and MK1 peaked at roughly 60-70k concurrent on Steam, with consoles adding a comparable share), rounded up for cross-platform day-one overlap. 5× therefore = 500,000 CCU for the stress-test gate.
- Per-platform rollback plan + per-service rollback plan.
- Day-one patch staged.
- Critical-journey verification across every advertised mode.
Sister-Monorepo Integration Surface#
V2 is its own codebase with its own quality bar, but the Oshun monorepo already
ships production-grade domains that cover most of V2's non-deterministic surface
area. Rather than re-implement these inside apps/v2/ and V2/tools/, V2
consumes named Oshun domains across three integration channels: (a) Bellona's
offline content pipeline at cook time, (b) the Oshun event bus + gRPC clients at
runtime for non-deterministic warm-path services, and (c) the Oshun shell apps
(apps/oshun/web, apps/oshun/mobile) for the out-of-game surface area. The
deterministic combat inner loop — V2Combat, V2Gameplay, V2Input,
V2Netcode rollback, save-format/replay-container, platform anti-cheat — stays
V2-local without exception.
Sovereign V2 surfaces (never delegated)#
The following are non-negotiably V2-local because they sit inside the frame-deterministic, rollback-synchronized, or cert-driven envelope: hitbox / hurtbox engine, frame-data table runtime, motion-input parser + buffer, rollback engine, client-server replication for asymmetric modes, save-format binary + replay container, Sequencer cinematic timelines, per-platform IMC files, anti-cheat client driver, and the per-fighter signature animation runtime. Anything else is in scope for the integration table below.
Per-surface mapping (V2 → Oshun owner)#
| V2 surface | Oshun owner | Integration channel |
|---|---|---|
| Auth + cross-progression | @oshun/identity + Shared auth |
gRPC client (runtime) |
| ML balance recommender | @v2/maat-balance-dashboard over @maat/intelligence + @maat/dashboard + @maat/reporting, @v2/sophia-release-candidate-ingestion over @sophia/ingestion for frame-data spreadsheet + patch-notes corpus citations, and Nous (model serving); no standalone V2 balance dashboard |
Event bus + Maat dashboards |
| AI commentary + highlight reel | Iris (LLM orchestration + voice), Calliope (commentator personas), Psyche (commentator face animation), Euterpe (music ducking) + Nous (model hosting) | gRPC client + Bellona/audio cook |
| AI Director + adaptive difficulty | Psyche (behavior prediction) + Shakti (combat-sport tendency) + Nous (model serving) | gRPC client (off-rollback) |
| Creator Suite (CAF/CAW/CAS/CAA/CAE) | Yemaya (orchestration) + Isis (gen) + Aglaea (@aglaea/style-coaching + @aglaea/color-analysis) + Themis (@v2/themis-originality-shields over @themis/music-shield, @themis/visual-shield, @themis/text-shield, @themis/video-shield, @themis/design-shield) |
Bellona cook + companion app |
| Moderation (gallery, chat, replays) | Kuanyin (@v2/kuanyin-first-line-moderation over @kuanyin/precognition + @kuanyin/foundation, @v2/kuanyin-mindful-friction over @kuanyin/mindful-friction, @v2/kuanyin-performer-protection over @kuanyin/performer-protection) + Themis (@v2/themis-dispute-resolution over @themis/dispute-resolution for DSA Statement of Reasons + appeals) |
Event bus + Iris voice hooks |
| Esports broadcast + bracket | Uzume (broadcast / show control / overlays) + Veritas (post-match reporting) + Iris (real-time translation) | Apps/oshun web + companion |
| Marketing site + roster microsite | apps/oshun/web shell + Calliope content + Sophia lore |
Apps/oshun web |
| Companion app + public API + knowledge pages | apps/oshun/mobile/v2/ + apps/oshun/web /v2/wiki, /v2/glossary, /v2/roadmap + @iris/agents (assistant) + @sophia/client (codex/frame-data RAG and citations) + @oshun/concordia-integration / @oshun/trust-safety for appeals and safety gates |
Apps/oshun web + mobile |
| Currency ledger + cosmetic store | Maat (BI + compliance) + Aje (optional cosmetic NFT) + Lakshmi (@v2/lakshmi-responsible-play-spend-insight player-side spend insight, opt-in) |
gRPC client + store confirmation |
| Telemetry + balance dashboards | @v2/maat-balance-dashboard composes @maat/intelligence + @maat/dashboard + @maat/reporting; @v2/sophia-release-candidate-ingestion refreshes Sophia cited frame-data context on every release-candidate cook and Nous serves model recommendations |
Event bus |
| Anti-cheat ML (smurf, win-trading, coordinated-throw, geographic-anomaly) | @v2/nous-anti-cheat-classifiers over @nous/training + @nous/safety, with Kuanyin precognition for salt-cascade context only |
Event bus + hosted Model Card |
| Cinematic Story / Side Stories / Krypt | Hathor (worldbuilding, dialogue trees, story graphs, lore-compiler) + Sophia (consistency) + Iris (LLM dialogue) | Bellona/lore-compiler cook |
| NPC AI (World Tour / Tekken Force / DW) | Hathor @hathor/llm-npc via V2 @v2/hathor-npc-adapter (personality, memory, world awareness, NPC-to-NPC, safety guardrails) |
gRPC client (off-rollback) |
| Mocap pipeline | Aja (capture / clean / retarget / quality) + Bellona/mocap + Bellona/unreal Live Link | Bellona cook |
| MetaHuman pipeline | Bellona @bellona/metahuman (already shipped) |
Bellona cook |
| Combat Trials / Mission curriculum | Shakti (combat-sports, martial-arts, form-analysis) + Metis (adaptive paths, AI tutoring) | gRPC client + companion |
| Profile cards / titles / achievements | @oshun/identity + Yemaya (asset orchestration) |
gRPC client (runtime) |
| Voice chat | Iris voice + @v2/iris-accessibility over @iris/accessibility for screen-reader bridge semantics + @v2/psyche-caption-streaming over Psyche @psyche/caption-streaming for real-time match captions, spectator mode captions, and translation/captions + Kuanyin (real-time toxicity shield) |
Iris voice runtime |
| Per-feature consent surfaces | @v2/aphrodite-consent-surfaces over @aphrodite/consent-engine for telemetry, voice processing, and behavioral profiling consent receipts, redaction, and privacy-preserving fallbacks |
gRPC client + apps/oshun |
| Crew / faction / clique systems | Kuanyin (@v2/kuanyin-community-harmony over @kuanyin/community-harmony) for temperature + raid defense, Themis (@v2/themis-community-governance over @themis/community) for rule votes, reputation standing, and constitutions + Aje (optional fan tokens) |
gRPC client + apps/oshun |
| Photo Mode + replay auto-edit | Isis (ai-video, video-enhancement, post-production-ai) + Calliope cinema |
Bellona cook + apps/oshun web |
| Real-world brand / celebrity / NIL | Themis (IP / NIL ledger) + Aje (optional on-chain rights manifest) + Kuanyin (@v2/kuanyin-performer-protection) + Aphrodite (@v2/aphrodite-licensed-likeness-safety over @aphrodite/performer-sovereignty + @aphrodite/performer-autonomy) for licensed-fighter likeness safety and revocation flow |
gRPC client + Bellona cook |
| Adult-content gore gating per region | @v2/aphrodite-age-gate over @aphrodite/age-verification for runtime gore tier, adult fatalities, and region-conditional cinematics; primitive-fitness audit applies the mature-rated-fighting-game profile instead of the adult-content default; shared @oshun/region-rules cooks CN / DE / AU / NZ / KR gore variants and content cuts from Aphrodite age / consent inputs, defaulting missing region data to the China most-restrictive profile |
gRPC client + Bellona cook |
| Live-service calendar / battle pass | @v2/maat-live-service-calendar over @maat/strategy for seasons, Crown Points, Pro Circuit calendar, anniversary events, charity events, and balance ramp windows + Maat finance + Calliope (seasonal artist tie-ins) + Euterpe (seasonal music drops) |
gRPC client + apps/oshun |
| Compliance (GDPR / CCPA / DSA / 2257) | Shared data-residency + Maat compliance + Themis arbitration + @v2/aphrodite-age-gate over @aphrodite/age-verification + @v2/aphrodite-consent-surfaces over @aphrodite/consent-engine + Kuanyin restorative |
gRPC client + audit log |
Generative + procedural pipeline binding#
Bulk content that V2's previous draft left hand-authored is delegable to the following Oshun pipelines. The pattern is uniform: Isis generates → Themis verifies originality → Kuanyin moderates → Bellona cooks → V2 consumes.
- Character textures / costume palette variants → Isis
ai-texturing+ Aglaea palette intelligence + Bellona/unreal cook. - Decals / logos / patterns for CAW gallery → Isis image-gen +
@v2/themis-originality-shields+ Kuanyin moderation. - Stage variants (weather, time-of-day, crowd dressing) → Isis
3d-scene-assembly+ Hathor simulation + Mayagenesis-terrain/genesis-urban+ Bellona/openusd. - Real-world venue capture → Isis
gaussian-splatting+ Bellona/openusd + Bellona/unreal Nanite stage cook. - Music adaptive stems / per-fighter themes / seasonal drops → Euterpe
genesis(music generation) + Euterpeaccompany+ Euterpeprotect(copyright clearance). - Crowd voice barks / ambient VO → Iris voice + Psyche voice synthesis + Calliope persona voice bank.
- AI commentary lipsync (the V2 Audio2Face gap) → Psyche
avatar-lipsync+ Psycheavatar-expressionsdriven by@iris/voiceoutput + Bellona/metahuman. - NPC schedules + open-world dressing → Hathor
simulation(economy, politics, ecology) + Hathor@hathor/llm-npc+ Mayainspirations. - Fighter banter / win quote permutations → Hathor
@hathor/llm-npcunder Themis IP gates + Kuanyin safety filter. - Auto-edit highlight reels + thumbnails → Isis
ai-video+ Calliopecinema+ Themis originality stamp from@v2/themis-originality-shields. - Frame-data balance permutations under recommender →
@v2/maat-balance-dashboard(@maat/intelligencetrends/anomalies,@maat/dashboardsurface manifest,@maat/reportingscorecards/charts) +@v2/sophia-release-candidate-ingestionrelease-candidate cook citations from the frame-data spreadsheet and patch-notes corpus + Nous model serving. - Adaptive training drills → Metis adaptive paths + Shakti technique database + Psyche behavior modeling.
- Animation cleanup / retarget → Aja
motion-processing,neural-retargeting,motion-quality,optimization-ik. - Form / pose validation for player-driven fitness modes → Shakti
form-analysis+ Aja pose estimation.
Integration channels#
-
Channel A — Build-time content pipeline (offline). Bellona orchestrates Isis-generated assets, Aja-cleaned mocap, Hathor-authored narrative, Euterpe-generated music, and Themis-cleared rights manifests into engine-native
.uasset/.umapartifacts via the existing@bellona/unrealbridge andBellonaUnrealEditor.uplugin. V2 cook consumes these. -
Channel B — Runtime services bus (warm path, off-rollback).
apps/v2/becomes a thin adapter layer over the existing Oshun@oshun/event-bus(Redis Streams) and gRPC clients generated fromlibs/proto/. V2 runtime publishes events (v2.match.ended,v2.cosmetic.purchased,v2.player.reported) and subscribes to ecosystem events (hathor.dialogue.ready,hathor.world.published,isis.asset.cooked,maat.balance.recommendation). Latency-sensitive matchmaking / presence deploy regionally; the rest reuses shared infra. V2 narrative source for Story, Side Story, Krypt, Chronicles, and DJ Story lives inapps/hathor/studio-web; V2 consumes the@hathor/lore-compileroutput as compiled artifact only. -
Channel C — Out-of-game surfaces. The V2 marketing tile, companion app, public API, frame-data wiki, and esports portal become new tiles under
apps/oshun/webandapps/oshun/mobile, consuming the@oshun/shell-coreumbrella plus per-surface clients (@oshun/auth-client,@oshun/developer-portal,@oshun/concordia-integration,@oshun/persistence,@oshun/trust-safety,@oshun/persona-registry). The historical monolithic@oshun/sdkpackage does not exist; consumers import the specific surfaces they need. The web tile now lives atapps/oshun/web/src/app/v2/and is linked from/explore; standalone Sanity / Contentful content stacks are not V2 dependencies for that route. The companion surface lives atapps/oshun/mobile/v2/and links from mobile Explore through the shared Expo shell. Cross-product entitlements (e.g., Lilith meditation-streak unlocks a V2 card border) become trivial because account state already lives in@oshun/auth-clientand related Oshun account surfaces. -
Aje Web3 cosmetic ownership and faction governance. Optional Web3 cosmetic ownership is exposed through
@v2/aje-web3-cosmetic-ownership, composing@aje/identityand@aje/nft; optional fan-token faction governance is exposed through@v2/aje-faction-governance, composing@aje/governance. Both paths require explicit opt-in and a per-platform cert-ban gate. The source of truth isV2/legal/platform-cert-bans.json; cooked-binary reachability is recorded inV2/ue/Build/PlatformCookAjeReachability.json, andcheck-platform-cert-bans.pyfails CI if any Aje surface is reachable wherebannedSurfaces[]prohibits it. -
Racing ecosystem bridge. The V2 racing component (§96-119) consumes Galatea kinematics / whole-body control, Saraswati EV powertrain primitives, and Maya Genesis terrain / urban generation through
@v2/racing-ecosystem-bridge. The bridge emits cook-time manifests forV2Vehicles,V2RacePhysics, andV2RaceTracks; it is off rollback and rejects live race-frame RPCs. -
Lakshmi responsible-play spend insight. Player spend insight is exposed through
@v2/lakshmi-responsible-play-spend-insight, composing@lakshmi/behavioral,@lakshmi/budgeting, and@lakshmi/transactionsfor opt-in nudges, parental controls, self-imposed caps, weekly summary reflection, and category budget velocity. It is off rollback and can only affect store confirmation, warnings, or guardian approval. -
Kuanyin first-line moderation. Text, report, replay transcript, player name, and UGC caption checks are exposed through
@v2/kuanyin-first-line-moderation, composing@kuanyin/precognitionand@kuanyin/foundationas the first-line taxonomy and decision source. Two Hat and Community Sift are retired from V2 first-line text moderation; Hive AI and AWS Rekognition are retained only as media fallback providers for image or video coverage gaps. The service is off rollback and cannot influence deterministic inputs, simulation, or competitive frame outcomes. -
Kuanyin mindful friction. Report submissions and flagged-message send attempts are exposed through
@v2/kuanyin-mindful-friction, composing@kuanyin/mindful-frictionpause-and-breathe overlays, Samma Vaca reflection gates, compassion nudges, timing optimization, skip policy, frequency management, and rewrite suggestions. Reports use thereport_submittedtrigger; flagged messages useflagged_content. The service is off rollback and can delay only report or message release timing, never deterministic inputs, simulation, or competitive frame outcomes. -
Kuanyin community harmony. Crew, faction, and Battle Hub communities are exposed through
@v2/kuanyin-community-harmony, composing@kuanyin/community-harmonytemperature monitoring, tension detection, faction formation, intervention triggers, raid detection, defense mode, new-user throttles, posting restrictions, trusted-only mode, raid documentation, recovery, reassurance messaging, and platform reporting. The service is off rollback and can affect only community trust-and-safety controls, never deterministic inputs, simulation, or competitive frame outcomes. -
Themis community governance. Crew, clique, stable, and faction governance is exposed through
@v2/themis-community-governance, composing@themis/communitysports-club rule committees, rule proposal voting, member reputation standing, and association-style constitution ratification for crew rules. The service is off rollback and can publish or hold social governance state, never deterministic inputs, simulation, or competitive frame outcomes. -
Kuanyin performer protection. Licensed-fighter chat, Battle Hub chat, replay comments, creator-suite uploads, and commentary mentions are exposed through
@v2/kuanyin-performer-protection, composing@kuanyin/performer-protectionreal-time shield, harmful-message interception, performer blindness, threat assessment, protection adjustment, emergency lockdown, boundary enforcement, shield configuration, and dashboard custom-rule builders. Every request cross-references the Themis NIL ledger stamp (@themis/likeness,rightsManifestSha256,consentChainRefs, andthemis.license.revoked). The service is off rollback and can affect only likeness safety, publishing, cook, or moderation routing controls. -
Aphrodite licensed-fighter likeness safety. Likeness surfaces, creator-suite uploads, replay exports, voice-line banks, commentary mentions, esports broadcast use, and Bellona cook run through
@v2/aphrodite-licensed-likeness-safety. The bridge composes@aphrodite/performer-sovereigntyfor approved-use gating and@aphrodite/performer-autonomyfor revocation flow, cross-references@themis/likeness, and treatsthemis.license.revokedas a hard cook block.
Capabilities V2 forces Oshun to build#
Integration is bidirectional. V2's requirements expose real gaps Oshun must
close, each tracked as a reciprocal task in its owning DOMAINS/<name>/ spec.
BellonaUnrealRuntime— runtime-shipped UE plugin (currentBellonaUnrealEditoris editor-only). Owner: Bellona.- Low-latency in-match commentary contract for Iris. Determinism rule:
commentary outputs are audio / subtitle only and never feed simulation state,
so the contract can be off-rollback because its outputs are gameplay-inert.
Implemented by
createMatchCommentaryStreamin@iris/conversation-orchestrationand consumed by@v2/iris-commentary-orchestration/V2AICommentary. Owner: Iris. - AI Director behavior-hint integration with Psyche. Determinism rule: behavior hints cannot use a live mid-match channel — both peers must run identical CPU logic inside the rollback envelope. Two valid modes only: (a) offline / training consumes live Psyche tendency hints freely; (b) online rollback matches bake a tendency-vector + seed into the deterministic match-start input stream, then run rollback-deterministic AI for the match. Live mid-match Psyche updates queue and apply at the next match-start. Owner: Psyche.
- Shakti per-player combat-style classification for AI Director matchup tuning.
@shakti/sota-criticalemitsboxer,kickboxer,striker,grappler, orsubmission-specialistclassifications; V2 consumes them through@v2/shakti-style-classificationandV2AdaptiveAIas off-rollback match-end or match-start snapshot hints. Owner: Shakti. - Aja → Bellona/mocap → Bellona/unreal export: 60 Hz resampling and
frame-snap alignment for source mocap.
@bellona/mocaprejects sub-frame notify-segment boundaries,@bellona/unrealreceives an editor-only Live Link handoff, and runtime Live Link plugins remain disabled. Notify-segment authoring (hit-active, armor, cancel-window) stays in UE animation montage authoring. Owner: Aja + Bellona. - Themis NIL / likeness ledger schema (per-fighter / per-region /
per-license-window) in a new
@themis/likenesslibrary.@themis/identityis governance-identity scope (DID, eligibility, Sybil resistance) and is the wrong home. Reciprocal tracker:docs/domains/themis/deep-dive/specifications.md§ 11.8. Owner: Themis. - Aphrodite licensed-fighter likeness safety and revocation flow is implemented
by
@aphrodite/performer-sovereigntyand@aphrodite/performer-autonomy, with@v2/aphrodite-licensed-likeness-safetyenforcing Bellona cook blocks until the Themis@themis/likenesspackage lands. Owner: Aphrodite. - Maat live-service calendar shape for fighting-game live-ops (Crown Points,
Pro Circuit calendar, balance ramp windows) is implemented by
@maat/strategyand consumed through@v2/maat-live-service-calendar. Owner: Maat. - Kuanyin rage-quit / competitive-salt cascade class, distinct from generic toxicity. Owner: Kuanyin.
- Shakti combat-sport ↔ fighting-game-ruleset bridge mapping real-sport
biomechanics onto MK / SF / Tekken / SC / DJ ruleset frame-data is
implemented by
@shakti/fighting-ruleset-bridgeand consumed through@v2/shakti-ruleset-bridge. The bridge emits off-rollbackV2BalanceImporterCSV rows plus Sophia reference-card corpus entries, with explicitgame-onlycards for authored moves without real-sport antecedents. Owner: Shakti. - Substrate composition for Concordia-style flows until
libs/concordia/*ships — anti-cheat appeals + tournament-result disputes + crew conflicts compose@nous/cooperative-bargaining+@nous/preference-inference+@nous/agreement-search+@nous/concordia-sealed-memoryin@v2/concordia-substrate; the same surface wires@iris/concordia-assistantfor consent-gated appellant / arbiter dialogue scaffolding with party-isolated prompt contexts and@oshun/concordia-integrationfor V2 → substrate event routing, nav descriptors, and redacted telemetry registration. The high-impact moderation path also wires@kuanyin/concordia-restorativefor anti-cheat appeal restorative preflight with Kuanyin safety gates. External launch exposure is gated by@oshun/configthroughENABLE_V2_CONCORDIA_SUBSTRATE, default disabled until launch readiness. Owner: Nous + Iris + Oshun + Kuanyin + V2 service integration. - Aje fan-token gating for crew / faction membership is composed by
@v2/aje-faction-governanceover@aje/governance(opt-in and per-platform cert-ban gate — Apple / PS5 / XSX / Switch2 may prohibit on-chain in-game items entirely; "opt-in" is insufficient on those platforms). Owner: Aje. - Themis Originality Shields launch —
@themis/music-shield,@themis/visual-shield,@themis/text-shield,@themis/video-shield,@themis/design-shieldfeed@v2/themis-originality-shields. V2 UGC accept-gates block unless the required shield set passes. Owner: Themis. - EU AI Act conformity surface is implemented for the Adaptive AI Director:
@psyche/action-safetyemits classifier transparency and opt-out,@v2/eu-ai-act-surfacecomposes the V2 contract,@nous/safetyhosts the Model Card, and@themis/accountabilityrecords the AI-system-of-record. Owner: Psyche + Nous + Themis. - Regional content-rule engine for per-region gore variants: shared
@oshun/region-rulesowns CN / DE / AU / NZ / KR SKU cook profiles and consumes Aphrodite age / consent inputs. Owner: Oshun platform + Aphrodite.
Privacy guard on cross-product entitlement#
Aphrodite is adult content; visible cross-product unlocks would create an outing
risk, so Aphrodite community-status badges do not unlock V2 cosmetic /
card-border / title grants by default. Cross-product entitlement claims from
Aphrodite are opt-in per individual grant, with explicit out-of-context
warning at grant time, and never surface implicitly via title / badge / lobby
visibility. Cross-product entitlement from Lilith, Shakti, and Calliope may
default-on under the @oshun/identity entitlement-claim API. The implemented
@v2/cross-product-entitlement surface exposes
aphroditeImplicitLobbyTitleBadgeBlocked: true so lobby, title, and badge
surfaces cannot implicitly reveal Aphrodite activity.
Event-name convention#
A canonical naming convention prevents the inconsistent emission patterns that
surfaced in earlier drafts (v2.match.*, v2.cosmetic.purchased,
v2.cosmetic.requested, v2.dialogue.requested). All V2 events on
@oshun/event-bus follow this convention:
- Past-tense for emitted facts:
v2.match.ended,v2.cosmetic.purchased,v2.player.reported,v2.mocap.captured,v2.replay.exported,v2.balance.dataset.published. <noun>.requestedsuffix for command-style intent:v2.cosmetic.cook.requested,v2.stage.variant.requested,v2.dialogue.requested,v2.replay.export.requested. These signal a job; the worker emits a paired past-tense event on completion (v2.cosmetic.cook.completedetc.).v2.<subject>.<verb-tense>: subject is the entity touched (match,cosmetic,player,mocap,dialogue,replay,stage,balance); verb-tense is unambiguous past or.requested.- Subscribed events from other domains keep their owner-prefixed names:
hathor.dialogue.ready,isis.asset.cooked,maat.balance.recommendation,kuanyin.action.taken,themis.license.revoked,bellona.artifact.cooked,hathor.world.published.
Resolved decision ledger#
The third-pass adversarial review identified several items that needed explicit
publisher / architecture decisions before agents could implement safely. They
are now closed by ADRs and mirrored as checked decision tasks in V2_TODOS.md
§1.6.19:
| Decision | Accepted default | ADR |
|---|---|---|
| Identity reconciliation | @oshun/identity is canonical; EOS is a linked platform/provider adapter. |
V2/docs/decisions/identity-reconciliation.md |
| Per-service SLOs | Three tiers: A critical regional, B product services, C queued/batch AI. | V2/docs/decisions/slo-tier-per-service.md |
| AI inference cost | Text-first commentary with hard match/minute caps and local/preauthored failover. | V2/docs/decisions/ai-inference-cost-model.md |
| Failure modes | Preserve match integrity first; disable nonessential online/UGC/AI surfaces safely. | V2/docs/decisions/failure-mode-matrix.md |
| Sovereign core | Deterministic gameplay, replay input stream, save schema, and anti-cheat stay V2-local. | V2/docs/decisions/sovereign-core-boundary.md |
| Neith integration | V2 owns P1 rollback and matchmaking adapters; Neith can be evaluated after §7. | V2/docs/decisions/neith-integration-scope.md |
| Entitlement claims | Signed @oshun/identity claims via @v2/cross-product-entitlement; sensitive source products require per-grant opt-in. |
V2/docs/decisions/identity-entitlement-claim-api.md |
| Originality Shields | Public UGC publishing blocks until shields are available; private/local creation can ship. | V2/docs/decisions/originality-shields-launch-gate.md |
| Regional content rules | Shared @oshun/region-rules cooks CN / DE / AU / NZ / KR gore variants and content cuts; Aphrodite supplies age / consent signals; missing regions use the China most-restrictive profile. |
V2/docs/decisions/regional-content-rules-owner.md |
| Platform cert bans | V2/legal/platform-cert-bans.json is the source of truth; deny risky features by default. |
V2/docs/decisions/platform-cert-ban-truth-table.md |
| Model cards | Cards live in V2/docs/ai/model-cards/; Nous owns runtime metadata, Themis owns audit export. |
V2/docs/decisions/model-card-hosting.md |
@nous/platform |
Model registry, deployment manifests, routing metadata, cost caps, and eval links. | V2/docs/decisions/nous-platform-scope.md |
| Frame-data schema | V2 balance owns schema; @v2/sophia-release-candidate-ingestion sends the spreadsheet and patch-notes corpus through @sophia/ingestion on release-candidate cook. |
V2/docs/decisions/frame-data-spreadsheet-schema.md |
Missing V2 surfaces from the per-surface mapping#
The mapping table at the top of this section listed the major V2 surfaces, but
several large V2 features added in later sections of V2_features.md and
V2_TODOS.md were not mapped to ecosystem owners in the first pass. Filling the
gap:
| V2 surface (later sections) | Plausible owner(s) |
|---|---|
| Racing component (§96-119) | @v2/racing-ecosystem-bridge over Galatea (kinematics + whole-body control) + Saraswati (EV powertrain) + Maya (open-world traversal + tracks) + Bellona/unreal |
| Karaoke + rhythm-combat fusion (§132) | @v2/karaoke-rhythm-combat-bridge over Euterpe genesis + accompany + protect + Calliope sound-design + @iris/voice |
| Mini-game suite — pinball, air hockey, mini-golf, darts, pool (§133) | @v2/maya-minigame-suite-bridge over Maya games projectile physics + Maya physics + Maya scene + Maya client input mapping; V2 plugins own game rules |
| Cooking simulator mini-game (§133) | @v2/hestia-cooking-minigame-bridge over Hestia recipe intelligence, guided cooking, cooking education, ingredient database, and pantry sourcing |
| World boss + community raid (§134) | @v2/world-boss-community-raid-bridge over Themis community (governance for community-shared HP rules + validation schema) + Maat intelligence (per-contribution aggregate) + Hathor simulation (world-state) + Kuanyin community-harmony (raid defense) |
| Per-account vault + estate planning (§137 / per-account vault) | @v2/per-account-vault-estate-bridge over Lakshmi estate planning (@lakshmi/estate) + @oshun/identity account inheritance / delegation gates + Themis transparency transfer audit |
| Photo Mode tournament + jury voting (§133) | @v2/photo-mode-tournament-voting-bridge over Themis voting (ranked-choice jury aggregation + approval voting) + Kuanyin precognition moderation pre-pass |
| Tekken Bowl extension + arcade cabinets in Battle Hub (§133) | @v2/tekken-bowl-arcade-cabinet-bridge over Maya games ProjectilePhysicsSystem for the Tekken Bowl lane probe and Maya client ad-hoc per-cabinet plugin manifests for Battle Hub cabinet shells, coin gates, and leaderboards |
| AI-generated commentary + match analysis (§135) | Already mapped (Iris + Calliope + Psyche) |
| Real-world brand / celebrity guest / venue tie-ins (§136) | Already mapped (Themis NIL + Aje optional + Kuanyin performer-protection) |
Each row above needs a corresponding subsection in V2_TODOS.md §1.6 before the
related content cook starts. Reciprocal tasks land in the named domain's
DOMAINS/<name>/specifications.md.
The racing row is closed by @v2/racing-ecosystem-bridge: Galatea owns the
vehicle-as-articulated-body driver/ragdoll probe, Saraswati owns hybrid /
electric powertrain modeling, Maya owns deterministic terrain/urban traversal
readiness, and Bellona/Unreal remains the cooked artifact path.
The karaoke row is closed by @v2/karaoke-rhythm-combat-bridge: Euterpe genesis
owns procedural backing tracks and the pitch/rhythm scoring source material,
Euterpe accompany owns adaptive accompaniment analysis, Euterpe protect owns
streamer-safe swap/originality checks, Calliope sound-design owns per-fighter
theme variations, and Iris voice owns guide-voice speed/pitch directives. The
bridge is cook-time only, off rollback, and rejects live rhythm-combat frame
RPCs. The CI contract uses this exact guard phrase: rejects live rhythm-combat
frame RPCs.
The mini-game suite row is closed by @v2/maya-minigame-suite-bridge: Maya
games projectile physics, Maya physics readiness, Maya scene readiness, and Maya
input manifests are reused for pinball, air hockey, mini-golf, darts, and pool;
V2 plugins retain per-game-specific authoring and runtime rules. The bridge is
cook-time only, off rollback, and rejects live mini-game frame RPCs.
The Tekken Bowl extension and Battle Hub arcade cabinet row is closed by
@v2/tekken-bowl-arcade-cabinet-bridge: Maya games projectile primitives drive
the Tekken Bowl 10-pin lane probe, Maya client ad-hoc plugins bind each cabinet
to v2.battle-hub.arcade-cabinet, and V2 owns the cabinet shell, Fighter Coin
gating, free-play exemptions, leaderboards, strike VFX, per-fighter bowling
animations, themed alleys, and bowling-rank ladder. The bridge is cook-time
only, off rollback, and rejects live Battle Hub frame RPCs.
The cooking simulator row is closed by @v2/hestia-cooking-minigame-bridge:
Hestia recipe intelligence (@hestia/ai-ml) selects candidate recipes,
@hestia/cooking provides guided step parsing, @hestia/education provides
walkthrough and virtual-kitchen simulation metadata, and @hestia/ingredients
plus @hestia/pantry validate ingredient sourcing. The bridge emits the
hestia.recipe-as-mini-game-script cook manifest for V2Mode_Cooking, stays
off rollback, and rejects live cooking frame RPCs.
Cross-References#
- Backlog:
V2_TODOS.md(see § "Oshun Integration Skeleton") - Product scope:
V2_features.md - Dependencies:
V2_DEPENDENCIES.md(see § "Oshun Domain Dependencies") - Ecosystem index:
/DOMAINS.md,/DOMAINS/README.md - Bellona Unreal bridge:
/docs/domains/bellona/deep-dive/features.md - Hathor narrative & NPC AI:
/docs/domains/hathor/deep-dive/specifications.md - Iris in-match commentary contract:
/docs/domains/iris/deep-dive/specifications.md - Shakti combat-sport ↔ ruleset bridge:
/docs/domains/shakti/deep-dive/specifications.md - Themis NIL / likeness ledger:
/docs/domains/themis/deep-dive/specifications.md - Kuanyin rage-quit / salt class:
/docs/domains/kuanyin/deep-dive/specifications.md - Sister monorepo:
/CLAUDE.md,V1/features.md