programs/ROADMAP_TO_5090.md
Status: ACTIVE PLAN, 2026-07-22. The driving reference for this stretch. Josh confirmed the shape and
the region order (bali → sumatra → angkor default). Supersedes the ad-hoc "next up" pointers; the
START_HERE ▶ NOW block points here.
Everything is gated by exactly two things, and almost all the high-value work sits outside both.
reactive, cheap, and idempotent. Drop scans in _source/02_Tier_2_Region_Pages/_ready_for_processing/;
messy filenames are fine (content-classified).
It gates every heavy GENERATION workload, not just book-reading: the book deep-read / triage floor
(text inference) AND photorealistic 3D generation, photorealistic asset generation, music
generation, and cinematic generation — plus VLM-OCR for stubborn scans. What it does NOT gate is the
DETERMINISTIC game-side systems build — combat systems, abilities, mechanics, physics, DataTables,
greybox/blockout locations, and seed wiring — which is pure file-edit + compile work in the UE
project and is proceeding NOW (Track 5). The runway (book-read tooling) is prepped (Track 4); arrival
day is wire-and-go. Rule of thumb: if it needs a generative model to run, it waits for the 5090; if
it's engine code / data / wiring, build it now.
local model, score seed-richness, let Opus follow the score). No local generative model exists
here today; fastembed covers embeddings only. This is the whole reason the floor waits.
non-Latin scripts that tesseract cannot rasterize. They stay queued in _needs_ocr/, never lost.
The flores lane is proven END TO END (extract → conform → merge → audit → region-page pass-2). It is
now MECHANICAL, not exploratory. Each region runs the same five steps:
1. Deep-read its seed-rich books — Opus fan-out (the driver is a workflow; the standalone
deep_read.py driver half is a Track-4 build). Prioritizer = the story_seed_tags already on
1,638 sources, so seed-rich books are pickable WITHOUT the local floor.
2. Conform (exr_conform.py) → 3. Merge (deep_read.py merge) → 4. Audit (five-gate lens filter +
§8.8 care, Opus critics; exr_audit_apply.py is the deterministic apply) → 5. Region-page pass-2
(Opus section authors + fresh critics; apply_region_page_sections.py assembles; the director
never touches prose).
MEASURED STATE (2026-07-22) — the slice is nearly EXHAUSTED, which reshapes this track. There is
NO deep-read expansion to do: the overnight pilot already read essentially every book on these
shelves.
| shelf | books | not read | extracted | audited |
|---|---|---|---|---|
| flores_indonesia | 16 | 0 | 0 | 16 (DONE end-to-end) |
| sumatra_batak | 7 | 0 | 6 | 0 |
| bali | 4 | 0 | 4 | 0 |
| angkor_khmer | 1 | 0 | 1 | 0 |
| malay_world | 1 | 0 | 1 | 0 |
| vietnam | 1 | 0 | 1 | 0 |
So the remaining Track-1 work is 11 records to audit + 3 region pages to pass-2 (bali,
sumatra_java, angkor_khmer — the live pages besides flores). That is DAYS, not weeks.
malay_world and vietnam have one book each and NO region page, so their rows have nowhere to land
yet — they wait for a page.
Order (Josh-confirmed): bali → sumatra → angkor. Each is now audit + pass-2 only.
The corpus mass is NOT in the Ch 2-5 slice. It sits in shelves for LATER chapters:
| shelf | books | deep-read |
|---|---|---|
| esoteric | 321 | 2 |
| (unassigned) | 228 | 0 |
| cross_cutting | 199 | 2 |
| levant_israel | 162 | 0 |
| india_vedic | 128 | 0 |
| native_north_america | 113 | 0 |
| celtic_fairy | 80 | 0 |
| british_isles | 74 | 0 |
| greece_aegean | 62 | 0 |
| egypt | 58 | 2 |
Deep-reading those now would be READING AHEAD OF THE BUILD — precisely what §4's region-batched,
never-gate-on-the-whole-library rule exists to prevent, and precisely the job the local triage floor
is meant to prioritize properly rather than by guess.
Therefore the window's centre of gravity is NOT Track 1. Track 1 finishes in days; after that the
highest-value work is Track 4 (runway prep), because it is what converts the 1,873-book backlog
from "unaffordable" into "swept for free on arrival" — plus Tracks 3 and 5, which are substantial in
their own right. The 228 unassigned books are a Track-3 target: shelving them costs almost nothing
and improves what the floor will later rank.
Batch drains on Josh's ping or when the inbox fills (drain_inbox.py). One build: a legacy binary
.doc converter (LibreOffice-headless) so .doc files stop queuing indefinitely (the Ayurveda file
is the current instance). Runs in the seams.
The standing residue queue, filling the gaps between fan-outs:
DEEP_BOOK_PROCESSING_CONTRACT.md §2.4 enum to match the phantom-registry fix already in code (drop T0_Folklore_Entity_Registry, correct T0_Boss_Encounter → T0_Boss_Encounter_Registry,
note the species_class discriminator). Highest priority in this track — a stale contract
re-teaches the phantom to the next reader.
ws_value_form normalization pass (698 unresolved heads + append-set refinement).Scaffold + fully test against a stub so arrival day is wire-the-model-and-go:
deterministic stub standing in for the 7B/14B model.
_needs_ocr/ drain stage wired to a pluggable OCR backend.deep_read.py driver half (read one source against its canon pack, emit theEXR record) — currently a workflow; making it a resumable script is what lets the local floor and
the rollout share one code path.
Correction (2026-07-22): Track 5 is not gated on Josh's availability. The director has desktop
control (computer-use) and can open, drive, save, and close the Unreal editor as needed.
closed). This unblocked the DataTable import seam.
Build.bat compile, noeditor).** Landed in the game repo: the greybox foundation (GAS AttributeSet with Composure + the 8
sub-nodes, the density subsystem, telemetry); then Step 3 — UHumanityDialMMC, the vril-density dial
resultant d_local = clamp(tier_baseline × WS_024/2, 0,1) as a GameplayEffect MMC (the "one float,
zero enemy-stat-change" thesis made mechanical) + native combat gameplay tags; then Step 4 —
UHumanityComposureLibrary, the Pillar-8 "N nodes broken" enforcer for the phase gate. Next headless
C++: the ws.* WorldStateSubsystem (Step 7), the StateTree combat-clock tasks (Step 2), the player
ability/effect scaffolding. Compile-verified per increment (UE 5.8, `HumanityEditor Win64
Development`).
desktop control / the NeoStack + Python-bridge seams. Scheduled deliberately (UE automation is
finicky and slow), after the headless C++ half.
The three RULED care-scope class rules (DEEP_BOOK_PROCESSING_CONTRACT §2.6b + CVD §17.1, 2026-07-22)
were authored AFTER the spine and most canon were built. At a scheduled point in the roadmap, run a
full Prologue→Epilogue audit of the story spine (docs/spine/CH_NN.md, 79 nodes) AND the region
pages / registries against all three rules, to catch anything authored under the OLD (more
conservative) calibration:
authorial-gated that should surface player-facing at its ratified tier; any living tradition
uniquely excluded (care-tier inflation); the House-of-Velheim adjacency hold verified intact.
that should carry at full specificity; withholding narrowed to the personal-identifier minimum.
MANDATORY explanation (the scrub the rule forbids); community authorship of its own repair present.
This is a fan-out audit (one agent per node-band, adversarially verified), scoped like the RR passes.
NOT this window's work — it rides after the region rollout, since the region passes are already
re-touching each chapter's ground and will surface the worst cases first. Recorded so it is not lost.
1. Track 1 — DONE (2026-07-22b). All four region pages are audited + pass-2'd: flores (16 recs),
bali (4 → page 512→4,524), sumatra_java (6 → 612→5,283), angkor_khmer (1 → 666→1,369). Every
region shelf reads deep_read_audited. The lane proved mechanical and the anti-padding discipline
held: angkor's 13-row harvest grew the page ~2x, not the ~8x bali/sumatra's 85/97 rows earned.
The seven briefed director rulings (familiar registry, entity-taxonomy gate, mining pointer,
Supreme-Being enforcement, Holocaust retag, living-practitioner S07) are the residual Track-1
apply pile and come next.
2. Then the centre shifts to Track 4 — the triage-floor + VLM-OCR + standalone-driver scaffolding,
stub-tested, so the 5090 is productive on arrival rather than waiting on a build.
3. Track 3 in the seams — contract §2.4 enum correction FIRST (a stale contract re-teaches the
phantom registry), then the unassigned-228 shelving, then the ws normalization and triage residues.
4. Track 5 scheduled by the director — C++ DataTable structs first (file-edit + compile, no
editor), the in-editor StateTree pass via desktop control after.
5. Track 2 continuously — drains whenever Josh's scans land.
Explicitly NOT in this window: deep-reading the big shelves ahead of the build. That is the floor's
job, and doing it by guess now would spend premium tokens on exactly the ranking problem the floor
solves for free.
Land-and-push every increment; the repo is the memory.