pipelines/LENS_presentation-craft-anim-audio_DRAFT.md
Lens id: presentation-craft-anim-audio · Wave P1-C (contract-critical)
Title set: Devil May Cry 5 · Guilty Gear Strive · DOOM Eternal · Journey
Lens aspects: presentation ladder · mastery-tier anim/VFX variants · style-without-power ·
adaptive score · per-region ambient identity.
Amendments carried (binding): the REALM CEILING amendment (the nine mythological realms + the
fairy realm are the CEILING-SETTING art surfaces; the DR-2 tiered-asset request contract must
reserve a REALM TIER above the region tier BEFORE it freezes) and aspect R-A16 (per-realm audio
identity; T1_Audio_Spec = gap-register entry 22).
Read-only on both repos. Method law held: every zero below is positive-controlled against a term
known to exist in the same corpus with the same tool; DESIGNED-UNBUILT is never reported as MISSING;
where a thing is RULED but has no home in the architecture about to freeze, it is reported WEAKER
and the boundary is stated explicitly (the LENS_BG3 convention). Dedupe baseline read:
docs/DESIGN_GAP_REGISTER.md (entries 11, 12, 22, 29 + the DIVERGENT-BY-DESIGN tally),
docs/COMBAT_PROGRAM_ADDENDUM.md §5/§7, docs/ASSET_DROPIN_CONTRACT.md (all of it),
docs/ENGINE_OPTIMIZATION_DOCTRINE.md §5.3/§5.4/§5.6/§6.5, docs/proposals/QA_WATCHING_PROGRAM.md
§4.4, docs/translation/T99_Translation_Audio.md, docs/PRE_5090_BUILD_PLAN_VOL2.md AU-1..AU-13 +
QT-AU + DR-AU1/DR-AU3, docs/proposals/REALM_DESIGN_PROGRAM.md §4.3/§5.1/§9,
docs/pipeline_review/REALM_ANALYSIS_ART_PIPELINE_2026-07-27.md.
---
The presentation ladder is not an unbuilt idea — it is a ruled doctrine with a working greybox
seam on the cast path (HumanityAbilityFoundry.cpp:38-44, 63-69, 98-107), a perf doctrine that
already protects it from being scaled away (ENGINE_OPTIMIZATION_DOCTRINE.md §5.4 D10), and a
factory rider carrying it per chapter (docs/factory_contract.json FR-006). What it does not
have is an address space. The DR-2 contract that is about to freeze has **no tier axis of any
kind** — not the mastery tier the ladder needs for variant selection, and not the fidelity/ceiling
tier the realms need. Freezing DR-2 as written makes the ruled hard requirement contractually
unrepresentable and forces the realms to inherit a region-sized asset class. Findings PC-1 through
PC-4 and §"THE REALM-TIER RESERVATION" are the contract-critical block; everything else is craft.
---
---
Class: WEAKER (a RULED requirement whose named consumer carries no field for it) ·
Priority: HIGHEST · Owner: spec-doc (DR-2) → P2 · Wave: before the DR-2 freeze
What the titles prove. DMC5 ships the same ability at multiple presentation states (a Level-3
Exceed, a Devil Trigger variant) and each state is a *separately addressed asset*, not a scaled
version of one. GGST does the same with per-character effect sets. The presentation ladder is only
real if the pipeline can *request and store* more than one asset per ability.
Current state (cited). The ruling: "the 5090 asset passes generate TIERED variants as a hard
requirement, not an option" and "the 5090 generation pass then produces TIERED variants per the DR-2
contract (the asset request carries the tier)"
[docs/COMBAT_PROGRAM_ADDENDUM.md:82-83, 111-113]. The consumer named in that sentence carries
nothing of the kind. docs/ASSET_DROPIN_CONTRACT.md §2's eleven-class table maps **one canon id → one
path** for every class; no row has a tier column, a variant column, or a tiered path convention
(/Game/Meshes/<class>/SM_<mesh_id_ref>, /Game/Audio/SFX/SFX_<sfx_id>, /Game/Cinematics/Scenes/<scene_id>).
The VFX row is worse than tierless — it is *ungenerated by declaration*: "VFX (Niagara) | GameplayCue
tag (authored, not generated) | placeholder cue notifies (C1.16) | Niagara system bound to the same
cue tag" with generation_status marked N/A (§2 note + §7 open item 5)
[docs/ASSET_DROPIN_CONTRACT.md:69, 73-77, 187-191]. So the single asset class the ladder is mostly
made of is the one class the contract exempts from the generation machine entirely.
Positive control. Case-insensitive search of ASSET_DROPIN_CONTRACT.md for
tier|variant|presentation returns hits only for "Tiered"-unrelated words; the same file returns 11
hits for mesh_id_ref and 7 for generation_status, so the file is reachable and parsed. The
ladder's own key presentation_tier_ref appears in exactly 3 canon-repo docs and zero registries
— independently established, positive-controlled, at
docs/pipeline_review/RESIDUE_CLASSIFICATION_2026-07-27.md:143-148 ("Ripgrep over the whole canon
repo finds presentation_tier_ref in exactly 3 files, all docs... Zero registries... This is the
DR-2 asset-contract key, so it should land BEFORE the 5090 asset freeze").
Self-refutation attempted. (a) *"This is DESIGNED-UNBUILT — the assets ride the 5090."* The
assets do; the contract clause does not exist anywhere, and the contract freezes pre-hardware.
A missing field in a frozen schema is not an unbuilt asset. (b) *"The VFX N/A is deliberate — Niagara
is hand-authored."* §7 item 5's recommendation is that the *swap* guarantee applies while
generation_status is N/A. That is coherent for a single placeholder→final swap; it cannot express
*n* variants per id, and hand-authoring 248+ tiered Niagara systems solo is not a plan. (c) *"The
factory rider covers it."* FR-006's own tooth field reads
`NONE(presentation_tier_ref does not exist on the ability extension rail today — positive-controlled
against the live header) [docs/factory_contract.json:154`] — the rider records the hole, it does
not close it. Survives.
Reuse-first recommendation. Do not invent a variant system. Add one column and one rule to
machinery that already exists: (1) presentation_tier_ref lands on the ability/weapon extension rail
via docs/registry_extensions.json + docs/fidelity_baseline.json — the exact Batch-0 mechanism DR-2
§6 already specifies and calls "proven across ten registries already"
[ASSET_DROPIN_CONTRACT.md:139-142]; (2) the resolver's key becomes id + tier with **fallback down
the ladder to the nearest authored tier** (the same degrade-to-placeholder discipline already in
ResolveSound, HumanityAudioSubsystem.cpp:55-75), so an unauthored tier never nulls; (3) the VFX
row's generation_status moves from N/A to the real five-state enum, because the ladder makes VFX a
generated class whether or not the base cue is hand-authored.
---
Class: MISSING · Priority: HIGHEST · Owner: spec-doc (DR-2 + engine doctrine) ·
Wave: before the DR-2 freeze (this is the binding amendment's substance)
What the titles prove. Journey is one signature-fidelity world; DOOM Eternal grades arenas but
never lets a set-piece inherit a corridor's budget. A ceiling surface must be *declared* a ceiling
surface before its assets are requested, because the request is where budget is spent.
Current state (cited). The charter amendment is LANDED — "the MYTHOLOGICAL REALMS + the fairy
realm are declared CEILING-SETTING art surfaces for this lens; the DR-2 tiered-asset request contract
must reserve the realm tier's headroom before it freezes"
[docs/proposals/COMPARATOR_LENS_PROGRAM.md WAVE P1-C, quoted verbatim at
docs/proposals/REALM_DESIGN_PROGRAM.md:1216-1219]. What is absent is any mechanism: DR-2 has no
fidelity/budget class on any of its eleven rows; and docs/ENGINE_OPTIMIZATION_DOCTRINE.md — the doc
that owns per-asset budgets (§5.1-§5.6) and even says "vs the class budget" at §5.6 F8 — contains the
word realm zero times across 1920 lines. Positive control: the same scan of the same file
returns tier ×162, budget ×126, Nanite ×76, so the read is live. The realms are therefore
budgeted today exactly as an ordinary region: §5.3's creature budgets (24k/60k/120k), §5.4's 1.10 ms
translucency+Niagara row, §5.6's per-region RT-instance and light budgets, with no headroom class
above them.
Self-refutation attempted. (a) *"The realms build last, so this defers."* The REALM_DESIGN_PROGRAM
answered this in advance and against itself: "the DR-2 tiered-asset request contract freeze[s] soon…
if that charter amendment missed, the asset contract would freeze against earthly-region assumptions
and the realms would inherit a tier never sized for them" [REALM_DESIGN_PROGRAM.md:1635-1640].
(b) *"Scalability settings already give headroom."* §7.3's three-level scalability architecture scales
*cost across hardware*, not *ambition across content classes* — a realm rendered at Epic still obeys
the same per-asset authoring budget as a village. Survives.
Reuse-first recommendation. See §"THE REALM-TIER RESERVATION" below — a seven-clause, paste-ready
addition to ASSET_DROPIN_CONTRACT.md §7 as open item 6, riding the assetgen block, the existing
five-state enum, the existing regeneration_trigger, and the existing QA tier_applicability field.
Zero new systems.
---
Class: WEAKER · Priority: HIGH · Owner: spec-doc · Wave: before the DR-2 freeze
What the titles prove. DMC5 has both axes and never confuses them: a weapon's *style level* is
player-earned expression; the *asset class* of a boss arena is production budget. They are authored by
different people against different rubrics.
Current state (cited). Both axes are called "tier" in our corpus, in adjacent sentences.
MASTERY tier: "each ability family carries per-mastery-TIER presentation variants"
[COMBAT_PROGRAM_ADDENDUM.md:77-79]; implemented as
PresentationTier = FMath::Clamp(FMath::RoundToInt(Row.tier_numerical), 1, 12)
[HumanityAbilityFoundry.cpp:42]. CEILING tier: "the tiered-asset contract must carry a realm tier
above the region tier" [REALM_DESIGN_PROGRAM.md:1178-1180]. A third "tier" is the QA rubric's
tier_applicability = *final-tier footage vs greybox* [QA_WATCHING_PROGRAM.md §4.4]. Three distinct
meanings, one token, and the contract that must carry two of them is unwritten.
Self-refutation attempted. *"Naming is cosmetic."* It is not, because the resolver key and the
prompt-composer field are both about to be named: if one tier column ships, a realm-tier Naraka
fireball and a mastery-tier-12 fireball become the same request, and the ladder's _T12 key silently
doubles as a budget class. Survives.
Reuse-first recommendation. Ratify two distinct names in the same commit that adds them:
presentation_tier_ref (mastery, on the ability/weapon rail — already the ruled name) and
generation_tier (fidelity class, on the assetgen block, enum in PC-2's clause list). Never a single
tier. One line in DR-2 §1's invariant block; costs nothing now, unrecoverable later.
---
Class: WEAKER · Priority: HIGH · Owner: spec-doc + schema-data · Wave: before the DR-2 freeze
What the titles prove. GGST is the definitive economy lesson for a small team: one effect set,
graded by color/scale/timing, reads as a hundred. DMC5 bands its escalation into a handful of discrete
states (D/C/B/A/S/SS/SSS), not a continuous per-level ladder — because *discrete states are
authorable* and continuous ones are not.
Current state (cited). The game synthesizes the key rather than reading canon:
PresentationTierRef = FString::Printf(TEXT("%s_T%d"), *Elem, PresentationTier)
[HumanityAbilityFoundry.cpp:44], with the honest comment "There is no presentation_tier_ref DT
COLUMN (35 cols); the variant-selection key is SYNTHESIZED" [:38-41]. Live sizing from the canon
rail: T0_Ability_Tree_Registry = 185 rows, 35 columns, 31 distinct element values (10 base +
21 hybrids: Fire+Air, Earth+Poison, Ether-Crown/ThirdEye/Throat…), tier_numerical spanning 1.0-8.0
while the code clamps 1-12. That is 31 × 12 = 372 synthesizable variant keys for ability VFX
alone, before weapon movesets (72 weapons on their own mastery track per
COMBAT_PROGRAM_ADDENDUM.md:79-80). Positive control: the same header scan returns
cast_pattern populated 185/185 and element 185/185, so the parse is live. Consequence for the
freeze: a synthesized key is not a registry RowName, so DR-2 §4's W11 tooth — "the stable-id
UPROPERTY equals its registry RowName" [ASSET_DROPIN_CONTRACT.md:110-113] — **cannot fire on the
ladder's assets at all**. The ladder is outside the audit that is supposed to prove the contract holds.
Self-refutation attempted. (a) *"Hybrids inherit from their base pair, so it's really 10 × 12."*
Nothing states that anywhere — that inheritance rule is exactly the missing contract clause, not an
existing mitigation. (b) *"Greybox scaling covers it (+5% cast rate, +8% VFX per tier,
:98-107)."* Correct and good — as a *stand-in*. The addendum itself calls it "Greybox interim"
[COMBAT_PROGRAM_ADDENDUM.md:83]; the ruling is real tiered art.
Reuse-first recommendation. Ratify presentation BANDS, not 12 tiers, in the DR-2 clause:
presentation_tier_ref resolves to a small closed band set (recommend 4: novice · adept · master ·
apex) keyed on base element only, with hybrids declared to inherit their dominant base band. That
turns 372 unauthorable keys into 10 base elements × 4 bands = 40 authored variant sets, and the
existing monotonic greybox scale (GetPresentationCastRateScale/GetPresentationVfxScale) stays as the
*continuous interpolation between bands* — so the player still feels every tier while the pipeline
requests forty things. Band boundaries can sit on the already-canonical 12-level mastery ladder's own
gates (5→6 and 11→12 are Josh-ruled gate points), so the bands are derived from canon, not invented.
---
Class: WEAKER · Priority: HIGH · Owner: P1/P2 (engine) + spec-doc · Wave: before the first real montage imports
What the titles prove. In DMC5 and GGST the frame data *is* the animation — active frames are the
animation's active frames, and every cancel window is an authored notify. A fighting-game-grade read
is impossible when the hitbox clock and the animation clock are two clocks.
Current state (cited). The machine is genuinely good and already ratified: FHumanityAttackRow
carries WindupSeconds / ActiveSeconds / RecoverySeconds, the ruled counter matrix
(EHumanityCounterClass: Any / DodgeOnly / ParryOnly / Neutralize) and the punish window
[Source/Humanity/Public/Combat/HumanityAttackLibrary.h, struct + enums; header comment binds it to
register entries #11 and #14]. Every duration is a float in seconds, driven by the owner's own
timers ("The owner drives the windup->active transition through its OWN telegraph->strike timers"),
and the only presentation field is FString TelegraphShape = TEXT("disc") — "A ref, not baked art."
There is no montage, notify, or animation reference field on the row. Repo-wide: the game binds a
single stock AnimBP — `ConstructorHelpers::FClassFinder<UAnimInstance> UnarmedABP("/Game/Characters/
Mannequins/Anims/Unarmed/ABP_Unarmed") [HumanityCharacter.cpp:138-150`] — and a search of
Source/Humanity for montage|AnimMontage|AnimInstance|AnimBlueprint|ABP_ returns **6 hits in 2
files, all of them that one bind plus an include. Positive control:** the same search pattern in
the same corpus returns 121 hits across 28 files for hit-stop|HitStop|TimeDilation|telegraph, so
combat-presentation code is reachable and the animation zero is real. Downstream: the plan already
budgets an external "mocap/body-animation library (Fab/ActorCore/Mixamo) + retarget_participants.py"
[docs/PRE_5090_BUILD_PLAN.md:1979] — assets are coming into a system with no declared authority.
Self-refutation attempted. (a) *"Durations are ILLUSTRATIVE behind the tuning firewall, so they'll
be retuned when art lands."* The firewall governs *magnitudes*; it does not answer *which artifact is
authoritative* when a purchased 1.4 s windup animation meets a 0.9 s canon row. Without a ruling the
answer will be improvised 200 times. (b) *"Root motion / notifies are an engine detail, not design."*
They are the design: the punish window is a *readable pose*, and a recovery the animation does not
show is a mechanic the player cannot see. Survives.
Reuse-first recommendation. One ruling plus one tooth, no new system. Ruling: the canon ROW is
authoritative and the montage is retimed to it (this preserves the ratified counter matrix and the
QA-measurable telegraph lead; the alternative — notifies authoritative — would let a purchased asset
silently rewrite canon). Tooth: add optional montage_ref + notify_windup/active/recovery to
FHumanityAttackRow, and one check in the existing QT-5 combat-invariant harness that FAILS when a
bound montage's notify windows differ from its row beyond a declared tolerance. Ships now as a
must-not-fire fixture with zero montages bound; arms itself the day the first one lands.
---
Class: WEAKER · Priority: HIGH · Owner: spec-doc · Wave: P1-C landing
What the titles prove. DMC5's identity is a *craft* document's worth of decisions — cancel
grammar, commit windows, follow-through, weapon-swap readability, per-character motion signature.
GGST's identity is a rendering-and-timing philosophy. Neither is a budget question.
Current state (cited). T1_Combat_System_Spec [ACTIVE v1.0] — the T1 domain authority that owns
Block/Parry/Dodge, the weapon frameworks, and the bonus lanes — contains **animation ×0 and VFX
×0 across 667 lines. Positive control:** the same scan of the same file returns parry ×16,
audio ×5, music ×3, so the read is live. Three T1 seats that could hold craft are byte-empty
stubs: T1_Audio_Spec [DRAFT v0.1] = 34 bytes, T1_UI_UX_Spec [DRAFT v0.1] = 35 bytes,
T1_Personal_Dimension_Spec [DRAFT v0.1] = 48 bytes (register entry 22 names exactly these).
What exists instead is excellent *budget* doctrine wearing a craft title:
ENGINE_OPTIMIZATION_DOCTRINE.md §5.4 "Every ability / VFX asset (the presentation ladder's hard
requirement)" is ten DO/DON'T rows about ms, emitters, instruction counts and scalability — plus D10,
which is a genuine design rule smuggled into a perf table. §5.3's skinned-asset table is likewise
budget (LOD chains, Animation Budget Allocator, Mass crowds). Register entry 29 independently records
the adjacent hole: "The presentation doctrine (camera continuity, cut policy, diegetic transition
covers) is never ruled" [DESIGN_GAP_REGISTER.md:338-340].
Self-refutation attempted. *"Craft doctrine before any animation exists is premature."* The
opposite: CN5.2 is about to bake camera blocking into 11 templates (same register entry), the mocap
library is a budgeted purchase, and the DR-2 prompt composer needs craft language as its *input*. A
craft doctrine written after 200 montages exist is a retrofit. Survives.
Reuse-first recommendation. Do not mint a new T1 doc. Land the craft law as a new section of
T1_Combat_System_Spec (it already owns the defensive-layer taxonomy the craft law describes), paired
one-to-one with ENGINE_OPTIMIZATION_DOCTRINE §5.4 so each craft rule names its budget rule, and
route camera/cut policy to register entry 29's existing Josh brief rather than duplicating it. Scope
it to what only craft can decide: commit-vs-cancel policy, root-motion policy, hit-reaction taxonomy,
follow-through and settle, and the per-tier fluidity vocabulary the ladder's prompts will quote.
---
Class: DESIGNED-UNBUILT (the art) · WEAKER (the vocabulary sizing) · Priority: MEDIUM-HIGH ·
Owner: P1/P2 + schema-data · Wave: W2 FEEL / P2
What the titles prove. DOOM Eternal's arena is legible at a glance because *every* systemic state
has its own channel — enemy stagger, weak point, ammo class, resource type. Legibility is a per-state
vocabulary, not a per-hit effect.
Current state (cited). The channel is real and honest about itself: five families —
Hit, Telegraph, Status, VrilPolarity, ComposureBroken — each a subclass whose entire body is
UE_LOG(...) with the comment "Placeholder: prove the channel by logging. No Niagara/audio -- art
rides the 5090" [HumanityGameplayCueNotifies.cpp:9-45]. Content backs that up:
Content/Audio/SFX = 14 assets (mostly _placeholder), Content/Combat = 1 StateTree, and
find Content -iname "NS_*" -o -iname "*Niagara*" = 0 across 309 uassets. Positive control:
the same find over the same tree returns 14 named SFX uassets, so the search can match. The states
those five families must express: 13 authored status effects (Crush, Burn, Saturate, Windburn,
Impale, Slow, Abrasion, Scald, Asphyxia, Freeze, Shock/Paralyze, Poison, Life-heal —
COMBAT_PROGRAM_ADDENDUM.md §3), 31 element values, 4 counter classes, the punish window, part-break,
pip fill/wipe/chain-complete, and the ruled arena_mutation class (§6).
Reuse-first recommendation. Don't add families; add a parameter contract to the five. The cue
FGameplayCueParameters already travels with every fire — declare the closed parameter set the art
must read (element, presentation_tier_ref, status_class, counter_class, phase) in the same
DR-2 clause as PC-1, so one Niagara system per family can branch instead of forty systems existing.
This is precisely GGST's economy and it costs one struct declaration now versus a re-author later.
---
Class: MISSING · Priority: MEDIUM · Owner: spec-doc → P2 · Wave: post-slice
What the titles prove. DMC5's style meter is the canonical *style-without-power* instrument: it
grants no damage, no progression, no unlock — it changes only presentation (rank glyph, announcer,
music layer) and it *decays on repetition*, which is what actually produces varied play. That is the
cheapest known anti-repetition instrument in action games and it grants zero power.
Current state (cited). Our chain meter is the ruled *correctness* instrument, not an expression
one: 5-7+ correct counters in a row on a visible pip meter that WIPES on a mistake, per Josh's ruled
puzzle-boss design (HumanityChainMeter.cpp live; the ruling in memory puzzle-boss-chain-meter-design
and COMBAT_PROGRAM_ADDENDUM context). It rewards the *right answer repeated*, which is the exact
opposite incentive to variety. Meanwhile the balance doctrine's stated goal is "hundreds to thousands
of equally viable builds… META-COLLAPSE banned" with build-space sweeps measuring breadth
(T1_Combat_System_Spec "Build-Role Taxonomy and the Balance Doctrine" §; addendum §10) — breadth is
measured at the *build* layer and never at the *moment-to-moment* layer.
Divergence check (important). This does not re-litigate the no-scoreboard divergence: that
divergence governs progression stats [wave rule; DESIGN_GAP_REGISTER.md §Covered/Divergent].
A presentation-only expression channel grants no stat, shows no leaderboard, and stores nothing.
Self-refutation attempted. (a) *"Josh ruled the pip meter; proposing a second meter re-opens a
ruling."* Which is why the recommendation adds no meter. (b) *"A style rank is tonally wrong for a
grounded rated-R world."* DMC5's *presentation* of it is tonally wrong; the mechanism is not. Journey
proves the same mechanism with no UI at all — the score swells when you play well. Survives as a
presentation channel, not as a rank.
Reuse-first recommendation. Give the **presentation ladder's variant selector a second, transient
input**: unbroken-chain state (already computed by HumanityChainMeter) temporarily promotes the
rendered band by one step. No new meter, no new UI, no stat, no storage — the player's cast simply
*looks and sounds* like a higher-mastery cast while they are performing well, and drops back when they
are not. One extra argument to GetPresentationTierRef(), and it makes the 40 authored band-variants
of PC-4 carry double duty.
---
T1_Audio_Spec is a vacant AUTHORITY seat, not an absent design; 820 lines of audio doctrine live outside the tier hierarchyClass: WEAKER (misfiled home; the design exists) · Priority: MEDIUM-HIGH · Owner: spec-doc ·
Wave: P1-C landing (cheap, zero-token)
What the titles prove. Journey's audio identity survived a five-year production because one
authority owned it. Ours has an owner-shaped hole.
Current state (cited). _source/01_Tier_1_Foundation/T1_Audio_Spec [DRAFT v0.1].md is **34 bytes:
a title line and a blank line** — verified by direct read. But the doctrine is NOT missing:
docs/translation/T99_Translation_Audio.md is 820 lines with a full three-chain pipeline (Music
Steps 1-7, Voice Steps 1-7, SFX Steps 1-6), a ruled licensing posture (§2.1 royalty-free-owned only),
a ruled engine substrate (§2.2 MetaSounds + Quartz), the ruled voice split (§2.4 Kokoro bulk +
ElevenLabs behind the clone gate), and a per-region build checklist (§5); `T1_Build_Pipeline_Contracts
[ACTIVE v1.0] §3.2-3.8 owns the schema; PRE_5090_BUILD_PLAN_VOL2.md` carries **AU-1..AU-13 + AU-S +
QT-AU + DR-AU1/DR-AU3** with per-item absence proofs. So the honest verdict is *misfiled*, not
*missing* — but the consequence is real: T1 is the tier that wins conflicts (CLAUDE.md authority
hierarchy), and a T99 operational doc plus a region page's Section 10 cannot arbitrate each other.
Reuse-first recommendation. Do not re-author 800 lines. Make T1_Audio_Spec a **two-page authority
stub** that (a) delegates the pipeline to T99_Translation_Audio and the schema to
T1_Build_Pipeline_Contracts §3, by name, and (b) owns only what nobody owns today: the score's
dramatic law (PC-10), the per-region identity law (PC-11) and the per-realm identity law (PC-12/R-A16).
It closes register entry 22's audio third, costs a desk hour, and gets a DOC_MAP row per the anti-orphan
rule.
---
theme_type declares place and path and zero rows use themClass: WEAKER · Priority: MEDIUM-HIGH · Owner: spec-doc + schema-data · Wave: P1-C → W7
What the titles prove. DOOM Eternal's score is a *combat-state machine* (explore → engage →
finisher) and Journey's is a *pacing instrument* whose most powerful move is stopping. Both are
authored dramatic laws — when music enters, when it leaves, what a leitmotif costs to spend, what
silence means. The graph technology is downstream of that law.
Current state (cited). The technology is designed: AU-5 = "Music runtime framework — playback slot
seam is BUILD-NOW" [PRE_5090_BUILD_PLAN_VOL2.md:1275], wired to MetaSounds/Quartz with an honest
spike flag on the Builder API's ceiling [T99_Translation_Audio.md Music Step 6 — "workable for simple
adaptive music… becomes unwieldy for complex interactive scores. SPIKE — scripted test needed"].
The CONTENT law is where it thins. T0_Theme_Registry = 12 rows: 6 character, 1 family, 2 event,
3 ending, 1 concept — PROTAGONIST_THEME, HOUSE_OF_VELHEIM_THEME, ARCHITECT_THEME,
CASSIUS_PHASE_1/2/3, GRAND_SAGE_REVEAL, ENDING_TRULY_GOOD/GOOD_ENOUGH/EVIL, VIMANA_ACTIVATION,
FAMILIAR_BOND. The schema's own enum declares seven types "{character, family, concept, event,
place, path, ending}" [T99_Translation_Audio.md Music Step 1] and **place = 0 rows,
path = 0 rows. Positive control:** the same DictReader over the same file returns character ×4
and ending ×3, so the column parses. Consequence: 76 regions, 79 nodes and 3 integrity paths have
no theme rows at all, and the seven AIVA categories that Music Step 1 enumerates — Regional
Ambient, Vril Site Cues, Personal Dimension Cues — have no registry population to compose from.
Self-refutation attempted. (a) *"Regional music lives on the region pages' Section 10."* It lives
there as a brief, and beautifully (see PC-11) — but a brief is a prompt input, not a cue row, and
music_cue_id_ref on T0_Scene_Spec_Registry has nothing regional to point at. (b) *"Adaptive score
is 5090-gated."* Generation is; the law is not, and Music Step 1 is explicitly a pre-hardware
compose step. Survives.
Reuse-first recommendation. Two moves on existing rails. (1) The dramatic law lands in the
T1_Audio_Spec authority stub (PC-9) as four rules: entry/exit conditions per state, the silence rule
(where the score deliberately stops — Journey's instrument, and our arrival/vista beats are the R-A17
awe surface), leitmotif economy (how many times a motif may be spent before the Ch-77 reveal — this is
also a reveal-discipline surface, since GRAND_SAGE_REVEAL leaking early is a §17 concern already
flagged in Music Step 1's hard-line check), and the combat↔exploration transition budget. (2) Mint
place rows against the existing theme_id schema for the slice's regions only (Ch 2-13), so AU-5
has something to play and the state machine is provable before the 5090.
---
Class: DESIGNED-UNBUILT (with a zero-token wiring fix) · Priority: MEDIUM-HIGH ·
Owner: schema-data (deterministic script) · Wave: now (GPU-free)
What the titles prove. DOOM's arenas and Journey's regions are recognizable *by ear alone*. The QA
program already agrees this is our bar — its audio rubric's named measure is "blind per-region
distinctness" [QA_WATCHING_PROGRAM.md §4.4].
Current state (cited). The authoring is genuinely strong. Region-page Section 10 ("Music Sound and
AIVA Composition Brief") on _source/02_Tier_2_Region_Pages/flores_island.md is 25 substantive lines:
the gong-waning ensemble as the region's Thread-21 vril-active instrument, per-track-type AIVA briefs
each tagged {adaptive | loop | oneshot}, a no-sampling-of-consecrated-performance care rule, the
voice-tiering split, and an honest substrate-confidence flag. T0_SFX_Registry [ACTIVE v1.0] = **30
rows across 12 distinct region_id values, of which 19 are layering_role=ambient_bed**
(17 sfx_class=ambient + 4 cultural_traditional + 8 gameplay_cue + 1 cinematic_cue by class),
spanning egypt, levant, celtic_norse, anatolia,
peru_nazca, bolivia_uyuni, pacific_revisit and 8 for flores_island specifically (SFX_00013-00020:
Liang Bua cave interior, monsoon-forest approach, Kelimutu crater rim, Mount Inerie cone-country wind,
waterfall near/far, Manggarai village dusk, monsoon rain layer).
The join is empty in the other direction. T0_Region_Index carries three audio array columns —
region_footstep_sfx_id_ref_array, region_environmental_ambient_sfx_id_ref_array,
region_ritual_context_sfx_id_ref_array — and all three are populated 0 of 76 rows, including
flores_island itself, which has eight authored ambient rows pointing *at* it.
Positive control: the same DictReader on the same file returns page_status and node_kind values
for all 76 rows (48 pending / 13 priority / 11 dimensional / 4 Research Phase), so the parse is live
and the zero is real. This is exactly the defect Vol2's AU-4/AU-13 dives named ("ambient array declared
unpopulated, island silent"; "arrays on 10 registries declared unpopulated"), and AU-4's runtime is
driven off precisely the column that is empty.
Reuse-first recommendation. Zero-token, zero-model: a deterministic populate through the sanctioned
writer pattern (the harness/apply_*_columns.py --dry-run/--apply discipline the realm program cites at
REALM_DESIGN_PROGRAM.md §5.1) that fills each region's three arrays **by inverting the SFX rows'
own region_id + sfx_class/layering_role** — the data to build the index already exists and needs
no authoring judgment. Refresh docs/fidelity_baseline.json in the same commit per the standing rule.
This closes AU-13's join, gives AU-4 something to read, and makes QT-AU's non-silent floor meaningful
on Flores rather than vacuously green.
---
Class: MISSING (identity law + rows; the schema itself is COVERED) · Priority: HIGH ·
Owner: spec-doc + schema-data · Wave: with the DR-2 reservation
What the titles prove. Journey's every zone is a different instrument. A realm that sounds like a
louder region is not an otherworld — and Josh's standing direction is that realms "must be REAL
otherworlds, not slop" (realm-stratum-vision).
Current state (cited). The rows exist and are correctly typed: T0_Region_Index carries
atlantis, pohljar, tiamarath, maatherion, hades, xibalba, naraka_meru, annwn,
yggdrasil at node_kind=mythic_realm, plus fairy_realm. Every one has page_status=dimensional,
empty region_environmental_ambient_sfx_id_ref_array, empty ambient_elemental_affinity, and
env_profile_status blank (fairy_realm: stub). T0_SFX_Registry: 0 of 30 rows carry any realm
region_id (the 12 distinct values are all earthly: egypt, levant, greece, celtic_norse, anatolia,
peru_nazca, bolivia_uyuni, pacific_revisit, sami_sapmi, caribbean_haiti, australia, flores_island).
T0_Theme_Registry: 0 of 12 rows anchor to a realm. Positive control: the identical query
returns 8 SFX rows for flores_island, so the filter can match.
The selector trap (concrete, decision-grade). node_kind counts are
base 50 · revisit 9 · mythic_realm 9 · atlantic_waypoint 6 · story_anchor 1 · bookend 1. The fairy
realm — the *crown jewel* and the declared apex of the ceiling per the realm program's intensity ladder
— is the single story_anchor row, not a mythic_realm. Any realm-tier query, budget rule, prompt
filter or QA rubric keyed on node_kind='mythic_realm' returns 9 rows and **silently excludes the one
surface the ceiling is defined by**. page_status='dimensional' returns 11 (the 10 + epilogue) and is
the safer selector, but nothing declares that anywhere.
Reuse-first recommendation. (1) Ratify the realm selector in the DR-2 clause — recommend an explicit
generation_tier='realm' value written onto all ten rows, never a node_kind filter, so the fairy
realm cannot fall out of a query again. (2) The per-realm audio identity law lands in the
T1_Audio_Spec stub as one paragraph per realm-tier requirement (its own instrument/timbre law, its
stem-count and spatialization headroom, and the §17.1 care constraint that living-cosmology realms —
the Duat, Naraka/Meru, Xibalba, Annwn per REALM_ANALYSIS_ART_PIPELINE §2.5 — get reference-first
sonic sourcing exactly as they get reference-only Panel A). (3) The QA audio rubric's "blind per-region
distinctness" measure gains a realm band at the same time it is armed — otherwise a realm passes
against a region floor, which is the precise failure the ceiling amendment exists to prevent.
---
Class: COVERED · Priority: — · Owner: — · Wave: —
What the titles prove. DOOM Eternal teaches its economy through sound: every resource, pickup and
state has a distinct, learnable cue, so the player reads the system without a tutorial.
Current state (cited). T0_SFX_Registry carries 8 gameplay_cue rows covering exactly that
teaching surface for the slice: SFX_00021 Gather-Yield Confirm, SFX_00022 Mineral Vein Strike,
SFX_00023 Vril Recharge Fill Loop, SFX_00024 Vril Recharge Fill-Complete, SFX_00025 Pip Fill
Tick, SFX_00026 Pip-Wipe Damp Thud, SFX_00027 Chain-Complete Resolution Swell, SFX_00028 Pips
Reveal Subtle Appearance. The pip set in particular gives Josh's ruled chain meter its own audio
grammar (fill / wipe / complete / reveal) — a designed instrument, not an afterthought. Recording this
as COVERED so the lens is not read as "audio is a hole": the *slice's* teaching cues are designed; what
is missing is the score law (PC-10), the region join (PC-11) and the realm tier (PC-12).
---
Class: WEAKER · Priority: MEDIUM-HIGH · Owner: QA loop · Wave: armed at handshake
What the titles prove. DMC5's escalation is verifiable because it is discrete and ordered — every
rank is visibly and audibly above the one below. An escalation nobody can *measure* is an escalation
that flattens in the middle, and the player only ever feels the flat part.
Current state (cited). The perf doctrine gives the ladder a genuinely good rule and a real
criterion: D10 — "THE MASTERY-TIER DISTINCTION IS PRESERVED AT EVERY SPEC CLASS; ONLY ITS COST
SCALES… Serving the tier-1 effect for a tier-12 ability is a canon defect, not a scalability
decision," verified by "a per-tier paired capture at minimum AND recommended spec, judged by the image
critic on one question — *is the tier-12 variant identifiable as tier-12 at this class?*"
[ENGINE_OPTIMIZATION_DOCTRINE.md §5.4 D10]. That is a tier-1 vs tier-12 check. The ladder has 12
rungs (code clamps 1-12) and the greybox implements a *linear* ramp (+5% cast rate, +8% VFX per tier
[HumanityAbilityFoundry.cpp:98-107]). A 2-point check passes a ladder that jumps at rung 12 and is
flat from 2 to 11 — which is exactly what a generation pipeline producing "a novice one and a hero one"
will naturally deliver. The QA program's own machinery is ready for the fix but not pointed at it:
tier_applicability marks tier-dependent measures INERT below final tier, and §4.3 rules that "only
ordinals, bands and relations gate" [QA_WATCHING_PROGRAM.md §4.4, §4.3].
Reuse-first recommendation. One rubric row on the existing board machinery, not a new instrument: a
ladder-monotonicity measure that samples the ladder at its band boundaries (with PC-4's banding:
4 points, not 12), requires a non-decreasing ordinal across them per element band, and ships with
the mandated must-fire fixture (a synthetic ladder whose rung 3 is a copy of rung 2 must FAIL) and
must-not-fire fixture. band_source=hand until extraction lands, tier_applicability INERT at greybox
— i.e. it obeys the program's existing honesty rules by construction and costs one row.
---
Class: WEAKER · Priority: MEDIUM-HIGH · Owner: spec-doc (art bible) · Wave: before the first Lane-P plate
What the titles prove. This is the title set's single most transferable lesson for a solo dev whose
art is generated. GGST got a AAA look on a small team by making a rendering decision (3D authored to
read as 2D, shadow-stepped, per-frame-controlled) rather than by out-spending anyone. Journey's entire
identity is one signature material — the sand. DMC5's is a lighting and camera signature. In all three,
one declared signature does more work than the whole asset budget.
Current state (cited). The repo has the *discipline* and not the *target*. The discipline is ruled
and correct: "spectacle comes from motion, timing, silhouette and light — which are nearly free —
rather than from more overlapping translucent layers" [ENGINE_OPTIMIZATION_DOCTRINE.md §5.4, D6
commentary]; D10 protects the reward; §6.5 requires paired min/recommended captures and a
neural-features-off validation pass so "we have [not] shipped a game that looks broken to most of
Steam." The art-concept program adds a de-slop critic [REALM_ANALYSIS_ART_PIPELINE_2026-07-27.md
§5.4] and a per-realm art bible [§4.2]. But every one of those grades *against slop* — a negative
standard. Positive control on the absence: searching the engine doctrine for realm returns 0 while
tier returns 162 and Nanite 76; searching ELEMENTS_MATRIX_RECOVERED.md for
color|silhouette|VFX|visual|palette returns 0 across all five terms while element returns 17. No
document in either repo declares the one rendering/lighting/material signature by which a Humanity
screenshot is recognizable as Humanity.
Self-refutation attempted. (a) *"That is Josh's call and belongs in a board, not a lens finding."*
Agreed on the ruling; the finding is that no board slot exists for it — the art-pipeline board's
three panels are accurate / enhanced / surrounding [§1.2-1.4], all per-realm. A signature is
cross-realm and has no home. (b) *"The CVD sets the vision."* The CVD sets the pillars and the AAA
direction; it does not name a rendering signature, and §17.14 governs prose formatting. Survives.
Reuse-first recommendation. Add a SIGNATURE panel to the existing pre-hardware board (§6.4's
reference-moodboard board, which is explicitly shippable with no GPU) — one board, once, cross-realm,
carrying 3-4 candidate signatures with their cost profile (a signature built from motion/timing/
silhouette/light is nearly free per D6; one built from translucency is not). Ratify it into the art
bible's cross-realm head so every prompt inherits it and the de-slop critic finally has a positive
target to grade against. This is the cheapest AAAAA-defensibility instrument on this lens's list.
---
Class: MISSING · Priority: MEDIUM-HIGH · Owner: spec-doc (canon lane) · Wave: before the DR-2 freeze (it is the prompt composer's input)
What the titles prove. DOOM Eternal's projectile-color law is a *legibility system*, not decoration:
threat class is readable before the shape resolves. GGST assigns each character a fixed effect palette
so a busy screen stays parseable. The law is authored once and every asset inherits it.
Current state (cited). The negative half is ruled and strong — "vril-polarity multi-channel
readability is a non-negotiable L1-playability requirement… readable without color alone"
[docs/COMBAT_ENCOUNTER_SYSTEM.md:267, 415; docs/BATCH1_RULINGS.md:55, 75], and the shape channel is
built (HumanityEncounterVolume.cpp:338 — "the color-independent SHAPE channel (accessibility floor)").
Register entry at DESIGN_GAP_REGISTER.md:102-108 already proposes extending that shape rule to two
more surfaces — this finding is the other half and does not duplicate it: what fire, water, earth,
air, lightning, vegetation, poison and the three Ether seats each *positively look and move like*.
That law is absent. T0_Ability_Tree_Registry has 31 element values and no visual column;
T0_Element_Effectiveness = 124 rows of `attacker_element/defender_element/effectiveness/attacker_axis/
source and nothing presentational; docs/original_predclaude/ELEMENTS_MATRIX_RECOVERED.md` returns
0 hits for color, colour, silhouette, VFX, visual, palette across 105 lines
(positive control: element ×17 in the same file).
Why it is contract-critical rather than merely nice. PC-4 sizes the tiered-asset request at up to
372 keys. Every one of those is a generation prompt. Without an element law the prompt composer has no
per-element constraint to emit, so 31 elements × N tiers get generated ad hoc and the elemental system
— the spine of both the combat matrix and the vril doctrine — reads as noise. Authoring the law is
GPU-free and pre-hardware.
Reuse-first recommendation. One table, on an existing canon home: extend
T0_Element_Effectiveness's companion doc (or the recovered matrix's lane) with a per-BASE-element
presentation row — dominant hue band, silhouette primitive, motion signature, sound register — and a
declared hybrid-inheritance rule (a hybrid reads as its dominant base plus one modifier channel), which
also supplies PC-4's banding its inheritance. It becomes the prompt composer's per-element constraint
block and the de-slop critic's per-element checklist. Bind it to the ruled accessibility floor: hue is
never the sole channel, silhouette and motion always carry the read.
---
The amendment says DR-2 "must reserve a REALM TIER above the region tier before it freezes." Stated as
seven paste-ready clauses for docs/ASSET_DROPIN_CONTRACT.md §7 (new open item 6), each riding
machinery that already exists:
1. **A generation_tier column on the assetgen block, with a closed enum that already contains
realm.** Recommended enum: background · region_standard · region_hero · realm · apex. The value
must exist *at freeze* even though no realm asset is generated for years — adding an enum value later
re-baselines docs/fidelity_baseline.json across every registry that carries the block and re-opens
the frozen contract. Lands via DR-2's own Batch-0 mechanism (registry_extensions.json +
fidelity_baseline.json in one commit), which §6 already calls proven across ten registries.
2. generation_tier is a REQUEST parameter and a registry column — NEVER a path segment. Convention
paths stay tier-free (/Game/Meshes/<class>/SM_<mesh_id_ref>). This is what preserves the drop-in
guarantee: upgrading a surface from region to realm fidelity becomes a *re-generation at the same id*,
with zero code, Blueprint or actor changes, exactly as §1's invariant promises.
3. generation_prompt_hash includes the tier. Then a tier change automatically sets
regeneration_required through the existing regeneration_trigger (§3) — the reservation
self-enforces with no new machinery, and a realm asset accidentally generated at region tier is
caught by the state machine rather than by a human noticing.
4. The realm selector is the tier value, never node_kind. Write generation_tier='realm' onto all
ten rows — the nine mythic_realm rows plus fairy_realm, which is node_kind='story_anchor'
and is silently dropped by the obvious filter (PC-12). Ten rows, one script, through the sanctioned
writer.
5. Two tier axes, two names, ratified in the same commit (PC-3): presentation_tier_ref = mastery
variant selection; generation_tier = fidelity/budget class. A single tier column collides them.
6. The perf side reserves headroom in the same pass. ENGINE_OPTIMIZATION_DOCTRINE.md contains the
word *realm* zero times; §5.3's skinned budgets, §5.4's 1.10 ms translucency/Niagara row and §5.6's
per-region class budgets are the only classes that exist. Add a realm column to those tables (or an
explicit "realm inherits region budgets, ruled" line) — either is fine, but the silence is not,
because §5.6 F8 already gates on "the class budget" and there is no realm class to gate against.
7. The QA bands reserve headroom too. QA_WATCHING_PROGRAM.md §4.4's rubric bands derive from
final-tier footage with tier_applicability per measure, and its audio rubric's named measure is
"blind per-region distinctness." Both need a realm band declared at freeze, or the ceiling surfaces
get graded against a region floor and pass — the exact failure the amendment exists to prevent.
Cost honesty. Clauses 1-5 are schema and desk work, GPU-free, and land in a single gate-green commit.
Clauses 6-7 are one table column and one rubric row each. None requires the 5090, and every one of them
becomes materially more expensive after the freeze.
---
[DESIGN_GAP_REGISTER.md:213]. PC-10/PC-11/PC-12 do not propose a diegetic radio-station system;
they concern the adaptive score, the ambient bed join and per-realm identity. The repo's own QA
program names "blind per-region distinctness" as a rubric measure, which is the positive signal that
regional sonic identity (as distinct from radio) is wanted.
nothing, and shows no rank.
Josh brief; PC-6 routes to it rather than duplicating it.
DESIGN_GAP_REGISTER.md:216-217]; PC-7 does notre-open it.
PresentationTier, PresentationTierRef, GetPresentationCastRateScale() (+5%/tier),
GetPresentationVfxScale() (+8%/tier) [HumanityAbilityFoundry.cpp:38-44, 63-69, 98-107], landed and
recorded at PRE_5090_BUILD_PLAN.md:845-846. The finding had to be re-scoped to the *contract*, which
is what PC-1 does.
docs/translation/T99_Translation_Audio.md, AU-1..AU-13 + AU-S + QT-AU + DR-AU1/DR-AU3 in Vol2, T1_Build_Pipeline_Contracts §3, and a rich
Section 10 on every authored region page. Re-scoped to PC-9's *authority seat*.
QA_WATCHING_PROGRAM.md is sequence capture with two strips and a burst clock, and QS-20 adds a
motion_class enum (none|motion|animation|orientation|timing|camera) with a must-fire fixture.
Re-scoped to PC-14's *monotonicity* hole, which that machinery does not cover.
behind a 5090 benchmark gate) with the vendor-claim risk stated.
HumanityCombatFeelSubsystem + CF-1/CF-6/CF-8 in W2 FEEL, with SetGlobalTimeDilation dip and DamageNumber functional tests as the wave's exit.
and part-break systems exist with cue families reserved; the gap is vocabulary sizing, not absence.
docs/DESIGN_GAP_REGISTER.md entries 11 and 12 flip from CLAIMED-QUEUED to the verdicts above;entry 22's audio third is closed by PC-9's authority stub.
docs/ASSET_DROPIN_CONTRACT.md §7 gains open item 6 (the seven-clause reservation) and §2's VFX rowgains the tier/variant treatment from PC-1.
docs/factory_contract.json FR-006's tooth and data_home fields update the moment presentation_tier_ref lands on the extension rail.
docs/ENGINE_OPTIMIZATION_DOCTRINE.md §5.4 gains the craft pairing (PC-6) and §5.3/§5.4/§5.6 gain therealm class (reservation clause 6).
docs/proposals/QA_WATCHING_PROGRAM.md §4.4 gains the ladder-monotonicity rubric row (PC-14) and therealm band (clause 7).
T1_Audio_Spec authority stub needs a docs/DOC_MAP.md row on landing.