programs/PRE_5090_BUILD_PLAN_VOL2.md
Status: ACTIVE — the authoritative item source for the vertical-slice window going forward. SLICE
RESCOPED 2026-07-27 (Josh RULED, fifth + seventh sittings): the slice is PROLOGUE→CH 13, built
Ch 2-13 first then Prologue + Ch 1. §A.0 carries the ruled shape and WINS over any Ch 2-5 boundary
statement elsewhere in this volume; the Ch 2-5 statements that describe what was BUILT stay accurate
and are not retro-edited.
This volume supersedes docs/PRE_5090_BUILD_PLAN.md §§3–11 as the ITEM registry (the ledger,
gating model, critical-path narrative, and decisions §12 in that doc remain current and are pointed
to from here). Assembled from the 8 verified plan sections + both fresh-context critics
(tasks/wavckc3ou.output: citeCritic GO_WITH_FIXES · cohereCritic GO_WITH_FIXES), with all 4
citation fixes applied and all 13 coherence findings resolved under single-owner discipline:
every item has exactly ONE id, ONE section home, ONE wave; cross-references replace duplicates.
Self-contained: header (directives · density curve · canon-first item law · gating/tag law) →
RECONCILIATION LEDGER → the 8 reconciled sections → the rebuilt MASTER WAVE QUEUE (with the cut
line) → the DECISIONS REGISTER → WHAT-THIS-DOES-NOT-CLAIM.
---
1. Target = the CH 2-5 VERTICAL SLICE: full playthrough, cross-chapter progression, 100% complete
structure at max honest pre-5090 polish. The 5090 + book scans arrive in 2-3 weeks; post-5090 =
full generative passes (VFX/SFX/cinematics/HUD art/music) + the deep-read enrichment pass over
everything (weavings, culture, side quests, relationships).
2. The playable-game surface has gaps the plan must close (bindings, quest log, lock-on, hit
confirmation, per-weapon/ability presentation...). The plan needs SIGNIFICANT enhancement.
3. The living-world substrate is required, grounded in real regional biota/geology: fauna, herbs,
minerals, trades, the ability book, + unnamed members.
4. CANON-FIRST (Josh caught "new" labels on documented canon): every item carries a canon citation
or a positive-controlled absence proof. Prior work is NEVER re-invented.
5. FULLY AUTONOMOUSLY TESTABLE: the machine is the alpha/beta tester (WS-10 expansion QT-1..22).
6. THE DENSITY MODEL (ruled): a completion-hours CURVE — full game ≈100-200h main / 1-2k h side+
weave / 8-10k h 100%. Ch 2-5 = early-game, deliberately lighter, seed-rich, opening the game.
Josh's in-conversation refinement SUPERSEDES the CANON_AUDIT #7 uniform-density reading.
"THE DENSITY MODEL (ruled): a completion-hours CURVE — full game ≈100-200h main / 1-2k h side+weave /
8-10k h 100%. Ch 2-5 = early-game, deliberately lighter, seed-rich, opening the game. Josh's
in-conversation refinement SUPERSEDES the CANON_AUDIT #7 uniform-density reading."
What the ruling does NOT touch (LOCKED, still binding): the T0_Chapter_Index topography gate
(no-3-consecutive-same-type, mode-variety) and CVD §16/§4.4/§12.2 pacing — those govern *shape within*
the curve, not a flat amount. The curve is a refinement of #7, not a repeal of the gate. Made
measurable by the per-chapter content-budget + test-coverage scorecard (check_slice_scorecard.py;
spec in the PROGRAM FRAME §A.1 and the WS-10 §11.5.5 scorecard family).
Every item carries either a real canon citation (CVD / tier doc / registry row / prior plan id /
ratified proposal) OR a positive-controlled absence-proof (the search that WOULD have found it, run,
returning zero). Prior work is NEVER re-invented (directive #4). An "absence-proof" is a
first-class citation: a zero is only trusted with its positive control (memory:
*a-search-that-cannot-match-reports-zero*). The critics' phantom-fold corrections are standing
precedent, already applied, not re-litigated: lock-on/target-switch → P2.2; input set/dodge/interact/
wheel → P2.3 (+Q3.2); player HUD/UMG → P2.4; gather/harvest → P2.10/P2.5; journal → Q3.6; Grimoire →
Q3.8; char-progression UI → P2.8; LINK_0186 EXISTS (AB-13 killed); Boss_Encounter already speccs
BE_0002..0005 (16 rows — consume, never re-author); Creature_Roster = 132 rows (only numeric cols
blank); MV-1 free-travel is a phantom (Vimana-gated Ch 55, WGM §7 — the slice = ruled travel-beats
forward + free-roam within regions).
The RTX 5090 gates ONLY heavy generative INFERENCE (book deep-read/triage, photoreal 3D/asset gen,
music/voice/SFX generation, cinematic-video gen, VLM-OCR). **TAG LAW: only generative INFERENCE is
5090-gated.** Hand/mocap animation, hit-stop, damage numbers, camera shake, UMG, the color-independent
SHAPE-telegraph channel (an L1 accessibility FLOOR, T99_Translation_Combat §2.6) = BUILD-NOW.
Presentation lands in tiers: T0 greybox (BUILD-NOW) → T1 placeholder anim/SFX (BUILD-NOW /
GATED-EXT for mocap) → T2 final art (GATED-5090). The slice ships on T0+T1; T2 drops in
post-5090 without a re-wire. Tags: DONE · BUILD-NOW · CA (canon-author-now) · GATED-5090 ·
GATED-SCAN · GATED-EXT · BLOCKED-ON-BRIEF (waits on a Josh ruling).
---
Applied verbatim from tasks/wavckc3ou.output. Nothing below is re-litigated; each row is the
single-owner outcome the rest of this volume is built on.
| # | Section · item | Fix applied |
|---|---|---|
| C1 | ws4_regions RE.5 | HL_0032 dropped — it is the 12-side-questline-names lock, not the §17.1 routing anchor. Cite = HL_0003 only (already co-cited; routes the Ch5 antagonism through the datu/broker/devaraja-official, never the Batak/Khmer/Cham). |
| C2 | ws_ui tag-law + 11h + U11.29 | The SHAPE-telegraph "accessibility FLOOR" is T99_Translation_Combat §2.6 (L237-239), not CVD §2.6 (which is care-scope/pseudohistory). Corrected in the header tag-law, the 11h teaching-owner cite, and U11.29. (WS-1 CF-7 already cited it right.) |
| C3 | ws_lw LW-6 | T0_SFX_Registry = 12 data rows (9 vril-site + Sámi + Haiti Vodou + Australia), not "13 rows all vril-site+Sámi". Matches ws56_av AU-13's correct reference. |
| C4 | ws_lw LW-9 | DOC_MAP "T0_Persona_Index not yet created" is at L127, not L123 (content confirmed correct; line-number drift only). |
*Cite-critic note (not a defect):* "DT_SceneAnchor 439 rows" (ws56_av/ws3_prog) is the **game-repo
build count**; canon T0_Scene_Spec_Registry has 16 rows. The drafts label 439 game-side, so it is
not a canon-cite error — retained as-is.
| # | Finding | SINGLE-OWNER resolution |
|---|---|---|
| H1 | Cross-map transition/save backbone double-owned (ws3_prog PG-1/2/6 in WT vs ws4_regions RX.3 in M); PG-2 scheduled before its terrain dependency. | Owner = ws3_prog PG-1/PG-2/PG-6. RX.3 → cross-ref (regions-side verified-by). Split by dependency: the save/advance spine (PG-1, PG-6, CN-2, SL-2) lands EARLY; PG-2's region-map handoff rides AFTER terrain (master W8), not the earliest wave. |
| H2 | Audio spine AU-8/AU-1/AU-2 in master W7 (late) but W-FEEL1 AU-10 hard-depends it. | Owner = ws56_av. The audio spine (AU-8→AU-1→AU-2, then AU-3/9/10) moves to master W2 FEEL (early), per ws56_av's own FEEL assignment. W2 hit-confirm audio now has its spine. |
| H3 | ws1_feel W-AI (TG-3/4/6/9/11…) had no master §A.4 id; master W1 (in-flight) needs a subset. | Owner = ws1_feel W-AI. Added to the master queue as W6 ENEMY-AI. W1 (in flight) pulls forward the minimal TG-3 (locomotion) / TG-9 (construct) / TG-11 (perception) its Ch2 sub-bosses (Ebu Gogo, BE_0002_S2) need; the full breadth is W6. |
| H4 | CN-1..9 double-specced (ws3_prog + ws56_av), conflicting waves; no scene-presentation wave in master. | Owner = ws56_av (the scene-runtime home). ws3_prog's CN rows → cross-refs (quest-side binding view only). Added master W7 SLICE-PRESENTATION as the scene wave. |
| H5 | Ch-4 time-fluctuation duplicated (ws4_regions RX.1 vs ws_lw LW-4+LW-3); RX.1 omits its clock deps. | Owner = ws4_regions RX.1 (the Ch-4 chapter integration). LW-4 folds into RX.1. LW-3 (Pawukon clock) + LW-12 (ws keys) stay ws_lw as the primitives RX.1 now explicitly depends on. |
| H6 | "Chakra Thunderbolt" (B_FA_002) rename triple-owned (CR-CHAKRA / U11.32 / AB-5), tag clash. | Owner = AB-5 (ws_lw, CA, LANE-CANON / W-LW1) — one canon-side registry edit. CR-CHAKRA (ws1_feel) + U11.32 (ws_ui) → cross-refs. CF-5's cast label + U11.14's ability book must not surface it player-facing until AB-5 lands. |
| H7 | D-ECONOMY-MEDIUM conflict: synth_program §A.5 ruled it director-applied; ws_lw §11.6.4 holds pending-Josh. | JOSH-PENDING everywhere. synth_program §A.5's "ruled — director" framing is CORRECTED (the medium sets a world rule → cardinal-canon → it flags). ws_lw §11.6.4 is authoritative. EC-medium + EC-vendor = BLOCKED-ON-BRIEF; EC-inventory (P2.6) + EC-treasure (LW-WIRE) proceed BUILD-NOW. |
| H8 | Input-binding wave inconsistent (master W3 early vs ws_ui folding all P2.3/IN into the late UI wave). | Owner = ws_ui 11c (U11.7–U11.13). Wave corrected: the INPUT cluster rides master W3 (early), NOT the late UI wave — W-MOVE/W-AI depend on those binds. Book screens/menus stay in the UI wave (W10). |
| H9 | MG-1..4 (scored-interaction) had no master §A.4 home. | Owner = ws3_prog MG-1..4. Homed in master W8 REGIONS (the per-region scored-content layer, WR3/WR4/WR5). |
| H10 | Master W2 FEEL omitted CF-4/CF-5 (W-PRES), CF-9 (boss variety), CF-10 (defeat). | Owner = ws1_feel. CF-9 + CF-2/CF-7 → master W9 (W-FEEL2); CF-4/CF-5 → master W9 (W-PRES); CF-10 shell → W2, its boss-defeat STATE BLOCKED-ON-BRIEF (H13). |
| H11 | Most of W-MOVE absent from master §A.4 (MV-3 HL_0079 canopy course is an in-slice HARD LINE). | Owner = ws1_feel W-MOVE. Full wave (MV-2/3/4/5/7/8/9) added to the master queue as W5 (with W-AI). MV-3 = the HL_0079 Ch-2 canopy course, scheduled. |
| H12 | P2.10 interaction + P2.6 inventory (hard deps of the gather/harvest lane) not scheduled; assumed-built. | Owner = WS-2 (existing plan ids P2.10 / P2.6). Explicitly scheduled as W3 player-prereqs (cited, not re-invented) so W6 living-world + gather lanes do not assume-build. |
| H13 | CF-10 boss-defeat presentation in early W-FEEL1 but gated on unresolved D-DEFEAT-AXIS. | Split. The player death/respawn SHELL is BUILD-NOW (W2). The boss defeat-STATE (FREE/PACIFY/PURGE→Withdrawal mapping + the 16-row win_condition/win_shape back-fill) is BLOCKED-ON-BRIEF D-DEFEAT-AXIS — no defeat state to wire until Josh rules (recommendation ready, decisions register). |
Naming canonicalized: the boss HP=0 defeat ruling is D-DEFEAT-AXIS throughout (aliases seen in
drafts: D-BOSS-DEFEAT-AXIS, D-HP0-AXIS — same brief).
---
---
RECONCILED (Vol2): §A.4's original master queue is SUPERSEDED by this volume's MASTER WAVE QUEUE (orphans W-AI/W-PRES/W-MOVE/MG/CN now homed; audio-spine/input/backbone re-ordered). §A.5 D-ECONOMY-MEDIUM corrected to JOSH-PENDING (was wrongly 'ruled — director-applied'). D-HP0-AXIS renamed D-DEFEAT-AXIS (alias). §A.0–A.3 + §B (DR-1..8 handshake) remain current.
Front-of-plan restatement for the enhanced PRE_5090_BUILD_PLAN. Governs every section below it.
The named queue A/B/C/D is CLOSED (Josh can press Play and be inside Chapter 2, game 303e9f2). This
frame re-ranks the 2-3-week window to its real target and lays the drop-in surface the 5090 lands on.
---
RESCOPED 2026-07-27 (Josh RULED, fifth + seventh sittings). The pre-rescope text of this section read
"The whole pre-5090 program has ONE target: CH 2-5 as a full playable vertical slice" — that sentence is
now FALSE and is superseded here. The Ch 2-5 statements elsewhere in this volume are historically accurate
about what was BUILT and are not retro-edited; where any of them asserts the slice BOUNDARY, this section
wins.
The pre-5090 program's target is PROLOGUE → CH 13 as a full playable vertical slice (15 nodes) —
start-to-finish playthrough, cross-chapter progression carried across 13 regions, a 100%-complete
*structure* at maximum honest pre-hardware polish (Josh directive 2026-07-24 #1, scope re-pointed by the
2026-07-27 ruling). "Complete structure" ≠ complete fidelity: every beat, site, boss, fork, gather-node,
persona and weave-anchor is *present and playable* on placeholder assets; the final art/audio/cinematics
and full-fidelity enrichment ride the post-5090 passes (§A.3).
flores_island (Ch2-3), bali (Ch4), sumatra_java + angkor_khmer (Ch5 excursion) — chapter→region confirmed from spine headers + Zone Catalogs (ch2_5_slice_map.md).
The MASTER WAVE QUEUE's "CLOSED" statuses are correct for this leg and INCOMPLETE for the ruled slice.
paid for (the --slug/--chapter drivers), so terrain and staging are extension, not re-architecture.
Its eight region pages do not exist yet and are the slice's longest ungated pole (nine counting the
fairy_realm page, which sits on the Prologue+Ch 1 leg and has no template).
fairy_realm): builds LAST, once, at slice-end — after 11 earthly chaptershave matured the concept-art pipeline, the presentation ladder, the W-SPACE grammar and the QA belt.
Its terrain is invented (coordinates: N/A (dimensional)), so the deterministic DEM chain has no input
and the authored-terrain path is prototyped during the Ch 6-13 window before slice-end consumes it.
her at that departure — the to-be-continued act-break, and the Early Access base in full (no early cut).
design, while it is still designable); Gate 2 at the full-slice exit (the origin judgement, and the gate
that opens the Steam listing).
RESCOPE RE-DERIVE — the slice-DEFERRAL class (2026-07-27). The precedence rule at the head of this
volume covers two classes of Ch 2-5 statement: BOUNDARY statements, where this section wins, and
descriptions of what was BUILT, which stay accurate. A third class needs naming on its own, because its
rows are live instructions to the factory whose PREMISE the rescope inverts — each was decided while
Ch 2-5 WAS the whole slice, and the ruled slice now runs to Ch 13. For every row below the premise is
invalidated and the new answer is deliberately NOT written here: each re-derives at its own item, against
the ruled 15-node scope, before it is built or skipped. Treat an unre-derived deferral in this class as
un-decided, never as inherited.
is Ch7, Blacksmith+Herbalism, S.India)". Ch 7 is INSIDE the ruled slice, and the execution brief counts
four trade homes among the Ch 6-13 system debuts. Re-derive the introduction order and which trades
reach a real home in-slice.
home)" note now rests on a false premise. Re-derive its wave placement.
in Ch2-5; first at Ch7 Forge+Apothecary)". The first compound is now in-slice. Re-derive.
bullet in the screens section and by the slice-honesty paragraph — Q3.6's Ch-13 activation was OUTSIDE
the old slice and is now its TERMINAL node, and the brief's played-versus-told table lists the join and
the journal beginning at Ch 13 as PLAYED. Re-derive whether the journal ships as a correctly-empty
shell or as an activating system.
(journal activates Ch 13)". Re-derive once U11.18 re-derives.
DT_SceneDispatch path-conditional resolver, slice-DEFERRED), with the same premise in thews56_av wave table — path-invariance was measured over Ch 2-5's forks. The ruled slice carries fifteen
forks, and the Prologue + Ch 1 leg carries the choosings. Re-derive path-invariance over Ch 6-13 and
Pro/Ch 1 before inheriting the deferral; the Josh #22 schema question is unaffected either way.
abilities across Ch 2-5) — whether the player is still Neophyte at Ch 13 is an open scope question now
rather than a settled one. Re-derive the in-slice tier span.
The density model is a completion-hours CURVE, not a uniform bar. Josh's in-conversation ruling
(2026-07-24, recorded verbatim in the directive pack):
"THE DENSITY MODEL (ruled): a completion-hours CURVE — full game ≈100-200h main / 1-2k h side+weave /
8-10k h 100%. Ch 2-5 = early-game, deliberately lighter, seed-rich, opening the game. Josh's
in-conversation refinement SUPERSEDES the CANON_AUDIT #7 uniform-density reading."
This RECONCILES the one genuine gap Dive #3 surfaced in the density cluster (owners=12, absent=1): *"the
spoken 'starting chapters less dense' ramp is unwritten AND conflicts with #7's uniform-density bar —
needs Josh to reconcile."* It is now reconciled: density is a ramp, Ch 2-5 sit at the low, seed-rich
end. What the ruling does NOT touch (LOCKED, still binding): the T0_Chapter_Index topography gate
(no-3-consecutive-same-type, mode-variety) and CVD §16/§4.4/§12.2 pacing — those govern *shape within*
the curve, not a flat amount. The curve is a refinement of #7, not a repeal of the gate.
The curve made measurable — the per-chapter content-budget + test-coverage scorecard (SPEC). Each
chapter carries a scorecard row; the early-game target is deliberately the lightest honest floor. Columns:
| field | source | Ch 2-5 early-game target |
|---|---|---|
| main_path_beats | spine DT_Beat, beat_type∈{combat,character,puzzle,...} | ~10-12 / chapter (as authored: Ch2-5 all = 12) |
| main_bosses / sub-bosses | DT_BossEncounter (16 Ch2-5 rows exist) | 1 main + 3-4 sub / chapter |
| forks | DT_Fork | 1 / chapter (Ch5 = 2) |
| side beats (L2) | DT_SideQuestBeat | seed-count LOW; deep side content post-5090 |
| weave links (L3) | Cross_Cultural_Link_Graph | ≥1 signature link / chapter (LINK_0186 = Ch4↔Ch5) |
| gather nodes (living-world) | Zone-Catalog node rows | 2-4 / region |
| ambient personas | T0_Character_Index rows / chapter | Ch2 names 7 (CHAR_0009-0015); floor, not ceiling |
| test-coverage % | QT pack (§A.4 LANE-SOAK) | 100% of main-path beats have a passing auto-test |
The scorecard is a gate artifact, not prose: check_slice_scorecard.py reads it, and no chapter is
"slice-complete" until its row hits target AND test-coverage = 100% of its main-path beats. This is the
density curve as an enforceable law rather than a feeling.
**SLICE-RESCOPE DEPENDENCY (2026-07-27) — the bands must EXTEND before this gate is armed past Ch 5, and
they are deliberately NOT set here.** The table above is a Ch 2-5 early-game band, and the ruled slice now
spans Prologue→Ch 13:
band over Ch 6-13 either passes vacuously or reports a chapter as thin against the wrong floor. Those
eight nodes need their own band values on the same ramp.
reference, not a content-budget node) and Ch 1 is declared out of corpus scope. They need DECLARED
SENTINELS — an explicit exemption the gate reads — not band values. Without them the monotonicity tooth
fires a FALSE regression the moment a 15-node slice is scored, which is the same defect class already
caught for Ch 77's exempt demand_ordinal.
gates shapes, relations and floors; it never asserts an absolute is "correct"). The band/sentinel pass is
its own item, and it is the precondition for arming QT-19 on any node past Ch 5.
check_slice_scorecard.py does not exist in either tree today — a name search returns zero while the same search returns hits for other Tools/*.py, so the zero is real
and not a search that cannot match. The band work therefore lands WITH the script, not as a retrofit.
Josh caught "new" labels stuck on documented canon. The law, now enforced plan-wide: **every item in
every section carries either a real canon citation (CVD / tier doc / registry row / prior plan id / ratified
proposal) OR a positive-controlled absence-proof (the search that WOULD have found it, run, returning
zero). Prior work is NEVER re-invented** (directive #4). The critics' phantom-fold corrections are the
standing precedent and are already applied, not re-litigated: lock-on/target-switch → P2.2; input
set/dodge/interact/wheel → P2.3 (+Q3.2); player HUD/UMG → P2.4; gather/harvest → P2.10/P2.5; journal →
Q3.6; Grimoire → Q3.8; char-progression UI → P2.8; LINK_0186 EXISTS (kill AB-13); Boss_Encounter
already speccs BE_0002..0005 (16 rows — consume, never re-author); Creature_Roster = 132 rows (only
numeric cols blank). An "absence-proof" is a first-class citation: a zero is only trusted with its
positive control (memory: *a-search-that-cannot-match-reports-zero*). Where this frame reconstructs an
item from a 0-byte recovery file (§B, DR-2/DR-8), the 0-byte file IS the absence-proof and is flagged.
The 5090 + finished book scans arrive in ~2-3 weeks and gate ONLY heavy generative inference (§0 gating
model; TAG LAW: only generative INFERENCE is gated — hand/mocap anim, hit-stop, damage numbers, camera
shake, UMG, the SHAPE telegraph accessibility floor are BUILD-NOW). Post-hardware runs in a fixed order,
and every stage lands as drop-in onto the surface this window leaves (§B):
1. DEEP-READS — full-corpus book triage + deep-read of the scanned library, VLM-OCR of non-Latin
scripts. The input substrate. (Gated: 5090 inference + Josh's scans.)
2. THE FULL ENRICHMENT PASS — over *everything*, grounded in the deep-read output: weavings, culture,
side quests, relationships, and every living-world row (FA/FL/MN/TR) taken from slice-placeholder to
full fidelity — pharmacology, ecology, folklore attribution, significance lenses, persona depth. This
is the pass that makes the seed-rich early chapters deep. It writes onto the stable ids + weave anchors
the DR handshake planted; it does not re-place or re-author structure.
3. GENERATIVE PASSES, PER SURFACE — VFX / SFX / cinematics / HUD art / music / 3D geometry / PBR
textures / voice. Each pass writes its generated asset path back onto a stable id through the
asset-path drop-in contract (DR-2). No pass re-stages the world; it fills the slots.
The whole point of the pre-5090 window is that stages 2-3 are pure fill, never rework. That is what
the handshake (§B) guarantees.
The named queue A-D is closed. This re-ranks the remaining surface for the window, consuming every
section's item families. Ranking follows the directive: **E-residue first · nightly-soak + feel waves
early · terrain long-poles parallel from day 1 · canon-author lane on the canon side throughout.**
Two-repo discipline holds: game repo (C:/dev/Humanity/Humanity) and canon repo
(C:/dev/humanity-forgotten) are one-writer-each, so the persistent canon + soak lanes run *in parallel*
with the ranked game waves.
Persistent lanes (run the entire window, parallel to everything):
| lane | repo | what runs | starts | verified-by |
|---|---|---|---|---|
| LANE-SOAK | game + harness | Nightly-soak cadence: the QT-1..22 test-org expansion runs the machine as alpha/beta tester over the whole built slice each night; Gauntlet-lite soak-player loops Ch2-5; bug ledger accretes; every fix leaves its regression ref (QA-8/QA-9 discipline). | THIS WEEK, on this machine | a nightly Saved/QA/TestReport + typed bug records; verdicts read from the report, never the exit code |
| LANE-CANON | canon | The canon-author lane: living-world substrate registries + repairs + weave anchors + the handshake's canon items (DR-2, DR-7, DR-8). Cited-or-cut; proposal-tier → ratified firewall. | day 1 | normalize-doc critic per artifact; fidelity_baseline.json refreshed in the SAME commit; every row a canon citation |
Ranked game waves (one writer, game side):
| wave | theme | item families consumed | tag mix | depends | verified-by |
|---|---|---|---|---|---|
| W1 · E-RESIDUE *(chip E, IN FLIGHT)* | Ch-2 becomes real, not a DEV-ADVANCE stub-walk | the DEV-ADVANCE beats → real sites/scenes/dialogue/sub-bosses (BE_0002_S1/S2, Ebu Gogo — chip G's Ch2 half) | BUILD-NOW | closed A-D | QA capture: every Ch-2 beat auto-advances on a real fight/scene event, zero N-presses; image critics GO |
| W2 · FEEL *(early)* | the combat-feel presentation floor — the "it landed / it broke / it's coming" reads | CF-1 hit-confirm · CF-2 hit-react/flinch · CF-6 Composure-break moment · CF-7 telegraph windup pose · CF-8 camera shake/punch · CF-11 player-facing combat HUD · CF-12 withdrawal-clock read | BUILD-NOW (TAG LAW: all feel = build-now) | W1 | image critics read hit/break/tell frames; SHAPE-telegraph channel asserted color-independent (accessibility floor) |
| W3 · INPUT + TRAVERSAL *(early)* | close the Josh-named binding + movement gaps | IN-1 bind all 8 verbs · IN-2 crouch · IN-3 dodge · IN-4 interact+prompt · IN-9 ModeSwitch/wheel · IN-10/CF-3/MV-6/TG-1 lock-on+switch (fold→P2.2) · IN-12 menu/log/map keys · IN-5 gamepad · IN-6 rebind persistence · MV-2 climb/mantle/vault · MV-8 stamina-coupled sprint | BUILD-NOW | W1 | input-map QA test: every verb+menu key bound; lock-on functional test passes |
| W4 · TERRAIN long-poles *(PARALLEL from day 1; chip F)* | the 3 unbuilt region maps + material — the longest pole | generalize the flores-hardcoded import/dress/stage into region-parameterized drivers · derive_region_bbox per slug · bali/sumatra_java/angkor_khmer builds · W4.8 weightmap-driven biome material · fill empty zone bboxes | BUILD-NOW (deterministic GIS) | none (parallel lane) | each .umap imported at true scale, coastline/relief frame director-verified; greybox QA green |
| W5 · LIVING-WORLD runtime | the runtime consumers of LANE-CANON's substrate | TR-1 gather/harvest subsystem · FL-3 gather-node actor (weightmap-driven, FL-4) · N8.7/TG-5/TG-12 creature spawn+AI · LW-1 day/night · LW-2 weather/monsoon · LW-4 time-fluctuation windows (Ch-4 mechanic) · TG-8/LW-8 ambient-NPC/persona minimum · AB-1/AB-2 ability book + mastery ladder | BUILD-NOW | LANE-CANON substrate rows; W1 | forage round deterministic-fair (sigma pity); creature patrol/aggro QA; a lit ambient-village frame |
| W6 · Ch3-5 REGIONS + progression | stage the three remaining chapters on the built terrain; make cross-chapter real | stage CH_03/04/05 beats/sites/forks/sub-bosses · PG-1/PG-2 cross-chapter advance + map transition (the backbone) · PG-3/PG-4/PG-6 flow + save-slots + unified payload · PG-7 unlock-on-progression · PG-10 integrity-band read · PG-11 difficulty presets · new boss-verbs (ATTUNE/PERCEIVE, DISARM/RESCUE, BALANCE, ENDURE/BIND) + the integrity-gated LETHAL fork (Ch5) | BUILD-NOW | W4 terrain, W5 systems | Ch2→3→4→5 end-to-end playthrough with ws.* carried across 4 maps; full-slice soak green; every ws.* write ∈ baked 42 |
| W7 · UI + AUDIO + ECONOMY | the shipping-RPG surfaces + the economy loop | UI-1..10 HUD IA + quest-log/map/inventory/ability-book UMG/journal · AU-1 audio subsystem · AU-2 cue manager · AU-3 foley · AU-4 ambience · AU-5 music-state · AU-11 UI SFX · EC-1..7 economy items (D-ECONOMY-MEDIUM ✅ RULED Option B — unblocked) | BUILD-NOW | W2-W6 surfaces | UI QA shots; audio events fire per surface; economy exchange round-trips per region |
| W8 · HANDSHAKE close *(game side; late-window, before hardware)* | audit the drop-in surface | DR-1 stable-id audit across all staged actors · DR-3/4/5/6 staging-leg audit + placeholder writeback round-trip | BUILD-NOW | all content waves | every staged actor carries its canon id (W4.9 DataValidation); one placeholder mesh/SFX round-trips the AG7.5 state machine |
Note: the DR staging legs (DR-3/4/5/6) are construction rules applied during W1/W5/W6 — an NPC,
gather-node or dwelling is placed carrying its stable id + asset handle at placement time — then AUDITED
in W8. They are not a separate late build; W8 is the proof, not the placement.
Per the standing decision protocol: never a bare question — alternatives, deep-dive, adversarial pass,
recommendation, strongest objection. Creative-within-vision → ruled and applied (show the path);
genuine cardinal/system-canon → briefed for Josh.
**✅ 2026-07-24 — Josh ruled ALL FIVE live briefs in-conversation ("I agree with all your
recommendations"): D-VO-POLICY = PARTIAL · D-STEAM-FORMAT = EARLY ACCESS · D-PRICING = P4 w/ the
$20-permanent-discount-off-$69.99 direction recorded verbatim (tier: AAAAA/Quintuple-A) · D-ECONOMY-MEDIUM =
Option B ruled · D-DEFEAT-AXIS = brief-at-the-feel-wave confirmed. The ship-side three live in
docs/ROADMAP_POST_5090_TO_SHIP.md's register (collapsed same landing); memory:
ship-rulings-vo-steam-pricing.**
D-ECONOMY-MEDIUM — ✅ RULED Option B (Josh 2026-07-24). EC-medium + EC-vendor UNBLOCK; the per-region exchange designs are LANE-CANON author items (cited to each region's real documented systems). The *model* exists
(T1_Trades_Master [ACTIVE v1.0] §9.2 "Trade Economy at System Level" — trade-interdependence, two
economies); the *medium* (coin/price/unit) does not, and the TR/loot/vendor loop is live in Ch2-5.
ahistorical for the era/regions. (B) Historically-real mixed exchange per region — barter +
weight-value + prestige-goods, NO universal currency early — RECOMMENDED. (C) No economy in the slice,
defer entirely — REJECTED: the gather→craft→trade loop is active content in Ch2-5.
mixed exchange, Neophyte-floor only, L2 treasure placed but sparse (early-game curve). Fits §9.2 +
immersive-teaching. Full vendor economy + balance ride post-playtest.
the slice needs only the Neophyte-floor exchange surface + L2 placement, not a full market sim; Josh
backstops via playtest. The only cardinal fork inside this (if it ever surfaces) is a
universal-coin-vs-never *canon* call — that alone would flag; the medium mechanics do not.
D-DEFEAT-AXIS (alias D-HP0-AXIS) — the boss defeat-axis design gap (C:/dev/Humanity/Humanity/TODO_CANON.md §"Design gap"
L194-207; QA image-critic v3/v4 recorded Boss HP 0/100 while Composure 100/100 and the fight continued).
Blocks CF-10 defeat presentation + PG death/respawn polish.
Composure-break-to-Withdrawal thesis and the zero-enemy-stat-delta headline. (B) **Composure-break-to-
Withdrawal is the sole defeat axis; boss Health is a non-lethal pressure/stagger track** — RECOMMENDED,
matches Pillar 8 + the observable-thesis invariant. (C) HP-0 triggers a stagger/execution *window* that
feeds Composure — hybrid; more feel, more surface.
death). This touches the combat pillar (system-canon) — briefed for Josh, recommendation ready; it
is Phase-5M-adjacent and the greybox has no death state to wire until it is ruled.
will die. Health 0 is death. If they're a specific boss or combatant that we don't kill for some
specific canonical reason because it'll gate story progression then they'd have to withdraw at 1
health."** HP is a REAL lethal track (Option A + the canonical clamp): HP-0 = death for killable
enemies — BE_0002's own row carries an explicit death outcome the Option-B analysis MISSED — and
the protected class floors at 1 HP → forced WITHDRAWAL (no-dead-end made mechanical), assigned
per-boss from registry data (wave G's win_condition back-fill), never a global rule.
Composure-break→Withdrawal remains the signature mechanic ALONGSIDE lethal HP. W2 builds the full
defeat state (both paths + tests) under this ruling; the H13 split is retired.
NG+ / prestige forks — NOTE ONLY (out of slice). New Game+ carry-over across "The Forgotten One"
(mastery, familiars, inventory, world-state, the un-pruned seventh vril-seat — decision #28) stays
proposal-tier and pending Josh. **Not in the 2-3-week window; recorded here so the save/progression
waves (PG-6, W6) leave the carry-over seam addressable, nothing more.**
---
The drop-in doctrine. The post-5090 passes (§A.3) must be *fill, not rework*. That is only true if the
pre-5090 window leaves every surface addressable: a stable id on every actor, a single documented
contract for how a generated asset attaches to an id, placeholder-actor legs already placed for every
generable category, weave anchors planted for the enrichment pass, and a clean substrate for the
deep-read. DR-1..8 are that readiness pass. (Source note: the DR recovery agent's output file
tasks/a641d9b80d0fed63c.output is 0 bytes — the StructuredOutput-cap death class, disk work survives
but the return did not; DR-1..8 are reconstructed from the authoritative task directive + standing canon
homes + the RAG/substrate memory index, and each reconstructed item is flagged with its grounding.)
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| DR-1 | Stable-id property contract on ALL staged actors. Every staged actor — SiteMarker, boss, NPC, gather-node, prop, scene anchor — exposes its canon stable id (site_id / boss_id / char_id / mesh_id_ref / scene_anchor_id) as a queryable UPROPERTY, so a generated asset resolves onto a KNOWN id with zero re-placement. | AG7.1 mesh_id_ref + AG7.5 writeback-keys-on-id + W4.9 DataValidation (asserts every DataTable RowName still == its registry id — the recorded re-import-renames-a-row / chunk_id-collapse orphan class). Proven precedent: AHumanitySiteMarker.FindForSite keys on site_id (ch2_5_slice_map.md). | BUILD-NOW | W1 staging + T0.8 imports | enforced from W1 onward (construction rule); audited in W8 |
| DR-2 | THE ASSET-PATH DROP-IN CONTRACT — the one absent piece. Author ONE cross-pipeline contract (a T99_Translation contract amendment + registry_extensions.json column set) declaring, for EVERY generable surface (mesh / VFX / audio / music / cinematic / voice): the write-back column (ue_asset_path / mesh_id_ref / ue_sound_asset_path / …), the AG7.5 five-state machine (pending/in_progress/complete/rejected/regeneration_required), the generation_prompt_hash regen trigger, and the runtime resolver (FDataTableRowHandle→asset, fall back to placeholder). | Absence-proof: the instances exist SCATTERED — T0.3 ratified ue_sound_asset_path×3 + cinematic-participant mesh_pipeline_type/ue_asset_path/binding_kind (T99_Translation_Audio.md, registry_extensions.json); AG7.5 mesh state machine; T0.13 cross-repo writeback manifest — but a grep docs/ for a UNIFIED asset-path/drop-in contract = 0. No single contract ties them. This is the absent piece. | CANON-AUTHOR-NOW | T0.3, AG7.5, T0.13 | LANE-CANON (early — it is the schema the whole handshake reads) |
| DR-3 | Staging leg — SEEDS. Placeholder-actor placement pass for L1.5/L2/L3 in-world seeds (environmental-storytelling props, vril-site seeds, quest/significance-lens seed triggers), each a stable-id marker mirroring AHumanitySiteMarker, so the generative + enrichment passes fill them. | SIGNIFICANCE_LENSES.md (33 lenses) + the seed-wiring lane (MASTER_ENHANCEMENT_PLAN significance-lens framework) + L1.5 env-storytelling seams (LW-11/LW-12). | BUILD-NOW | W1/W6 staging | placed during W1/W6; audited W8 |
| DR-4 | Staging leg — DWELLINGS. Placeholder buildable/dwelling markers (home-base plots first) carrying stable ids + asset handles. | N8.9 Dwelling_Registry + BuildableController (row counts author-locked, decision #9 — markers only, no content invented). | BUILD-NOW | W6 | placed during W6; audited W8 |
| DR-5 | Staging leg — NPCs. Placeholder-NPC pass: the Ch2 B10 seven named village NPCs (CHAR_0009-0015) + the ambient-minimum, placed as stable-id MetaHuman-slot markers so appearance/voice generation drops in. | TG-8 (7 named NPCs + ambient minimum) + T0_Character_Index rows + CN5.8 (one in-engine MetaHuman + stable asset-id; Epic sunsets the browser Creator 2026-11-05 → build sooner). | BUILD-NOW | W5/W6 | placed during W5/W6; audited W8 |
| DR-6 | Staging leg — GATHER. Gather-node actor placement (reuse AHumanitySiteMarker) driven by weightmap LayerInfo, each carrying its flora/mineral stable id + asset handle. | FL-3 (gather-node actor, none exists) + FL-4 (region-distributed placement by weightmap LayerInfo) + FL-5/MN-4 (RngDropTable yield rows). | BUILD-NOW | W4 weightmaps, W5 | placed during W5; audited W8 |
| DR-7 | Weave anchors. Plant the cross-cultural weave + significance-lens anchors on staged content (Grimoire nodes, Thread_Grid anchors, the signature slice link) so the post-5090 deep-read enrichment pass ATTACHES with zero re-placement. | docs/proposals/CROSS_CULTURAL_WEAVE.md + docs/proposals/SIGNIFICANCE_LENSES.md + Q3.8 Cross_Cultural_Link_Graph (184 edges) + LINK_0186 CONFIRMED EXISTS (registries/T0_Cross_Cultural_Link_Graph/Sheet1.csv — Bali leyak↔Khmer krasue; kills AB-13, consume it). | CANON-AUTHOR-NOW | W5/W6 weave content | LANE-CANON; anchors land as chapters stage |
| DR-8 | The 3 wire-time RAG fixes. Before the post-5090 deep-read enrichment pass consumes the substrate, verify/repair the 3 known substrate-integrity defects, each with a positive control: (1) the silent chunk_id-collapse class (a constant chunk_id collapsed every non-PDF book while gates stayed green — treat harness/rag/ as under-verified); (2) the canon-rebuild-wipes-substrate-vectors class (--scope canon DROPped the SHARED vec table; index_manifest.json is shared — re-verify the gate holds); (3) the substrate region-key / query-time filter (chunks keyed on the CULTURAL slug, region_id→slug expands at QUERY time, substrate MUST be region-filtered at query time). | Absence-proof: DR recovery file 0 bytes; reconstructed from the standing MEMORY index — silent-data-loss-chunk-id-collapse.md, canon-rebuild-wiped-substrate-vectors.md (FIXED+GATED — re-verify), substrate-region-key-ruling.md + region-page-pilot-and-substrate-filter.md. To be confirmed against the actual deep-read wiring. | BUILD-NOW (harness) | before any post-5090 enrichment | LANE-CANON / harness; gate-verified with a positive control each |
Handshake exit condition. The window closes 5090-ready when: every staged actor passes the DR-1
stable-id audit (W4.9 DataValidation green); the DR-2 asset-path drop-in contract is ratified and a
placeholder mesh/SFX round-trips its five-state machine; DR-3..6 staging legs are placed and audited
(W8); DR-7 weave anchors sit on the slice's weave-bearing content; and DR-8's 3 RAG fixes are
gate-verified. At that point stages A.3.2 (enrichment) and A.3.3 (generative) are pure fill — the drop-in
doctrine holds and the 2-3-week investment converts to finished game without rework.
---
RECONCILED (Vol2): CR-CHAKRA → cross-ref to AB-5 (the single Chakra-repair owner, LANE-CANON/W-LW1, CA). AU-10 → cross-ref to ws56_av AU-10 (audio home). CF-10's boss-defeat STATE is UNBLOCKED — D-DEFEAT-AXIS RESOLVED 2026-07-24 (Josh overruled: rated-M, HP 0 = death; per-boss non-kill via the pip model; executed by R1 + R-DATA — see the FUN-REBUILD absorption map + the register). §G waves map to the MASTER WAVE QUEUE: W-FEEL1→W2 · W-TGT→W3 · W-AI→W5 · W-MOVE→W5 · W-FEEL2→W9 · W-PRES→W9.
The CH 2-5 vertical-slice enhancement of the combat/player lanes. The trunk built the data layer
(185 abilities, 72 weapons, the 16 slice BE rows, the 42-var worldstate, the §9.5 evaluator) and the
channel layer (C1.16 GameplayCue, native combat tags, the DamageExecCalc, the BE_0002 StateTree)
— but not the FEEL layer: every cue routes to a no-op notify stub, and every feel-read lives on
the debug Canvas HUD. This section closes that. Tag law (binding, §0 + the two dive critics): the
feel primitives — hit-stop, floating damage numbers, target flash, camera shake/punch, hit-react
states, the color-independent SHAPE telegraph channel, UMG — are deterministic BUILD-NOW; only the
final Niagara VFX / generated meshes/textures areGATED-5090, and final mocap/anim isGATED-EXT
(an external-service/hand-auth axis, never generative inference). Presentation lands in tiers:
T0greybox feel (BUILD-NOW) →T1placeholder anim/SFX (BUILD-NOW / GATED-EXT for mocap) →T2
final art (GATED-5090). The slice ships onT0+T1;T2drops in post-5090 without a re-wire.
Positive-control (dive #1 repoCritic verification_done, both critics GO_WITH_FIXES): grep of game
Source/ returns 0 for CameraShake, HitStop, DamageNumber, HitReact, Flinch, Stagger,
Knockback, LockOn, UUserWidget/CreateWidget. Read of InputConfig (4 of 8 verbs bound; no
crouch/dodge/interact/lock-on/gamepad), HumanityCharacter/BossCharacter/GameplayAbility (lock-on =
"P2.2 deferred"; boss header "does not locomote"; targeting = nearest-in-800uu stub). The gaps are real
in CODE; the phantom-folds below are already-tracked plan item ids (fold ledger, §E).
---
Josh's named gap ("how the player KNOWS an attack landed"). Rides the DONE DamageExecCalc + C1.16
cue channel — zero new canon deps; the highest "does it feel like a game" delta per engineer-hour.
| id | canon citation / absence-proof | tag | depends | wave | |||
|---|---|---|---|---|---|---|---|
| CF-1 | Absence: DamageExecCalc.cpp:151 fires the Hit cue → no-op notify (GameplayCueNotifies.cpp:11); grep `HitStop\ | DamageNumber\ | Flash\ | TimeDilation=0. Seam: C1.16 channel proven (plan §3). Deterministic hit-stop (global SetGlobalTimeDilation` micro-freeze) + target-material flash + floating damage number on the existing Hit cue. | BUILD-NOW | C1.5/C1.16 (DONE) | W-FEEL1 |
| CF-6 | Absence: DamageExecCalc.cpp:189-199 = tag + stub cue + tone + telemetry; the Pillar-8 payoff is invisible outside the debug HUD. Canon: the node-break IS the signature (T99 Step 4; COMBAT_SYS §5). The on-screen Composure-BREAK MOMENT: hit-stop + full-screen flash + camera punch, fired alongside RecordNodeBreak. | BUILD-NOW | CF-1 | W-FEEL1 | |||
| CF-8 | Absence: grep `CameraShake\ | CameraShakeBase=0; HumanityCharacter camera = plain SpringArm+Camera. Deterministic UCameraShakeBase` on hit-dealt / hit-taken / node-break / boss-strike-windup; a core feel primitive, not scoped as a WS item before now. | BUILD-NOW | P2.1 cam (exists) | W-FEEL1 | ||
| CF-12 | Absence: WithdrawalClock steps WS_024 (BossStateTreeNodes.h); DebugHUD shows the raw float, no pressure read. Canon: the Withdrawal clock is the anti-enrage signature (T99 §4.7; COMBAT_SYS §4.7 — vril_density -= step, never a damage spike). A "the world is withdrawing" read: tells visibly tighten, wells visibly slow — the enrage-replacement made legible. | BUILD-NOW | boss ST (DONE) | W-FEEL1 | |||
| CF-10 | Absence: TODO_CANON "greybox has NO death/stagger/defeat model for HP=0"; P2.14 = ws.* writeback only. Canon: win_condition RULED (T99 §5.1) — REDUCE "still blended, never a pure DPS check"; BE_0002 = FREE ("the fiction of the polo's hold breaking and Rangku Wera freed", CH_02.md L230); no-dead-end §2.5. Greybox death-cam/respawn shell + a boss defeat/withdrawal state (never a death ragdoll for a FREED boss). Carries brief D-BOSS-DEFEAT-AXIS (§C). | BUILD-NOW | CF-1; brief §C | W-FEEL1 | |||
| AU-10 *(xref → WS-6)* | The AUDIO half of CF-1: hit/block/miss/crit cue taxonomy. This section owns the timing hook (the cue fires on the same frame as hit-stop); the SFX bank rides A6.5/A6.8. | BUILD-NOW | CF-1 | W-FEEL1 (audio → WS-6) |
Verified-by (W-FEEL1): the WS-10 loop (QA-1/2/5/6 LIVE) — a functional test asserts global
TimeDilation dips within the hit frame and a DamageNumber widget spawns; **image critics read a
before/after capture pair** on the C1.18 rig (the standing visual-verification directive) and PASS the
BREAK-moment frame. Runs parallel to wave E (no shared file with the Ch-2 staging).
---
| id | canon citation / absence-proof | tag | depends | wave | |||
|---|---|---|---|---|---|---|---|
| CF-2 | Absence: grep `Flinch\ | Stagger\ | Knockback\ | HitReact=0; the boss never visibly reacts, so hits read inert. Greybox hit-react anim/pause states per damage + per node-break. Final mocap = GATED-EXT`, the react state machine is BUILD-NOW. | BUILD-NOW | CF-1 | W-FEEL2 |
| CF-7 | Canon (accessibility FLOOR, not gated): T99 §2.6 + Step 1 — "multi-channel readability is a non-negotiable L1 requirement … the Cue carries an audio + shape channel, not color alone"; DIFF Attunements. Absence: BossCharacter.cpp:474 Telegraph → stub notify; the shape channel is designed, unrendered. A windup pose + a color-independent ground/boss shape decal danger indicator. Critic-corrected tag: BUILD-NOW (deterministic decal render), not 5090-gated. | BUILD-NOW | CF-1 | W-FEEL2 | |||
| CF-9 | Canon: BE_0002 phase_breakdown_object = "2 phases: jungle stalk; cornered frenzy … (evolve-not-swap: adds feint follow-ups on the lunge + shortened telegraphs)"; escalation_vector RULED enum `tighten_telegraph\ | multiply_telegraph\ | add_layer (T99 §4, D-COMBAT-TD); Pillar-8 evolve-not-swap "a transition pushes a layer, never pops one" (T99 §2.8/Step 2). Absence: BossCharacter StrikeNow = single MM_Attack_01` swing; P1/P2 labels drive HUD text only. Build ≥2-3 greybox attack shapes per phase from the phase prose, honoring evolve-not-swap. | BUILD-NOW | CF-2; C1.7 ST | W-FEEL2 |
Verified-by (W-FEEL2): a functional test asserts a HitReact state is entered on damage and that P2
adds (not swaps) P1's tasks; an image critic PASSes the telegraph shape in greyscale (the L1
accessibility floor — legible with color stripped). Sequence W-FEEL2 with / just after wave G (G's
sub-bosses + Ebu Gogo consume the react + attack-shape substrate).
---
Josh's named gap. CF-3 / MV-6 / TG-1 all restate plan P2.2 ("soft lock-on + toggle +
target-switch"); the input action IN-10 rides P2.3 (UI/input section). This section supplies the
build spec for the P2.2 item; the key binding is cross-section (P2.3), the reticle UMG is
cross-section (P2.4). One net-new sub-item survives the fold: TG-2, the targetable-set abstraction.
| id | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|
| P2.2 (folds CF-3, MV-6, TG-1) | Absence: GameplayAbility.cpp:100 + HumanityCharacter.h:33 "lock-on not built here (P2.2)"; targeting = nearest-in-800uu stub. Plan: P2.2 "follow cam + soft lock-on to nearest hostile … toggle + target-switch". Build: soft-lock acquire, target cycle, on-screen indicator, camera yaw-blend to target, strafe-orientation. | BUILD-NOW | P2.1 cam; P2.3 key *(xref)* | W-TGT |
| TG-2 | Absence: P2.2 locks "nearest hostile with Composure", but slice fauna (Komodo CR_0001), Ebu Gogo (CR_0010), and constructs carry no Composure. A ITargetable interface + hostility query spanning non-Composure targets — the abstraction P2.2's "with Composure" wording omits. | BUILD-NOW | P2.2 | W-TGT |
| TG-7 | Absence: DebugHUD.h draws only player/boss bars; no aggro/alert/off-screen indicator. A threat/aggro-state read (debug indicator now, T2 art later) so the player can tell an enemy detected them. | BUILD-NOW | TG-11 | W-TGT |
Verified-by (W-TGT): a functional test acquires the nearest ITargetable, cycles to the next, and
asserts the camera yaw-blends; a second asserts a non-Composure fauna actor (CR_0001) is a legal
lock-on target. This wave makes multi-enemy combat (W-AI) playable — sequence it before W-AI's
N-enemy encounters.
---
The presentation-tier model, grounded in canon: **T1_Combat_System_Spec §5.2 (Per-Weapon Canonical
Structure)** — every weapon carries 4 abilities + a Mastery ability at Proficiency 8 + a Legendary form
at 99; and the cast_pattern enum (`instant | charge_hold | sustained_drain | channeled | passive |
ambient`, §Damage Formula) that the 185 abilities already populate. The engine reads none of it.
| id | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|
| CF-4 | Canon: T1_Combat_System_Spec §5.2 (4 abilities + Mastery@8 + Legendary@99 per weapon); §Block/Parry/Dodge (per-class defensive properties — Rapier Parry, Madu Horn-Catch, Great-Shield Plant); T0_Weapon_Registry 8-col schema (72 weapons). Absence: weapon CSV has no moveset/anim/combo column; a single MM_Attack_01 swing. A weapon_class → greybox-animset map with light/heavy/combo timing structure so classes feel distinct. T0 timing BUILD-NOW; T1 anim GATED-EXT; T2 VFX GATED-5090. | BUILD-NOW | CF-1 cue seam | W-PRES |
| CF-5 | Canon: T1_Combat_System_Spec §Damage Formula cast_pattern enum + T1_Ability_Tree cast_pattern/shape_primitive (185 rows populated); T99 Step 1 (verbs→UGameplayAbility, VFX→GameplayCue). Absence: GameplayAbility.cpp:46 fires ONE VrilPolarity cue for every cast; ability_sfx_id_ref_array EMPTY. A cast_pattern → greybox cast/travel/impact primitive so a charge_hold reads differently from an instant. | BUILD-NOW | CF-1 cue seam | W-PRES |
| CR-CHAKRA *(canon-repair rider)* | Canon-repair: T0_Ability_Tree_Registry/Sheet1.csv:110 B_FA_002,Chakra Thunderbolt — a vril-seat reframe residue (chakra→vril-seat naming per the Vril-Society/anti-fringe firewall). CF-5 renders the ability name in the cast label, so this must be repaired before it surfaces player-facing. Re-anchor within the 185 (never a 186th). | BUILD-NOW | — | W-PRES |
Verified-by (W-PRES): an image critic confirms ≥3 visually-distinct cast primitives across
cast_pattern classes; a functional test asserts the light/heavy/combo timing window differs by
weapon_class; a grep asserts Chakra = 0 in player-facing ability labels post-repair.
---
Today the enemy surface = one stationary 1v1 boss dist-checking GetPlayerPawn(0). The slice beats
need pursuit, N-enemy fights, fauna/NPC/construct/companion actors, and legible spawns. **All
deterministic BUILD-NOW; only meshes/anims are art-gated** (GATED-EXT/GATED-5090). Spawns obey the
CVD Pillar-1 Hybrid policy — three declared systems ONLY (CVD L168-170: *Aggro Magnet · Rift
Instability Zones · Antagonist Hunter Triggers*; executable test: any random encounter outside the three
= pillar violation). The faction director raises a weight the three systems read; it **spawns
nothing itself**, and the LLM never spawns (T99 Step 8; A.3-A.6). Living ecology is RULED
(migrate/regrow; progression-critical entities immune). The 16 slice BE rows (BE_0002..BE_0005_S4) are
canon — consumed, never re-authored; patrols owned by the runtime executor.
| id | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|
| TG-3 | Absence: BossCharacter.cpp strike = FVector::Dist; header "stalks + swings, does not locomote". Canon: the Ch-2 stalk-and-corner beat (CH02_B07→B08, BE_0002 phase_breakdown). Enemy AIController + CMC + navmesh path-follow. Foundational — unblocks TG-4 and wave G. | BUILD-NOW | navmesh (W4) | W-AI |
| TG-4 | Canon: BE_0002_S1 = Komodo+python pair; BE_0004 constructs "multiply"; CH_03 dual-serpent, CH_05 river-war backdrop. Absence: rig is 1v1 (GetPlayerPawn(0), one boss). N-enemy encounters + per-target damage + lock-on among several. | BUILD-NOW | TG-3; P2.2 | W-AI |
| TG-6 | Canon: CVD Pillar-1 L168-170 (three declared spawn systems + the visible-enemy default); T99 Step 8 (director raises a weight, spawns nothing). Absence: only AHumanitySiteMarker (arrival-trigger, non-combat). Spawn volumes + combat-encounter triggers at sites; the three-system random layer as the only random spawner (with the pillar-violation gate). *(Plan home: N8.7 spawner.)* | BUILD-NOW | TG-3 | W-AI |
| TG-9 | Canon: BE_0002_S2 = "materialized_superstition"; BE_0004 constructs "multiply"; CH_03 twisted-word, CH_05 pangulubalang. Absence: C1.13 env-boss protocol covers only the 6 non-damage canon instances — the materialized-argument / construct enemy class (often multiplying, fightable) is uncovered. A construct enemy class distinct from the 4-step protocol. | BUILD-NOW | TG-3 | W-AI |
| TG-5 | Canon: T0_Creature_Roster 132 rows (17 Flores); living-ecology RULED (migrate/regrow, progression-critical immune). Absence: no patrol/aggro/flee/leash class in Source. Placeholder-capsule fauna AI (C1.17/N8.7 homes); mesh/anim art-gated. | BUILD-NOW | TG-3 | W-AI |
| TG-11 | Canon: CH02_B05 Ebu Gogo stealth, B07 Rangku stalk. Absence: no AIPerception/sensing in Source; C1.23 covers PLAYER stealth, not enemy sight/hearing for aggro. A shared perception seam (sight/hearing cones) reused for enemy target acquisition. | BUILD-NOW | TG-3 | W-AI |
| TG-12 | Canon: the roster is data-authorial (§12 #9); ecology RULED. Absence: spawn_rate blank; no aggro/patrol/leash/flee columns — the runtime AI has nothing to read. Illustrative shapes build now (tuning firewall); final values authorial. Reuses the gen_row_struct struct-regen pattern (FA-2 precedent). | BUILD-NOW | TG-5 | W-AI |
| TG-8 | Canon: CH02_B10 names 7 village NPCs (CHAR_0009-0015). Absence: N8.2 AHumanityNpcCharacter unbuilt — no placeholder NPC stands in a village. Minimum ambient-NPC actor (placeholder capsule). *(Plan home: N8.2 — slice-minimum only; full persona = WS-8.)* | BUILD-NOW | TG-3 | W-AI |
| TG-10 | Canon: Shell familiar bonds Ch3 (inside the slice); paired-op Composure hook canon Ch73. Absence: no CompanionController/FamiliarPawn in Source (N8.5/N8.6 unbuilt). A following/targetable/leashing ally pawn (placeholder follower). | BUILD-NOW | TG-3; P2.2 | W-AI |
Verified-by (W-AI): the CH02_SliceWalk asserts an enemy pursues the player across navmesh
(TG-3) and an N-enemy encounter deals per-target damage (TG-4); a spawn test asserts no random spawn
fires outside the three declared systems (the Pillar-1 gate). **W-AI is the prerequisite substrate for
wave G** (sub-bosses + Ebu Gogo) — land W-AI at/before G.
---
A 173 km island with a 2 352 m volcanic spine, ringed by the live FloresOcean plane, is crossed today
only by the DEV M-key teleport. The Ch-2 canopy agility course is a HARD LINE inside the slice. This
section owns the traversal mechanics; the key bindings (crouch/dodge/interact) ride P2.3
(UI/input, cross-section); site-to-site fast-travel (MV-1) rides the transitions section.
| id | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|
| MV-3 | Canon (HARD LINE): CH_02.md L230 "agility_course the Flores forest canopy, canopy-horizontal movement, with a forest-pod Puzzle variant … one course per chapter across three variants [SRC: T0_Hard_Lines @ HL_0079]"; T1_Combat_System_Spec §Agility Course System (77 courses; Standard/Hardcore/Puzzle; Ch2 = "collecting 12 forest pods … without stopping"). Absence: grep agility/course = 0. The Ch-2 canopy course runtime (timed traversal + letter-fragment FLORES + the 12-pod puzzle variant). | BUILD-NOW | MV-2 | W-MOVE |
| MV-2 | Absence: HumanityCharacter.cpp CMC has no climb/mantle/vault/swim mode (plan P2.1 specs walk/run/sprint/jump/crouch only). Canon: the canopy course + volcanic spine demand them. Custom CMC modes: climb/mantle/vault. | BUILD-NOW | P2.1 CMC | W-MOVE |
| MV-5 | Absence: FloresOcean plane is LIVE but no water PhysicsVolume / MOVE_Swimming / dive — the player falls in and cannot swim. Canon: TODO_CANON WS-4 "real water pass open". CMC swim config + shore-water volume. | BUILD-NOW | MV-2 | W-MOVE |
| MV-4 | Canon: T1_Combat_System_Spec §Dodge Mechanic — Fluid Dodge (T1 Water), Wind Step (T1 Air), Stone Skin (T1 Earth) are the mobility ability-class; DT_AbilityTree ability_class=mobility rows. Absence: C1.6 grants only the 8 combat-MODE verbs; no dodge exists. Wire the mobility abilities (dodge/dash) that ALTER movement, not Composure. *(Binding = P2.3, cross-section.)* | BUILD-NOW | C1.6 (DONE) | W-MOVE |
| MV-7 | Canon: CVD Pillar-10 L234/L706 "movement modifiers (jungle vs desert vs steppe vs ice)"; the Zone-Catalog footfall_surface column exists as the data hook (T0.2 DONE). Absence: no engine consumer. A footfall_surface → movement-modifier reader (jungle-slow / scree-slide) — the Pillar-10 kinesthetic-differentiation seam, illustrative constants under the tuning firewall. | BUILD-NOW | MV-2 | W-MOVE |
| MV-8 | Absence: Input_SprintStart raises MaxWalkSpeed with no Stamina cost; Stamina is combat-only. Canon: climb/swim/dodge draw stamina (T1_Combat_System_Spec resource model). Couple the Stamina attribute to the new movement modes. | BUILD-NOW | MV-2; P2.7 | W-MOVE |
| MV-9 | Absence: CMC falling works but nothing consumes fall height; HP=0 has no model (shares CF-10). Canon: the 2 352 m spine + jump + courses need a fall model. A fall-damage / hard-landing doctrine (numbers = tuning firewall). | BUILD-NOW | CF-10 | W-MOVE |
Verified-by (W-MOVE): the Ch-2 Flores canopy course completes headlessly via the WS-10
AI-playtest InjectInputForAction path (12 pods collected, no stop) — the HL_0079 course is the wave's
formal exit; a shoreline test asserts MOVE_Swimming engages at the water volume; a footfall test
asserts the jungle modifier applies over a footfall_surface=jungle zone; a VERTICAL exit test
asserts the climb mode ascends a tagged vertical surface (v1.3 fold entry 54 — the canopy course is
horizontal, so without this the wave closes green with no vertical capability proven; if the schedule
cannot absorb the CMC climb mode, ship the fallback instead: traversal_capability_pending tags on
vertical zone rows so the slope teeth stop certifying sites the player cannot traverse).
---
The gap (TODO_CANON): the greybox has no death/stagger/defeat model for HP=0 — it blocks CF-10 / PG
presentation polish. Not a bare question — the alternatives, deep-dive, and recommendation:
the polo's hold breaking and Rangku freed (CH_02.md L230), not a corpse; violates §17.1 (the host
is a coerced victim) and the RULED win-condition enum (T99 §5.1 REDUCE "never a pure DPS check").
win_shape resolves), NOT HP=0. On win-condition met → a boss defeat/withdrawal state plays the
canon resolution (FREE → the hunter is freed and exits; PACIFY → yield; PURGE → the manifestation
purged). HP=0 is retained only as a fallback safety valve (the Ch-2 HP fallback at 15/18),
routed to the same withdrawal state, never a ragdoll for a FREE/PACIFY/PURGE win. Aligns with
no-dead-end (§2.5) + the RULED enum + the freed fiction.
T2 post-5090.Strongest objection to Alt 2: the win-condition→defeat mapping needs the win_condition/win_shape
columns populated on the 16 slice rows (declared in T99 §4, back-fillable from the phase prose) —
so the brief carries a small data dependency (16-row back-fill), not just an engine choice. **Rec:
Alt 2**, with the 16-row win_condition/win_shape back-fill riding the same commit as the CF-10 shell.
Josh backstops via playtest; the choice is reversible (a defeat-state swap), so erring toward the
canon-honest FREE model is the cheap error.
---
Six new feel/traversal waves, slotted against the E/F/G/H residue. Ranked by leverage (feel-core
first — it is the largest "is this a game" delta and has zero new deps):
| wave | scope | items | rides / blocks | verified-by |
|---|---|---|---|---|
| W-FEEL1 | Hit-confirmation + camera feel | CF-1 CF-6 CF-8 CF-10 (+AU-10 audio→WS-6) | parallel to E; no shared file | image-critic before/after pair + TimeDilation/DamageNumber functional test |
| W-TGT | Lock-on = the P2.2 spec + targetable-set | P2.2 (folds CF-3/MV-6/TG-1) · TG-2 · TG-7 | blocks W-AI multi-enemy | acquire/cycle/yaw-blend test; non-Composure fauna targetable |
| W-AI | Enemy locomotion · multi-enemy · spawn · fauna · constructs · ambient NPC · ally | TG-3 TG-4 TG-5 TG-6 TG-8 TG-9 TG-10 TG-11 TG-12 | prereq for wave G; needs W-TGT | SliceWalk pursuit + per-target damage; Pillar-1 spawn-gate test |
| W-FEEL2 | Enemy reactions · telegraph shape · boss-attack variety | CF-2 CF-7 CF-9 | with/after G (G consumes it) | HitReact-state + evolve-not-swap test; greyscale telegraph image-critic |
| W-MOVE | CMC modes · HL_0079 course · mobility · regional modifiers · fall model | MV-2 MV-3 MV-4 MV-5 MV-7 MV-8 MV-9 | needs P2.3 binds (xref) + E/F terrain | headless canopy-course completion (HL_0079 exit); swim + footfall tests |
| W-PRES | Per-weapon/ability presentation tiers + Chakra repair | CF-4 CF-5 CR-CHAKRA | rides ability/weapon CSVs + W-FEEL1 cue seam | ≥3 distinct cast primitives (image-critic); per-class timing test; Chakra=0 grep |
Residue-wave interlock: W-AI lands the enemy substrate wave G (BE_0002_S1/S2 + Ebu Gogo) needs —
G's Ebu Gogo pursuit = TG-3/TG-11, BE_0002_S2 = the TG-9 construct class; sequence **W-TGT → W-AI → G →
W-FEEL2. The T2 final Niagara/VFX art** for every CF/CF-* cue rides wave H / GATED-5090 (the
polish riders) — the T0/T1 feel ships now, T2 drops in without a re-wire. W-MOVE depends on the
P2.3 binding layer (UI/input section) for crouch/dodge/interact keys and on E/F for the walkable Flores
terrain.
Test-coverage rider (WS-10 / QT expansion): the QT-1..22 autonomous test-org gains three combat
packs this program adds — QT-feel (hit-stop frame + damage-number spawn + BREAK-moment image pair),
QT-target (acquire/cycle/yaw-blend + non-Composure targetable), QT-traverse (headless canopy
course + swim volume + fall model). The nightly soak (starting this week) exercises the SliceWalk with
the feel + AI waves live, so a feel regression surfaces as a failed capture the morning after it lands.
---
Applied verbatim from the binding critic corrections; every fold points at an already-tracked plan id so
no consumer builds a duplicate:
P2.3). Presented above as the P2.2 build spec, not new items.
P2.4 (UI section). This section fires the cue/feel events; P2.4 owns the widget home.
section owns the MECHANIC each binding drives (dodge motion, crouch state, interact dispatch); the
binding layer is P2.3's.
hooks; the SFX banks ride the audio lane.
cinematic listens for; the Sequencer side is WS-5's.
(out of the Ch2-5 slice window).
standalone 8th Composure node, D-COMBAT-TD R4); its binding = P2.3; its win-payoff (frees Rangku) =
the CF-10 defeat-axis brief. gather-at-water / recharge-as-checkpoint (Ch-2 first-water) →
P2.10/PG-5 (transitions/PG section).
---
RECONCILED (Vol2): SHAPE-telegraph floor re-cited T99_Translation_Combat §2.6 (was CVD §2.6; cite-critic C2). U11.32 Chakra repair → cross-ref to AB-5 (single owner). The 11c INPUT cluster (U11.7–U11.13) rides the early INPUT wave (master W3), NOT the late UI wave (cohere H8) — W-MOVE/W-AI depend on those binds. HUD reads U11.1–U11.4 land in W2 FEEL (the CF-11 home); book screens/menus in W10.
Why a workstream, not a P2 sub-row. The mappers found the playable surface is real underneath
and invisible on top: the ONLY HUD isHumanityDebugHUD(CanvasDrawText), the ONLY input path
is an 11-action IMC with 4 of 8 verbs keyless, and there is no map / pause / settings / rebinding /
subtitle / book / photo / loading surface anywhere in game Source/ (positive-controlled: dive-1
repoCritic grepped UMG · minimap · pause · photo-mode · loading = 0). P2.4/P2.5 named the HUD and
the loc-scaffold; §12 #26 bundled the rest as "no specs today." This WS is that bundle, specced and
itemised against the built runtime it renders (UQuestSubsystem Q3.3 DONE · GAS actor C1.1 DONE ·
WorldState T0.10 DONE · cue channel C1.16 DONE).
Tag law (binding, dive critics): UMG, damage numbers, hit markers, camera-shake reads, the
color-independent SHAPE telegraph channel (an L1 accessibility FLOOR, T99_Translation_Combat §2.6) are all BUILD-NOW —
only generative INFERENCE is 5090-gated. The only gated residue here is final HUD/icon art
(+5090-final) and localized non-English string/VO content (GATED-SCAN); every runtime, widget,
and placeholder ships now. The dive tag over-gates (CF-11/CF-1/CF-6/CF-7 tagged +5090-final) are
corrected to BUILD-NOW here.
Two disciplines this WS enforces by construction:
- Reveal-gating (HL_0028). Substrate-perception (vril-signature/polarity reads) unlocks only at
Adeptus-Minor tier-6 (Ch-15 onset). The ability book, Grimoire, and any perception HUD MUST filter
by tier/arc so no late-arc name, description, or tier-6 read surfaces for a Neophyte in Ch 2-5. A
screen that cannot hide is not shippable — the gating IS the feature.
- Empty-state by design. The journal (Q3.6) and Grimoire (Q3.8) are hard-anchored to Ch-13/38/57;
in the Ch 2-5 slice they ship as *empty shells that are correctly empty*, not as stubs to be filled
later. The Ch-3 healer's-child seed is the first thing the journal is allowed to write.
[RESCOPE RE-DERIVE — see §A.0, with U11.18: Ch 13 is now the slice's terminal node.]
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave | |
|---|---|---|---|---|---|---|
| U11.1 | WBP_HumanityHUD UMG framework — retire the Canvas HumanityDebugHUD: player bars, boss Composure bar, interact prompt, objective tracker slot, cue-driven status | plan P2.4 L367 (BUILD-NOW); absence-proof CF-11 ev HumanityDebugHUD.cpp Canvas-only, `grep UUserWidget\ | CreateWidget=0` | BUILD-NOW | C1.1✅ Q3.3✅ T0.10✅ | UI |
| U11.2 | Lock-on reticle + target indicator + threat/aggro indicator (UMG layer; camera yaw-blend is P2.2/TG-1) | plan P2.2 L365; absence-proof TG-7 ev DebugHUD.h draws player/boss bars only, no aggro/alert indicator | BUILD-NOW | P2.2 U11.1 | UI | |
| U11.3 | Damage-number + hit-marker + floating-combat-text widget pool (the UMG *home* for hit confirmation; the hit-stop/shake feel primitive is the FEEL wave) | absence-proof CF-1 ev damage cue → no-op notify, grep DamageNumber=0 (corrected tag: BUILD-NOW, not +5090) | BUILD-NOW | U11.1 | UI | |
| U11.4 | Encounter HUD reads: per-mode Composure node-break pips + Withdrawal-clock "world is withdrawing" pressure read (CF-6/CF-12 *reads*; the camera-punch moment is FEEL) | CVD Pillar-8 Composure; BossStateTreeNodes.h WS_024 step; absence-proof CF-12 ev DebugHUD shows raw WS_024 float, no pressure indicator | BUILD-NOW | U11.1 C1.16✅ | UI |
*Verified-by:* image critics read the captured HUD frames (QA-6 loop, standing visual directive); a
functional test asserts every bound read tracks its WorldState/attribute source (no hard-coded HUD ints).
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.5 | Pause + options-menu framework + UGameUserSettings (video/audio/gameplay/accessibility/controls tabs); the audio tab is AU-6's SoundClass/SoundMix sliders | absence-proof dive-1 missed-domain "Settings/pause/options" + AU-6 (no SoundClass/SoundMix, no audio settings UI); grep pause=0 | BUILD-NOW | P2.3 U11.10 | UI |
| U11.6 | Front-end / boot flow UMG — New Game (Ch-2) · Continue (latest save) · Chapter-select (test harness); the surface for PG-3 (progression owns the flow) | plan PG-3 (dive-1); today only a cvar dev auto-start (humanity.QuestSlice.AutoStart) | BUILD-NOW | PG-3 U11.5 | UI |
Authority is P2.3 + code — no T99_Translation_Input exists (the translation family holds
AssetGen/Audio/Cinematic/Combat/Terrain/UE5_Build, not Input/UI; U11.31 authors the UI member). The
IMC today maps 11 KBM actions, 4 of 8 combat verbs bound, bCanCrouch=true with no crouch key.
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.7 | Input-config completion: bind the 4 keyless verbs (Puzzle/Familiar/Astral/CharacterEngage) + crouch + dodge + interact + ModeSwitch + lock-on + menu/pause/log open-keys; free the E-collision (E=Environmental vs interact) | plan P2.3 L366; absence-proof IN-1/2/3/4/10/12 + MV-10 ev InputConfig.cpp:82-85 (4 verbs), :53-98 no crouch/dodge/interact/lock-on/menu | BUILD-NOW | P2.3 P2.1 | UI |
| U11.8 | Gamepad bindings + KBM parity (IMC maps only KBM; DefaultInput.ini has AxisConfig deadzones, zero action mappings) | absence-proof IN-5 ev InputConfig.cpp:53-98 all EKeys KBM; plan §12 #26 (gamepad+KBM) | BUILD-NOW | U11.7 | UI |
| U11.9 | Rebinding UI + persistence — PlayerMappableKeySettings + UEnhancedInputUserSettings save/load | absence-proof IN-6 ev MakeAction sets only ValueType, no mappable settings; plan §12 #26 "remap breadth" | BUILD-NOW | U11.5 U11.7 | UI |
| U11.10 | Input-context stack (combat / menu / dialogue / cinematic) so menus + dialogue suppress the combat+verb IMC | absence-proof IN-7 ev HumanityCharacter.cpp:198 single AddMappingContext(...,0) | BUILD-NOW | U11.7 | UI |
| U11.11 | Accessibility input options: sprint/crouch hold-vs-toggle, look-sensitivity slider (fixed 0.07 legacy today), settable invert-Y | absence-proof IN-8 ev HumanityCharacter.cpp:268-276 hold-only; DefaultInput.ini:8 Sens=0.07; InputConfig.cpp:70-75 hard negate-Y | BUILD-NOW | U11.5 U11.7 | UI |
| U11.12 | Dev-key graduation map (IN-11): F1/F2/F3/N/M/1-3 placeholders → real UX surfaces (difficulty menu U11.5-tab → PG-11 · beat-staging · dialogue UI U11.23 · map/travel U11.21) — the honest graduation doc | absence-proof IN-11 ev InputConfig.cpp:87-98 dev keys marked greybox, no graduation doc | BUILD-NOW | U11.7 | UI |
| U11.13 | Ability / dialogue wheel — ModeSwitch radial + six-option dialogue wheel (input + UMG widget; Q3.2 owns SELECTION) | plan P2.3 L366 (ModeSwitch+wheel) + Q3.2 L386 (six-option); absence-proof IN-9 ev no wheel/ModeSwitch action | BUILD-NOW | Q3.2 U11.7 | UI |
*Verified-by:* AI-playtest via InjectInputForAction exercises every new binding in PIE + packaged
(QA loop); a functional test asserts all 8 verbs and every screen open-key are reachable.
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.14 | Ability book (L2) over DT_AbilityTree (185 rows) — tier-gated grid, REVEAL-GATED per HL_0028: ships ONLY with the gating; a Neophyte sees no late-arc name/description and no tier-6 substrate read | T0_Ability_Tree_Registry [ACTIVE v0.1] 185 rows (verified); T0_Hard_Lines HL_0028 (row 29): "Substrate-perception unlocks at Adeptus Minor (100)+; Vril Sight tier-6 reads signature/polarity" | BUILD-NOW (+5090-final icons) | T0.8✅ P2.8 U11.20 | UI |
| U11.15 | Ability-book data contract — reveal-ladder field (tier/arc/first-surface) so U11.14 can filter; AB-7 re-anchor within 185, never mint a 186th | binding correction (AB-7); T0_Ability_Tree_Registry 185-row invariant | BUILD-NOW | — | UI |
| U11.16 | Quest log + objective tracker — the landed quest panel (game 303e9f2, permanent debug overlay) → real UMG with a toggle (IN-12). Honest count semantics: chapter/beat-level objectives only; NO fabricated X/Y collectible counts until canon supplies per-quest counts | plan Q3.3✅ (UQuestSubsystem over DT_Beat); P2.4 L367; absence-proof IN-12 ev DebugHUD draws quest panel every frame, no toggle key | BUILD-NOW | Q3.3✅ U11.7 | UI |
| U11.17 | Fork / choice UMG — FORK_CH02_A's real three-way choice (HUD text today, game 303e9f2) → framed widget; six-option-ready; routes the ratified Q3.4 integrity writes (the fork-as-*scene* is CN-3/cinematic; the CHOICE widget is here) | plan Q3.4✅ L388; CN-3 ev HumanityDebugHUD.cpp:249-263 draws "press 1/2/3" | BUILD-NOW | Q3.4✅ U11.13 | UI |
| U11.18 | Journal slice stub (empty-state by design) — Q3.6 activation is Ch-13 canon (hard-anchored Ch13/38/57); Ch 2-5 ships an empty journal shell that the Ch-3 healer's-child seed is the first to write. [RESCOPE RE-DERIVE — see §A.0: Ch 13 is now the slice's terminal node] | plan Q3.6 L390 (Ch13/38/57 anchors); CH_02.md healer's-child journal-seed | BUILD-NOW | Q3.6 U11.20 | UI |
| U11.19 | Grimoire slice stub (empty-state by design) — Q3.8 cross-cultural-link / 22-thread screen; Ch 2-5 seeds nodes on discovery but the scholarly-link-action REWARD layer (Pillar 5) activates on the later anchors | plan Q3.8 L392 (Cross_Cultural_Link_Graph 184 edges, Thread_Grid 664) | BUILD-NOW | Q3.8 U11.20 | UI |
| U11.20 | Screens shell + open-keys — the book/journal/Grimoire/map/ability screen container, context-swapped input (IN-12), consistent nav | absence-proof IN-12 (no menu/screen-open input); plan P2.4 | BUILD-NOW | U11.7 U11.10 | UI |
*Verified-by:* a reveal-discipline functional test asserts the ability book at a Neophyte state exposes
NO tier-6/late-arc row (HL_0028 teeth, mirrors the reveal-ladder gate); image critics read the empty
journal/Grimoire frames to confirm they are *correctly* empty, not broken.
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.21 | In-game map screen + minimap + compass + waypoint UI (W4.6 minimap-builder is HLOD-only, NOT player UI) | absence-proof dive-1 missed-domain "in-game map/minimap/compass/waypoint" ; grep minimap=0; W4.6 L408 (HLOD builder) | BUILD-NOW | W4.6 W4.7 U11.20 | TRANS |
| U11.22 | Travel-beat UI — the slice implements RULED travel beats forward + free roam *within* regions; free cross-region travel is Vimana-gated Ch-55 (NOT a slice gap). UI = travel-beat prompt + region-transition confirm, not a fast-travel network | WGM §7 (Vimana-gated cross-region travel, Ch-55); binding correction (free travel = Ch-55, ruled beats forward now); MV-1 (173km dev-teleport stopgap) | BUILD-NOW | U11.21 PG-2 | TRANS |
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.23 | Subtitle + dialogue-line UI runtime — subtitle box, speaker attribution, advance input (CN-4; VO gen is 5090-gated, the box is not) | absence-proof CN-4 ev scenes.csv SC_CH02_polos_offer dialogue_initiation, no DialogueLineRow.h in Source | BUILD-NOW | P2.5 CN-2 U11.10 | UI |
| U11.24 | Loc / subtitle standards + non-Latin & RTL font runtime + UI-scaling (P2.5 String-Tables is only the substrate scaffold) | plan P2.5 L368 ("Loc STRATEGY is a Josh gap"); absence-proof dive-1 missed-domain "localization/subtitle/RTL font" | BUILD-NOW (runtime) · GATED-SCAN (non-English string/VO content) | P2.5 T0.7✅ | UI |
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.25 | Photo / scan / codex-capture mode — AAA staple, zero coverage; ties to the L2 Beastiary/codex (T3_Creatures_Tameable DOCUMENT verb) + significance-lens discovery | absence-proof dive-1 missed-domain "photo/scan/codex-capture"; grep photo-mode=0 | BUILD-NOW | U11.20 | UI |
| U11.26 | Loading / level-streaming / transition-screen UX — loading screen + hitch-masking across the Flores→Bali→Sumatra map changes (X9.5 is offline benchmarks only, no player UX) | absence-proof dive-1 missed-domain "performance/loading/streaming UX" + PG-2 (level transition); grep loading=0 | BUILD-NOW | PG-2 U11.21 | TRANS |
**Teaching canon owners (recall; the teaching-onboarding recall agent errored, so these are cited
directly against the docs):** T1_Story_Spine [ACTIVE v1.0] # CHAPTER 2 (the mode_variety line owns
the tutorial beats: *"combat: T (tutorial bear forced-run)"*, fire-making Type-6, inscription-locked
Return/Backtrack, vril-mechanics introduction, vril-sight awakening as the arc's first-transformation
moment); docs/spine/CH_02.md (the diegetic Attunement design — *"None of this is spoken. It is felt,
through the hands, at the water"* L28; the first-recharge learning beat CH02_B04; the cold-air reveal
cue L63; attunement waking at the Neophyte vril-trace register, gated below tier-6 per HL_0028 L21);
T0_Hard_Lines HL_0028 (the capability gate the teaching must respect); CVD Pillar-8 + T99_Translation_Combat §2.6 (the
multi-channel telegraph, an L1 accessibility floor). Nothing here is invented — it is RULED spine
design with no UX spec; §12 #26 names "tutorial/onboarding" with zero coverage.
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.27 | CAVE_BEAR forced-run tutorial — the Ch-2 cave bear you cannot fight, teaching flee/traverse (the RULED first-combat beat); implement as a scripted pursuer + traverse gate, not a winnable fight | T1_Story_Spine [ACTIVE v1.0] # CHAPTER 2 L52 "tutorial bear forced-run"; CH_02.md combat spine (real playable, not flight-by-design) | BUILD-NOW | P2.1 U11.1 (+MV traverse verbs, TG-3 pursuer) | FEEL/UI |
| U11.28 | Diegetic Attunement teaching — first-water recharge (hands-open at the waterfall) + the cold-air-in-a-warm-place reveal cue + vril rising as attunement wakes; taught through the body, NOT a tier-6 Vril-Sight HUD | CH_02.md L28/L63/L81 + CH02_B04 first-water beat; HL_0028 (no tier-6 read for a Neophyte) | BUILD-NOW | U11.1 A6.5/A6.8 (cue) | FEEL/UI |
| U11.29 | Verb + telegraph teaching — teach the 8 combat-mode verbs, Composure, and the color-independent SHAPE telegraph channel (accessibility floor) prompt-light / first-use contextual, never a wall of tooltips | CVD Pillar-8 + T99_Translation_Combat §2.6 multi-channel telegraph; C1.16✅ cue channel (shape channel un-rendered today, CF-7) | BUILD-NOW | U11.1 U11.7 U11.29-spec | FEEL/UI |
| U11.30 | Author the one missing UX spec — docs/proposals/UX_TEACHING_SPEC.md (FTUE / diegetic-teaching information architecture: forced-run, Attunement cues, verb+telegraph onboarding, prompt-light doctrine), then normalize-doc critic-gate | absence-proof: no teaching/FTUE/onboarding spec doc exists (teaching recall found no owner; §12 #26 "tutorial/onboarding" = zero coverage) | BUILD-NOW | — | UI (author early) |
*Verified-by:* AI-playtest asserts the forced-run cannot be "won" and the traverse gate opens; image
critics confirm the Attunement cue renders diegetically (no tier-6 perception overlay); the reveal test
(U11.14) doubles as the HL_0028 teeth for the teaching layer.
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| U11.31 | Author docs/translation/T99_Translation_UI.md — the UI/HUD/input engine-translation contract (the missing member; family has AssetGen/Audio/Cinematic/Combat/Terrain/UE5_Build, NOT UI); normalize-doc DRAFT→ACTIVE; folds §12 #26 "HUD/UI IA + control-scheme + loc strategy" | absence-proof docs/translation/ listing (6 members, no UI/Input); plan §12 #26 (the whole UX-spec bundle) | BUILD-NOW | U11.1–U11.24 | UI |
| U11.32 | Canon repair — "Chakra Thunderbolt" (B_FA_002) → vril-seat reframe. The literal "Chakra" in the ability CSV is vril-seat reframe residue; RENAME (care-doctrine rename-not-remove) to a vril-seat-consistent name; registry edit + --emit-baseline same commit | T0_Ability_Tree_Registry [ACTIVE v0.1] row 110 B_FA_002,Chakra Thunderbolt,Fire+Air; memory reframe-vril-seat-and-anti-fringe ("vril-seat" not chakra) | BUILD-NOW (canon-side) | — | UI |
| Dive item(s) | Resolution | Home |
|---|---|---|
| UI-1..10 (HUD/UMG surfaces) | folded — the debug-HUD replacement + reads + book screens | U11.1–U11.4, U11.14–U11.20 |
| IN-1/2/3/4/10/12 (keyless verbs, crouch, dodge, interact, lock-on, menu keys) | folded into the input-completion pass (already P2.3, not new) | U11.7 |
| IN-5 gamepad · IN-6 rebinding · IN-7 contexts · IN-8 accessibility · IN-9 wheel · IN-11 dev-key graduation | folded, one item each | U11.8/9/10/11/13/12 |
| MAP (map/minimap/compass/waypoint) · MV-1 (travel) | folded | U11.21, U11.22 |
| ST (settings/pause/options) · AU-6 (audio settings tab) | folded | U11.5 |
| LOC (subtitle/RTL font/UI-scale) · P2.5 · CN-4 (subtitle box) | folded | U11.23, U11.24 |
| PH (photo/codex-capture) · PF (loading/streaming UX) | folded | U11.25, U11.26 |
| AB-1 (ability book) | folded — ships ONLY with HL_0028 reveal-gating | U11.14 (+U11.15) |
| AB-7 (missing/187th ability) | re-anchor within 185, never mint a 186th | U11.15 |
| AB-13 | KILLED — LINK_0186 already exists (Cross_Cultural_Link_Graph row 184); phantom | — |
| CF-11 (player combat HUD) | BUILD-NOW (dive tag +5090-final corrected) | U11.1 |
| CF-1/CF-3/CF-6/CF-7/CF-12 UMG *surfaces* (numbers, reticle, node pips, shape-tell, pressure) | UMG home folded here; the FEEL primitives (hit-stop, camera shake) stay in the FEEL wave | U11.2/3/4 |
| CN-3 fork-as-scene | the CHOICE widget is here (U11.17); the framed *scene* is cinematic | U11.17 / WS-5 |
| Journal→Q3.6 · Grimoire→Q3.8 · char-progression UI→P2.8 | phantom-fold: already plan ids, consumed not re-authored | U11.18/19, P2.8 |
Chakra repair): U11.1–U11.20, U11.23–U11.25, U11.30–U11.32. *Verified-by:* every widget frame read
by image critics (QA-6); reveal-discipline + all-verbs-reachable + no-hard-coded-HUD-int functional
tests; AI-playtest drives all bindings in PIE + packaged; nightly-soak from this week.
*Verified-by:* forced-run-unwinnable + Attunement-diegetic + shape-telegraph-rendered assertions.
U11.26. *Verified-by:* a Flores→Bali map-change soak carries ws.* across and masks the hitch; the
map screen reads real Zone-Catalog site rows.
*Slice honesty:* the journal (U11.18) and Grimoire (U11.19) are empty in Ch 2-5 by canon, not by
under-build; the ability book (U11.14) is deliberately sparse (Neophyte, ~11 abilities across Ch2-5) [RESCOPE RE-DERIVE — see §A.0, with UW-2];
the map (U11.21) shows within-region roam, not cross-region fast-travel (Ch-55 Vimana). None of these
is a gap — each is the slice implementing the locked structure.
---
RECONCILED (Vol2): CN-1..CN-9 → cross-refs to ws56_av (the single scene-runtime home; this section retains the quest-side binding view only). This section's PG-1/PG-6/CN-2/SL-2 are the backbone owner and land EARLY; PG-2's region-map handoff rides AFTER terrain (master W8) — ws4_regions RX.3 is its regions-side cross-ref (cohere H1). MG-1..4 are homed in master W8 REGIONS (cohere H9). D-DEFEAT-AXIS REC(a) == ws1_feel Alt-2 == the register's Composure-break-to-Withdrawal axis; Josh-pending.
The built Q3.3UQuestSubsystemexecutes ONE chapter (CH_02) as data (gamebc356dc; produce-before-consume
DAG overDT_Beat, fork present/choose overDT_Fork, save/restore on the SaveGame seam, the 42-var
WorldState baked). The slice target is a four-chapter playthrough — Ch 2→3→4→5 across four region maps —
with cross-chapter progression, save UX, the unlock web, the integrity-band read, the scored-interaction
runtime, and dialogue/scene presentation all standing up over that seam. Nothing below is hardware-gated
except dialogue VO audio, final cinematic renders, and integrity-appearance final meshes (the DR handoff, §E).
CANON-FIRST: every item carries a canon citation or a positive-controlled absence-proof (grep=0 in game
Source/). The dive's PG/CN gap ids are carried as the item ids; new runtime clusters use MG-/UW-/IB-/SL-.
There is NO free-travel gap. MV-1 ("173 km island crossed only by a DEV M-teleport; no world-map/fast-travel")
is a phantom for the slice: free cross-region travel is Vimana-gated at Ch 55 (WGM §7 L764 "Vimana enables
free travel between all locations visited"; Vimana *acquired* Ch 55, WGM L85/L985/L997). Ch 2-5 is deep pre-Vimana
ground-travel arc (WGM §11 "Travel Methods by Arc" L989-999: Act 1-2 = walking/riding/river+coastal sailing). The
slice therefore implements ruled directional travel-beats forward + free-roam within the loaded region, never a
fast-travel menu. Intra-region locomotion (the 150 km site spacing, climb/swim/vault) is MV's scope; this section
owns only the chapter-advance + region-map handoff along the ruled onward line (PG-2).
---
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| PG-1 | Cross-chapter advance flow (Ch2→3→4→5): on chapter-complete clear the transient local.* bucket, carry durable ws.*, load the next chapter's beats. | STATE_DELTA_GRAMMAR.md §: local.* chapter-scoped produce-before-consume (1834 rows, cleared at boundary) vs ws.* durable→WS_NNN. AP: HumanityQuestSliceDriver.h hard-loads only CH_02; LoadChapterFromContent has no next-chapter caller. | BUILD-NOW | Q3.3, T0.10 | WT |
| PG-2 | Region-map transition + ruled travel-beat (Flores→Bali→Sumatra/Java + the Angkor there-and-back excursion): OpenLevel/stream the next region carrying GameInstance-scoped ws.*; the travel-beat is the chapter-end onward line, not a fast-travel menu. Kills MV-1. | WGM §11 L989-999 (ground travel Act 1-2) + per-chapter "Travel to next chapter" beats (L121 Flores land, L133 sea to Bali) + §7 L764 (free travel Vimana-gated Ch 55). AP: grep no OpenLevel/ServerTravel in Source/; only FloresIsland.umap in-engine. | BUILD-NOW | PG-1, W4.1, D-region-terrain | WT |
| PG-6 | Unified save payload + mark_write region-mark ledger. Persist player attrs, ability/mastery unlocks, integrity band, reputation, journal, familiar-bonded list, and the durable community mark_write ledger. | Contracts §1.2 Save-State list (L62: integrity level, path bucket, convergence states, NPC relationship, journal entries, grimoire links, familiar-bonded, trade mastery, inscription tier); STATE_DELTA_GRAMMAR append=+token set-insert (154 rows = the ledger arm). AP: QuestSaveGame.h = ChapterId+CompletedBeats+LocalFlags+ChosenForks only; TODO_CANON OPEN-4 mark_write unpersisted. | BUILD-NOW | Q3.3, P2.7 | WT |
| CN-2 | OnBeatEntered/OnBeatCompleted delegate on UQuestSubsystem — the single handoff seam that scene, save-autotrigger, and travel bind to by beat_ref. | Plan CN5.6 "quest beat entry/exit"; spine DT_Beat. AP: QuestSubsystem.h has no scene/beat delegate; AdvanceBeat/RecordQuestTelemetry only. | BUILD-NOW | Q3.3 | WT |
| PG-3 | Slice front-end flow: New Game (start Ch2), Continue (load latest slot), chapter-select (test harness). | Plan P2.1 boot map / GameInstance. AP: only cvar dev auto-start (humanity.QuestSlice.AutoStart); no main-menu class in Source/. | BUILD-NOW | PG-1, P2.7 | WU |
| PG-4 | Save-slot UX (UMG): multiple slots + per-slot metadata (chapter, timestamp, playtime, integrity band, region), save/load/continue menu. | Contracts §1.8 L193 ue5_save_slot_classification + USaveGame slot structure. AP: SaveProgress/LoadProgress/SaveAsync callers all in HumanityQuestAutomationTests.cpp; single passed SlotName, no enumeration. | BUILD-NOW | PG-6, P2.4 | WU |
| PG-5 | Autosave / checkpoint: recharge-well-as-checkpoint actor + autosave on beat-complete and on chapter-transition. | Contracts §1.8 (USaveGame); boss_roster_rows.json "per-stage checkpointing, judgment-free" (relief valve); plan P2.7/P2.14. AP: grep no Checkpoint/Autosave symbols in Source/. | BUILD-NOW | PG-6, CN-2 | WU |
| UW-1 (PG-7) | Ability-unlock-on-progression via the four-axis gate (mastery-band × trade × integrity × questline). Slice = Neophyte Tier-1 questline-unlock grants on beat-complete (Ch2 +4 / Ch3 +2 / Ch4 +5 / Ch5 +0); metroidvania retroactive-unlock flag. | T1_Ability_Tree §2 L49 (Tier-1 Neophyte quest-gate) + L68 hard line (every tier a canonical quest-unlock, not threshold) [CVD §17.5]; §3 L74 (per-trade quest gates → T1_Trades_Master); §1 L31 (integrity-locked access → CVD §17.4 five-band); boss_roster_rows.json "verb curve dodge/strike Ch 2-5 → perceive Ch 6", "metroidvania retroactive-unlock, no unearned spikes". AP: HumanityAbilitySet grants the full kit at char-init; grep no Mastery/Progression component. | BUILD-NOW | Q3.3, DT_AbilityTree(185) | WR3 |
| UW-2 (PG-8) | Mastery ladder component — UHumanityMasteryComponent 12-tier read; slice needs only the Neophyte tier-read + roster (all Ch 2-5 = Neophyte) [RESCOPE RE-DERIVE — see §A.0: the in-slice tier span through Ch 13 is now open]. Key on GRADE index (player-facing), GATE index for the 120-roster. | T1_Ability_Tree §2 L47-64 (12-tier scale); CH_05 "next tier unlocks arriving at Ch 6"; plan P2.8 + decision #7. AP: grep no UHumanityMasteryComponent. | BUILD-NOW | UW-1 | WP |
| IB-1 (PG-10) | Integrity 5-band derivation + player-facing BAND read (not a raw int) + the ONE canon player-only ±10% integrity_band_field GAS modifier + PathLockState freeze at Ch65. Slice sits in L3 Drifting. | CVD §9.2 five-band (Integrity_Paths §3.2 L55-61: L1 +60..+100 … L5 −60..−100; §4 world-state 1:1 L105-109); §3.5 Ch65 collapse 5→3 + tie-0→EVIL (Josh 2026-07-15); plan P2.9. AP: QuestSubsystem.GetIntegrityScore returns raw int; DebugHUD prints "integrity_score: %d". | BUILD-NOW | Q3.3, FORK dispatcher (Q3.4) | WU |
| MG-1 | UHumanityScoredInteractionSubsystem — ONE bronze/silver/gold scoring spine under which both N8.8 minigames (MG_ rows) and Q3.7 puzzles register; non-blocking (no progression gate); medals→save. | minigame-galaxy §2.2 (bronze/silver/gold + platinum-ghost, the L2 testable floor) + §2.8 (non-blocking, no-dead-end) + §2.7 (~6 engine families); plan N8.8 + Q3.7. AP: DT_Minigame = 2 DRAFT rows (MG_0001/0002), no runtime; grep no minigame subsystem. | BUILD-NOW | Q3.3, PG-6 | WR3 |
| MG-2 | Duel-parry engine + caci (MG_0001, Ch3 B09) — the reflex-timing/read whip-and-shield duel; the slice's one true Tier-M marquee. | T0_Minigame_Registry MG_0001 (Caci, duel-parry, CH_03, marquee, care_tier elevated, Manggarai secular honour-contest); minigame-galaxy §2.7(4). AP: no duel/parry handler in Source/. | BUILD-NOW-placeholder | MG-1 | WR3 |
| MG-3 | The ≥6 slice scored-interaction handlers wired to their beats: caci (Ch3 B09 · duel-parry), twisted-proverb un-inversion decode (Ch3 B07 · Q3.7 inscription), Tirta-Empul 30-spout purification (Ch4 B04 · rhythm/cue), subak water-allocation (Ch4 B05 · logic-flow), Borobudur 1,460-panel numerology (Ch5 B03 · decode), baray inlet/reservoir/sluice/rice-grid flow (Ch5 B09 · logic-flow). | ch2_5_slice_map §CH03-05 "Special systems NOT in-engine"; minigame-galaxy §2.7 engine families; Q3.7 InscriptionDecoder (proverb/numerology decode). AP: no puzzle/minigame runtime in Source/. | BUILD-NOW-placeholder | MG-1, Q3.7 | WR3/WR4/WR5 |
| MG-4 | Medal persistence + Games-Master accrual into the save payload (L2 completion; oracle micro-mechanics l2_counts=false excluded). | minigame-galaxy §2.2/§2.4 (Games Master = Gold on every Tier-M/S) + §2.7 oracle exclusion; MG_ registry l2_counts col. | BUILD-NOW | MG-1, PG-6 | WR5 |
| CN-1 | UScenePresentationSubsystem — play a scene by scene_anchor_id (lightweight beat-triggered runtime, not full LevelSequence assets); add the module deps. | Plan CN5.3/CN5.6; DT_SceneAnchor = 439 rows in-engine, zero consumer. AP: grep LevelSequence/SceneAnchor in Source/…/Private = 0; Build.cs L14-30 no LevelSequence dep. | BUILD-NOW | CN-2 | WU |
| Q3.2 | Six-option dialogue SELECTION engine — DialogueNode {4 bio-variant sets keyed by band, 1 Good{shift}, 1 Evil{shift}, form enum}; SelectOptions(biographyState) + ApplyIntegrityShift. Content authored, not procedural; VO audio 5090-gated. | Plan Q3.2; Integrity_Paths §("six-option voice system") + CVD §17.4 band-keyed voice. AP: no DialogueLineRow.h in game Source/. | BUILD-NOW (VO GATED-5090) | IB-1, CN-1 | WU |
| CN-4 | Dialogue scene presentation — camera-on-speaker, subtitle box, advance input; non-combat beats currently show only an objective + N-advance. | Plan CN-4; scenes.csv SC_CH02_polos_offer (anchor_type=dialogue_initiation). AP: no per-line dialogue substrate in Source/; VO gen 5090-gated (§13). | BUILD-NOW (VO GATED-5090) | CN-1, Q3.2 | WU |
| CN-3 | Fork-as-framed-scene — give FORK_CH02_A a framed scene (author the missing scene_anchor for CH02_B09); the built fork is currently a HUD text prompt (Josh-named gap). Generalizes to FORK_CH03_A/04_A/05_A/05_B. | forks.csv FORK_CH02_A anchor CH02_B09; plan CN-3. AP: scenes.csv has no B09 row; DebugHUD.cpp:249-263 draws "press 1/2/3". | BUILD-NOW-placeholder | CN-1, IB-1 | WU |
| CN-5 | Letterbox / cine-mode — entering a scene suppresses the combat/quest HUD, draws bars, switches to a cine ViewTarget. | Plan CN-5. AP: grep Letterbox/CineMode = 0; DebugHUD.cpp:116-373 unconditionally draws combat/quest panels. | BUILD-NOW | CN-1 | WU |
| CN-6 | Skippability + seen-scene ledger — hold-to-skip input + a seen-scene set so scenes are idempotent per playthrough (no re-fire on beat re-entry). | Plan CN-6. AP: no skip action HumanityInputConfig.h:48-72; QuestSaveGame has no scene-seen ledger. | BUILD-NOW | CN-1, PG-6 | WU |
| CN-7 | Boss intro/phase/resolution triggers — Humanity.Boss.EmitPhase N debug emitter + StateTree phase-threshold event a scene binds to. | Plan CN5.6 + T99 spike#4; scenes.csv SC_CH02_freeing_the_hunter beat CH02_B08. AP: BossCharacter has no cine emit. | BUILD-NOW-placeholder | CN-1, C1.8 | WP |
| CN-8 | Cine-camera rig — cine camera(s) with ViewTarget-blend cuts framed off participant_refs (greybox actors). | Plan CN5.4; camera rules = plan #26. AP: HumanityCharacter.h:102-107 only CameraBoom+FollowCamera (P2.2 deferred). | BUILD-NOW | CN-1, P2.2 | WP |
| CN-9 | DT_SceneDispatch path-conditional resolver — slice-DEFERRED. Ch 2-5 scene rows are all UNLOCKED/path-invariant so the slice does not need it [RESCOPE RE-DERIVE — see §A.0: re-measure path-invariance over Ch 6-13 + Pro/Ch 1]; carries as a Josh schema-ratification brief (#22). | Plan CN5.5 + decision #22; scenes.csv CH_02-05 all path_bucket=UNLOCKED. AP: no DT_SceneDispatch in Source/. | BUILD-NOW (schema-gated) | Josh #22 | WP |
| SL-1 (PG-9) | Death/respawn = graduated persistence (P2.14): on death write a graduated ws.* delta + respawn at the last recharge checkpoint with the world ADVANCED, never reset; no progression flag hard-gated on a kill. Slice is pre-journal (journal activates Ch 13) [RESCOPE RE-DERIVE — see §A.0, with U11.18] → death-learning surfaces as "remembered tells" on retry (the early-game Hades loop). | boss_roster_rows.json PRE-JOURNAL DEATH-LEARNING RULE + "HADES LOOP: death advances the world" [T1_Combat L343-347]; CVD care/no-dead-end doctrine; plan P2.14 guarded by check_no_dead_end.py. AP: grep no OnDeath/Respawn/Died. Boss HP=0 defeat axis = open Josh brief (§C D-DEFEAT-AXIS). | BUILD-NOW | PG-5, SL-2 | WP |
| SL-2 | QT-7 softlock-immunity autotest (WS-10 expansion, directive 5) — assert on every build: the DT_Beat DAG is produce-before-consume with a single reachable terminal; every fork option leaves a non-dead state; every scored-interaction beat is skippable/non-gating; the CH02→05 SliceWalk reaches the end from any fork combination. | Directive 5 (machine = alpha/beta tester, QT-1..22); plan P2.14 check_no_dead_end.py + the Q3.3 produce-before-consume DAG (game bc356dc: "sole root B01, B08 double-join on B06+B07"). AP: QT test-org map not yet built; positive-control seed = the existing CH02_SliceWalk green run. | BUILD-NOW | Q3.3, N8.1 no-dead-end lint | WT |
*Cross-section refs (owned elsewhere, wired here):* PG-11 difficulty-as-UX → C1.11 (combat/feel); PG-12 inventory-minimum → P2.6/economy (Ch 2 chapter_anchored_weapon_add=none, slice-LOW); Journal → Q3.6; Grimoire → Q3.8; input binds (crouch/interact/wheel/lock-on/skip) → P2.3; the qualitative-delta→integer map IB-1/CN-3 read is decision #11.
---
| wave | scope | items | verified-by |
|---|---|---|---|
| WT — Transitions & Save Backbone | the cross-chapter spine that makes Ch 2-5 one playthrough | CN-2, PG-1, PG-2, PG-6, SL-2 | CH02→03→04→05 SliceWalk autotest GREEN end-to-end (extends the built CH02_SliceWalk); ws.* durable + mark_write ledger survive three region-map transitions while local.* clears at each boundary; QT-7 softlock autotest GREEN over every fork combination; a captured arrival frame of each of the 4 regions to Josh. |
| WU — Slice Front-End & Presentation | the readable surface over the seam | PG-3, PG-4, PG-5, IB-1, CN-1, Q3.2, CN-4, CN-3, CN-5, CN-6 | image critics read: New Game/Continue/chapter-select menu · save-slot cards (chapter·timestamp·playtime·band) · the integrity BAND read (not raw int) · the dialogue subtitle box + letterbox · the FORK_CH02_A framed scene; a save→quit→Continue cycle restores mid-chapter; scenes are skippable + idempotent (re-entry does not re-fire). |
| WR3 / WR4 / WR5 — Per-region scored content + unlocks | the density layer, per chapter | MG-1, MG-2, MG-3, MG-4, UW-1 | each region's scored beats reach Bronze in AI-playtest (WR3 caci+proverb · WR4 purification+subak · WR5 numerology+baray); medals persist to save; ability grants fire on beat-complete at the Neophyte questline-gate (Ch2 +4/Ch3 +2/Ch4 +5); QT-7 re-asserts every scored beat is non-gating. |
| WP — Progression & cine depth polish | after the backbone reads | UW-2, SL-1, CN-7, CN-8, CN-9(deferred) | mastery Neophyte tier-read visible; death→respawn advances not resets (guarded check_no_dead_end.py); boss EmitPhase fires a bound scene; DT_SceneDispatch stays deferred pending Josh #22. |
Nightly-soak (starts THIS week, current machine): enroll the CH02→05 SliceWalk + QT-7 + every scored-beat
Bronze run + a save→transition→Continue round-trip as a nightly autonomous soak (plan §11.5 QA loop; the machine is
the tester). Any red beat/fork/reachability failure files a typed bug record repro-first.
---
The density model is a curve (directive 6): Ch 2-5 = early-game, deliberately lighter, seed-rich. This scorecard
makes the progression/quest budget measurable per chapter — counts read directly from the spine CSVs + slice map.
| chapter | quest beats | forks (opts) | scored-interaction beats | ability grants | scene-anchors needed | durable ws.* writes (all ∈ baked 42) | QT-7 fork paths |
|---|---|---|---|---|---|---|---|
| CH_02 | 10 | 1 (3) | 1 (canopy agility) | +4 | polos_offer, freeing_hunter, B09 fork (author) | integrity_score, identity_hiding_status(→concealment), familiar(Shell trace) | 3 |
| CH_03 | 12 | 1 (4) | 2 (caci B09, proverb B07) | +2 | arrival, caci, B11 fork | familiar_bond(+shell_bonded), identity_hiding(active), journal_status(+healers_child) | 4 |
| CH_04 | 12 | 1 (4) | 2 (30-spout B04, subak B05) | +5 | arrival, B09 fork | antagonist_operational_state, reputation_biography_propagation, familiar(+Kira) | 4 |
| CH_05 | 12 | 2 (7) | 2 (numerology B03, baray B09) | +0 | arrival×2 (anchor+excursion), B09+B11 forks | faction_standing, six_option_cumulative_record, integrity_level, familiar(+Khan) | 7 (incl. the integrity-gated lethal datu branch) |
Scorecard law: every durable write in all four chapters is grep-verified ∈ the baked 42 (no new var); every fork
path in the QT-7 column must reach the chapter terminal (softlock-immune); every scored beat is Bronze-reachable and
non-gating. Early chapters carry FEWER scored beats by design — the curve steepens post-slice (full game ≈100-200 h main /
1-2 k h side+weave), so the slice validates the structure, not the volume.
---
the Composure/Withdrawal fight consumes no HP=0, so the boss neither dies nor staggers. *Options:* (a) Health is a
non-lethal pressure track, defeat is always Composure-break→Withdrawal; (b) HP=0 opens a **stagger/execution
window that accelerates Withdrawal; (c) per-boss win_condition axis (some HP, some Composure). REC: (a)** for the
Pillar-8 slice — it keeps "smarter not stronger" honest and the greybox needs only a defeat shell; the axis choice
is a Phase-5M tuning ruling, not a slice blocker. *Strongest objection:* a pure-pressure boss reads as un-killable to an
action-RPG player expecting an HP payoff — mitigated by the Composure-break MOMENT (CF cluster) as the visible kill-beat.
ws.integrity_score fork writes (band phrases like +substantial-generative). The band map exists in T1_Integrity_Paths §3.2; this is a
data-import mechanic, not new canon. REC: derive from the §3.2 band midpoints (the illustrative map already banked
in docs/INTEGRITY_DELTA_MAP.md), under the tuning firewall.
Only the generated assets ride the 5090; every RUNTIME/selection/scene seam above is BUILD-NOW and consumes a
placeholder now, the generated asset later, via a stable id (the DR contract):
Kokoro/ElevenLabs VO drops in on V_<voice_id>__<dialogue_line_id> (A6.6). Gen 5090/service-gated.
MetaHuman/MRQ/final-render assets swap in behind the same scene_anchor_id. Gen 5090-gated.
SelectAppearanceVariant(score,ageStage,pathLock) returns a variant id now(P2.12); the render layer consumes the final gated mesh later. Selection ungated; mesh gen 5090-gated.
zero hardware dependency and ships on the current machine.
---
RECONCILED (Vol2): LW-6 SFX-registry cite corrected to 12 rows (cite C3); LW-9 DOC_MAP line corrected to L127 (cite C4). AB-5 is the SINGLE Chakra-repair owner (CR-CHAKRA / U11.32 are its cross-refs). LW-4 (era-swap runtime) folds into ws4_regions RX.1 (the Ch-4 chapter-integration owner); LW-3 (Pawukon clock) + LW-12 (ws keys) stay here as the primitives RX.1 depends on (cohere H5). §11.6.4 is the AUTHORITATIVE pending-Josh stance for D-ECONOMY-MEDIUM — EC-medium/EC-vendor BLOCKED-ON-BRIEF; EC-inventory/EC-treasure proceed.
Josh's directive-3: the slice must carry the living-world substrate grounded in each region's real biota/geology — fauna, herbs, mineral veins, trades, the ability book, unnamed members. Dive-2 mapped six domains (FA/FL/MN/TR/LW + EC) over the four slice regions (flores_island Ch2-3, bali Ch4, sumatra_java+angkor_khmer Ch5). This WS is the honest split of that map: the data that is CANON and needs a structured home now vs the engine that makes it observable in PIE. It is CANON-FIRST per directive-4 — every row cites the owning page/tier-doc or carries a positive-controlled absence proof; nothing is re-invented (the completeness critic already caught the mis-graded "missing" registries: T0_Creature_Roster HAS 132 rows, T0_Boss_Encounter HAS 16 speccing the slice bosses, Cross_Cultural_Link_Graph HAS 184 incl. LINK_0186 — consume, never re-author).
The gating law (binding): only generative INFERENCE is 5090-gated. Cited rows, struct regen, deterministic spawners, gather/drop dispatch, day/night/weather/calendar drivers, placement wiring = BUILD-NOW. Generative skins (creature meshes, PCG density, pharmacology curves, atmos) ride the 5090. The RNG number magnitudes ride the tuning firewall (Phase-5M audit); the SHAPES and BINDINGS build now on illustrative constants.
The two load-bearing canon spines this WS wires to:
HL_0061 / CVD §17.13 RNG hard line / T1_RNG_Sigma_Constraint_System: all RNG-based drops constrained to ±1σ — anti-streak FLOOR at −1σ (cannot drop before), mandatory CEILING at +1σ (must drop after), resets on drop; "foundational across drops, spawn rates, and RNG events." Engine: UHumanitySigmaRNG/FSigmaConstraintState are BUILT (game 1dabf50); P2.13 adds UHumanityDropComponent over DT_RngDropTable (0 rows today — author first). The integrity layer is IPW (T1_Integrity_Paths_Worldstates_Master §13, the mirrored 5-band per T1_Combat_System_Spec §-damage): the integrity_band_field modifies drop/exchange the same way it modifies damage — PLAYER-only, no enemy-stat path.docs/RUNTIME_GENERATIVE_LAYER.md §"Living ecology + the immune set": over-gather/over-hunt one area → resources/fauna MIGRATE → the area REGROWS (tunable per-resource); HARD RULE — anything gating an achievement/progression/100% is tagged progression_critical on the canon graph = IMMUNE (never depletes/migrates/vanishes). The sim can never produce a non-progressable state. Rift/ambient spawns obey CVD Pillar 1 (Random Encounter Policy: Hybrid, Gate 1) — the random layer is confined to exactly three declared systems (Aggro Magnet · Rift Instability Zones · Antagonist Hunter Triggers); anything outside = pillar violation. The runtime LLM never spawns (deterministic-first).---
normalize-doc critic → fidelity re-baseline)*Tag key: CA = CANON-AUTHOR-NOW. Wave W-LW1 unless noted.
| ID | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|
| FA-1 angkor_khmer fauna rows (Siamese/Tonle Sap crocodile, flood-forest fishery + waterbirds, war elephant; + critic's guild: giant barb, sarus crane, fishing cat, Eld's deer, temple macaques) | angkor_khmer §3 "CONSUMES the rows the spine already staged"; positive-control: grep angkor in Creature_Roster=0, CR_0024-28 all region_native=sumatra_java | CA | Creature_Roster schema (exists, 132 rows) | W-LW1 |
| FA-6 Two named Flores adds: yellow-crested cockatoo (*Cacatua sulphurea*, canopy-observation beat) + eel-form place-spirit (folklore, Thread 2) | flores §3 "two region-ambient adds whose CR_ ids are assigned at the registry-append pass" | CA | Creature_Roster | W-LW1 |
| FA-7 Row the ambient non-boss predator/huntable prose-seeds: Flores goat-meat baiting questline + livestock-raider (non-lethal AND lethal lines) | flores §3 defers goat-baiting + livestock-raider "to the Section-13 pass"; only BE_0002_S1/BE_0003_S1 rowed | CA | Creature_Roster; Quest_Definition | W-LW1 |
| FA-8 Flagship real-biota rows @1200CE: Bali myna, Flores hawk-eagle, Javan tiger (roster has only Sumatran), Javan rhino, Sumatran elephant, siamang, Malayan tapir, helmeted hornbill | positive-control: roster lacks all named; era = Javan-tiger-extant (not the 20thC extinction) | CA | Creature_Roster | W-LW1 |
FA-4 Populate cited behavioural fields for the ~28 slice rows: tier_classification + per-zone seat (SHAPE canon-now; spawn_rate magnitude under tuning firewall) | awk: spawn_rate 0/132, tier_classification 0/132; feeds FA-3 | CA (numbers→firewall) | FA-1/6/7/8 | W-LW1 |
FA-5 Huntable→materials yield ROWS in RngDropTable: hide/leather/meat for boar CR_0004, Timor deer CR_0006, Flores pig CR_0014, Sumatra ungulates; set rng_drop_anchor→TRADE_06/07 | HL_0061 §17.13 (drops ±1σ); RngDropTable wc=1 (0 data rows), rng_drop_anchor blank all rows; BUILD_PLAN Q-17 flags 0-rows. Critic tag-fix: authoring cited yield ROWS is CA; the engine-wire is the separate BUILD step (see LW-WIRE). | CA | RngDropTable schema (18 cols, exists) | W-LW1 |
FL-1 Mint T0_Flora_Registry (the fork — ruled below, §11.6.3) | positive-controlled absence + §2 cited prose with no structured home anywhere | CA | — | W-LW1 |
FL-2 Flora rows for the 4 regions from cited §2 + book_extractions (Lio 45-species pack EXR_SRC_00483; Bali usada; Sumatra datu/jamu). Unnamed members: *Curcuma xanthorrhiza, Andrographis paniculata, Alstonia scholaris, Areca catechu* (Flores); *Plumeria, Cananga odorata, Arenga pinnata* (Bali); *Styrax benzoin, Cinnamomum burmannii* (Sumatra) | EXR_SRC_00483 holds the 45-species structured pack (part/prep/mode/effect/compound) | CA | FL-1 | W-LW1 |
FL-7 Poison/medicine duality data model — poison_class + dose fields; real pharmacology taught honestly (R-17 + rewards-intelligence, never scrubbed). One plant = medicine OR hunting/fishing poison by dose+prep. Members: *Antiaris toxicaria* (dart), *Derris*/tuba (rotenone), *Cerbera odollam*, *Gloriosa*/colchicine | "toxic (hunting & fishing poisons)" flagged every region §2/§14; care doctrine — rename/reframe not remove; §17 floor untouched | CA | FL-1 | W-LW1 |
FL-5 Gather-node yield ROWS in RngDropTable (flora rows as linked_entity; σ floor/ceiling already in the struct → a forage round is deterministic-fair) | HL_0061 §17.13; RngDropTableRow 18 cols/0 rows, entity-linked. Critic tag-fix: ROW-authoring = CA; wiring = BUILD (LW-WIRE). | CA | FL-1/FL-2 | W-LW1 |
FL-8 Amend DEEP_BOOK_PROCESSING_CONTRACT: add a flora/plant entity_kind → target-registry map to FL-1 (today flora deep-read seeds route nowhere) | contract entity_kind lists creature/deity/folkloric_being… no plant; §2.4 map omits flora | CA | FL-1 | W-LW1 |
| FL-9 Trade-4 12-tier gate roster (§5.4) + per-region unlock ROWS: Flores atabhisa dream-taught unlock, odd-count crafting rule, ginger-mbeko kit, Apothecary tier ceiling | §5.4 gate roster exists; §14 unlock prose cited but unrowed | CA | Quest_Definition; FL-1 | W-LW1 |
MN-1 Mint the T0 mineral/material registry: per-region ore/mineral rows with real-geology cites + ore→material→craft-output map feeding the Forge/Workshop compounds | positive-controlled: only T0_Source_Material_Registry (research sources); Mining = 1 Trade_Registry row; no ore/material table | CA | — | W-LW1 |
| MN-2 §9 mineral prose → cited rows; author Flores volcanic minerals (obsidian, sulfur, basalt +andesite/dacite/ignimbrite/pumice/titanomagnetite ironsand/kaolin) — absent today | §9 prose-only all 4 regions; flores 0 obsidian/sulfur/basalt (positive-controlled grep=0) | CA | MN-1 | W-LW1 |
MN-3 Repair TRADE_02: set compound_membership=The_Forge, fill home_base_upgrade_ceiling + shared_build_grammar_ref (contradicts Hard_Lines today) | HL_0082 assigns Mining→The Forge (Trade 2 Mining + Trade 3 Blacksmithing); TRADE_02 compound/ceiling/grammar empty vs TRADE_03 | CA | — | W-LW1 |
MN-4 Ore/vein-yield ROWS in RngDropTable, bound to HL_0061 σ | HL_0061 §17.13 binds yields; DT_RngDropTable 0 rows. Critic tag-fix: ROW-authoring = CA; wiring = BUILD (LW-WIRE). | CA | MN-1 | W-LW1 |
MN-5 ore→material→craft chain table (Mining ore → Blacksmith/Engineering material → weapon/Vimana precursor) | T1_Trades §6.1/§7 chain + HL_0083 (T8 Engineering + T2 Mining → Vimana precursor) are prose-only; no registry maps it | CA | MN-1 | W-LW1 |
MN-8 Cited volcanic env-feature rows in Environment_Grammar (obsidian outcrop, sulfur fumarole w/ exposure_hazard, ore vein, quarry face) | EnvGrammar schema fits (exposure_hazard, elemental_affinity, protected_care_ref); only EG_0001 Lava Vent + EG_0002 today | CA | Environment_Grammar (exists, 2 rows) | W-LW1 |
| MN-9 Declare the biota/mineral/geology deep-read output lane + schema in the deep-read contract (Josh's substrate has no harvest lane). Critic re-tag: this is a contract amendment authorable NOW — CA, same class as FL-8 (was BUILD in the raw map) | deep-read output classes = folklore/civ-marks/weave/quest-seed; no biota/mineral/geology lane | CA | — | W-LW1 |
MN-10 NARROW mining-content care note bound to HL_0003/HL_0123 + care doctrine. Do NOT invent the "D-MINING-HOLOCAUST" firewall the raw label implies — it conflates D-MINING-POINTER (a data-mining tag prioritizer) with HL_0109 (banking); no ore-mining ruling exists on disk | positive-control: HL_0109=banking; no ore-mining firewall on disk | CA | — | W-LW1 |
| MN-11 Wire slice metallurgy substrate to the trade chain: Bali *pande* pamor-steel (titanomagnetite ironsand) → Forge; Angkor Kulen sandstone/laterite/iron cramps/bronze → Workshop | Bali/Angkor §9 name pande pamor-steel + Kulen sandstone/laterite/iron; unlinked to a material registry | CA | MN-1/MN-5 | W-LW1 |
| MN-12 Enumerate Sumatra placer-gold + Sunda tin-belt (cassiterite) rows, carrying the enslaved-labor care note (built-AS-institution, never laborer-as-villain — §17.1 collective care) | Sumatra §9 "not a mineral economy", riverine gold; Sunda tin/cassiterite unenumerated; care doctrine | CA | MN-1 | W-LW1 |
| TR-2 Author the gather-node / material-item registry schema (region pages name the Ch2-5 nodes + inputs in §2/§9/§14; no structured row catalog to feed the harvest runtime) | positive-controlled: registries/ has no recipe/gather/material/resource registry | CA | FL-1 + MN-1 (shared material spine) | W-LW1 |
TR-3 Author the Book-of-Trades entry data home (mechanic is canon T1_Trades_Master §8; pages cite "Book-of-Trades entries" as the seed unit; no registry/struct exists) | positive-controlled: no Book/Codex-of-Trades registry in registries/ | CA | — | W-LW1 |
TR-6 Neophyte-gate quest ROWS for the soonest trade homes (Ch7-8; Blacksmith+Herbalism S.India Ch7) as structure — 120 gates are placeholder strings Q_TRx_xxx in DT_Trade only. *Not slice-blocking (no Ch2-5 trade home)* [RESCOPE RE-DERIVE — see §A.0: Ch 7 is in-slice, premise invalidated] | Quest_Definition = 16 rows, zero Q_TR gates; twelve_tier_gate col empty; T1_Trades earliest home Ch7 | CA | Quest_Definition | W-LW1 (low) |
LW-5 Mint T0_Festival_Registry (or festival lane); rows for cited immersion festivals + map Pawukon good-days → festival windows. Members: Penti (Manggarai new-year), Patika (Lio/Kelimutu), Keo *nado-mere*, Nage buffalo-sacrifice, Cebong-beo purification; Bali *odalan*, Nyepi/Ogoh-ogoh | flores L432-482; 295 festival_or_daily_immersion seeds; no festival registry in registries/ | CA | LW-3 (Pawukon good-days) | W-LW1 |
LW-6 Author tropical-ambience SFX ROWS into T0_SFX_Registry (wildlife/insect/bird/rain/night beds, dawn-dusk-night) for the 4 regions — placeholder audio; library/generative later | T0_SFX_Registry 12 rows (9 vril-site + Sámi + Haiti Vodou + Australia); CH_02 L224 sfx_substrate [POPULATE→T0_SFX_Registry] | CA (audio asset→5090) | A6.2 schema reconcile | W-LW1 |
LW-7 Data-defect repair: flores Region_Index.region_environmental_ambient_sfx_id_ref_array = EG_0001;EG_0002 (Environment-Grammar ids, not SFX ids) → repoint to real SFX ids from LW-6 | Region_Index flores col 24 holds env-grammar ids in an sfx array | CA | LW-6 | W-LW1 |
LW-9 Create T0_Persona_Index + author the slice's ambient/named personas (own_life daily-rhythm, web_edges) — the doctrine's home registry is missing | positive-control: DOC_MAP L127 "T0_Persona_Index not yet created"; ENTITY_PERSONA_SYSTEM APPROVED-pending-wiring | CA | — | W-LW1 |
LW-11 Structure the L1.5 living-landscape seams (path/stream/dusk-spring avoidances + *sumang* tell-and-cleanse) into ambient trigger hooks/rows (Environment_Grammar is combat-affordance-only, 2 rows) | flores L468-475 avoidances+sumang; EnvGrammar 2 combat-terrain rows | CA | Environment_Grammar; LW-9 | W-LW1 |
AB-5 Canon repair — "Chakra Thunderbolt" (B_FA_002): rename via NAMING_METHOD (deep-dive-canon → adversarial-filter → player-vibe). It surfaces in the ability book's full 185 roster and contradicts the vril-seat (never-chakra) reframe | reframe memory: "Deferred: Chakra Thunderbolt (B_FA_002) rename → NAMING_METHOD"; still literal in Ability_Tree CSV row 110. 185-count LOCKED — this is a rename in-place, never a re-count | CA | — | W-LW1 |
---
Tag key: BN = BUILD-NOW · BN+5090 = placeholder now, generative-final rides the 5090.
| ID | Canon/engine anchor (or absence-proof) | Tag | Depends | Wave | |
|---|---|---|---|---|---|
FA-2 Regenerate FCreatureRosterRow.h via Tools/gen_row_struct.py — struct is 44 fields, CSV is 52 cols; cols 45-52 (mesh_id_ref..regeneration_trigger) won't bind on import, so any generative-skin/ecology populate silently drops | struct header "44 columns"; CSV NF=52; the proven gen_row_struct pattern (36 built structs). *Note: regeneration_trigger (col 52) is the living-ecology regrow hook — LW-ECO reads it* | BN | gen_row_struct.py (exists) | W-LW2 | |
FA-3 Ambient-wildlife spawner/behaviour subsystem consuming DT_CreatureRoster (region + spawn_rate keyed). Today the data is inert — 0 consumers → no wildlife observable at any tier. Folds onto N8.7 (spawner over Creature_Roster 132) + C1.17 (fauna deterministic BT/utility) | grep CreatureRoster in Config/Content/BP = 0 consumers; design only in COMBAT_ENCOUNTER_SYSTEM §8/§2.8; spawn obeys HL_0061 "foundational across spawn rates" + Pillar-1 Hybrid three-systems | BN+5090 | FA-2, FA-4, N8.7, C1.17 | W-LW2 | |
LW-ECO Living-ecology migrate/regrow with progression-critical immunity (NEW item — the ruled sim made real): over-gather/over-hunt degrades a zone → fauna/flora spawn_rate decays + migrates → regeneration_trigger regrows over time; progression_critical-tagged entities are IMMUNE (never deplete/migrate/vanish) | RUNTIME_GENERATIVE_LAYER.md §"Living ecology + the immune set — RULED"; canon-graph progression_critical tag; FCreatureRosterRow.regeneration_trigger col | BN+5090 | FA-3, FA-2, X9.4 (canon_graph) | W-LW2 | |
FL-3 Gather-node actor + placement/respawn subsystem — reuse AHumanitySiteMarker trigger-volume + string-key notify; node refs a flora_id, respawns on a timer, interactable pickup. Folds onto P2.10 (UHumanityInteractableComponent typed dispatch: pickup/gather) | positive-control: zero gather systems in Source; SiteMarker is the only node pattern | BN | P2.10 | W-LW2 | |
FL-4 Region-distributed node placement driven by weightmap LayerInfo (forest herbs→forest, tuber→crop, reeds/lotus→wetland, alpine→bare_rock). Folds onto W4.8 PCG binding (structure now, generative density skin post-5090) | 7 LayerInfo layers exist + HumanityLandscapeImporter consumes them — data EXISTS | BN+5090 | FL-3, W4.8 | W-LW3 | |
| FL-6 Herbalism craft loop gather→process(boil/prepare)→use(timed course over days): mint recipe struct + craft subsystem + recipe rows (loop is fully canon; no recipe struct exists) | Angkor gather-boil-7-day + Flores odd-count crafting rule are cited canon; T1_Trades Apothecary loop | BN | TR-2, FL-2 | W-LW3 | |
| FL-10 Komodo-bite septic wound-status → herbal-cure loop (fauna×flora): bite seeds a creeping wound-condition cured only at a gather node/healer with the region pharmacopoeia | EXR_SRC_00176 routes bite wound-status → Trade-4 gather/cure loop | BN+5090 | FL-3, FL-6, FA-1 | W-LW3 | |
| FL-11 Apothecary compound input-economy wiring: flora inputs feed Alchemy potions/poisons + Culinary vril-food ("Alchemy requires Herbalism inputs") — structure now, balance post-playtest | HL_0082 Apothecary = Herbalism T4 + Alchemy T5; §9.1 two separate economies (spellcraft vs consumables) | BN+5090 | FL-2, FL-6 | W-LW3 | |
FL-12 Generate FloraRegistryRow.h + DT_Flora via gen_row_struct.py once the FL-1 CSV lands (one USTRUCT, DataTable import — the diff IS the review) | gen_row_struct.py + 42 built DT_* prove the deterministic pattern | BN | FL-1 (CSV) | W-LW2 | |
| MN-6 Mining interaction loop (approach node → strike/extract → σ-bounded yield → inventory). No harvest/extract subsystem exists. Folds onto P2.10 (gather dispatch) + P2.13 (σ drop) | positive-control: no gather/mine/extract subsystem in Source; HumanitySigmaRNG exists | BN | P2.10, P2.13, MN-4 | W-LW2 | |
MN-7 Wire vein placement to terrain (slope + LI_bare_rock weightmap + heightmap elevation) at W4.8 — deterministic now, generative density later | flores .r16 heightmap + LI_bare_rock exist; W4.8 pending; Region_Index has no mineral column | BN+5090 | MN-1, W4.8 | W-LW3 | |
| TR-1 Gathering/harvest runtime subsystem — the slice's live loop (waterfall botanical, tamarind forage, Sanur reef, caldera forage, Tonle Sap fishery, andesite/stone). The single missing engine home. Folds onto P2.10 + the FL-3/MN-6 nodes | Source subsystems = Combat/Quest/WorldState/QA only; no harvest/forage/resource system | BN | P2.10, FL-3, MN-6 | W-LW2 | |
| TR-4 Trade-master / apprenticeship presentation surface (slice delivers trades via NPCs granting entries: Emma, Ibu Martina, pande smith, Lio dream-healer) — placeholder now, deep-read fills later | only HumanityDebugHUD.h in UI/; no trade-master interaction path | BN+5090 | TR-3, N8.2 (persona runtime) | W-LW3 | |
TR-5 Trade-mastery progression state + tier UI read at placeholder tier (slice touches only the Neophyte floor, roots no home base). Folds onto P2.8 (UHumanityMasteryComponent) | WorldState schema lacks a per-trade mastery-tier var; UI = debug HUD | BN+5090 | P2.8 | W-LW3 | |
| TR-7 Crafting-station runtime stub (recipes/stations/quality) — correctly deferred by beat-presence (no compound instantiates in Ch2-5; first at Ch7 Forge+Apothecary). Stub structure now. [RESCOPE RE-DERIVE — see §A.0: the first compound is now in-slice] | no crafting subsystem; 4 compounds all seat at home-base chapters, none in slice | BN | FL-6 (recipe struct) | W-LW3 (low) | |
LW-WIRE σ-drop engine wire — add UHumanityDropComponent binding to the FA-5/FL-5/MN-4 yield rows; serialize the per-channel σ-window map so anti-streak survives save/load. This is the BUILD half the critic split off from the row-authoring | P2.13 (DONE+WIRE; UHumanitySigmaRNG built; DT_RngDropTable 0 rows→author first); HL_0061 §17.13 | BN | P2.13, FA-5/FL-5/MN-4 rows | W-LW2 | |
| LW-1 Day/night cycle driver (directional-light + sky) at placeholder tier — the Ch-2 night/dusk beats + the night vril-tell need a real clock | positive-control: grep `TimeOfDay\ | DayNight` over Source = 0; CH_02 L26 night, L149 dusk descent | BN+5090 | LW-12 (ws keys) | W-LW2 |
LW-2 Tropical weather driver consuming the existing Region_Index.weather_cycle_profile token (placeholder rain/wet-dry now, generative sky/atmos later) | RegionIndexRow.h weather_cycle_profile unconsumed; grep WeatherState = 0; flores row dry;ash;clear | BN+5090 | LW-12 | W-LW2 | |
| LW-3 Pawukon calendar clock — the deterministic 210-day / 10-concurrent-week combinatorial calendar (Ch-4 canon time mechanic). Co-req: author the cited 55 day-name + tika good-day data list | CH_04 L59 Pawukon + Tri Hita Karana; bali L630 "55 day names"; grep Pawukon = 0 | BN | LW-12 | W-LW2 | |
LW-4 Time-fluctuation runtime — the Ch-4 playable era/environment-state swap window (placeholder era-swap now, generative era-visuals later). Consumes ChapterIndexRow.time_fluctuation_range (data field, no runtime today) | Build_Pipeline_Contracts §18 Time Period and Fluctuation Design; bali L2294 "land on a good day read from the tika calendar" | BN+5090 | LW-3, LW-12 | W-LW3 | |
| LW-8 Ambient-NPC presence/schedule — spawn village NPCs at sites at mannequin/persona-minimum tier with a day/night presence schedule; strictly non-gating. Folds onto N8.1/N8.2 persona runtime | ENTITY_PERSONA_SYSTEM §2.4 own_life daily-rhythm; no schedule field in Character_Index; TODO_CANON L168 mannequin placeholder | BN+5090 | LW-9, LW-1, N8.2 | W-LW3 | |
LW-10 Relational-web in-world play surface — make region web_edges readable to the player (NPC talk / trade goods / map edges) at placeholder tier (regions-as-webs is canon, no in-world surface) | ENTITY_PERSONA_SYSTEM §2.4 web_edges; region §15; Cross_Cultural_Link_Graph LINK_0117/LINK_0138 | BN+5090 | LW-9, N8.4 (reputation) | W-LW3 | |
LW-12 Living-world WorldState keys — add time_of_day, weather_state, pawukon_day, active_festival to the ws.* store so day/night/weather/calendar/festival persist + drive dispatchers. Folds onto P2.7 (extend the serialized set) + T0.9 (native tags) | Worldstate_Variables 42 rows (WS_001-042), none time/weather/calendar/festival | BN | P2.7, T0.9 | W-LW2 (trunk) |
---
The fork. Give gather-input flora a structured home as either (A) a NEW T0_Flora_Registry, or (B) an overload of T0_Creature_Roster with species_class=flora (the deep-book precedent — the creature schema already carries a species_class discriminator).
The steelman for B (species_class precedent). One registry, one struct, one spawner already exists (132 rows, 52 cols); the deep-book contract could route plant seeds through the same entity_kind machinery; flora and fauna share a spawn/placement/region-native shape, so FL-3/FL-4 node-placement could reuse N8.7 wholesale.
Why A wins (the grounded pick — APPLIED). The creature schema is tameable/familiar/husbandry-shaped: spawn_rate, tier_classification, bonding-window, tameable, breeding, and the 8 mesh_/generation_ cols (FA-2). Gather-input flora needs a disjoint field set — part, prep, mode, effect, active_compound, poison_class, dose (FL-2/FL-7) — none of which exist on the creature row. Overloading would leave ~30 creature cols null on every flora row AND force husbandry semantics (taming/breeding a plant) onto the discriminator, which the completeness pass would read as schema rot. A purpose-built ~14-col flora schema is the cleaner diff, and the gen_row_struct.py pipeline makes a second USTRUCT free (FL-12) — the precedent that matters is the *pipeline* (one USTRUCT per registry), not the *table*. Ruling: mint T0_Flora_Registry (path A). Consequence: FL-8 amends the deep-read contract to add a flora entity_kind → the new registry (not to Creature_Roster), and the ecology sim (LW-ECO) treats flora nodes and fauna as parallel simulatable classes over their own tables.
---
The gap. The trade MODEL is canon — T1_Trades_Master §9.2 (player-driven economy rests on trade interdependence; scarcity is real because materials are region-specific and require physical presence) + §9.1 (spellcraft and consumables are two separate economies) — but the medium (what the player pays with, how a vendor prices, where L2 treasure sits) is undefined. The slice needs *some* exchange the moment the player has gathered materials + drops with nowhere to spend them.
The options.
HL_0061) placed by RngDropTable + gather-node yield. *Pros:* fits §9.2 regional scarcity + §9.1 two-economies + immersive-teaching (the economy IS a culture lesson); no anachronistic gold-standard; extends cleanly to the Tier-C MMO cross-player economy §9.2 names. *Cons:* more per-region authoring; needs a clean "value" abstraction so cross-region trade resolves.Recommendation direction (per the pack): Opt-1 — historically-real mixed exchange per region, no universal coin early. Land it as: a medium_of_exchange token on Region_Index (region → accepted media), vendor mechanics as a P2.6 inventory-component consumer (barter table + local-medium pricing), and L2 treasure placement = the σ-drop spine (LW-WIRE) + gather yields. This is proposal-tier pending Josh (economy medium is a cardinal-canon surface: it sets a world rule) — brief presented, not applied.
Economy items (EC) the brief spans *(the EC lean-recovery file returned empty — positive-control: tasks/ac6bd01d4145bf2c6.output and …accfbed6289b3e6b5.output both exist-but-empty; economy is grounded from the D-ECONOMY-MEDIUM brief + §9.1/§9.2 + P2.6, NOT re-derived):*
UHumanityInventoryComponent + drop-table pickup (in-plan). Gathered flora/ore/hide + σ-drops land here. BN, W-LW2.medium_of_exchange region token + value abstraction (Opt-1). BRIEF→CA on ruling, gated on Josh.BN+5090, W-LW3, gated on EC-medium.BN, W-LW2.---
The slice is entirely pre-first-trade-home (earliest ancient home is Ch7, Blacksmith+Herbalism, S.India — T1_Trades_Master) — [RESCOPE RE-DERIVE — see §A.0: Ch 7 is inside the ruled PROLOGUE→CH 13 slice, so this sentence's premise is invalidated; the order below re-derives against the ruled scope]; every trade Ch2-5 touches is *substrate seeding*, not a mastery climb. The trades-map recommended structuring/introduction order for the pre-5090 window:
Tailoring > Engineering > Blacksmith > Herbalism > Mining > Inscription — with Alchemy + Culinary DEFERRED (they are consumer trades: Alchemy requires Herbalism botanical inputs, Culinary requires the vril-food substrate-perception unlock — both HL_0082 Apothecary/Atelier compound trades that need their feeder trade structured first).
This order drives which trade rows/gates (TR-2/TR-3/TR-6) and which compound wiring (MN-11 Forge, FL-11 Apothecary) get authored first. It is a build-priority recommendation, not a canon ranking — the 10-trade/12-tier/120-gate numerical canon is untouched (185 abilities, 10 trades, 22 familiar slots all intact; no item mints an nth+1).
---
| Wave | Contents | Runs | Verified-by |
|---|---|---|---|
| W-LW1 — Substrate Authoring (canon-side) | All 11.6.1 rows/registries/repairs (FA-1/4/5/6/7/8, FL-1/2/5/7/8/9, MN-1..12, TR-2/3/6, LW-5/6/7/9/11, AB-5) | Parallel with the trunk NOW; no engine dependency | Each new registry passes normalize-doc critic GO; run_gates.py green with a refreshed fidelity_baseline.json in the same commit; positive-control greps re-run (angkor fauna >0, flores minerals >0, LINK_0186 NOT re-authored, 185/10/22 counts intact); Chakra Thunderbolt literal = 0 in Ability_Tree post-rename |
| W-LW2 — Engine Core (game-side) | FA-2, FL-12, LW-12, LW-WIRE, FA-3, LW-ECO, FL-3, MN-6, TR-1, LW-1/2/3, EC-inventory, EC-treasure | After W-LW1 rows exist + the trunk import (T0.8) lands the tables | PIE smoke: wildlife observable in a region (FA-3 consumes DT_CreatureRoster); a forage/mine round yields within ±1σ across N draws (LW-WIRE, HL_0061); the clock advances day→dusk→night and a Pawukon day resolves (LW-1/3); over-gathering a test zone migrates+regrows, a progression_critical node does NOT (LW-ECO); QA-1 capture + run_gates.py + the WS-10 loop green |
| W-LW3 — Ch3-5 Fold (folds into the region + transitions waves) | FL-4/6/10/11, MN-7, TR-4/5/7, LW-4/8/10, EC-vendor, festival windows (LW-5 runtime) | Per-region, as each of flores(Ch3)/bali(Ch4)/sumatra_java+angkor(Ch5) stages | Each region stages in a captured playthrough with: gather/mine nodes placed by weightmap (FL-4/MN-7 over W4.8), ambient NPCs on a day/night schedule (LW-8), a readable relational-web surface (LW-10), and a live festival/Pawukon window (LW-4/5); the Komodo bite→cure loop (FL-10) completes end-to-end on Flores |
| post-5090 *(note-only, not scheduled)* | FL-13 (Angkor lowland-Cambodia ethnobotany — acquisition obligation, SRC_00322 names 0 plants), FL-14 (deep-read flora pharmacology/compound-curves/dose + ecolinguistic name-decode), TR-8 (corpus-wide trade_expression deep-read), MN deep-read enrich, all generative meshes/atmos/audio skins | After 5090 + book scans | The deep-read enrichment pass over the placeholders authored in W-LW1/2/3; non-destructive (never re-invents the cited cores) |
---
Cross_Cultural_Link_Graph (row 184) — the raw AB-13 "grep=0" was a cannot-match miss; do not re-author (AB-13 belongs to the ability-book WS regardless; noted here only as the phantom-kill). The slice bosses BE_0002..BE_0005 EXIST as canon (16-row Boss_Encounter) — consume. Creature_Roster (132) + RngDropTable both EXIST (the latter empty, not missing).HL_0028/reveal-timing (no name/description of a below-tier or late-arc ability surfaces early).N8.6 (T0_Familiar_Registry 22 rows carry CH_02-05 bonding windows: Shell→Kira→Khan across flores/bali/sumatra — the slice's live familiar arc); integrity-path + reputation play surface → N8.4/P2.9 over T0_Reputation_Ladder (companion-loyalty + assimilation choice are slice canon); language/script in-world surface → Q3.7 InscriptionDecoder over T0_Language_Script_Registry (84 rows). The living-world persona/relational-web tier (LW-9/LW-10) is the shared read these consume.---
RECONCILED (Vol2): RE.5 cite corrected — HL_0003 only (HL_0032 dropped; it is the 12-side-questline lock, cite C1). RX.1 owns the Ch-4 era-swap chapter mechanic (folds LW-4); its deps now explicitly include LW-3 + LW-12 + the LW-4 fold (cohere H5). RX.3 → cross-ref to PG-1/PG-6 (the ws3_prog cross-map backbone is the single owner; RX.3 is the regions-side verified-by, cohere H1). The 9 RB.1 bbox fills are authored in LANE-CANON.
Ch 2 is the built reference: FloresIsland.umap imported (W4.1, wave D) + dressed + CH_02 staged, BE_0002 StateTree compiled. This section rolls that ONE proven pipeline across the rest of the slice — CH_03 → flores_island (terrain ALREADY BUILT), CH_04 → bali, CH_05 → sumatra_java + angkor_khmer (excursion) — by generalizing three flores-hardcoded drivers, running the deterministic GIS chain against the three un-built regions, filling 9 cited zone bboxes, and CONSUMING the 16 already-authored slice boss rows (BE_0002..BE_0005 in T0_Boss_Encounter_Registry, verified — never re-author). Nothing here needs a generative model: DEM/GDAL fetch, Landscape import, weightmap paint, StateTree build, and data staging are all deterministic. The long poles are the three terrain builds (bali · sumatra_java · angkor_khmer) — network-bound GIS fetches that parallelize, gating only the STAGING of their maps, not each other and not the CH_03 work.
Density register (Josh's curve): Ch 2-5 = early-game, deliberately lighter, seed-rich. The per-chapter budget the rollout stages is the OPENING band — ~7-9 sites, 12 beats, 4-5 encounters, 1-2 forks each — not the completionist density of mid/late game. The rollout builds the STRUCTURE at max honest pre-5090 polish (greybox geometry, real geo-placement, real StateTrees, real forks); the deep-read weave/culture/side-quest enrichment and all generated finish (VFX/SFX/music/MetaHuman) ride the post-5090 pass.
Saved/Terrain/)| chapter | region_id(s) | map(s) needed | terrain state | sites | bbox-ready | slice bosses (consumed) | fork(s) |
|---|---|---|---|---|---|---|---|
| CH_03 | flores_island | FloresIsland.umap (BUILT) | built (reuse) | 7 | 2/7 → 7/7 after 5 fills | BE_0003 + S1/S2/S3 | FORK_CH03_A (B11) |
| CH_04 | bali | Bali.umap (NEW) | not built — long pole #1 | 7 | 5/7 → 7/7 after 2 fills | BE_0004 (3-phase) + S1/S2/S3 | FORK_CH04_A (B09) |
| CH_05 | sumatra_java (anchor) + angkor_khmer (excursion) | SumatraJava.umap + AngkorKhmer.umap (NEW ×2) | not built — long poles #2, #3 | 9 (4+5) | 7/9 → 9/9 after 2 fills | BE_0005 + S1/S2/S3/S4 | FORK_CH05_A (B09) · FORK_CH05_B (B11, integrity-gated LETHAL) |
Positive controls (re-verified this pass, both repos read-only): Saved/Terrain/ holds only flores_island_* → bali/sumatra_java/angkor_khmer confirmed un-built. The 9 empty zone_bounds_wgs84 cells read directly from build/zones/{slug}.csv (flores CH_03: compang_lingko_fields, wae_water_spring, mama_klaras_waterfall, todo_royal_village, lingko_forest_edge; bali: village_balian_ward, wayang_performance_ground; angkor_khmer: kra_traverse, bayon_taprohm). T0_Boss_Encounter_Registry has exactly 16 rows CH_02-05 (BE_0002 ×3, BE_0003 ×4, BE_0004 ×4, BE_0005 ×5) — the slice bosses EXIST as canon.
---
The terrain-derive (derive_region_bbox.py --slug) and GIS-fetch (terrain_fetch_preprocess.py --params) drivers are ALREADY region-agnostic (verified: both take a slug/params, derive FAILS LOUD on zero anchored zones). The StateTree builder (build_boss_statetree.py --boss) is ALREADY boss-parameterized. The three that hard-code flores_island/FloresIsland/CH_02/BE_0002 are the import, dress, and stage drivers — generalize each to --slug/--chapter, deriving the boss(es) from DT_BossEncounter by chapter_id, and every terrain number from Saved/Terrain/<slug>_terrain_meta.json (the single-source-of-truth pattern is already in-code).
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| RG.1 | import_region_landscape.py — generalize import_flores_landscape.py to --slug <region> (map name /Game/Maps/<PascalRegion>, all numbers from <slug>_terrain_meta.json; idempotent reload + sky rig + PlayerStart + spectator GameMode preserved) | Tools/import_flores_landscape.py (flores-hardcoded, verified — flores_island/FloresIsland literals); the W4.1 shim UHumanityLandscapeImporter is region-agnostic C++ (game a591e03) | BUILD-NOW | W4.1 (DONE) | J |
| RG.2 | dress_region_map.py — generalize dress_flores_map.py (--slug; sea-level Z derived from the same meta transform per region; ocean plane + raking sun; --sealevel-m honest-frame nudge kept) | Tools/dress_flores_map.py (flores-hardcoded, verified) | BUILD-NOW | RG.1 | J |
| RG.3 | stage_region_chapter.py — generalize stage_flores_ch02.py to --slug --chapter CH_NN (site markers from the region's Zone Catalog zone_bounds_wgs84; PlayerStart at the opening site; boss(es) resolved from DT_BossEncounter where chapter_id==CH_NN; empty-bbox sites FLAGGED never guessed, per the recharge_waterfall/manggarai_village_edge lesson) | Tools/stage_flores_ch02.py (CH_02/BE_0002-hardcoded, verified; the UTM→world-cm transform + AHumanitySiteMarker binding are region-agnostic) | BUILD-NOW | RG.1, RG.2 | J |
Verified-by: run all three against --slug flores_island --chapter CH_02 and assert byte-identical placement to the built FloresIsland.umap (the generalization must reproduce the reference exactly before any new region runs). QA capture leg reused (-HumanityTerrainShot=), image-critic on the frame.
---
apply_zone_catalog_columns.py, all-or-nothing, --emit-baseline same commit)*Fill the 9 empty zone_bounds_wgs84 cells so the staging step resolves 7/7 · 7/7 · 9/9. This is canon-side execution (region geometry within the locked structure — apply and show the path, no Josh flag): real named places get a gazetteer geo-citation; composite/named-in-canon sites get a placement sub-box within a cited real locus, explicitly flagged. Landed via the T0.1 single-writer as one rider per region page + its registry mirror; refresh fidelity_baseline.json in the SAME commit (the standing baseline-shift rule).
| id | fill | citation basis (cited-or-placement) | care | wave |
|---|---|---|---|---|
| RB.1a | flores compang_lingko_fields | GEO — the Cancar/Ruteng spider-web *lingko* fields, real Manggarai locus (CH_03.md L8, L28) | standard | J |
| RB.1b | flores todo_royal_village | GEO — Todo traditional royal village, Satar Mese, Manggarai (CH_03.md L8, L85; protected living heritage referenced-not-reproduced) | standard (protected site) | J |
| RB.1c | flores wae_water_spring | PLACEMENT within the cited Wae Rebo water-source locus (CH_03.md L28 "Wae water-source spring") | standard | J |
| RB.1d | flores mama_klaras_waterfall | PLACEMENT within the cited Manggarai waterfall locus (CH_03.md L8 "Mama Klara's waterfall") | standard | J |
| RB.1e | flores lingko_forest_edge | PLACEMENT adjacent to RB.1a (the montane forest-edge clearing line; CH_03.md L88) | standard | J |
| RB.1f | bali village_balian_ward | PLACEMENT within the cited Ubud-area village cluster (CH_04.md sites L86-99; the *balian* ward) | standard | K |
| RB.1g | bali wayang_performance_ground | PLACEMENT within the cited village cluster — MAIN-boss site, hosts 5 beats (CH_04.md; BE_0004 ground) | standard | K |
| RB.1h | angkor kra_traverse | GEO — the Kra Isthmus portage corridor, real (CH_05.md L15 "portages the Kra Isthmus"; hosts no primary beat — traversal/dialogue) | standard | L |
| RB.1i | angkor bayon_taprohm | GEO — the Bayon + Ta Prohm temples, Angkor Thom, real adjacent (CH_05.md L100; hosts B08 assimilation beat) | standard (Khmer stays standard; ELEVATED is scoped only to west_baray/myson_champa per CH_05.md L12) | L |
Absence-proof discipline: RB.1c/d/e/f/g are placements (no canonical point exists) → each ships flagged in TODO_CANON with the cited real locus it sits inside, exactly as CH_02's two un-bbox'd sites were flagged. Verified-by: check_region_page.py + a re-run of stage_region_chapter.py resolving 7/7 · 7/7 · 9/9; the fidelity gate "FAIL set" grows by exactly these 9 cells + baseline refresh.
---
Each region terrain derives its region_bbox from the FILLED zones alone (union + pad) — so the un-built regions build even with empty zones (bali 5/7, sumatra_java 4/4, angkor_khmer 3/5 all derive clean, verified). The bbox fills (J.2) gate STAGING of those specific sites, NOT the terrain build. All three GIS fetches can run concurrently the moment RG.1-3 land — they are network/CPU-bound, no GPU, no cross-dependency.
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| RT.1 | bali chain: derive_region_bbox --slug bali → terrain_fetch_preprocess --params (COP30 DEM, absolute-height, WorldCover weightmaps) → import_region_landscape --slug bali → dress_region_map --slug bali → Bali.umap | build/zones/bali.csv (5/7 bbox'd, verified); no Saved/Terrain/bali_* (absence-proof: un-built); region page _source/02_Tier_2_Region_Pages/bali.md; CH_04.md L8 (Besakih/Tirta Empul/Jatiluwih/Sanur/Uluwatu) | BUILD-NOW | RG.1-3, W4.3 | K (long pole #1) |
| RT.2 | sumatra_java chain (anchor): same 5-step → SumatraJava.umap (borobudur, palembang_port, samosir_highlands, merapi_slopes) | build/zones/sumatra_java.csv (4/4 bbox'd, verified — cleanest derive); no Saved/Terrain/sumatra_java_*; CH_05.md L8 | BUILD-NOW | RG.1-3, W4.3 | L (long pole #2) |
| RT.3 | angkor_khmer chain (excursion 2nd map): same 5-step → AngkorKhmer.umap (angkor_wat, west_baray, myson_champa derive the bbox; kra_traverse + bayon_taprohm fill in) | build/zones/angkor_khmer.csv (3/5 bbox'd, union derives, verified); no Saved/Terrain/angkor_khmer_*; CH_05.md L9 (first-class page under the anchor) | BUILD-NOW | RG.1-3, W4.3, RB.1h/i | L (long pole #3) |
Verified-by (per region): derive_region_bbox emits a clean region_bbox (fails loud if not); terrain_fetch_preprocess emits absolute-metre heightmap + 7 WorldCover weightmaps at valid vertex size; import_region_landscape read-back asserts component count = ⌈X/quad⌉×⌈Y/quad⌉ and bounds match the meta JSON (the FloresIsland 132-component round-trip pattern); a dressed-coastline capture goes to Josh (frame-claim honesty: numbers stay honest, the sea/rake fix makes the frame TRUE before it ships). W4.3 hardening (absolute-metre encoding + void-fill fallback) is a hard prerequisite — un-hardened it manufactures false craters/tile-seams across the multi-tile SEA regions.
---
W4.8 (weightmap-driven auto-material + PCG biome binding) does NOT yet exist in the game repo (absence-proof: no M_Landscape_Auto, no weightmap-paint driver — the 7 flores WorldCover maps are imported as LayerInfo DATA only, per the 2026-07-24c ledger; the paint pass is flagged residue). Generalize it once, apply per region as each terrain lands.
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| RM.1 | bake_region_material.py + M_Landscape_Auto (layer-blend keyed on WorldCover weightmaps; worldcover_biome from the Zone Catalog routes the template; explicit fallback so an unseen biome never silently no-ops) | W4.8 (plan §6, BUILD-NOW, unbuilt); worldcover_biome column present in all 4 build/zones/*.csv (verified) | BUILD-NOW | W4.1 (DONE) | F′ |
| RM.2 | Apply RM.1 per region (flores residue first, then bali/sumatra_java/angkor_khmer as each *.umap lands) — paints grass/forest/crop/water/wetland/bare-rock/urban from the pixel-aligned weightmaps | flores 7 weightmaps built (Saved/Terrain/flores_island_wc_*.png, verified); bali/sumatra_java/angkor_khmer weightmaps emitted by RT.1-3 | BUILD-NOW | RM.1, RT.1-3 | F′ (rides each region) |
Verified-by: a lit oblique capture per region shows painted biomes (not a grey/white slab), image-critic PASS; weightmaps confirmed pixel-aligned to the elevation grid (the W4.5 same-AOI resample). PCG population + Nanite/HLOD batch bake is the 5090-gated tail; the material/paint harness is not.
---
Staging = stage_region_chapter.py places site markers + PlayerStart + boss(es); encounters = build_boss_statetree.py --boss <id> per slice boss (an EXISTING parameterized tool — the roster is consumed, not authored). The new work is the win-condition verb BEHAVIORS beyond DODGE/STRIKE (the care-doctrine appease/balance/endure seams), shared with C1.6 (ability set) + C1.13 (environmental-boss protocol) + the HP-0 defeat-axis ruling (open in TODO_CANON, blocks presentation polish but not the greybox StateTree).
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| RS.3 | CH_03 staging on the built flores map: 7/7 site markers (2 built + 5 after RB.1a-e), PlayerStart, BE_0003 at todo_royal_village | CH_03.md L77-90 (7 sites); flores terrain BUILT | BUILD-NOW | RG.3, RB.1a-e | J |
| RE.3 | CH_03 encounters (consume): BE_0003 (2-phase, PARRY/EXPOSE, axis 45/30/25) + S1 Naga Tana (ATTUNE/PERCEIVE) + S2 Poka Puar (DISARM/RESCUE) + S3 Twisted-Word (DECODE/EXPOSE) — StateTrees built via the parameterized builder; NEW verbs ATTUNE/PERCEIVE/DISARM/RESCUE/DECODE = appease-not-slay behaviors to build | T0_Boss_Encounter_Registry BE_0003/_S1/_S2/_S3 (verified: verbs parry/expose, attune/perceive, disarm/rescue, decode/expose; win PACIFY;EXPOSE / PURGE / REDUCE;FREE / PERCEIVE;REFUTE;EXPOSE); HL_0003 (combat routes through the broker's bought champion, never the Manggarai) | BUILD-NOW | build_boss_statetree.py (DONE), C1.6, C1.13 | J / G-fold |
| RS.4 | CH_04 staging on Bali.umap: 7/7 (5 built + 2 after RB.1f/g), PlayerStart, BE_0004 at wayang_performance_ground (the 5-beat main-boss site) | CH_04.md L86-99 (7 sites); RT.1 map | BUILD-NOW | RG.3, RT.1, RB.1f/g | K |
| RE.4 | CH_04 encounters (consume): BE_0004 first 3-phase (PERCEIVE/STRIKE, 30/45/25) + S1 Gate-Naga (EVADE/ATTUNE) + S2 Night-Leyak (BANISH/PERCEIVE) + S3 Barong-Rangda (BALANCE/READ) — NEW: vril_management resource-budget combat + BALANCE dynamic-equilibrium ritual + BANISH; 3-phase graph is UNVERIFIED past 2 (the builder scaffolds N-phase from the table; first real 3-phase — verify explicitly) | T0_Boss_Encounter_Registry BE_0004/_S1/_S2/_S3 (verified: 3 phases, verbs perceive/strike, evade/attune, banish/perceive, balance/read); HL_0003/HL_0005 (route through the leyak/bhuta-kala/certification apparatus, never the Balinese community; leyak/Rangda depicted as the tradition holds them) | BUILD-NOW | build_boss_statetree.py (DONE), C1.6, C1.13 | K / G-fold |
| RS.5a | CH_05 anchor staging on SumatraJava.umap: 4 anchor sites (borobudur, palembang_port, samosir_highlands, merapi_slopes), PlayerStart, BE_0005 | CH_05.md L90-107; RT.2 map | BUILD-NOW | RG.3, RT.2 | L |
| RS.5b | CH_05 excursion staging on AngkorKhmer.umap: 5 sites (angkor_wat, west_baray, bayon_taprohm, myson_champa, kra_traverse); west_baray + myson_champa carry ELEVATED care (Cham/war surfaces) | CH_05.md L96-104, L12 (ELEVATED scoped to west_baray combat-staging + myson_champa sanctuary; Cham-source grounding obligation) | BUILD-NOW (greybox) / final content GATED-SCAN (CG-29 Champa/Cham) | RG.3, RT.3, RB.1h/i | L |
| RE.5 | CH_05 encounters (consume): BE_0005 (2-phase, STRIKE/DECODE) + S1 Broker Chelvan (DECODE/PURSUE info-midboss) + S2 Borobudur Gate-Guard (EVADE/ATTUNE) + S3 Naga Padoha (ENDURE/BIND hold-not-win) + S4 devaraja-official (EXPOSE/OUTMANEUVER, at west_baray river-war set-piece B09); NEW: ENDURE/BIND, EXPOSE/OUTMANEUVER, two-peer river-war backdrop | T0_Boss_Encounter_Registry BE_0005/_S1/_S2/_S3/_S4 (verified: verbs strike/decode, decode/pursue, evade/attune, endure/bind, expose/outmaneuver); HL_0003 (route through the datu/broker/official + begu ganjang/Naga Padoha/constructs, never the Batak/Khmer/Cham) | BUILD-NOW | build_boss_statetree.py (DONE), C1.6, C1.13 | L / G-fold |
---
| id | item | canon citation / absence-proof | tag | depends | wave |
|---|---|---|---|---|---|
| RX.1 | Ch-4 Pawukon / time-fluctuation window mechanic — a runtime that swaps the level's era-stratum (present ~1200 CE Warmadewa ↔ the reached-forward Majapahit-absorption stratum) within the ONE Bali map, keyed on a beat/Pawukon-clock trigger; NOT free time travel, a ruled beat window | CH_04.md L9/L11 (Majapahit stratum reached across time-fluctuation windows; never the present frame), L59 (the 210-day Pawukon calendar, documented Balinese knowledge-system); ChapterIndexRow.h:27 time_fluctuation_range is a DATA field with no runtime (absence-proof, verified) | BUILD-NOW | Q3.3 (DONE), WorldState (DONE) | K |
| RX.2 | Ch-5 excursion structure — the there-and-back SECONDARY loop: anchor (SumatraJava) → ruled ground/water travel beat → excursion (AngkorKhmer) → double back; anchor's resolved beats never re-opened; kra_traverse = the portage transition corridor | CH_05.md L9 (there-and-back secondary excursion under the anchor per EXPANDED_COVERAGE_MAP A1), L15 (continuous ground-and-water only — Malacca→Kra portage→Gulf→Tonle Sap→My Son→double back); NOT free cross-region travel (Vimana-gated Ch 55, WGM §7) | BUILD-NOW | RT.2, RT.3, RX.3 | L |
| RX.3 | Cross-map transitions + save/load backbone + chapter-select flow harness — carry the baked-42 ws.* across a level change + travel-between-maps (identity_hiding_status, familiar_bond_state Shell→+Kira→+Khan, community_state_per_region manggarai→bali→batak, integrity_score/path_bucket, journal_status, age_stage); a boot menu + chapter entry to run CH_02→05 end-to-end | slice_map cross-cutting seam (verified: UWorldStateSubsystem exists but cross-map carry is unbuilt — absence-proof); all ws.* writes ∈ the baked 42 (grep-verified, no new var); this is the backbone of the "cross-chapter progression" target | BUILD-NOW | P2.7 (DONE+EXTEND), Q3.3 (DONE) | M |
Verified-by (RX.3): a scripted CH_02→CH_03→CH_04→CH_05 walk asserts every handoff key survives the level change (Shell bonded at Ch3-in, +Kira at Ch4, +Khan at Ch5; community marks accumulate; integrity band carries; octopus/Sanur familiar stays deferred/gated). RX.1 verified-by: the stratum swap is reversible and writes no new ws var. RX.2 verified-by: the excursion doubles back to the anchor with the anchor's beat-state intact (no re-open); FORK_CH05_A/B resolve on the anchor return (integrity-gated lethal route offered on the two corrupt operatives ONLY — datu + court official — never the communities, per CH_05.md L276).
---
The rollout parallelizes hard: the generalization pass + data fills land day-1, the three GIS fetches kick off immediately after and run concurrently in the background (network-bound), and CH_03 (built map) completes end-to-end while bali/sumatra_java/angkor_khmer terrain bakes.
| wave | scope | items | long pole | verified-by |
|---|---|---|---|---|
| J (week 1) | Region-generalize + data-fill + CH_03 full (built-map validation) | RG.1-3, RB.1a-e, RS.3, RE.3, RM.1 | none (flores built) | drivers reproduce FloresIsland byte-identical; CH_03 stages 7/7 + BE_0003 ×4 StateTrees; playable arrival→caci→boss on the real island |
| F′ (rolling) | W4.8 material generalize + per-region apply | RM.1, RM.2 | rides each terrain | lit biome capture per region, image-critic PASS |
| K (week 2) | CH_04 / bali | RT.1, RB.1f/g, RS.4, RE.4, RX.1 | bali terrain (#1) | Bali.umap round-trip; 7/7 staged; BE_0004 3-phase verified (first past 2); Pawukon stratum swap reversible |
| L (week 2-3) | CH_05 / sumatra_java + angkor_khmer + excursion | RT.2, RT.3, RB.1h/i, RS.5a, RS.5b, RE.5, RX.2 | two terrains (#2,#3) — parallel to K | both umaps round-trip; 9/9 staged; BE_0005 ×5; excursion doubles back intact; ELEVATED sites greybox-only (final GATED-SCAN) |
| M (week 3) | Transitions backbone + chapter-select harness | RX.3 | none (code) | scripted CH_02→05 walk carries every ws.* key across 4 maps; boot menu runs the slice end-to-end |
Long-pole note: the three terrain builds are the schedule spine, but they are network/CPU-bound deterministic fetches that overlap fully — start all three the moment J's RG.1-3 land; K and L are gated on their terrain finishing, not on each other. The AI QA loop (WS-10) wraps every wave: capture → image-critic → functional/regression → the repro-first bug ledger; Josh's feel-pass is the slice playthrough, never bug-finding.
Care/reveal riders carried forward (already in the spine, verified — the rollout must not leak them): no House-of-Velheim name/family/pattern player-facing across CH_03/04/05 (the family first appears Ch 8; the datu's FAMILY_BRIEFED awareness reads only as unnamed unease); all perception at the Neophyte register (inscription/reverence/lore tells, never a tier-6 vril read — HL_0028); the Khmer Rouge modern trauma held OUT of the ~1200 CE era (standing high-care flag, never spectacle); the CH_05 lethal fork falls only on the two corrupt operatives.
---
RECONCILED (Vol2): ws56_av is the SINGLE home for CN-1..CN-9 (ws3_prog references) and for AU-10 (ws1_feel references). The audio spine AU-8→AU-1→AU-2 rides master W2 FEEL (early), not W7 — so W2 hit-confirm audio (AU-10) has its spine (cohere H2). CN-1..8 are the master W7 SLICE-PRESENTATION wave; CN-9 parked (Josh #22). AU-13 correctly cites the SFX registry at 12 rows.
Dive-1's AU/CN maps found the same shape twice: **the channels + data are built, the feel + the
consumer are not.** SFX ride 3 hardcoded PlaySoundAtLocation calls that bypass the C1.16 cue
channel entirely; the island is silent; DT_SceneAnchor's 439 imported rows have zero consumer
andBuild.cscarries noLevelSequence/MovieScene/MetaSounddeps. WS-6 §8 (A6.1–A6.8) and
WS-5 §7 (CN5.1–CN5.9) scoped the *generation* pipeline; this block adds the greybox-tier runtime
that plays a scene and makes a hit audible NOW — the part Josh's Ch2-5 slice needs before any 5090
asset exists. TAG LAW (binding critic correction): only generative *inference* is 5090-gated —
the MetaSound graphs, the SoundClass mix, the scene-presentation subsystem, letterbox, cine-camera,
footstep-by-surface routing are all deterministic BUILD-NOW; only the final generated
WAV/VO/Niagara *asset* drops in later. Every +5090-final below gates the asset, never the seam.
Care: cinematic + audio honorhard_line_relevance/reveal: HELD(the Ch2 polo is a materialized
superstition, never a dukun; no Grand-Sage/Cassius thematic leak in any cue or scene) [SRC:
T99_Translation_Cinematic §2.4, Step 1; T99_Translation_Audio §2.7; HL_0046 gate #25 grand_sage_silence].
Item-ids carry the dive prefix (AU-/CN-); the Fold column names the §8/§7 plan item each expands
(never a net-new duplicate) or marks NEW. +DA = generated-asset drop-in is GATED-5090; the runtime is BUILD-NOW.
---
The whole lane hangs off one routing decision: today cue→sound is two disconnected paths (the
C1.16 GameplayCue channel fires notify-stubs while placeholder SFX play in PARALLEL via hardcoded
calls — dive AU-2). AU-1 + AU-2 + AU-8 are the spine: build the subsystem, register the cue
manager, link the module. Every other AU item routes through them.
| ID | Item | Fold | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|---|
| AU-8 | Link MetaSound/MetaSoundEngine/AudioMixer/Quartz C++ modules in Humanity.Build.cs — the unstated prerequisite under A6.5. | A6.5 (prereq) | ABSENCE: Humanity.Build.cs links only GAS/StateTree/Input/ImageCore, zero MetaSound/AudioMixer/Quartz (dive AU-8, positive-controlled). Needed by A6.5 MetaSounds/Quartz [SRC: §8 A6.5; T99_Translation_Audio §2.2]. | BUILD-NOW | — | FEEL (audio spine) |
| AU-1 | UHumanityAudioSubsystem — the single owner of playback/mix/routing; every SFX/ambient/music call goes through it, not PlaySoundAtLocation. Elevated to first audio move. | A6.8 (expand→spine) | §8 A6.8 UHumanityAudioSubsystem = BUILD-NOW; ABSENCE: no such class in Source, SFX via 3 hardcoded PlaySoundAtLocation (DamageExecCalc.cpp:68) (dive AU-1). Owner for §2.2 SoundFactory + MetaSounds seam [SRC: §8 A6.8; T99_Translation_Audio §2.2]. | BUILD-NOW | AU-8 | FEEL (audio spine) |
| AU-2 | Register UHumanityGameplayCueManager in DefaultGame.ini + collapse the parallel SFX path into the cue channel — defect fix (cues currently bypass the channel). | NEW (fixes C1.16) | §3 C1.16 GameplayCue channel is DONE-as-channel; ABSENCE: UHumanityGameplayCueManager exists but 0 hits in DefaultGame.ini; DamageExecCalc.cpp:64 SFX "ride events until the global cue manager is wired" (dive AU-2) [SRC: §3 C1.16; §8 A6.8]. | BUILD-NOW | AU-1 | FEEL (audio spine) |
| AU-3 | Footstep-by-surface + jump/land/dodge/roll foley runtime; PhysMat→footfall_surface map, placeholder cues per surface. | A6.5 (expand) | §8 A6.5 per-zone footfall from Zone-Catalog footfall_surface (T0.2 column present); ABSENCE: no footstep/foley code or PhysMat map, Content/Audio 0 movement cues (dive AU-3) [SRC: §8 A6.5; §2 T0.2; T99_Translation_Audio SFX Step 1 (footstep reads terrain), Step 5]. | BUILD-NOW +DA | AU-1, AU-8 | FEEL |
| AU-9 | Per-mode/weapon/ability SFX selector — route a cue by combat-mode / weapon_class / ability cast_pattern off the §10.6 sfx_id_ref arrays, not 4 shared cues. | A6.2 (expand) | §8 A6.2 per-registry sfx_id_ref arrays (weapon/ability/…); ABSENCE: 4 cues reused across 8 modes/185 abilities/72 weapons, no selector (dive AU-9). Wires per SFX Step 6 array discipline [SRC: §8 A6.2; T99_Translation_Audio SFX Step 6 §10.6]. | BUILD-NOW +DA | AU-1, AU-13, A6.2 | FEEL |
| AU-10 | Hit-confirmation audio taxonomy — hit/block/miss/whiff/crit + Composure-break sting differentiation (Josh's named "how the player KNOWS it landed"). | NEW (audio half of CF-1/CF-6) | ABSENCE: DamageExecCalc plays ONE generic impact cue, no block/miss/crit taxonomy (dive AU-10); pairs the deterministic hit-stop/flash feel layer [SRC: T99_Translation_Audio SFX Step 5; §3 C1.16]. | BUILD-NOW +DA | AU-1, AU-2 | FEEL |
| AU-4 | Silent-island fix — per-biome ambient bed slot on Flores (wind/ocean/jungle loops), ambient-playback slot driven by region_environmental_ambient_sfx_id_ref_array. | A6.8 + A6.1 (expand) | §8 A6.8 ambient bed slot / A6.1 Section-10 cue table; ABSENCE: Content/Audio = 4 combat cues + door only, ambient array declared unpopulated, island silent (dive AU-4) [SRC: §8 A6.1, A6.8; T99_Translation_Audio SFX Step 1 (environmental reads biome + Vril-Site + Section 17)]. | BUILD-NOW +DA | AU-1 | SLICE-PRESENTATION (AV) |
| AU-5 | Music runtime framework — playback slot + combat↔exploration STATE machine + adaptive-graph seam; generation stays 5090-gated, the runtime seam is BUILD-NOW. | A6.8 + A6.5 (expand) | §8 A6.8 music-playback slot / A6.5 Music-STATE cue routing (ungated); §0 gates only generation; ABSENCE: no music asset/slot/state-machine in Source (dive AU-5) [SRC: §0 gating; §8 A6.5, A6.8; T99_Translation_Audio Music Step 5 (SoundFactory import), Step 6 (MetaSound/Quartz)]. | BUILD-NOW +DA | AU-1, AU-8 | SLICE-PRESENTATION (AV) |
| AU-7 | 3D/spatial audio config — author a SoundAttenuation asset + consume FSfxRegistryRow.spatial_attenuation; positional falloff on every cue. | NEW (wires A6.3 struct) | §8 A6.3 FSFXRegistryRow DONE; ABSENCE: no SoundAttenuation asset, PlaySoundAtLocation called with no attenuation arg (DamageExecCalc.cpp:70), spatial_attenuation column unread (dive AU-7) [SRC: §8 A6.3; T99_Translation_Audio §2.2]. | BUILD-NOW | AU-1 | SLICE-PRESENTATION (AV) |
| AU-6 | Audio settings/mix — SoundClass/SoundMix hierarchy (Master/Music/SFX/Voice/Ambience) + volume sliders + GameUserSettings persistence. Shipping-RPG UX hole absent from §8. | NEW | ABSENCE: no SoundClass/SoundMix in Content, no audio keys in DefaultEngine.ini, no settings UI (dive AU-6); sibling of §12 #26 UX-spec gap [SRC: §12 #26; T99_Translation_Audio §2.2]. | BUILD-NOW | AU-1 | UI |
| AU-11 | UI SFX — MetaSounds procedural select/confirm/quest-update/fork-commit/objective-complete cues for the landed quest-panel + fork UI (game 303e9f2, shipped with zero audio). | NEW (SFX Step 5) | ABSENCE: quest/fork UI landed with no audio, no UI/menu SFX in Content/Audio (dive AU-11); §8 A6.5 procedural UI SFX unbuilt [SRC: §8 A6.5; T99_Translation_Audio SFX Step 5 (MetaSounds procedural UI/footstep)]. | BUILD-NOW +DA | AU-8 | UI |
| AU-12 | Tools/import_audio_assets.py — manifest-driven, format-agnostic SoundFactory importer (the solved-seam bring-in for Sonniss/generated banks at scale). | A6.4 (build) | §8 A6.4 import_audio_assets.py = BUILD-NOW; ABSENCE: absent from Tools/ (only generate_sfx.py/gen_placeholder_sfx.py) — 4 placeholders imported ad-hoc (dive AU-12). Same import_asset_tasks pattern as mesh [SRC: §8 A6.4; T99_Translation_Audio §2.2, Music Step 5]. | BUILD-NOW | — | UI |
| AU-13 | SFX coverage-map artifact + Ch2-5 registry population — which entity/event needs which placeholder cue; fills the empty per-entity sfx_id_ref arrays. | A6.2 (author) | §8 A6.2 arrays; ABSENCE: T0_SFX_Registry=12 rows, arrays on 10 registries declared unpopulated, no coverage-map doc (dive AU-13) [SRC: §8 A6.2; T99_Translation_Audio SFX Step 1 (bank plan per region/biome/creature)]. | BUILD-NOW +DA | A6.2 | UI |
| AU-S | Sonniss #GameAudioGDC bundle download → SEGREGATED owned-only tree (no-AI-train wall) — Josh-download, zero compute. | A6.7 (execute) | §8 A6.7 Sonniss (FREE, acquire now); ROYALTY-FREE-OWNED, ships; feeds AU-12 import [SRC: §8 A6.7; §12 #16; T99_Translation_Audio §2.1 (license table), SFX Step 2 (licensed-first), §4 spike 11 (no-AI-train clause)]. | BUILD-NOW (acquire) | — | ACQUIRE (anytime) |
---
WS-5 §7 (CN5.1–CN5.9) is the FULL generative Sequencer/MetaHuman/MRQ/dispatch pipeline. Josh's slice
wants the greybox tier: play a scene by scene_anchor_id, cut a camera, frame a dialogue box,
render the Ch2 fork AS a scene, letterbox, skip. Dive-1's recommendation stands: build a
runtime presentation subsystem, NOT full LevelSequence assets — the 439 DT_SceneAnchor rows
become playable now; the MRQ/MetaHuman half parks on the 5090. CN-1 is the spine every other CN hangs
off. T99_Translation_Cinematic is the authority for the eventual full pipeline; these items are its
platform-runtime *greybox* realization.
| ID | Item | Fold | Canon citation / absence-proof | Tag | Depends | Wave | |
|---|---|---|---|---|---|---|---|
| CN-1 | UScenePresentationSubsystem — plays a scene by scene_anchor_id over the 439 DT_SceneAnchor rows (greybox: camera + timed beats, no LevelSequence asset) + add LevelSequence/MovieScene module deps to Build.cs. The consumer that doesn't exist. | CN5.3 + CN5.6 (greybox realization) | §7 CN5.3/CN5.6; DT_SceneAnchor = 439 imported rows (canon layer in-engine, ledger 2026-07-23c); ABSENCE: `grep LevelSequence\ | SceneAnchor Source/Humanity/Private = 0, Build.cs:14-30` no LevelSequence (dive CN-1) [SRC: §7 CN5.3, CN5.6; T99_Translation_Cinematic Step 4 (assembly), Step 6 (trigger); SPINE_SCHEMA_v3 §3d (7-col scene row)]. | BUILD-NOW | AU-1 (audio slot) | SLICE-PRESENTATION (AV) |
| CN-2 | UQuestSubsystem OnBeatEntered/OnBeatCompleted delegates — the beat→scene trigger CN5.6 needs; presentation binds by beat_ref. | NEW (unblocks CN5.6) | §7 CN5.6 "quest beat entry/exit"; ABSENCE: QuestSubsystem.h has no scene/beat delegate, AdvanceBeat writes telemetry only (dive CN-2); Q3.3 runtime DONE [SRC: §7 CN5.6; §5 Q3.3; T99_Translation_Cinematic Step 6 (beat entry/exit trigger)]. | BUILD-NOW | Q3.3 (DONE) | SLICE-PRESENTATION (AV) | |
| CN-3 | Fork-as-scene (Josh's named gap) — give FORK_CH02_A a framed scene; author the missing CH02_B09 scene_anchor row (its beat has none). | NEW (+ author 1 row) | ABSENCE: HumanityDebugHUD.cpp:249-263 draws "FORK.. press 1/2/3" text; forks.csv FORK_CH02_A anchor CH02_B09, but scenes.csv has NO B09 row (dive CN-3). Care: honor reveal: HELD [SRC: §5 Q3.4 (fork dispatcher); T99_Translation_Cinematic Step 5 (path-conditional), Step 1 (hard_line_relevance); SPINE_SCHEMA_v3 §3d]. | BUILD-NOW +DA | CN-1, CN-2, Q3.4 | SLICE-PRESENTATION (AV) | |
| CN-4 | Dialogue scene presentation — camera-on-speaker + subtitle box + advance input; per-line text via String Table. VO gen stays 5090-gated. | NEW | CH_02 SC_CH02_polos_offer (anchor_type: dialogue_initiation); ABSENCE: no DialogueLineRow.h in game Source, per-line text substrate unbuilt (dive CN-4) [SRC: T99_Translation_Cinematic Step 2 (participant/audio-driven facial), §2.5 (FText subtitle law); §4 P2.5 String Tables; §13 VO gen GATED]. | BUILD-NOW +DA(VO) | CN-1, CN-8, P2.5 | SLICE-PRESENTATION (AV) | |
| CN-5 | Letterbox / cine-mode — suppress the combat HUD, draw bars, switch to a cine ViewTarget on scene entry; restore on exit. | NEW | ABSENCE: `grep Letterbox\ | CineMode Source = 0; HumanityDebugHUD.cpp:116-373` unconditionally draws combat/quest panels (dive CN-5) [SRC: T99_Translation_Cinematic Step 6 (realtime trigger); §11.5 QA (HUD-state capture)]. | BUILD-NOW | CN-1 | SLICE-PRESENTATION (AV) |
| CN-6 | Skippability + idempotence — hold-to-skip input + a seen-scene ledger on the SaveGame so a scene never re-fires per playthrough; optional replay. | NEW | ABSENCE: HumanityInputConfig.h:48-72 no skip action; QuestSaveGame has no scene-seen ledger (dive CN-6) [SRC: §4 P2.7 (save/load stack); T99_Translation_Cinematic Step 6]. | BUILD-NOW | CN-1, P2.7 | SLICE-PRESENTATION (AV) | |
| CN-7 | Boss intro/phase/resolution cine-triggers — Humanity.Boss.EmitPhase N debug emitter + StateTree phase-threshold event a scene listens for (testable with NO boss AI). | NEW (CN5.6 emitter) | §7 CN5.6 realtime trigger + console emitter; ABSENCE: boss StateTree emits no cine event, SC_CH02_freeing_the_hunter beat CH02_B08 has no emitter (dive CN-7). Depends the C1.15 boss-phase→beat framework [SRC: §7 CN5.6; §3 C1.7/C1.15; T99_Translation_Cinematic Step 6, §4 spike 4 (boss-phase fight-AI)]. | BUILD-NOW +DA | CN-1, C1.15 | SLICE-PRESENTATION (AV) | |
| CN-8 | Greybox cine-camera rig — cine camera(s) + ViewTarget-blend cuts framed off participant_refs; the only camera today is the player follow cam. | NEW | ABSENCE: HumanityCharacter.h:102-107 only CameraBoom+FollowCamera (P2.2 deferred) (dive CN-8); camera rules unspecced §12 #26 [SRC: §4 P2.2 (camera); §12 #26; T99_Translation_Cinematic Step 2 (participant bindings), Step 4 (create_camera/camera-cut track)]. | BUILD-NOW | CN-1, P2.2 | SLICE-PRESENTATION (AV) | |
| CN-9 | DT_SceneDispatch path-conditional resolver — SLICE-DEFERRED + needs a Josh schema ruling. Ch2-5 scene rows are ALL UNLOCKED/path-invariant, so the slice does not need it [RESCOPE RE-DERIVE — see §A.0]; the schema (convergence_node_scene_dispatch) is unratified. NOTE-ONLY. | CN5.5 (deferred) | §7 CN5.5; ABSENCE: scenes.csv CH_02 all path_bucket=UNLOCKED, no DT_SceneDispatch in Source (dive CN-9). Open ruling §12 #22 [SRC: §7 CN5.5; §12 #22; T99_Translation_Cinematic Step 5, §4 spike 7; SPINE_SCHEMA_v3 §1]. | BUILD-NOW (parked) | Josh #22 | 5090/POST-SLICE |
---
The WS-10 loop (§11.5) verifies by screenshot — UHumanityQACaptureSubsystem captures named shots
two defects this block fixes (the silent island AU-4, the bypassed cue channel AU-1/AU-2) — a black
frame is caught, a silent frame is not.
| ID | Item | Canon citation / absence-proof | Tag | Depends | Wave |
|---|---|---|---|---|---|
| QT-AU | Audio-capture QA leg — assert cue-fired telemetry (every C1.16 cue routed through AU-1/AU-2 logs to the QA manifest) + a non-silent floor (a scene/combat capture with 0 audio events FAILS), the audio analog of the scene-luma floor. Catches AU-4 silent-island + AU-1/2 bypass regressions. | §11.5 QA-1 UHumanityQACaptureSubsystem (luma-floor pattern to mirror); ABSENCE: no audio assertion in the QA rig (loop is visual-only) [SRC: §11.5 QA-1/QA-6; §8 A6.8 (AU-1); dive AU-2/AU-4]. | BUILD-NOW | AU-1, AU-2, QA-1 | QA-ORG |
---
Per §0 + §13, all AV generation is GATED-5090; the runtime seams above are the pre-wire so a
generated asset drops in with zero runtime edits. The deliverable NOW is the id + path contract
each lane fills — the drop-in point is already named in the T99 docs. Do NOT re-plan these as buildable;
plan them as the contracts the placeholders honor.
| ID | Drop-in contract (GATED-5090; seam is BUILD-NOW above) | Canon citation | Parked because |
|---|---|---|---|
| DR-AU1 | Music generation → replaces AU-5 placeholder stems at /Game/Audio/Cues/<cat>/A_<id>. Lanes: composer-in-loop hero themes (human composer — AIVA CLOSED AS SKIP, Josh 2026-07-27) + ACE-Step/YuE local bulk (benchmark-gate, 5090). | §13 GATED (music bulk gen); T99_Translation_Audio Music Step 3 (ACE-Step/YuE benchmark-gated), Step 5 (import path), §4 spikes 1–2 | Every music-model quality signal is vendor-claimed; benchmark-gate is 5090-local; the AIVA API question is CLOSED (Josh ruled skip 2026-07-27 — no email, no negotiation). |
| DR-AU2 | Voice generation → fills the CN-4 per-line dialogue slot at /Game/Audio/Voice/<cat>/V_<voice_id>. Kokoro-82M bulk + ElevenLabs behind the §4.4.1 clone gate. | §13 GATED (voice bulk gen); T99_Translation_Audio Voice Step 3 (Kokoro), Step 4 (ElevenLabs clone gate), Step 5 (path); §4 spikes 7–9 | Kokoro throughput/language coverage unbenchmarked; clone gate is §4.4.1; text is Quest §6 (unauthored). |
| DR-AU3 | SFX generation → fills AU-3/9/10/11/13 placeholder cues (proposed /Game/Audio/SFX/<cat>/SFX_<id>). Licensed-first (Sonniss/BOOM) → MOSS-SoundEffect local (5090) → Krotos creature lane. | §13 GATED (SFX gen); T99_Translation_Audio SFX Step 2 (licensed-first), Step 3 (MOSS gen), Step 4 (Krotos), §4 spikes 12–15 | MOSS has no independent benchmark; SFX /Game/Audio/... path is PROPOSED-not-ratified (spike 15); creature seat-hours unbudgeted. |
| DR-CN1 | MRQ dailies + MetaHuman roster → the WS-5 §7 CN5.7/CN5.8/CN5.9 half; realtime CN-1 ships, MRQ renders for review only. | §13 GATED (cinematic-video gen, MetaHuman roster-scale); §7 CN5.7 (render_mrq_dailies), CN5.8/5.9; T99_Translation_Cinematic Step 6 (MRQ headless = review, not shipped) | Roster-scale MetaHuman + video gen are 5090-inference; MRQ is a review render, never the shipped path (realtime is). |
---
Re-ranked into the 2-3-week window; the AV items thread through the new waves (feel / UI / QA-org /
slice-presentation) parallel to the combat-feel and Ch3-5-region waves.
| Wave | AV items | Verified-by |
|---|---|---|
| FEEL (audio spine) | AU-8, AU-1, AU-2 (spine) → AU-3, AU-9, AU-10 (combat audio) | QA capture proves a hit is audible + differentiated; grep proves 0 PlaySoundAtLocation outside AU-1; cue-fired telemetry non-zero in the QA manifest. |
| SLICE-PRESENTATION (AV) | CN-1..CN-8; AU-4, AU-5, AU-7 (world audio) | A framed scene plays for FORK_CH02_A + letterbox + skip in a full Ch2 QA pass (image critics read the shots); ambient bed audible in a Flores capture; DT_SceneAnchor consumer count > 0. |
| UI | AU-6, AU-11, AU-12, AU-13 | Volume sliders move + persist across a save/reload QA test; UI SFX fire on fork-commit (QT-AU telemetry); coverage-map has a row per Ch2-5 entity/event. |
| QA-ORG | QT-AU | The audio-capture leg FAILS a deliberately-muted build (must-fire/must-not-fire fixture, the §11.5 self-testing-gate law) and PASSES the wired build. |
| ACQUIRE (anytime) | AU-S (Sonniss) | Bundle in the segregated owned-only tree; AU-12 imports one bank end-to-end. |
| 5090/POST-SLICE (parked) | CN-9; DR-AU1/2/3; DR-CN1 | Not verified pre-hardware — the drop-in contract is the deliverable; verified when a generated asset replaces a placeholder with zero runtime diff. |
---
RECONCILED (Vol2): the QT-1..22 org IS LANE-SOAK in the master queue (nightly, this week). QT-AU (audio-capture leg) is owned by ws56_av. Every QT harness folds into its content wave's verified-by clause — no separate build wave; it is the definition-of-done handed to every wave.
The full architecture is docs/proposals/AI_QA_LOOP_ARCHITECTURE.md (PROPOSAL-TIER, critic-fixed; ENGINE-class) — that doc OWNS the role/item table (QA-1..QA-14) and the per-pipeline hook map (§3). This section is the execution organization: the QT-1..22 map turns the four AI roles into a standing test ORG — the four senses, seven bug-class harnesses, the three-tier cadence with a nightly soak that starts THIS WEEK on the current machine, auto-triage, the beta player, the 5090 fleet contract, the coverage-scorecard family (the density CURVE made measurable), and the honest human-only list. Every QT item folds into a QA-x id (extends it, never re-mints it) and inherits QA-8's self-testing-gate law + QA-9's repro-first discipline. It invents no canon; it is ENGINE infrastructure sitting below the pillars, consuming CANON (hard-line floor, reveal windows, §17.1 collective-care, the reference bars, the per-chapter content budget) strictly as data. DOC_MAP row rides on integration (consumer = the QA-org wave + every workstream's verified-by clause).
LIVE TODAY (2026-07-23e; game f25d8a3+, canon 0f365c5+): QA-1/2/5/6 DONE — the loop ran end-to-end on the C1.18 greybox rig and caught five real bugs day one; Tools/run_qa_pass.py reads verdicts from the TEST REPORT never the exit code (self-test 9/9); the typed bug ledger is at 11 records under QA/bugs/; QA-8 teeth and QA-9 repro-first are already operating (every fixed record carries a regression_test_ref). Ground truth the org is built on: the rig captures 8 named shots (greybox_spawn, _hud_wellspring, _hud_forgotten, _boss_closeup, _quest_panel, _direct_broken, _phase_p2, _feel_swing) and has ALREADY hit a soak-class failure — a Automation RunTests hang, TESTS: TIMEOUT after 900s / tests_exit=124, capture-leg green — which is exactly what the nightly heartbeat (QT-13) and auto-triage (QT-14) exist to catch.
The beta player perceives through four channels; its hands (input injection, QT-15) are the actuator, not a sense. Each sense already has a live seam; the org completes and generalizes it.
UCombatTelemetrySubsystem JSON (Saved/Telemetry/<s>.json), UWorldStateSubsystem reads (42 ws.* vars), and the DebugHUD enemy-stat hash that makes zero-enemy-stat-delta VISIBLE. Scored by score_greybox.py (SHAPES/RELATIONS/FLOORS only). LIVE.cue_id/sfx_id_ref that should fire on its trigger. Today needs-build (WS-6 §3 = needs-build; no cue→trigger matrix in harness/). Folds into QT-10.Saved/Logs/*.log, Saved/Crashes/**/CrashContext.runtime-xml, ensure()/check() lines, and the automation-timeout signal. Partially live (run_qa_pass reads report markers); auto-triage (QT-14) completes it.Not one hand-authored test per surface — one harness per defect class, data-driven off the DataTables so it scales to every row without re-authoring. Each ships a must-fire fixture (a known-bad row it MUST flag) and a must-not-fire fixture (a known-good row it must pass) per QA-8, refuses to run if its own teeth break, and lands its repro BEFORE any fix per QA-9. Every listed bug class is grounded in a defect the loop already caught or a §3 hook row.
| QT | Bug class | Data-driven off | Must-fire (grounded) | Folds → |
|---|---|---|---|---|
| QT-5 | Combat invariants | DT_BossEncounter/DT_BossPhase (343) — one test per boss row × preset | BUG-0001 driver false-green; BUG-0004 lever-stack froze at first d_local; zero-enemy-stat-delta must hold at all tensions; every declared composure node breakable; no enrage HP-spike | QA-3 |
| QT-6 | Readability / HUD / feel | the shot manifest × 5 difficulty presets | BUG-0003 black-frame luma; BUG-0005 zero-lights arena; BUG-0006..8 HUD legibility; the SHAPE-telegraph channel (accessibility FLOOR, BUILD-NOW) reads at every preset | QA-1/QA-6 |
| QT-7 | Beat-graph reachability | DT_Beat (891)/DT_Fork (90)/DT_ForkOption (305) via condition_expr | an unreachable beat; a fork option with no completable path; a ws.* consumed before produced; a dead-end death | QA-3 |
| QT-8 | Data integrity | every DT (RowName==registry id, FK-handle resolves, FText round-trip) | the re-import-renames-a-row orphan (the recorded chunk_id-collapse class); an FString player-facing cell; a dangling FDataTableRowHandle | QA-3/QA-10 |
| QT-9 | Care / reveal runtime | T0_Hard_Lines (+Runtime enum) · reveal windows · T0_Character_Index persona (163) | a House-of-Velheim pattern surfacing before ~Ch38; a VoiceRouter §17.12 gender-lock breach; a §17.5 pre-reveal name leak; breeding→legendary (HL_0057/58); a missing 13-field persona | QA-3/QA-6 |
| QT-10 | Audio event-fire | cue_id/sfx_id_ref arrays (§10.6, per registry) | a declared cue that never fires on its trigger; a MetaSound not consuming tempo/bar/stem-role; footfall not keyed to footfall_surface | QA-3 |
| QT-11 | Save/load + map handoff | the 42 ws.* vars + the cross-map handoff key set | a ws.* value lost across a level change; identity_hiding_status/familiar_bond_state/community_state_per_region/integrity_score/journal_status/age_stage not carried Ch2→3→4→5; σ-window map not surviving reload | QA-3 |
The care/reveal harness (QT-9) enforces the §17 hard-line FLOOR mechanically — the one absolute the machine judges on its own. Everything ABOVE that floor it does NOT scrub: it opens an enhancer intake (QT-20/QA-13) for a RENAME/REFRAME, never a removal or a rated-G defang (care doctrine, CVD §17.1, delegated-bolder calibration — Josh is the backstop).
The beta-player fidelity ladder is a three-rung gate — a rung never skips the one below it (scripted gates agent, agent gates soak).
Automation RunTests Humanity.* + -TestExit; deterministic pass/fail through RequestExitWithStatus.InjectInputForAction (packaged-valid; EnhancedInput is Runtime). Exploratory input agent-chosen; regression input scripted.SOAK SCOPE UNDER THE RESCOPE (2026-07-27). The soak matrix grows with the slice — 15 nodes, not 4 —
and it is the one leg that does NOT fan out: it is wall-clock, and a 3-4× larger matrix costs 3-4× the
wall-clock at the same instance count. The QT-16 Gauntlet fleet is exactly what the 5090's parallelism buys
here, and it is the one item where the hardware buys THROUGHPUT rather than capability. Two riders the
build order forces: (1) the companion/ally runtime debuts in Ch 13, the slice's TERMINAL chapter, so it
gets one chapter of soak where everything else gets twelve — build and soak it against a STAND-IN early so
Ch 13 is its integration and not its birth; (2) the Prologue and Ch 1 enter the matrix LAST and carry the
slice's only never-run terrain path, so their first soak nights are also that path's first evidence.
QT-13 — THE NIGHTLY SOAK, this week, this machine (BUILD-NOW). An unattended scheduled overnight pass over the greybox + Ch2-5 rig (extending per region leg as Ch 6-13 land, and to the full 15 nodes at slice-end): (1) the full accreted Tier-1 regression suite; (2) a Tier-2 agent walk of the current playable surface; (3) a capture set the morning critic reads; (4) a hang heartbeat (the current on-demand run_qa_pass ALREADY hit TIMEOUT after 900s — the nightly wraps each leg in a MarkHeartbeatActive-style watchdog so a hang opens a record instead of stalling the run); (5) an auto-triaged bug delta + a scorecard delta waiting each morning. This is NOT 5090-gated — only the *volume/parallel* soak is (TAG LAW: only generative inference gates on the 5090). Absence-proof that it is genuinely new: run_qa_pass.py is invoked on-demand in the workflow logs, there is no scheduled-task/cron entry and no Saved/QA/nightly/ tree today.
Saved/Logs/*.log + Saved/Crashes/**/CrashContext.runtime-xml + the automation-timeout signal; ensure()/check()/TIMEOUT lines auto-open a typed record (§5 schema) with artifact refs pre-filled and a severity guess. The 900s hang is record #1 this class writes.InjectInputForAction is its hands. NeoStack PIE Lua is the works-now in-editor bridge; the packaged path is the InjectInput action-level route.UGauntletTestController + RunUAT RunUnreal on packaged builds; many parallel long-soak/perf/crash-collection instances. Drop-in contract: QT-13's nightly harness IS this harness scaled down — the fleet is the same driver × N instances when the workstation lands. Parked, not re-planned.Per-chapter content-budget and per-chapter test-coverage are ONE scorecard family (coverage_scorecard.json per node, rolled up 79-wide) that the gates watch. This is the density ruling made observable: CANON_AUDIT §7 RULES every chapter a dense woven experience (a few sub-bosses culminating in one main boss; combat/exploration/discovery/puzzle/mystery/lore/trade/gathering/side-quest/folklore all woven) — and Josh's in-conversation refinement (2026-07-24) supersedes any uniform-density reading with a CURVE: the completion-hours target is ≈100-200h main / 1-2k h side+weave / 8-10k h 100%, and the early chapters (Ch2-5) are deliberately LIGHTER, seed-rich, opening the game. The scorecard's per-chapter TARGET is therefore a rising band, not a flat floor.
DT_Site 376), beats-by-type (DT_Beat 891), encounters + sub-bosses (DT_BossEncounter/DT_BossPhase), forks + options (DT_Fork 90/DT_ForkOption 305), minigames (DT_Minigame MG_), weave-links (Cross_Cultural_Link_Graph 184 + CROSS_CULTURAL_WEAVE.md), significance-lenses (SIGNIFICANCE_LENSES.md, 33), personas (T0_Character_Index 163), threads-woven (DT_ThreadGrid 664 / 22 threads), reputation surfaces (T0_Reputation_Ladder + reputation-exalted-prestige-nemesis.md), and §16 citations (DT_ResearchCorpus 1356). Grounded reference shape (the slice, read directly): CH_03 = 7 sites / 12 beats (4 combat·4 character·1 puzzle·1 learning·1 discovery·1 transformation) / 1 main + 3 sub bosses / 1 fork × 4 options — the early-game floor of the curve.worklist_next names the thinnest chapter each run.and the off-curve nodes carry declared sentinels.** The slice is now Prologue→Ch 13, so the gate would be
asked to score eight nodes whose band does not exist and two nodes that are not on the curve at all: the
Prologue is a ceiling TUTORIAL (its job is presentation, not content budget) and Ch 1 is declared out of
corpus scope. Clause (a)'s monotone-rising SHAPE is exactly what mis-fires here — a false regression, the
same defect class already caught for Ch 77's exempt demand_ordinal. The fix is the band/sentinel pass,
which is its own item and lands WITH check_slice_scorecard.py (which does not exist yet); no band values
are written into this spec ahead of it, because inventing them would cross the tuning firewall this very
item exists to defend. Until then QT-19 arms over Ch 2-5 only, and its scope grows band-by-band.
The machine owns floors; Josh owns the ceiling. These are explicitly NOT gated and route to Josh (the J-cadence dailies packet) or to the enhancer intake (QA-13), never to a bug record:
fixed ⇒ regression_test_ref); "is this bug back" is the test going red, never an argument; a class caught twice graduates from a per-run catch into a standing gate exactly as reveal_discipline and boss_axes did.run_gates.py (canon-side, unpiped, green-before-land) + RunUAT BuildCookRun … -run=DataValidation (game-side); non-zero exit on any Tier-1 or DataValidation failure blocks the wave; every harness self-tests (QA-8) and refuses to run if its own teeth break.| QT | Item (fold → QA-x) | Tag | Citation or absence-proof | Depends | Wave |
|---|---|---|---|---|---|
| QT-1 | SIGHT sense (→ QA-1, QA-6) | DONE-partial (live, greybox) | AI_QA_LOOP_ARCHITECTURE.md QA-1/QA-6; 8 shots live (bbgbissd4 run log) | QA-1, QA-6 | QA-ORG (live) |
| QT-2 | STATE-sense / proprioception (→ QA-7, QA-3) | DONE-partial (live) | score_greybox.py + CombatTelemetrySubsystem; SILQ §6.1 scorecard | C1.10 | QA-ORG (live) |
| QT-3 | HEARING sense (→ QA-3, QT-10) | BUILD-NOW | absence-proof: WS-6 §3 today=needs-build; no cue→trigger matrix in harness/ | A6.5, QT-10 | LIVING-WORLD/audio |
| QT-4 | FAULT-sense / log stream (→ QA-11) | BUILD-NOW / partial | run_qa_pass reads report markers; Saved/Logs, Saved/Crashes paths | QT-14 | QA-ORG |
| QT-5 | Combat-invariant harness (→ QA-3) | DONE-partial → BUILD-NOW (DT-generalize) | C118 test pair live (zero-stat-delta + lever-response); BUG-0001/0004 | QA-2, C1.18, DT_BossEncounter | FEEL |
| QT-6 | Readability/HUD/feel harness (→ QA-1/QA-6) | BUILD-NOW | BUG-0003/0005/0006-8; SHAPE-telegraph accessibility FLOOR (TAG LAW = BUILD-NOW) | QA-1, P2.4 | UI |
| QT-7 | Beat-graph reachability harness (→ QA-3) | BUILD-NOW | condition_expr (49-case) + DT_Beat/DT_Fork/DT_ForkOption; no_dead_end scaffold | Q3.3, T0.11 | Ch3-5 REGIONS |
| QT-8 | Data-integrity harness (→ QA-3/QA-10) | BUILD-NOW | W4.9 UEditorValidatorBase; the chunk_id-collapse memory; registry_fidelity | T0.8, W4.9 | QA-ORG/trunk (I) |
| QT-9 | Care/reveal runtime harness (→ QA-3/QA-6) | BUILD-NOW | T0_Hard_Lines+Runtime enum; reveal-window memory; §17.1; HL_0057/58 | C1.21, N8.1, N8.11 | LIVING-WORLD |
| QT-10 | Audio event-fire harness (→ QA-3) | BUILD-NOW | absence-proof: WS-6 §3 needs-build; sfx_id_ref arrays (§10.6) undeclared | A6.1, A6.5 | LIVING-WORLD/audio |
| QT-11 | Save/load + map-handoff harness (→ QA-3) | BUILD-NOW | slice §"cross-cutting seams": cross-map ws.* carry unbuilt; 42 baked vars | P2.7, T0.10 | TRANSITIONS |
| QT-12 | Three-tier beta-player ladder (→ QA-3/QA-4/QA-14) | BUILD-NOW | AI_QA_LOOP_ARCHITECTURE.md §2.1 fidelity ladder | QA-2, QT-15 | QA-ORG |
| QT-13 | Nightly soak — this week, this machine (→ QA-14 BUILD-NOW tier) | BUILD-NOW | absence-proof: no cron/scheduled-task, no Saved/QA/nightly/; 900s hang seen (banxsd9pw) | QT-5..11, QT-14 | QA-ORG (this week) |
| QT-14 | Crash/error/timeout auto-triage (→ QA-11) | BUILD-NOW | AI_QA_LOOP_ARCHITECTURE.md QA-11; tests_exit=124 timeout is record #1 | QA-5 | QA-ORG (this week) |
| QT-15 | AI beta-player agent (→ QA-4) | BUILD-NOW | InjectInputForAction (EnhancedInput Runtime); NeoStack PIE Lua bridge | QA-1, P2.3 | QA-ORG |
| QT-16 | 5090 soak fleet (→ QA-14) | GATED-5090 | Gauntlet.uplugin; GauntletTestController.h MarkHeartbeatActive | QT-13 | POST-5090 (parked) |
| QT-17 | Content-budget scorecard (→ QA-7) | BUILD-NOW | CANON_AUDIT §7 (density RULED) + Josh curve 2026-07-24; DTs per §11.5.5 | T0.8, D (spine extract) | QA-ORG + Ch3-5 |
| QT-18 | Test-coverage scorecard (→ QA-7) | BUILD-NOW | derived from QT-5..11 coverage; SILQ §6.1 shape | QT-5..11 | QA-ORG + Ch3-5 |
| QT-19 | Unified coverage family + gate (→ QA-7) | BUILD-NOW | tuning-firewall (SILQ §2.3/§5): gates SHAPE/RELATION/FLOOR, logs absolutes | QT-17, QT-18 | QA-ORG |
| QT-20 | Human-only list + Josh-beta intake (→ QA-12/QA-13/Josh-beta) | STANDING (process) | care doctrine (CVD §17.1, delegated-bolder); AAA_REARCHITECTURE_BRIEF | — | every wave (J-tag) |
| QT-21 | Regression accretion + graduation (→ QA-9/QA-5) | DONE-partial (live) | 11-record ledger, fixed⇒regression_test_ref; SILQ §3.1 graduation | QA-5 | QA-ORG (live) |
| QT-22 | CI wiring + self-testing-gate integration (→ QA-10/QA-8) | BUILD-NOW | W4.10 RunUAT + -run=DataValidation; QA-8 teeth; run_gates unpiped | W4.10, QA-8 | QA-ORG |
Verified-by (the QA-ORG wave's own clause, and what WS-10 supplies to every OTHER wave): the QA-ORG wave is verified when (1) each of QT-5..11 ships green must-fire + must-not-fire fixtures and refuses to run toothless (QA-8); (2) the nightly (QT-13) completes one unattended overnight pass on the current machine, producing a triaged bug delta + a coverage-scorecard delta with the hang-heartbeat armed; (3) run_gates.py stays green unpiped and the coverage gate (QT-19) is armed against the curve, not an absolute. WS-10's product is the verified-by-playing clause it hands to every content wave — FEEL/UI/Ch3-5-REGIONS/TRANSITIONS/LIVING-WORLD each inherit their QT harness as their definition-of-done, so "it works / it reads / it's fun" never ships without a backing frame, a green repro, and a scorecard.
---
**STATUS AS OF 2026-07-26 EVENING — THE WAVE QUEUE IS CLOSED (the ▶ PROGRESS LEDGER is the
per-landing authority):** W1-W8 ✅ · W9 ✅ (3 passes) · W10 ✅ (the shipping surface + the
executable reveal table) · W-SPACE ✅ ALL regions · the COMBAT ADDENDUM TAIL ✅ (foundry /
status / arena-mutation flagship / presentation seam) · Ch-5 staged ×4 maps + PG-2 seams ✅ ·
LANE-SOAK ARMED ✅ (first run green) · the slice is STRUCTURALLY END-TO-END on a real player
HUD with 54/54 tests and every space/state/reveal tooth green. Remaining pre-5090: the
canon-residue batch (named in ledger 2026-07-26g), polish riders, the nightly soak cadence.
The earlier per-wave detail block below is superseded by this line and the ledger.
*(The block below reflected mid-day 2026-07-26:)* **W1 ✅ · W2 ✅ · W3 ✅ · W4 ✅ (true weightmap
tier; BUG-0016/0015 closed) · W5 ✅ · wave-G ✅ · W6 ✅ (foundation: material-spine runtime +
B04 recharge) · W7 ✅ (foundation: scenes + ambient beds audible) · W8 ✅ (Ch-3 staged + seam;
Ch-4/Bali staged; PG-2 cross-map = open) · W9 ◐ IN PROGRESS (passes 1-2 landed: parry, attack
library w/ punish windows, counter-class law, caci, hitzones/part-breaks, the weakness-read,
spawn-Z; pass 3 in flight: S2/S3 mechanics + state isolation; the tail = the
COMBAT_PROGRAM_ADDENDUM's six systems) · W10 ⬜ NEXT (the shipping surface — all its canon
inputs are ready) · W11 ⬜ · LANE-CANON ✅ for the slice (the table CLOSED: strings ×4, bboxes
0-empty, material spine, fauna 150, festivals, SFX, the element matrix, clue lane, pip schema;
residue = personas/TR-3/TR-6/rune-registry reconciliation) · LANE-SOAK ⬜ arming next ·
NEW WAVES ADDED THIS SESSION: W-SPACE ✅-on-Flores/◐-remaining-regions (the audit→sculpt→
teeth factory stage) + the COMBAT ADDENDUM tail ⬜ (foundry/status/combo/healing/ladder-seam/
arena-mutation + the Rune Forge).**
Supersedes synth_program §A.4. Covers every item in all 8 sections (217 unique items after
dedupe). Ranking follows the directive: **E-residue first · nightly-soak + feel + audio-spine early ·
input/targeting before the movement + AI that need the binds · terrain long-poles parallel from day 1
· W-AI before the region sub-bosses (wave-G fold) that consume it · canon-author lane on the canon
side throughout.** Two-repo discipline: canon (C:/dev/humanity-forgotten) and game
(C:/dev/Humanity/Humanity) are one-writer-each, so the persistent canon + soak lanes run in PARALLEL
with the ranked game waves. Each wave inherits its WS-10 QT harness as its definition-of-done.
| lane | repo | what runs | starts | verified-by |
|---|---|---|---|---|
| LANE-CANON | canon | The canon-author lane: W-LW1 substrate authoring — all 31 CA rows (FA-1/4/5/6/7/8 · FL-1/2/5/7/8/9 · MN-1..5/8..12 · TR-2/3/6 · LW-5/6/7/9/11 · AB-5 Chakra repair — the single owner) + the 9 RB.1a-i bbox fills + DR-2 asset-path drop-in contract + DR-7 weave anchors + DR-8 the 3 RAG fixes. Cited-or-cut; proposal-tier → ratified firewall. | day 1 | normalize-doc critic per artifact; fidelity_baseline.json refreshed in the SAME commit; every row a canon citation; positive-control greps re-run (185/72/22/120/33/10/163/42 counts intact; LINK_0186 not re-authored; Chakra literal = 0 post-rename). |
| LANE-SOAK | game + harness | The QT-1..22 test-org (WS-10) + QT-AU audio-capture leg + the content-budget/test-coverage scorecard family: the machine runs as alpha/beta tester over the whole built slice each night; Gauntlet-lite soak-player loops Ch2-5; bug ledger accretes; every fix leaves its regression ref (QA-8/QA-9). | THIS WEEK, on this machine | a nightly Saved/QA/TestReport + typed bug records; verdicts read from the report, never the exit code; the hang-heartbeat armed (the 900s-timeout class); the coverage gate armed against the CURVE, not an absolute. |
| wave | theme | item families consumed (owners) | depends | verified-by |
|---|---|---|---|---|
| W1 · E-RESIDUE *(in flight)* | Ch-2 becomes real, not a DEV-ADVANCE stub-walk | the DEV-ADVANCE beats → real sites/scenes/dialogue/sub-bosses; pulls forward the minimal TG-3/TG-9/TG-11 its Ch2 sub-bosses need (Ebu Gogo pursuit, BE_0002_S2 construct) | closed A-D | every Ch-2 beat auto-advances on a real fight/scene event, zero N-presses; image critics GO |
| W2 · FEEL + AUDIO SPINE *(early)* | the "it landed / it broke / it's coming" reads + the audio that carries them | CF-1 hit-confirm · CF-6 Composure-break moment · CF-8 camera shake/punch · CF-12 withdrawal-clock read · CF-10 death/respawn SHELL *(boss-defeat STATE = BLOCKED-ON-BRIEF D-DEFEAT-AXIS)* · HUD reads U11.1–U11.4 (the CF-11 home) · audio spine AU-8→AU-1→AU-2, then AU-3/AU-9/AU-10 | W1 | image critics read hit/break/tell frames; SetGlobalTimeDilation dip + DamageNumber-spawn functional test; hit is AUDIBLE + differentiated (cue-fired telemetry non-zero, 0 PlaySoundAtLocation outside AU-1); QT-feel pack green |
| W3 · INPUT + TARGETING *(early)* | close the Josh-named binding + lock-on gaps; the WS-2 player prereqs | INPUT (ws_ui 11c): U11.7 bind all 8 verbs + crouch/dodge/interact/menu · U11.8 gamepad · U11.9 rebind persistence · U11.10 context stack · U11.11 accessibility · U11.12 dev-key graduation · U11.13 wheel — TARGETING: P2.2 lock-on (folds CF-3/MV-6/TG-1) · TG-2 targetable-set · TG-7 threat indicator — PREREQS (cited): P2.10 interactable · P2.6 inventory | W1, P2.1 cam | input-map QA: every verb + menu key bound; lock-on acquire/cycle/yaw-blend + non-Composure fauna targetable; InjectInputForAction drives every binding in PIE + packaged |
| W4 · TERRAIN long-poles *(PARALLEL from day 1)* | the 3 unbuilt region maps + biome material — the longest pole | RG.1-3 region-generalize the flores drivers · RT.1/RT.2/RT.3 bali/sumatra_java/angkor_khmer GIS→import→dress→stage · RM.1/RM.2 (F′) weightmap biome material · RB.1a-i consumed (authored LANE-CANON) · RS.3+RE.3 CH_03 on the built Flores | none (parallel lane); W4.1/W4.3 hardening | drivers reproduce FloresIsland byte-identical; each .umap round-trips at true scale, coastline/relief director-verified; lit biome capture per region (image-critic); CH_03 stages 7/7 + BE_0003 ×4 |
| W5 · TRAVERSAL + ENEMY-AI | player + enemy locomotion over terrain | W-MOVE (ws1_feel): MV-2 CMC modes · MV-3 HL_0079 Ch-2 canopy course (in-slice HARD LINE) · MV-4 dodge · MV-5 swim · MV-7 regional modifiers · MV-8 stamina · MV-9 fall — W-AI (ws1_feel): TG-3 locomotion · TG-4 multi-enemy · TG-5 fauna AI · TG-6 spawn (Pillar-1 3-system gate) · TG-8 ambient NPC · TG-9 constructs · TG-10 ally · TG-11 perception · TG-12 roster fields | W3 binds + W4 navmesh/terrain | headless canopy course completes (12 pods, no stop — HL_0079 exit); swim + footfall tests; SliceWalk enemy PURSUES + N-enemy per-target damage; no random spawn outside the 3 declared systems |
| W6 · LIVING-WORLD runtime *(W-LW2; RE-SCOPED 2026-07-24 — see the FUN-REBUILD map below)* | the runtime consumers of LANE-CANON's substrate + the Ch-2 keystone-teaching consumers (R4) | FA-2 struct regen · FL-12 flora struct · LW-12 ws keys · LW-WIRE σ-drop wire · FA-3 wildlife spawner · LW-ECO migrate/regrow + immune set · FL-3 gather-node actor · MN-6 mining loop · TR-1 harvest subsystem · LW-1 day/night · LW-2 weather · LW-3 Pawukon clock · EC-inventory (P2.6) · EC-treasure (LW-WIRE) | LANE-CANON W-LW1 rows; W4 weightmaps; W3 P2.10 | wildlife observable in a region; a forage/mine round yields within ±1σ across N draws; clock advances day→dusk→night + a Pawukon day resolves; over-gather migrates+regrows, a progression_critical node does NOT |
| W7 · SLICE-PRESENTATION / scenes *(AV — the single scene-runtime home)* | play a scene, cut a camera, frame a fork, break the silence | CN-1 scene subsystem · CN-2 OnBeat delegate · CN-3 fork-as-scene · CN-4 dialogue presentation · CN-5 letterbox · CN-6 skip/idempotence · CN-7 boss cine-triggers *(resolution scene partial BLOCKED-ON-BRIEF D-DEFEAT-AXIS)* · CN-8 cine-camera rig · Q3.2 six-option dialogue selection · world audio AU-4 silent-island · AU-5 music runtime · AU-7 spatial. *(CN-9 parked — Josh #22.)* | W2 audio spine, Q3.3, P2.2 cine-cam | a framed scene plays for FORK_CH02_A + letterbox + skip in a Ch2 QA pass (image critics); ambient bed audible in a Flores capture; DT_SceneAnchor consumer count > 0; scenes idempotent on beat re-entry |
| W8 · Ch3-5 REGIONS + progression | stage the 3 remaining chapters; make cross-chapter real | BACKBONE: PG-1 advance · PG-6 unified save · CN-2(xref) · SL-2 softlock autotest *(early)* — PG-2 region-map handoff *(here, after terrain)* · PG-3/4/5 flow+save-slots+autosave · IB-1 integrity band — REGIONS: RS.4/RE.4 CH_04 · RX.1 Ch-4 era-swap *(folds LW-4; deps LW-3+LW-12)* · RS.5a/RS.5b/RE.5 CH_05 · RX.2 excursion + new boss verbs + the integrity-gated lethal Ch5 fork — CONTENT: MG-1..4 scored-interaction · UW-1/UW-2 unlock+mastery · SL-1 death-learning · CN-3(xref) — W-LW3 fold: FL-4/6/10/11 · MN-7 · TR-4/5/7 · LW-8/10 · LW-5 festival windows · EC-vendor *(BLOCKED-ON-BRIEF)* | W4 terrain, W5 AI, W6 living-world | Ch2→3→4→5 end-to-end with ws.* carried across 4 maps (every write ∈ baked 42); QT-7 softlock-immune over every fork; each region's scored beats reach Bronze; BE_0004 3-phase verified; Ch5 lethal fork falls only on the 2 corrupt operatives |
| W9 · REACTIONS + BOSS VARIETY + PRESENTATION TIERS *(W-FEEL2 + W-PRES; RE-SCOPED 2026-07-24 — see the FUN-REBUILD map below)* | the puzzle-boss chain-meter template + the combat depth the region sub-bosses consume | W-FEEL2: CF-2 hit-react · CF-7 telegraph shape (accessibility floor) · CF-9 boss-attack variety (evolve-not-swap) — W-PRES: CF-4 per-weapon animset · CF-5 per-ability cast primitives *(requires AB-5 Chakra repair landed — LANE-CANON)* | with/after W8 sub-bosses; W2 cue seam; AB-5 | HitReact-state + P2-adds-not-swaps test; greyscale telegraph image-critic; ≥3 distinct cast primitives; per-weapon_class timing test; Chakra=0 grep player-facing |
| W10 · UI + BOOK SCREENS + LOC + ECONOMY *(RE-SCOPED 2026-07-24 — see the FUN-REBUILD map below)* | the shipping surface built FROM the translation table + the discovery layer + the economy loop | U11.5/U11.6 menus+front-end · U11.14–U11.20 book/journal/Grimoire/quest-log/fork screens (reveal-gated) · U11.21/U11.22 map+travel (after terrain) · U11.23/U11.24 subtitle+loc runtime · U11.25/U11.26 photo+loading UX · U11.27–U11.29 teaching layer (co-req W2 feel) · U11.30 teaching spec · U11.31 T99_Translation_UI · audio AU-6/AU-11/AU-12/AU-13 · EC-medium/EC-vendor *(BLOCKED-ON-BRIEF)* | W2–W9 surfaces | every widget frame read by image critics; reveal-discipline test (Neophyte sees no tier-6/late-arc row); volume sliders persist across save/reload; UI SFX fire on fork-commit |
| W11 · HANDSHAKE close *(game side; late-window)* | audit the drop-in surface | DR-1 stable-id audit across all staged actors · DR-3/4/5/6 staging-leg audit (seeds/dwellings/NPCs/gather) + placeholder-writeback round-trip | all content waves | every staged actor carries its canon id (W4.9 DataValidation); one placeholder mesh/SFX round-trips the AG7.5 five-state machine |
*Note: the DR staging legs (DR-3/4/5/6) are construction rules APPLIED during W1/W6/W8 — an actor is
placed carrying its stable id + asset handle at placement time — then AUDITED in W11. W11 is the proof,
not the placement.*
The step-back playthrough review (four PXR sections + both fresh-context critics, GO_WITH_FIXES)
produced eight rebuild threads — R1-R8 + R-DATA, specified in docs/FUN_REBUILD_PLAN.md (the
detailed item specs live there; this map is the queue authority for WHERE each thread lands). **No new
waves**; the three re-scopes below AMEND the W6/W9/W10 rows above in place. Two new obligations only: a
runtime clue-state addition (WS-C lineage, feeds W10) and the canon-lane DT_Clue table + R-DATA columns
(the latter APPLIED 2026-07-24).
| R-wave (FUN_REBUILD_PLAN) | absorbed by | note |
|---|---|---|
| R1 · R-RANGKU (defeat-axis BUG-0014 fix, freed win-route, sub-boss gating verify, death consolation, collapse/free presentation) | W1 (staging) · W2 (CF-10 defeat STATE) · W7 (CN-7 resolution scene) | executes the D-DEFEAT-AXIS resolution; sub-boss gating = already fixed by BUG-0013, verify+test only |
| R2 · R-GUARDIAN (chain-meter template: pip UI, 2-of-3 counter classes at Ch2, monotonic-ease, safe-lane-is-dodge, wipe-on-mistake) | W9 (re-scoped below) | the puzzle-boss template the whole game inherits |
| R3 · R-CLUES (DT_Clue, clue-staged objectives, field-sense pre-Ch-13 seam, guardian A+D clue chain, cold-air channel) | WS-C runtime clue-state + W10 (display) + W1 (wire) + LANE-CANON (authoring) | clue = legibility, NEVER a gate; field-sense NOT journal pre-Ch-13 (HL_0070) |
| R4 · R-BEATS (fire-making B02, first-recharge B04, unlock-order rebind) | W1 (staging) + W6 (re-scoped below) | the two keystone teaching beats become played loops |
| R5 · R-FORK (carve-as-scene, no integrity integer, de-authored option copy) | W7 (CN-3 fork-as-scene) | R7 supplies the spoiler-safe option strings |
| R6 · R-ECONOMY (vril 3-channel regen, damage-formula shapes, parry primitive + stamina-both-ways) | W2 (feel) + W5 (MV-8/MV-4) + W9 (parry, CF-5) | all cited to T1_Combat_System_Spec L43/L61/L417; magnitudes → Phase-5M |
| R7 · R-STRINGS (spoiler-safe player-string fields, site display_name + extractor, the full translation table) | LANE-CANON (author + extractor FIRST) + W10 (consume) | the two leak classes W10 cannot fix alone |
| R8 · R-PRESENCE (Ebu Gogo presence channel, real evade stakes, refusal-as-perception-pick) | W1 (stage B05) + W2/W7 (presence AV) + W9 (refusal-pick) | never a fail-wall, never a hunt-the-people beat (HL_0005) |
| R-DATA · per-boss non-kill schema | LANE-CANON DONE → W9 (consumer) | APPLIED at director level 2026-07-24 (extension rail; 16 slice rows). R1.3+R2.1 unblocked |
W6 re-scope (AMENDS the W6 row): ADD the Ch-2 keystone-teaching consumers — the vril-site
rapid-recharge interaction (B04; the Vril bubble visibly fills in the spray — CVD §18.4
substrate-as-real; spec L43 channel-c) on the vril-site/LW-WIRE seam, and the fire-making gather loop
(B02) on the FL-3 gather-node + TR-1 harvest subsystem. Verified-by adds: B04 recharge visibly fills
the bubble in a Ch-2 QA pass; the B02 fire loop yields on a real gather→strike, no N-press.
W9 re-scope (AMENDS the W9 row): from "boss-attack variety" to **the puzzle-boss chain-meter
template** (R2 + R1 depth + R8 refusal-pick). ADD: the NEW parry primitive (a timed deflect — does not
exist; dodge does); per-attack counter-class tagging (dodge-only / parry-only / elemental-neutralize on
cast_pattern); the pip-meter UI (5/7/9+, pip_reveal_threshold-driven appearance); thermal-only
elemental-neutralize at Ch 2; monotonic de-escalation (vary the READ, never re-tighten the window).
Consumes R-DATA's columns (live). Verified-by adds: pips fill on a correct counter and WIPE on a
mistake; the freed-path pips appear at Rangku ≤25% HP and NOT before; the guardian eases monotonically
with no window re-tighten; a parry deflect whiffs a parry-tagged strike; kill-instead docks integrity +
closes a fork. Honest caveat carried: the serpent read-channel (anim) is T2-deferred — W9 ships the
logic, not the "template" feel.
W10 re-scope (AMENDS the W10 row): build the shipping surface FROM the R7 translation table, never
the debug draw, and host the discovery surface: ADD the field-sense re-read affordance + the
clue-staged objective display + the "sense updated" toast (the pre-Ch-13 stand-in for the Ch-13
journal, HL_0070); ADD integrity-as-appearance/voice (no integrity_score integer) and
difficulty-as-diegetic (no d_local/lever names/hash on any player surface). CONSUME the R7.1
spoiler-safe player-objective/option fields + the R7.2 site display_name/chapter-title strings.
Verified-by adds: the reveal-discipline test (no B06/fork-opt-2 pre-tell reaches the player surface);
the field-sense panel gains an entry only after a clue fires, never pre-stated; no
mode-taxonomy/raw-ID/number leaks in any shipped widget frame.
The window's TARGET is the full slice STRUCTURE playable on placeholders (directive #1). "Complete
structure" ≠ complete fidelity. Three explicit buckets:
SHIPS IN THE WINDOW (built now, on placeholders):
progression across 4 maps, feel + audio spine, input + lock-on, traversal (incl. the HL_0079 canopy
course) + enemy AI, the living-world runtime, the scene layer, and the three staged regions with
save/progression. This is the honest "100% structure" deliverable.
variety / per-weapon+ability presentation), W10 (full UI + book screens + loc + economy UX), W11
(handshake audit). These deepen feel and surface, not the playable spine.
HANDED TO THE 5090 (drop-in, NOT built in the window — the window builds the SOCKET):
T2 final art: Niagara VFX, generated meshes/PBR textures, final HUD/icon art (every CF-* cue's final VFX rides GATED-5090; the T0/T1 feel ships now).
(DR-AU3), MRQ dailies + MetaHuman roster (DR-CN1) — the seams (AU-3/5/9/10/11, CN-1/4/7) build now.
pharmacology/ecology fidelity, significance lenses — writes onto the DR-1 stable ids + DR-7 weave
anchors this window plants. Pure fill, never rework — that is the handshake's guarantee (§B).
BLOCKED-ON-BRIEF (Josh gates — status as of 2026-07-24):
EC-medium + EC-vendor unblocked.
per-boss pips at threshold).** CF-10 boss-defeat STATE, CN-7 resolution scene, SL-1 unblocked;
executed by the R1 wave + R-DATA (see the FUN-REBUILD absorption map above + the register).
Realistic-window honesty: at the team's ~5–10× execution rate the in-window deliverable is the full
slice STRUCTURE (MUST-SHIP core, and likely the polish tail); the density/fidelity climb is explicitly
the post-5090 curve work, per the seed-rich early-game band of the density ruling.
---
---
Per the standing decision protocol. Creative-within-vision calls are ruled + applied by the director
(shown in the sections, not asked); only genuine cardinal / system-canon forks are carried here for
Josh. The 3 SHIP briefs are carried by reference to docs/ROADMAP_POST_5090_TO_SHIP.md (they are
post-5090 / ship-facing, not pre-5090-window decisions).
RESOLUTION: Josh ruled Opt B verbatim — "historically real mixed exchange per region," no universal
coin early. EC-medium + EC-vendor are UNBLOCKED and land per the Opt-B mechanization below
(medium_of_exchange on Region_Index; vendors price in the local medium; L2 treasure = the σ-drop
spine). [Historical note retained: an earlier draft wrongly pre-marked this "director-applied" before
the ruling existed — the flag-then-rule path was the correct one and it has now been ruled.]
The gap. The trade MODEL is canon (T1_Trades_Master §9.2 trade-interdependence + region-specific
scarcity; §9.1 two separate economies). The MEDIUM (what the player pays with, how a vendor prices,
where L2 treasure sits) is undefined, and the gather→craft→trade loop is live in Ch 2-5.
for the 1200 CE regions.
early.** Barter + region-appropriate proto-currency (rice/cloth/metal-weight where the real region
used it); vendors price in the local medium; L2 treasure = σ-bounded drops (HL_0061) via
RngDropTable + gather yields. Land as: a medium_of_exchange token on Region_Index, vendor
mechanics as a P2.6 inventory consumer, L2 treasure = the σ-drop spine (LW-WIRE) + gather yields.
Fits §9.2 + §9.1 + immersive-teaching; extends to the Tier-C MMO cross-player economy.
materials + drops with no sink; reads incomplete against the 100%-structure target.
Strongest objection to B: per-region exchange multiplies vendor-UI complexity. Rebuttal: the
slice needs only the Neophyte-floor exchange surface + L2 placement, not a full market sim; Josh
backstops via playtest. Blocked items: EC-medium, EC-vendor. Proceeding regardless: EC-inventory
(P2.6), EC-treasure (LW-WIRE).
RESOLUTION (verbatim intent): "Rated M game. Things will die. Health 0 is death. If they're a
specific boss or combatant that we don't kill for some specific canonical reason because it'll gate
story progression then they'd have to withdraw at 1 health." Refined same-day: "can't free everyone" —
non-kill paths are PER-BOSS, and for fight-first bosses the pip chain APPEARS only at a per-boss HP
threshold (~25%), revealing the alternative win. Executed by: the R1 wave (FUN_REBUILD_PLAN — the
defeat-axis derivation fix BUG-0014, the freed win-route, consolation surfacing) + R-DATA (the four
explicit Boss_Encounter columns has_nonkill_path/pip_count/pip_reveal_threshold/defeat_protected,
16 slice rows populated). Opt B below is retained for provenance only — it was NOT adopted; HP is lethal,
Composure is the boss keystone read, and defeat_protected (rare, canon-cited) is the only 1-HP clamp.
CF-10 boss-defeat STATE, CN-7 resolution scene, SL-1 death polish: UNBLOCKED.
*(The original brief, for provenance:)*
*(Aliases in drafts: D-BOSS-DEFEAT-AXIS, D-HP0-AXIS — one brief.)* Blocks CF-10's boss-defeat STATE,
CN-7's resolution scene, and SL-1's death polish. TODO_CANON (game): the Composure/Withdrawal fight
consumes no HP=0, so the boss neither dies nor staggers (QA image-critic recorded Boss HP 0/100 while
Composure 100/100 and the fight continued).
(BE_0002 wins by the polo's hold breaking and Rangku freed, not a corpse); violates §17.1 (a
coerced-victim host) + the RULED win-condition enum (T99 §5.1 REDUCE "never a pure DPS check") + the
zero-enemy-stat-delta headline.
non-lethal pressure/stagger track.** On win-condition met → a boss defeat/withdrawal state plays the
canon resolution (FREE → the hunter is freed and exits; PACIFY → yield; PURGE → the manifestation
purged). HP=0 retained only as a fallback safety valve, routed to the same withdrawal state, never a
ragdoll. Matches Pillar 8 + the observable-thesis invariant + no-dead-end (§2.5). *(ws1_feel Alt-2 ==
ws3_prog REC(a) == this — the drafts converge.)*
recommendation folds a thin C-flavored stagger READ into B for feel (HP-0 → brief stagger, no death).
Strongest objection to B: a pure-pressure boss can read as un-killable to an action-RPG player
expecting an HP payoff — mitigated by the Composure-break MOMENT (CF-6) as the visible kill-beat, and
the thin stagger read. Small data dependency: the win_condition/win_shape columns need
back-filling on the 16 slice boss rows (declared T99 §4, back-fillable from phase prose) — rides the
same commit as the CF-10 shell once ruled. **This touches the combat pillar (system-canon) — briefed
for Josh; the greybox has no death state to wire until it is ruled.** Reversible (a defeat-state swap),
so erring toward the canon-honest FREE model is the cheap error.
Same-message rulings (2026-07-24 evening): naga naming — the Ch-2 pair stays **"the Kelimutu
Guardian"** (naga reserved for Ch-3's naga tana; the Ch-3 retro-framing dialogue link adopted as
enrichment). The Ch-2 two-of-three counter-class scope stands (parry debuts at the Ch-3 caci;
the primitive builds now). The Vril Sight label fix ruled + applied (CH_02.md corrected per
the reconciled registry/T1/D-06 model). The elemental weakness chart is SUPERSEDED — Josh
AUTHORED a full matrix incl. hybrid schools (lightning/life/poison/mud/smoke/steam+, trade-skill
ties, consumption costs) in the GDD / original humanity docs, possibly Drive-only; recovery sweep
ran; NOTHING elemental is minted until it is recovered (Ch-2 thermal-only stands interim). See
docs/FUN_REBUILD_PLAN.md §4 for the annotated briefs.
What: four explicit Boss_Encounter columns — has_nonkill_path, pip_count, pip_reveal_threshold,
defeat_protected — landed on the built registry-extension rail (docs/registry_extensions.json
combat-encounter ownership; schema-dictionary §4.1 annotated; fidelity re-baselined), with the 16
Ch 2-5 slice rows populated. Why director-ruled, not flagged: the columns are the direct mechanical
encoding of Josh's two same-day verbatim rulings (the chain-meter spec; "can't free everyone… reduced to
25% or less health… for the pips to show up") — schema/tooling execution of a ruling already issued, per
the reframed cardinal rule; blocking the marquee mechanic on a re-confirm would be the over-conservatism
defect. Ratifiable shapes (adjust any value at leisure): Rangku 5 pips @ 0.25 reveal · Kelimutu
guardian 5 @ 1.0 (test-from-the-start) · Ch-4/5 encounters 7 · pips EMPTY on the three non-chain
encounters (polo refusal-pick, Chelvan information-layer, devaraja baray-puzzle) · Naga Padoha the one
defeat_protected TRUE (his row's own J10 cosmic-subdual-nonkill Batak-binding target_type). Remaining
265 rows populate per chapter at factory time; empty = not-yet-populated, NEVER kill-only.
docs/ROADMAP_POST_5090_TO_SHIP.md Decisions register)These are ship-facing / post-5090 Josh-tier forks, not pre-5090-window decisions. Full options +
recommendation + strongest objection live in the roadmap; referenced here so the window leaves each seam
addressable.
(generated hero/canonical lines only; bulk/ambient stays subtitle). The FText subtitle floor + the
CN-4 dialogue-box seam are BUILD-NOW now; the VO payload is DR-AU2 (GATED-5090).
Josh's business call; no pre-5090 build depends on it.
loop is prohibited from setting it.
inventory, world-state, the un-pruned seventh vril-seat). Proposal-tier, pending Josh; NOT in the
window. The save/progression waves (PG-6, W8) leave the carry-over seam addressable, nothing more.
map exists (T1_Integrity_Paths §3.2, docs/INTEGRITY_DELTA_MAP.md). Creative-within-vision: derive
from the §3.2 band midpoints under the tuning firewall — ruled + applied, not a Josh flag.
---
T2 / GATED-5090 payload (VFX, meshes,PBR, music, VO, SFX, MRQ/MetaHuman) is a DROP-IN over a socket this window builds — proposed against
benchmarks that have not run. The AssetGen PBR texture leg is genuinely unsolved as of 2026-07-15.
on placeholders (directive #1). The density/fidelity climb — the enrichment pass over the seed-rich
early chapters — is explicitly post-5090 curve work.
weeks. The "2-3-week window" is Josh's hardware ETA, not a delivery promise; the factory throughput is
a range the first post-slice chapters must MEASURE.
pillar) are Josh-pending with recommendations ready — the loop flags, it does not rule. The 3 ship
briefs (VO / Steam-format / pricing) are Josh's business calls.
the LOCKED pillars/vision/structural-skeleton/numerical-canon (185/72/22/120/33/10/163/42; 16 slice
bosses; LINK_0186) are consumed, never changed. Where an item rests on a 0-byte recovery file (DR-2,
DR-8), the 0-byte file IS the absence-proof and is flagged for confirmation against the live wiring.
against all 8 sections (217 unique items after dedupe); the RECONCILIATION LEDGER is the audit trail,
and any item not appearing in a wave is a defect to be surfaced, not assumed absent.
reachability, data integrity, the coverage curve). Fun/feel/does-it-land, the care backstop beyond the
mechanical §17.1 validator, and the reference-title bar are Josh's ceiling calls, routed to the
J-cadence packet, never to a bug record.
---
*End of PRE-5090 BUILD PLAN — VOLUME 2.*