assets/asset_budgets.json
{
"_doc": "THE BUDGET DECLARATION -- the machine-readable form of the per-asset triangle / LOD-chain / material-slot / collision / vertex-ratio budgets that were ALREADY CANON and that NOTHING READ. Every number here is transcribed from a canon line and carries that line's file, line number and a verbatim ANCHOR substring; GATE 75 `asset_budgets` re-reads every anchor on every run and exits 2 if one no longer resolves, so this file cannot rot away from the canon it mirrors. It invents no number. Where canon declares nothing (a material-slot cap for a skinned class, a collision-primitive measurement, a foliage triangle cap) this file says NOT_DECLARED and the gate prints that tooth under DECLARED NOT-ARMED with its arming condition rather than inventing a threshold.",
"schema_version": "1.0.0",
"emitted_for": "GATE 75 `asset_budgets` (harness/check_asset_budgets.py) and the game-repo LOD-stage checker Tools/assetgen/check_budgets.py, which read THIS file and never carry a number of their own.",
"minted_by": "W-BUDGET, the FACTORY ENHANCEMENT ROSTER item 5 ruling, 2026-08-06",
"declaration_status": {
"tag": "ILLUSTRATIVE-until-5090-benchmark",
"verbatim": "EVERY number below is ILLUSTRATIVE-until-5090-benchmark -- a structural placeholder superseded by the benchmarked value when region build data and the 5090 benchmark day land; the numbers lock no shipped commitment, only the metric set and the per-category governance model do.",
"cite": "T1_DPOLY_PREAMBLE",
"illustrative_does_not_mean_unenforced": "The roster ruling is explicit: 'per-asset triangle/material budgets enforced at the LOD stage (the hood measured 5.59x over floor with no gate anywhere - the factory stamps hundreds; budgets must be teeth, not notes).' An illustrative floor that nothing reads produced a 5.59x LOD0. An illustrative floor that a gate reads produces a NAMED, RATCHETED, SHRINKING backlog. The status governs what a number MEANS (a placeholder, not a ship commitment), never whether it is CHECKED.",
"illustrative_cite": "ROSTER_ITEM_5",
"repin_path": {
"what": "Every number in `classes` is superseded IN THIS FILE by the benchmarked value on the day the 5090 benchmark and real region build data land. The re-pin is one edit to `classes` plus a `--emit-baseline` in the same commit; the gate's B7 anchor check keeps the citation honest across the re-pin, and the baseline ratchet makes the change visible as a movement in the measured backlog rather than a silent loosening.",
"veto_surface_still_open": "the doctrine call to drop triangle budgets entirely as a static-geometry control (an engineering veto -- whether Nanite makes source-triangle caps on statics obsolete), the eventual sign-off on the benchmarked numbers once the 5090 benchmark day runs, and confirmation that the steam_deck_minimum floor is a real ship commitment",
"cite": "T1_VETO_SURFACE"
}
},
"spec_classes": [
"steam_deck_minimum",
"mid_range_pc",
"high_end_pc",
"ultra"
],
"enforced_spec_class": "steam_deck_minimum",
"enforced_spec_class_why": "Canon authors it first as the ship-viability floor -- 'The steam_deck_minimum column is authored first as the ship-viability floor; mid_range_pc, high_end_pc, and ultra scale up from it, ultra unconstrained per the four-spec-class enum above.' A floor is the only column that can fail an asset; the other three are reported as multipliers so the whole picture is on the scorecard.",
"enforced_spec_class_cite": "T1_DPOLY_PREAMBLE",
"citations": {
"T1_S17_HEAD": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 164,
"anchor": "1.7 Target Platform and Performance Budget"
},
"T1_DPOLY_PREAMBLE": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 185,
"anchor": "EVERY number below is ILLUSTRATIVE-until-5090-benchmark"
},
"T1_CREATURES": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 187,
"anchor": "Creatures (skinned non-Nanite) — triangle budget LOD0: 24k / 60k / 120k"
},
"T1_CREATURES_CHAIN": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 187,
"anchor": "LOD chain: 4 / 4 / 3 / 2-to-3 steps"
},
"T1_FAMILIARS": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 188,
"anchor": "Familiars (skinned non-Nanite) — triangle budget LOD0: 18k / 45k / 90k"
},
"T1_WEAPONS": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 189,
"anchor": "Weapons (static Nanite) — triangle cell: Nanite source-uncapped, memory-governed"
},
"T1_MATERIAL_SLOT_CAP": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 189,
"anchor": "Material-slot cap: 4 / 6 / 8 / unconstrained"
},
"T1_VRIL_SITES": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 190,
"anchor": "Vril Sites (static Nanite)"
},
"T1_ARCHITECTURAL": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 191,
"anchor": "Architectural Features (static Nanite)"
},
"T1_NPCS": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 192,
"anchor": "falls to the skinned non-Nanite triangle budget as for Creatures"
},
"T1_SPECIAL_CLASS": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 193,
"anchor": "Special Asset Class — inherits whichever bucket its closest analog falls into"
},
"T1_VETO_SURFACE": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 195,
"anchor": "Preserved veto surface for Josh or the UE-build owner"
},
"T1_TAXONOMY": {
"file": "_source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md",
"line": 343,
"anchor": "2.2 Meshy Generation Categories"
},
"DOCTRINE_5_1_HEAD": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1355,
"anchor": "5.1 Every static mesh"
},
"DOCTRINE_A1": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1359,
"anchor": "vertex:tri ratio >2:1 inflates Nanite data and cost"
},
"DOCTRINE_A3": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1361,
"anchor": "hold the material-slot cap: 4 / 6 / 8"
},
"DOCTRINE_A4": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1362,
"anchor": "ship simple collision only"
},
"DOCTRINE_5_3_HEAD": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1382,
"anchor": "5.3 Every skinned asset"
},
"DOCTRINE_C1": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1386,
"anchor": "hold LOD0 triangle budgets: Creatures 24k/60k/120k, Familiars 18k/45k/90k"
},
"DOCTRINE_C2": {
"file": "docs/ENGINE_OPTIMIZATION_DOCTRINE.md",
"line": 1387,
"anchor": "ship the LOD chain: 4/4/3/2"
},
"DOSSIER_3_14": {
"file": "docs/pipeline_review/AAA_WORKFLOW_CORRESPONDENCE_2026-08-06.md",
"line": 870,
"anchor": "3.14 LOD chains"
},
"DOSSIER_THE_DEFECT": {
"file": "docs/pipeline_review/AAA_WORKFLOW_CORRESPONDENCE_2026-08-06.md",
"line": 904,
"anchor": "the arrival chest ships"
},
"DOSSIER_DEAD_SLOTS": {
"file": "docs/pipeline_review/AAA_WORKFLOW_CORRESPONDENCE_2026-08-06.md",
"line": 909,
"anchor": "Material slots: 4 per garment piece with exactly ONE used"
},
"DOSSIER_W_BUDGET": {
"file": "docs/pipeline_review/AAA_WORKFLOW_CORRESPONDENCE_2026-08-06.md",
"line": 1292,
"anchor": "W-BUDGET — ARM THE DECLARED GATES"
},
"ROSTER_ITEM_5": {
"file": "docs/spine/DECISIONS_PENDING_JOSH.md",
"line": 4715,
"anchor": "BUDGET GATES IN-CHAIN"
}
},
"classes": {
"Creatures": {
"governance": "skinned_non_nanite",
"cite": "T1_CREATURES",
"restated_by": "DOCTRINE_C1",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": {
"steam_deck_minimum": 24000,
"mid_range_pc": 60000,
"high_end_pc": 120000,
"ultra": null
},
"lod_chain_steps": {
"steam_deck_minimum": 4,
"mid_range_pc": 4,
"high_end_pc": 3,
"ultra": [
2,
3
]
},
"lod_chain_cite": "T1_CREATURES_CHAIN",
"material_slot_cap": "NOT_DECLARED",
"material_slot_cap_why": "The §1.7 table declares a material-slot cap on the three STATIC Nanite classes only (Weapons, Vril Sites, Architectural Features). No cap is declared for a skinned class, and doctrine A3 sits in §5.1 'Every static mesh'. Inventing one here would be inventing canon.",
"memory_cap_mb": "NOT_DECLARED",
"collision": "simple capsule-plus-convex matched to the skeleton at every spec class",
"nanite": false
},
"Familiars": {
"governance": "skinned_non_nanite",
"cite": "T1_FAMILIARS",
"restated_by": "DOCTRINE_C1",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": {
"steam_deck_minimum": 18000,
"mid_range_pc": 45000,
"high_end_pc": 90000,
"ultra": null
},
"lod_chain_steps": {
"steam_deck_minimum": 4,
"mid_range_pc": 4,
"high_end_pc": 3,
"ultra": [
2,
3
]
},
"lod_chain_cite": "T1_CREATURES_CHAIN",
"material_slot_cap": "NOT_DECLARED",
"material_slot_cap_why": "as Creatures -- §1.7 declares slot caps on the static Nanite classes only",
"memory_cap_mb": "NOT_DECLARED",
"collision": "simple capsule-plus-convex matched to the skeleton at every spec class",
"nanite": false
},
"Weapons": {
"governance": "static_nanite",
"cite": "T1_WEAPONS",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": "NANITE_SOURCE_UNCAPPED",
"lod0_triangles_why": "the static Nanite classes Weapons, Vril Sites, and Architectural Features carry no triangle cap -- their triangle cell reads Nanite source-uncapped, memory-governed",
"lod_chain_steps": "NOT_DECLARED",
"material_slot_cap": {
"steam_deck_minimum": 4,
"mid_range_pc": 6,
"high_end_pc": 8,
"ultra": null
},
"material_slot_cap_cite": "T1_MATERIAL_SLOT_CAP",
"memory_cap_mb": {
"steam_deck_minimum": 8,
"mid_range_pc": 16,
"high_end_pc": 32,
"ultra": null
},
"collision": "simple convex, hand-finished regardless",
"nanite": true
},
"Vril Sites": {
"governance": "static_nanite",
"cite": "T1_VRIL_SITES",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": "NANITE_SOURCE_UNCAPPED",
"lod_chain_steps": "NOT_DECLARED",
"material_slot_cap": {
"steam_deck_minimum": 4,
"mid_range_pc": 6,
"high_end_pc": 8,
"ultra": null
},
"material_slot_cap_cite": "T1_VRIL_SITES",
"memory_cap_mb": "NOT_DECLARED",
"draw_calls_per_view": {
"steam_deck_minimum": 2000,
"mid_range_pc": 5000,
"high_end_pc": 10000,
"ultra": null
},
"vram_streaming_pool_gb": {
"steam_deck_minimum": 1.0,
"mid_range_pc": 2.5,
"high_end_pc": 5.0,
"ultra": null
},
"collision": "simple convex or box per structural component",
"nanite": true
},
"Architectural Features": {
"governance": "static_nanite",
"cite": "T1_ARCHITECTURAL",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": "NANITE_SOURCE_UNCAPPED",
"lod_chain_steps": "NOT_DECLARED",
"material_slot_cap": {
"steam_deck_minimum": 4,
"mid_range_pc": 6,
"high_end_pc": 8,
"ultra": null
},
"material_slot_cap_cite": "T1_ARCHITECTURAL",
"memory_cap_mb": "NOT_DECLARED",
"draw_calls_per_view": {
"steam_deck_minimum": 2000,
"mid_range_pc": 5000,
"high_end_pc": 10000,
"ultra": null
},
"vram_streaming_pool_gb": {
"steam_deck_minimum": 1.0,
"mid_range_pc": 2.5,
"high_end_pc": 5.0,
"ultra": null
},
"collision": "simple convex or box per structural component",
"nanite": true
},
"NPCs": {
"governance": "metahuman_native_or_skinned_fallback",
"cite": "T1_NPCS",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": "INHERITS:Creatures",
"lod0_triangles_why": "MetaHuman-native LOD and collision in the MetaHuman-first case; 'a non-MetaHuman archetype mesh falls to the skinned non-Nanite triangle budget as for Creatures'. Nothing in this repo is MetaHuman-authored today, so every NPC-class mesh measured here takes the Creatures budget.",
"lod_chain_steps": "INHERITS:Creatures",
"material_slot_cap": "NOT_DECLARED",
"collision": "MetaHuman-native, or the skinned capsule-plus-convex rule on the fallback path",
"nanite": false
},
"Special Asset Class": {
"governance": "inherits_nearest_analog",
"cite": "T1_SPECIAL_CLASS",
"status": "ILLUSTRATIVE-until-5090-benchmark",
"lod0_triangles": "INHERITS_BY_RULE",
"lod0_triangles_why": "'a boss-tier or materializing-construct mesh takes the skinned non-Nanite triangle budget, a static device or structure (the Vimana body) takes the static Nanite governance'. This is canon's OWN mechanism for a mesh whose category is not a table row, and it is the mechanism the `routing` block below uses -- never an invented category.",
"lod_chain_steps": "INHERITS_BY_RULE",
"material_slot_cap": "INHERITS_BY_RULE",
"collision": "INHERITS_BY_RULE",
"nanite": null
}
},
"rules": {
"A1_vertex_tri_ratio_max": {
"value": 2.0,
"declared_scope": "static_nanite",
"cite": "DOCTRINE_A1",
"scope_cite": "DOCTRINE_5_1_HEAD",
"severity_in_scope": "ERROR",
"severity_out_of_scope": "WARN",
"out_of_scope_why": "The grounding is Nanite data inflation, and the row lives in §5.1 'Every static mesh'. A skinned mesh whose vertex count exceeds twice its triangle count is still a measured anomaly (it means the mesh is split rather than welded, which inflates the skinned vertex pipeline too) so it is REPORTED with its scope stated, and it never fails a build on a rule canon wrote for a different class."
},
"A3_material_slot_cap": {
"cite": "DOCTRINE_A3",
"value_source": "classes[<class>].material_slot_cap",
"severity": "ERROR",
"not_armed_for": "skinned_non_nanite -- no slot cap is declared for a skinned class anywhere in §1.7 or §5.3",
"arming_condition": "a §1.7 D-POLY-BUDGETS row that states a material-slot cap for Creatures / Familiars / NPCs, or a benchmark-day re-pin that adds one"
},
"A4_collision_simple_only": {
"cite": "DOCTRINE_A4",
"rule": "collision is ALWAYS simple convex, capsule, or box regardless of class or spec class",
"rule_cite": "T1_DPOLY_PREAMBLE",
"severity": "ERROR",
"armed": false,
"arming_condition": "an asset record that states its collision primitive type. NO record surface in either repo carries one today: the import results record lod_count, material_slot_count, bind height and skeleton, and never a collision primitive. The tooth is declared and unarmed rather than quietly dropped."
},
"C1_lod0_triangle_budget": {
"cite": "DOCTRINE_C1",
"value_source": "classes[<class>].lod0_triangles[enforced_spec_class]",
"severity": "ERROR",
"not_armed_for": "static_nanite -- the triangle cell reads 'Nanite source-uncapped, memory-governed', so a triangle count is not a budget violation for a static class"
},
"C2_lod_chain_steps": {
"cite": "DOCTRINE_C2",
"value_source": "classes[<class>].lod_chain_steps[enforced_spec_class]",
"severity": "ERROR",
"interpretation": {
"reading": "'4 / 4 / 3 / 2-to-3 steps' is read as the LOD COUNT of the shipped chain (LOD0..LOD3 = 4).",
"why": "The dossier reads the landed 4-LOD arrival chain as satisfying the chain figure and flags only the triangle number against it -- 'The arrival garment carries 4 LODs at 85,358 / 44,565 / 24,270 / 13,686 verts' beside 'The budgets are declared ... chain 4/4/3/2-3'. Canon does not disambiguate steps-vs-rungs, so the reading is DECLARED here rather than assumed silently, and a re-pin may change it in this file alone.",
"cite": "DOSSIER_3_14"
},
"arms_per_asset_when": "the record demonstrates the asset reached the LOD stage -- it carries an LOD list or a lod_count. An asset staged before the LOD stage has no chain to check and is counted under DECLARED NOT-ARMED with its census, never silently passed and never failed for work it has not reached."
},
"C2b_lod_chain_reduces": {
"derived_from": "DOCTRINE_C2",
"rule": "each rung of an LOD chain carries strictly fewer triangles than the rung above it",
"severity": "ERROR",
"authored_reading": "Canon says 'LOD chain: 4 ... steps' and does not spell out that a step reduces. A chain whose later rung is not smaller is not a reduction chain, so this is a reading of the word chain rather than a second number -- and it is named here as a reading, not smuggled in as canon. It fires only on a rung that is EQUAL TO or LARGER THAN the rung above, never on a reduction the gate merely finds shallow."
},
"MATERIAL_SLOT_OCCUPANCY": {
"observation_only": true,
"cite": "DOSSIER_DEAD_SLOTS",
"what": "a declared material slot with nothing assigned to it -- 4 declared with 1 used on every arrival garment piece",
"severity": "OBSERVATION",
"why_not_a_tooth": "No canon line states that a declared slot must be used. It is a measured fact the dossier names (register row 29) and the scorecard prints it so the factory can see it, but it is NOT a rule and must never fail a build on this file's authority."
}
},
"routing": {
"_doc": "Record class tokens (what the measurement surfaces actually write) -> the §1.7 class whose budget binds. Every entry is either DIRECT (the token names a §1.7 table row) or INHERITED (the token has no table row and canon's own Special-Asset-Class inheritance rule at §1.7 routes it). An asset whose class token matches nothing here is a FINDING, never a silent skip -- a router that cannot route must not read as clean.",
"by_record_class": {
"creature": {
"class": "Creatures",
"derivation": "DIRECT",
"cite": "T1_CREATURES"
},
"creatures": {
"class": "Creatures",
"derivation": "DIRECT",
"cite": "T1_CREATURES"
},
"familiar": {
"class": "Familiars",
"derivation": "DIRECT",
"cite": "T1_FAMILIARS"
},
"weapon": {
"class": "Weapons",
"derivation": "DIRECT",
"cite": "T1_WEAPONS"
},
"weapons": {
"class": "Weapons",
"derivation": "DIRECT",
"cite": "T1_WEAPONS"
},
"npc": {
"class": "NPCs",
"derivation": "DIRECT",
"cite": "T1_NPCS"
},
"vril_site": {
"class": "Vril Sites",
"derivation": "DIRECT",
"cite": "T1_VRIL_SITES"
},
"env": {
"class": "Architectural Features",
"derivation": "DIRECT",
"cite": "T1_ARCHITECTURAL"
},
"architecture": {
"class": "Architectural Features",
"derivation": "DIRECT",
"cite": "T1_ARCHITECTURAL"
},
"equipment": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a staged EQS_ piece is a hand-held static mesh with no skeleton; canon's inheritance rule sends 'a static device or structure' to the static Nanite governance, and Weapons is the static row that also carries the per-prop memory-sanity cap"
},
"gather_prop": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "static prop -> static Nanite governance; the Weapons row is the prop-memory-capped static row"
},
"env_prop": {
"class": "Architectural Features",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a static environment structure -> the static structural row"
},
"mineral": {
"class": "Architectural Features",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a static world-placed structure -> the static structural row"
},
"flora": {
"class": "Architectural Features",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "static, world-placed, Nanite-path -> the static structural row. Foliage carries its own doctrine table (§5.2) but that table declares NO triangle number, so nothing stricter is available to bind here without inventing one"
},
"char_skinned_piece": {
"class": "Creatures",
"derivation": "INHERITED",
"cite": "T1_NPCS",
"why": "a protagonist garment / body / face piece bound to the character skeleton is a non-MetaHuman skinned mesh, which §1.7 sends to the skinned non-Nanite triangle budget as for Creatures. This is the routing the repo's own LOD records already cite: build/3d/candidates/face_pivot/lods/CHAR_0001_FACE_LODS.json carries budget_cited = 'T1_Build_Pipeline_Contracts section 1.7 D-POLY-BUDGETS, the Creatures line, reached via its own NPC routing clause'"
},
"face": {
"class": "Creatures",
"derivation": "INHERITED",
"cite": "T1_NPCS",
"why": "as char_skinned_piece"
},
"characters": {
"class": "Creatures",
"derivation": "INHERITED",
"cite": "T1_NPCS",
"why": "the character lane's own class token for a protagonist mesh -- a non-MetaHuman skinned mesh, so the Creatures budget"
},
"character": {
"class": "Creatures",
"derivation": "INHERITED",
"cite": "T1_NPCS",
"why": "as characters"
},
"gatherprops": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "the assetgen lane's CamelCase form of gather_prop -- a static prop"
},
"equipments": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "as equipment"
},
"props": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "the assetgen stage's fallback class for an id whose prefix names no registry -- a static prop on the prop-memory-capped static row. It is routed rather than rejected so an unclassified prop is measured, and the class token remains visible in the scorecard"
}
},
"by_asset_name_prefix": {
"_doc": "Used only where the record carries no class token -- the engine import results and the assetgen batch records key their assets by id or by UE object name. LONGEST PREFIX WINS, so SK_EQ_0004 resolves as a skeletal mesh and never as an EQ_ prop.",
"SK_": {
"class": "Creatures",
"derivation": "INHERITED",
"cite": "T1_NPCS",
"why": "the UE SK_ prefix is a SKELETAL mesh; a non-MetaHuman skinned mesh takes the Creatures budget per §1.7"
},
"SM_": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "the UE SM_ prefix is a STATIC mesh -> static Nanite governance"
},
"CR_": {
"class": "Creatures",
"derivation": "DIRECT",
"cite": "T1_CREATURES",
"why": "the T0_Creature_Roster id prefix"
},
"FAM_": {
"class": "Familiars",
"derivation": "DIRECT",
"cite": "T1_FAMILIARS",
"why": "the T0_Familiar_Registry id prefix"
},
"WPN_": {
"class": "Weapons",
"derivation": "DIRECT",
"cite": "T1_WEAPONS",
"why": "the T0_Weapon_Registry id prefix"
},
"VS_": {
"class": "Vril Sites",
"derivation": "DIRECT",
"cite": "T1_VRIL_SITES",
"why": "the T0_Vril_Site_Registry id prefix"
},
"AR_": {
"class": "Architectural Features",
"derivation": "DIRECT",
"cite": "T1_ARCHITECTURAL",
"why": "the architecture id prefix"
},
"EG_": {
"class": "Architectural Features",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "an env_prop id -- a static environment structure"
},
"MN_": {
"class": "Architectural Features",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a mineral id -- a static world-placed structure"
},
"FL_": {
"class": "Architectural Features",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a flora id -- static, world-placed, Nanite-path; §5.2 declares no triangle number to bind instead"
},
"GN_": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a gather-node prop id -- a static prop on the prop-memory-capped static row"
},
"EQS_": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "a staged static equipment id -- a hand-held static mesh"
},
"EQ_": {
"class": "Weapons",
"derivation": "INHERITED",
"cite": "T1_SPECIAL_CLASS",
"why": "an equipment id measured OUTSIDE the character lane's skinned chain -- a static device. NOTE: a skinned garment piece is measured through the character surfaces, which carry the char_skinned_piece class token and therefore route to Creatures BEFORE this prefix is ever consulted."
},
"CHAR_": {
"class": "Creatures",
"derivation": "INHERITED",
"cite": "T1_NPCS",
"why": "a protagonist/NPC mesh id -- a non-MetaHuman skinned mesh"
}
}
},
"surfaces": [
{
"id": "canon_staging_manifests",
"scope": "canon",
"glob": "build/3d/manifests/staging_manifest_*.json",
"adapter": "staging_manifest",
"what": "the volume factory's own staging manifests -- assets[] with id, class and measurements.tris. This is where 'the factory stamps hundreds' is actually measurable."
},
{
"id": "canon_char_manifests",
"scope": "canon",
"glob": "build/3d/characters/*IMPORT_MANIFEST*.json",
"adapter": "lod_chain_blocks",
"default_class_token": "char_skinned_piece",
"what": "the character lane's import manifests -- per-piece skinned_lods / lods lists carrying per-rung tris and verts"
},
{
"id": "canon_lod_chain_records",
"scope": "canon",
"glob": "build/3d/candidates/**/*LODS*.json",
"adapter": "lod_chain_blocks",
"default_class_token": "face",
"what": "the face/head LOD chain records -- steps[] with per-rung tris and verts, each already citing the same §1.7 line this file transcribes"
},
{
"id": "game_import_results",
"scope": "game",
"glob": "QA/bench/*_import_result.json",
"adapter": "engine_import_result",
"what": "the ENGINE READ-BACK: assets{} with registry.Triangles / registry.Vertices, lods[], lod_count and material_slot_count, plus _expectations[].tris per LOD. This is the strongest measurement surface in either repo and it is the one that recorded 134,136.",
"degrade_honestly": "If the game repo is not present on this box the surface is reported under DECLARED NOT-ARMED with its arming condition, its baseline rows are excluded from the ratchet, and the gate never reads a missing repo as a clean corpus."
}
],
"instrument_gap": {
"what": "in-engine PER-LOD triangle readback",
"why": "UE 5.8's Python exposes no lod_info on SkeletalMesh, so per-LOD absorption cannot be read from a live editor (AAAAA register row 37, restated at the dossier's §3.14: 'Per-LOD absorption in engine reads UNMEASURED because UE 5.8's Python exposes no lod_info on SkeletalMesh').",
"cite": "DOSSIER_3_14",
"what_this_gate_reads_instead": "the import manifests, the FBX/source-mesh census the Blender-side chain already writes per rung, and the emitted QA read-back records -- all three of which carry real per-rung numbers. The gate never claims an in-engine per-LOD measurement it cannot make."
}
}