PRE_5090_BUILD_PLAN.md

programs/PRE_5090_BUILD_PLAN.md

PRE-5090 BUILD PLAN — Humanity (the complete ungated build surface)

Status: ACTIVE — the driving reference for the pre-5090 window. Synthesized by a 7-agent Ultracode
workflow (six domain-mappers — roadmap · vision · pipelines · game-needs · repo-state · data-readiness
— into one synthesis), director-reviewed and landed 2026-07-23. This is THE plan the fresh Fable-5
Ultracode director session executes against; START_HERE ▶ NOW points here. 92 buildable-now items
across 10 workstreams (WS-0 trunk … WS-9 tooling); nothing in the runtime layer is hardware-blocked
except final generated assets, the optional runtime-LLM bark flavor, and console devkit packaging.
## Director notes (2026-07-23, before the synthesis body)
- Contradiction A is RESOLVED — verified. The game-repo row structs ARE generated: 36/36 native
USTRUCT : FTableRowBase headers exist in C:/dev/Humanity/Humanity/Source/Humanity/Public/Data/
(game commit 986e22a, "36 of 36 — trunk link 2 fully closed"). The BUILD_PLAN snapshot a mapper
read was stale. So WS-0 T0.5/T0.6 (codegen + the 14 structs) are DONE; the trunk's remaining work is
the Zone Catalog single-writer + the one column pack + the bulk import of the 34 un-imported tables
(T0.1–T0.3), plus the FText retrofit (T0.7).
- The combat PRIMITIVES landed THIS session (all compile-verified, UE 5.8) — mark them DONE: the
vril-density dial MMC (d_local) + native combat tags (game 756e569), the Pillar-8 Composure
library (07d2a42), the ws.* WorldStateSubsystem + SaveGame (1fe1b9a), and the Sigma Constraint
bounded RNG (1dabf50). The WS-0/WS-1 items for those are DONE. What they lack is an OWNING ACTOR —
highest-leverage first move B (the GAS actor scaffold: PlayerState + ASC owner + Character), the
next headless-C++ increment, which lets all of it run in PIE.
- The 29 decision items the mappers surfaced are consolidated at the end of this doc. The ones to
rule FIRST as director: the four-ruling cardinal-canon brief (#1), the region-count drift 69/71/76
(#3), and the runtime strategy-token schema + validator contract (#7). The rest are per-workstream
and can be ruled as each lane is reached — do not let them block the trunk, which needs none of them.
- Two-repo discipline holds: canon (C:/dev/humanity-forgotten) and game (C:/dev/Humanity/Humanity)
are one-writer-per-repo; the trunk's transform tooling lands canon-side, the engine systems game-side.
The synthesis body follows verbatim.

---

## ▶ ITEM SOURCE (2026-07-24 — the enhanced item registry now lives in VOLUME 2)
The CH 2-5 vertical-slice enhancement (Josh directives 2026-07-24) is landed in
docs/PRE_5090_BUILD_PLAN_VOL2.md — the reconciled item registry + the rebuilt MASTER WAVE
QUEUE. Vol2 is authored from 8 verified plan sections + both fresh-context critics (all 4 citation
fixes applied, all 13 coherence findings resolved under single-owner discipline; 217 unique items).
For item detail + wave assignment going forward, read Vol2, not §§3–11 here. SUPERSEDED as the
ITEM source (retained as the pre-enhancement baseline / provenance only):
- §3 WS-1 + §4 WS-2 → Vol2 §2 (combat feel · movement · targeting · enemy-AI)
- §5 WS-3 → Vol2 §4 (quest/progression/transitions/save); new UI layer → Vol2 §3 (WS-11 UI)
- §6 WS-4 → Vol2 §6 (Ch 3-5 region rollout); new living-world → Vol2 §5 (WS-11 living-world)
- §7 WS-5 + §8 WS-6 → Vol2 §7 (audio + cinematic AV layer)
- §11.5 WS-10 → Vol2 §8 (QT-1..22 org); the 5090 handshake → Vol2 §1 (DR-1..8)
STILL CURRENT HERE: the ▶ PROGRESS LEDGER, §0 gating model, §1 critical path, and §12 decisions
(Vol2's DECISIONS REGISTER carries the two live slice briefs — D-ECONOMY-MEDIUM · D-DEFEAT-AXIS —
both Josh-pending, plus the 3 ship briefs by reference to docs/ROADMAP_POST_5090_TO_SHIP.md).

▶ THE PRE-5090 WINDOW PLAN (2026-07-27 — the ranked queue for the ~2 weeks to the handshake)

Source: the beyond-the-ledger audit (register v1.1 provenance) — 53 survivors deduped to 30

ranked items, 29 of 30 PRE-5090-WORKABLE. Ranking = unblocks-the-roadmap × player-impact ×

dependency order; P0/P1 ENTRY criteria and P2 socket BLOCKED-ONs front-loaded. Lanes:

canon-author · schema-data · engine-code · qa-teeth · spec-doc · zero-token-script · josh-brief.

Director adjudications applied: rank 4 downgraded (gate #25 exists and passes — residual folded

into the rank-18 brief); soak cadence already ARMED (game 0e69c4e); item 0a DONE (b8dc09e);

natural-voice landing in flight at authoring time.

1. [qa-teeth·L] Author the X9.5 kill-test/benchmark harness set — the unmet P0 ENTRY criterion.

2. [qa-teeth·M] Wire gen_row_struct --check into gates_config + regenerate the 13 drifted row structs.

2.5. [spec-doc·L] Mint the FACTORY CONTRACT — docs/FACTORY_CONTRACT.md + docs/factory_contract.json +

harness/emit_chapter_checklist.py + gate 30 factory_contract (R1/R2/R3 + vacuity guard) in the

SAME commit — the per-chapter obligation register (~45-50 riders at v1). This is the chapter

axis: it answers "for Ch NN, what must be true?" and makes every rank after it self-wiring.

Ranks 13-17 emit rider rows at freeze time rather than retrofitting them, so this rank is

materially cheaper before them than after. (Source: the story-depth program charter.)

3. [spec-doc·S] Rule the 7 DEEP_BOOK contract open questions (114 L3 rows parked).

4. [josh-brief·S] GRAND_SAGE voice-row: retire-vs-keep housekeeping only (gate already ships) — rides rank 18.

5. [schema-data·L] asset_concept/morphology/asset_category/mesh_tags across the slice — now the 15-node

Prologue→13 slice; Ch 2-5 first (the built surface), Ch 6-13 as their region legs land, Pro+Ch 1 at

slice-end (P2 AssetGen socket).

6. [schema-data·M] Scene-index scene_type + participant_refs + beat_ref (P2 Cinematic socket).

7. [canon-author·M] EG_ environment-grammar rows for every slice combat AND TRAVERSAL surface (v1.3

fold entry 57 — widened BEFORE this rank starts, or it costs a second pass over twelve regions) —

all 12 earthly regions, then the fairy realm at slice-end (P2 Combat socket).

8. [canon-author·M] The Section-10 machine cue table + Theme/Scene music columns — ×4 pages TODAY (the four

built region pages), extending to every slice region page as Ch 6-13's eight pages are authored (rank 8

is scoped per-page and grows with rank 10's page queue, not re-planned) (P2 Audio socket).

9. [canon-author·S] The 6th narrative-craft seed gate (reversal/cost/residue) — BEFORE the typing pass.

10. [canon-author·L] The §7.5 housing-ledger typing pass over the slice regions (264 seeds on the 4 built

regions) + Quest_Seed rows. RESCOPE RIDER [SUPERSEDED 2026-07-29ap — the eight Ch 6-13 pages now EXIST on disk,

measured 20/20 template sections + Zone Catalog each (sri_lanka 1543 / south_india 1454 /

swahili_coast 1503 / ethiopia 1315 / rift_valley 1163 / central_africa_congo 1726 /

west_africa 4314 / south_africa 1059 lines); the longest-pole claim is RETIRED — the rank's

LIVE work is the §7.5 typing pass + Quest_Seed rows themselves]: the original 2026-07-27

measurement (NO pages, EST 12k-42k lines) is preserved here as record. The fairy_realm page has no template and is authored at slice-end with the realm.

11. [schema-data·L] Mint T0_Persona_Index + complete personas on every slice entity — 15 nodes, not 4

(P1 EXIT; natural-voice source).

RIDER (GAP-139, 2026-07-30): the mint authors against

docs/proposals/ENTITY_PERSONA_SYSTEM.md 5.2.1, which added the daily-rhythm axis BEFORE

this rank ran -- eight columns on the index (schedule_state_set, presence_window,

home_site_ref, work_site_ref, occupation_ref, trade_ref, persona_bucket_ref,

presence_nongating_class) plus the two child tables T0_Persona_Schedule and

T0_Persona_Bucket. Mint all three together and enroll their FKs in docs/fk_spec.json +

docs/registry_extensions.json in the SAME commit (the shape is machine-readable at

registry_extensions.json _deferred.persona-daily-rhythm). The ambient-population band

already landed on both rails (T0_Region_Index.ambient_population_band_default + the per-zone

Zone Catalog ambient_population_band), BLANK -- the populate is this rank's and rank 5's.

Every progression-critical persona reads presence_nongating_class always_present or

alternate_reach_declared: a schedule is the one persona field that can break the no-dead-end

invariant by accident. Closing GAP-139 and flipping FR-079's data_home off

NONE_YET(GAP-139) happen in the mint's commit, together -- gate 30 R2 resolves the GAP form

against the OPEN status, so one without the other goes red.

12. [zero-token-script·S] Recover the 361 BLIND weave titles by local extraction.

13. [schema-data·L] Ability registry data pass (unlock chapters ×153, costs, cooldowns, classes).

14. [schema-data·L] Mint the §§7-12 data homes: tier-bonus pools, imprints, loadout sets, role tags,

ally stat spreads, MYTHIC rarity (the handoff item-1 core; positive-controlled zero today).

15. [schema-data·L] Quest_Definition's 22 empty execution columns + fk_spec enrollment (the giver/trigger lead channel).

16. [schema-data·M] Boss rails: preparation/intel column + R2 tooth; phase_trigger/escalation/signature_counters; hitzone parts.

RIDER (the twenty-ninth sitting, 2026-07-30): W-11 IS CLOSED. Josh RATIFIED the

opposite-element mapping as EFFECTIVE-AGAINST in his own words ("the opposite or 'strong'

element to the attack"), so parry_element_rule / parry_element_ref author against a

settled reading and no rail row waits on a re-read. Not one grid cell changes, which is why

this rides here and not on rank 17 (the matrix lane should still see it). THE ONE QUEUED

SCHEMA ITEM the same ruling mints: parry outcomes are a SCALE, full negation down to partial

mitigation by the attack's strength against the answer's strength, which wants an ORDINAL

mitigation column on this rail — deliberately NOT minted at ruling time, because a column with

no authored moveset behind it is a promise rather than a shape. It mints WITH the first

authored rows in this rank. The doctrine it will carry is already law: T1_Combat_System_Spec

under The Mitigation Scale + docs/COMBAT_ENCOUNTER_SYSTEM.md §9b.2b. No magnitude belongs in

the column — Phase-5M owns the numbers, this rank owns the shape.

17. [schema-data·M] Complete + import the element matrix; lift the 10-element cap; per-enemy weaknesses.

18. [josh-brief·M] ONE bundled brief: the 4 open DECISIONS items + composure routing + compang bbox +

5 trade chapter pins + CVD §13.4 wording + the voice-row housekeeping + the 3 unbriefed JOSH-calls

(protocol repair — briefs, never bare questions).

19. [josh-brief·S] The presentation doctrine (camera/cut/transition covers) — precedes CN5.2 template bake.

20. [spec-doc·M] Author T1_UI_UX_Spec + T1_Audio_Spec from the shipped W10 HUD + W2 audio spine.

21. [canon-author·L] Between-site traversal design (route legs, paths/mounts/boats) — retire the DEV teleport.

22. [spec-doc·M] Ally survival/defeat model + ally combat-line class (anti-escort-frustration).

23. [canon-author·L] Mint the 120 trade-gate quest rows + the Book-of-Trades data home.

24. [spec-doc·L] Author T1_Personal_Dimension_Spec (marriage/partnership, dimension pocket, creature housing). RULED INPUT 2026-07-30 (the twenty-ninth sitting): the NG+ TRANSFER law — at the dimension's own unlock in New Game Plus it arrives as a transfer of the previous playthrough's dimension: the TAMED-CREATURE menagerie and all invested dimension-world state, with SCALE-DOWN-ONLY levelling at the unlock moment (above the player's level scales back to it; already-lower stays lower; nothing scales up). THE CARRIED ROSTER EXCLUDES BONDED FAMILIARS — familiars have bonding questlines and re-form through them each playthrough, which is the boundary this spec must hold rather than blur. The spec is authored against that, never around it; see T3_Familiars_Named §5.11 and the New Game+ section of docs/proposals/DIFFICULTY_SYSTEM.md.

25. [schema-data·M] DT_StatusTable canon grid + cure/antidote chains + status_immunity column.

26. [schema-data·M] Fill the dead joins: weapon damage_type/vril_couple 0/72, familiar↔creature bonds, RNG_Drop_Table rows.

27. [engine-code·L] CH_05 sub-boss real mechanics (ledger decode, chain meter, baray-flow strip) + creature ids.

28. [zero-token-script·S] Derive Thread_Registry's 5 empty columns from Thread_Grid's 664 rows.

29. [canon-author·M] Per-chapter anchors for the 10 anchor-less Weavings + re-home the overheard-conversation surface into DT_Clue.

30. [schema-data·M] Populate the six 1-3-row system registries + the Region_Index environment rail.

Sequencing rule: schema-freeze-critical lens waves (COMPARATOR_LENS_PROGRAM P1-A) run BEFORE

ranks 13-17 freeze their schemas. The natural-voice clue lane (CH_03-05 clues.csv are

header-only — 10 rows exist across 79 nodes) rides rank 29's DT_Clue re-home. BG3 entries

39-44 fold into ranks 11/14/24 where their surfaces overlap.

Story-depth program freeze constraints (2026-07-27). (1) Rank 2.5 (factory contract) lands

BEFORE ranks 13-17 — the schema-freeze ranks emit rider rows rather than retrofit them.

(2) The arc schema (T0_Arc_Index / T0_Arc_Grid / T0_Arc_Grammar / T0_Promise_Ledger) lands

BEFORE rank 10 — the 264-seed typing pass assigns arc_id at typing time, which turns the

hub-and-spoke gap and the flat-SQ finding into one fix instead of two passes. (3)

T0_Chapter_Index.emotional_register lands BEFORE rank 8 — rank 8's music cue table has no

upstream mood source today. (4) Rank 11 (T0_Persona_Index) lands BEFORE any companion-arc

typing — typing arcs against personas that are about to change types them twice. Source: the

story-depth program charter; constraints are recorded here because the window plan, not the

charter, is what the factory reads.

RULED ADDITIONS (Josh, 2026-07-29 twenty-second sitting — the J-1/J-2 closure work, added here

because the window plan, not the charter, is what the factory reads; both are POST-window items

gated on book processing + the deep 79-chapter fan-out, recorded now so they are never re-derived):

threads gets a declared disposition — resolve, or open_by_design with a reason (FORK J-2 ruled

(a)). The 15 no-resolution threads (T07-T19/T21/T22, machine-derived twice) start UNDECLARED in

the arc registry; this pass makes the per-thread story call, closing threads where closure is

better for the story. Runs AFTER book processing + the deeper whole-arc fan-out so the calls

are substrate-informed (Josh's rider, verbatim in DECISIONS twenty-second sitting).

side questlines (cryptids, lost_civilizations, military_history, pirate_naval,

trickery_gambling — the last carries 2 beats vs archaeology's 59) each built up to the ruled

floor — a full SEED→COMPLETE spine (FORK J-1's narrow question ruled TWELVE COMPLETE ARCS,

not twelve equal ones); residual asymmetry declared open_by_design per questline. Shares the

R-31 window; both write through the arc registries so the arc schema is their precondition.

SLICE RESCOPE (Josh RULED 2026-07-27, fifth + seventh sittings — APPLIED to the ranks above,

2026-07-27, off the slice-scope analyses). The vertical slice is PROLOGUE→CH 13 — **14 NODES,

15 REGION-LEGS** (DENOMINATOR CORRECTED 2026-07-29, twenty-fourth sitting: Josh confirmed 14

nodes and hypothesized the 15 counted a multi-region chapter — CONFIRMED against the live

T0_Region_Index: CH_05 carries TWO regions, sumatra_java + angkor_khmer, so the slice is 14

narrative nodes over 15 chapter×region build legs across 13 region rows; the old "15 nodes"

label was the leg count wearing the node word).

The ranks stand; their scopes grew. The four ruled parameters the ranks now read against:

realm designs and builds ONCE, at slice-end, after 11 earthly chapters have matured the

concept-art pipeline, the presentation ladder, the W-SPACE grammar and the QA belt. Every

rank that touches the fairy realm therefore sequences LAST inside its own rank, never first.

design); Gate 2 at the full-slice exit (the origin judgement, and the gate that opens P4).

departure, the amulet passing to her AT THE DEPARTURE; to-be-continued.

DEPENDENCIES HONORED, NOT FORCED (each is a real precondition, and none is ranked here because

each is owned elsewhere or is not yet ruled):

find over both trees returns zero for the name while returning hits for other Tools/*.py),

and the QT-17/18/19 band spec carries Ch 2-5 early-game targets. Ch 6-13 sit further up the

same curve; the Prologue is a ceiling tutorial and Ch 1 is out of corpus scope, so both sit

OFF the curve and need DECLARED SENTINELS rather than band values. Arming the monotonicity

tooth on any node past Ch 5 before those sentinels exist fires a FALSE regression — the same

defect class already caught for Ch 77's exempt demand_ordinal. Band values are deliberately

not invented here (tuning firewall). Spec home: PRE_5090_BUILD_PLAN_VOL2.md §A.1 + §11.5.5.

build order makes this forced: Ch 1, where the four choosings are canonically woven, builds

LAST, but Ch 2's opening beat needs a chosen familiar and Ch 13's Ntala needs a bound

best-friend gender — so the whole earthly build and Gate 1 would otherwise run on selections

with no home. It is NOT ranked here because its canon question is still open (J-F: canon says

"None of it is a menu. All of it is a life," and the promotion needs Josh's yes on the

menu-then-woven shape, with the selection surface becoming the returning-player skip path).

The mechanical half is cheap NOW and expensive after players have saves.

deterministic bbox→DEM→WorldCover→import→dress→stage chain has no input, and the path has

never been run once. Ungated, no model spend; run it during the Ch 6-13 window. It is the

instrument for the EA boundary's reversal trigger, so it is a measurement, not a build item.

Authority: docs/spine/DECISIONS_PENDING_JOSH.md fifth + seventh sittings. Analysis pack:

docs/pipeline_review/SLICE_EXECUTION_BRIEF_2026-07-27.md + the three SLICE_SCOPE_* passes.

▶ PROGRESS LEDGER (live — update at every landing; newest first)

**2026-08-03 — GPU HANDBACK COMPLETE AND BENCHMARK DAY ALREADY RAN (Josh, verbatim,

correcting a stale roadmap brief twice: "continuo already finished. GPU hand back

completed yesterday" and "Didnt we already complete benchmark day?").** The 2026-07-31a

"Continuo occupancy continues" rider below is CLOSED as of 2026-08-02, and benchmark day

is NOT pending — it RAN on the box 2026-08-02: build-repo

QA/bench/benchmark_day_20260802T142202Z + ...143726Z (kt0 licence PASS; the

per-kill-test verdict reconciliation is the build repo's record), the OpenTopography

licence ruling (kt0_licence_evidence_2026-08-02.json + the TERRAIN_CHAIN_PROVEN ruling

block), the terrain chain proven end-to-end (19.9 s full chain, E:\terrain populated),

the art-lane throughput measured on the metal

(docs/concept_art/art_throughput_measurements.json, 2026-08-02T19:05 ET), and seven

runtime-inference bench evidence files. THE NEXT GPU ITEM is therefore the concept-art

RANK 1 laws night run (~465 plates, 6.8 measured GPU-hours,

CONCEPT_ART_PRODUCTION_PROGRAM.md §6) — nothing gates it. The canon lane's RANK 0

continues independently (Ch 2-8 landed; Ch-8 residue in flight).

2026-07-31a — STAGE 8 CLOSES: the 5090 setup is COMPLETE at full tier (the on-box session).

The first full nightly soak ran GREEN on the armed task — 3 loops x the 7-zone belt = 21/21,

0 teeth violations, 0 crash markers, psutil ON, LastTaskResult 0, UPS agent live

(soak_2026-07-31_070001.md; memory read honestly: loop-1 DDC/shader warming peaked 9.06 GB on

bali, loops 2-3 flat ~3.4-4.3 GB — caching, not leak). 8.13 was the last open row: the LANDED

block in docs/5090_SETUP_RUNBOOK.md is amended and Stage 8 / the whole setup runbook CLOSES.

Rider landed with it: the soak trigger carried a Pacific offset from the pre-TZ-switch arming

(fired 07:00 ET) — the XML is offset-free now and boot_watch gained the W.2c trigger-drift

self-heal, run elevated via the watcher; verified next-run 08-01 04:00 ET (game 9ca7e40).

Same-day canon landings recorded above their own entries where applicable: the THIRTIETH

SITTING (the bundled-brief answers — footfall (a), W4 order (a), own_client boundary,

site-deploy (a) after re-presentation, slice-art roadmapped), the GAP-181 FOOTFALL RE-TAG

APPLIED (be03e7a — 84 cells + secondary column + WO-1/WO-2 tooling, gates 35/35), and X9.5

VERIFIED ON THE METAL (self-test GREEN + 25/25 mutation teeth on the 5090 — the P0 entry

criterion met on the hardware it was written for). The box's Continuo occupancy continues per

Josh's finish-list ruling; benchmark day (the X9.5 GPU kill tests + licence reads) is the

first Humanity item at GPU handback.

2026-07-30bf — THE REMOTE PROOF LANDS. THE 24/7/365 LOCATION-BLIND STANDING IS ACTIVE.

The 5090 box (Milks5090) arrived, was built out in one afternoon walk-through

(docs/5090_WALKTHROUGH_SCRIPT.md, Josh's hands + this lane narrating), and passed the

COLD-REBOOT PROOF: restarted untouched, came back through firmware → auto-logon → services →

tunnel, and Josh connected to his desktop from his phone ON CELLULAR with no hands at the

box. ALL EIGHT NON-NEGOTIABLES CLOSED: (1) BIOS Restore-AC-Power-Loss = Power On (change

manifest photographed); (2) never-sleep + hibernate-off + power-button-does-nothing;

(3) Tailscale enrolled — milks5090 = 100.106.82.116, key expiry DISABLED, run-unattended ON;

(4) RustDesk installed AS SERVICE, unattended + permanent password, direct-IP enabled;

(5) BOTH phone proofs on cellular (RustDesk-ID rendezvous AND the direct 100.x tailnet path —

two vendors + one self-routed; Parsec registered as the third lane); (6) UPS USB link live —

PowerPanel Business 4.12.2 reads the PR1500RTXL2UC (137W idle / 9% load / 1h54m runtime;

shutdown-on-critical confirmed; CRITICAL bank = tower+monitor; router in another room =

accepted trade-off, self-heals via restore-on-AC, mini-UPS on the eventually-list);

(7) Claude Code installed + signed in on the box, C:\dev created, the on-box session handed

Stages 0-8 with the wait-for-reboot discipline; (8) THE COLD-REBOOT PROOF ITSELF. AS-BUILT

RECORD: Ryzen 9 9950X3D2 · 131072MB DDR5-5600 (Puget as-shipped Auto profile — record, never

change) · BIOS 2306 06/15/2026 · iGPU FORCED + primary display = IGFX so the full 32GB 5090

is compute-clean (monitor on motherboard HDMI) · three drives C:/D:/E: · local account

joshu (BitLocker OFF, fully decrypted, no key protectors) · Windows privacy toggles all

declined at OOBE. Named remote-cleanup residue: the USB-selective-suspend powercfg setting

rejected twice (value-not-in-range — Device Manager route over RustDesk); Parsec 2FA =

later-hardening item; Windows Update driven to quiescence by the on-box session. PER THE

TWENTY-SEVENTH SITTING'S STANDING DIRECTIVE ("Once the remote setup is setup tonight, scrub

the schedule. You run 24/7/365 - not on my schedule"): the condition is MET, the standing is

ACTIVE — plans never reference Josh's location again; only physically-hands-on hardware is

location-bound. The on-box session owns Stages 0-8 + the overnight bandwidth wave (repo

clones, UE 5.8, model pulls, Continuo pre-installs off the Ally). This lane remains the

canon director. The factory now has its engine room.**

**2026-07-30be — THE TWENTY-NINTH SITTING LANDS WHOLE: thirteen rulings across four

packages + a 14-agent fan-out, one bundle critic, one ritual.** THE SITTING (recorded as ONE

DECISIONS block, six familiar verbatims + sections 10-13): the Ch-1 bonding mechanism (play

decides, the player never told it is measured); NG+ re-bonds by replay with the legendary item

moved to the rift-fall separation; the NG+ reunion universal at any integrity via GIVING THE

ITEM BACK (decline = fight, no reunion — "That's their choice"); post-Epilogue opens the fairy

realm in its player-made state, all 12 tameable; THE SLOT CAP GOES TWO-PHASE 22→33 — a

Josh-authored amendment to locked numerical canon landing EXACTLY on the 33-species roster

(21+12 verified against HL_0057/58; CVD §17.12 amended by deliberate director paste,

CLAUDE.md mirror updated); tamed CREATURES carry via the transferred Personal Dimension

(scale-DOWN only, lower stays lower) while FAMILIARS re-form through bonding questlines —

Josh's creatures-not-familiars firewall recorded first-class, the director's re-tame

recommendation OVERRULED and said so; W-10 CLOSED both halves; rank 24 pre-shaped. THE PARRY

SCALE (§10): mitigation is a SCALE never a binary (much-stronger attacks always leave

residual damage; ordinal only, regex-enforced), the elemental blast-forward mechanism stated,

W-11 RATIFIED by Josh's own "opposite or 'strong' element" phrasing. DA-4 (§11): Option C —

cinematic_tier minted on Scene_Spec (flagship CLOSED at 6 rows + the Ch-66 letter

BLOCKED-no-row; derived-and-declared seeding, provenance column; director_in_loop untouched).

GAP-180 (§12): option (c) — CREATURE_VOCALIZATION the SEVENTH category amended into all six

taxonomy homes + two Foley routing clauses, the waiver list EMPTIED, gate 35 sfx_coverage

MINTED (roster 34→35; C7 routing tooth; fixtures keyed by sfx_id after a positional-mutation

catch). GAP-181 (§13): option (a)-NOW — the 12-classifier fan-out re-tagged 84/84 zones from

page evidence (4 verifier amendments, ZERO Josh flags, 59 tokens change), the end-to-end

brief + retag table installed at docs/proposals/footfall_retag/, THE APPLY STAGED pending

Josh's read (28bf). THE BUNDLE CRITIC (GO-WITH-FIXES, all applied): both landing orders

replayed byte-compare — only key-ORDER differs on two shared JSONs; the scan trap measured

NOT-FIRING (+5/−5/0 in both orders); the three-draft DECISIONS fold fixed to ONE banner

(heading count 1, familiar verify 103/103 on the composed tree); the two stale six-category

T1 lines swept (T1_Architecture_and_State + T1_Combat_System_Spec; BPC:2654 stays as the

sanctioned provenance line); the fk_spec self-contradicting note fixed; the mythic-vs-creature

scaling asymmetry reconciled in one clause (different shapes, each binds its own subject);

fk_spec lands at 45 entries (not the per-package 44s). Register: GAP-141/180 RULED-APPLIED +

GAP-181 RULED-APPLY-STAGED — the register's FIRST closures in its machine status column

(GAP-139 stays OPEN deliberately: gate 30 pairs it with FR-079 until rank 11 flips both).

T99_Translation_Audio swept six→seven ×5. Baseline delta = exactly the critic's predicted

set, key-diffed vs HEAD. Suite green unpiped (35 gates); explicit adds. CARRIED: the 28bf

retag apply (post-Josh-read) · W-14 the binding-stone three-generation reconciliation (owed

since the fifteenth sitting) · W-20 the familiar-vs-creature entity classification ambiguity

(named, never classified) · the item's cross-boundary identity + data home (fairy-realm wave)

· BUILD_PLAN_END_TO_END:257's stale spike row (the standing stale-marker sweep owns it).**

The 130 older entries (2026-07-30bd and back) are relocated verbatim to docs/archive/PRE_5090_PROGRESS_LEDGER.md — the record, not the map. This ledger keeps the newest three; landing a new entry means moving the oldest kept one down to the archive.

0. Gating model (Josh, 2026-07-23 — binding)

The RTX 5090 gates ONLY heavy generative INFERENCE: book deep-read / triage, photorealistic 3D generation, photorealistic asset generation, music generation, cinematic-video generation, and VLM-OCR. Book SCANNING is on Josh (finishes ~same period).

EVERYTHING ELSE IS UNGATED and buildable NOW: deterministic engine code, data / DataTables, systems, mechanics, physics wiring, greybox / blockout, UI / HUD, save / load, input, AI logic, quest / dialogue runtime, seed wiring, tooling, the terrain GIS + Gaea chain (deterministic simulation, NOT generative), PCG graph authoring, Blender-headless finishing.

The one rule: *needs a generative model to RUN → gated; engine code / data / wiring → BUILD NOW.* Do NOT time-box to weeks — the team executes ~5–10× a naive estimate. This document is the COMPLETE ungated surface, not a subset.

Tags used below: DONE (verified built) · BUILD-NOW (ungated, ready) · GATED-5090 / GATED-SCAN / GATED-EXT (external service) / GATED-DEVKIT.

---

1. The critical path (the trunk — five of seven lanes independently nominated it)

This is a typing problem, not a capability problem. Nearly every engine seam is already proven (Landscape import via lvl:import_heightmap, World Partition + Data Layers, PCG smoke-tested, the UE-Python bridge, the DataTable seam at 79 + 281 real rows, the 6,603-line Sequencer Lua domain). The canon layer is far ahead of the build layer (79 spine nodes, 439 scene rows, 281 gate-enforced boss rows, 42 worldstate rows, ~661k-chunk RAG). The scarce resource is the narrow band of deterministic-Python transform tooling between canon and engine.

CRITICAL PATH (three links, none hardware-gated, none needing a ruling):

1. FREEZE THE COLUMNS — build the missing single-writer for the region page's ## Zone Catalog block (apply_region_page_sections.py only replaces ### Section N spans and stops at the next ## , so the most-demanded schema surface has NO deterministic writer), then land ONE coordinated column pack across the Zone Catalog + the six pending registry extensions in a single registry_extensions.json + --emit-baseline commit.

2. CODEGEN THE TYPESREGISTRY_ROW_STRUCT_SPEC.md (column→UE-type contract) + Tools/gen_row_struct.py turning a CSV header into a native USTRUCT : FTableRowBase. *(Repo-state reports this built with 36/36 structs generated — see Contradiction A in §12; verify-then-plan before staffing.)*

3. BULK-IMPORTTools/import_all_registries.py over the DataTable seam already verified at 79 + 281 rows (34 of 36 tables remain unimported).

Feeding the trunk: gen_gameplay_tags.py (tags load at engine init, must precede anything keying on a tag), UWorldStateSubsystem (the central shared trunk — UE5 Step 10 = Combat Step 7 = Cinematic Step 5 all read it), condition_expr.py (the one §9.5 grammar every conditional surface reconciled to), and the spine extractor (spinelib.py + extract_spine_rows.py).

Highest-leverage first moves (do these before anything else)

Parallelization doctrine: keep the Combat greybox + single-region terrain chain as a PARALLEL lane, not strictly behind the trunk (BUILD_PLAN's own falsifier warns rank-1–11 trunk-first produces no frame of gameplay and risks a second 69-page migration if 60+ columns freeze before content proves them). Run three thin end-to-end smokes first — one fantastical vril-site mesh, one quest with dialogue, one scene to a 720p daily — to surface corrected field sets before 69 regions inherit them.

---

2. WS-0 — Trunk / Shared Data Infrastructure *(gates everything; build first, once)*

IDItemTagFirst version / source
T0.1apply_zone_catalog_columns.py + extract_zone_catalog.py — the missing single-writer for ## Zone CatalogDONE (2026-07-23c aa5104a; + regen extension-column preserve)Reader emits zones.csv (FZoneRow source); writer adds/populates a named column all-or-nothing with wrong-place + untouched-drift guards mirroring apply_region_page_sections.py. Source: BUILD_PLAN #2
T0.2The ONE coordinated Zone Catalog column pack + value-encoding grammarDONE (2026-07-23c 79359aa — 7 columns × 27 zones, cited-or-empty; grammar pinned in the template v2.1 note)zone_bounds_wgs84, meters_per_vertex, worldcover_biome, footfall_surface, care_tier, asset_routing/asset_category, environment_grammar EG_ refs. Pin encoding once (semicolon key=value, the composure_nodes precedent); one apply + one --emit-baseline; keep area_bounds untouched (scale-compression policy). Six lanes each blocked on one column in this same table.
T0.3Batched registry-extension pass + ONE fidelity re-baselineDONE-partial (2026-07-23c — the 3 RATIFIED families landed: 84 columns / 12 registries, one re-baseline; the 3 UNRATIFIED families (audio path ×3 / cinematic participant / combat phase cols) ride the Josh-authorized contract amendments; SFX §10.5 reconcile reported, queued as a reviewed change)quest §6.5 (~16 cols); assetgen (~8); audio ue_sound_asset_path×3; cinematic participant mesh_pipeline_type/ue_asset_path/binding_kind; combat phase_trigger/escalation_vector/signature_counters; SFX reconcile; §10.6 sfx_id_ref arrays. Declare all in registry_extensions.json, populate, refresh fidelity_baseline.json in the SAME commit (avoids 5 stale-baseline windows). Rail is BUILT + PROVEN.
T0.4docs/REGISTRY_ROW_STRUCT_SPEC.md — column→UE-type contractBUILD-NOWid→FName, player-facing→FText (ruled law), designer prose→FString, closed enum→UENUM+FString mirror, list→FString+parse, nested→FString-JSON+accessor, FK→FDataTableRowHandle; RowName = first CSV col.
T0.5Tools/gen_row_struct.py — CSV header → USTRUCT:FTableRowBase codegenDONE (verified 2026-07-23 — Contradiction A resolved, 36/36 real)Repo-state: built, 36/36 structs generated into Source/Humanity/Public/Data/. Roadmap snapshot says absent — resolve Contradiction A first. Falsifier: abandon codegen if sidecars exceed ~30% of emitted struct.
T0.6Generate + compile the 14 UE5-consumed row structs (highest-value subset)DONE (verified — all 36 exist and compile)FCreatureRow(132), FSceneSpecRow(31 cols), FRegionIndexRow, FVrilSiteRow, FCharacterRow, FAntagonistNetworkRow, FWorldstateVariableRow, FQuestDefinitionRow, FDialogueLineRow, FThemeRegistryRow, FSFXRegistryRow, FVoiceRegistryRow, FWeaponRow, FEnvironmentGrammarRow.
T0.7FText retrofit on player-facing columns + loc-law by constructionDONE (2026-07-23c — premise stale: the generated structs were already FText; the round-trip falsifier passed both probes, stable NSLOCTEXT keys, bae8dab)Convert FChapterIndexRow.title, FBossEncounterRow.boss_name (both hand-authored + illegally FString) to FText; round-trip ONE FText column through DT_ChapterIndex before generating the rest (falsifier).
T0.8Tools/import_all_registries.py — manifest-driven bulk import + read-backDONE (2026-07-23c bae8dab+084e0c3 — 36/36 in-engine, per-table read-back, composite-RowName mechanism, DT_ThreadGrid 664; DT_ResearchCorpus 1,356 until the canon id-mint lands)One JSON manifest {csv, struct, dest, name-col}×N; per-table read-back, non-zero exit on row-count mismatch. 34 of 36 tables remain (only DT_ChapterIndex+DT_BossEncounter imported). Import priority: Worldstate_Variables → Chapter/Region → Boss(281)/Ability(185)/Character(163) → spine tables.
T0.9Tools/gen_gameplay_tags.py + Config/Tags/HumanityCanonTags.iniBUILD-NOW / PARTIALEmit ws.* (42 rows), thread.T01..T22 (canonicalize the two encodings), region.*, Boss.Phase/Composure/Win/Shape verbatim from check_boss_axes.py. Repo-state: combat tags exist natively; the full canon tag set does not. Must precede any tag-keyed system.
T0.10UWorldStateSubsystem + FWorldStateValue + UWorldStateSaveGameDONERepo-state: BUILT with full typed get/set/SaveAsync API. Run the 3–4-key end-to-end spike (set/read/save/reload/dispatch) before relying on the ~42-key architecture; keep mark_write's {community_id,valence,persistence,forward_track[]} in a separate ledger DataTable.
T0.11harness/condition_expr.py + docs/CONDITION_EXPRESSION_GRAMMAR.mdDONE (2026-07-23c 50220c8 — 49-case golden corpus; precedence + 64-level cap documented for the C++ port)EBNF + tokenizer + AST + evaluator over WS_NNN domains + a golden accept/reject corpus from Block-11 gates and the 88 spike dialogue lines. `has()/at()/flag()/ws.key {==>=<=in} val/read(surface), &/\`, produce-before-consume. The C++ evaluator is then a port.
T0.12harness/spinelib.py + extract_spine_rows.py — factor spine parsers into an emitterDONE (2026-07-23c b2727cb — scenes 439, beats 891 across 79 nodes; gate mutation-proven still armed)Parsers already exist inside check_spine_graph.py (validating 439 scene rows / 80 files). Move the section router + beat/fork parsers into spinelib.py; emit build/spine_rows/CH_NN/{sites,beats,forks,fork_options,scenes,sq,boss}.csv; import from both gate and extractor so they can't drift.
T0.13The four generic shared-infra buildsBUILD-NOW(1) canon-row→prompt composer with per-lane rule tables; (2) content-addressed external-fetch cache + budget limiter (raw payloads outside git); (3) cross-repo writeback manifest schema + one canon-side applier (verifies target asset exists in-engine, refreshes baseline same commit); (4) the self-testing gate template.
T0.14Gate packBUILD-NOWcheck_quest_rows.py · check_asset_pipeline.py · check_scene_spec.py · a Quest predicate added to check_build_readiness.py LANES. Copy the must-fire + must-not-fire fixture shape; refuse to run if own teeth break; enroll in gates_config.json.

---

3. WS-1 — Combat Runtime *(≈95% ungated; highest near-term proof; runs on CURRENT machine)*

Built already (repo-state, compiles clean, commit 8ce8459): UHumanityAttributeSet (Health/Vril/Stamina/Rage/Composure + all 8 mode sub-nodes incl. standalone Character node per D-COMBAT-TD R4), UHumanityComposureLibrary, UHumanityDensitySubsystem (the vril-density dial), UHumanityDialMMC (d_local=clamp(tier_baseline*(WS_024/2),0,1)), UHumanitySigmaRNG, UCombatTelemetrySubsystem, HumanityGameplayTags, ST_BossPhases_Greybox asset (no C++ nodes), DT_BossEncounter (281 rows imported).

IDItemTagFirst version / source
C1.1GAS actor scaffold — AHumanityPlayerState:IAbilitySystemInterface owning ASC + AttributeSet; boss variant carries ASC on pawnDONE (2026-07-23c ceb06c9, critic GO)InitAbilityActorInfo in PossessedBy/OnRep_PlayerState. The single biggest missing seam — nothing owns the built AttributeSet.
C1.2Max/regen attributes + PostGameplayEffectExecute clampingDONE (2026-07-23c ceb06c9 + the PreAttributeChange current-value clamp 084e0c3)Verified gap: .cpp sets no values, no clamp exists. Add Max* per resource/node; clamp [0,Max]; PreAttributeChange handles max-shrink; seed via GE_InitStats (illustrative, tuning firewall).
C1.3Boss data trunk: native tags + BossRowParse + typed cell parsersBUILD-NOWTyped parsers for composure_nodes/character_engagement_node/ws_writes; assert no path writes an attribute from the density value.
C1.4Combat §4 — Boss Data Contract schema extension + check_boss_axes.py v2BUILD-NOWDeclare win_condition/win_shape/signature_counters/composure_nodes/phase_trigger/escalation_vector/character_engagement_node/ws_writes; extend boss_kind enum (add trade_gate/school/weapon/mmo_world); back-fill win_condition/win_shape from 281 rows' prose; never-0-axis (except Pro/Epi bookends) + sub-ladder ≥3 modes. §5 enum values already RULED.
C1.5Composure damage exec + dial GEsDONE (2026-07-23c 084e0c3, critic GO zero findings — the zero-enemy-stat-delta invariant is STRUCTURAL: exec omits density includes; levers on a player-only attribute set)UHumanityDamageExecCalc applying damage + Composure depletion through the MMC; the four world-demand levers (TellSlack/PunishWindow/RechargeLatency/AnswerPruning) as GEs driven by the single d_local float via SetByCaller. Prove zero enemy-stat delta.
C1.6Ability set — one UHumanityGameplayAbility per combat-mode verbDONE (2026-07-23c 084e0c3 — 8 verbs, 1:1 mode→node, Astral tag-gated, C++-granted via UHumanityAbilitySet)Direct/Stealth/PuzzleRoute/Environmental/VrilManage/Familiar/Astral/CharacterEngage; each depletes its matching Composure sub-node → native Boss.Composure.Node.<Mode>.Broken tag; Astral gated by ActivationRequiredTag.
C1.7Boss StateTree framework — schema, Tasks, Conditions, ~30 clocks, evolve-not-swapDONE-v1 (2026-07-23c game cb70dfb — the three core nodes + external-data binding; the wider clock library accretes per-boss)FStateTreeCondition_ComposureNodesBroken, FStateTreeTask_WithdrawalClock (enrage replacement: vril_density -= step, never a damage spike), phase-push evaluator. UStateTree.EditorData is protected → the state GRAPH is an in-editor manual pass (build an editor-module authoring helper — see C1.8). Largest zero-built block; cinematic is blocked on it.
C1.8StateTree authoring escape hatch (C++ editor-module UFUNCTION)DONE (2026-07-23c game cb70dfb — UHumanityStateTreeBuilder built a real persisted 2-phase BE_0002 graph headlessly; no 5.8 API wall)UFUNCTION(CallInEditor) building states/transitions/Enter-Conditions from DT_BossEncounter programmatically — removes the ×281 manual pass. We compile our own editor module, so the wall is a build item.
C1.9Composure sub-node Pillar-8 enforcerBUILD-NOWEach mode-node depletable only by that mode's verb + the standalone 8th character node; StateTree phase-transition reads "N nodes broken." Prove a single-verb player cannot break Composure before Withdrawal bites.
C1.10d_local resolver + score_greybox.pyDONE (2026-07-23c — GetDLocal reads the density-band seam, never landscape Z/latitude; score_greybox gates SHAPES/RELATIONS/FLOORS only; the telemetry orphan closes)Extend DensitySubsystem GetDLocal(); score_greybox reads Saved/Telemetry/<session>.json → scorecard gating SHAPES/RELATIONS/FLOORS only. Reads WS_024 from region density band, NEVER landscape Z or latitude (C1 ruling). Closes the TelemetrySubsystem→scorer orphan.
C1.11Difficulty controller (5 presets)BUILD-NOWWellspring/Veiled/Fading/Sundered/Forgotten One set the density float; telegraph-slack + punish-window + well-latency read it; NG+ = distinct flag, and NG+ is ruled enhanced difficulty AND complexity (twenty-eighth sitting item J5, 2026-07-30). Asserts no HP/loot scaling path AS THE DIFFICULTY SOURCE — bounded HP/damage scaling is permitted as the minority contributor, so the controller must expose the COMPLEXITY levers (moveset breadth, attack range, live-hazard count, cycle interleave) beside the density float, and the assertion is that neither the density float nor a stat table is the only lever.
C1.12Environment-as-surface → ChaosBUILD-NOWChaos Destruction + Cache (deterministic replay) + Dataflow; fixed D-verb set (D1_COLLAPSE…D11_OBSCURE) bound to physical_properties_array/loaded_potential from T0_Environment_Grammar_Registry; C2 alteration_permanence gating; env_boss_verb_disabled=TRUE on sacred markers.
C1.13Environmental-boss protocol → StateTree (non-damage win)BUILD-NOWPerception→Vril-management→Restraint→Purgation state machine (StateTree, NOT GAS — no damage attribute) + MetaSound polarity feedback; hidden genuine_echo/negative_manifestation; restraint_budget clock; graduated-consequence failure. Win class PURGE/ATTUNE. 6 canon instances.
C1.14Habit-vector + sigma-selector componentBUILD-NOWUPlayerHabitVectorComponent rolling histogram biasing a Sigma-bounded move-selection table (nudges, never frame-perfect punishes) — the "smarter not stronger" proof. Applies CVD §17.13 Sigma Constraint.
C1.15Boss phase→beat fight-AI framework (C-14 / Cinematic-spike-4 resolver)BUILD-NOWTurns a PCG-spawned boss marker into a real fight (patterns, phase transitions) and emits the boss-combat-state GameplayTag/StateTree event the Sequencer cinematic trigger listens for. Comparable scope to the landscape shim, for combat.
C1.16GameplayCue framework + 8 broken-node cuesDONE (2026-07-23c 084e0c3 — native tags + notify-family stubs; the channel proven, Niagara art rides the 5090)UGameplayCueManager + notifies (placeholder Niagara) for hit/telegraph/status/vril-polarity + one per Boss.Composure.Node.<Mode>.Broken, fired alongside RecordNodeBreak. Color-independent channel proven (L1 accessibility).
C1.17Companions/fauna/factions runtime splitBUILD-NOWCompanion/familiar combat AI 100% deterministic (utility/GOAP @60Hz, Ch-73 paired-op combo); fauna deterministic BT/utility; faction director (~0.005–0.02 Hz) raises a weight the encounter system reads; protected-community wall = deterministic hard-fail (HL_0003).
C1.18Combat greybox prototype (§7) — the headline proof, THIS monthBUILD-NOWOne boss-as-system on installed 5.8.0: greybox arena + ASC + 2–3 sub-nodes + one vril_density float; 2 verbs as GAs; 2 StateTree phases; clocks + habit vector; the character node. Exit: same authored boss plays at two world-tensions with zero enemy-stat delta. Verify 5.8 GAS AttributeSet-init deprecation (C-7).
C1.19Combat contract + docBUILD-NOWAuthor Contracts §11 Combat/Runtime; run normalize-doc critic then flip T99_Translation_Combat DRAFT→ACTIVE; declare round-2 columns + re-baseline.
C1.20Runtime strategy-token spine (deterministic, NO GPU)BUILD-NOWToken schema {goal∈enum, plan∈legal-set, knobs∈ranges, line≤N} read-only leaf; V1–V5 validator (cultural denylist→hard-line rule-vector→canon-graph name resolution + retired-alias index→persona/register→anti-slop); authored fallback bank keyed by (entity_id,state_bucket); runtime_generation_log + pass-rate scorer. The sim is coherent on fallbacks alone.
C1.21Recall-packs exporter (atop recall.py)BUILD-NOWOffline exporter freezing a per-entity pack (persona_card, fewshot, hardline rule-vector with applies_to_pipeline=Runtime, fact_whitelist, retired_alias_index, care_band, action_vocabulary, state_bucket_map). Add the Runtime enum value to T0_Hard_Lines so V2 is non-vacuous.
C1.223–4B guardrail smoke (CURRENT machine)BUILD-NOWllama.cpp + one 3–4B GGUF under a GBNF grammar emitting {emotion∈enum, line≤20 tok} through the V1–V5 validator + fallback + pass-rate log. Constrained decode + per-entity logit mask make malformed/off-vocab/retired-name output unsampleable. The 3–4B ship-target runs today; only the 14B reference is 5090-gated.
C1.23Stealth/detectionBUILD-NOWAI sight/hearing cones + detection meter → break-LOS backstab-grade Composure_Stealth depletion (attribute already exists).

---

4. WS-2 — Core Player / Character *(mostly greenfield engine code, all ungated)*

IDItemTagFirst version / source
P2.1AHumanityCharacter + CMC locomotion + AHumanityGameMode/UHumanityGameInstance + boot mapBUILD-NOWThird-person capsule (walk/run/sprint/jump/crouch) + SpringArm; GameInstance so subsystems init; GameMode with DefaultPawn; greybox test map as startup so PIE spawns a controllable ASC pawn. No gameplay-actor scaffold exists today.
P2.2Camera systemBUILD-NOWFollow cam + soft lock-on to nearest hostile with Composure; toggle + target-switch. *(Camera SPEC is a Josh gap — §12.)*
P2.3Enhanced Input — UInputConfig + UInputAction + IMCBUILD-NOWMove/Look/Attack-primary/secondary/dodge/interact/ability/ModeSwitch/lock-on + wheel-select axis → GAS activation tags; player strings via String Tables. *(Control-scheme SPEC is a Josh gap.)*
P2.4HUD / UMG overlayBUILD-NOWBound player bars + boss Composure bar + interact prompt + objective tracker (placeholder art). *(UI/UX IA spec is a Josh gap.)*
P2.5String Tables / localization scaffolding + gather-commandletBUILD-NOWRoute every HUD/interaction/quest string through a String Table from the first widget; FText-column rule enforced in codegen; wire the gather-commandlet. *(Loc STRATEGY is a Josh gap.)*
P2.6Inventory / equipment / loadoutBUILD-NOWUHumanityInventoryComponent + equip slot granting the weapon's GA-set + drop-table pickup (72 weapons canon; mesh_id_ref null until asset-gen). *(Equip/stash/weight SPEC is a Josh gap.)*
P2.7Save/load — extend the built WorldState stackDONE + EXTENDUWorldStateSubsystem/FWorldStateValue/UWorldStateSaveGame exist. Extend the serialized set to inventory + progression + quest + reputation + integrity; native tags for WS_019/020/021/024; checkpoint actor SaveAsync.
P2.8Progression / masteryBUILD-NOWUHumanityMasteryComponent 12-tier ladder per trade; gate-quest hook grants ability/verb on tier-up; 120 gates (12×10); metroidvania retroactive-unlock flag. Key on GRADE index (player-facing), GATE index for the 120 roster *(confirm — §12)*.
P2.9Integrity / alignmentBUILD-NOWUHumanityIntegrityComponent 5-band field (collapse to 3 at Ch65 lock-in); integrity_band_field GAS modifier is the ONLY canon-permitted attribute delta, PLAYER-only; PathLockState freeze at Ch65 (post-lock deltas write texture only); companion-loyalty + gated-target eligibility.
P2.10Interaction systemBUILD-NOWUHumanityInteractableComponent + interface; trace → typed dispatch (pickup/talk/inscribe/gather/mount).
P2.11Character creation — four selections onlyBUILD-NOWbest-friend gender→healer's-child companion, familiar species→slot-1 lock, appearance base, name. No class/alignment/race. Writes base BiographyState.
P2.12Biography state + appearance-variant selector + age-stageBUILD-NOWBiographyState struct (integrity, appearance, relationship, age stage, path lock, recent-event flags); SelectAppearanceVariant(score,ageStage,pathLock) returns a variant id the render layer consumes (final mesh is gated); AgeStage enum chapter-anchored (D-06 two-clock).
P2.13RNG Sigma-constraint drop systemDONE + WIREUHumanitySigmaRNG/FSigmaConstraintState BUILT. Add UHumanityDropComponent binding to DT_RngDropTable rows; serialize the per-channel σ-window map so anti-streak survives save/load. *(RNG_Drop_Table is currently 0 rows — author first.)*
P2.14No-dead-end persistence subsystemBUILD-NOWOn death: write a graduated persistence delta to ws.* (front strength, boss array) + respawn at checkpoint with the world ADVANCED, never reset; no progression flag hard-gated on a kill. Guarded by check_no_dead_end.py.

---

5. WS-3 — Quest / Dialogue Runtime *(content already authored + critic-gated, nowhere to land)*

IDItemTagFirst version / source
Q3.1Quest lane land-and-author (Q-1…Q-13)BUILD-NOWExtend registry (§6.5 schema); create docs/quest_dialogue/ + pinned 6-col DD header; land the spike (25 quests + 17 SQ stages + 88 lines) as typed rows via the O-1 transform; check_quest_rows.py; author T99_Translation_Quest. Content is already authored (four GO-WITH-FIXES).
Q3.2Six-option dialogue SELECTION engineBUILD-NOWDialogueNode {4 bio-variant sets keyed by band, 1 Good {shift}, 1 Evil {shift}, form enum per option}; SelectOptions(biographyState) + ApplyIntegrityShift. Content authored, not procedural (mandate); voice audio gated.
Q3.3UQuestSubsystem — beat state-machine over DT_BeatBUILD-NOWSequence beats by seq within a chapter; gate on in_state predicate (condition_expr); apply out_state writes (ws.* durable→WorldState, local.* transient); dispatch to boss/scene/fork handlers. Drive Ch2 end-to-end (10 beats, 1 fork, 2 bosses) as the vertical-slice proof.
Q3.4Fork/integrity dispatcher over DT_ForkBUILD-NOWRead FORK_* options (direction, delta class, mark_write, ws_writes); write ws.integrity_score + durable region mark_writes; derive band/world_state/path_bucket; enforce no-dead-end. Needs the qualitative-delta→integer map *(§12)*. Wire FORK_CH02_A → Kelimutu mark_write consumed at Ch63.
Q3.522-bucket quest framework + 12 SQ bucketsBUILD-NOWQuestRuntime over Quest_Definition rows (state graph, flags, triggers, bucket enum) + multi-path/no-dead-end validator; SQ1 Fairy/Folklore…SQ12 Secret Societies routing.
Q3.6Journal systemBUILD-NOWAuto-assemble entries from decision flags + path-band template selection; hard-anchored Ch13/38/57 entries; healer's-child voice; Evil sparse/cold → Good rich/warm texture.
Q3.7Language-decode / inscription systemBUILD-NOWInscriptionDecoder: puzzle per script, auto-decode speed scaling with Trade-9 tier, unlock payload on solve (cuneiform→chambers, runes→weapon abilities, etc.) over Language_Script/Inscription_Spine/Rune DTs.
Q3.8Grimoire / cross-cultural link graph + 22-thread systemBUILD-NOWGrimoireGraph {nodes on discovery, link-action requiring a scholarly-basis ref, reward on valid link} over Cross_Cultural_Link_Graph (184 edges) + Thread_Grid(664)/Thread_Registry(22). Pillar 5, the "highest-leverage innovation."
Q3.9Persona-voice LoRA dataset accumulation collectorBUILD-NOWAccrete ratified personas + gate-passed lines as positives, validator-rejected/fallback lines as hard negatives, so the workstation arrives to a ready corpus. *(Training RUN is 5090-gated.)*

---

6. WS-4 — World / Terrain / Level *(ENTIRELY ungated — DEM/GDAL/Gaea are deterministic simulation)*

Proven: lvl:import_heightmap built a real 379×379/36-component Landscape (Liang Bua smoke); World Partition + Data Layers exposed; PCG smoke-tested (PCG_HelloGraph saved); terrain_fetch_preprocess.py + OpenTopography key in.

IDItemTagFirst version / source
W4.1Landscape-import C++ shim — UFUNCTION(BlueprintCallable) wrapping ALandscape::Import()BUILD-NOWSpawnActor<ALandscape>ImportRegisterAllComponentsPostEditChangeProperty. Named the single highest-priority engineering dependency, reused ×69. Test against one real heightmap (valid vertex size) with WorldCover-derived initial weightmaps. No region's build runs before this exists.
W4.2derive_region_bbox.py + Section-1 PARAMETERS BLOCK on all 4 pagesBUILD-NOWTerrain lane's formal exit condition. Union zone polygons + pad; local UTM EPSG from centroid; emit region_bbox/utm_epsg/meters_per_vertex/target_footprint/dem_source/water_plane/gaea_pass. D-MPV ladder RULED: 1m hero · 2m standard · 5–10m ambient, per-AOI.
W4.3terrain_fetch_preprocess.py hardeningBUILD-NOWTwo are real DEFECTS: encode ABSOLUTE metres (per-AOI normalization means tiles won't stitch); rasterio.fill.fillnodata + void-fraction metric triggering NASADEM fallback (np.where slams voids to region MINIMUM, manufacturing false craters). Content-addressed DEM cache keyed on (bbox,mpv) + 50-call/24h limiter.
W4.4The full deterministic GIS chain (Steps 1–8)BUILD-NOWbbox parse → Copernicus GLO-30 via OpenTopography (NASADEM fallback) + ESA WorldCover + Sentinel-2 same-AOI → GDAL/rasterio reproject/mosaic/clip/resample to per-AOI mpv → rasterize vril-site/era carve → Gaea .tor CLI erosion/thermal/snow → gdal_translate -ot UInt16 16-bit emit → WorldCover→weightmaps. Run Flores AOI end-to-end first.
W4.5Tools/landcover_fetch.py (WorldCover 10m + Sentinel-2 via Planetary Computer STAC) + reclass tableBUILD-NOWThe difference between grey geometry and a painted/vegetated/PCG-populated Landscape. Resample onto EXACTLY the Step-3 elevation grid so weightmaps are pixel-aligned; feeds worldcover_biome + auto-material + PCG Biome key.
W4.6World Partition setup — convert commandlet + builders + Data LayersBUILD-NOWWorldPartitionConvertCommandlet (CellSize/RuntimeGrid/HLOD); headless HLOD/minimap/navmesh builders; tag protected Zone-Catalog sites into a SafeZone Data Layer. One WP .umap per region_id (~69–76).
W4.7Terrain→level chain — tile splitter → import_landscape.pybuild_region_level.pyBUILD-NOWSave via UnrealEditorSubsystem.GetEditorWorld→SaveMap (untitled maps can't save); set CellSize; tag protected zones; call PCGComponent.generate() AFTER actor spawn. Rides already-verified seams.
W4.8PCG binding — PCG_BINDING_AND_POPULATION.md + PCG_Biome_* templates + bake_region_pcg.py + M_Landscape_AutoBUILD-NOWterrain_type→template routing with explicit fallback (unseen enum never silently no-ops); ambient_threat→density, vril_density→creature-tier filter as illustrative defaults under the tuning firewall. Wrap -Builder=PCGWorldPartitionBuilder + Grid-Size edge-case test. Treat PCG Biome Core as Experimental v0.2. *(×69 batch bake is 5090-gated; harness is not.)*
W4.9Canon-integrity DataValidation validatorsBUILD-NOWUEditorValidatorBase asserting every DataTable RowName still matches its registry id + FK-handle resolution (catches the re-import-renames-a-row orphan class — the recorded chunk_id-collapse failure). Cook-time gate.
W4.10Cook/package + DataValidation CI (RunUAT)BUILD-NOW-run=DataValidation (RowName + reveal-ladder + hard-line validators); RunUAT BuildCookRun … -nullrhi/-RenderOffScreen headless per-region cook; re-run per commit.

---

7. WS-5 — Cinematic Assembly *(entire Sequencer chain ungated; only rendered assets gated)*

Canon input COMPLETE: 439 gate-validated scene rows (only 16 as machine rows). NeoStack Sequencer Lua = 6,603 lines of camera/track/keyframe authoring. UE-Python bridge verified.

IDItemTagFirst version / source
CN5.1extract_spine_scene_rows.py → Scene_Spec to 439 rows → FSceneSpecRowBUILD-NOWExtractor first (3.6%→100% coverage).
CN5.2T99_Cinematic_Shot_Grammar (11 scene_types) + 11 LS_TPL_* templates via build_shot_templates.pyBUILD-NOWCamera blocking/cut rhythm live in the template, NOT the schema.
CN5.3assemble_scene_sequence.py — scene rows → SequencerBUILD-NOWLevel Sequence per row duplicated from scene_type template; scene_anchor_id→asset/regen key; beat_refMovieSceneSubTrack slot; participant_refs→possessable/spawnable bindings.
CN5.4Participant resolution + site/level anchoringBUILD-NOWpossessable (add_actors)/spawnable bindings against MetaHuman/Crowd/modular; MetaHuman Animator audio-driven facial (against placeholder SoundWave); IK Rig/Retargeter body-anim; beat→site→region join → MapName; streamed sub-levels for Ch66-69 realms + Personal Dimension.
CN5.5DT_SceneDispatch + path-conditional resolverBUILD-NOWKeyed by scene_anchor_id + committed path_bucket (WS_004) + WS_005 → scene_spec_ref via FDataTableRowHandle, falling back to ALL/UNLOCKED. Ch76 Two Courts (FORK_CH76_A/B) is the showcase; Ch77 the path-invariant counter-case. *(convergence_node_scene_dispatch schema ratification is a Josh gap — §12.)*
CN5.6Realtime cinematic trigger channel + console debug emitterBUILD-NOWLevelSequenceActor fired from boss-phase-threshold StateTree event (C1.15) + quest beat entry/exit; ship a Humanity.Boss.EmitPhase N debug emitter so cinematic is testable with NO boss AI.
CN5.7check_scene_spec.py + render_mrq_dailies.pyBUILD-NOW720p MRQ daily needs nothing external; route MRQ/MetaHuman through the UE-Python bridge (NeoStack ships those as absent stubs).
CN5.8One MetaHuman NPC in-engine + stable asset-id (e.g. Mama Klara)BUILD-NOWIn-engine creator native since 5.6; one afternoon discharges the NPC category AND the participant-asset blocker. Epic sunsets the browser Creator 2026-11-05 — build sooner.
CN5.9MetaHuman batch execution harness (coefficient sampling)BUILD-NOWGetFaceModelCoefficients/SetFaceModelCoefficients parametric variation via the Character Editor Subsystem + batch execute for one region's roster; classic modular-NPC fallback (Crowd is Experimental). *(Roster-scale gen 5090-gated; cloud auto-rig round-trip is a throughput spike, not 5090.)*

---

8. WS-6 — Audio Framework *(import + adaptive wiring ungated; generation gated)*

Proven: import seam (smoke_stone_door.uasset); Flores pass-2 tagged {adaptive|loop|oneshot}.

IDItemTagFirst version / source
A6.1Section-10 machine cue table + Flores backfillBUILD-NOWcue_id is head-of-chain; add cue table to T1_Region_Page_Template §10 flipping lane_audio READY.
A6.2SFX schema reconcile + §10.6 sfx_id_ref arraysBUILD-NOWReconcile T0_SFX_Registry to Contract §10.5; per-registry arrays (weapon/region/vril-site/ability/familiar/inscription/boss/scene/chapter).
A6.3Author FThemeRegistryRow/FSFXRegistryRow/FVoiceRegistryRowBUILD-NOW3 audio USTRUCTs; tempo_bpm/bar_length/per_stem_role RULED + declared on Theme_Registry.
A6.4import_audio_assets.py — SoundFactory import (format-agnostic)BUILD-NOWSame AssetToolsHelpers.import_asset_tasks pattern as mesh; import mechanics are the one SOLVED thing.
A6.5MetaSounds/Quartz adaptive graphs + per-zone footfallBUILD-NOWMetaSoundBuilderSubsystem 3–4-layer adaptive graph + Quartz beat-sync clock against placeholder stems; footfall_surface from Zone Catalog. Use MetaSound Inputs, NOT Variables (Builder API limit — spike #5). Music-STATE cue routing (which theme by biography/combat) is ungated.
A6.6compose_audio_prompts.py + V_<voice_id>__<dialogue_line_id> conventionBUILD-NOWPublish the SFX/voice path convention to the quest lane.
A6.7Licensed SFX acquisition — Sonniss #GameAudioGDC bundles (FREE)BUILD-NOWDownload into a SEGREGATED tree (Sonniss/EastWest prohibit AI training) so a future training corpus stays owned-only. Acquire immediately.
A6.8Audio VFX/GameplayCue routing + UHumanityAudioSubsystemBUILD-NOWFootstep-by-surface + combat-hit SFX hooks + ambient bed slot + music-playback slot (playback ungated; generation gated).

---

9. WS-7 — AssetGen Pipeline (schema/scripts half) *(the MOST gated lane, but the wiring is ungated)*

External in place: Blender 5.1 installed; FBX→UE seam verified; NeoStack Tripo provider exposes text_to_model/texture/highpoly_to_lowpoly.

IDItemTagFirst version / source
AG7.1mesh_tags value-grammar + asset_category/asset_routing enum spec + registry extensionBUILD-NOWDeclare the §2.6 column set + mesh_id_ref on the five missing registries (currently 0/72 with no populator).
AG7.2docs/capture_rights_register.json + §17.1 gate teethBUILD-NOWNon-negotiable. Some UNESCO living-heritage sites prohibit commercial 3D capture → licensed-kit or hand-modeled. *(Operational process is a Josh gap — §12.)*
AG7.3compose_asset_prompt.py (morphology/region/style/material/era)BUILD-NOWPer-lane rule table.
AG7.4mesh_finish.py — Blender 5.1 headless finishing harnessBUILD-NOWRetopo (Decimate/remesh) + UV unwrap + texture bake + export + LOD chains (_LOD0/_LOD1) + convex-hull collision. Decimate target reads steam_deck_minimum from the §1.7 budget table (illustrative until 5090 benchmark). Operates on placeholder meshes now.
AG7.5import_mesh_asset.py + apply_mesh_writeback.py — import leg + state machineBUILD-NOWAssetImportTask + mesh_id_ref write-back; five-state machine (pending/in_progress/complete/rejected/regeneration_required) + five regen triggers + generation_prompt_hash detection. Wire against a placeholder mesh so it's ready when generated meshes arrive.
AG7.6check_asset_pipeline.py gateBUILD-NOWSelf-testing template reuse.
AG7.7T0_Familiar_Registry schema + 33-species populationDONE (per repo-state)Repo-state: now 22/22 populated. Roadmap snapshot flagged it a one-line file — verify. §2.2/§2.3 require it as a generation source.
AG7.8Run the whole chain on ONE fantastical vril-site assetBUILD-NOWZero §17.1 exposure — surfaces the CORRECTED field set before 69 regions inherit it. One of the three thin end-to-end smokes.

---

10. WS-8 — NPC / Persona / Faction / Companion / Familiar *(deterministic runtime; only barks gated)*

IDItemTagFirst version / source
N8.1Entity persona system + multi-path validatorBUILD-NOW13-field PersonaComponent on every entity (life/job/relationships/state) + community-ripple event on death + no-dead-end lint on quest graphs. Never gates progression. §17.1 collective-care killing-ripples.
N8.2AHumanityNpcCharacter persona runtimeBUILD-NOWReads CharacterIndexRow + persona; state (alive/dead/hostile/ally) + community-memory flag rippling to reputation; multi-path availability.
N8.3Antagonist network runtimeBUILD-NOWAntagonist_Network (62–64 rows: sector, awareness tier, recurrence) driving Hunter-Trigger encounters + embodied-champion re-fights (AAA move #1). Reveal-discipline aware (no House-of-Velheim pattern before ~Ch38).
N8.4Faction / reputation subsystemBUILD-NOWPer-faction standing scalar + threshold events + kill/aid ripples over Reputation_Ladder; feeds companion recruitment + quest availability.
N8.5Companion / loyalty systemBUILD-NOWCompanionController join/leave gated on integrity band + logged actions; utility-AI combat; disposition-bias; best-friend seeds the main companion.
N8.6Familiar system — 22 slotsBUILD-NOWFamiliarSlots[22]; slot-1 locked at char-create; bonding quests fill 2–21; slot-22 path-variable resolver; AHumanityFamiliarPawn (follow + paired-op Composure hook). Familiar_Registry 22/22.
N8.7Creature roster / spawn / bonding / taming / breedingBUILD-NOWSpawner over Creature_Roster(132) with spawn/bonding-window/tameable fields; TamingController (Trade-1 bonding); BreedingController on the ordinary roster — offspring ALWAYS ordinary-tier (assert no legendary elevation, HL_0057/58). 33 legendary species (21 mortal + 12 elven).
N8.8Minigame frameworkBUILD-NOWUHumanityMinigameSubsystem + per-game handler over Minigame_Registry (MG_ prefix) + result→world-state writeback (Senet, ballgame, tektek divider, inscription-alignment). Top-score persistence (L2 completion). *(Row counts author-locked — §12.)*
N8.9Vehicle/mount + world/base buildingBUILD-NOWVehicleController over Vehicle_Registry (VH_) + upgrade trees + ownership (Vimana/ship traversal); BuildableController + Dwelling_Registry, home-base plots first. Max-upgrade = L2 completion. *(Row counts author-locked — §12.)*
N8.10Situation / mini-arc framework + astral combat layerBUILD-NOWSituationArc {beat sequence, era-rhyme pair, entry trigger} (capture/gladiator↔Olympics/trial/heist/siege/undercover assimilation/rescue/festival…); AstralMode combat context reusing the sim for Hard-Line-chapter sanctuary + modern astral infiltration.
N8.11Voice ROUTING + SFX registryBUILD-NOWVoiceRouter selecting a voice-variant id from BiographyState with §17.12 gender-lock + §17.5 no-pre-reveal-leak asserts; SFX event router. (Selection ungated; generation gated.)

---

11. WS-9 — Tooling / Automation / Benchmark harnesses

IDItemTagFirst version / source
X9.1Project + plugin baselineDONE5.8.0 BuildId 55116800; GameplayAbilities/StateTree/GameplayStateTree/PCG/PCGToolset/NeoStack/MCP enabled; NeoStack built as source + smoke-tested (pre-flight gate SATISFIED 2026-07-19). Impose the human-in-the-loop checkpoint policy (mandatory-pause on any §17/hard-line-touching or bulk/destructive op).
X9.2Markdown-table-extraction pre-stepBUILD-NOWPull site/beat/fork/scene/SQ rows embedded in docs/spine/CH_NN.md into the same CSV shape as registries; validate against check_spine_graph.py.
X9.3Headless import-all batch + DataTable round-trip verifyBUILD-NOWDriver iterating all 36 registries: regenerate struct → import → GetDataTableRowNames read-back → assert row count vs CSV; fail loudly on column/FK mismatch.
X9.4Canon graph + recall (build-time + runtime validation)DONE / EXTENDcanon_graph.json (3,118 nodes/11,974 edges) + recall.py serve perfect-precision packs. C1.21 exporter rides on it.
X9.5Write the 5090 benchmark harnesses NOWBUILD-NOWGaea-vs-Landmass kill test · 69-region throughput extrapolation · WP+PCG runtime cost at 1m hero · MOSS/ACE-Step scoring rigs · runtime-inference perf budget. Several are KILL TESTS that could DELETE work before hardware arrives — run the TRELLIS.2 GPU-free licence re-check FIRST (may delete the PyTorch3D spike). Authoring needs no GPU.

---

11.5 WS-10 — AI QA / Iteration Loop *(added 2026-07-23c on Josh's directive; the loop that wraps EVERY workstream)*

The full architecture is docs/proposals/AI_QA_LOOP_ARCHITECTURE.md (PROPOSAL-TIER, critic-fixed;

ENGINE-class) — that doc OWNS the item table (QA-1..QA-14) and the per-pipeline hook map; this

section is the workstream pointer, not a duplicate. The loop: build → rendered visual verify (the

standing directive: critics READ captures, shots go to Josh) → functional/regression → AI playtest

(the verified InjectInputForAction path — works in PIE, -game, AND packaged) → scorecards + typed

bug records → repro-first fixes (no fix without a failing automated repro; every fix leaves its

regression test) → enhance/polish waves → Josh feel-pass (never bug-finding). 13 of 14 items

BUILD-NOW; only the Gauntlet soak-player tier (QA-14) is 5090-scale. First moves: QA-1 (the

capture/screenshot harness — the single biggest missing seam), QA-2 (FunctionalTesting linked + a

seed test), QA-5 (the bug ledger), QA-6 (image-reading critics) — then the loop starts operating on

the wave-6 rig immediately.

QA-1 · QA-2 · QA-5 · QA-6 — DONE and LIVE (2026-07-23e; game f25d8a3, canon 0f365c5). The

loop ran end-to-end on the C1.18 rig its first day and caught five real bugs (see the ▶ PROGRESS

LEDGER top entry + the game repo's 8-record QA/bugs/ ledger). QA-8's self-testing-gate law and

QA-9's repro-first discipline are already operating (every fixed record carries its regression ref).

Design note for QA-3 (the per-workstream functional-test pack): map-PLACED AFunctionalTest actors

need an UncookedOnly module home (FunctionalTesting is a Developer module — a Runtime-module

subclass is a latent Shipping break; the engine critic caught it, the unused actor was deleted).

12. Decisions needed from Josh (merged)

2026-08-03 (thirty-first sitting, in-chat): items 7 (twelve-tier), 10 (strategy-token schema RATIFIED), 12 (THREAD_NN), 13 (range_id stands, challenged and answered), 15 (import routing authorized), 16 (SFX: Sonniss-max + local models; no ElevenLabs/Krotos spend), 18 (language corrected: AI TOOLING, never training), 21 (capture rights: NO gating), 23 (bookends PLAYABLE - mis-framed), 25 (NVIDIA Cosmos + Omniverse named), 27 (single-player-first; MMO post-79-chapter release) are RULED - the authoritative record is docs/spine/DECISIONS_PENDING_JOSH.md thirty-first sitting. The entries below stand as historical.

Cardinal-canon rulings (batch into ONE brief — drip-feeding serially stalls quest seed-typing for all 69 regions, the first voice batch, and the dispatch resolver):

1. quest_type enum — reconcile-and-extend 18→21 (mint minigame_stage, festival_or_daily_immersion, trade_expression as new game-surface categories, not restatements). §6.5 is already ratified ACTIVE at 18 members.

2. GRAND_SAGE_REVEAL_VOICE — retire vs re-scope: T0_Voice_Registry specifies a full speaking voice for a being HL_0046 says never speaks. Must rule before the first autonomous voice run.

3. Ch74→76 endgame re-cascade residueAPPLIED 2026-07-23c (325115a), confirm-or-reverse on the brief: WS_004 domain +ALL, the dead Ch74/Ch75 resolver tokens re-pointed to the Ch-76 Two Courts anchors, WS_015 left alone, + the same-class T1_Integrity_Paths §5.4 "Phase 3" residue swept.

4. CHAR_0008 Rangku Wera persona depthAPPLIED 2026-07-23c (3ab6db9, director-ruled path b, critic GO): the two grief-implying phrasings reframed to the canon vril-hollowing mirror; no biography invented; Josh's named-loss authorship (path c) stays the open upgrade.

Structural / numerical reconciliations:

5. Region-count driftRESOLVED on evidence 2026-07-23c (7db39ac): the CVD §17.12 numerical-canon block contains NO region count; 69 was the soft region-PAGE target (67+2), WGM superseded it to 71, the live registry is 76 rows (71 + the five 2026-07-12 Realm-Road realms) covering all 79 nodes. WGM §14.8 fixed to 76 with denominators; the node_kind derivability column rides wave 3C. The ONE remaining Josh call: the CLAUDE.md "69 regions" list-membership line (D-69-CANON-LINE on the brief).

6. Contradiction ARESOLVED (verified 2026-07-23): the 36/36 native USTRUCT headers are REAL in Source/Humanity/Public/Data/ (game 986e22a); the roadmap snapshot was stale. Codegen + structs DONE.

7. Twelve-tier encoding — key mastery on the GRADE index (player-facing) and the GATE index only for the 120-questline roster. Confirm.

8. 72 weapons — 4 author-locked slotsRESOLVED-STALE (verified 2026-07-23c): all four were already assigned AND Josh-confirmed 2026-07-08 with care framing in their source cells — WPN_035 Shotel (Ch 9, Aksumite/Habesha secular martial heritage), WPN_036 Macuahuitl (Ch 47, Mexica), WPN_071 Reindeer-Antler Knife (Ch 29, Sámi secular duodji niibi only — no noaidi drum/joik/sieidi), WPN_072 Woomera (Ch 57, AIATSIS-protocol composite-by-nation, no Dreaming/songline content). Nothing awaits assignment; damage/vril mechanics ride the normal later passes.

9. Additive AAA systems row-counts/columns — monster breeding, vehicle/mount upgrade trees, world/base building, minigame framework are ratified in principle (MG_/VH_ registries canonical) but row counts + columns are "authorial and not set here." Josh sets content scope.

10. Runtime strategy-token schemaDRAFTED proposal-tier 2026-07-23c (788aa9f, critic GO_WITH_FIXES applied): docs/proposals/RUNTIME_STRATEGY_TOKEN_SCHEMA.md — per-entity-class schemas with enums read live from owning registries, the V1–V5 contract, the fallback-bank + log + model-swap seam. LOCKS on Josh's ratification; the C1.20 executor waits on it.

Data-import mechanics (small, but block the exporter):

11. Qualitative-delta → integer mapping — fork ws_writes use band phrases (+substantial-generative); the integrity dispatcher needs the per-class integer weights (band map exists in T1_Integrity_Paths).

12. Thread-id dual encoding — Chapter_Index packs T01..T22, Thread_Grid/Registry key THREAD_01..22. Canonicalize (recommend THREAD_NN). *Partial 2026-07-23c: the import layer no longer depends on it — DT_ThreadGrid keys on the composite (thread_id,chapter_id) RowName (game 084e0c3); the encoding ruling itself stays open.*

13. range_id stays a plain grouping label (no DT_Range) for v1 — confirm.

14. CSV double-encoding (§Â§, em-dash→â€") — normalize on import / re-emit clean via convert_registries.py; affects any player-facing string.

15. Import-source routing — authorize the engine import to read the spine .md exporter output directly as canonical quest/scene source (T0_Quest_Definition/Scene_Spec are only ~16 endgame-heavy rows), with registry-scatter as a later mirror.

External services / spend / legal:

16. SFX spend — Sonniss (free, acquire now) vs BOOM (paid); Krotos creature-tooling seat-hours ($399 ea); ElevenLabs "Large Studio Games" written confirmation + a paid VO tier.

17. AIVACLOSED AS SKIP (Josh, 2026-07-27: not emailing; the enterprise-contact path is dead). Canonical-theme stays composer-in-loop; bulk music rides ACE-Step/YuE per P2.5. No open action.

18. UE EULA generative-AI clause legal read (Epic's own community calls the "prompt-based input" scope ambiguous). Safe interim: AI drives, Epic content never becomes training data.

19. AssetGen §3 texture-hole trade — how much engineering on the PyTorch3D renderer-swap fork before falling back to ArmorLab manual texturing or the passthrough interim.

20. Sonniss/EastWest no-AI-training clause vs later fine-tuning (skim at the point fine-tuning is actually planned).

21. Capture-rights operational process for real cultural/sacred sites (parallel to the book-substrate use_class discipline).

22. convergence_node_scene_dispatch schema ratification (Contract §5.6 open).

23. Pre-rendered vs realtime for the Prologue/Epilogue Special Asset Class bookends.

24. Creature-vocalization sfx_category / Creature_Roster read-source gap.

25. Terrain "NVIDIA world-gen tool" premise — name it or drop it (off the shipped-path DEM backbone either way).

Missing shipping-RPG SPECS (game-needs gaps — buildable once specced):

26. Bundle these into a UX/systems spec pass: locomotion/traversal verbs (Pillar 10 regional movement), camera rules, input/control-scheme (gamepad + KBM, the 7-mode + six-option wheel), HUD/UI information architecture (L1/L2/L3 layers, journal/Grimoire/map screens), localization strategy (target languages, non-Latin/RTL fonts, subtitle standards), inventory/equipment/loadout rules, economy/currency/vendor loop, world-map/fast-travel/navigation, crafting/gathering runtime, tutorial/onboarding, and accessibility breadth (subtitle formatting, UI scaling, remap breadth). None exist as specs today.

27. Tier-C MMO scope ruling — the base game's netcode posture (single-player-first? always-online? how the MMO layer attaches). GAS OnRep hooks imply a latent decision. Tier C itself is sequence-gated (last), not model-gated.

28. New Game+ carry-over — RULED 2026-07-30 (the twenty-eighth sitting item J3). PRESTIGE-ONLY CARRY: the mastery grade, the LEGENDARY/MYTHIC rarity access earned at the final mastery questline, and the un-pruned seventh vril-seat state carry; inventory, currency, crafted stock and world-state reset. THE RULED EXCEPTION: obtained MYTHIC equipment and weapons carry into NG+ and scale permanently with player level — scaling down at NG+ start to match the level, staying mythic, staying above the drop curve. NG+ is itself ruled ENHANCED DIFFICULTY AND COMPLEXITY. THE FAMILIAR HALF: W-10 CLOSED 2026-07-30 (the twenty-ninth sitting) — BOTH halves ruled. THE CHILDHOOD FAMILIAR: the bond does NOT carry as state, it RE-FORMS BY PLAY (the Ch-1 forest quest runs again; the one of the twelve fairy-realm species the player plays with most is the one that bonds); the legendary power item arrives EARLY in NG+, left behind by the familiar at the separation after the rift fall, and it equips on any familiar or tameable creature, unequipping and re-equipping freely OUT OF COMBAT; the NG+ late-game reunion is UNIVERSAL at any integrity level with GIVING THE ITEM BACK as the vector, and declining means the familiar is fought with no companion reunion; the post-game Epilogue opens a revisit to the fairy realm in whatever state the playthrough left it, with all TWELVE fairy-realm familiars tameable and the slot cap rising 22 → 33. THE EARTHLY ROSTER: BONDED FAMILIARS DO NOT CARRY — every familiar bond is EARNED through its BONDING QUESTLINE, in NG+ exactly as in the base game, so the whole familiar axis re-forms through play. TAMED CREATURES DO CARRY, through the PERSONAL DIMENSION: at the dimension's own unlock in NG+ it arrives as a TRANSFER of the previous playthrough's dimension — the tamed-creature menagerie and all the invested dimension-world state, intact — because the completionist does not do it all over again. THE SCALING LAW GOVERNS THOSE CREATURES AND IS SCALE-DOWN ONLY: everything above the player's level scales back to it at unlock; anything already below stays lower; nothing scales up. This is the ruled exception to the material-resets clause and it is a large one. NAMED AND NOT RULED: which axis an entity crosses on when the corpus makes it BOTH (the binding stone elevates a TAMEABLE creature into the path-variable 22nd FAMILIAR slot, and Josh's post-Epilogue wording is to TAME the twelve fairy-realm FAMILIARS) — no entity is classified by this wave; whether the transfer is gated on a difficulty tier; whether the NG+ separation item is the same instance carried out of the previous run (it has no assigned rarity grade, so J3's carry table does not reach it); what the NG+ decline fight yields. Familiar landing sites: T3_Familiars_Named §5.11 (canon) + §1.1 + §5.2, T3_Core_Characters §2.2, T0_Hard_Lines HL_0058, T0_Familiar_Registry.ng_plus_resolution, the NG+ section of docs/proposals/DIFFICULTY_SYSTEM.md, and docs/spine/CH_01.md §14 Q1b (the Ch-1 mechanism only — no NG+ material reaches a Ch-1 surface). Rank 24 authors T1_Personal_Dimension_Spec against the transfer + scaling laws. The player-selected-presets option is dead. Landed at docs/proposals/DIFFICULTY_SYSTEM.md (the New Game+ section), T1_Combat_System_Spec (legendary/mythic grades), and T0_Rarity_Grade.ng_plus_carry / level_scaling_model.

29. Verify thin T1 spec docs (T1_Combat_System_Spec, T1_Vril_and_Magic_System_Master, T1_Trades_Master, T1_Ability_Tree, UI/Audio specs) are populated vs empty before deep implementation; per-mechanic tuning tables need them.

30. MILESTONE open decisions (may be moot post-spine): slice size 5 vs RR-10 window; Milestone-1 chapter set (rec Ch2-6); local-LLM runtime model pin.

31. Create TODO_CANON.md at the game-repo root to log contract/tuning gaps (do not invent numeric values in the build lane).

---

13. GATED items (explicitly parked — do NOT re-plan as buildable)

5090 (heavy generative inference): 3D geometry gen (TRELLIS.2 24GB / Hunyuan3D-2.1 29GB); PBR texture gen at 72-weapon/132-creature volume; music bulk gen (ACE-Step/YuE/HeartMuLa); voice bulk gen (Kokoro-82M); SFX gen (MOSS-SoundEffect v2.0); cinematic-video gen; the 14B on-device reference model + perf-budget validation; full-corpus triage of the 1,873 un-deep-read books; VLM-OCR of non-Latin scripts; 69-region headless PCG/HLOD/Nanite batch bake; render/streaming perf-budget across the four spec classes; Chaos-at-scale profiling; MetaHuman roster-scale gen + the persona-voice LoRA training RUN. *(Runways prepped: triage_floor.py, ocr_backends.py clean seams.)*

Scanning (Josh, ~same period): Pass-2 production quest content at un-scanned high-care regions (Ch29 Sámi, Ch42 Vodou, Ch57 Australia, Ch11-13, 47-48, 50); CG-29 Champa/Cham on Ch5; MetaHuman appearance authenticity + §16 citation provenance for un-scanned regions; verification-grade audio substrate at high-care cultures; §17.1 runtime cultural denylist at high-care chapters.

External service: Meshy/Tripo cloud gen; mocap/body-animation library (Fab/ActorCore/Mixamo) + retarget_participants.py; Krotos creature tooling; ElevenLabs paid VO tier; AIVA marquee track (RULED SKIP).

Devkit (genuinely cannot-build-past): console packaging (Xbox int4/DirectML, PS5 compute-shader paths) — neither the current machine nor the 5090 unblocks it.

Not-model-gated but SEQUENCE-gated: Tier-C MMO netcode + guild-integrity aggregation + world bosses — last of the Tier A→B→C build; the math is specifiable now but building it is premature against Tier A focus.

Numbers only (tuning firewall): damage/dial coefficients, Sigma magnitudes, tell/window/cooldown ms, resource maxes, integrity deltas, per-category poly/LOD budgets — the SHAPES and BINDINGS build now on illustrative constants; only the Phase-5M-audited/5090-measured NUMBERS wait.

---

14. Do NOT re-plan (already DONE / off-the-board)

T99_Translation_Combat landed + D-COMBAT-TD ruled; Boss_Encounter 5 combat columns applied to all 281 rows + check_boss_axes.py v2; the GAS greybox C++ foundation compiles (AttributeSet w/ 8 Composure nodes + all built subsystems); DataTable seam proven at DT_ChapterIndex(79) + DT_BossEncounter(281); Landscape import (Liang Bua smoke) + terrain_fetch_preprocess.py + OpenTopography key; generate_sfx.py + ElevenLabs key + smoke_stone_door SFX; import_registry_datatable.py; Epic MCP PCG toolset + PCG_HelloGraph; Theme_Registry adaptive-audio columns; WS_041/042 minted; Track-1 region pages (flores/bali/sumatra_java/angkor_khmer); Track-4 runway; the RAG index (~661k chunks); the 79-chapter care audit (CLEAN); engine pin UE 5.8.0 + NeoStack-on-5.8 gate SATISFIED. Superseded docs — do NOT drive from them: ROADMAP.md v3.0 and MASTER_ENHANCEMENT_PLAN (Ch-21-era cascade, spine now 79/79 complete + v3-rewritten); AUTONOMOUS_BUILD_ARCHITECTURE's RAG gap (since built). Verify-then-plan is the highest-yield step: five lanes each found their own named top blocker already closed off a three-day-old wall list.

---

▶ PROGRESS LEDGER — NEWEST ENTRY (appended at the tail per the line_citations rule)

This entry is the ledger's NEWEST and belongs at the head of §▶ PROGRESS LEDGER above. It is written here because an insertion at the head shifts every line below it and stales the line-range citations that point into this file — gate 46 line_citations caught exactly that on the first attempt (GENRE_BASELINE.md L424-427, L518, L621 and WHOLEARC_FIRSTRUN_2026-07-27.md L431, all off by two). Same convention docs/DOC_MAP.md states on its own face.

2026-08-07 — THE TRUE BARE BASE LANDS, AND THE SEVEN-AGE LADDER IS UNGATED (commit 869ba32f). Two blockers closed in one lane, both by measurement rather than by assertion. (1) The blend-proof BLOCKER that RACE_CLOSE.md §4 held the seven-age lane behind is closed: blend_proof_PASS: true, on a midpoint mesh byte-identical to the one that failed. It was never a wrap fold — blend() judged the midpoint against PARENT A while the gate's own text names the CAGE, and at t=1, where the midpoint IS parent B bit for bit, the parent-A form fails a mesh MEASURE_PIVOT.json certifies clean with the same gate and the same bar. bench_cage.py FIX 6 applied, the pre-fix reading rides as an advisory, and new self-test arm 12 bites the changed path — all thirteen arms green. (2) ASSEMBLY_A14_REVIEW.md D1 is closed by replacing the base. The mesh the pipeline called nude was a tunic-and-shorts clothed build; the new base is the mounted MetaHuman Core Data archetype body, in the cage's canonical frame, A-posed at 39.04°, unfused (loop-count transitions at 76.0 and 90.0–119.0 cm), welded, one component, zero non-manifold edges, partitioned into the fourteen regions with one UDIM tile and one material slot each (R05 on M_BODY_MANNEQUIN, so the doll guarantee is structural), conformed to BODY_AGE_14 with no ladder assumption. Verification: five of six girth sites readable against the old base's two, every scored residual inside 4.6%, with D3 (a measured shoulder site) and D6 (ankle_min at the leg's own minimum) built into the measurement layer. The doll patch's p99 displacement is 0.00 mm — the donor crotch was already doll — and every garment clearance passes in millimetres with margin. Two blockers remain and both belong to the ASSEMBLY step, not the base: the base has no neck (rim radius ~11.8 cm against the head sleeve's 7.61, so the A14 seating step cannot be reused as-is) and the underwear shell is discontinuous (built as a face subset on too-sparse a band). Named beyond the floor: solving the body parametrically in-editor at the rung's own measurements closes the acromion-height, arm-chain and donor-sex residuals at once. Evidence: build/3d/cage/assembly_evidence/TRUE_BARE_BASE_REVIEW.md + three imaged turntables.

2026-08-07 — ASSEMBLY V2: THE BODY IS SOLVED, THE NECK EXISTS, AND THE GARMENT IS ONE SHEET. All three blockers TRUE_BARE_BASE_REVIEW.md §4 ranked are closed and six of six girth sites now read (ankle +0.1%, knee −2.1%, hip +2.5%, waist −0.2%, chest +0.0%, neck_base +7.7% and readable for the first time, shoulder +2.8%; stature residual 0.000 cm, head units 0.000084). (1) The parametric solve drives MetaHumanCharacterEditorSubsystem headless at the rung's own sixteen measures plus the two arm-chain rows, with the physique axes set from training_clock — which turns out to be already in the model's units (0.23676 × 2.3231 = 0.550), so D-N7 closes by using numbers the rung already carried. The Masculine/Feminine sign was decided by a bust-projection measurement AND by an imaged six-stop sweep, which agree on −2.0. The finding: a solved body alone does not beat the conform. Zero clamps on all sixteen constraints, yet 9–24% off on the section instrument — and an isolation control (Hip driven to 74/82.9/92, everything held) reads 89.85/96.71/100.88, slope 0.61 and monotone, while three consecutive commits move it under 1%. The gap is definitional and partly capacity, so the pipeline is solve → conform. D-N4 closes and reverses the no-acromion-anchor ruling on this source: the outer shoulder's own top on the unconformed solved mesh is 135.504 cm against the rung's 135.781, −0.28 cm before any conform. That also exposed that the inherited seam fraction was landing the shoulder opening 2.7 cm below the chin — the direct cause of D-N1 — where the acromion anchor gives 9.34 cm of neck. (2) The neck is built as a bridge whose ring 0 IS the body's rim and whose last ring IS the head's cut ring, both stitched, with a cubic Hermite between them whose end tangents are measured off the two surfaces: zero boundary edges at the join, zero non-manifold edges, MetaHuman's own 92↔92 rim pair verified at 4.19 cm. Five linear-loft iterations all rendered as a flange before tangency was the answer; the cage's neck arrives 1.7× the rung and takes a measured, fixed-point radial taper. (3) The garment is rebuilt on its own topology — centroid-kept faces, an exact isoline cut, two subdivisions, body normals — 19,676 vertices against 824, one component, zero non-manifold edges, CONTINUOUS_SHEET true, every clearance passing in millimetres. Eight defects ranked, the first blocking: the neck-to-shoulder surface is a Hermite with no clavicle, and the named fix is to transfer the solved MetaHuman face's own neck-and-shoulder geometry through the correspondence this lane already verified. The keystone head is still the PIVOT wrap. Evidence: build/3d/cage/assembly_evidence/ASSEMBLY_V2_REVIEW.md + four imaged sheets (the M/F sweep, the ruff, the tangent-gain A/B, the landed turntable).

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