Gap audit 2026-07-29 - the SYNTHESIS: twelve cross-lane CRITICALs
Verbatim from workflow wf_d0ca605f-891's synthesis record. Ten lanes returned 112 findings; 49
collapsed into the twelve entries below and 63 survive standalone, for 75 survivors. Register
entries GAP-133 to GAP-144. Nothing here is edited: the register fold cites this file, and the
compact register entries cite the LANE_*.md siblings.
GAP-133 CRITICAL - The dialogue and voice lane has neither a data model nor a bill of materials — four universal hard lines are structurally unrepresentable and the [...]
Vision rules. T0_Hard_Lines HL_0039/HL_0040/HL_0041 (authority CVD §17.8, applies_to_chapter_range=universal, status=canonical): "Every dialogue moment surfaces six options"; "All six... fully written and fully voiced. No procedural generation. No template-fill." T1_Build_Pipeline_Contracts [ACTIVE v1.0] §6.5 declares the logical model (dialogue_node_array: node_id, dialogue_type, six_option_array, branch_target_array); §4.6 declares voice_signature_ref + dialogue_dataset_ref as column adds on Character_Index / Antagonist_Network / Boss_Encounter / Chapter_Index / Region_Index; §4.9 makes both a BUILD HALT condition. D-VO-POLICY RULED PARTIAL VO (ROADMAP_POST_5090_TO_SHIP.md L565-567). T99_Translation_Audio Voice Step 1 requires a beat-actor roster feeding T0_Voice_Registry.
What exists (verified). VERIFIED: §6.5's 'Physical file' clause pins the DD CSV at six flat columns (line_id, speaker_ref, trigger_beat, line_text, condition_expression, loc_namespace_key) — node_id, dialogue_type, six_option_slot and branch_target are not columns, so a six-option node and a branch edge are unrepresentable. docs/quest_dialogue/ DOES NOT EXIST (ls: No such file or directory; sibling docs/spine, docs/translation, docs/proposals all list). A positive-controlled header scan of ALL 62 registries returns ZERO columns matching dialogue_line, vo_tier, voice_signature_ref, generating_model, model_licence or bark — while the same scan returns T0_Status_Table.icon_class, T0_Theme_Registry.recurrence_anchors and voice_register_ref (on Ally_Behavior_Policy / Bonus_Option / Motif — NOT on T0_Voice_Registry), so the scan reads headers. T0_Character_Index = 164 rows × 33 cols carrying voice_signature_NOTES (prose) and mesh_id_ref/generation_status (the sibling §2.6 adds LANDED — positive control) and no voice_signature_ref, no dialogue_dataset_ref. T0_Voice_Registry = 23 rows × 19 cols (elevenlabs_voice_id_ref hardcodes one vendor). BOM measured from build/spine_rows/*/beats.csv: 206 distinct actor tokens arc-wide, 86 distinct in the slice (CH_PROLOGUE + CH_01..CH_13) — coverage is the protagonist plus four age variants, i.e. 1 speaking entity of 86; the 13 cultural_register rows carry speech_shape/translation_rule for TEXT and none of BPC §4.5's eight voice sub-fields.
Delta. [75 total survivors — 112 lane findings deduped: 49 collapsed into the 12 cross-lane merges below, 0 killed as already-covered by a live rank; 2 downgraded in scope by live coverage (rank 17 owns half the engine-authored-CSV gap; U11.15 owns the ability-only reveal field). Reported here: the top 12. Next tier of survivors, all MAJOR: no loudness/mix doctrine or audio perf budget · no music cue/stem/transition table (music_cue_id_ref is an FK to no table; the queued Appendix-S fix collides on cardinality) · CN5.2 shot grammar absent from the live plan · facial/lipsync uncounted · mocap-vs-keyframe routing unowned · 175 free-text faction tokens with no keyspace · attackability_tier 8/164 and node_class 5/76 unpopulated · companion out-of-combat life has no policy class · the trade product catalog and the six §9.1 cross-trade unlocks unhomed · no T1 doc owns items/economy · Attunements accessibility roster unenumerated · input-glyph substitution absent while shipped prompts hardcode keys · typography for 87 diegetic scripts · reveal-gate data for every non-ability screen · save-migration protocol structurally unimplementable (11 of 46 rows non-semver, 10 with no default) · no ship-build identity/patch/symbol posture · no Shipping fence on the agent plugins · zero cinematic/animation teeth in the 22-harness belt · QT-5 id collision · trade/familiar-bond arc anchors 0/10 and 0/21.] The lane's unit of work has no id, no table, no producing script and no speaker edge, at any grain. Q3.1 is queued to CREATE docs/quest_dialogue/ with the pinned six-column header — which bakes the defect as data. Separately the two post-ruling chain docs (T99_Translation_Audio §2.4, PIPE_VOICE_2026-07-29 §1) route D-VO-POLICY's "stays subtitle" classes to Kokoro synthesis with no ruling — an unflagged contradiction against a ratified decision.
Blocking. Q3.1 (BUILD-NOW) lands the wrong header the moment it runs; Q3.2's six-option selection engine has no shape to read; the ratified §4.9 halt conditions guard columns that do not exist, so they can never fire. Hits at the first Prologue→Ch 13 dialogue authoring pass and at Gate 1 (Ch 2-13 P3 exit) — inside the pre-5090 window, with all 66 dialogue-anchored scene rows unbindable.
Proposed home. Amend T1_Build_Pipeline_Contracts §6.5 to a node+line DD shape (or mint T0_Dialogue_Line with node_id / dialogue_type / six_option_slot / branch_target / vo_tier) BEFORE Q3.1 creates the directory; apply the §4.6 column adds across the five entity registries in one deterministic commit with fk_spec enrollment both directions; emit the voice roster from beats.actors via a harness script; fold the Kokoro-vs-D-VO-POLICY contradiction into the rank-18 bundled brief.
GAP-134 CRITICAL - The factory contract's chapter axis is blind to nine content classes — 70 riders with a verified zero for interiors, water, weather, vendors [...]
Vision rules. docs/FACTORY_CONTRACT.md §1 states the design: "The checklist is DERIVED. A rider added here reaches every future chapter automatically... A landing that makes a per-chapter promise declares an OWNER: line and a rider row in the same commit. Gate 30 fires the day a promise lands uncited." PRE_5090_BUILD_PLAN.md rank 2.5 mints it as "the per-chapter obligation register... it answers 'for Ch NN, what must be true?' and makes every rank after it self-wiring", with the ruled freeze constraint: "Rank 2.5 lands BEFORE ranks 13-17 — the schema-freeze ranks emit rider rows rather than retrofit them." ROADMAP_POST_5090_TO_SHIP.md L489 promises per chapter that "under-sized settlements expanded and interiors deepened".
What exists (verified). VERIFIED by machine count of docs/factory_contract.json: 70 riders. Token census over the rider set — interior 0 · water 0 · weather 0 · dwelling 0 · vendor 0 · currenc 0 · merchant 0 · journal 0 · icon 0 · equip 0 · consumable 0 · gather 0 · crowd 0 · villager 0 · schedule 0 · attackability 0 · faction 0 · cinemat 0 · audio 0 · music 0. POSITIVE CONTROL, same scan, same file: quest 8 · string 6 · dialogue 3 · sfx 2 · cue 1 — the pattern matches real rider text, so the zeros are real. The adjacent riders are vacuous or mis-pointed: FR-039's audio half declares data_home registry:T0_Festival_Registry#chapter_range (a FESTIVAL column) with tooth NONE; FR-033's amplification half cites source doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.md with verified-by NONE; FR-029 (the only NPC-dialogue rider) carries data_home NONE_YET(rank 11) and consumption_point NONE_YET(rank 11) while rank 11 delivers a PERSONA registry, not a dialogue home — so it reads legitimately-pending forever. Independently verified: grep -i interior returns 0 in docs/FACTORY_CONTRACT.md, 0 in docs/PRE_5090_BUILD_PLAN_VOL2.md, 1 in docs/ROADMAP_POST_5090_TO_SHIP.md (the doctrine sentence itself).
Delta. The single mechanism built to stop per-chapter promises from becoming orphans has no row for nine of the content classes the roadmap promises per chapter. Every gap below therefore recurs on all 79 nodes BY CONSTRUCTION, and gate 30 stays green because a rider that does not exist cannot fail. This is the highest-leverage single fix in the audit: it is the only artifact that converts a one-time finding into a permanent per-chapter obligation, and the ruled freeze order makes it materially cheaper now than after ranks 13-17.
Blocking. harness/emit_chapter_checklist.py output for every Ch 2-13 node TODAY — the next chapter build silently inherits no interior, water, weather, item, vendor, journal, crowd or cinematic obligation. Then ranks 13-17, which emit their riders at freeze time: riders added after the freeze are exactly the retrofits rank 2.5 exists to prevent.
Proposed home. One commit adding ~10 riders to docs/FACTORY_CONTRACT.md + docs/factory_contract.json with real registry:/path: data_homes and named teeth (chapter audio rows · interiors authored · region water bodies typed · weather/time-of-day per beat · chapter item + material/gather bill · vendor + accepted goods · exchange medium declared · journal entries · quest rows · persona schedules), re-point FR-029 at the gap-1 dialogue home, replace FR-039's festival data_home and FR-033's doctrine_only source, and re-run gate 30's R1/R2/R3 scan.
GAP-135 CRITICAL - The slice's authored content has no producer: zero quest rows for Prologue→Ch 13, an unminted Pillar-6 journal corpus, and 87 region seeds outside [...]
Vision rules. The slice is RULED PROLOGUE→CH 13 — 14 nodes / 15 region-legs, and "THE EA BOUNDARY — the full slice ships as the Early Access base; no early cut" (PRE_5090_BUILD_PLAN.md SLICE RESCOPE). CVD §11.1: 22 buckets, each Trade/SQ bucket 1M+ words. CVD §5 Pillar 6 makes the journal a gated pillar with an executable test ("Canonical beats Ch 13/38/57 missing = pillar violation") and cross-refs T0_Journal_Entry_Template_Registry. docs/proposals/QUEST_SEED_HOUSING_LEDGER.md carries Josh's governing instruction (2026-07-22b): "the seeds and weaves are headed for quest writing and must not be lost... UNROUTED is the default, so a seed nobody has placed shows up as an open row rather than as silence", gated by harness/check_seed_housing.py.
What exists (verified). VERIFIED. T0_Quest_Definition_Registry [ACTIVE v1.0] = exactly 16 rows, all endgame/prologue/epilogue (Ch 55/58/76/77/PROLOGUE/EPILOGUE) — ZERO rows for Ch 2-13. T0_Quest_Seed_Registry = 1 line, header only, ZERO rows (POSITIVE CONTROL: sibling T0_Source_Material_Registry reads 1915 lines by the same reader). No T0_Journal_Entry_Template_Registry exists — not among the 62 registry directories (POSITIVE CONTROL: the same listing returns all three T0_Quest* directories); journal_entry_id occurs once corpus-wide, inside WS_010's own description cell; and the positive-controlled 62-registry header scan returns ZERO journal columns anywhere. harness/rag/seed_housing_index.py sources exactly two trees — read directly: L28 QUEUE = docs/proposals/quest_seed_queue, L29 EXR_DIR = docs/book_extractions; quest_seed_queue/ holds 11 shelves (angkor-khmer, bali, cross-cutting, esoteric, fairy-literary, flores-indonesia, malay-world, rome-italy, sumatra-batak, sumatra_java, vietnam) and NONE of the eight Ch 6-13 slugs. POSITIVE CONTROL on the ledger: grep for the eight slugs across QUEST_SEED_HOUSING_LEDGER.md returns 2 hits, both the prose word "Ethiopia", while "bali" returns 56.
Delta. Ch 6-13 is 8 of the 14 slice nodes and 9 of the 15 region legs, and no ranked item, no VOL2 wave item and no R-3x item authors a quest row, a journal entry or a seed row for any of them. Rank 10 is scoped to the 264 seeds on the four BUILT regions; rank 15 populates Quest_Definition's execution COLUMNS on the existing 16 rows; rank 23 mints trade tier-gates. So the EA base ships with a quest registry naming no quest inside it, a journal shell (U11.18, correctly empty) with nothing to fill it, and 87 authored Section-13 seeds outside the exactly-once contract — the silent-loss class this repo has already been burned by (memory: silent-data-loss-chunk-id-collapse).
Blocking. Gate 1 (Ch 2-13 P3 exit) and Gate 2 (full-slice exit, which opens P4). The seed half bites rank 10 directly — the pass that mints Quest_Seed rows cannot see 87 of the seeds it is meant to type. The journal half bites the Ch-13 closing beat (the amulet and journal passing to the healer's child at the departure), Gate-2 content with no data to render, and Q3.6's journal assembly has nothing to assemble from.
Proposed home. Three landings: a new window-plan rank 'Ch 6-13 main-story quest decomposition + SQ stage rows' reading build/spine_rows/CH_06..CH_13 beats.csv into T0_Quest_Definition_Registry; mint T0_Journal_Entry_Template_Registry per the CVD Pillar-6 cross-ref with Ch 13/38/57 as hard anchors; extend seed_housing_index.py's source set to _source/02_Tier_2_Region_Pages/*.md Section 13 plus a check_seed_housing coverage assertion that every page with a Section 13 contributes ≥1 ledger row. All three enter the factory contract as riders (gap 2).
GAP-136 CRITICAL - The canon→engine trunk has no cross-repo tooth: 23 registries with no row struct, 4 ws.* variables with no addressable tag, 32 DataTables with no C++ [...]
Vision rules. CLAUDE.md authority chain item 4 + game-repo CLAUDE.md L27-28: "The T0 registries (registries/**/*.csv) — structured canon. Consume via DataTables." docs/REGISTRY_ROW_STRUCT_SPEC.md §5 records the debt verbatim and forbids the bulk fix: "62 registry CSVs against 48 generated headers (19 stale, 23 absent). Do NOT run gen_row_struct.py --all --apply until that backlog is reconciled deliberately." Source/Humanity/Public/Quest/GeneratedWorldstateSchema.h L7-8 states the tag contract: "Each ws.* variable also gets a native gameplay tag \"Humanity.WS.<variable_name>\" so the durable UWorldStateSubsystem (FGameplayTag-keyed) is addressable by variable name with no hand authoring." Memory anti-orphan-wire-everything-doc-map: every artifact needs a consumer.
What exists (verified). VERIFIED by count on both trees: registries/ = 62 CSVs; Source/Humanity/Public/Data/*.h = 48 row structs; Content/Data/Registries/DT_*.uasset = 46. The absent set carries 1,787 rows (Arc_Grid 1231, Promise_Ledger 125, Arc_Index 128, Element_Effectiveness 124, Composure_Routing 53, Festival 16, Ally_Behavior_Policy 14, Rarity_Grade 13, Bonus_Option 12, Realm_Ruleset 11, Status_Table 10, Bonus_Pool 7, Role_Axis 7, Arc_Grammar 6, Spec_Purpose 6, Dungeon_Class_Reference 5, Familiar_Bond_Ability 5, Imprint_Affix 5, Role_Composition_Rule 4, Loadout_Set 3, Equipment 1, Motif 1, Boss_Attack_Rail 0) — this set IS the eight rank-14 item/gear registries the items lane reported separately, deduped here. The invisibility is structural: Tools/registry_import_manifest.json derives its entries FROM the headers (count=46, entries=46), so a registry with no header reports 46/46 green. Worldstate: T0_Worldstate_Variables = 46 rows (verified; last row WS_046 item_instance_ledger) against exactly 42 UE_DECLARE_GAMEPLAY_TAG_EXTERN lines in GeneratedWorldstateSchema.h, whose own L2 self-declares "(42 rows at generation)" — WS_043..WS_046 (bonus_selection_state, bonus_respec_ledger, loadout_set_state, item_instance_ledger) have no native tag, so TagForVar() returns an invalid tag rather than a build error. POSITIVE CONTROL on the tooling zero: a machine scan of harness/gates_config.json (34 gates) returns 0 for every cross-repo term and 0 for gen_row_struct, while gen_row_struct is cited 53 times across 15 canon docs — the tool the trunk depends on has never been armed. Consumer direction: 17 DT paths are referenced from Source/, 3 of those assets do not exist (Clue, ElementMatrix, HollowTrickPalette — all honest, null-safe, TODO_CANON-flagged), leaving 14 of 46 with a C++ consumer. HONEST LIMIT: the Blueprint direction is unproven — a binary name-table scan cannot match (the control DT_BossPhase also returned zero), so the claim is 'no C++ consumer', not 'no consumer'.
Delta. 1,787 canon rows have no engine home and no error, four ratified worldstate variables are unaddressable, and no gate in either tree reads the seam. Rank 2 covers the 19 STALE headers only ("regenerate the 13 drifted row structs") — not the 23 ABSENT — and the spec explicitly forbids the bulk apply that would create them. So rank 2 cannot land green as scoped: wiring gen_row_struct --check over --all goes red on 19 stale + 23 absent, a decision that rank does not own.
Blocking. Rank 2 first (it cannot land green as written). Then rank 14, which is minting rows against WS_043-046 right now — the LOADOUT_SETS_SPEC / DEATH_CHOICE / RIFT_DUNGEON Wave-3 specs all home on ws.* keys, and zero engine symbols exist for LoadoutSet/BonusSelection/ImprintAffix/RarityGrade/SpecPurpose. Then ranks 13-17, which freeze schemas onto registries with no engine consumer to validate the freeze against.
Proposed home. One harness/check_canon_engine_trunk.py gate asserting all four hops (registry↔struct, struct↔DataTable, registry↔manifest entry, ws.* row↔native tag) with the game tree read-only, enrolled in gates_config.json and landed BEFORE the reconciliation rank so the reconciliation has a scorecard to close against; register gen_worldstate_schema.py in DOC_MAP alongside gen_row_struct.py; widen rank 2 from 13-drifted to the full 62-vs-48 reconcile.
GAP-137 CRITICAL - The QA loop — ruled the ONLY player until the Josh gate — has no clock, no floors and no instruments: the nightly belt skips the suite, zero QA teeth [...]
Vision rules. CLAUDE.md model seats: "The AI QA loop + image/feel critics are the ONLY players until then — every play-quality claim carries its critic-read evidence trail." AI_QA_LOOP_ARCHITECTURE.md §4.1: "Per-increment (I). On every commit: the Tier-1 functional pack plus the full accreted regression suite run headless"; §4.2: "Gates are non-zero-exit floors... a missing expected frame blocks the wave." VOL2 §11.5 QT-21/QT-22: "is this bug back" must be "the regression test going red again, never an argument", and the harnesses "ride run_gates.py (canon-side, unpiped, green-before-land)". QA_WATCHING_PROGRAM.md §1.5 rules six feel funnels; §2.1 rules that gating verdicts are sampled_invariant arithmetic, never critic prose. ENGINE_OPTIMIZATION_DOCTRINE.md §1.1 rules the frame-rate canon (30/60/120 fps with named ms budgets) and §1.5 requires two clauses verbatim in the ship spec: "60 fps at 1080p internal... with frame generation off" and "60 fps HELD, not 60 fps average."
What exists (verified). VERIFIED four ways. (1) THE CLOCK: Tools/run_soak.py L130 builds cmd = [sys.executable, RUN_QA, "--map", map_key, "--skip-tests"] for all seven belt maps — the only scheduled cadence disables the suite on every run. 67 automation tests / 79 test ids exist; no CI workflow, and the game .git hooks are Git-LFS stubs. POSITIVE CONTROL: --skip-tests is a real flag and Tools/run_tests_chunk.py executes the filter when it is absent, so a run WITHOUT the flag would have matched — none is scheduled. (2) THE FLOORS: machine scan of harness/gates_config.json = 34 gates, token census capture 0 · qa_ 0 · bug 0 · perf 0 · frame 0 · soak 0 · anim 0 · cinemat 0 · audio 0 · sfx 0 · cue 0 · quest 0 · journal 0 · icon 0 (POSITIVE CONTROL: the 34 canon-gate names print from the same file). So a red capture session, an invalid bug ledger or a stale verdict cannot block a landing in either repo. (3) THE VISUAL INSTRUMENT: seven capture scripts declare 50 shots; harness/qa/capture_expectations.json declares 9, all greybox_* — measured intersection 9 of 50, leaving 41 with nothing to judge them against, and read_captures.py's no-expectation path is a WARN that never fails. (4) THE FEEL AND PERF INSTRUMENTS: grep for RecordAttackPhase|RecordPlayerAnswer|RecordInputLatency|RecordHitStop|RecordStagger|RecordCameraSample across the game Source/ = ZERO hits (POSITIVE CONTROL: PlayHitStop resolves at four sites in HumanityCombatFeelSubsystem.cpp and five other Record* functions exist in CombatTelemetrySubsystem.h — both halves of the search can match). harness/qa/ holds exactly bug_record_schema.json, capture_expectations.json and fixtures/ — frame_record_schema.json (ruled QS-0, the declared precondition for all nine sequence teeth) is ABSENT, and bug_record_schema.json contains 0 occurrences of motion_class with additionalProperties:false, so the ruled anti-still-frame field is structurally rejected. In ROADMAP_POST_5090_TO_SHIP.md — the doc owning the zero-bug bar and the P4 exit — fps / frame time / p99 / profil all return 0 against zero-bug ×10. And verified zero InjectInputForAction call sites in the game tree (the one hit is a comment; control AddMappingContext resolves).
Delta. Every play-quality, feel, regression and performance claim rests on a human or agent remembering to invoke a script, and four of the instruments those claims cite do not exist. QT-22 is written in the present tense about machinery never built. The BUG-0010 failure (declared fixed from a frozen pose) and BUG-0012 (a boss inverted through a whole cycle while every still-frame tooth stayed green) are closed by one bespoke test, not by construction — and the ruled fix for both cannot be written into the schema that rejects it. The only player poses the game for photographs rather than playing it, so "the machine played the build tonight" and "the machine photographed the build tonight" produce identical artifacts.
Blocking. Benchmark day is imminent (box arrives 2026-07-30) and KT-3 will emit verdicts against a four-class harness ladder whose mid_range_pc row pairs target_fps 60 with a p99 ceiling of 33.3 ms — the 30 fps frame time, exactly the "60 average with hitches" §1.5 forbids, with provenance canon_illustrative. Before that, every Ch 6-13 content wave lands into a slice whose regression signal is manual and whose 41 uncovered nightly shots warn silently. And Gate 1's premise — that the machine already played what Josh is about to — is unsupported.
Proposed home. Five zero-model-spend landings: drop --skip-tests from the nightly belt (or add a full-filter leg writing a dated verdict); enroll qa_captures + qa_ledger teeth in gates_config.json with must-fire/must-not-fire fixtures; grow capture_expectations.json to one entry per declared shot and promote the WARN to FAIL at a declared floor; mint harness/qa/frame_record_schema.json (QS-0) plus motion_class + the typed regression_test_ref with all 23 bug records backfilled; add the six feel funnels at their existing call sites and a --perf leg sampling the live BenchSampler, then re-lock bench_criteria.json onto the ruled three-class ladder and add the two §1.5 clauses to the P3/P4 exits.
GAP-138 CRITICAL - The item economy has no content, no vendor side, and its ruled exchange model has no data home — Equipment is 1 row, materials cover 4 of 13 slice [...]
Vision rules. Ruled twice: VOL2 D-ECONOMY-MEDIUM (Josh, Opt B) — "historically real mixed exchange per region... a medium_of_exchange token on Region_Index, vendor mechanics as a P2.6 inventory consumer" — then sharpened at DECISIONS_PENDING_JOSH fourteenth sitting item 7: "(b) — fully diegetic regional exchange media in-world + ONE presentation-only trade-value lens in the ledger UI (displayed, never stored, never spendable; the world only accepts goods)." T1_Combat_System_Spec §13 names the imprint targets ("weapons, armour, off-hand items, grenades and bombs, potions and poisons") and §5 makes Alchemy potions one of only three health-restoration channels. T1_Trades_Master §9.2: "Scarcity is real because materials are specific to geographic regions... solo players engage trade interdependence through NPC trader networks."
What exists (verified). VERIFIED by direct row/column reads. T0_Equipment_Registry = 1 row (EQ_0001 Mother's Amulet, whose own notes say "never rolled or crafted... never an imprint base") against T0_Weapon_Registry's 72 — POSITIVE CONTROL: the same reader returns 72 weapons, 150 creatures, 281 bosses, so equipment is genuinely 1. medium_of_exchange occurs in exactly TWO files repo-wide (docs/PRE_5090_BUILD_PLAN_VOL2.md and docs/pipeline_review/MINT_DESIGN_B_ITEM_ALLY_2026-07-27.md) and in ZERO registries; T0_Region_Index's 26 columns were read in full and contain no economic field. The positive-controlled 62-registry header scan returns ZERO columns matching vendor, currenc or exchange (control hits in the same scan: Status_Table.icon_class, Theme_Registry.recurrence_anchors). The material spine was measured by grouping the live CSVs: T0_Mineral_Registry 19 rows, T0_Flora_Registry 25 rows and T0_Gather_Node_Registry 24 rows key EXCLUSIVELY to flores_island / bali / sumatra_java / angkor_khmer — nine of the thirteen slice regions have ZERO material or gather rows, while their eight region pages are measured ON DISK at 20/20 template sections each (rank 10's own rescope rider). T0_Imprint_Affix = 5 rows, all affix_name_text EMPTY, string_status placeholder. 15 merchant/trader characters exist in T0_Character_Index with no stock, accepted-goods or market row anywhere.
Delta. A ruled world rule with a named landing target has no column five days after the ruling, and VOL2's own EC-medium row still reads the pre-ruling state. Nothing sizes the item BOM the way 72 weapons was sized — CVD §17.12 numerical canon carries no item number and no Josh brief asks for one. VOL2's FL-2 and MN-2 are scoped "the 4 regions" by their own text, and no rank or wave extends the material spine to Ch 6-13, so the gather→craft→trade loop silently stops at Ch 5 while the build order runs Ch 2-13 first. The density instrument is blind to all of it: the QT-17 content-budget vector enumerates ten axes with live counts and contains no item, loot, material, gather-node or vendor axis — which is exactly why the four-region stop went unnoticed while the gates stayed green.
Blocking. The first Ch 6+ build leg (DR-6 gather-node staging reads flora/mineral stable ids that do not exist for nine regions); the first buy/sell/barter beat and the first non-weapon reward in the slice; rank 26's RNG_Drop_Table rows, whose payload_kind enum includes equipment with an empty catalog to point at; and P2.6, which admits its own hole ("Equip/stash/weight SPEC is a Josh gap"). The Region_Index column should ride rank 30's environment-rail edit rather than becoming a second schema touch on a 76-row ACTIVE registry.
Proposed home. A Josh-facing item-sizing brief on the 72-weapons precedent; medium_of_exchange + an ordinal trade_value_basis added with rank 30's rail, with the value lens specced presentation-only in rank 20; T0_Vendor_Registry keyed to the 15 existing merchant characters; a ranked pass extending Mineral/Flora/Gather to the nine remaining slice regions off each page's Section 2/9/14 prose; item/material/gather/vendor axes added to the QT-17 vector before check_slice_scorecard.py is written; mint T1_Items_and_Economy_Spec as the missing domain authority.
GAP-139 CRITICAL - Rank 11's persona mint — a LIVE P1-EXIT rank — omits the daily-rhythm, occupation and population axis its own queued consumers are specced to read
Vision rules. ENTITY_PERSONA_SYSTEM.md L37 own_life: "the entity's daily rhythm and independent existence... This is the field that makes the world feel populated rather than staged"; L267's thirteen-field spine includes own_life. §2.3 tiers ambient entities to "a persona bucket, not an individual bible" citing "a crowd of forty sharing six persona buckets". §2.4.1 teaching_role names "the trade home base... and the mastery-tier progression they gate". VOL2 LW-9 orders "author the slice's ambient/named personas (own_life daily-rhythm, web_edges)"; DESIGN_GAP_REGISTER #2 recommends "one shared schedule component with a 3-4 state enum (home/work/social/sleep)". Memory regions-are-relational-webs-not-villages.
What exists (verified). VERIFIED both ends. The mint spec omits the field: ENTITY_PERSONA_SYSTEM.md L218 enumerates the T0_Persona_Index columns as persona_id, anchor_ref, entity class, persona tier, care band, significance-lens set, persona-doc path, runtime class — own_life is NOT among them (it lives as prose in a persona doc, unreadable by a runtime component). The data layer has nothing: a positive-controlled header scan across ALL 62 registries returns ZERO columns matching schedule, routine, occupation, population or crowd — POSITIVE CONTROL, same scan, same files: it returned T0_Status_Table.icon_class, T0_Motif_Registry.recurrence_nodes, T0_Arc_Index.depth_grade and voice_register_ref on three registries, so the scan reads headers. T0_Character_Index's 33 columns (read in full) carry role (164/164 populated, with the occupational fact buried unnormalized in the slug — aksumite_coffee_ceremony_mistress, manggarai_cotton_ikat_weaver) and no occupation, trade, home_site or work_site field. The queued consumer states its own blocker: VOL2 LW-8 "Ambient-NPC presence/schedule... no schedule field in Character_Index". The Zone Catalog's 18 columns carry no occupancy field (footfall_surface is the false friend — walk-surface foley), and the only population metric in the QA budget counts NAMED personas (QT-17 reads "personas (T0_Character_Index 163)") — 164 rows for 79 nodes, ~7-8 per slice chapter.
Delta. Rank 11 is LIVE, ranked and a P1 EXIT criterion — and it is about to author complete personas on every slice entity against a column list that cannot hold the field LW-8, register #2 and the trade lane are all queued to read. A column added after the mint is a retrofit across every slice persona row; LW-8 at W-LW3 then stalls or ships mannequins. There is also no number anywhere for how many people a village, market, port or trade compound holds, and no bucket roster to pool ambient NPCs onto, so rank 5's crowd mesh/material budgets cannot be sized. This is the sharpest cost-asymmetry finding in the audit: the fix is a spec amendment to a rank that has not started.
Blocking. Rank 11 itself — the last cheap moment. Then rank 5 (asset budgets need crowd counts), rank 23 (a trade home base with an upgrade ceiling and no practitioner roster reads as a prop), and W-LW3 staging, which would otherwise certify "a lit ambient-village frame" against no target.
Proposed home. Amend ENTITY_PERSONA_SYSTEM §5.2 BEFORE rank 11 mints: add schedule_state_set (home|work|social|sleep), home_site_ref, work_site_ref, presence_window, occupation_ref/trade_ref, plus a child T0_Persona_Schedule table for multi-window personas and a T0_Persona_Bucket table keyed from each region page's Section-4 role prose; add ambient_population_band to the Zone Catalog rail; enroll all FKs in fk_spec.json in the same commit.
GAP-140 CRITICAL - The moving-image lane has no data home and no bill of materials — the RULED twelfth DR-2 animation class was never landed, 450 authored scenes are [...]
Vision rules. RULED: docs/pipeline_review/tech_research/STACK_CONFLICT_ADJUDICATIONS_2026-07-29.md C-13 (verified verbatim at L74-80) — "ANIMATION's Animation / montage row (keyed ability_id + presentation_tier_ref) takes DR-2 ordinal 12", with PC-5 ruled canon-row-authoritative and "the QT-5 divergence check ships as a must-not-fire fixture before the first montage imports." RULED: Josh, fourteenth sitting, OPTION (A) FULL PER-TIER VARIANTS with the band-collapse recommendation OVERRULED — "every spell and ability and movement needs to be beautiful and fluid art" at full strength. ROADMAP_POST_5090_TO_SHIP.md P2.7 exit: the slice's cinematic events render as real cinematics with MRQ dailies read by critics. T99_Translation_Cinematic §3 routes seven scene categories through a director-in-loop vs autonomous two-track workflow. Fork C / DT-3 route the story load at every chapter seam to "the authored bridging scene (chapter_bridging_cinematic)".
What exists (verified). VERIFIED. docs/ASSET_DROPIN_CONTRACT.md contains 0 occurrences of animation or montage (machine count) — the ruled twelfth row has no landing vehicle, and C-13's own consumers list does not name the DR-2 row, so nothing is queued to write it. The positive-controlled 62-registry header scan returns ZERO columns matching anim, montage, viseme or facial (control hits named above), so no animation-bearing id exists for the 5090 lane's dispatch ("a script emits rows where generation_status='pending' on animation-bearing ids"). The cinematic BOM: build/spine_rows/*/scenes.csv = 450 rows measured, census per_chapter_cutscene 210 · boss_encounter_resolution 91 · canonical_set_piece 38 · branch_decision_point 32 · boss_encounter_intro 29 · ambient_cinematic 21 · boss_encounter_phase_transition 15 · epilogue_cinematic 5 · prologue_cinematic 4 · architect_appearance 3 · convergence_node 2 — none of the 8 columns is duration, shot count, complexity or production tier, and T0_Scene_Spec_Registry carries only 16 rows (cinematic_status pending 16/16, mesh_refs '[]' 16/16), so 434 scenes have no registry row. chapter_bridging_cinematic is NOT among the 11 live scene_type values — independently re-verified here after FORKC_ANALYSIS's own positive-controlled grep — so all 78 chapter seams have zero bridging rows. The variant sizing is element-keyed: the ruled 248 live / 372 clamp is 31 elements × 8 tier values (verified against T0_Ability_Tree_Registry's 31 distinct element values), while the animation axis is 185 abilities × tiers plus 72 weapon movesets — unenumerated, with presentation_tier_ref declared and EMPTY on both rails (0/185, 0/72; POSITIVE CONTROL: tier_numerical and cast_pattern are 185/185 in the same file) — and the audio half of the same ladder is likewise unsized, with ability_sfx and vril_cast_sfx arrays 0/185.
Delta. A ruling with no vehicle, a 450-row content class with no arithmetic, and one number standing in for three different variant axes. Rank 6 populates scene_type/participant_refs/beat_ref and adds no count, duration or production tier; rank 13 writes ONE presentation_tier_ref per ability row — a single column cannot express a per-tier variant SET, so rank 13 closes green having populated the rail without creating the BOM. Nobody can say how many cinematics Ch 7 needs, which get the director-in-loop track, or what the 79-node total costs; and P5 — the 60-plus-chapter factory — carries zero cinematic or animation mentions against 27 chapter mentions, so the factory that builds the remaining 65 chapters has no moving-image lane at all.
Blocking. The DR-2 clause commit / Batch 0 — the twelfth row must land before it, or the generation_* column family retrofits across twelve registries. C-13's own precondition is already reachable: PlayAnimation calls exist on boss and enemy today with zero notify binding. Then P2.7's stated exit, the first overnight animation batch, the first montage import, the Ch 2→3→4→5 seams (four of the 78), and the Ch 2-13 slice build where the 450-scene scope first bites.
Proposed home. ASSET_DROPIN_CONTRACT §2 twelfth row plus the generation_* / asset_licence_ref column family on the ability, weapon, character, creature, boss and scene registries via Batch 0; a variant-key manifest with separate ANIM, VFX and AUDIO axes at a declared family grain, with register entry 97 amended and ASSET_DROPIN_CONTRACT L296 corrected to name which axis 248/372 sizes; scene_shot_count / scene_duration_class / production_track / cinematic_tier minted on T0_Scene_Spec_Registry with the 434-row scatter from build/spine_rows; a seam-typing pass writing chapter_bridging_cinematic rows for all 78 seams; a scenes dimension in QT-17 and a cinematic lane row in the P5 factory.
GAP-141 CRITICAL - T0_SFX_Registry implements 1 of its 21 ratified columns, the audio bill of materials is uncounted across 79 nodes, and audio has no tooth in the [...]
Vision rules. T0_Schema_Dictionary [ACTIVE v1.3] §3.16 declares 21 required columns for T0_SFX_Registry (sfx_category enum, sfx_subcategory, mood_tags, terrain_substrate, weapon_trait_substrate, magic_effect_substrate, cultural_substrate, era_substrate, recurrence_anchors, track_assignment, generation_method, generation_prompt_hash, last_generated_timestamp, generation_status 7-state, build_asset_path, sound_designer_in_loop_required, regeneration_trigger, primary_source_array, canonical_anchor, hard_line_relevance, sfx_id), mirroring T1_Build_Pipeline_Contracts §10.5; §10.7 runs a 7-state machine on generation_status; §10.4.1 composes every prompt from the substrate columns. §10.2 enumerates the countable BOM (17 terrain × 5 protagonist-state = 85 footstep cues; 17 biome ambients with day/night pairs; wind 4 / water 7 / fire 6; vril-cast identity across twelve tiers); §10.6 declares ten per-registry sfx_id_ref arrays as its consumption homes. Gate 34's own description records the enforcement precedent: "UNPOPULATED-IS-A-HARD-FAIL... the rule that would have caught music_mood_tags reading 79/79 filled while being 0/79 real."
What exists (verified). VERIFIED by reading the live header. registries/T0_SFX_Registry [ACTIVE v1.0] = 30 rows × 20 columns: sfx_id, sfx_name, sfx_class, linked_entity_id, linked_entity_type, chapter_anchor, region_id, vril_density_modifier, integrity_band_modifier, cultural_depiction_required, special_asset_class, cultural_authenticity_source, hard_line_anchors, layering_role, spatial_attenuation, pipeline_consumer, populated_from, notes, extensions, ue_sound_asset_path. Of the 21 §3.16-required columns exactly ONE (sfx_id) is present; 20 are absent and 19 live-only columns stand in their place. sfx_class's four values share ZERO tokens with §10.2's six-value sfx_category enum, and placeholder-vs-final is encoded in a path-string suffix because no status column exists. POSITIVE CONTROL that this is SFX-only, not house style: T0_Theme_Registry's 28-column header was read in the same pass and carries its declared columns including generation_status and generation_prompt_hash. The BOM: 18 of 30 rows anchor to CH_02, so 67 of 79 nodes carry zero rows; the consumption arrays measure ability_sfx 0/185, vril_cast_sfx 0/185, weapon_sfx 0/72, boss_sfx 0/281, chapter_sfx 0/79, with only Region_Index env-ambient 8/76 and ritual 4/76 populated. The tooth: a machine scan of harness/gates_config.json (34 gates) returns sfx 0 · audio 0 · sound 0 · cue 0 · ambien 0 (POSITIVE CONTROL: music returns 1, inside gate 34's own description text), fk_spec.json enrolls only two scalar sfx FKs — none of the ten §10.6 arrays — and 8 of the 30 rows are referenced by nothing anywhere. No artifact multiplies §10.2's enumerations into a number. The positive-controlled 62-registry scan also returns zero creature-vocalization and zero time_of_day columns.
Delta. The divergence is already briefed as [DECISION NEEDED - JOSH] in docs/PIPELINE_ADAPTER.md (2026-07-03, recommendation Option A) and appears on NO live board — zero audio items in OPEN_BRIEFS_2026-07-28.md, zero in OPEN_DECISIONS_FOR_JOSH.md, no window-plan rank — while the registry grew 12→30 rows inside the unreconciled shape, so the migration priced at "12 rows is cheap" is now 2.5× larger and still unqueued. AU-13 is the only queued population item, scoped to "Ch2-5 registry population" with no count and no arc-wide scope, so the most-heard asset class in the game has no seat-hour estimate, no licence-vs-generate split, no 5090 batch sizing and no per-node coverage target. The zone vocabulary compounds it: footfall_surface is 84/84 populated with a 5-value set (stone/earth/water_edge/forest_litter/mixed) of which exactly one token overlaps §10.2's 17, and "mixed" cannot resolve a cue at all — the music_mood_tags failure class on a column that looks green.
Blocking. Rank 8 writes cue rows NEXT into a schema that cannot record a cue's track, category, generation method, prompt hash or sign-off state, and it is scoped per-page and growing with rank 10's twelve-page queue — every page authored before the reconcile is a second pass. AU-13 lands unvalidated ids into the same shape; DR-2 Batch 2 then migrates paths with no state column to distinguish placeholder from final; and the 5090 SFX generation lane (DR-AU3) has no volume to plan against.
Proposed home. Rule the 2026-07-03 PIPELINE_ADAPTER Option A as a window-plan schema-data rank landing BEFORE rank 8 writes cue rows (deterministic column add via registry_extensions.json + fidelity_baseline.json in one commit, sfx_class→sfx_category mapped, cultural columns carried, plus a creature_vocalization array and a seventh category for the 132-creature Krotos lane); a counted SFX_BOM artifact deriving from §10.2 × node/region/entity multiplicity; an sfx_coverage gate on the PASS-on-empty scaffold with fk_spec enrollment of the ten arrays; and the footfall vocabulary reconciled against §10.2 in the Zone-Catalog column contract.
GAP-142 CRITICAL - The world's non-heightfield space has no class, no column and no producer — 15 authored interior footprints live in prose, below-grade volume is [...]
Vision rules. T1_Region_Page_Template [ACTIVE v2.0] Section 17 requires "environment areas, interiors, vegetation palette, NPC population" per region. Josh RULED the AMPLIFICATION doctrine (PRE_5090_BUILD_PLAN.md L2081-2083): "under-sized settlements EXPANDED into fuller living places guided by their own cultures' architectural grammar" and "caverns/ruins accurate at the mouth then vaster and more complex below", carried into the per-chapter factory at ROADMAP_POST_5090_TO_SHIP.md L489. CVD §3 Component 6 makes interior volume constitutional ("Internal structures harness vril through resonant geometric-substrate mechanisms", anchors including "Ch 58 Antarctica (underground facility)"). T99_Translation_Terrain §5 D-MPV reserves the 1 m/vertex hero tier for "caves, boss pockets, ritual grounds".
What exists (verified). VERIFIED. The demand is authored and unstructured: 11 of 12 slice region pages carry interior prose (machine count: sumatra_java 44, south_india 15, south_africa 14, central_africa_congo 12, ethiopia 9, swahili_coast 9, west_africa 8, bali 4, rift_valley 3, sri_lanka 3, flores_island 2), with measured footprints buried inside single free-text area_bounds cells ("the mourning household interior 14×10", "two workable interiors ~14×10 each", "the night-court interior 45×35", "labor floor 180×120, superintendent's office deck 40×30"). The positive-controlled 62-registry header scan returns ZERO columns matching interior, room, building, settlement, water, depth or time_of_day — POSITIVE CONTROL, same scan: it matched Status_Table.icon_class, Motif_Registry.recurrence_nodes and voice_register_ref, and a prior scan matched impossible_architecture_budget and weather_cycle_profile, so substring matching works. ASSET_DROPIN_CONTRACT §2's eleven classes carry one environment row (a single static mesh per vril site). Content/Maps/ holds 9 region/arena .umap files and no interior level. The vertical axis is ruled OUT: T99_Translation_Terrain §2 Step 7 imports "classic heightfield Landscape, not UE 5.8's experimental Mesh Terrain" — the only geometry that represents overhangs and caves — while T0_Vril_Site_Registry's 42 rows include 15 inherently-interior site_classes (pyramid 6, megalith 5, tomb 3, underground_facility 1) with zero spatial columns. And the tooth is DEM-only: Humanity/QA/SPACE_AUDIT_FLORES_POSTSCULPT.md L22 grades "liang_bua_cave | Ch2 | 220x180x60 karst interior | 0.0 | 0.0 | 100% | OK" — verified verbatim — i.e. it measures the slope of the ground ABOVE the cave, and the recorded fix was "Liang Bua 21.3°→0.0° with a level cave-mouth terrace replacing the 27° opening." Water: TODO_CANON.md L395-398 records the FloresOcean placeholder plane with "the real water pass (actual water system/material, shore interaction) remains open" and L641 puts it on "a later item" that exists as no plan row. T0_Dwelling_Registry is a false friend at 2 rows, both PLAYER homes, with build_grammar_ref EMPTY — and T0_Trade_Registry's shared_build_grammar_ref resolves to that empty column.
Delta. Interiors, below-grade volume, the built-structure typology and water are four faces of one gap: the world's non-terrain space has no id, no row, no count, no asset class, no streaming home and no verifier — and its one instrument reports a flattened terrace as OK, a silent-success failure. VERIFIED absent from the queue: grep -i interior returns 0 hits in PRE_5090_BUILD_PLAN_VOL2.md, 0 in FACTORY_CONTRACT.md, 1 in ROADMAP_POST_5090_TO_SHIP.md (the doctrine sentence), and the three hits in PRE_5090_BUILD_PLAN.md are unrelated (rift-interior register, interior voice) — so no rank, no wave item and no rider owns any of it. The register's GTA row lists "Enterable interior density" as DIVERGENT-BY-DESIGN, but that is a verdict about ambient urban density being read as cover for the interiors the pages already require.
Blocking. The Ch-2 AAAAA polish the JOSH GATE terminates on — Liang Bua is the slice's OPENING playable space and cannot be finished as a terrace. Rank 5 must classify slice assets in a taxonomy with no interior class; the Ch 7-8 staging waves reach the first interior-bearing regions (wootz forge, kalari, Kilwa) with nothing to build against; and rank 27 is a LIVE rank scheduled to build a baray-flow mechanic on a reservoir with no water representation, while the Ch-8 dhow boss set-piece stages on open water.
Proposed home. A director brief (never bare — alternatives + recommendation) on the interior-geometry vector (Mesh Terrain re-target vs authored mesh-kit/level-instance interiors), then mint T0_Interior_Space_Registry (interior_id · parent zone_id FK · build-grammar ref · footprint + storey/below_grade_depth · enterable|referenced · room count · care_tier · kit_id · the assetgen block) plus T0_Structure_Registry for the settlement typology and a water block (water_class · depth_band · current · navigability · seasonal_state · shore_type); add spatial columns to T0_Vril_Site_Registry, a twelfth ASSET_DROPIN class row, an interior_authored value in zone_space_class, and a W-SPACE tooth extension that refuses DEM slope as evidence for an interior volume.
GAP-143 CRITICAL - The witness → memory → community-reaction engine and the NPC recognition layer have no spec home and no owner — 77 authored spine writes and five [...]
Vision rules. CLAUDE.md content bar + memory violence-allowed-r17-no-genocide, ruled: "killing ripples through the community and is remembered", and systematic slaughter "escalates diegetic response (settlement to region to hunted-across-the-world) so genocide is never progression-viable" — the mechanism the care doctrine's anti-genocide floor leans on. docs/proposals/systems/attackability-and-consequence-model.md §The engine: "Witness, memory, reputation — not a wanted meter... they witness, flee, warn others, and the community's disposition persists", with the baker's empty stall and the child who now fears the player as its stated register. ENTITY_PERSONA_SYSTEM §3.2: "an entity notices who the protagonist has become even without having observed her deeds — the disposition is generated fresh each encounter."
What exists (verified). VERIFIED: doctrine only, deferring its own mechanism in a closed loop. attackability-and-consequence-model.md §Wiring targets pushes witness-memory, settlement disposition, community-resilience and the escalation ladder to "the WS7 wiring task"; WS7_WIRING_BUILD_PLAN.md L193 pushes it back ("belongs to the reputation/integrity WS7 wiring task, NOT this attackability anchor — deliberately out of scope here"). POSITIVE CONTROL on the only candidate home: docs/proposals/systems/reputation-prestige-nemesis.md is 51 lines and contains ZERO occurrences of witness, settlement, ripple, villager or bystander while "reputation" occurs throughout — it specs the faction ladder, prestige/NG+ and boss Nemesis AI, not community reaction. NPC_recognition_system is a phantom consumer: independently verified, it occurs ONLY in registries/T0_Worldstate_Variables (named on 5 rows — WS_001 integrity_score, WS_006 appearance_score, WS_008 relationship_history, WS_023 vril_polarity_signature, WS_025 identity_hiding_status) plus four docs (a lens draft, its critic — which independently calls it "the NPC_recognition_system consumer that no system answers to" — the connective-web inventory, and a 2026-07-20 brief). No spec, no thresholds, no per-band greeting/price/availability table, no resolution order, no authored fallback. WS_026's own row says "full system spec deferred to post-cascade architecture gaps queue at T1_Personal_Dimension_Spec adjacent" — and rank 24's T1_Personal_Dimension_Spec scope is marriage/dimension pocket/creature housing, which excludes propagation. Meanwhile the spine already writes reputation_biography_propagation 77 times across 31 nodes and relationship_history 83 times. FR-017 carries the doctrine as a SEED rider with tooth NONE. Engine side: no NPC, persona, companion or faction class exists anywhere in the game Source tree, and N8.2 "AHumanityNpcCharacter persona runtime" is BUILD-NOW with no spec to build against.
Delta. No document anywhere defines what a kill or harm event WRITES: witness set, propagation radius, decay, settlement mobilization, price/greeting/quest-availability deltas, repopulation cadence, or the escalation rungs — and the recognition layer is declared in DATA (which state it reads) while absent from DESIGN (what it does with it). 77 authored spine writes land in systems with no spec. The Hunted band already ships as a label on T0_Reputation_Ladder_Registry with nothing that hunts, so the ruled anti-genocide escalation is unimplementable as written. Not in ranks 1-30, not in R-31/R-32, not in VOL2's LW-* or N8 rows beyond N8.1's one-line "community-ripple event on death".
Blocking. Rank 10 cannot type dark-track or succession seed variants without the ripple's write grammar (cheapest before it). Then W-LW3's first staged playthrough in which the AI QA loop kills a villager has no defined world response — i.e. Gate 1 would certify "consequence" that was never specced — and N8.2 plus the natural-voice NPC dialogue lane both require an NPC that reacts to integrity, appearance and concealment.
Proposed home. A new docs/proposals/systems/COMMUNITY_CONSEQUENCE_ENGINE.md (witness model, WS_019/WS_026 write grammar in STATE_DELTA_GRAMMAR terms, a recognition chapter with per-band thresholds and resolution order, escalation rungs, repopulation cadence, and the hunted-response/bounty leg recovered from the GDD), with the NPC_recognition_system token either specced or retired from the five worldstate rows in the same commit, a factory-contract rider with a real tooth (gap 2), and a DOC_MAP row.
GAP-144 CRITICAL - The player-facing UI has no bill of materials and zero localization compliance — ~13 ruled screens and ~542 icons have no item, no id source and no [...]
Vision rules. COMBAT_PROGRAM_ADDENDUM §9/§10 (RULED Josh 2026-07-26) assigns the owner for selectable bonus picks, 2nd/3rd loadout sets quick-changed at vril sites, spec purposes and companion parity: "OWNER: the canon-lane schema pass + the post-slice runtime + W10's book screens (the build/loadout UI) + the factory"; §2b makes the Rune Forge the player-facing ability creator. The localization-from-the-first-string law is binding and its cost documented: PRE_5090_BUILD_PLAN P2.5 "Route every HUD/interaction/quest string through a String Table from the first widget"; BUILD_PLAN_END_TO_END L149/L169 records that FText "is legally load-bearing (ship-everywhere localization) and cannot be cheaply retrofitted once content references the strings"; ROADMAP_POST_5090_TO_SHIP L302 rests the launch localization tier on that floor. NATURAL_VOICE_DOCTRINE (Josh 2026-07-26) "binds every player-facing word" and claims the HUD explicitly.
What exists (verified). VERIFIED. THE SCREENS: VOL2 §11 itemises 32 UI items of which 13 are screens (front-end, pause, ability book, quest log, fork, journal, shell, map, travel-beat, dialogue/subtitle, photo/codex, loading) and a positive-controlled scan of the UI section for inventory|equip|loadout|rune|craft|forge|imprint|bonus|vendor|shop|minigame returns ZERO — while the same terms hit elsewhere in the same file, so the search matches and the section genuinely contains none. VOL1's own W7 fold list named "quest-log/map/inventory/ability-book UMG" and inventory dropped out of the fold. So ~13 further ruled screens (inventory/equipment, character sheet + the 120-gate mastery ladder, loadout manager, Rune Forge, imprint crafting, per-proficiency bonus selection, familiar roster + companion stat-build, reputation ladder, vendor/barter + the ruled ledger UI, personal dimension, vehicles/base building, achievements, festival calendar) have no build item, no IA and no denominator. THE ICONS: the positive-controlled 62-registry header scan returns exactly ONE icon column corpus-wide — T0_Status_Table.icon_class (10 rows, itself with no consumer) — against a countable ~542-icon BOM from live rows (Ability 185 + Weapon 72 + Creature 150 + Familiar 22 + Rune 19 + Rarity 13 + Flora 25 + Mineral 19 + Trade 10 + Status 10 + Imprint 5 + Bonus 12), and ASSET_DROPIN_CONTRACT's HUD-art row carries the prose id source "UMG widget binding (authored, not generated)" with generation_status N/A — so icons are tagged a 5090 workload with no prompt-composable id list. THE LOCALIZATION: verified on the game tree — grep for LOCTEXT|NSLOCTEXT|FStringTable|LOCTABLE returns ZERO matching files while FText::FromString returns 41 hits, so every player string is a hardcoded literal; no Content/Localization directory exists; and HumanityUIAutomationTests.cpp's MustPass list ENSHRINES two of them ("Press 1, 2 or 3 to choose your path.", "Press F to continue."). The 34-gate scan returns no loc/string/UI tooth, and those same literals will lie the moment U11.9's rebinding lands.
Delta. Three failures of one shape: a ruling or a law with no countable surface and no tooth. DR-2 sized per-tier VFX variants to 248/372 because the every-surface-beautiful ruling demanded a countable variant space; the UI got the same ruling and no arithmetic at all — no screen roster, no icon count, no design tokens, no per-region/per-realm variation model. And a law whose retrofit cost is documented as uncheap has zero compliance on the one shipped surface, zero deterministic tooth in either tree, and an automated test that positively blesses the violating strings — while the game's shipped text locales have never been briefed to Josh.
Blocking. Every §§7-12 schema-freeze rank (13-17, especially rank 14's tier-bonus pools / imprints / loadout sets / role tags) freezes columns with no consuming screen specified — the same both-ends failure that produced the P2.6 spec hole, and retrofitting screen IA after 30+ columns freeze costs a second schema pass. Every U11 widget authored from now deepens the localization debt (W10 already shipped 41 violations, carried as residue since 2026-07-24d with no rank). Rank 13 is the near-free moment to add icon_id_ref for 185 ability rows.
Proposed home. A VOL2 §11i SCREEN ROSTER table (one row per screen: ruled source, data reads, reveal filter, controller-nav path, wave) authored as part of rank 20's T1_UI_UX_Spec with a factory rider so gate 30 resolves each screen's data_home; icon_id_ref minted on the ability/weapon/status/rune/rarity/trade/creature/flora/mineral registries inside ranks 13-14 plus a twelfth ASSET_DROPIN 2D/UI class row with a real id source and drop path; a gate-35 player_string_loc tooth (fails on any FText::FromString literal reaching a UMG SetText, must-fire/must-not-fire fixtures) landed with U11.1, the two blessed literals retired from the MustPass list, T0_UI_String minted as the chrome corpus home inside the Natural Voice Doctrine §5 pass scope, and the shipped-locale ring added to the rank-18 bundled brief.
Merged from. ui-ux#1; ui-ux#2; ui-ux#3
Generated by harness/site/structure_site.py — the URL path is the repo path. review root