READINESS_AUDIT_2026-07-19_LANE_REPORTS.json

pipelines/READINESS_AUDIT_2026-07-19_LANE_REPORTS.json

{
 "audit": "pipeline-readiness",
 "date": "2026-07-19",
 "workflow": "wf_7517271e-186",
 "note": "Raw lane reports, uncorrected. Director adjudication refuted two combat-lane claims (T0_Boss_Encounter_Registry has 281 rows, not 0; harness/recall.py exists). The corrected consolidated map is docs/PIPELINE_READINESS_ROADMAP.md.",
 "reports": [
  {
   "lane": "Terrain chain — region bbox → Copernicus GLO-30 (OpenTopography) → meters/vertex compression → GDAL/rasterio carve recipe → Gaea detail → UE Landscape import → ESA WorldCover → weightmaps. Sources: docs/pipeline_review/tech_research/GEODATA_TERRAIN_CHAIN.md, docs/translation/T99_Translation_Terrain.md, Region Page Template Section 1, golden page flores_island.md.",
   "doc_state": "The lane is unusually well-documented at the DESIGN level and thin at the INSTANTIATION level. Spine brief: docs/pipeline_review/tech_research/GEODATA_TERRAIN_CHAIN.md (7 sections + step-by-step chain + 7 residual unknowns, every claim tagged VERIFIED/INFERRED/FLAG with live-web citations, mid-July-2026 pass). Translation Doc: docs/translation/T99_Translation_Terrain.md [ACTIVE v1.0, 2026-07-15] — the parameter layer, with an 8-step chain, a per-region PARAMETERS BLOCK schema (§3, 8 fields), a previz-lane firewall (§4), and a 12-row unknowns/spikes table (§5) that already self-flags most of the walls below. Contract: T1_Build_Pipeline_Contracts §1.2 line \"TERRAIN TOOL SELECTION SUPERSEDED 2026-07-15\" demotes Cesium to preview-only and names the DEM→GDAL→Gaea→Landscape backbone. Template: T1_Region_Page_Template [ACTIVE v2.0] Section 1 carries the chain summary verbatim. Golden page: _source/02_Tier_2_Region_Pages/flores_island.md Section 1 has a prose terrain-build paragraph naming COP30/OpenTopography, first-pass 2.0 m/vertex, the cave/crater carve, a Gaea pass, and WorldCover mapping. Harness: harness/check_region_page.py exists (structural gate). MACHINE GROUND TRUTH (verified this pass): Python 3.14 (has requests 2.34.2) and 3.12 present; NO gdal / rasterio / osgeo / conda / QGIS installed; NO Gaea installed; UE_5.7 installed (UnrealEditor.exe + UnrealEditor-Cmd.exe present) — NOT UE 5.8; no OpenTopography API key in env or repo.",
   "executable_now": [
    {
     "step": "DOWNLOAD one small region's COP30 GeoTIFF via a single HTTPS GET to the OpenTopography Global DEM API (demtype=COP30, outputFormat=GTiff, a hand-supplied bbox around Liang Bua).",
     "requires": "A free OpenTopography API key — Josh must register the account himself (account creation is a prohibited action for me); then Python 3.14's requests (present) or stdlib urllib (present) does the GET. No geospatial libs needed just to pull the file.",
     "evidence": "OpenTopography 'API keys for access to global datasets' + 'OpenTopography for Developers' (opentopography.org) confirm COP30 is the default demtype and a free key is required; the exact URL shape is in T99_Translation_Terrain Step 2 and GEODATA_TERRAIN_CHAIN §2."
    },
    {
     "step": "PREPROCESS + ALTER + EMIT (reproject/clip/resample with gdalwarp-equivalent, then write a 16-bit UInt16 grayscale heightmap; compute Z-scale from real min/max).",
     "requires": "INSTALL-NOW: pip install rasterio (ships bundled GDAL in its wheels) into Python 3.12 specifically — Python 3.14 is too new for reliable geospatial wheels this month. Nothing is installed today, so this step cannot run until that one install lands.",
     "evidence": "T99_Translation_Terrain Steps 3-6; GEODATA_TERRAIN_CHAIN §3-4 (gdal_translate -ot UInt16; Z Scale = maxheight_m x 100 x 1/512). Verified absent on machine: `import rasterio` and `from osgeo import gdal` both ModuleNotFoundError."
    },
    {
     "step": "IMPORT the emitted 16-bit heightmap into a UE Landscape by hand (Landscape mode -> Import from File), set Z-scale, eyeball the result.",
     "requires": "UE is installed — but it is UE 5.7, and the whole chain is written to UE 5.8. Classic heightfield Landscape import works identically in 5.7, so a MANUAL import runs now. Automated/headless import does NOT: it needs the C++ shim wrapping ALandscape::Import (owned by the UE5_Build lane, not built) because stock Python's landscape_import_heightmap_from_render_target only writes into an already-existing Landscape.",
     "evidence": "Epic Landscape Technical Guide + LandscapeProxy Python API (cited in GEODATA §3); T99_Translation_Terrain Step 7 states the no-stock-Python-creation-path dependency explicitly. Machine: /c/Program Files/Epic Games/UE_5.7 with UnrealEditor.exe present; UE_5.8 absent."
    }
   ],
   "parameter_gaps": [
    {
     "step": "Step 1->2 DOWNLOAD (form the OpenTopography bbox)",
     "missing": "A machine-readable WGS84 south/north/west/east region_bbox. The golden flores page's Zone Catalog area_bounds column holds free-text DESIGN sizings in local-ENU meters ('220x180x60 karst interior + 400 m forest approach', '3-crater rim ~1.2 km span'), NOT the WGS84 polygon/center+radius the Translation Doc Step 1 and PARAMETERS BLOCK assume. The page even states area_bounds are 'first-pass design sizings (meters, local ENU origin)... refined at the Section 1 terrain-build pass' — i.e. the real bbox is deferred and not yet present. Only two region-center lat/lons exist in the header; no per-zone geodetic extent. An autonomous agent cannot build the download call.",
     "severity": "WALL"
    },
    {
     "step": "Step 4 ALTER (the carve/composite recipe)",
     "missing": "An instantiated alteration_list. The Translation Doc §3 SPECIFIES the schema (zone_id, site_id FK->T0_Vril_Site_Registry, operation {carve,composite,raise,flatten}, feather_radius_m) but the golden page carries only prose ('the GDAL/rasterio recipe carves the Liang Bua cave mouth and the Kelimutu craters as scripted composites') — no operation enum, no feather_radius_m, and no WGS84 footprint polygon (which would itself require the missing geodetic area_bounds above). So the recipe FORMAT is specified; a fillable recipe is not present in any golden page. The two Vril sites the page does list (VS_CH02_001, VS_CH03_001) are recharge sites, not carve rows.",
     "severity": "WALL"
    },
    {
     "step": "Step 3 compression (meters_per_vertex)",
     "missing": "A single resolved machine value. The rule is 'the ONE meters-per-vertex parameter per region' but the flores page gives '2.0 m/vertex for the highland corridors, tighter at the cave and caldera hero-sites' — prose, multi-valued, and self-contradicting the one-number rule; the Translation Doc §5 item 1 marks the concrete value JOSH-RULES/unresolved. An agent has a hint but not a runnable parameter.",
     "severity": "WALL"
    },
    {
     "step": "Step 2 DOWNLOAD (auth)",
     "missing": "An OpenTopography API key on the machine, plus a licensing read: the free non-academic key is capped at 50 calls/24h and OpenTopography states that INTEGRATING the API into COMMERCIAL software needs an Enterprise key. One-off asset downloads for 69 regions are within reach of the free tier but the commercial-use posture is unrecorded in the repo docs.",
     "severity": "FRICTION"
    },
    {
     "step": "Step 2 fallback (COP30->NASADEM)",
     "missing": "An automated void/artifact-detection trigger. Docs say only 'where Copernicus has a gap or artifact' with no numeric rule (Translation Doc §5 item 5, ENGINEERING-SPIKE). A human must eyeball the first DEM.",
     "severity": "FRICTION"
    },
    {
     "step": "Step 4 era_modifications + water_plane",
     "missing": "Structured values for water_plane (float+reference) and era_modifications (sea_level_offset_m, coastline_shift_geometry, glacier_coverage_pct, deforestation_reversal_bool, river_course_shift_geometry, volcanic_activity_state). The flores page describes these only in Section 1/18 prose; no machine fields. Coastline/river geometry has no source geometry at all. A human default (sea_level=0, deforestation_reversal=true) rescues a basic highland heightmap.",
     "severity": "FRICTION"
    },
    {
     "step": "Step 5 Gaea detail",
     "missing": "gaea_pass is implied 'true' in prose but no .tor graph reference exists, and Gaea is not installed; step is optional/skippable for a smoke test.",
     "severity": "POLISH"
    }
   ],
   "gated_5090": [
    "Gaea-vs-UE-Landmass erosion-quality benchmark (Translation Doc §5 item 11, BENCHMARK-DAY) — decides whether Step 5 Gaea stays in the chain at all; needs the 5090 to run the erosion sims at production scale.",
    "69-region GDAL download+preprocess+import THROUGHPUT benchmark (§5 item 12) — the chain is asserted 'batchable' but never timed; the batch is a heavy CPU/NVMe + Gaea-GPU run best validated on the workstation.",
    "Gaea itself is a GPU tool: kilometre-scale erosion/thermal/aeolian sims (Gaea 3.0's new solvers) are the kind of hours-long heavy-GPU pass the 5090 is the home for.",
    "World Partition + PCG Biome Core runtime PERFORMANCE-budget validation for large tiled regions (~32km x 32km with foliage is the cited heavy point) — a perf-budget check, 5090-class dev-GPU territory."
   ],
   "gated_books": [
    "None. The terrain chain's geometry comes entirely from the DEM (Copernicus GLO-30) + ESA WorldCover + Sentinel-2 — none of it depends on the book corpus. The flores page's Section 20 explicitly separates the two: its build-ready DATE is gated on two MUST-ACQUIRE cultural books (Erb 'The Manggaraians'; Allerton 'Potent Landscapes') for Section 5/6 DEPTH, but states 'the machine layer (Zone Catalog, Derived Indexes) is build-ready now.' Terrain is in the machine layer, so it is NOT book-gated."
   ],
   "first_smoke_test": "Cheapest end-to-end DOWNLOAD->PREPROCESS->IMPORT for one Flores sub-site, runnable this week on the current machine (UE 5.7, Python, no Gaea): (1) Josh registers a free OpenTopography account and generates an API key himself (I cannot create accounts) — a few minutes. (2) Hand-define ONE small WGS84 bbox around Liang Bua from the page header center 8.5333S 120.4400E — e.g. south=-8.57 north=-8.50 west=120.41 east=120.48 — because the page carries no machine bbox (this is the Step-1 WALL, worked around manually for the test). (3) Pull the DEM with one HTTPS GET: portal.opentopography.org/API/globaldem?demtype=COP30&south=-8.57&north=-8.50&west=120.41&east=120.48&outputFormat=GTiff&API_Key=KEY — Python 3.14 requests (already installed) or curl; no geospatial libs needed yet. (4) INSTALL rasterio into Python 3.12 (`py -3.12 -m pip install rasterio`; brings bundled GDAL — the one install this test requires). (5) With rasterio: reproject to local UTM, clip, resample to ~2.0 m/vertex, and write a 16-bit UInt16 grayscale PNG heightmap; note the real min/max to compute Z Scale = maxheight_m x 100 x 0.001953125. (6) In UE 5.7 open a blank level, Landscape mode -> Import from File -> the 16-bit heightmap, set the computed Z-scale, and eyeball the Liang Bua relief. DELIBERATELY SKIP Gaea (not installed, optional), the automated/headless import (needs the un-built C++ ALandscape::Import shim — use the manual dialog), the carve recipe (no instantiated alteration_list), and WorldCover weightmaps/PCG. That validates the download-through-manual-import spine for one real region and surfaces the true bbox/meters-per-vertex numbers the golden page still lacks.",
   "stale_or_wrong": [
    "ENGINE VERSION MISMATCH (biggest issue): the terrain chain, T99_Translation_Terrain, and Region Page Template Section 1 all target UE 5.8, but T1_Build_Pipeline_Contracts §1 repeatedly says 'UE 5.7 standard', 'NeoStack plugin for UE 5.7', 'MetaHuman Creator via UE 5.7', and the MACHINE has UE_5.7 installed, not 5.8. UE 5.8 is real and shipped June 17, 2026 (unrealengine.com/news/unreal-engine-5-8-is-now-available) — so it is installable — but nothing on the current machine runs the 5.8-only parts of the chain (Mesh Terrain) today. The docs read as if 5.8 is the working target; it is not installed.",
    "GEODATA_TERRAIN_CHAIN §3/intro dates UE 5.8 as 'shipped this same month (July 2026)'. Actual GA was June 17, 2026 (State of Unreal / Unreal Fest Chicago). Minor date error; 5.8 existence is correct.",
    "NeoStack-on-5.8 is still UNVERIFIED per STACK_FACTS_QUESTIONS Q1, and the machine's engine is 5.7 anyway — so the contract's 5.7 pin is currently the accurate one and the chain's 5.8 assumption is ahead of the installed reality (not a terrain-lane blocker since Landscape import is version-stable, but the docs don't flag the split).",
    "Gaea 3.0 status: docs correctly flag it as unconfirmed-shipped and target Gaea 2.3. Current web (quadspinner.com/Gaea3, help.quadspinner.com) confirms 3.0 Early Access begins July 2026 with official release ~September 2026, and that USD/OCIO/SDK land in Professional/Enterprise — so the doc's WATCH flag and the 'CLI/automation tier unconfirmed for the $99 Indie' flag both remain accurate, not stale.",
    "PCG Biome Core: docs say 'Experimental, v0.2'. Confirmed accurate against UE 5.8 docs — it has stayed Experimental v0.2 across UE 5.5/5.6/5.7/5.8 with a ship-time 'copy the plugin' caution. Not stale; good to keep the caveat.",
    "OpenTopography rate-limit and commercial-key terms are UNDER-specified in the repo docs: the free key is 50 calls/24h for non-academics and commercial software INTEGRATION needs an Enterprise key — neither number nor the commercial posture appears in GEODATA_TERRAIN_CHAIN or T99_Translation_Terrain, which only say the key is 'free, issued instantly.'"
   ]
  },
  {
   "lane": "UE build automation + the three-seam routing (tech_research/UE_BUILD_AUTOMATION.md · docs/translation/T99_Translation_UE5_Build.md · T1_Region_Page_Template §17 · T1_Build_Pipeline_Contracts §1)",
   "doc_state": "Lane docs are unusually complete and honest. UE_BUILD_AUTOMATION.md (846 lines, per-claim VERIFIED/INFERRED tags, 20-item residual-unknowns register, §9 step-by-step chain) is the substrate; T99_Translation_UE5_Build.md is ACTIVE v1.0 (flipped 2026-07-15, three-critic pass) and realizes Contracts §1.2's 14 subsystems as an 11-step chain (§3) + a 12-row spikes table (§4) + a per-region checklist (§5); Contracts §1 (T1_Build_Pipeline_Contracts [ACTIVE v1.0].md, §1.1-1.15) is the FK/column/state-machine authority; NEOSTACK_AI.md is the seam-identity brief; template §17 (T1_Region_Page_Template [ACTIVE v2.0].md) is the page-side input contract + the FText/String-Table mandate. The three-seam routing rule is explicit (translation doc §2.3): NeoStack=interpretation/author-once, native Python+RemoteControl+commandlets=bulk/structured, Epic first-party MCP=PCG-graph authoring only. Registries are real and populated (registries/T0_Boss_Encounter_Registry [DRAFT v0.1]/Sheet1.csv = 282 rows/21 cols incl. phase_breakdown_object+engagement_modes_object; T0_Creature_Roster [DRAFT v0.1] = 132 rows/44 cols). What does NOT yet exist in-repo: no .uproject anywhere; no USTRUCT specs / no CSV-header→USTRUCT codegen tool (grep for USTRUCT/FTableRowBase/GENERATED_BODY hits only docs, never code); no spine-row markdown-table extractor (the §3 pre-step — harness/ has enrich.py + extract_claims.py but neither pulls site/scene/fork tables to CSV); no landscape C++ shim; no ws.* WorldStateSubsystem. Harness has 24 gate scripts incl. check_region_page.py with Zone-Catalog teeth, but none touch UE.",
   "executable_now": [
    {
     "step": "Create the UE C++ project (.uproject) the whole chain assumes but that does not yet exist, on the INSTALLED engine (UE 5.7, not the 5.8 the docs pin).",
     "requires": "UE_5.7 (confirmed at C:/Program Files/Epic Games/UE_5.7) + Visual Studio 2026 with the C++ Game Development workload — VS 2026 Community + Build Tools 2026 and MSVC 14.50.35717 are installed; the specific 'Game development with C++' workload should be confirmed once before first compile (vswhere -requires Microsoft.VisualStudio.Workload.NativeGame returned nothing).",
     "evidence": "UE_BUILD_AUTOMATION §9 Step 0; translation doc §3 Step 1; Contracts §1.10 says 'UE project does not yet exist' (§1.13)."
    },
    {
     "step": "Author + compile ONE C++ USTRUCT:FTableRowBase (e.g. a FCreatureRow subset of the 44 real columns) and hot-reload — proving the non-optional C++ layer end to end for one registry.",
     "requires": "The C++ project above + MSVC toolchain (present). No Epic tool generates this; it is hand/codegen-authored C++.",
     "evidence": "UE_BUILD_AUTOMATION §4.2 (Blueprint-only structs rejected, Epic bug UE-152346); translation doc §3 Step 2."
    },
    {
     "step": "Headless Python DataTable ingest of an existing registry CSV (creature 132 rows, boss 282 rows) via unreal.CSVImportFactory/AssetImportTask + unreal.DataTableFunctionLibrary.fill_data_table_from_csv_file, driven by UnrealEditor-Cmd.exe -run=pythonscript.",
     "requires": "UE 5.7 embedded Python — VERIFIED 3.11.8 at Engine/Binaries/ThirdParty/Python3 (same interpreter the docs attribute to 5.8) + PythonScriptPlugin (present, Experimental folder) + the compiled USTRUCT.",
     "evidence": "UE_BUILD_AUTOMATION §4.3; translation doc §3 Step 2; local: python.exe --version = 3.11.8."
    },
    {
     "step": "Author a minimal PCG template graph (Load Data Table -> Data Table Row to Attribute Set -> Static Mesh Spawner with an engine primitive) and Generate via unreal.PCGComponent.generate() after actor spawn.",
     "requires": "PCG plugin — VERIFIED present at Engine/Plugins/PCG/PCG.uplugin and Production-Ready since 5.7 (so the installed engine is sufficient; no 5.8 needed for core PCG).",
     "evidence": "UE_BUILD_AUTOMATION §3.1 (PCG production-ready in 5.7), §3.4 (Load Data Table node); translation doc §3 Step 6."
    },
    {
     "step": "World Partition scaffold + Data Layer tagging of protected zones via WorldPartitionConvertCommandlet (CellSize) and unreal.DataLayerEditorSubsystem (pure Python).",
     "requires": "UE 5.7 (WP default; DataLayerEditorSubsystem present in-engine).",
     "evidence": "UE_BUILD_AUTOMATION §2.4; translation doc §3 Step 3."
    },
    {
     "step": "Enable Remote Control API bound to localhost (HTTP 30010/WS 30020) and drive the warm editor; and run RunUAT.bat BuildCookRun -cook -stage -pak -archive headless with -unattended -nullrhi.",
     "requires": "RemoteControl plugin — VERIFIED at Engine/Plugins/VirtualProduction/RemoteControl; RunUAT ships with the engine.",
     "evidence": "UE_BUILD_AUTOMATION §1.2, §1.3-1.4; translation doc §3 Step 11."
    },
    {
     "step": "Stand up the NeoStack interpretive seam against the INSTALLED 5.7 (its confirmed support range is 5.5-5.7), driven by Claude Code over ACP.",
     "requires": "NeoStack plugin added to the project (not found under the 5.7 engine plugins tree, so install into the .uproject) + Claude Code. On 5.7 this SIDESTEPS spike #1 (NeoStack-on-5.8 unverified) entirely.",
     "evidence": "NEOSTACK_AI.md §5 (5.5-5.7 confirmed, 5.8 unconfirmed), §10; translation doc §2.3 + §4 spike 1."
    }
   ],
   "parameter_gaps": [
    {
     "step": "Step 2 — registry CSV -> USTRUCT -> DataTable",
     "missing": "No per-registry USTRUCT SPEC exists: nothing maps each CSV column to a UE C++ type (FText vs FString vs int32/float, enum names, FDataTableRowHandle FKs, TArray/JSON for nested cols like boss phase_breakdown_object/engagement_modes_object). Contracts §1.5-1.6 name FK COLUMNS but never the column->UE-type contract the codegen needs. An agent with only the region page + translation doc cannot emit a compilable USTRUCT deterministically.",
     "severity": "WALL"
    },
    {
     "step": "Step 2 pre-step — spine-row extraction",
     "missing": "The site/beat/fork/scene/SQ rows live in typed markdown inside docs/spine/CH_NN.md; the markdown-table->CSV extractor the chain requires does not exist in harness/ (enrich.py/extract_claims.py do not produce it). No UE step can run until it is built.",
     "severity": "WALL"
    },
    {
     "step": "Step 6 — PCG population",
     "missing": "ambient_threat->spawn density, vril_density->creature-tier filter, climactic_affordances->marker placement are all NUMERIC inference the translation doc explicitly assigns to the Translation Doc layer (Contracts §0), but that layer is UNPOPULATED (defers to 'Flores surfaces inference cases'). The Zone Catalog carries the enum inputs but no number, and no terrain_type->PCG-template binding table exists. An agent has inputs but no output values.",
     "severity": "WALL"
    },
    {
     "step": "Step 9 — scene rows -> Sequencer",
     "missing": "The 11 scene_type 'shot template' Level Sequences do not exist and camera blocking/timing/cut rhythm is not in the seven-column schema at all; and no dialogue/audio line reference (no SoundWave FK) rides the scene row, so auto audio + MetaHuman audio-driven lip-sync cannot be populated. Both are acknowledged schema gaps (translation doc §3 Step 9).",
     "severity": "WALL"
    },
    {
     "step": "Step 7 — MetaHuman batch",
     "missing": "participant_refs -> a concrete MetaHuman asset id only resolves if Step 7 has already emitted stable asset IDs; Section 4 appearance-range -> face-model coefficient sampling is a NeoStack-designed script that does not exist. Ordering dependency + missing sampling contract.",
     "severity": "FRICTION"
    },
    {
     "step": "Step 3 — World Partition",
     "missing": "No per-region WP CellSize in the region-page schema (template §1 omits it); the engine default (25600 cm, Contracts §1.6) rescues it.",
     "severity": "FRICTION"
    },
    {
     "step": "Step 2/10 — GameplayTag + ws.* keys",
     "missing": "The ws.* GameplayTag key STRINGS (e.g. Ws.Chapter12.MetCassius) are a codegen convention with no defined source; T0_Worldstate_Variables carries WS_NNN ids but not the tag vocabulary. mark_write's richer shape {community_id,valence,persistence,forward_track} has no decided storage (own ledger vs WorldState map) — flagged unresolved in translation doc §3 Steps 8/10.",
     "severity": "FRICTION"
    },
    {
     "step": "Step 2.4 — localization",
     "missing": "The FText-column rule is binding (template §17) but the concrete String Table (UStringTable/LOCTABLE) authoring + gather-commandlet automation surface is confirmed nowhere (translation doc §4 spike 10). Non-blocking for a first zone but blocks first shipped player-facing string.",
     "severity": "POLISH"
    }
   ],
   "gated_5090": [
    "Local 14B-class model driving the NeoStack interpretive seam at production quality — the current machine's 7B/3B tier caps the author-once judgment steps (auto-material design, boss BT first-drafts, quest/State-Tree drafts); the 5090+128GB is the home for the 14B reference model the generative-entity doctrine assumes.",
    "Performance-budget validation across the four §1.7 spec classes (steam_deck_minimum/mid/high/ultra) — needs a representative discrete GPU to measure real triangle/draw-call/streaming budgets; cannot be done meaningfully on the current box.",
    "The full 69-region headless PCGWorldPartitionBuilder bake + Nanite/HLOD builds at 8129-vertex landscapes — memory-bound (iterative cell loading) and time-bound; 128GB RAM + 5090 is where the at-scale bake belongs. A single small zone bakes on the current machine.",
    "Bulk terrain preprocessing for 69 regions (Copernicus GLO-30 DEM -> GDAL -> Gaea erosion synthesis -> PNG16) — heavy local compute; GDAL is not even installed on the current machine yet (python -c 'import osgeo' fails).",
    "MetaHuman-per-NPC batch generation at hundreds scale — the throughput risk is Epic CLOUD round-trip latency (spike 4), not local GPU, but staging/validating that batch loop belongs on the workstation alongside the local asset-gen."
   ],
   "gated_books": [
    "Per-region MetaHuman appearance-range authenticity (Step 7, feeding off region-page Section 4 people-and-culture) for any region whose cultural substrate is not yet in the drained corpus — ~3 more weeks of Josh's scanning; the 246 owned region-tagged books are already drained and queryable, so already-covered regions (e.g. the Indonesia arc: flores/bali/sumatra_java pages exist) are NOT book-gated.",
    "Section 16 citation/use_class provenance for un-scanned regions — a page-authoring input to the build, not a UE mechanism; does not gate the deterministic UE spine at all, only the fidelity of what a built region depicts."
   ],
   "first_smoke_test": "Cheapest end-to-end registry->DataTable->PCG->rendered zone runnable THIS WEEK on the installed UE 5.7 (no 5.8, no terrain, no MetaHuman, no NeoStack, no cloud). Steps: (1) In UE 5.7 create a blank C++ project 'HumanitySmoke' (confirm VS 2026's C++ Game Dev workload first). (2) Hand-author ONE header FCreatureRow:FTableRowBase with ~6 fields matching the real T0_Creature_Roster columns (creature_id as RowName, creature_name FText, species_class FString, tier_classification int32, spawn_rate float, a MeshPath FString); Build once. (3) Copy 'registries/T0_Creature_Roster [DRAFT v0.1]/Sheet1.csv', trim to those 6 columns with creature_id as the leftmost key column, save as bosses-style flat CSV. (4) Run headless: `UnrealEditor-Cmd.exe HumanitySmoke.uproject -run=pythonscript -script=ingest.py` where ingest.py uses unreal.CSVImportFactory + AssetImportTask (import_row_struct=/Script/HumanitySmoke.CreatureRow) to build DT_Creatures. (5) In-editor once, author a trivial PCG graph: Load Data Table(DT_Creatures) -> Data Table Row to Attribute Set -> Static Mesh Spawner pointing at an engine cube, density scaled by spawn_rate. (6) Drop a PCG volume in the default Open World (WP) level, Generate -> cubes scatter per creature row. (7) Screenshot the viewport (or MRQ `-MoviePipelineConfig` render) to prove the rendered zone. This exercises the four load-bearing links (compiled USTRUCT, scripted DataTable import, PCG DataTable ingestion, rendered output) with zero purchases and only the already-installed toolchain; it deliberately DOES NOT prove the landscape C++ shim, the inference-layer density numbers, or the spine-extractor — the three WALL gaps — which is exactly why it is the honest first test.",
   "stale_or_wrong": [
    "THE big one: every lane doc pins UE 5.8 (translation doc §2.1; template §17 title 'Unreal Engine 5.8 Build Specifications'; Contracts §1.2 supersession note), but the ONLY engine installed on the current machine is UE 5.7 (C:/Program Files/Epic Games/UE_5.7 — no UE_5.8). 5.8 is confirmed real and shipped (official release notes fetched), but it is not present here, so every 5.8-ONLY mechanism the chain routes to is not executable today without an engine install: Epic's first-party Unreal MCP plugin + its PCGToolset + 'PCG graph generation skill' (5.8-only, verified via dev.epicgames.com/unreal-mcp-in-unreal-editor + working-with-pcg-and-llms doc), Mesh Terrain, Movie Render Graph 'Production-Ready', and MetaHuman 5.8 Get/SetFaceModelCoefficients. The deterministic spine, however, is fully 5.7-capable (see executable_now).",
    "UE_BUILD_AUTOMATION §1.1 claims embedded Python 3.11.8 is a 5.8 'jump' from the 3.9.7 that shipped 'through most of the UE5 era' and says to re-verify older scripts against 3.11 — FALSE on this machine: UE 5.7 already ships Python 3.11.8 (verified: Engine/Binaries/ThirdParty/Python3/Win64/python.exe --version). Version-gating the ingest scripts on 5.8 for the Python bump is unnecessary.",
    "NEOSTACK_AI.md §8 states Epic's native MCP plugin ships 'no PCG toolset' and lists only Scene/Actor/Material/Object tools — current official docs contradict the PCG half: a dedicated PCGToolset plugin plus a mandatory 'PCG graph generation skill' DOES ship for the 5.8 MCP (verified via the working-with-pcg-and-llms-using-unreal-mcp doc). The base out-of-box toolsets are indeed narrow (Scene/Actor/Material/Object — confirmed against the unreal-mcp-in-unreal-editor doc), so UE_BUILD_AUTOMATION §3.6 and translation doc §2.3 are the correct account and NEOSTACK_AI §8 is stale on the PCG point specifically.",
    "Contracts §1.14/§1.10 still title NeoStack 'for UE 5.7' and the translation doc treats NeoStack-on-5.8 as the #1 gating spike — but the installed engine (5.7) MATCHES both the contract's stated NeoStack version and NeoStack's own confirmed support range (5.5-5.7, per NEOSTACK_AI §5). On the current machine the NeoStack seam is therefore MORE viable than the 5.8-pinned plan implies: the compat spike only exists because of the 5.8 pin, not because of the hardware."
   ]
  },
  {
   "lane": "Asset generation (T99_Translation_AssetGen + Build Pipeline Contracts §2 \"Meshy Pipeline Contract\" / the ruled local split + Region Page Template Sections 2/3/4/6/7)",
   "doc_state": "MATURE ON RULINGS, THIN ON EXECUTABLE SCHEMA. docs/translation/T99_Translation_AssetGen.md [ACTIVE v1.0] carries the ruled cloud/local/reference-built split (§2 category table), four ruled constraints (unrestricted-by-default; territory-capped=previz-only; real cultural architecture never raw-generated per §17.1; NPCs MetaHuman-first), an honest \"PBR-texture hole\" section (§3), the finishing pipeline (§4.3 Blender-headless + the FBX->UE import leg it OWNS via unreal.AssetImportTask), the 5090-day benchmark protocol (§5), and cultural discipline incl. the photogrammetry-costume rule + capture-rights gate (§6). Contract _source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md §2 header declares Meshy-the-vendor RETIRED (2026-07-15) but keeps all schema commitments binding: 7-category taxonomy (§2.2), mesh_tags object (§2.5), the six required mesh columns (§2.6), the 5-state machine (§2.7), cultural discipline (§2.8). Template T1_Region_Page_Template [ACTIVE v2.0].md Sections 2/3/4/6/7 name the reference-built rule (S7) and Fab/Megascans foliage matches (S2) and the substrate the prompt draws from, but as PROSE, not per-asset structured fields. Golden pages (_source/02_Tier_2_Region_Pages/flores_island.md, bali.md; sumatra_java.md in progress) confirm: rich prose per asset (S6 caci shield WPN_033, S7 mbaru niang reference-built) with zero per-asset mesh-spec block. LIVE REGISTRIES UNDER-BUILT AGAINST §2.6: T0_Weapon_Registry [DRAFT v0.1] carries only mesh_id_ref (1 of 6 required columns); T0_Creature_Roster [DRAFT v0.1] and T0_Vril_Site_Registry [ACTIVE v0.1] carry ZERO mesh columns, and Creature_Roster even lacks the morphology_tags column §2.3 says it reads.",
   "executable_now": [
    {
     "step": "Prototype + test the Blender-headless finishing chain (decimate -> UV unwrap -> stepped _LOD0/_LOD1 chain -> convex-hull collision -> FBX export) against ANY test mesh, no 5090 needed",
     "requires": "Blender installed on the current machine (blender.exe --background --python <script>); a throwaway input mesh (Fab-acquired or a NeoStack passthrough previz output). CPU/scriptable, no high-VRAM GPU.",
     "evidence": "T99_Translation_AssetGen §4.3: finishing stays Blender-headless-scripted with human QC; names Quadify + the Blender MCP server as agent-callable wiring candidates. Not a generation step, so not 5090-gated."
    },
    {
     "step": "Prototype + test the FBX->UE import leg THIS lane owns, writing mesh_id_ref back onto the owning registry row",
     "requires": "Unreal Engine 5.8 installed (confirmed) + embedded Python 3.11; a test FBX from the finishing chain.",
     "evidence": "T99_Translation_AssetGen §4.3 'Seam ownership': owns FBX->UE import via unreal.AssetImportTask + AssetToolsHelpers.get_asset_tools().import_asset_tasks([...]) (filename/destination_path/replace_existing/automated/save), populating mesh_id_ref on success. RESEARCHED_STACK Chain 3: UE 5.8 embedded Python 3.11.8 + headless commandlets confirmed."
    },
    {
     "step": "Run NeoStack Studio -> Meshy/Tripo passthrough previz generation for any category, PREVIZ-TIER ONLY",
     "requires": "NeoStack installed (confirmed) + owned Cloud allowance + internet. Closed-SaaS cloud, no local GPU.",
     "evidence": "T99_Translation_AssetGen §2 'The NeoStack interim': sanctioned interim for every category while the local stack stands up, previz/reference-tier under constraint 1. Q3_REFRESH §2.3."
    },
    {
     "step": "MetaHuman named-NPC authoring in-engine (single-character at minimum) on the current UE 5.8 install",
     "requires": "UE 5.8 in-engine MetaHuman tooling (native since 5.6; batch/parametric Python API since 5.7/5.8) + Epic account + internet; auto-rig/mesh-to-MetaHuman round-trips Epic's CLOUD per character.",
     "evidence": "T99_Translation_AssetGen §1 constraint 4. Web-verified 2026-07: MetaHuman web app sunsets Nov 5 2026 (staged UE4.27-5.1 Apr 5, UE5.2-5.4 Jun 5); in-editor tooling shipped UE 5.7; RESEARCHED_STACK: auto-rig round-trips Epic cloud, hundreds-of-NPCs throughput undocumented (spike)."
    },
    {
     "step": "Fab in Launcher asset acquisition + local socket-export for the reference-built path (foliage, architecture reference kits)",
     "requires": "Epic/Fab account + Fab in Launcher desktop app + PAYMENT for most Megascans (no longer free) - HUMAN-IN-LOOP; no cloud REST API for headless discover/purchase/download.",
     "evidence": "Web-verified 2026-07: Fab exposes only the desktop 'Fab in Launcher' (batch download/export) + a custom-socket-port plugin export to DCC tools (dev.epicgames.com/documentation/fab) - no programmatic acquisition API. Megascans paid since 2025 (only ~1,500 assets free)."
    },
    {
     "step": "GPU-free pre-flight license/release re-checks (§5 pre-flight)",
     "requires": "Internet only. Re-fetch TRELLIS.2 issue #22 and Hunyuan3D-2.1 issue #111; check for newer clean open-weight releases.",
     "evidence": "T99_Translation_AssetGen §5 'Pre-flight (before any GPU time)'. Newly relevant: current TRELLIS.2 (MIT) now advertises CuMesh UV-unwrapping + 'full PBR materials' end-to-end - the §3 'empty set' framing needs a bench-day recheck it did not need at authoring."
    }
   ],
   "parameter_gaps": [
    {
     "step": "Compose the per-asset generation prompt for ANY category (the mesh_tags object is §2.5's PRIMARY prompt-composition input)",
     "missing": "The mesh_tags object (morphology/region/style/material/era) exists in NO consumable form: not a structured block on the region page (template v2.0 has only the Zone Catalog + Derived Indexes, both spatial/spine-derived), and not populated on live registries (Weapon carries only mesh_id_ref; Creature/Vril carry zero mesh columns; Creature_Roster even lacks morphology_tags). An agent given only the page + this doc cannot emit the prompt input the contract names as primary.",
     "severity": "WALL"
    },
    {
     "step": "Route each asset to its ruled backend (cloud MetaHuman vs local-gen TRELLIS/Hi3DGen vs Fab/reference-built vs previz)",
     "missing": "No machine-readable per-asset asset-class / mesh_category tag. The cloud/local/reference-built split lives in PROSE per Section (S7 sentence 'reference-built, never raw-generated'), never as a per-row field. The Zone Catalog 'protected' flag is zone-grain and flags §17.1 protection, not asset routing. The agent cannot deterministically route each asset from the page alone.",
     "severity": "WALL"
    },
    {
     "step": "Reference-build real cultural architecture (the §17.1-critical path) and clear its capture-rights gate",
     "missing": "No reference_image_ref / source-capture FK, and no per-site capture-rights/use_class/consent field on the region page. §2.11 defers reference-image substrate to Phase 6; §6 opens the capture-rights gate as a DISCIPLINE with no schema field to carry it. For real sacred/cultural sites the agent has no field pointing to a permissioned real capture, and cannot distinguish a rights-cleared photo from a prohibited one - nor from AI-generated input (the 'photogrammetry-costume' failure §6 warns against).",
     "severity": "WALL"
    },
    {
     "step": "Drive the Blender finishing chain (decimate target, LOD count) and set the generator target_polycount",
     "missing": "target_polycount, LOD-count, and collision-type budgets per asset class. §2.11 + §4.4 explicitly defer these to Phase 6 (UE5 §1.7 performance budget) and the doc declines to invent them. A human default (a nominal decimate ratio) lets the smoke test proceed, but production budgets are undefined.",
     "severity": "FRICTION"
    },
    {
     "step": "Record the cultural style selection for the §2.8 downstream audit",
     "missing": "The mesh_tags.style enum (realistic-ethnographic / mythologically-stylized / weathered-ancient / ceremonial) per asset. §6 says style 'records in mesh_tags.style for downstream audit,' but no field on the page or registry carries it - the page records a 'represent-with-care posture' only as prose.",
     "severity": "FRICTION"
    },
    {
     "step": "Verify the sanctioned paid rigging gap-filler's shipped-output license (was an open settle-item)",
     "missing": "Nothing missing anymore - RESOLVED by web check: Tripo Pro tier grants full commercial IP ownership of generated/rigged assets (usable in Unreal); Free tier is non-commercial only. The doc's 'read Tripo's shipped-output license at first use / never independently verified' caution (§2 license tail) can be closed at Pro tier.",
     "severity": "POLISH"
    }
   ],
   "gated_5090": [
    "All local geometry generation - TRELLIS.2 (MIT, needs 24GB VRAM min), Hi3DGen (MIT) fallback, Hunyuan3D-2.1 (up to 29GB combined). The current machine's GPU runs 7B/3B LLMs (~8-16GB class) and cannot clear the 24GB floor; the 5090's 32GB clears both. [T99_Translation_AssetGen §4.2 OOM mode; web-verified VRAM floors]",
    "The entire §5 benchmark protocol - wall-clock/peak-VRAM/topology/UV/PBR quality on the ACTUAL 5090 (not the doc's H100/4090 numbers), the decisive per-category default + measured time-to-game-ready.",
    "The PyTorch3D renderer-swap engineering spike at production quality (path (a) for the PBR-texture hole) - needs the 5090 to bench whether the swapped fork clears at measured quality/speed vs falling back to Blender+ArmorLab manual (path (b)).",
    "Bulk asset-gen at real volume (72 weapon base meshes + 132 creatures + 33 familiar species + vril anchors) - VRAM-contention scheduling (§4.2 region-batching) only matters once the local models load on the workstation.",
    "The MetaHuman batch-throughput spike at hundreds-of-NPCs scale (cloud round-trip per character) is better run on the workstation, though a single-character round-trip is testable now."
   ],
   "gated_books": [
    "Low dependency - the asset lane reads REGION PAGES, not raw books, so it is largely independent of the ~3 remaining weeks of scanning. Two soft ties: (1) the §17.1 reference-built architecture path needs capture-rights-cleared real photo sources (Josh's own travel photography / licensed captures are the care-safe input per §6) - a separate, unfunded acquisition backlog. (2) §2.9 Book-Processing linkage: new folklore-creature / historical-figure / architectural-reference entries surfacing from book processing queue new pending-status meshes, so completeness of the Creature/folklore roster (and the full creature asset run) partially trails the ongoing drain - but the pipeline mechanics do not wait on it."
   ],
   "first_smoke_test": "Run ONE fantastical/previz-tier asset end-to-end on the current machine, stubbing only the 5090-gated generation leg - this exercises every leg THIS lane owns and immediately surfaces the schema WALLs. Steps: (1) In NeoStack Studio, generate a previz mesh of a low-risk canonical asset via the Meshy/Tripo passthrough - pick a FANTASTICAL/vril-class prop (no real-world-accuracy or §17.1 architecture constraint; explicitly previz-tier per §2), NOT real cultural architecture. (2) Export the FBX locally. (3) Run the Blender-headless finishing script: decimate to a nominal LOD chain (_LOD0/_LOD1 at ~100%/50% since no real polycount budget exists yet - this is where the target_polycount FRICTION bites), UV unwrap, generate a convex-hull collision, export FBX. (4) Import into the installed UE 5.8 via unreal.AssetImportTask + import_asset_tasks([...]) with automated=True, save=True. (5) On success, write mesh_id_ref back onto the owning registry row (Weapon_Registry already has the mesh_id_ref column; the other five §2.6 columns and mesh_tags do NOT exist to update - that gap is what this test proves). Outcome: proves the finishing + import + registry-writeback seam works on today's hardware, defers generator-quality to the 5090 bench, and yields a concrete list of missing schema fields (no mesh_tags to compose a real prompt, no polycount budget, no asset-routing tag) that must be added before an autonomous asset request is possible. Cost: hours, no new purchases beyond existing NeoStack/UE/Blender installs.",
   "stale_or_wrong": [
    "Region Page Template Section 2 + golden pages (flores S2: 'foliage source-assets favour ... Fab/Megascans matches') implicitly treat Fab/Megascans as a cheap/free reference source. STALE: Epic began charging for Megascans in 2025 - only ~1,500 hand-picked assets remain free; the majority now cost money (still commercially usable under the Fab Standard License in any engine, so a cost axis, not a licensing wall).",
    "The AssetGen doc's §3 'the PBR-texture hole ... an EMPTY SET today' framing predates the current TRELLIS.2, which now advertises CuMesh-based UV unwrapping + 'full PBR materials' end-to-end (MIT code). The nvdiffrast/nvdiffrec non-commercial dependency caveat still holds per the current GitHub license, so the hole is not proven closed - but the doc's own §5 pre-flight recheck is now materially more urgent than at authoring, and the 'empty set' claim should be re-verified against current TRELLIS.2 before being repeated.",
    "The AssetGen doc §2 license tail + RESEARCHED_STACK treat Tripo's shipped-output commercial terms as unverified / a settle-item. NOW RESOLVED (superseded, not wrong): Tripo Pro tier grants full commercial IP ownership of generated + auto-rigged assets, usable in Unreal; Free tier is non-commercial only.",
    "NOT stale (checked, holds): the MetaHuman sunset dates (UE4.27-5.1 Apr 5, UE5.2-5.4 Jun 5, full web-app shutdown Nov 5 2026, 90-day retrieval) are ACCURATE against current sources; in-engine native since 5.6 confirmed. Hunyuan3D-2.1's cap (1M-MAU threshold + EU/UK/South Korea territory exclusion) is CONFIRMED exactly as the doc states, so the previz-only ruling stands."
   ]
  },
  {
   "lane": "Music / Voice / SFX (Audio) — T99_Translation_Audio realizing T1_Build_Pipeline_Contracts §3 AIVA / §4 ElevenLabs / §10 SFX, consuming T1_Region_Page_Template Section 10 + Section 17",
   "doc_state": "Lane is fully documented and unusually current. T99_Translation_Audio [ACTIVE v1.0, flipped 2026-07-15] (docs/translation/T99_Translation_Audio.md, 811 lines) consolidates all three audio contract slots into one doc: Music Steps 1-7, Voice Steps 1-8, SFX Steps 1-6, plus a 15-row spikes/unknowns register (§4) and a 10-step per-region build checklist (§5). Its evidence base, docs/pipeline_review/tech_research/AUDIO_STACK.md (784 lines, live-verified 2026-07-15), is the strongest research brief in the set — every load-bearing vendor claim carries a VERIFIED/INFERRED tag and a fetched primary URL. The contract surface it realizes is ratified in _source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md §3/§4/§10. The input schema it consumes is T1_Region_Page_Template [ACTIVE v2.0].md Section 10 (\"Music Sound and AIVA Composition Brief\") + Section 17. Two golden region pages carry a real, populated Section 10: _source/02_Tier_2_Region_Pages/flores_island.md (lines 297-313) and bali.md. CRITICAL HONESTY NOTE the doc states itself (§5 lines 756-760): T0_Theme_Registry, T0_Voice_Registry, and T0_SFX_Registry are all still Drive-populate-deferred to Phase 5M — so the §5 checklist describes a STEADY-STATE loop, not a today-executable script. The doc is honest to a fault: it marks every proposed-not-ratified field, every unresolved spike, and every cross-pipeline dependency (dialogue line text lives in the unauthored Quest Writing §6).",
   "executable_now": [
    {
     "step": "Generate a real Flores environmental-ambient SFX (geothermal-vent + waterfall-recharge + monsoon-forest bed) via the ElevenLabs Sound Effects API, composing the prompt directly from flores_island.md Section 10 sound-design prose + Section 17. This is the least-gapped, most-automatable audio artifact and produces commercial-clear 48kHz WAV.",
     "requires": "ElevenLabs API key + credits on the CURRENT machine (Free tier = 10k credits ≈ one ~8s effect at 40 credits/sec; a full 30s effect = 1200 credits, so a paid tier for the long one). curl/Python only — no GPU needed (cloud call).",
     "evidence": "Live-verified 2026-07-19 against elevenlabs.io/docs/overview/capabilities/sound-effects.md: 30s max per generation, MP3 for all + WAV@48kHz for non-looping, seamless loop mode, params prompt/duration_seconds(0.1-30)/loop/prompt_influence, 40 credits/sec. Matches AUDIO_STACK §2.1 exactly."
    },
    {
     "step": "Import the generated WAV into UE 5.8 via unreal.SoundFactory using AssetToolsHelpers.get_asset_tools().import_asset_tasks([task]) — the same import pattern already proven for meshes. This closes a real generate->engine seam this week.",
     "requires": "UE 5.8 (INSTALLED on current machine) with the Python Editor Script Plugin enabled. No 5090 needed.",
     "evidence": "Live-verified against dev.epicgames.com/documentation/en-us/unreal-engine/importing-audio-files: .wav/.ogg/.flac/.aif/.opus/.mp3 all supported, any sample rate, internally converted to 16-bit WAV. SoundFactory.automated_import_data class ref confirmed. AUDIO_STACK §3.1 calls this 'a solved, scriptable problem.'"
    },
    {
     "step": "Generate a bulk/ambient-tier NPC voice line locally with Kokoro-82M (placeholder text, since canonical dialogue text is unauthored) to prove the local no-clone voice seam end-to-end into UE import.",
     "requires": "pip install kokoro>=0.9.4 soundfile torch + espeak-ng system package; runs on the CURRENT GPU (82M params, ~2-3GB VRAM) or CPU at real-time. Zero cost, fully offline, no account.",
     "evidence": "Live-verified: hexgrad/Kokoro-82M is Apache 2.0, <2GB VRAM, CPU 3-5x real-time, 54 voices across 8 languages (EN/FR/KO/JA/ZH/ES/HI/pt-BR), 24kHz, NO cloning capability by design. Matches doc §2.4."
    },
    {
     "step": "Manually generate one AIVA music cue from the flores_island Section-10 register brief (e.g. the Ch-3 'highland-ceremonial register, rising at the caci duel') via AIVA's own WEB APP, composer-in-loop — the doc's own §3 Music Step 2 already rules this the interim path since no API exists.",
     "requires": "An AIVA account. Free tier = MP3-only non-shippable smoke test ('Copyright owned by AIVA'). For a SHIPPABLE WAV/stems artifact: AIVA Pro (€33/mo billed annually = €396/yr, 'Copyright owned by YOU'). A HUMAN must map the prose register to AIVA's structured inputs (a preset from 250+, BPM, key, duration) — no agent path.",
     "evidence": "Live-verified aiva.ai/pricing 2026-07-19: Free/Standard retain AIVA copyright, only Pro grants full ownership + all formats incl. WAV. Parameter surface confirmed via 2026 reviews: 250+ preset styles, BPM 40-200, key signature, duration 15s-10min, per-section instrumentation, influence upload. aiva.ai homepage + ToS confirm NO self-serve API (negotiated-enterprise-only)."
    },
    {
     "step": "Run the MetaSound Builder API adaptive-graph scripted spike (a 2-3 layer test) in the installed UE 5.8 editor to observe exactly where automation breaks and hand-authoring begins (doc §4 spike #5).",
     "requires": "UE 5.8 Python (installed) + a hand-made stem set. Current machine sufficient; performance-at-scale validation is 5090 work.",
     "evidence": "MetaSoundBuilderSubsystem.create_source_builder()/add_graph_input_node()/add_node_by_class_name()/audition()/build() confirmed in Epic Python API docs; documented 'Builder API does not currently support variables' limit (AUDIO_STACK §3.2)."
    }
   ],
   "parameter_gaps": [
    {
     "step": "Music Step 2 — AIVA generation",
     "missing": "No self-serve AIVA API exists (confirmed negotiated-enterprise-only, and 'Enterprise' = 3+ employees AND $300k+ revenue — a solo dev may not qualify). An autonomous agent literally cannot submit a generation programmatically; the canonical-theme track is human-in-web-app only.",
     "severity": "WALL"
    },
    {
     "step": "Music Step 1->2 — brief-to-parameter mapping",
     "missing": "Region page Section 10 and the template both carry only PROSE registers ('survival-horror-opener register, low and tense, rising'), never AIVA's actual required inputs: which of the 250+ presets, BPM (40-200), key signature, or exact duration-in-seconds. An agent has no value to pass; a human maps it trivially.",
     "severity": "FRICTION"
    },
    {
     "step": "Music Step 4 / Step 6 — adaptive layering",
     "missing": "No T0 registry field carries tempo, bar-length, or stem-role/layer-name metadata. T0_Theme_Registry.theme_substrate has mood/instrumentation/cultural/era/recurrence but nothing MetaSounds+Quartz needs to consume a cue as a TRUE adaptive layer. Marked PROPOSED-NOT-RATIFIED (doc Music Step 4; AUDIO_STACK §3.3; §4 spike #4).",
     "severity": "WALL"
    },
    {
     "step": "Music — config prerequisite",
     "missing": "AIVA Pro subscription (€396/yr) is a hard gate for any shippable/WAV/stems output; nothing generated below Pro can ship.",
     "severity": "FRICTION"
    },
    {
     "step": "Voice Step 3 / Step 5 — line generation",
     "missing": "The actual dialogue LINE TEXT does not exist anywhere. dialogue_dataset_ref is populated by the UNAUTHORED Quest Writing Pipeline §6. Voice Step 1 only derives WHO speaks, never WHAT — so no real canonical voice line can be generated for any character today.",
     "severity": "WALL"
    },
    {
     "step": "Voice Step 4 — hero clone gate",
     "missing": "ElevenLabs Professional Voice Cloning requires the voice OWNER to record a voice-CAPTCHA read-aloud for identity verification — not agent-automatable. (The §4.4.1 gate's pure-synthetic default sidesteps this, so it is not a blocker for the default path.)",
     "severity": "FRICTION"
    },
    {
     "step": "Voice Step 5 — per-line asset naming",
     "missing": "No source specifies the per-line file-naming key below voice_id; the dialogue-dataset line-id format is unauthored Quest Writing §6 territory (doc §4 spike #9).",
     "severity": "FRICTION"
    },
    {
     "step": "Voice — localization",
     "missing": "Kokoro covers only 8 languages (now confirmed) vs the ship-everywhere mandate; the spoken-VO localization tiering strategy is an unresolved JOSH-RULES item (doc §4 spike #8). Not blocking a first artifact.",
     "severity": "POLISH"
    },
    {
     "step": "SFX Step 1 — bank plan",
     "missing": "Creature vocalization (132-creature bestiary) has NO home category: §10.3's per-category dependency list never names T0_Creature_Roster under any of the six SFX categories. An agent cannot place creature SFX (doc §4 spike #13).",
     "severity": "FRICTION"
    },
    {
     "step": "SFX Step 6 — UE import path",
     "missing": "Unlike music (/Game/Audio/Cues/...) and voice (/Game/Audio/Voice/...), no in-project UE5 Asset Registry path convention exists for SFX; only the build-asset-STORE path is stated. Proposed /Game/Audio/SFX/... is PROPOSED-NOT-RATIFIED (doc §4 spike #15).",
     "severity": "POLISH"
    },
    {
     "step": "All three chains — registry population",
     "missing": "T0_Theme_Registry, T0_Voice_Registry, T0_SFX_Registry are all still Drive-populate-deferred to Phase 5M. Fine for one-off smoke artifacts; a WALL for the schema-bound at-scale loop the doc's §5 checklist describes.",
     "severity": "FRICTION"
    }
   ],
   "gated_5090": [
    "ACE-Step 1.5 / YuE bulk instrumental music generation — YuE needs ~24GB VRAM full-pipeline and ACE-Step XL needs >=12-20GB; the current GPU (7B/3B-class) is insufficient. These are the bulk regional/chapter-theming lane (Music Step 3) and belong on the 5090.",
    "The instrumental-orchestral benchmark-gate (AIVA vs ACE-Step vs YuE vs HeartMuLa on a fixed test set) — doc §4 spike #2; explicitly a 5090-local run, since no independent instrumental-orchestral quality evidence exists for any of the three open models.",
    "MOSS-SoundEffect v2.0 (1.3B, Apache 2.0) and Stable Audio Open local SFX generation at batch scale — the SFX generative-fill lane (SFX Step 3); runnable in principle but budgeted for the 5090 at volume.",
    "Demucs orchestral-section stem-separation fitness benchmark (doc §4 spike #3) — before Demucs is trusted to retrofit stems from any bulk-lane mixdown for adaptive layering.",
    "Kokoro bulk-throughput at full per-chapter / per-region NPC-roster scale (doc §4 spike #7) — single lines run on the current machine THIS WEEK, but the full-roster batch and its throughput validation belong on the 5090.",
    "Runtime performance-budget validation of the MetaSounds/Quartz adaptive graphs (memory footprint, decode cost of Bink vs PCM at scale) — the incoming workstation is the stated home for performance-budget validation."
   ],
   "gated_books": [
    "Cultural-authenticity verification substrate for the high-care audio set — Sámi joik (Ch 29), Vodou drum/chant (Ch 42), Aboriginal songline (Ch 57) — the §3.8/§4.8/§10.8 'documented instrumentation/accent register per primary-source corpus, no stereotype pastiche' audit needs verification-grade primary sources for those specific cultures, which may sit in Josh's ongoing ~3-week scan rather than the already-drained corpus.",
    "NOTE — audio is markedly LESS book-gated than the other lanes: the region page Section 10/17 substrate is already authored INTO the page from prior research (flores_island Section 10 names the gong-waning ensemble, the caci ceremonial drumming, Thread-21 vril-active instrument), and the owned 246-book corpus is already drained and queryable, so a first Flores SFX/music artifact needs NO new books. The book dependency is verification-grade, not generation-grade, and only bites at the high-care regions."
   ],
   "first_smoke_test": "CHEAPEST END-TO-END, RUNNABLE THIS WEEK ON THE CURRENT MACHINE: an ElevenLabs SFX -> UE 5.8 import round-trip grounded in the real flores_island Section 10/17 substrate. Steps: (1) Read flores_island.md Section 10 sound-design line (lines 311-313: 'geothermal-vent and waterfall and monsoon-forest ambient') + Section 17 environmental-audio substrate. (2) Compose an ElevenLabs SFX prompt, e.g. 'continuous geothermal vent hiss under dense monsoon rainforest ambience, distant waterfall' with duration_seconds=30, loop=true, prompt_influence=high. (3) POST to the ElevenLabs sound-effects endpoint with your xi-api-key header (a paid tier for the full 30s = 1200 credits; or a short ~5s clip fits the Free 10k-credit tier); receive a 48kHz WAV. (4) In the INSTALLED UE 5.8 (Python Editor Script Plugin on), run unreal.AssetToolsHelpers.get_asset_tools().import_asset_tasks([task]) with a unreal.SoundFactory to import the WAV to /Game/Audio/SFX/environmental_ambient/. You now have a real, commercial-clear, canon-substrate-grounded audio asset living in-engine. This proves the entire standard-track generate->import seam with zero 5090 dependency and near-zero cost. WHY NOT THE MARQUEE AIVA TRACK: the AIVA path (the mission's example) IS doable this week but only MANUALLY (no self-serve API), needs a €396/yr Pro subscription for a shippable WAV, and forces a human to invent the BPM/key/duration/preset the Section-10 prose brief does not carry — so it surfaces the parameter gap rather than closing a clean automated loop. WHY NOT KOKORO FIRST: it is $0 and fully local (even cheaper), but a REAL canonical voice line is WALL-blocked on dialogue text that the unauthored Quest Writing §6 must supply — a Kokoro run this week can only synthesize a placeholder, not a canon artifact.",
   "stale_or_wrong": [
    "Nothing in the repo docs is contradicted by current official documentation — the lane was live-verified 2026-07-15 and re-verified 2026-07-19 holds up: AIVA tiers/pricing (Free/Standard retain copyright, Pro €33/mo billed annually grants full ownership + WAV), AIVA still has NO self-serve API (negotiated-enterprise-only), ElevenLabs SFX (30s/48kHz WAV/loop mode/40 credits-per-sec), and Kokoro (Apache 2.0, 82M, no cloning) are all exactly as the docs state.",
    "ONE ITEM RESOLVED, NOT CONTRADICTED: doc §2.6 and §4 spike #7 flag 'Kokoro's language coverage against the ship-everywhere mandate is UNCONFIRMED by any source read.' Now confirmed: Kokoro v1.0 ships 54 voices across 8 languages (English, French, Korean, Japanese, Mandarin, Spanish, Hindi, Brazilian Portuguese) at 24kHz. This is a real shortfall against a ship-everywhere mandate (well under the game's cultural spread), so the spike should be updated from 'unconfirmed' to 'confirmed 8-language ceiling — insufficient for full localization, adequate for a first artifact.'",
    "MINOR NUANCE (not an error): AIVA's per-tier DOWNLOAD track-length cap (Pro 5:30) is distinct from the composer's DURATION control (reviews report 15s-10min); the doc's '5:30' figure is the correct download-cap, but a reader should not confuse it with the generatable length."
   ]
  },
  {
   "lane": "cinematic",
   "executable_now": [
    {
     "step": "Author one scene_type template Level Sequence in installed UE 5.8, then run a headless Python driver (-run=pythonscript) that reads a Section-13 scene row, duplicates the template, binds placeholder actors, adds a spawnable camera+cut track, sets playback range, saves.",
     "requires": "UE 5.8 installed + Python Editor Script Plugin; one hand-authored template. No 5090/internet.",
     "evidence": "Live-verified 5.8 Sequencer Python page: create_asset(LevelSequenceFactoryNew), create_camera(spawnable=True), add_actors, convert_to_spawnable."
    },
    {
     "step": "Headless MRQ QA-render of the sequence to 1280x720 video.",
     "requires": "Any editor-capable GPU; a MoviePipeline preset; a MapName.",
     "evidence": "UE_BUILD_AUTOMATION Sec6.3 verbatim UnrealEditor-Cmd MRQ command, official 5.8 doc."
    },
    {
     "step": "Create ONE MetaHuman + test audio-driven facial from a placeholder SoundWave and body retarget of stock anim.",
     "requires": "Internet (cloud auto-rig/texture); MetaHuman Creator plugin; a placeholder SoundWave (real voice = pending audio lane).",
     "evidence": "MetaHuman 5.8 release notes: audio-driven real-time model, Python-automatable."
    },
    {
     "step": "Ingest Section-13 rows as a UDataTable and run -run=DataValidation over cinematic assets.",
     "requires": "One C++ USTRUCT:FTableRowBase (codegen-able); CSVImportFactory via commandlet.",
     "evidence": "UE_BUILD_AUTOMATION Sec4.3, Sec1.3."
    },
    {
     "step": "Prototype DT_SceneDispatch + a stub WorldStateSubsystem to exercise path-conditional selection (non-canon until spike 3/7).",
     "requires": "A dispatch USTRUCT + FDataTableRowHandle; a throwaway subsystem stub.",
     "evidence": "Doc Sec3 Step5; UE_BUILD_AUTOMATION Sec7.6."
    }
   ],
   "doc_state": "Well-documented lane. Translation Doc ACTIVE v1.0: docs/translation/T99_Translation_Cinematic.md (6-step chain, 12-spike register, per-region checklist). Contract: T1_Build_Pipeline_Contracts [ACTIVE v1.0] Sec5. Schema: docs/SPINE_SCHEMA_v3.md Sec3d = 7-col scene row (scene_anchor_id|beat_ref|scene_type|path_bucket|anchor_type|participant_refs|hard_line_relevance); intent-trio defers downstream. Rows REAL/populated: docs/spine/CH_76.md 5 typed rows, uniform across 79 nodes. Page-side: T1_Region_Page_Template v2.0 Machine Blocks Scene index; flores_island.md line78 carries it. Registries: T0_Scene_Spec_Registry ACTIVE v0.1 = 17-line POPULATE scaffold; T0_Character_Index v1.1 164 rows (CHAR_0004 resolves); audio regs are DRAFT stubs (Voice/Theme), SFX ACTIVE v1.0. Tech: UE_BUILD_AUTOMATION.md Sec5/6.",
   "parameter_gaps": [
    {
     "step": "Step4 assembly (headline)",
     "missing": "No scene_type -> shot-grammar mapping exists. Camera blocking/timing/cut rhythm absent from the row and unspecified by the Doc; deferred to 11 per-scene_type templates that must be hand/NeoStack-authored. Agent with only Scene index + Doc cannot author a finished cinematic (UE_BUILD_AUTOMATION Sec6.4: biggest gap).",
     "severity": "WALL"
    },
    {
     "step": "Step2 participant resolution",
     "missing": "No CHAR_id -> MetaHuman asset-path lookup anywhere; depends on UE5_Build Step7 building MetaHumans + emitting stable IDs. No UE build has run; assets do not exist.",
     "severity": "WALL"
    },
    {
     "step": "Step2 dialogue/audio",
     "missing": "Scene row has NO dialogue-line/audio ref; audio track cannot populate, audio-driven facial cannot drive. SoundWave from unauthored ElevenLabs lane. Genuine schema gap.",
     "severity": "WALL"
    },
    {
     "step": "Step5 variants",
     "missing": "convergence_node_scene_dispatch schema unratified (spike7); ws.* WorldStateSubsystem does not exist (spike3). Every LOCKED/path-conditional scene (all CH_76, CH_77 gloss, post-lock) cannot clear.",
     "severity": "WALL"
    },
    {
     "step": "Step6 trigger",
     "missing": "Boss cinematics fire off a boss combat-state event no boss-AI framework yet emits (spike4).",
     "severity": "WALL"
    },
    {
     "step": "Steps1/3 ambient",
     "missing": "Ambient rows carry no beat_ref; beat->site->region join has nothing to join from; no substitute specified (spike6). Latent today.",
     "severity": "WALL"
    },
    {
     "step": "Step2 animation",
     "missing": "Body-perf needs a mocap/retarget library that does not exist (spike9); bespoke non-audio hero-beat has no pipeline (spike2).",
     "severity": "WALL"
    },
    {
     "step": "Step3 site edge",
     "missing": "Beat site:none has no map anchor; chapter-home fallback unconfirmed.",
     "severity": "FRICTION"
    },
    {
     "step": "Step4 VFX track",
     "missing": "Native Python class for a Sequencer VFX/Niagara cue unconfirmed (spike5).",
     "severity": "FRICTION"
    },
    {
     "step": "Step4 audio track",
     "missing": "Official 5.8 Sequencer page does NOT document MovieSceneAudioTrack (fetch-confirmed); add-call is VERIFIED-class/INFERRED-call.",
     "severity": "FRICTION"
    },
    {
     "step": "Step2.5 localization",
     "missing": "FText/UStringTable gather-commandlet mechanism unconfirmed (spike11).",
     "severity": "FRICTION"
    },
    {
     "step": "Step6 bookends",
     "missing": "Pre-rendered vs realtime for bookends unresolved (spike12).",
     "severity": "POLISH"
    }
   ],
   "gated_5090": [
    "Render fidelity validation: Lumen, Nanite, strand groom hair at LOD0 close-ups (VRAM-bound per Sec5.5). Current GPU = low-res QA only.",
    "Performance-budget validation of many simultaneous MetaHumans (groom/VRAM-bound) + the Experimental MetaHuman Crowd plugin.",
    "Full-region batch MRQ dailies across all scene rows at review resolution.",
    "Local batch MetaHuman generation at roster scale."
   ],
   "gated_books": [
    "Cinematic lane is NOT meaningfully gated on book processing; only touchpoint is the batch cultural-authenticity audit (Contract Sec5.8), covered by the already-drained 246-book corpus.",
    "Real cross-lane WALL is the AUDIO lanes: ElevenLabs/AIVA/SFX Translation Docs unauthored, Voice/Theme registries unpopulated. No audio-bearing FINAL cinematic can complete until those land; silent/placeholder assembly is testable now."
   ],
   "first_smoke_test": "This week, current machine, independent of ws.* subsystem/audio lanes/MetaHuman cloud/boss-AI: (1) Pick one simple row (per_chapter_cutscene or ambient_cinematic from an early node, or a Flores Scene-index row). (2) In UE 5.8 hand-author ONE minimal scene_type template Level Sequence: spawnable camera+cut track via create_camera(spawnable=True) + two empty binding slots. (3) Run a Python driver headless (UnrealEditor-Cmd.exe <proj>.uproject -run=pythonscript -script=drive.py): read scene_type+participant_refs, duplicate template to /Game/Cinematics/Scenes/<cat>/LS_<scene_anchor_id>, bind two STOCK actors (mannequin/cube placeholders, no MetaHuman/cloud), set playback range, save. (4) Headless MRQ render at 1280x720 (Sec6.3). Success = a video with placeholders on the templated camera. Exercises Step1 parse, Step2 binding, Step4 populate, Step6 delivery; surfaces the headline WALL that scene_type->shot-grammar is the real gate, not plumbing.",
   "stale_or_wrong": [
    "Doc Sec2 treats batch audio-driven MetaHuman facial as a fully solved lever; 5.8 release notes ship it as a real-time model but do NOT declare the batch-API maturity, and Epic's roadmap still tags audio-driven animation [Experimental]. Verify before roster-scale. All other lane tool claims (UE 5.8, LevelSequenceEditorSubsystem create_camera/add_actors/convert_to_spawnable, MRQ CLI, MetaHuman in-editor) verify cleanly vs live 5.8 docs.",
    "Doc Sec2.6 says T0_Theme_Registry/T0_Voice_Registry are not yet created; they now exist as DRAFT v0.1 stubs (Voice 11 lines, Theme 13), SFX ACTIVE v1.0. Correct in spirit (unpopulated), stale in wording."
   ]
  },
  {
   "lane": "quest writing (Contracts §6 + region-template Section 13 + the v3 spine typed graph)",
   "doc_state": "Contract fully written at prose grain: `_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md` §6 (lines 1312-1610). Registry EXISTS and conforms: `registries/T0_Quest_Definition_Registry [ACTIVE v1.0]/T0_Quest_Definition_Registry.csv` (27-col schema) but holds only 16 rows, ALL endgame/hard-line (Ch 55/58/76/77 + Prologue + Epilogue). ZERO per-chapter, trade, SQ, weapon-bond, familiar-bond, or regional rows. `T0_Questline_Index [DRAFT v0.1]` and `T0_Quest_Seed_Registry [DRAFT v0.1]` are 0-row stubs (docs/FOUNDATION_ENHANCEMENT_ROADMAP.md P2 lines 466-471). Structure source rich + present: docs/spine/CH_02.md (v3.1 typed beat graph §10, fork graph §10b w/ FORK_CH02_A, side-questlines §11, dialogue/scene anchors §13) + docs/SPINE_SCHEMA_v3.md (integrity two-axis table L1-L5; six-option vocab §3c {TRULY_GOOD,TRULY_BAD,SYMPATHETIC,DETACHED,CURIOUS,DEFIANT}; SIX-OPTION-7 fork-table w/ load-bearing six_option_slot). Region substrate present: `_source/02_Tier_2_Region_Pages/flores_island.md` Section 12 (cast w/ CHAR ids) + Section 13 (quest framework, side-quest seeds, convergence feed) + Section 14 (trade seeds); bali.md + sumatra_java.md present. RCM Ch 2 present (T1_Research_Corpus_Master lines 81, 1984). Drive->repo mapping in docs/PIPELINE_ADAPTER.md §6 (lines 116-126, 249-255); E4 lane in docs/MILESTONE_BUILD_PIPELINE.md line 46. NO quest gate in harness/gates_config.json (16 gates, none quest-specific); reveal_discipline targets docs/spine ONLY, not quest text or dialogue datasets.",
   "executable_now": [
    {
     "step": "Author the Ch 2 per-chapter main-story quest decomposition as new T0_Quest_Definition_Registry rows (quest_id, quest_anchor_id, quest_beat_structure, branching_logic, dialogue_trigger_anchors, participant_entity_refs, path_bucket=UNLOCKED, hard_line_relevance) from the CH_02 spine beat graph (section 10) + FORK_CH02_A + flores_island.md Section 13.",
     "requires": "Nothing beyond the repo + one Opus authoring pass in this Claude Code session (the Quest Writer LLM IS Claude; Anthropic API access present by definition). No external tool, no 5090, no un-owned books.",
     "evidence": "Section 6.4 standard-quest-track is 'Quest-Writer-agent-only' (no per-quest author-in-loop). Section 6.3 lists exactly the reads (spine, Chapter_Index, Character_Index, region Section 13/14) — all present. All 13 section-6.3 input registries are live repo CSVs (PIPELINE_ADAPTER.md line 126)."
    },
    {
     "step": "Repeat for Ch 3-5 (SPIKE band): Ch 3 from flores_island.md + CH_03.md; Ch 4 Bali from bali.md + CH_04.md; Ch 5 from CH_05.md + sumatra_java.md.",
     "requires": "CH_03/04/05 spine entries + the three region pages (bali.md + sumatra_java.md confirmed present). Opus authoring pass.",
     "evidence": "Region-pages dir shows bali.md + sumatra_java.md; spine dir shows CH_01..CH_17+; Section 6.2 'Main Story Per-Chapter Quests' is a standard-track category."
    },
    {
     "step": "Produce at least one sample dialogue_dataset artifact (six_option_array node + line_variant_array with per_line_direction_notes incl. audio_tags) to prove the spine->registry->dialogue-file round-trip.",
     "requires": "A provisional file-format+extension decision (JSON natural) since the contract leaves it unpinned — see parameter_gaps. Otherwise fully authorable now.",
     "evidence": "Section 6.5 enumerates every dialogue_dataset sub-field. Spine section 3c gives the six-option vocabulary + collapse-map rule. ElevenLabs v3 audio_tags confirmed current (elevenlabs.io/v3, public API)."
    },
    {
     "step": "Run a fresh-context adversarial critic (normalize-doc skill) over authored quest content for reveal-discipline (Ch 2 HELD — no House-of-Velheim name/pattern) and cultural care (polo vs dukun, Ebu Gogo).",
     "requires": "normalize-doc skill (present) + Opus critic subagent.",
     "evidence": "Section 6.8 batch-level cultural-authenticity audit for standard track; CLAUDE.md standing normalization gate; memory parallel-prose-fanout-needs-verify (gates can't catch reveal leaks)."
    },
    {
     "step": "Refresh docs/fidelity_baseline.json after adding rows so the fidelity gate stays green.",
     "requires": "harness/registry_fidelity.py --emit-baseline (present) in the same commit.",
     "evidence": "CLAUDE.md 'any registry edit must refresh it via --emit-baseline in the same commit'; memory gate-verification-gotchas (run run_gates.py UNPIPED)."
    }
   ],
   "parameter_gaps": [
    {
     "step": "Serialize the dialogue_dataset output artifact",
     "missing": "The dialogue_dataset FILE FORMAT and extension are unpinned by the contract ('DD_<char>_<quest>.<file_extension>', section 6.4 / L1568 / L1580; PIPELINE_ADAPTER.md line 255 'pin extension and format together at the first quest authored'). Section 6.5 lists sub-fields but no serialization (JSON/YAML/custom). Cannot emit the file without inventing the format.",
     "severity": "WALL"
    },
    {
     "step": "Land the dialogue_dataset file",
     "missing": "Where output lands: the contract path '/04-Quest Writing/Dialogue Datasets/' is a DEAD Google-Drive path (canon migrated off Drive). The repo replacement 'canon/dialogue_datasets/' is an un-ratified [PROPOSAL - JOSH] (PIPELINE_ADAPTER.md line 120); the dir does not exist and the build-asset root is unconfirmed (adapter line 300).",
     "severity": "WALL"
    },
    {
     "step": "Author line_variant_array condition_expression (runtime branch conditions)",
     "missing": "The condition_expression GRAMMAR is undocumented (section 6.11 open item; adapter line 126). Section 6.5 names operands (integrity_score range, path_bucket, biography_state, age_stage, appearance_score, relationship_history) but no expression syntax exists, so runtime-evaluable conditions cannot be written deterministically.",
     "severity": "WALL"
    },
    {
     "step": "Decompose a chapter into quest rows",
     "missing": "No per-chapter quest_anchor rows exist for Ch 2-5 AND the contract gives no decomposition RULE (quests-per-chapter count; opening/pivot/closing granularity; which beats map to which anchor). Agent must invent the breakdown; a human default ('one main quest tracking the beat graph + the region-page side-quest seeds') rescues it.",
     "severity": "FRICTION"
    },
    {
     "step": "Map dialogue choices to the integrity system",
     "missing": "Three overlapping value vocabularies with no global reconciliation: six dialogue options (section 3c), three path_buckets, and direction {generative/neutral/corrosive}+five bands. Section 6.11 flags 'six_option_array ... Reconciliation with T1_IPW canonical voice system authority' UNRESOLVED. The six_option_slot->outcome collapse-map is authored per-fork in the spine, not globally.",
     "severity": "FRICTION"
    },
    {
     "step": "Write the integrity-delta a choice yields",
     "missing": "Schema stores 'integrity_score range' (numeric; spine v3 gives scale L1 +60..+100 .. L5 -100..-60) but forks author 'direction + class-bounded delta' with magnitude CLASSES {FOUNDATIONAL/SUBSTANTIAL/ACCUMULATIVE/SIGNATURE}; per-class numeric delta values are not pinned, so the score a choice produces is not computable.",
     "severity": "FRICTION"
    },
    {
     "step": "Fill spatial_requirements_array",
     "missing": "required_zone_type enum (align to T0_Region_Index canonical_zones terrain_type) and encounter_mode_tag enum (Pillar 1.12 mode-variety) both UNRESOLVED at Schema Dictionary (section 6.11). Spine section-3b site rows give terrain values but enum-membership is unverifiable.",
     "severity": "FRICTION"
    },
    {
     "step": "Verify authored quest content automatically",
     "missing": "NO quest gate exists (16 gates, none quest-aware). Nothing checks participant_entity_refs FK validity, dialogue_dataset_array resolution, three-ending path-bucket completeness, hard_line_relevance presence, or six-option completeness. reveal_discipline targets docs/spine ONLY — authored quest text/datasets get NO reveal-leak gate; only the fresh-context critic + CSV fidelity/registry_extensions apply.",
     "severity": "FRICTION"
    },
    {
     "step": "Assign quest_id",
     "missing": "quest_id canonical format waits on the entity_id universal spec (section 6.11 / Buildability P0; adapter line 126). Worked examples exist in section 6.5 so the pattern is followable.",
     "severity": "POLISH"
    },
    {
     "step": "Emit localizable dialogue strings",
     "missing": "NO string-table id concept exists in contract or repo (grep = 0 hits). line_text stored inline; no localization-key naming scheme. Per-language variants deferred-by-design to post-vertical-slice localization (section 6.11) so single-language SPIKE output is fine, but the eventual UE5 String Table key discipline is unspecified.",
     "severity": "POLISH"
    }
   ],
   "gated_5090": [
    "Nothing in quest AUTHORING is 5090-gated — it is pure LLM authoring that runs on the current machine now (paid Opus per CLAUDE.md; local 14B may do draft-tier bulk triage but NEVER canon-quality authoring/verification per the BAR rule).",
    "PRODUCTION-scale volume (77-chapter main story + 120 trade-tier gates + 12 SQ x stages + 72 weapon-bond + 22 familiar-bond series + the full regional set) is where the 5090 helps — local draft-tier pre-drafting and local bulk FK/consistency validation at scale — but the quality bar stays on paid Opus.",
    "Local embedding / cross-quest voice-consistency and dialogue-dataset dedupe over the full authored quest corpus is a natural 5090 job (RAG/embeddings, not authoring)."
   ],
   "gated_books": [
    "The Ch 2-5 SPIKE is NOT book-gated: Flores substrate (Forth 'Beneath the Volcano' + 'Images of the Wildman', Allerton 'Potent Landscapes', ethnobotany SRC_00483) is already in the drained owned corpus (246 region-tagged books, queryable now); Bali/Java region pages already exist.",
    "PRODUCTION regional + main-story quest authoring for the section-6.8 high-care chapters (Ch 29 Sami, 42 Haiti, 57 Australia, 11, 12, 13, 47-48, 50) is gated on those region pages reaching Build-Ready, which for un-owned high-care sources depends on the ~3 remaining weeks of scanning (most non-high-care sources are deep-research-synthesized per docs/BOOK_ACQUISITION.md, not book-gated).",
    "Structural gating (section 6.6): per-region quest batch authoring TRIGGERS on region-page Build-Ready — so books gate the region pages, and the region pages gate the regional quest set. The main-story/hard-line quest set is spine-gated, not book-gated."
   ],
   "first_smoke_test": "This week, current machine, no ElevenLabs/UE5/5090/new-books: (1) Pick ONE Ch 2 main-story quest anchor from the CH_02 spine beat graph — e.g. QUEST_CH02_HOLLOW_HUNTER (quest_type main_story_per_chapter, chapter 2, path_bucket UNLOCKED, participant_entity_refs [CHAR_0001, CHAR_0008], beats CH02_B07->B08, dialogue_trigger_anchors bound to SC_CH02_freeing_the_hunter, hard_line_relevance 'reveal HELD — no House-of-Velheim name/pattern; polo the corrupting agency, not a living dukun'). Append it as ONE row to the T0_Quest_Definition_Registry CSV. (2) Author ONE dialogue_dataset — provisionally DD_CHAR_0008_QUEST_CH02_HOLLOW_HUNTER.json under a new canon/dialogue_datasets/ — with a single six_option_voice_response node carrying all six slots {TRULY_GOOD,TRULY_BAD,SYMPATHETIC,DETACHED,CURIOUS,DEFIANT} and one line_variant per slot with per_line_direction_notes (emotion_direction + audio_tags). (3) Run `python harness/registry_fidelity.py --emit-baseline` then `python harness/run_gates.py` UNPIPED to confirm the row conforms and the baseline refreshes green. (4) Run a normalize-doc fresh-context critic over the quest+dataset for Ch-2 reveal-HELD discipline and polo/dukun care. (5) Manually confirm participant_entity_refs resolve against T0_Character_Index. This single pass exercises the whole lane end-to-end and forces the three WALLs to a decision at minimum cost: it makes Josh pin (a) the dialogue-dataset format+extension, (b) the canon/dialogue_datasets/ landing path, (c) the condition_expression grammar — the exact three blockers, none of which need hardware or acquisition.",
   "stale_or_wrong": [
    "Contract section 6.4/6.11 dialogue-dataset Drive path '/04-Quest Writing/Dialogue Datasets/' is DEAD — canon migrated out of Drive into the repo; adapter re-maps to 'canon/dialogue_datasets/' but only as an un-ratified proposal.",
    "Contract section 6.3/6.4/6.6 repeatedly read 'T8 region page Section 14 NPC dialogue substrate' — but template v2.0 Section 14 is 'Trade Skills, Detailed Content'; NPC/dialogue substrate is not a discrete section (the cast lives in Section 12). The 'Section 14 NPC dialogue' the contract points quest authoring at does not exist as written.",
    "Contract section 6.4.1 / status machine 'author reviews at the Drive doc surface' / 'under review at Drive doc' — no Drive exists; reviews are repo branch diffs (PIPELINE_ADAPTER.md line 121).",
    "SPINE_SCHEMA_v3 section 1 ratification action notes the contract still carries stale ending vocabulary to grep-fix (section 6.2 'Neutral/Bad ending'); the LIVE registry CSV is already reconciled to {TRULY_GOOD,GOOD_ENOUGH,EVIL,UNLOCKED,ALL}, so the prose lags the data.",
    "ElevenLabs v3 audio_tags (the per_line_direction_notes.audio_tags field the quest lane authors) is CONFIRMED CURRENT and real (public API), so NOT stale — but v3 is alpha/research-preview as of 2026 and audio tags are free-form bracketed strings, not a fixed enum; the contract phrase 'ElevenLabs v3 emotion control schema' implies a formalism that does not exist."
   ]
  },
  {
   "lane": "combat / physics / runtime systems — the design-to-engine gap",
   "doc_state": "Design layer is DEEP and largely coherent; the engine/pipeline layer is ABSENT. In-repo: docs/COMBAT_ENCOUNTER_SYSTEM.md (508 lines — encounter taxonomy, boss-as-system, Composure, ~30 clocks, vril-density dial, win/death economy, full canon audit + 12 named gaps), docs/RUNTIME_GENERATIVE_LAYER.md (696 lines — the generative/deterministic split, 6 entity-class strategy-token taxonomy, on-device sizing/quant/scheduling), docs/RUNTIME_GUARDRAIL_ARCHITECTURE.md (220 lines — the 4-stage sandwich, constrained decode, F1-F10 discipline), docs/proposals/systems/WS7_WIRING_BUILD_PLAN.md (anchor schema for vehicles/minigames/environment-grammar/companion-loyalty/attackability/base-building landed gate-green, values Josh-pending). CRITICAL GAP confirmed: there is NO combat/systems Translation Doc — docs/translation/ holds exactly five (AssetGen, Audio, Cinematic, Terrain, UE5_Build). And the contract 'T1_Build_Pipeline_Contracts [ACTIVE v1.0]' has NO combat/runtime pipeline section — its ten sections are UE5/Meshy/AIVA/ElevenLabs/Cinematic/Quest/RegionPage/Book/Spine/SFX; combat exists only as a sub-bullet in §1.2 (UE5 'Combat System' subsystem) and a one-line §1.3 dependency. The Boss_Encounter registry has 0 data rows and a schema scope-locked for 100-player MMO world bosses, not the 75 solo rows the proposal (boss_roster_rows.json) needs (COMBAT_ENCOUNTER_SYSTEM.md Gap 3.2). All combat numbers deferred to a Phase-5M balance audit that has never run. recall.py and the 'recall packs' exporter that the entire runtime context-pack architecture consumes do NOT exist on disk (RUNTIME_GENERATIVE_LAYER.md §C note; RUNTIME_GUARDRAIL_ARCHITECTURE.md §9). canon_graph.json (3,118 nodes) IS live on disk.",
   "executable_now": [
    {
     "step": "Build a UE 5.8 greybox arena with one boss-as-system prototype on the Gameplay Ability System: model Composure and vril_density as GAS AttributeSets, the integrity-band and dial modifiers as GameplayEffects (the ±% shapes in COMBAT_ENCOUNTER_SYSTEM.md §4.8/§1.5 are illustrative but buildable), boss verbs as GameplayAbilities, phase state as GameplayTags, and VFX/SFX as GameplayCues. This is the natural engine home for 'blended never single-mode' + the integrity-mirrored damage formula.",
     "requires": "UE 5.8 already installed (confirmed on the current machine); no new install. Author against GAS AttributeSets/GameplayEffects — AVOID the legacy AttributeSet-initialization functions that 5.8 deprecates for 5.9.",
     "evidence": "UE 5.8 GAS docs live (dev.epicgames.com 'Understanding the Gameplay Ability System', 5.8); search-confirmed that legacy attribute-set-init GAS functions show deprecation warnings in 5.8 with 5.9 migration guidance. Maps to COMBAT_ENCOUNTER_SYSTEM.md §1.5 (integrity-band × sigma damage formula) + §5 (Composure)."
    },
    {
     "step": "Author the boss AI + the ~30 combat clocks (tell windup, cooldown, punish window, add-wave, Withdrawal clock, aggression meter) as StateTree tasks/conditions, with player_habit_vector as a rolling-histogram component that biases a Sigma-bounded move-selection table. Prove habit-vector adaptation (roll-spam → baited sweep) in the greybox.",
     "requires": "UE 5.8 (StateTree ships enabled). No GOAP plugin exists first-party — use StateTree (or Behavior Tree) + a utility scorer; the docs' 'GOAP' naming has no engine-native consumer.",
     "evidence": "UE 5.8 rewrote the AI Module docs around StateTree and ships StateTree project templates; Behavior Tree still supported (unrealengine.com 5.8 notes; dev.epicgames.com State Tree 5.8). Maps to COMBAT_ENCOUNTER_SYSTEM.md §4 (the clock enumeration) + §4.9 (player_habit_vector/adaptation_gain)."
    },
    {
     "step": "Prove the vril_density difficulty dial as a SINGLE global float driving GameplayEffect magnitudes + a MetaSound global input — the same authored boss played at two world-tensions (telegraph slack, punish-window width, well latency) with ZERO change to any enemy stat block. This is the load-bearing 'difficulty = world density not HP' thesis, testable in a greybox.",
     "requires": "UE 5.8 + MetaSounds (engine-native). Use MetaSound Builder Subsystem Inputs (not Variables) for the runtime density value.",
     "evidence": "MetaSounds Builder Subsystem supports runtime dynamic modification and Inputs allow value changes during playback (dev.epicgames.com MetaSounds Reference 5.8). Maps to DIFFICULTY_SYSTEM (RULED) + COMBAT_ENCOUNTER_SYSTEM.md §9."
    },
    {
     "step": "Build the runtime deterministic STRATEGY-TOKEN spine with ZERO GPU and ZERO engine: the JSON/enum token schema, the V1-V5 deterministic validator (denylist regex + name-resolution against a hand-built fact_whitelist + length/slop), the authored-fallback bank keyed by (entity, state_bucket), and the runtime_generation_log + first-try-pass-rate scorer. This is the 'needed NOW, no GPU' half of the runtime layer and is pure code.",
     "requires": "Nothing beyond a Python/C++ toolchain already present. No GPU, no model, no recall.py — hand-author one boss's pack for the prototype.",
     "evidence": "RUNTIME_GUARDRAIL_ARCHITECTURE.md §2-§7 + RUNTIME_GENERATIVE_LAYER.md §2 specify the four-stage sandwich as deterministic code around the model; §6 fallback makes the model pure upside. The continuo bet (F8/F10 prevented-by-construction) needs no inference to stand up."
    },
    {
     "step": "Stand up a cosmetic barks-only generative prototype on the CURRENT GPU: a 3-4B GGUF model (Qwen3-3B / Phi-4-mini class) in llama.cpp with a GBNF grammar emitting {emotion∈enum, line≤20 tok}, fed a canned 'sim next-move intent' fact, then run it through the §5 validator + authored fallback. Confirms the on-device inference leg before the 14B reference lands.",
     "requires": "llama.cpp build + one GGUF model download on the current machine (the stated GPU runs 3B/7B). No 5090, no console packaging.",
     "evidence": "llama.cpp GBNF grammar-constrained decoding is native and current (deepwiki ggml-org/llama.cpp 8.1; Qwen3/GGUF ecosystem search-confirmed). Matches RUNTIME_GENERATIVE_LAYER.md §B.1 baseline pin (3-4B Q4_K_M, GGUF/PC path) + §2.2 constrained gen."
    }
   ],
   "parameter_gaps": [
    {
     "step": "Any combat/systems engine build",
     "missing": "There is NO combat/systems Translation Doc parallel to the five that exist (AssetGen/Audio/Cinematic/Terrain/UE5_Build), and no combat/runtime section in T1_Build_Pipeline_Contracts. An agent given only a region page + a translation doc has nothing that maps boss/Composure/vril-dial design onto GAS-vs-custom, StateTree, Chaos, MetaSounds, or the save subsystem. The whole engine-mapping decision is unwritten.",
     "severity": "WALL"
    },
    {
     "step": "Populate a boss into the pipeline (E3)",
     "missing": "T0_Boss_Encounter_Registry has 0 data rows and its schema (built for MMO world bosses) has NO columns for primary/secondary verb, three-axis Patterns/Puzzles/Preparation split, win-condition enum, per-signature counters, escalation vector, Composure nodes, or the Hades win-AND-death reward. The rich BOSSJSON row model has no schema to land in.",
     "severity": "WALL"
    },
    {
     "step": "Numerically tune any boss / verify 'no pure DPS check'",
     "missing": "Every combat number is deferred to a Phase-5M balance audit that never ran: damage-formula constants, integrity-band % in absolute units, sigma values, tell/window ms, dial coefficients, defensive timing windows. Greybox can proceed on illustrative shapes; a faithful tuned build cannot.",
     "severity": "WALL"
    },
    {
     "step": "Author a boss to the Pillar-8 bar",
     "missing": "No canon win-condition taxonomy (pacify/part-break/perceive/restraint invented at proposal layer); the mandatory 'character-engagement' field has no mechanical definition; the three-axis Patterns/Puzzles/Preparation split has no source authority or axis definitions; phase-transition trigger mechanics are asserted, not specified.",
     "severity": "WALL"
    },
    {
     "step": "Build the runtime context-pack leg",
     "missing": "recall.py and the 'recall packs' offline exporter — the deterministic perfect-recall stage the entire guardrail architecture depends on — do not exist on disk. A prototype can hand-author one pack; production population cannot start.",
     "severity": "WALL"
    },
    {
     "step": "Choose the boss runtime substrate",
     "missing": "No contract or translation doc resolves the GAS-vs-custom-encounter-state-machine fork; the design docs say 'behavior tree + weighted RNG' / 'GOAP', but Epic ships no first-party GOAP and 5.8 steers AI to StateTree. The executor choice is undecided in any bindable doc.",
     "severity": "FRICTION"
    },
    {
     "step": "Run the mode-variety anti-staleness audit",
     "missing": "Three unreconciled mode vocabularies coexist (CVD 7 modes, COMBAT 10 encounter categories, mode_variety_check 5 booleans) and mode_variety_check is populated on only 2 of 79 chapters. The 'no two consecutive dominant types' rule is not runnable until one canonical mapping exists.",
     "severity": "FRICTION"
    },
    {
     "step": "Persist runtime combat state to save",
     "missing": "No T0_Worldstate_Variables keys exist for Composure/vril_density/player_habit_vector/adaptation_gain as saved runtime state; the WS7 [EXTENSION] sim-internal vars (player_strategy_vector, faction plans) are flagged Josh-pending, not schema-locked. The ws.* save subsystem itself is an original build with no Epic pattern (39-typed-key save unprecedented; ISaveGameSystem is low-level and built-in save is synchronous).",
     "severity": "FRICTION"
    }
   ],
   "gated_5090": [
    "The 14B on-device runtime REFERENCE model for dev-side quality prototyping (the design's own §B pin explicitly reserves 14B-class local inference to the 5090; the 3-4B ship target runs on the current GPU already).",
    "The runtime-inference perf-budget validation — batching, speculative/draft decode (2-3x), KV/prefix-cache, the ~8-15 gen/s busy-scene target, latency P99s — i.e. the Phase-5M-analog 'runtime perf audit' the docs defer; needs the sustained-workload workstation to be meaningful.",
    "Heavy local asset generation to take the greybox arena toward a vertical-slice look (TRELLIS.2 / Hunyuan3D on the benchmark day) — asset-gen is the heaviest local leg and is the 5090's headline job.",
    "Running the nightly first-try-guardrail-pass-rate eval harness (RUNTIME_*.§7) at corpus scale over logged prompts against candidate model+prompt versions — bootstrappable on the current GPU, but the scale run belongs on the 5090. (Console int4/DirectML-Xbox and PS5 compute-shader packaging are separately devkit-gated, neither current-machine nor 5090.)"
   ],
   "gated_books": [
    "Fauna behavior_flavor generation (Class 3) reads T0_Creature_Roster.folklore_behavior_substrate + folklore_attribution_source, which are region-page/corpus-derived — the 246 owned books are already drained/queryable so this is PARTIAL-now, maturing as the ~3 remaining weeks of scanning + region-page build land.",
    "The §17.1 cultural denylist / forbidden-framing corpus that V1/F3 (the runtime cultural-safety gate) matches against is corpus- and region-page-derived; it accretes as books + region pages arrive — a combat/fauna build in a high-care chapter should not run runtime generation until that entity's care-band denylist is populated.",
    "Per-region boss and fauna encounter rosters depend on region pages, of which only 3 of 69 exist (flores_island, bali, sumatra_java) — the combat mechanics are book-independent, but the per-chapter ENCOUNTER POPULATION is region-page-gated."
   ],
   "first_smoke_test": "The cheapest end-to-end test runnable THIS WEEK, needing no UE build, no 5090, no recall.py, no book corpus — it validates the single most load-bearing runtime claim (the continuo bet: a dumb local model made reliable by deterministic scaffolding). Steps: (1) Hand-author ONE boss's frozen context pack as JSON — a persona card, a 5-name fact_whitelist, and a small hardline_rule_vector (this stands in for the not-yet-existent recall packs exporter). (2) Install llama.cpp on the current machine and download one 3-4B GGUF (Qwen3-3B or Phi-4-mini class); write a GBNF grammar that forces output to {emotion:<enum>, line:<string ≤20 tokens>}. (3) Feed the model a canned sim fact ('player rolled left 4x') and decode one bark under the grammar. (4) Run the deterministic validator: V1 denylist regex, V3 name-resolution against the fact_whitelist (any proper noun off-list = hard fail), V4/V5 length + edit-distance slop check. (5) On any hard-fail or a simulated latency miss, bind an authored fallback line from a 4-line bank keyed by (entity, state_bucket); append every result to a runtime_generation_log and print the first-try pass rate. Passing criterion: the loop NEVER emits an invalid or off-whitelist line to 'the player' (fallback always catches), and it prints a pass-rate number — proving generate→validate→fallback→score works on the current GPU. Parallel engine smoke test (if UE time is available same week): a GAS greybox with one Composure AttributeSet + a single vril_density float that visibly widens/narrows the tell window with no enemy-stat change — proving the difficulty-as-density thesis in-engine on UE 5.8."
  }
 ]
}

Generated by harness/site/structure_site.py — the URL path is the repo path. review root