pipelines/PIPELINE_READINESS_ROADMAP.md
Status: ACTIVE v1.0 · 2026-07-19 · owner Josh · synthesized from the seven lane-audit reports in docs/pipeline_review/ (the full reports remain the workflow record; this doc is the consolidated map). CVD §17.14-conformant.
This doc answers Josh's question verbatim: "we have a lot of pipelines that we can test before the RTX 5090 computer comes in right, like music? what else isn't blocked? how are you building our combat and physics and other UE systems? I have NeoStack and Unreal already. when do you actually need the new computer and what's gated by book processing?"
Every lane against its true gate. Evidence cited inline as (lane: name).
| Lane | Unblocked NOW (current machine) | 5090-gated | Book-gated | First-artifact true gate |
|---|---|---|---|---|
| Terrain | DEM download to manual UE Landscape import; needs a free OpenTopography key (Josh registers) + one rasterio install into Python 3.12 (lane: terrain) | Gaea erosion benchmark; 69-region throughput; World Partition + PCG perf-budget (lane: terrain) | None — geometry comes from Copernicus GLO-30 + WorldCover; machine layer is build-ready now (lane: terrain) | The missing machine-readable WGS84 region_bbox + single meters_per_vertex value (lane: terrain) |
| UE5 Build | Create the .uproject on UE 5.8.0; compile one USTRUCT; scripted DataTable ingest; PCG graph; World Partition scaffold; RemoteControl; NeoStack on 5.8 (source-built, verified 2026-07-19) (lane: ue5) | 14B model for NeoStack; perf-budget across spec classes; 69-region headless bake; bulk terrain preprocess; MetaHuman batch staging (lane: ue5) | Per-region MetaHuman appearance authenticity + Section 16 provenance for un-scanned regions only (lane: ue5) | The per-registry USTRUCT column-to-UE-type spec + the spine-row extractor tool (lane: ue5) |
| Asset generation | Blender-headless finishing chain; FBX-to-UE import + registry writeback; NeoStack previz passthrough; single MetaHuman; Fab acquisition (lane: assetgen) | All local geometry generation (TRELLIS.2/Hi3DGen/Hunyuan3D, 24GB+ floor); the benchmark protocol; the PBR renderer-swap spike; bulk volume (lane: assetgen) | Low — reads region pages not raw books; soft ties are capture-rights photos + creature-roster completeness trailing the drain (lane: assetgen) | The mesh_tags object + per-asset routing tag + capture-rights field, none present as schema (lane: assetgen) |
| Audio (music/voice/SFX) | ElevenLabs SFX to UE import (automated); Kokoro local voice; MetaSound Builder spike (lane: audio) | ACE-Step/YuE bulk music; instrumental benchmark; MOSS-SoundEffect/Stable Audio batch; Demucs; Kokoro bulk throughput; adaptive-graph perf (lane: audio) | Verification-grade only, at high-care cultures (Sámi joik Ch 29, Vodou Ch 42, songline Ch 57); NOT generation-grade (lane: audio) | Dialogue line text unauthored (from Quest §6) (lane: audio) — the AIVA API wall is moot: closed as skip 2026-07-27 |
| Cinematic | Template Level Sequence + headless driver; MRQ 720p render; single MetaHuman; DataTable ingest; dispatch stub (lane: cinematic) | Render fidelity (Lumen/Nanite/groom LOD0); many-MetaHuman perf; batch dailies; roster-scale MetaHuman (lane: cinematic) | Not meaningfully — only the batch cultural audit, covered by the drained corpus (lane: cinematic) | scene_type-to-shot-grammar mapping absent; the real cross-lane wall is audio (lane: cinematic) |
| Quest writing | Author Ch 2 quest rows; Ch 3-5 SPIKE; a sample dialogue_dataset; critic pass; baseline refresh (lane: quest) | Nothing for authoring; production volume helps via draft-tier pre-draft + bulk FK + embedding dedupe (lane: quest) | Ch 2-5 SPIKE is NOT book-gated; pass-2 per-region production authoring is region-page-gated, so book-gated at high-care regions (lane: quest) | Three unpinned decisions: dialogue-dataset format, landing path, condition_expression grammar (lane: quest) |
| Combat / physics / runtime | GAS greybox boss; StateTree clocks + habit-vector; vril_density dial; deterministic strategy-token spine; cosmetic barks on the current GPU (lane: combat) | 14B reference model; runtime-inference perf-budget; heavy asset-gen for vertical slice; nightly eval at scale (lane: combat) | Fauna behavior_flavor partial-now; §17.1 runtime denylist accretes; per-region encounter population is region-page-gated (lane: combat) | No combat/systems Translation Doc and no combat section in the contract (lane: combat) |
Ordered by leverage then cost. The already-ruled items are slotted in place: the Ch 2-5 region-page slice (pass-1 plus deep-research fill, ruled 2026-07-19 as Option A plus the slice exception), the quest-writing SPIKE (validation artifact only — production quest content per region is book-gated pass-2), the RCM substrate order, RR-62, and the D-1 consistency audit.
| # | Step | Machine | Prerequisites to install / configure / key | Doc it validates | Exit criterion |
|---|---|---|---|---|---|
| 1 | Quest-writing Ch 2 SPIKE — one main-story quest row appended to T0_Quest_Definition_Registry plus one sample dialogue_dataset (six-option node), critic-gated. Validation artifact only (lane: quest) | Current — Opus authoring pass, no hardware | Nothing beyond the repo and this session | T1_Build_Pipeline_Contracts §6 | Row conforms, run_gates.py green (unpiped) after baseline refresh, normalize-doc GO, and the three quest WALLs forced to a decision |
| 2 | RR-62 range review — reveal-discipline plus cultural-care fan-out across the range, fixes applied (parallel canon verification) | Current — Opus fan-out, no hardware | normalize-doc skill; read-only critics on the shared tree | Spine reveal-discipline + Care Doctrine (CVD §17.1) | RR-62 GO with all found leaks fixed and re-verified |
| 3 | D-1 consistency audit — resolve or queue the D-1 seating/consistency items across the affected nodes (parallel) | Current — Opus, no hardware | The D-NTALA-ENC / D-1 ruling record | The D-1 ruling and adjacent spine/registry consistency | Audit complete; inconsistencies resolved in-place or queued to DECISIONS_PENDING_JOSH |
| 4 | RCM substrate order — issue the deep-research substrate pulls for the Ch 2-5 slice (default synthesis path; MUST-ACQUIRE physical buys reserved to the curated set) | Current — deep-research agents | Confirm the two Flores MUST-ACQUIRE titles (Erb; Allerton) against BOOK_ACQUISITION.md | T1_Research_Corpus_Master + docs/BOOK_ACQUISITION.md posture | Substrate packs available for the four region pages; MUST-ACQUIRE confirmed, everything else synthesized |
| 5 | Ch 2-5 region-page slice — pass-1 build plus deep-research fill (ruled Option A + slice exception, 2026-07-19) | Current — Opus + deep-research | The slice substrate from #4; region pages bali and sumatra_java already present | T1_Region_Page_Template v2.0 | angkor_khmer built (page 4) + all four slice pages deep-research-filled to review depth (flores/bali/sumatra_java pass-1 already landed); Section 5/6 high-care depth pending the MUST-ACQUIRE books |
| 6 | Combat continuo-bet runtime smoke — llama.cpp 3-4B GGUF under a GBNF grammar, through the deterministic V1-V5 validator plus authored fallback plus pass-rate log (lane: combat) | Current GPU (3-4B class) | llama.cpp build + one GGUF download (Qwen3-3B / Phi-4-mini class); hand-author one boss context pack | RUNTIME_GUARDRAIL_ARCHITECTURE.md + RUNTIME_GENERATIVE_LAYER.md | The loop never emits an invalid or off-whitelist line (fallback always catches) and prints a first-try pass rate |
| 7 | UE5 registry-to-DataTable-to-PCG-to-rendered-zone smoke — compile FCreatureRow, scripted CSV import, PCG scatter, MRQ frame (lane: ue5) | Current — UE 5.8.0 | Confirm VS 2026 "Game development with C++" workload once before first compile | UE_BUILD_AUTOMATION.md + T99_Translation_UE5_Build | Cubes scatter per creature row in a World Partition level; screenshot or MRQ frame captured |
| 8 | Audio ElevenLabs SFX-to-UE import round-trip — Flores Section-10-grounded 48kHz WAV imported via SoundFactory (lane: audio) | Current — UE 5.8.0 | ElevenLabs API key + credits (short clip fits the free tier; full 30s needs a paid tier) | T99_Translation_Audio + Contracts §10 | Canon-substrate-grounded WAV living at /Game/Audio/SFX/environmental_ambient/ |
| 9 | Terrain download-preprocess-manual-import — Liang Bua COP30 to a UE Landscape (lane: terrain) | Current — Python + UE 5.8.0 | Josh registers a free OpenTopography key (account creation is his to do); pip install rasterio into Python 3.12 | GEODATA_TERRAIN_CHAIN.md + T99_Translation_Terrain | Liang Bua relief visible in a UE Landscape; surfaces the true bbox and meters-per-vertex numbers the page lacks |
| 10 | Asset-gen finishing plus FBX-to-UE import plus registry writeback — one previz fantastical prop (lane: assetgen) | Current — UE + Blender | Blender installed; NeoStack cloud allowance; a throwaway input mesh | T99_Translation_AssetGen §4.3 | mesh_id_ref written back on the owning row; the missing §2.6 schema fields enumerated |
| 11 | Cinematic template Level Sequence plus headless driver plus MRQ render — one scene row to a 720p video with placeholders (lane: cinematic) | Current — UE | One hand-authored scene_type template sequence | T99_Translation_Cinematic | A rendered video with placeholders on the templated camera |
| 12 | Combat GAS greybox difficulty-as-density proof — one Composure AttributeSet and a single vril_density float that widens/narrows the tell window with no enemy-stat change (lane: combat) | Current — UE 5.8.0 (GAS engine-native; the 5.8 AttributeSet-init deprecation now applies — verify the path) | Author against GAS AttributeSets/GameplayEffects; avoid the 5.8-deprecated attribute-set-init functions | COMBAT_ENCOUNTER_SYSTEM.md §5/§9 + the RULED difficulty system | The same authored boss plays at two world-tensions with zero change to any enemy stat block |
Notes on the ruled items: the quest SPIKE (#1) is deliberately a validation artifact — it proves the lane end-to-end and forces the three format/path/grammar decisions; per-region production quest content is pass-2 and book-gated where its region page is book-gated (lane: quest). The region-page slice (#5) builds the machine layer now and defers Section 5/6 cultural depth to the two MUST-ACQUIRE Flores books (lane: terrain, lane: quest). Items 1-5, 11 and 12 need no purchases; items 6-10 need one small install or one free/low-cost key each.
Every parameter gap rated WALL across the lanes, its owning doc, and the fix route. The missing combat-systems Translation Doc is confirmed by the combat lane report and called out first because it blocks the entire combat/physics/runtime engine-mapping decision.
| WALL | Lane | Owning doc | Fix route |
|---|---|---|---|
| ✅ RESOLVED (2026-07-19): T99_Translation_Combat.md [DRAFT v0.1] LANDED — authored to the five-doc bar, 3-critic adversarially gated (14 fixes applied incl. the BYPASS win-verb restoration, the boss_kind-not-boss_scale reconcile, the WS_024 [0,2]→GAS normalization, seam tags, the §8.1 PARAMETERS BLOCK). The GAS/StateTree/Chaos forks are resolved IN the doc; its 14 [JOSH] canon flags ride the queue as D-COMBAT-TD; the contract combat-§ pointer + the Boss_Encounter column extension apply after those rule | combat | docs/translation/T99_Translation_Combat.md | The former wall; remaining follow-ons are D-COMBAT-TD rulings + the greybox prototype (queue #12) |
| T0_Boss_Encounter_Registry lacks the machine combat-spec columns — no primary/secondary verb, Patterns/Puzzles/Preparation axes, win-condition enum, per-signature counters, Composure nodes, or win-and-death reward fields (the spine §9 thin-index carries verbs/axis as prose rows, not machine columns). NOTE: the registry IS populated — 281 rows — the lane report's 0-rows claim was refuted at director adjudication; the wall is schema fitness, not emptiness | combat | T0_Boss_Encounter_Registry + COMBAT_ENCOUNTER_SYSTEM.md Gap 3.2 | New spec doc + a registry schema EXTENSION (declared via docs/registry_extensions.json, fidelity re-baselined) aligning the 281 rows + the boss_roster_rows.json proposal to machine combat columns |
| Every combat number is deferred to a Phase-5M balance audit that never ran — damage constants, integrity-band absolute units, sigma values, tell/window ms, dial coefficients | combat | COMBAT_ENCOUNTER_SYSTEM.md | Run the balance audit as its own workflow; greybox proceeds on illustrative shapes, a tuned build cannot |
| No canon win-condition taxonomy, no mechanical definition of the mandatory character-engagement field, no source authority for the three-axis split | combat | COMBAT_ENCOUNTER_SYSTEM.md (Pillar-8) | Josh canon ruling + spec doc defining the axes and win-condition enum |
| The recall-PACKS offline exporter (the frozen per-boss context-pack builder the guardrail architecture depends on) does not exist. NOTE: harness/recall.py itself EXISTS and works — the lane report's claim it is absent was refuted at director adjudication; the missing piece is the pack-export layer on top of it | combat | RUNTIME_GENERATIVE_LAYER.md §C + RUNTIME_GUARDRAIL_ARCHITECTURE.md §9 | Build the packs exporter in harness/ atop recall.py; a prototype hand-authors one pack, production population cannot start until it exists |
| No per-registry USTRUCT spec maps each CSV column to a UE C++ type (FText/FString/int32/float, enums, FDataTableRowHandle FKs, TArray/JSON for nested cols) | ue5 | T1_Build_Pipeline_Contracts §1.5-1.6 | Contract § or new spec doc — add the column-to-UE-type contract the codegen needs |
| The spine-row extractor (markdown-table to CSV pulling site/beat/fork/scene/SQ rows from docs/spine/CH_NN.md) does not exist; enrich.py and extract_claims.py do not produce it | ue5 | harness/ (absent tool) | Build the extractor in harness/ — it is the §3 pre-step no UE step can run without |
| PCG population numbers (ambient_threat-to-density, vril_density-to-tier filter, climactic_affordances-to-markers) are numeric inference assigned to the Translation Doc layer, which is unpopulated; no terrain_type-to-PCG-template binding table exists | ue5 | T1_Build_Pipeline_Contracts §0 (Translation Doc layer) | Populate the inference layer as Flores surfaces cases; author the terrain_type-to-PCG-template binding table |
| The 11 scene_type shot-template Level Sequences do not exist; camera blocking/timing/cut rhythm is not in the seven-column schema; no dialogue/audio (SoundWave FK) rides the scene row | ue5, cinematic | T99_Translation_UE5_Build §3 Step 9 + T99_Translation_Cinematic + SPINE_SCHEMA_v3 | Author the 11 shot templates (hand or NeoStack) + add camera-block and SoundWave-FK fields to the scene-row schema |
| The mesh_tags object (morphology/region/style/material/era) exists in no consumable form — not a structured block on the region page, not populated on live registries | assetgen | T1_Build_Pipeline_Contracts §2.5 + T1_Region_Page_Template | Template field add + registry columns — instantiate mesh_tags per asset (it is the primary prompt-composition input) |
| No machine-readable per-asset asset-class / mesh_category routing tag — the cloud/local/reference-built split lives only in Section prose | assetgen | T1_Region_Page_Template + Contracts §2 | Per-row field — add mesh_category so backend routing is deterministic |
| No reference_image_ref / capture-rights / use_class field for the §17.1 reference-built architecture path; the agent cannot distinguish a rights-cleared photo from a prohibited one, or from AI-generated input | assetgen | T1_Build_Pipeline_Contracts §2.11/§6 + region page | Template field + contract § — add the capture-rights-cleared source FK before any real cultural architecture is reference-built |
| ~~No self-serve AIVA API exists~~ — CLOSED AS SKIP 2026-07-27, no longer a gap: the vendor lane is dead | audio | T99_Translation_Audio Music Step 2 + Contracts §3 | Ruled, not fixed — the canonical and hero theme track is composer-in-loop with a human composer; bulk music is local ACE-Step/YuE, benchmark-gated |
| No T0_Theme_Registry field carries tempo, bar-length, or stem-role metadata — MetaSounds+Quartz cannot consume a cue as a true adaptive layer | audio | T99_Translation_Audio Music Step 4 + T0_Theme_Registry | Registry field add — ratify the PROPOSED tempo/bar/stem-role fields |
| Dialogue line text does not exist anywhere — dialogue_dataset_ref is populated by the unauthored Quest Writing pipeline, so no canonical voice line can be generated today | audio | Quest Writing §6 + dialogue_dataset | Cross-lane — author quest content (queue #1 starts this); Voice Step 1 derives who speaks, never what |
| The dialogue_dataset file format and extension are unpinned by the contract | quest | T1_Build_Pipeline_Contracts §6.4 + PIPELINE_ADAPTER.md §6 | Josh pin — decide format (JSON natural) and extension together at the first quest authored |
| The dialogue_dataset landing path is a dead Google-Drive path; the repo replacement canon/dialogue_datasets/ is an un-ratified proposal and the dir does not exist | quest | PIPELINE_ADAPTER.md line 120 | Ratify the landing path + create the directory |
| The condition_expression grammar (runtime branch conditions) is undocumented — operands are named but no expression syntax exists | quest | T1_Build_Pipeline_Contracts §6.11 | New grammar spec or contract § defining the condition_expression syntax |
| No machine-readable WGS84 region_bbox — the golden page carries free-text local-ENU design sizings, and the real bbox is explicitly deferred to the Section 1 terrain pass | terrain | flores_island.md + T99_Translation_Terrain Step 1 / PARAMETERS BLOCK | Template field add — put a WGS84 south/north/west/east (or center+radius) per zone into Section 1 / the Zone Catalog |
| No instantiated alteration_list — the §3 carve/composite schema is specified but no fillable recipe exists on any golden page (operation enum, feather_radius_m, WGS84 footprint all absent) | terrain | T99_Translation_Terrain §3 | Instantiate the §3 schema on the region page (depends on the bbox fix above) |
| No single resolved meters_per_vertex value — the rule is one number per region but the page gives multi-valued prose | terrain | T99_Translation_Terrain §5 item 1 (JOSH-RULES) | Josh ruling + template field for the one machine value |
| participant CHAR_id has no MetaHuman asset-path lookup — depends on the UE5 build having run Step 7 and emitted stable IDs; no UE build has run | cinematic | UE5_Build Step 7 dependency | Cross-lane — the UE build must generate MetaHumans and emit stable asset IDs first |
| convergence_node_scene_dispatch schema is unratified and the ws.* WorldStateSubsystem does not exist — every LOCKED/path-conditional scene cannot clear | cinematic | T99_Translation_Cinematic spikes 3/7 + the (absent) WorldStateSubsystem | Ratify the dispatch schema + build the ws.* subsystem (shared with combat save state) |
| Boss cinematics fire off a boss combat-state event that no boss-AI framework yet emits | cinematic | T99_Translation_Cinematic spike 4 | Cross-lane — depends on the combat lane's boss-AI framework (StateTree) emitting the state event |
| Ambient scene rows carry no beat_ref, so the beat-to-site-to-region join has nothing to join from | cinematic | T99_Translation_Cinematic spike 6 | Schema field add — put a beat_ref (or a specified substitute) on ambient rows |
| Body-performance needs a mocap/retarget library that does not exist, and bespoke non-audio hero-beat animation has no pipeline | cinematic | T99_Translation_Cinematic spikes 9/2 | Build or acquire a mocap/retarget library; define the hero-beat animation pipeline |
Consolidated and deduped across all seven lanes. If a task is not on this list, it does not wait for the workstation.
Console packaging (Xbox int4/DirectML, PS5 compute-shader) is separately devkit-gated — neither the current machine nor the 5090 (lane: combat).
The complete set of external keys/subscriptions worth acquiring now, and the explicit skips. Nothing outside this list blocks the §2 NOW queue.
Tools/terrain_fetch_preprocess.py: fetch → UTM reproject at chosen m/vertex → 16-bit PNG heightmap + the machine-readable meta JSON — Liang Bua: bbox −8.58..−8.48 / 120.39..120.49, EPSG:32751, 30 m/vertex, 371×372 px, elevation 141.75–1187.07 m, UE Z-scale 204.164 — exactly the region_bbox + meters_per_vertex numbers the §3 wall named). The UE Landscape import leg rides the next editor session. Mind the 50-calls/24h cap; the keyless Copernicus AWS fallback stands for bulk.Tools/generate_sfx.py, first artifact smoke_stone_door.mp3). The →UE import leg rides the next editor session. Final VO and bulk SFX remain the 5090/local tier.HKCU:\Environment, via setx). Shells whose parent process predates the setx do NOT inherit them — the Tools scripts read the env var first and FALL BACK to the registry, so they work from any session.Book processing gates content fidelity, never pipeline machinery. Nothing deterministic in any lane waits on the drain. What it does gate:
Not book-gated at all: terrain (geometry is DEM-derived) (lane: terrain); the cinematic deterministic spine (lane: cinematic); anything in the Indonesia arc (flores, bali, sumatra_java pages exist and the corpus is drained) (lane: ue5, lane: quest); the Ch 2-5 slice (lane: quest).
Every stale-or-wrong claim surfaced by the lanes, with its file, for living-source fix-up. The single biggest one — the UE 5.8-vs-5.7 split — recurs across four lanes and is listed once.
C:\dev\Humanity\Humanity, repo github.com/milkman3790/Humanity, branch master, LFS wired); the 5.7 side-by-side is retired and the engine-split corrections above now apply in 5.8's favor across every doc. The NeoStack-on-5.8 spike is PASSED — and the prebuilt path in the bullet above is corrected: NeoStack is installed AS SOURCE in the project Plugins/ and rebuilt via Engine\Build\BatchFiles\Build.bat against that exact BuildId — a prebuilt or marketplace binary drop-in re-breaks on a BuildId mismatch, so prebuilt drops are forbidden (the Jun-4 vendor zip is not the install vector). The NeoStack MCP channel is VERIFIED LIVE (http://127.0.0.1:9315/mcp, streamable HTTP, server unreal-editor, one execute_script Lua meta-tool over ~35 domains; the MCP-Session-Id header is required after initialize) and smoke-tested end-to-end (actor spawn + viewport screenshot). Epic's ModelContextProtocol plugin is enabled (server unreal-mcp, http://127.0.0.1:8000/mcp) but NOT auto-started and no toolset is enabled yet — still pending. NeoStack Agent Chat / Claude ACP is root-caused (the sign-in terminal stall is a known NeoStack auth-parser bug; working practice = ignore the sign-in terminal and just send a message; CLAUDE_CODE_EXECUTABLE is pinned in user env). The three-seam routing (NeoStack judgment seam · UE-native Python + Remote Control bulk seam · Epic PCG seam) is confirmed as the operating shape. Authoritative record: C:\dev\Humanity\Humanity\CLAUDE.md, "Editor automation channels (verified live, 2026-07-19)".This doc is the consolidated readiness map; the seven full lane reports are landed verbatim at docs/pipeline_review/READINESS_AUDIT_2026-07-19_LANE_REPORTS.json (the uncorrected workflow record — two combat-lane claims, Boss_Encounter-0-rows and recall.py-absent, were refuted at director adjudication against the live tree and corrected in Sections 1-3 above). Add this file to docs/DOC_MAP.md (a doc is not done until it is listed there). The stale-doc corrections in Section 6 are living-source fix-ups — apply them in place per the living-source doctrine; any that touch chapter/numerical/naming/hard-line/§17 canon go to Josh, but every item above is a factual/currency correction, not a canon call. The WALL fixes in Section 3 that add template fields, contract sections, or new spec docs are the ordered unblock work behind the execution queue.