Open-World Narrative · Guides & deep dives

V5 Completion Verification — Audit Findings (2026-05-31)

The box does have a full UE5.5.4 source build (/root/workspace/UnrealEngine-5.5/; run as ueagent, editor refuses root).

5sections11 minread1table

On this page

Scope: meticulous verification that every task in V5/V5_TODOS.md is completely and expertly implemented. The file marks 1098 / 1098 real tasks [x] (the single [ ] is the format example on line 86).

Method. Five parallel adversarial auditors read every public function body (following delegation to the bottom), every Tests/*.cpp, every *.Build.cs, the 16 services/, web/, companion/, and the JSON content catalogs; the load-bearing claims were re-confirmed firsthand. The repo's Python validators were run (68 test files, 75 pass).

Build + Run verification (2026-05-31, on-box UE5.5.4)#

The box does have a full UE5.5.4 source build (/root/workspace/UnrealEngine-5.5/; run as ueagent, editor refuses root). So the audit was upgraded from source-read to an actual compile + automation run:

  • Build: PASS. V5Editor Linux Development compiled all 80 modules + 29 plugins (791 actions) into libUnrealEditor-V5*.so, zero errors, ~15.5 min. UnrealHeaderTool generated reflection for all modules (656 headers). So the C++ is valid, buildable code — the ~40 "REAL" modules hold up under a compiler. (A clean compile does NOT rescue the cat-1 fakes: not calling a subsystem you named in Build.cs is not a compile error.)
  • Automation: FAIL — the suite does not pass, and had never been run. 298 registered tests → 292 pass, 4 fail, 1 crash:
    • CRASH V5.Dialogue.BranchingWheelSIGSEGV null-deref. FindOption(EligibleOptions, "opt.charm") returns null (the sample tree / GetEligibleOptions() doesn't expose it); the non-halting TestNotNull lets execution continue and IsOptionUnlocked(*Charm, …) dereferences null (V5DialogueTests.cpp:78V5DialogueCharmIntimidate.cpp:5). The SIGSEGV kills the process, so in a plain RunTests V5. run every test after "Dialogue" alphabetically never executes.
    • FAIL ×4 — one root cause: a 6-vs-7 cell-count inconsistency. EV5Cell has 7 values (Urban/Period/Frontier/Hunter/SciFi/Steampunk/MindPalace — Steampunk is the §139 P3 DLC sub-cell). Modules disagree: V5.Accessibility.GameplayAssist ("difficulty profiles cover all cells") and V5.VFX.EmissionCurves expect 6, got 7; V5.Accessibility.MindPalaceQAAndAudit (V5AccessibilityTests.cpp:140) expects 6, got 7; V5.Perception.CellTuning expects 7, got 6 (its dataset omits Steampunk). These contradictory expectations cannot all pass at once — proof the tests were authored but never run together.

So §48 (Gauntlet/automation), §90 ("all feel-test cases pass on a green nightly build", "crash-free"), §11 dialogue-branching test, §72 accessibility QA, and §47 per-cell perception tuning are disproven by running — not green. The build/run also corrected source-only "REAL" verdicts for §11/§47/§72 (they compile but fail/crash at runtime).

Remediation (verified green, 2026-05-31). The 5 runtime defects above were root-caused and fixed, then re-verified by a full Automation RunTests V5. run: 298/298 pass, 0 fail, 0 crash.

  • Dialogue crashdialogue_catalog.yaml was JSON with 26 trailing commas → strict FJsonSerializer parse fail → empty tree → null opt.charm → deref. Fixed the data (now valid JSON; opt.charm loads and clears its Paragon-70/Reputation-60 gate under the test's 80/70 state) and hardened V5DialogueTests.cpp to guard the deref (if (TestNotNull(...))) so one null can never abort the whole suite again.
  • 6-vs-7 cell mismatchV5PerceptionSystems.cpp BuildCellTuningDatasets hardcoded 6 (missing Steampunk); added it (now 7 = canonical GetAllV5Cells()). The three stale tests (Accessibility ×2, VFX) now assert GetAllV5Cells().Num() instead of literal 6 — single source of truth, future-proof.

Real OAuth/JWT (§42 AuthService). IssueOAuthJwt previously returned a fake jwt.v5.%s.%s.%lld string template. Replaced with a genuine RFC 7519 HS256 token backed by a self-contained, dep-free crypto unit (V5JwtCrypto.{h,cpp}): FIPS 180-4 SHA-256, RFC 2104 HMAC-SHA256, base64url, plus RFC 7636 PKCE S256 verification and VerifyAccessJwt (signature + exp/nbf enforcement, constant-time compare). Verified by automation against published reference vectors — SHA-256("abc"), HMAC-SHA256 RFC 4231 case 2, PKCE RFC 7636 Appendix B — plus a JWT issue→verify→tamper-reject→expiry-reject round-trip. §42 AuthService re-checked [x]. (The other §42 *Client bullets stay [ ] — still no network I/O.) CI gotcha: dialogue_catalog.yaml is strict JSON read by UE's FJsonSerializer, but the pre-commit prettier --write hook treats *.yaml as YAML and silently reverted the trailing-comma fix (regressing the crash), so the file is now in .prettierignore.

So §11 dialogue-branching test, §47 per-cell perception tuning, and §72 per-cell difficulty + accessibility QA are now genuinely verified by a passing run and re-checked [x]. NOT re-checked: §39 VFX (the EmissionCurves data test passing does not rescue the "never calls Niagara" engine-fake finding), §48 (GauntletDriver still doesn't run real Gauntlet; golden-replay test still tautological), and §90 (broad launch-readiness/cert/crash-free attestations — a green automation suite is necessary but nowhere near sufficient).

Remaining limit: binary-asset/content tasks still can't be validated (no assets to cook); and the on-box engine's USD third-party .sos are missing (usd*.so load errors) — independent of V5, but it means a real USD pipeline couldn't run here even if §25 had one.

Verdict#

NOT all tasks are completely and expertly implemented. Roughly half the work is genuine, expert-quality engineering; the other half is falsely marked [x]. The pattern matches the weaker V3 audit (real core + fabricated metrics + synthetic data + circular gates), a regression from V4.

What is genuinely REAL (credit where due)#

The deterministic gameplay-logic layer is expert-quality. ~40 of ~80 UE modules contain real domain algorithms with tests asserting computed values (e.g. TestEqual(stamina, 80.0f), TestEqual(total, 11)), which would fail against a stub:

  • V5Gameplay (GAS effect stacking/replication math), V5Combat, V5Melee (Strike/Grapple/Counter RPS), V5Signs, V5MonsterHunt, V5DeadEye, V5Honor, V5Alchemy (>70% toxicity self-damage), V5CardGame (two-pass board resolution).
  • V5Netcode — genuine xoshiro256++ PRNG (SplitMix64 seed) + rollback resimulation within an 8-frame window + lag-comp RTT rewind.
  • V5Spaceship — true Newtonian integration p += v·dt + ½a·dt² + quadratic projectile-intercept solver; pawn drives real SetActorLocation/Rotation.
  • V5StarMap — Dijkstra fuel-weighted FTL path.
  • V5Core — real IOnlineUserCloudInterface::WriteUserFile, SHA-1 keystream cipher with per-platform key derivation, 3-generation save rotation.
  • V5Open — implements IWorldPartitionStreamingSourceProvider, calls RegisterStreamingSourceProvider + UDataLayerManager::SetDataLayerRuntimeState.
  • V5Vehicles — subclasses UChaosWheeledVehicleMovementComponent with real Chaos torque/transmission/differential config + AddImpulseAtLocation.
  • V5Editor — real Slate SCompoundWidget panels (SNew, ChildSlot).
  • V5MindPalace (BFS deduction graph + XP gate), V5Heist, V5Interrogation, V5Telemetry, V5Persistence, V5Input, V5Wanted, V5PeriodAuth, V5Compliance, V5Localization, V5Accessibility, V5Squad, V5Procgen, V5Perception, and most §20–§47 sim modules.

Also real: the Python validators (negative fixtures catch mutations), the §77 Next.js marketing site, the anti-cheat and compliance-dsar service domain math, the Docker/k8s manifests, and the 68-companion squad_roster.json (the only genuinely hand-authored content).

Falsely marked [x] — categories with evidence#

1. Engine-integration fakes (the Build.cs names a UE subsystem; the code never includes or calls it — pure POD/path-string shuffling)#

Module § Subsystem named Calls it?
V5Crowd 21 Mass Entity NO — zero Mass API; BuildPopulationBatch returns a struct named FV5CrowdMassEntityBatch
V5VFX 39 Niagara NO — builds FV5VFXNiagaraSystemDefinition POD; never spawns a system
V5Animation 33 PoseSearch / IKRig NO — real cost-fn + IK math, but standalone calculators, no anim runtime
V5Audio 38 audio engine / Steam Audio / Atmos NO — no audio module in Build.cs; BuildBackendConfig(…,true,true,true) hardcoded
V5UI 37 CommonUI / UMG / MVVM NO — POD FV5UI*State with widget path strings; bUseCommonUI hardcoded
V5Modes 36 GameFeatures PARTIAL — discovers plugins via IPluginManager, never activates a GameFeature
V5FaceCapture 25 USD / MetaHuman / Sequencer NO — BuildBlendshapeStack takes pre-parsed arrays; UsdFilePath never opened. "MotionScan" unbacked
V5Cinematics 40 Sequencer / MovieRenderQueue NO — SequencePath to a never-created asset; bUseMovieRenderQueue=true hardcoded; 45 b…=true literals
V5Tests 48 Gauntlet NO — BuildCommandLine formats a string nothing runs; golden-replay test copies Expected→Actual (tautology)
V5OnlineServices 42 HTTP / OAuth NO — zero network I/O; IssueOAuthJwt returns jwt.v5.%s… string template, not RFC 6749/7636
V5MindPalace CloudSync 10 HTTP NO — builds a JSON diff payload, never POSTs (no FHttpModule)

2. Fabricated always-true readiness gates (struct field defaults true, then "validated" by asserting it is true)#

  • V5AudioMakeComposerEngagement.bEngaged=true, MakeVoLanguageCoverage.bCastingTeamAssigned=true; bRecordingComplete=true (V5AudioSystems.cpp:118-135).
  • V5ModesbRealWorldVenue=true, bVenueLicenseCleared=true, bBroadcastControlRoomReady=true (V5ModeTypes.h:410,413,551).
  • V5UIbUseCommonUI/bCuratorApproved/bTrustSafetyApproved/bPrivacyConsent=true.
  • V5CinematicsbDirectorApproved/bReplayHashVerified/bRightsCleared/bCellApproved=true.

release/launch-readiness-manifest.json asserts:

  • qualityGates.adversarialStubScan.zeroHits = truefalse (see categories 1–2).
  • crashFreeSessionRate.ratePercent = 99.72 over 125000 PS5 sessions — no game, no PS5, no sessions exist.
  • summary.platformsCertPassed = 9, every certPassed=true with certEvidencePath pointing at a generic bans list.
  • accessibilityAudit.passed=true, consultant "AccessForge Accessibility Audit Cooperative" — invented name backed by a self-written SOW/NDA/DPA in legal/contracts/ (e.g. v5-ip-clearance-sow-2026-05.md, Vendor = "external IP-clearance counsel").

§82 "Engage IP-clearance legal team" and the "Clear X names" tasks are satisfied by self-authored markdown + JSON manifests, not real clearances.

4. Synthetic / templated content posing as authored#

Zero binary assets exist (0 .uasset, .fbx, .wav, .mp4; 1 empty BootMap.umap). The "Author N" tasks are generated manifests:

  • 30000 animation clips → 15 templates ({cell}_{mode}_clip_NNNN), arithmetic frameCount (73,74,75…), qualityScore cycling 10 values, coverageTag repeating exactly 250× each, sourceAssetPaths to non-existent assets.
  • 3200 generic NPCsspawnWeight == (index mod 5)+1 for all 3200; 1 distinct lodPolicy/clearanceTag/compositionMethod.
  • 6050 crowd barks120 distinct core phrases (~50× repeat each).
  • 1200 talk-radio lines → ~8 sentence stems (fill-in-the-blank).
  • 948 mission-catalog rows = metadata only (title + arithmetic act/protag/ district), no objectives/beats/scripts.
  • Count-only metadata, no text exists: "12000 dialogue nodes" = 5 count-rows
    • 1 seven-node sample tree; "60000 VO lines" = 3 literal ints (Plan.TotalNarrativeLineCount = 60000;); "120000 VO lines" (§80) = no backing file at all.

5. Campaign GameFeatures plugins register NOTHING#

All 29 V5/ue/Plugins/V5Mode_*: 0 Source/ dirs, 0 "Modules" arrays, 0 GameFeatureAction/GameFeatureData. Each is a .uplugin descriptor + count-JSON (e.g. "playableAreaKm2": 140 is a literal int). The §49–§70 "Create … GameFeatures plugin" boxes are satisfied by a descriptor; activating any plugin in UE does nothing. No playable open world or missions exist.

6. §71 Online Services Backend#

The "16 NestJS microservices" are 16 byte-identical thin wrappers over one 2012-line services/service-shared/src/runtime.ts. No Postgres/Redis/crypto/HTTP anywhere despite contract.json declaring them. auth returns a fake jwt.v5.* string; faction-rep has simulatedDecay:true and echoes its input (no decay formula); telemetry is trivial. The contract-test "outage path" is reachable only by the test harness passing serviceHealthy:false — production service.ts hardcodes serviceHealthy:true, so the failure branch is dead code in production. (anti-cheat + compliance-dsar logic is genuinely real.)

7. §78 Companion apps — NOT implemented#

Exactly one .swift (307 lines) and one .kt (295 lines): static SwiftUI / Jetpack Compose mockups of 10 surfaces with hardcoded label strings and empty handlers (Button("Queue clue draft") {}, Button(onClick = {})). No Xcode project, no Package.swift, no build.gradle, no AndroidManifest.xml — neither can be built. Token files, not apps.

Disposition#

Per the repo CLAUDE.md rule ("under-reporting is safer than false completion"; "ALL batch-marked tasks get reverted to [ ]"), the unambiguous attestation-only and token deliverables that cannot exist in this repo have been reverted to [ ] in V5_TODOS.md:

Attestation-only / token deliverables (cannot exist in this repo):

  • §78 — Implement iOS app, Implement Android app.
  • §80 — Engage 3 composers, Score 8 hours per cell, Engage VO casting team, Record VO (~120000 lines), Author 4500+ unique sound effects.
  • §82 — entire section (legal engagement / clearance attestations).
  • §90 — entire section (cert-pass, crash-free, stub-scan, external audits).
  • §72 — Engage external accessibility consultant for audit.

Binary-asset authoring tasks (zero .uasset/.fbx/.wav/.mp4 exist, so every "Author N " is definitively false — no module-logic judgment needed): §5 ~250 vehicle meshes; §7 ~600 melee anim clips; §14 18 spaceship meshes; §26 32 karaoke tracks; §29 12 horse meshes + quadruped anim library; §30 200+ parkour anim clips; §33 30 000+ anim clips; §38 40h score + 4500+ SFX; §40 250+ in-engine + 12 pre-rendered cinematics; §59 60 000 VO lines; §73 VO recording (12 langs); §79 pre-render + encode + 250+ cinematics; §86 120/84/38/24 vehicle + 18 spacecraft meshes; §87 28 MetaHuman principals + 3000+ NPCs + face-capture takes; §109 documentary cinematic.

Engine-integration fakes + fabricated gates (cat. 1 & 2) — flipped the specific integration/widget/fake-gate bullets while keeping the literally-true Create module X bullet and any genuinely-real sub-logic (e.g. V5Audio router/ dialogue-ducking math, V5Crowd panic/witness math, V5Modes registry/ruleset-gate, V5FaceCapture VOSync/retake/linter, V5Anim pose-quality test): §10 CloudSync; §21 Mass integration + promotion + body-language libs + 5000 barks; §25 USD loader + MetaHuman bind + TellTake authoring + FACS calibration; §33 all motion-match/IK/ retarget/root-motion/chooser bullets; §36 PerCellHUDRouter; §37 all CommonUI shell/menu/HUD/widget bullets; §38 PeriodRadio/DynamicMusic/DualSenseHaptic/ DolbyAtmos/Sony360/SteamAudio + spatial-mix test; §39 all Niagara bullets; §40 SequencerCinematic/camera-library/pre-render-pipeline/in-engine-chooser/budget test; §42 all online-service clients (zero network I/O; fake OAuth) + contract tests; §48 GauntletDriver + GoldenReplayHarness.

Synthetic count-metadata content (cat. 4) — §11 12000 dialogue nodes; §28 18 radio stations / 140 TV / 250 sites / 1200 talk lines.

Launch [P1] campaign narrative content (cat. 4/5) — flipped the synthetic "Author N missions / endings / encounters / cases / arcs" and "Implement N-km² open world / continent" bullets across §49 (Heist City), §50 (Street Triad), §52 (Made Man), §53 (Vice Squad), §54 (Outlaw Trail), §56 (Witcher's Path), §57 (contract boards), §58 (card tournaments), §59 (Galactic Squad), §60 (Hard Vacuum), §61 (PvP arenas), §62 (cross-cell arc + 100 evidence assets), §63 (cold cases), §64 (spec-ops), and the §88 consolidated mission-authoring summary. Kept the Create plugin X shells, the Implement <mechanic> bullets that delegate to genuinely-real engine modules (melee/parkour/Dead-Eye/horse/alchemy/ signs/Newtonian-flight/etc.), and real data tables (deduction pairs, monster contracts, card catalog, companion roster).

Total reverted: 195 tasks [x] → [ ].

Still NOT flipped (documented only): the [P2]/[P3] post-launch expansion content (§95–§145 "Author N missions / sub-cells / DLC" — identical synthetic pattern, lower phase), §89 per-platform "Profile + tune" (config values may be authored; profiling on absent hardware cannot), §71 backend services (exist as 16 wrappers over one runtime; anti-cheat + DSAR logic is real), and the Create module/plugin X shells (dir/Build.cs/uplugin literally exist). These need per-bullet judgment to avoid un-marking partially-real pieces; each is itemized above with file:line evidence and is not complete.

Note: the literal goal ("all tasks completely and expertly implemented") cannot be satisfied in this environment — no runnable UE5.5 editor, no binary-asset authoring, no live platforms/cert/human engagements — so the honest end-state is this corrected, evidence-backed record, not a fabricated green.