Gap audit 2026-07-29 - lane audio-sfx-ambience (12 findings)
Verbatim from workflow wf_d0ca605f-891. Each finding carries either its own register entry id or
the cross-lane merge that absorbed it. This file is the evidence of record the compact register
entries cite.
audio-sfx-ambience#1 [CRITICAL] merged into GAP-141 - T0_SFX_Registry implements 1 of its 21 REQUIRED columns — the whole production-state machine, category taxonomy and prompt substrate have no data home
What exists (verified). Live registries/T0_SFX_Registry [ACTIVE v1.0]/*.csv = 30 rows × 20 columns. Machine diff of §3.16-declared vs live header: 20 of 21 required columns ABSENT (only sfx_id survives); 19 live-only columns instead (sfx_class, layering_role, spatial_attenuation, linked_entity_type, vril_density_modifier, cultural_authenticity_source, hard_line_anchors...). sfx_class values (ambient 17 / gameplay_cue 8 / cultural_traditional 4 / cinematic_cue 1) share ZERO tokens with §10.2's six-value sfx_category enum. Placeholder-vs-final is encoded in a path-string suffix — 18/30 rows carry ue_sound_asset_path ending _placeholder — because no status column exists. T0_Theme_Registry (18/18 declared cols present) and T0_Voice_Registry (13/13) both conform, so this is an SFX-only omission, not a house style.
Delta. The divergence is already briefed as [DECISION NEEDED - JOSH] in docs/PIPELINE_ADAPTER.md L212-L220 + L296 (dated 2026-07-03, recommendation Option A = migrate to the §10.5 schema) and in the SUPERSEDED docs/ROADMAP.md L86 — and it appears on NO live board: zero audio hits in docs/OPEN_BRIEFS_2026-07-28.md, zero in docs/OPEN_DECISIONS_FOR_JOSH.md (91 lines, 3 sections — positive control: the grep matches its headers), no SFX-schema item across the 28 sittings of docs/spine/DECISIONS_PENDING_JOSH.md, no window-plan rank. Meanwhile the registry grew 12→30 rows and 19→20 columns inside the unreconciled shape, so the migration the brief priced at "12 rows is cheap" is now 2.5× larger and still unqueued.
Blocking. Rank 8 (S10 machine cue table, UNBLOCKED by ledger 2026-07-29ay) and Vol2 AU-13 (Ch2-5 registry population) both write rows NEXT into a schema that cannot record a cue's track, category, generation method, prompt hash or sign-off state; DR-2 Batch 2 (ASSET_DROPIN_CONTRACT §6) then migrates paths with no state column to distinguish placeholder from final.
Proposed home. Rule the 2026-07-03 PIPELINE_ADAPTER Option A as a window-plan schema-data rank (deterministic column add via registry_extensions.json + fidelity_baseline.json in one commit, sfx_class→sfx_category mapped, cultural columns carried), landing BEFORE rank 8 writes cue rows.
audio-sfx-ambience#2 [CRITICAL] merged into GAP-141 - The SFX bill of materials is uncounted and un-homed: 30 rows for 79 nodes, and every one of the ten declared consumption arrays is empty
Vision rules. T1_Build_Pipeline_Contracts §10.2 enumerates the countable BOM: 17 footstep terrain types × 5 protagonist-state modifiers (bare-foot/light-boot/heavy-armor/climbing-rig/stealth-pad) = 85 footstep cues; 17 biome ambients incl. day/night pairs; wind 4 / water 7 / fire 6 named members; weapon hits per Brute/Trickery trait plus per-region material modifiers; vril-cast identity progression across Neophyte→Magus. §10.6 declares the ten per-registry sfx_id_ref arrays as their consumption homes. T99_Translation_Audio SFX Step 1 requires "a per-region SFX bank plan, each planned entry pre-assigned a category and a track".
What exists (verified). 30 SFX rows total: 18 anchored to CH_02, 1-2 each on 11 other chapters — 67 of 79 nodes carry ZERO rows (chapter_anchor census over the live CSV). Consumption arrays, measured on the live CSVs: ability_sfx 0/185, vril_cast_sfx 0/185, weapon_sfx 0/72, boss_sfx 0/281, site_sfx 0/42, site_magic_effect_sfx 0/42, inscription_activation_sfx 0/98, familiar_bond_sfx 0/22, chapter_sfx 0/79, quest_dialogue_sfx 0/16, scene sfx_id_ref_array + sfx_category_array 0/16, equipment_sfx 0/1, status_sfx 0/10, rarity pickup_sfx 0/13; only T0_Region_Index env-ambient 8/76 + ritual 4/76 are populated (the entry-104 inversion, ledger 2026-07-28s). No artifact anywhere multiplies the §10.2 enumerations into a number — positive control: a search for audio quantity language returns only prose mentions (docs/DESIGN_GAP_REGISTER L1264 "14 placeholder SFX", L1311 "0 of 30 SFX rows") while the same pattern class returns real mesh/asset counts elsewhere.
Delta. AU-13 (PRE_5090_BUILD_PLAN_VOL2.md §7 L1284, UI wave) is the only queued item and it is scoped to "Ch2-5 registry population + a coverage-map doc" with no count and no arc-wide scope; T1_Region_Page_Template [ACTIVE v2.0]'s T0 Registry Contract lists the page as a CONSUME/loading surface for SFX (§10) but T0_SFX_Registry is absent from its FEED list — so no authoring surface owns producing SFX rows. Result: no seat-hour estimate, no licence-library budget, no 5090 batch sizing, no per-node coverage target exists for the single most-heard asset class in the game.
Blocking. The 5090 handshake DR-AU3 (SFX generation lane) has no volume to plan against, and the Sonniss/BOOM licence-vs-generate split cannot be costed; the Prologue→Ch 13 Gate-1 P3-exit inherits an unsized audio scope.
Proposed home. A counted SFX_BOM artifact (category × enumerated member × node/region/entity multiplicity, deriving straight from §10.2 + the live registry row counts) as rank 8's sibling, with T0_SFX_Registry added to the region-page template's FEED list so a page authoring pass produces rows.
audio-sfx-ambience#3 [MAJOR] GAP-180 - Creature and combat vocalization have no category and no column — 150 creature rows carry a full mesh rail and zero audio field
Vision rules. T1_Build_Pipeline_Contracts §10.3 (ADDED 2026-07-15) names T0_Creature_Roster as the Environmental-Ambient input "for per-region fauna and creature vocalization substrate ... creature vocalization work runs the sound-designer-in-loop track per §10.4.1". T99_Translation_Audio SFX Step 4 sizes the lane: "132 creatures × multiple vocalization states (idle, alert, attack, hurt, death at minimum), each requiring actual sound-design craft" via the Krotos lane; Vol2 DR-AU3 plans it as a drop-in contract.
What exists (verified). registries/T0_Creature_Roster [DRAFT v0.1]/Sheet1.csv = 150 rows × 54 columns, including the full assetgen rail (mesh_id_ref, mesh_pipeline_type, mesh_tags, generation_status, generation_prompt_hash, last_generated_timestamp, regeneration_trigger, generation_tier) and ZERO audio/vocal column — positive control: the same column scan surfaced sfx/voice columns on 20 other registries. §10.2's six categories contain no creature class and §10.6's column-add list names ten registries, none of them the creature roster. The only creature-adjacent audio rows in existence are two bespoke Ebu Gogo ambient beds (SFX_00029/00030). Corpus-wide zero for non-lexical character effort: "vocal effort", "exertion", "grunt", "death cry" return no hits (positive control: "bark" returns 12+ hits, all runtime-LLM dialogue text, not vocal SFX); §4.2's Ambient Crowd Voice covers only crowd-level "battle cries".
Delta. T99_Translation_Audio flags this itself — SFX Step 1's verification block says "Genuine coverage gap, flagged not patched" and §4 carries it as spikes 13 and 14 — but the assigned owners are "Josh / Phase 5M T0_Schema_Dictionary work" (a retired phase label, absent from the window plan's 30 ranks and from ranks 13-17's data-home mints) and "Production" (no such lane). So the largest single labor block in the audio lane has a named flag, no data home, no count and no live owner.
Blocking. Every Ch 2-13 creature encounter in the slice (BE_0002's Ebu Gogo stalk already ships with bespoke ambient rows and no creature-voice rows), and any attempt to schedule the Krotos sound-designer lane against real capacity before Gate 1.
Proposed home. A creature_vocalization_sfx_id_ref_array on T0_Creature_Roster plus a seventh §10.2 category (or an explicit routing of creature vocalization under MAGIC_EFFECT/ENVIRONMENTAL_AMBIENT), ruled with the gap-1 schema reconcile so it lands in one column-add pass.
audio-sfx-ambience#4 [MAJOR] merged into GAP-134 - The factory contract's chapter axis is audio-silent: 1 audio rider in 70, tooth NONE, and its declared data home is the wrong registry
Vision rules. docs/PRE_5090_BUILD_PLAN.md rank 2.5 mints the FACTORY CONTRACT as "the per-chapter obligation register ... it answers 'for Ch NN, what must be true?' and makes every rank after it self-wiring", enforced by gate 30 factory_contract (R2 requires every rider's data_home to resolve to a real registry column, R1 requires every OWNER: line to be covered by a rider).
What exists (verified). docs/factory_contract.json carries 70 riders. A regex scan for audio|sfx|sound|music|ambien|cue|foley returns 3, of which only FR-039 is audio-substantive: obligation "Author this chapter's festival windows and the region's ambient and SFX rows as part of the staging pass, not as a later sweep", status PARTIAL, tooth "NONE(no per-chapter festival or ambient coverage assertion exists; rank 8 authors the cue table)", data_home "registry:T0_Festival_Registry#chapter_range". The other two are FR-017 (respawn class, incidental "ambient") and FR-024 (player strings). No rider exists for per-chapter theme/leitmotif coverage, footstep/foley, creature voices, UI or combat cues, or mix state.
Delta. The one rider's data_home points at a FESTIVAL column, so gate 30's R2 passes green while the SFX half of the obligation has no declared home and no tooth. The net effect is that all 14 slice nodes (15 region-legs) can reach freeze with zero audio obligations recorded and the chapter-axis gate still green — and per the story-depth freeze constraint, ranks 13-17 emit their riders at freeze time, so the omission propagates into every schema-freeze rank rather than being caught later.
Blocking. harness/emit_chapter_checklist.py output for every Ch 2-13 node right now, and the freeze-time rider emission of ranks 13-17.
Proposed home. Split FR-039 into a festival rider and an audio rider whose data_home is registry:T0_Region_Index#region_environmental_ambient_sfx_id_ref_array (plus a chapter-level rider on T0_Chapter_Index#chapter_sfx_id_ref_array), with the tooth named once a coverage assertion exists.
audio-sfx-ambience#5 [MAJOR] GAP-181 - The per-material foley matrix contradicts itself: 5 zone surface values against a 17×5 contract matrix, and zero footstep rows exist
Vision rules. §10.2 Footstep SFX enumerates 17 terrain types (stone, dirt, grass, sand, snow, ice, water-shallow, water-deep, mud, gravel, wood-plank, marble, carpet, leaf-litter, jungle-undergrowth, desert-fine-sand, desert-coarse-sand) × 5 protagonist-state modifiers, and §10.6 gives them a home in T0_Region_Index.region_footstep_sfx_id_ref_array. Vol2 AU-3 (L1275) builds the runtime: "Footstep-by-surface ... PhysMat→footfall_surface map, placeholder cues per surface". Gate 20's Audio lane requires a per-zone footfall_surface field.
What exists (verified). footfall_surface is populated 84/84 zone rows across all 12 slice region pages — with a 5-value vocabulary: stone 29, earth 27, water_edge 14, forest_litter 10, mixed 4. Exactly one token (stone) overlaps the contract's 17; earth/water_edge/forest_litter are near-misses of dirt/water-shallow/leaf-litter, and "mixed" is not a material at all — no cue can resolve from it. region_footstep_sfx_id_ref_array is 0/76 and the entry-104 apply record states why: "footstep empty BY DATA (zero source rows)" (DESIGN_GAP_REGISTER L1306-1308; ledger 2026-07-28s). The 5-state protagonist-footwear axis has no column anywhere (T0_Equipment_Registry = 1 row).
Delta. AU-3 is queued as ENGINE work (FEEL wave) and will ship a PhysMat map over 5 surfaces; nothing in the queue authors the footstep DATA or reconciles the two vocabularies, and no gate compares them — so the game's most frequent sound ships at 5-surface greybox fidelity with a 17×5 contract on the shelf and the divergence invisible. This is the music_mood_tags failure class (79/79 filled, 0/79 real) on a populated column that looks green.
Blocking. AU-3 in the FEEL wave, and every traversal capture the QA belt takes on Ch 2-13 zones.
Proposed home. Reconcile the zone vocabulary against §10.2 in the Zone-Catalog column contract (either widen footfall_surface's enum or declare the mapping), retire "mixed", and mint the footstep row set as a rank-8 sibling since the source column is already 84/84 populated.
audio-sfx-ambience#6 [MAJOR] GAP-182 - Ambience is keyed at region grain with no zone, time-of-day or weather axis — the join sits one granularity above the world that is built
Vision rules. §10.2 Environmental Ambient names day/night pairs explicitly (jungle-day, jungle-night, desert-day, desert-night, steppe-day, steppe-night) plus rain-drizzle/rain-storm as distinct members; §10.6 homes ambience on T0_Region_Index arrays; Vol2 AU-4 (L1278) drives "ambient-playback slot driven by region_environmental_ambient_sfx_id_ref_array"; the L1.5 ambient lane and the arc-wide "no valley may bore the L1 player" ruling make ambience a felt-quality surface, not decoration.
What exists (verified). The arrays live on T0_Region_Index (76 rows; 8 populated). The world is authored and built at ZONE grain: 84 Zone Catalog rows across the 12 slice pages, and the Zone Catalog's 18 columns (zone_id, terrain, ambient_threat, vril_density, worldcover_biome, footfall_surface, care_tier, asset_routing, environment_grammar_refs, zone_space_class...) contain no audio reference of any kind. No time-of-day column exists in any registry (positive control: a header scan for time_of_day|night|weather|season across all 62 registries returns exactly one column, T0_Region_Index.weather_cycle_profile, while the control term vril_density returns 3). weather_cycle_profile is 4/76 populated ('monsoon;rain;clear' etc.) with no join to any audio row — SFX_00020 is described in its notes prose as an "additive intermittent rain layer stacking over any site bed (weather-state driven)" and nothing keys it to that state. No per-zone bed-count or density target exists anywhere.
Delta. Entry 104 closed the empty side of the REGION join and its apply record is explicit that this was the region-level inversion only. Nothing in the queue moves the join to zone grain, adds the diurnal/weather axis the contract's own enum implies, or sets a beds-per-zone density target — so flores' 11 beds versus egypt's 2 is an artifact of which rows happened to be authored, not a measured density.
Blocking. Rank 8 as it scales from 4 to 12 slice pages (it authors per-page cue tables against a region-grained home), and AU-4's ambient playback slot the moment a second zone in the same region needs a different bed.
Proposed home. A zone-level ambient reference column in the Zone-Catalog extension contract (the same mechanism that added footfall_surface/care_tier), plus a declared time_of_day/weather state axis on the SFX row so the layer stack is data, not prose.
audio-sfx-ambience#7 [MAJOR] merged into GAP-141 - Audio has no data-side tooth in the 34-gate suite, the ten sfx arrays are unenrolled in fk_spec, and 8 of 30 rows are already orphans
Vision rules. The anti-orphan doctrine (every artifact needs a consumer) and the gate-34 E6 precedent — "UNPOPULATED-IS-A-HARD-FAIL ... the rule that would have caught music_mood_tags reading 79/79 filled while being 0/79 real" (harness/gates_config.json, gate 34 description). docs/fk_spec.json exists so that "a mis-named FK fails loudly, never silently".
What exists (verified). harness/gates_config.json carries a 34-gate roster; a scan of the whole config returns sfx 0 / audio 0 / sound 0 / cue 0 / ambien 0 hits (positive control: music returns 1, inside gate 34's own description). The only audio touchpoints are gate 20 build_readiness's REPORT-tier Audio lane — which asserts two presence facts only (an S10 cue table with cue_id + track_type, and footfall_surface presence; harness/check_build_readiness.py lane_audio, L313-322) — and gate 25 grand_sage_silence, which polices one row. docs/fk_spec.json enrolls exactly two scalar sfx FKs (telegraph_sfx_id_ref L860, status_sfx_id_ref L889); none of the ten §10.6 arrays is enrolled, so the 22 sfx ids already referenced from T0_Region_Index are unvalidated and any future populate is unchecked. Both-directions check: 8 of 30 SFX rows are referenced by nothing anywhere in the registry layer — SFX_00004, 00021, 00022, 00024, 00025-00028 — and fk_spec's own note at L865 names four of them ("the four authored chain SFX rows with zero consumers, which is the SFX consumer lane's item"), while T0_Gather_Node_Registry and T0_Mineral_Registry, the natural homes for the gather-yield and mineral-strike cues, carry no audio column at all.
Delta. Vol2 QT-AU (queued, QA-ORG wave) asserts only cue-fired telemetry and a non-silent floor — a runtime check. There is no canon-side assertion that a declared array is populated, that an sfx id resolves, that a cultural_depiction_required row carries a source, or that a row has a consumer. The named "SFX consumer lane" has no rank and no owner.
Blocking. The next populate — rank 8 or AU-13 — lands unvalidated ids; and the orphan set is live today, so the gather, vril-recharge and ruled pip-meter cues are already authored content nothing can play.
Proposed home. An sfx_coverage gate on the no_dead_end PASS-on-empty scaffold (array-population + id-resolution + consumer-presence + care-source teeth, must-fire/must-not-fire fixtures), plus fk_spec enrollment of the ten §10.6 arrays in the same commit.
audio-sfx-ambience#8 [MAJOR] GAP-183 - No loudness or mix doctrine and no audio performance budget exist anywhere — the AAAAA bar has no measurable audio criterion
Vision rules. The AAAAA/Quintuple-A output bar and the 30-year music bar (docs/proposals/MUSIC_COMPOSITION_DOCTRINE.md §0); T1_Build_Pipeline_Contracts §1.7 establishes per-spec-class performance budgeting as the governance model with steam_deck_minimum as the ship-viability floor; Vol2 AU-6 (L1281) builds a SoundClass/SoundMix hierarchy (Master/Music/SFX/Voice/Ambience) with sliders.
What exists (verified). Corpus-wide zero for every loudness-doctrine term: LUFS, true peak, dialogue anchor, dynamic-range policy, ducking/sidechain — positive control: the word "loudness" itself returns 15+ hits across docs/ and _source/, all of them unrelated prose, so the pattern can match; "SoundMix" returns exactly two hits, both engine-plumbing items (AU-6, U11.5). §1.7's budget prices triangles, LOD chains, draw calls, material slots and VRAM streaming pools across four spec classes and says nothing about voice count, audio memory pool, compression settings or streaming; docs/ENGINE_OPTIMIZATION_DOCTRINE.md mentions audio only to place the foundry off the player's machine (L650-652). Game-side confirms the hole: HumanityAudioSubsystem.cpp:291-292 "Music/SFX per-category routing awaits authored SoundClass/SoundMix assets (TODO_CANON)" and every spawn passes ConcurrencySettings=nullptr (L231). T1_Audio_Spec [DRAFT v0.1] is 34 bytes.
Delta. Register entry 102 (DESIGN_GAP_REGISTER L1279-1285) scopes the T1_Audio_Spec authority stub to exactly three things — "the score's dramatic law, the per-region identity law and the per-realm identity law" — and window-plan rank 20 scopes the same doc to "author T1_UI_UX_Spec + T1_Audio_Spec from the shipped W10 HUD + W2 audio spine". Neither names loudness targets, dialogue-anchored mix, ducking rules, platform loudness compliance, or an audio memory/voice budget. So the mastering standard every imported and generated asset must conform to has no home, while the licensed-library import is already running.
Blocking. Benchmark day and any AAAAA feel claim (a QA capture can prove non-silence and nothing about mix), plus the Steam Deck ship-viability floor which is priced for meshes only.
Proposed home. Add a mix/loudness section to the entry-102 T1_Audio_Spec work order (integrated LUFS target + true-peak ceiling + dialogue anchor + ducking policy) and an audio row to §1.7's per-spec-class budget table (voice count, audio memory pool, compression per class, concurrency groups).
audio-sfx-ambience#9 [MAJOR] GAP-184 - Music has no cue, stem or state-transition data home — music_cue_id_ref is an FK to no table, and Appendix S's fix collides on cardinality
Vision rules. MUSIC_COMPOSITION_DOCTRINE §6.9 defines the per-cue deliverable: "segment stems at 48 kHz with per_stem_role, adaptive_role and motif_carrier_stem; entry and exit cue offsets; post-exit tail rendered separately; transition segments for every modulating pair ... and a state-machine row per transition (source state, destination state, sync-to boundary, transition class)", and its transition acceptance rubric makes "every ORDERED STATE PAIR the MusicDirector permits ... a test row. Not a sample; the full permitted set" fired at three offsets. §6.4 pins the grid contract per SUB-REGION (tempo family, tonal centre, tuning, phrase quantum, max de-escalation latency, entry/exit cues with pre-entry/post-exit).
What exists (verified). registries/T0_Theme_Registry [DRAFT v0.1] = 14 rows × 28 columns, one row per THEME (12 cardinal_theme + 2 cue_variant after ledger 2026-07-29au). music_cue_id_ref is 0/14 there and 0/16 on T0_Scene_Spec_Registry, and no cue table exists to point at — a listing of all 62 registry directories contains no cue, stem, segment or state registry (the range_id no-target-table class from CLAUDE.md issue 3). There is no sub_region entity: T0_Region_Index is 76 region rows. Appendix S proposes state_id, adaptive_role, motif_carrier_stem, loop_bars, transition_class, entry_exit_offset_ms, stem_group_id and atomic_group as columns ON the theme row.
Delta. Ledger 2026-07-29ao records the Appendix-S columns as "queued as a schema-data item, never auto-applied" — but a one-row-per-theme table cannot hold many cues per theme, many states per cue, and a row per ordered state pair; the queued fix is a cardinality collision, not a home. Register entry 103's remedy is a doctrine stub (four dramatic rules inside entry 102), also not a home. So the composer-in-loop workflow's own deliverable — stems with roles, transitions, and the rubric's enumerable test rows — has nowhere to land and nothing to count.
Blocking. The first composer-in-loop cohort (§7.10) and rank 8's Theme/Scene music columns: the first hero theme's stems, state rows and transition tests have no table, and gate-20's Audio lane will read a cue table whose cue_id resolves to nothing.
Proposed home. Mint a cue/segment table (cue_id PK, theme_id FK, state_id, adaptive_role, motif_carrier_stem, loop_bars, entry/exit offsets) plus a transition table (source_state, dest_state, sync boundary, transition_class) as the Appendix-S apply's real shape, and enroll music_cue_id_ref in fk_spec against it.
audio-sfx-ambience#10 [MAJOR] GAP-185 - The ruled full-per-tier presentation program sizes the anim/VFX key space and leaves the audio half unsized and unkeyed
Vision rules. Josh RULED 2026-07-28 fourteenth sitting, OPTION (A) FULL PER-TIER VARIANTS with the band-collapse recommendation OVERRULED: "the mastery-tier-variant requirement stands at full strength; DR-2 sizes for the full key space (248 live / 372 clamp) and the 5090 asset program plans variant volume as a first-class workload" (DESIGN_GAP_REGISTER entry 97). §10.2 Magic Effect SFX requires "vril casting per twelve-tier substrate-perception threshold with audio identity progression across Neophyte through Magus tiers", and §10.6 homes it in vril_cast_sfx_id_ref_array "per twelve-tier substrate-perception threshold tier". Josh's nod: every ability must be beautiful art at every tier.
What exists (verified). Entry 97's sizing (31 elements × 8 live tier values = 248, 372 clamp) and entry 94's presentation_tier_ref rail are both stated for the animation/VFX variant key only — entry 94's fix is "presentation_tier_ref on the ability/weapon extension rail", and ASSET_DROPIN_CONTRACT's eleven-row class table gives audio one row (SFX id → ue_sound_asset_path, L76) with no tier, variant or multiplicity column. On the data side: ability_sfx_id_ref_array 0/185 and vril_cast_sfx_id_ref_array 0/185, and the §10.5 subcategory enum names only 2 of the 12 tiers (VRIL_CAST_NEOPHYTE, VRIL_CAST_ADEPTUS_MINOR) — in a column that does not exist on the live table at all (gap 1).
Delta. No artifact multiplies the audio side of the same ladder (abilities × tiers, or the mastery-band mapping ruled at Adeptus-Minor=6 / Magus=12) into a key space, and no resolver rule states how an audio cue falls back down the tier ladder the way entry 94 specifies for meshes/VFX. The ruled variant program therefore plans volume for one half of "beautiful and fluid" and silently omits the other.
Blocking. The DR-2 clause commit that entry 97 says to apply with, and the 5090 variant-volume workload plan — both are being sized now.
Proposed home. Extend the entry-94 presentation_tier_ref rail and the DR-2 clause to the audio class (id-plus-tier resolver key with ladder fallback) and publish the audio key space alongside the 248/372 figure.
audio-sfx-ambience#11 [MINOR] GAP-186 - Trades, minigames and festivals have no audio surface at all — the craft-loop and festival soundscape the staging rider promises has no column and no [...]
Vision rules. Factory rider FR-039 obliges every chapter to "author this chapter's festival windows and the region's ambient and SFX rows as part of the staging pass"; 10 trades with 120 mastery-gate questlines are core L1 content (COMBAT_PROGRAM_ADDENDUM + CLAUDE.md numerical canon); the L1.5 ambient lane makes festival and market life a felt surface.
What exists (verified). registries/T0_Trade_Registry [DRAFT v0.1] = 10 rows, zero audio columns; T0_Minigame_Registry = 2 rows, zero; T0_Festival_Registry = 16 rows, zero (column scan; positive control: the same scan found audio columns on 20 registries). §10.2's Foley category enumerates item handling — pickup, wield, sheathe, drop, throw, harness, jewelry, satchel, scroll, page, lock, door, container — and contains no craft or work loop (forge/hammer, loom, kiln, kettle, chisel), and no festival/crowd-ambience class exists on the SFX side (§4.2 routes crowd VOICE to the voice pipeline, which leaves the instrument/procession/market ambience unowned).
Delta. This is the exact concept-art "where are the trades" shape on the audio axis: the doctrine has a foley category, the plan has a staging rider, and there is no countable trade/minigame/festival audio surface and no column to hold one. Nothing in the queue closes it — rank 23 mints the 120 trade-gate quest rows with no audio obligation attached.
Blocking. Rank 23 (trade-gate quest rows + the Book-of-Trades data home) and the FR-039 staging pass on each of the 12 slice region pages.
Proposed home. A trade/minigame/festival sfx_id_ref_array on those three registries plus a work-loop member set inside the Foley category, added with the gap-1 schema reconcile so it is one column-add pass.
audio-sfx-ambience#12 [MINOR] GAP-187 - The bank plan lives in code and prose: the library→cue mapping is a hardcoded Python constant and the placeholder provenance sits in a notes blob
Vision rules. T99_Translation_Audio SFX Step 1 requires a per-region bank plan as "planned T0_SFX_Registry rows", §2.5 binds "every generated cue/line/bank binds to an id, never freehand", and ASSET_DROPIN_CONTRACT's core law is that assets are addressed by CANON ID and never by a content path, with one resolver layer.
What exists (verified). C:/dev/Humanity/Humanity/Tools/import_audio_assets.py declares itself "manifest-driven" in its docstring and then carries the cue→source mapping as two in-file constants (MAPPING + BED_MAPPING, 24 dest_name entries) with the sfx_id written as a trailing code comment; it never reads T0_SFX_Registry. The licensed-source provenance for every placeholder lives in T0_SFX_Registry.notes as prose ("Sonniss placeholder cat: InMotionAudio - Cave Design", ×18 rows) rather than in a queryable column, because generation_method/build_asset_path do not exist on the live table. The 28GB/609-file Sonniss library at C:/dev/audio_library is recorded only in a ledger sentence (PRE_5090_BUILD_PLAN L2470). Content/Audio holds 14 uassets. docs/BUILD_PLAN_END_TO_END.md L247 names the missing compose hop — Tools/compose_audio_prompts.py, "the missing Hop-3 script ... which today has no implementation in either repo" — with status nothing_buildable_now.
Delta. AU-12 landed the importer, so the transport exists; what is absent is the data-driven bank plan the importer should consume, the queryable licence/provenance record the Sonniss no-AI-train fence needs to be auditable against, and the prompt-composer that all three chains' compose hop depends on. None of the three has a rank.
Blocking. The first at-scale import after rank 8/AU-13 authors rows — the mapping must be re-hand-edited per cue — and any licence-compliance evidence trail for the shipped audio.
Proposed home. Make the importer read the SFX registry (id → ue_sound_asset_path → source_ref) once gap 1's generation_method/build_asset_path columns land, and schedule compose_audio_prompts.py as the shared prompt-composer with the same registry read.
Generated by harness/site/structure_site.py — the URL path is the repo path. review root