LENS_presentation-craft-anim-audio_DRAFT.md

pipelines/LENS_presentation-craft-anim-audio_DRAFT.md

Comparator lens audit — PRESENTATION CRAFT · ANIMATION · AUDIO

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.

---

HEADLINE

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.

---

FINDINGS (16) — COVERED ×1 · DESIGNED-UNBUILT ×2 · WEAKER ×9 · MISSING ×4

---

PC-1 — DR-2 has no tier axis: the ruled tiered-variant requirement cannot be expressed in the contract that consumes it

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.

---

PC-2 — There is no fidelity/ceiling tier ANYWHERE, so the realm ceiling has no mechanism to be reserved with

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.

---

PC-3 — The two tier axes are orthogonal and nothing names them apart; one shared word will collide them at freeze

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.

---

PC-4 — The live variant key is synthesized, not canon, and it sizes the tiered-asset request at ~372 keys nobody has costed

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.

---

PC-5 — Frame data is timer-authored with no animation binding; when the mocap library lands, art and canon will disagree silently

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.

---

PC-6 — Animation and VFX CRAFT has no doctrine home; the budget doc is doing a design doc's job

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.

---

PC-7 — Five log-only cue families must carry a systems vocabulary far larger than five

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.

---

PC-8 — Nothing rewards expressive variety; our only expression meter rewards correctness

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.

---

PC-9 — T1_Audio_Spec is a vacant AUTHORITY seat, not an absent design; 820 lines of audio doctrine live outside the tier hierarchy

Class: 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.

---

PC-10 — The adaptive score has a runtime seam and no dramatic law; theme_type declares place and path and zero rows use them

Class: 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.

---

PC-11 — Per-region ambient identity is authored on one side of a join whose other side is empty 0/76

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.

---

PC-12 — R-A16: the ceiling-setting surfaces have zero audio identity, and the obvious realm selector silently drops the crown jewel

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.

---

PC-13 — The systems-teaching audio vocabulary for the slice is authored, and that is worth recording

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).

---

PC-14 — The ladder's pass/fail is a two-point check; nothing verifies the ladder is monotonic

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.

---

PC-15 — The de-slop critic has a negative standard and no positive one: nothing declares Humanity's signature look

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.

---

PC-16 — 31 elements will be generated against no visual law; the accessibility floor is ruled, the identity is not

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 REALM-TIER RESERVATION — what the binding amendment concretely requires

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.

---

Pre-registered divergences respected (not re-litigated)

[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.

re-open it.

Refuted and dropped (checked, then killed)

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.

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.

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.

Wiring obligations (anti-orphan)

entry 22's audio third is closed by PC-9's authority stub.

gains the tier/variant treatment from PC-1.

presentation_tier_ref lands on the extension rail.

realm class (reservation clause 6).

realm band (clause 7).

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