systems/T99_Translation_Combat.md
Status: DRAFT v0.1 (first authored pass). **CHANGELOG 2026-07-19 — D-COMBAT-TD RULED (Josh,
wf_89c44de5-e16):** all §5 [JOSH] flags are flipped to their rulings in place (R1–R9); §4 marks
win_condition + win_shape both REQUIRED; §6.5 + spikes C-2/C-3/C-4/C-6/C-12/C-15 closed; the
launch posture (R7) and the WS_041/WS_042 Worldstate mint (R8) landed. The doc stays DRAFT v0.1 —
the ACTIVE flip now rides only the fresh-context normalize-doc critic PASS + the §4 registry extension
declared through docs/registry_extensions.json discipline (the §5 rulings, previously the other
gate, have landed). This is the missing SIXTH
Translation Doc — the 2026-07-19 pipeline-readiness audit's headline WALL: no doc mapped the
combat/physics/runtime design layer onto engine implementation, so no combat build step could run
autonomously (READINESS_AUDIT_2026-07-19_LANE_REPORTS.json lane combat; PIPELINE_READINESS_ROADMAP.md
§3 row 1).
Translation Doc — combat / physics / runtime-systems leg. Tier 99 operational (the runtime-inference
layer per T1_Build_Pipeline_Contracts §0); not world canon. It owns the platform-specific
inference that turns the combat DESIGN layer into a built, playable UE 5.8 encounter — the layer the
Pipeline Contract and the design docs are silent on (which engine subsystem carries which mechanic,
the boss data contract's machine columns, the runtime-generation guardrail wiring). Subordinate to the
CVD on world canon; to T1_Combat_System_Spec [ACTIVE v1.0] and the RULED DIFFICULTY_SYSTEM.md on
combat doctrine; to T1_Build_Pipeline_Contracts §1 (UE5) on FK/column/state-machine behavior — where
this doc's inference conflicts with any of those, they win [SRC: T1_Build_Pipeline_Contracts §0].
Cited short-form below: COMBAT_SYS = docs/COMBAT_ENCOUNTER_SYSTEM.md (the 508-line unified
spec — Part B boss-as-system, §4 the ~30 clocks, §5 Composure, §9 the vril dial, the Part-3 gap
ledger) · RUNTIME_GEN = docs/RUNTIME_GENERATIVE_LAYER.md · RUNTIME_GUARD =
docs/RUNTIME_GUARDRAIL_ARCHITECTURE.md · DIFF = docs/proposals/DIFFICULTY_SYSTEM.md [RULED
2026-07-04] · WS7 = docs/proposals/systems/WS7_WIRING_BUILD_PLAN.md · SCI =
docs/SCIENCE_GROUNDING.md · UE5_BUILD = docs/translation/T99_Translation_UE5_Build.md ·
CONTRACTS = _source/01_Tier_1_Foundation/T1_Build_Pipeline_Contracts [ACTIVE v1.0].md ·
ROADMAP = docs/PIPELINE_READINESS_ROADMAP.md · CVD = `_source/01_Tier_1_Foundation/
T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md · SCHEMA = _source/00_Tier_0_Master_Indices/
T0_Schema_Dictionary [ACTIVE v1.3].md` (the boss-registry schema, §4.1 L844-873 the MMO-World-Boss
field definitions) · BUILD = docs/proposals/CHAPTER_BUILD_TARGET.md [rulings 5-7, the
per-chapter work orders; "never 100/0/0" at L20] · ROSTER = docs/proposals/ROSTER_PROPOSALS.md
[PROPOSAL, not canon — the tuning contract] · BOSSJSON = docs/proposals/boss_roster_rows.json
[PROPOSAL, not canon — the rich boss row model]. (SCHEMA/BUILD/ROSTER/BOSSJSON resolve to the same
targets as COMBAT_SYS's own §"map that governs" legend.)
---
This doc is the runtime-realization layer for the combat/physics/runtime-systems design corpus. It
turns COMBAT_SYS + RUNTIME_GEN + RUNTIME_GUARD + DIFF into concrete UE 5.8 subsystem choices, a boss
data contract, a win-condition taxonomy routed for Josh's ruling, and a deterministic runtime-generation
wiring. It supplies MECHANISM; it carries no canonical authority of its own.
Authority hierarchy (per CONTRACTS §0): subordinate to the CVD on world canon (Pillar 8, §12, §17);
subordinate to T1_Combat_System_Spec and the RULED DIFF on combat doctrine; subordinate to UE5_BUILD
on the shared engine seams (Step 2 registry→USTRUCT→DataTable, Step 10 the ws.* save subsystem) — this
doc never contradicts those, it only supplies the combat-specific inference. Where CONTRACTS is silent
on a combat/runtime pipeline (it has NO combat section — combat exists only as the UE5 subsystem
sub-bullet CONTRACTS §1.2 and the §1.3 dependency line), this doc owns the inference layer and proposes
the contract section (§9 spike C-1) [SRC: ROADMAP §3 row 1; CONTRACTS §0, §1.2].
Versioning discipline it inherits: Translation Docs version per platform update; a UE revision
produces a new Translation Doc version while the doctrine surface stays stable. This is v0.1 against a
design layer that itself still carries [DECISION NEEDED - JOSH]-class open items (COMBAT_SYS Part 3)
and a balance audit that has never run — "iterate as build experience accumulates" governs, not a
one-shot lock [SRC: CONTRACTS §0].
Two audit claims this doc corrects at the outset (director adjudication, refuting the raw lane
report — trust content over labels, the repo doctrine):
T0_Boss_Encounter_Registry is NOT empty — it holds 281 data rows / 21 columns (registries/T0_Boss_Encounter_Registry [DRAFT v0.1]/Sheet1.csv), and it already carries
primary_verb, secondary_verb, axis_split, counters, win_reward, death_reward,
phase_breakdown_object, engagement_modes_object, and — verified across all 281 rows — a
populated boss_kind scale column (main 79 / sub 201 / environmental 1). The full header
(verified 2026-07-19): `boss_id, boss_name, chapter_id, phase_breakdown_object,
engagement_modes_object, character_id, boss_kind, primary_verb, secondary_verb, axis_split,
counters, win_reward, death_reward, threads, awareness_category, target_type, care_tier, sources,
ontology_class, collect_verb, restore_target`. The WALL is schema FITNESS, not emptiness:
the columns it still lacks are win_condition, structured per-signature counters, Composure-node
map, escalation vector, phase-trigger, and the machine form of the mandatory character-engagement
field (§4) [SRC: ROADMAP §3 row 2; boss CSV header verified 2026-07-19].
harness/recall.py EXISTS and works. The missing piece the runtime leg needs is the **`recallpacks` exporter built atop it**, not recall itself (§6) [SRC: ROADMAP §3 row 5; RUNTIME_GEN §C note].
The engine pin (RESOLVED 2026-07-19; formerly the engine-version split across all six Translation
Docs — ROADMAP §6): the design docs and this doc are written against UE 5.8, and **UE 5.8.0
(BuildId 55116800) is now the installed and pinned engine** (shipped 2026-06-17; the 5.7 side-by-side
is retired). NeoStack is installed as source in the project Plugins/ and rebuilt against that
exact engine BuildId — a prebuilt or marketplace binary drop-in re-breaks on a BuildId mismatch, so
prebuilt drops are forbidden. Every combat mechanism this doc routes onto GAS / StateTree / Chaos /
MetaSounds / the SaveGame subsystem ships in 5.8 (and was already 5.7-capable — GAS, StateTree, Chaos
Destruction, MetaSounds Builder, and the SaveGame subsystem all shipped in 5.7; StateTree is
production-ready, utility-based state selection landed in 5.5) [SRC: ROADMAP §6; combat lane
stale_or_wrong; engine pin verified 2026-07-19]. Where a mechanic is genuinely 5.8-only it is
flagged inline. The 5090 is required
only for the four things §8/§9 name (14B reference model, at-scale bakes, perf-budget validation,
benchmark days) — the 3–4B ship-target barks model and the whole deterministic spine run on the current
GPU today [SRC: ROADMAP §4].
Scope boundary: this doc covers the boss/encounter runtime, the difficulty dial, the ~30 combat
clocks, Composure, the environmental-boss protocol, and the runtime-generation guardrail as they land
in-engine. It does NOT re-author combat doctrine (COMBAT_SYS/DIFF own it), does NOT set numeric balance
(§8 firewall — Phase 5M owns it), and does NOT assign which boss sits in which chapter or its verbs
(the roster rows Josh authors/approves). Terrain/asset/audio/cinematic/quest legs get their own
Translation Docs; this doc consumes their output only as opaque FKs (mesh_id_ref, voice_signature_ref,
DD_* dialogue datasets, LS_* boss cinematics).
Does not invent canon: every canon law in §2 is translated faithfully, never re-derived; every
column/enum this doc proposes is routed as a PROPOSAL through the docs/registry_extensions.json
discipline (§4) or a [JOSH] canon-ruling flag (§5), never applied. The cardinal do-not-invent rule
binds: Josh authors chapter/numerical/naming/hard-line/§17/system-canon; this doc produces and ALIGNS
grounded structured form.
---
These are binding canon/RULED laws. Every engine choice in §3 is subordinate to them; a build that
violates one is wrong regardless of how clean the engine mapping looks.
DIFF is RULED and CLOSED (Josh, 2026-07-04). The single difficulty dial is **ambient vril density —
the fairy realm's reach — and nothing else.** "The dial is ONLY vril density; NEVER HP / damage /
resistance inflation" (DIFF L12-13). Five diegetic tiers — Wellspring · Veiled · Fading (the true
tuning — the game as authored) · Sundered · → The Forgotten One (post-Ch-77 prestige). The dial changes
FOUR world-demand levers — telegraph slack, world generosity (window width + recharge-well latency),
answer-pruning (valid solutions thin toward the one true answer), Withdrawal aggression — and **nothing
on the enemy sheet. No enemy has a difficulty-scaled stat block** (COMBAT_SYS §0, §9). This is the
load-bearing thesis of the whole lane and the single most important engine constraint below.
The vril-density field is set by realm and site (which realm-stratum you are in, and which vril
site/node is near), never by elevation or latitude. exposure_hazard (cold/heat/altitude/
submersion) is a body-only survival axis (WS7 T0_Environment_Grammar_Registry.exposure_hazard) and
is orthogonal to the density difficulty dial — altitude makes the PLAYER cold, it does not make the
world harder. Any engine mapping that drives vril_density off a landscape's Z or a region's latitude
is a C1 violation. Stale-citation note: the WS7 build plan still carries an open Fork 6 ("does
high altitude reduce atmospheric vril / d_local — thin vril with thin air — or is it purely a
body-exposure hazard?" with a weak REC for mild reduction, WS7 L128) — that fork is **superseded and
CLOSED by the C1 ruling** (thin-vril-with-thin-air is DECLINED) and should be retired in WS7; a builder
reading WS7 as the cited env-grammar authority must NOT re-import it as tuning [SRC: C1 ruling
2026-07-17; WS7 environment-grammar, Fork 6 superseded; DIFF].
Design law (Josh, 2026-07-13): the game runs **real physics AND real magic (vril); magic works by
ALTERING real physics. Vril reads mathematical/physical/substrate — the Vril-Society firewall**:
vril power is never race-mystical "polar energy" (the Bulwer-Lytton→Nazi-occult conflation is barred;
authorial-only corrective, never a player debunk). Player, enemies, AND allies all wield both, for good
and ill; they compose emergently for better and worse. Environment features carry real physical
properties (physical_properties_array: mass/structural_integrity/flammability/thermal_state/
conductivity/organic_substrate) that combat verbs act on (WS7 T0_Environment_Grammar_Registry) [SRC:
vril-altered-physics memory; vril-vs-nazi-occult firewall memory; WS7 environment-grammar].
Design pillar (Josh, 2026-07-13): the game **rewards intelligence and learning real chemistry/physics/
biology/statics** — knowing-what-to-combine and think-on-your-feet, structured freedom that is free
BECAUSE real science makes openness meaningful and balanced. Alchemy=chemistry, Engineering=physics/
statics, Herbalism=biology; vril manipulates all (SCI). Mechanically this is the Preparation axis
(§5.3) and the anti-single-verb pacing (Composure nodes spread across modes, §3.4) — varied verbs beat
single-verb autopilot by construction, not by review [SRC: rewards-intelligence memory; SCI; COMBAT_SYS §5].
Death never hard-gates progression (multi-path / no-dead-end, CVD; violence-allowed-r17 memory). The
economy is Hades-shaped: reward on WIN AND death (CVD §5 P8). On death the realm remembers the
attempt — banked tell-reads (a knowledge economy, not an XP handout), a substrate-lore fragment, and a
soft catch on Wellspring/Veiled; consciousness withdraws to the last attuned recharge source
(recharge-as-checkpoint). The environmental-boss protocol's graduated-consequence failure (partial
purge strengthens the Ch-39+ revisit) is the canon seed for this loop (COMBAT_SYS §6.2, §7; DIFF
defeat model) [SRC: COMBAT_SYS §7; no-dead-end / violence-allowed-r17 memory].
Mature 17+ AAA; do not defang. Lethal violence vs HUMAN NPCs is core; a myth's own MONSTER is a BOSS —
stage the fight. §17.1 REPRESENT_WITH_CARE is collective — it protects the culture-as-community from
being cast as villain/defamed/exterminated (route the antagonist through the complicit broker/state/
institution), it does NOT make individual antagonists/combatants who belong to that culture
unkillable. The line: no genocide-of-a-living-culture as an encouraged/enabled goal, and no
banned-content. Protected communities are a deterministic wall (HL_0003): no faction_intent can
target them as combat; where combat reaches a protected space it is Velheim intrusion (RUNTIME_GEN
A.5). Ch 57 is the extreme case — no antagonist-family presence — its faction director is disabled;
combat arrives via environmental + astral mode only [SRC: rated-r-aaa / violence-allowed-r17 memory;
CVD §17.1; RUNTIME_GEN A.5, F5].
Combat/vril alteration of terrain obeys the C2 ruling, carried as alteration_permanence_default
(WS7 T0_Environment_Grammar_Registry): sacred/protected nodes are HARD-blocked and uncapped (a
sieidi stone, a Dreaming site — hard_blocked, referencing the existing hard line, never damageable);
Evil scars heal slowly on a Good turn, never completely (heals_over + the integrity_valence_skin
verdant/grey/scar); combat-transient effects revert (transient_combat); only non-sacred structural
change is permanent. The difficulty dial never touches permanence — it changes react-slack, not what
the world lets you break (C2; DIFF answer-pruning) [SRC: C2 ruling; WS7 environment-grammar seeds
EG_0001-0004].
Every boss deploys combat + weapons + abilities + puzzles + character-engagement in blended combination
(CVD L214-218, Gate 8 immutable). No boss = pure DPS / pure dialogue / pure stealth. The executable
test: single-mode in audit = pillar violation; **a boss without a character-engagement field = pillar
violation.** Phases EVOLVE the moveset (tighten/multiply telegraphs), never swap it. The Ch 17 Entu
Priestess three-phase (surface combat → moral descent → philosophical confrontation) is THE template.
This is the schema, not a checkbox — §4 makes it machine-checkable, §3.4 makes it enforced by pacing
math [SRC: CVD §5 P8, L214-218; COMBAT_SYS §2, Part-1.1].
---
The load-bearing deliverable: which UE 5.8 subsystem carries which mechanic, with the fork stated and
a recommendation where the design docs left it open. Each step below carries a (seam: …) tag per
UE5_BUILD §2.3's three-seam routing rule (NeoStack = interpretation/author-once · native
Python + commandlets = bulk apply-many · Epic-MCP = PCG only). One clarification the tags make
explicit: the engine SUBSYSTEM a step names (GAS/StateTree/Chaos/MetaSounds) is the mechanic's
runtime home — a different axis from the author-tool seam that produces the asset graph. Where
a step is purely runtime-subsystem behavior with no authoring artifact to route, the tag says
runtime-subsystem — no author seam explicitly, so no step falsely claims a seam it does not use. All
engine facts below are web-verified against current UE 5.8 documentation (2026-07-19); 5.7-capability
is noted where it matters.
GameplayEffect graph from its verb-set/persona (the interpretive case); native Python then
bulk-populates the ASC / UAttributeSet init across the 281 boss rows from the registry. GAS itself
is the runtime home.
and the second-bar Composure (§5) both want a replicated, stackable, modifier-driven attribute
system with a clean effect pipeline. GAS is the engine-native home; a custom attribute system would
re-implement GAS badly. Recommend GAS. The one real cost is boilerplate + the 5.8 deprecation of
the legacy AttributeSet-initialization functions (deprecation warnings in 5.8, 5.9 migration
guidance) — author against the current AttributeSet/GameplayEffect API, avoid the deprecated init
path [SRC: UE 5.8 GAS docs, dev.epicgames.com "Understanding the Gameplay Ability System" 5.8;
combat lane executable_now].
Composure and vril_density → UAttributeSet attributes on the boss'sAbilitySystemComponent. Composure has named sub-nodes (part-break analog) — one attribute (or a
tagged sub-attribute) per mode-bound node (§3.4).
allows, on the PLAYER, chosen by alignment) and the dial's four levers → UGameplayEffects.
The dial is a single global float (§3.3) feeding GameplayEffect magnitudes via a
UGameplayModMagnitudeCalculation / SetByCaller, so telegraph slack, punish-window width, and
well-latency all move off one input with zero change to any enemy attribute (the §2.1 thesis,
made mechanical).
UGameplayAbilitys; phase state → GameplayTags (Boss.Phase.1/2/3, Boss.Composure.Node.<mode>.Broken); VFX/SFX →
GameplayCues (the vril-polarity shimmer tell-channel is a Cue; multi-channel readability is a
non-negotiable L1 requirement — the perception verb must be legible without color, so the Cue
carries an audio + shape channel, not color alone, §2.6 / DIFF Attunements).
GameplayEffect execution / move-selection scorer, NEVER unbounded (COMBAT_SYS §8; CVD §17.13).
integrity_band_field is the ONLY attribute delta canon permits, and it lives onthe PLAYER, set by their own alignment — never spawned by difficulty on an enemy (COMBAT_SYS §4.8).
phase/clock graph from its verb-set (UE5_BUILD Step 6's marker-to-fight-logic precedent); native
bulk repeats the phase/clock wiring across the rest of the roster. StateTree is the runtime home.
"GOAP" (COMBAT_SYS §8; RUNTIME_GEN). Epic ships no first-party GOAP; UE 5.8 rewrote the AI Module
docs around StateTree, made it the default for new projects, ships StateTree templates, and
gives it a starting-state definition. StateTree's **read AND write of ws.* tags** rests on Property
Bindings + Global Tasks generally (the mechanism UE5_BUILD Step 10 relies on — Enter
Conditions/Property Bindings can read and write a tag), NOT specifically the 5.8 reversible-binding
feature (an in-editor authoring convenience for reversing a binding's direction, not a new runtime
capability) — so this consumer is fully 5.7-capable. That read+write is exactly the runtime ws.*
reaction consumer Step 4 needs. Behavior Tree remains supported as the fallback.
Recommend StateTree for boss phase AI + the clock enumeration; a utility scorer supplies the
"GOAP-flavored" weighting the docs wanted. 5.7-capable (production-ready in the installed 5.8) [SRC:
UE 5.8 State Tree docs; UE 5.8 release notes AI Module rewrite; UE5_BUILD Step 10; combat lane
executable_now].
(default, so SKILL advances the fight) or a declared phase_trigger (§4). "Evolve-not-swap" is
enforced by keeping the prior state's Tasks active — a transition pushes a layer (adds Tasks),
never pops one (COMBAT_SYS §3).
Tasks with timer state; the [DIAL]-marked ones read the global vril_density (a StateTree
parameter) so their slack scales with the dial, never their damage.
player_habit_vector (COMBAT_SYS §4.9) → a rolling-histogram component (dodge direction /opener / turtle ratio / spam) that biases a Sigma-bounded move-selection table — the boss is a
"smarter opponent, not a stronger one" (adaptation_gain is [DIAL]; higher difficulty = faster
learning, never a bigger number). Sigma-bounded so it nudges, never frame-perfect-punishes.
vril_density -= step (tells tighten,wells slow, answers prune) — the enrage pressure with zero inflation (COMBAT_SYS §4.7).
it only voices the tactic the sim chose (§6; RUNTIME_GUARD §3.3). No clock is an enemy HP/damage
number.
SetByCaller + MetaSound Input wiring is runtime-subsystem, no author seam).**
plays at all five world-tensions off ONE float) rests on a float that is a **resultant of two
distinct quantities that must NOT be given the same name:**
world-tensions (Wellspring < Veiled < Fading < Sundered < → Forgotten One). Model it as a
normalized scalar tier_baseline ∈ [0,1] (Wellspring lowest world-demand). This is NOT WS_024.
atmospheric_vril_density_modifier WS_024, a **float multiplier on the regional baseline,
native range [0.0, 2.0], default 1.0** (verified in T0_Worldstate_Variables), set by realm +
site per C1 (§2.2). This is NOT the difficulty tier.
d_local, defined explicitly as d_local = clamp( tier_baseline × (WS_024 / 2.0), 0, 1 ) — the difficulty tier scales the whole
world's demand, the regional/site modifier (normalized off its 2.0 ceiling) expresses local
thickness. **d_local ∈ [0,1] by construction; it is neither WS_024 (a [0,2] multiplier) nor the
tier — it is their product.** A build engineer wires the GameplayEffect magnitude off d_local,
never off raw WS_024, so the [0,2]-vs-[0,1] mismatch cannot mis-halve the effect.
d_local drives: (a) GameplayEffect magnitudes (Step 1) and (b) a **MetaSound BuilderSubsystem Input** for the arena's audible vril-weather — the Builder API supports runtime value
changes on Inputs during playback (use Inputs, NOT Variables, which the Builder API does not
support). Quartz supplies the beat-synced env-cycle clock where the arena's periodic state machine
wants musical time (cross-lane with the audio Translation Doc's MetaSounds/Quartz adaptive layers)
[SRC: UE 5.8 MetaSound Builder API + Quartz docs; combat lane executable_now; DIFF; WS_024 verified].
modifier (input 2) is read from the region/arena's T0_Region_Index.env_density_band_default
(region default: neutral/restored/blank) plus the nearby env_emitter_site_ids /
env_drain_site_ids (WS7 env-grammar extension) — **this pair is the authoritative source for the
GAS difficulty dial. The region page's Zone Catalog carries a separate per-zone vril_density
column** (low/moderate/baseline — e.g. sumatra_java.md §Zone Catalog); that is the
granular per-zone expression consumed by the Step-6 creature/population leg (UE5_Build Step 6's
creature-tier filter), a finer descriptor that must remain consistent with the region default but is
not the dial's authority. Both are set by realm + site, NEVER by landscape Z or latitude;
exposure_hazard is a separate body-only survival effect, not a density input.
changes an arena cycle's speed (that would be fake difficulty) and never touches terrain permanence
(§2.7) [SRC: COMBAT_SYS §4.5, §9; C1 ruling; WS7; region page Zone Catalog].
composure_nodes map is registry-populated and Pillar-8-gate-checked; theauthored ability/attribute graph itself rides Steps 1-2's NeoStack author-once seam).**
(direct = parry/heavy-punish; stealth = break-LOS-and-reengage; puzzle_routed = solve the arena
interlock; environmental = trigger a trap on-cycle; vril_management = polarity-match and starve the
manifestation; familiar = bonded paired-operation, canon at Ch 73; astral = the astral layer only)
(COMBAT_SYS §5). Because nodes spread across modes, a **single-verb player physically cannot break
Composure before the Withdrawal clock bites** — Pillar 8 enforced by pacing math, not a reviewer.
breaking ability's mode; the StateTree phase-transition Enter Condition reads "N nodes broken." This
is the machine form of §2.8's mandatory blend.
T0_Environment_Grammar_Registry; Chaos is the runtime home).**
System for deterministic replay/seedable determinism, Dataflow production-ready in 5.8 for procedural
destruction assets; 5.7-capable). The environment attack vocabulary is the fixed D-verb set from
WS7 T0_Environment_Grammar_Registry.attack_verbs (`D1_COLLAPSE | D2_IGNITE | D3_FLOOD |
D4_AVALANCHE | D5_FREEZE | D6_CONDUCT | D7_FORGE | D8_GROUNDWAVE | D9_HURL | D10_VENT | D11_OBSCURE`)
keyed to each feature's physical_properties_array and loaded_potential — a lava vent IGNITEs/VENTs,
a snowpack slope AVALANCHEs/FREEZEs. enemy_usable marks features the boss weaponizes back; these
are the secondary-verb answer for environmental bosses (COMBAT_SYS §4.5).
alteration_permanence_default — hard_blocked (sacred, uncapped, references the hard line, no Chaos
fracture ever), heals_over (Evil scar reverts slowly on a Good turn, never completely, via the
integrity_valence_skin verdant/grey/scar skin), transient_combat, permanent.
env_boss_verb_disabled=TRUE on protected sacred markers — the environmental-bossperception verb still runs, but no destructive D-verb fires on a protected node (§2.6/§2.7) [SRC: WS7
environment-grammar seeds EG_0001-0004; UE 5.8 Chaos docs; COMBAT_SYS §4.5].
machine is the runtime home).**
whose victory is NOT damage (CVD §12.3; COMBAT_SYS §1.3, §6.2). It is entirely deterministic — a
vril-state field with hidden genuine_echo + negative_manifestation, a polarity-matching minigame
gated on Intuition/Constitution/Integrity, a restraint_budget clock (dump burst → destroy both →
fail = environmental degradation + faction loss + a strengthened Ch-39+ revisit, the graduated-failure
Hades seed, §2.5). L1-playable everywhere (Josh's ruling: L1 stays action-packed; the protocol IS the
playable layer for protected/relief chapters). The LLM only *describes* the read (RUNTIME_GEN A.6
env_boss_read); it never adjudicates the polarity match.
MetaSound polarity feedback; multi-channel readability mandatory. This is win-condition class PURGE
/ ATTUNE in §5.
ws.* WorldStateSubsystem (shared with the cinematic lane) Step 10's ws.* subsystem; no author-tool seam).**
(§2.5), vril_density band, player_habit_vector / adaptation_gain roll-forward, and the
community/faction deltas an encounter causes (WS_019 community_state, WS_020 antagonist_operational
_state, WS_021 faction_standing). These land in the **same ws.* WorldStateSubsystem** UE5_BUILD
Step 10 specifies — original engineering, no Epic reference pattern (Lyra ships none): a
UWorldStateSubsystem : UGameInstanceSubsystem holding TMap<FGameplayTag, FWorldStateValue>
(tagged-union: bool/int/enum), persisted via UWorldStateSaveGame : USaveGame with
AsyncSaveGameToSlot (async is the recommended path — avoids the frame hitch + a platform-cert
issue) [SRC: UE5_BUILD Step 10; UE 5.8 SaveGame docs].
convergence_node_scene_dispatch and every path-conditional scene read the SAME ws.* subsystem (ROADMAP §3 cinematic WALL: "shared with
combat save state"). Boss cinematics fire off a boss combat-state event StateTree emits (the
cinematic lane's spike 4 dependency resolves here — a GameplayTag/StateTree event the Sequencer
trigger listens for).
new T0_Worldstate_Variables keys (none exist for them today) or ride the WS7 [EXTENSION] sim
vars (player_strategy_vector et al., Josh-pending); and mark_write's richer shape
({community_id, valence, persistence, forward_track}) — its own ledger vs the WorldState map —
folds into UE5_BUILD's Step-10 validation spike, one story not two [SRC: UE5_BUILD Step 8/10; WS7
§C.1; combat lane parameter_gaps save row].
and the §6 strategy-token API are runtime wiring, not authored assets).**
utility at 60 Hz — target/ability/positioning, the Ch-73 paired-operation combo); the LLM sets only a
slow-tick combat_disposition *bias* (protective/aggressive/cautious), never a mid-swing action
(RUNTIME_GEN A.4). Fauna behavior is deterministic (BT/utility); the LLM performs the *read* over
the state the sim chose (A.3). Faction intent (Velheim director, ~0.005–0.02 Hz) raises a
*weight* the deterministic encounter system (the three declared systems — Aggro Magnet / Rift
Instability / Antagonist Hunter Triggers) reads; it spawns nothing itself, and the protected-community
wall is a deterministic hard-fail (§2.6, F5) (A.5).
per-frame verb.
---
The T0_Boss_Encounter_Registry already carries boss_kind (main/sub/environmental — populated on all
281 rows), `primary_verb, secondary_verb, axis_split, counters, win_reward, death_reward,
phase_breakdown_object, engagement_modes_object, and also character_id, threads, awareness_category,
target_type, care_tier, sources, ontology_class, collect_verb, restore_target` (§1 correction — the
full 21-column header was cross-checked so this section proposes NO column that duplicates an existing
one). This section proposes the combat-spec columns it still lacks, as a schema EXTENSION
owned by a new system combat-encounter, declared through the standing discipline: append the columns
to docs/registry_extensions.json under T0_Boss_Encounter_Registry/Sheet1 + to
docs/fidelity_baseline.json added_columns, then registry_fidelity.py --emit-baseline in the same
commit, then run_gates.py UNPIPED green (the exact WS7 gate-safe method — CONTRACTS/WS7 GATE NOTES).
This is a PROPOSAL for the registry-extension declare (not applied by this doc's edit). The enum
*values* it references (win_condition, win_shape, the axes) are the RULED §5 outcomes (D-COMBAT-TD,
Josh 2026-07-19) — the columns are now UNBLOCKED for declare + back-fill via the
docs/registry_extensions.json discipline.
| Proposed column | Type | Fills which gap | Source of values | |||||
|---|---|---|---|---|---|---|---|---|
win_condition (REQUIRED) | enum (§5.1, 9 verbs) | COMBAT_SYS Gap 3.3 — no canon win-condition taxonomy; today it lives only in spine prose (main_boss_win_condition …) | §5.1 RULED 9-verb enum (D-COMBAT-TD R3); back-fillable from the 281 rows' spine prose | |||||
win_shape (REQUIRED) | enum (§5.1, 8 values) | R3 — the SHAPE of a win, parallel to the verb (peopled_war, passage, omni_recombine, the WS4 five) | §5.1 RULED win_shape axis; the Pillar-8 validator binds BOTH win_condition + win_shape | |||||
axis_split_semantics | fixed doc-note (Patterns/Puzzles/Preparation, in that order) | COMBAT_SYS Gap 3.5 — axis_split exists (e.g. 60/20/20) but its axes were undefined | §5.2/§5.3 RULED axis definitions (D-COMBAT-TD R1); no new column — the order is ruled canonical | |||||
signature_counters | object: {signature_id: [counter_verb…]} | COMBAT_SYS tuning contract — ≥1 counter/signature, ≥2 across builds is unverifiable while counters is prose | structured from the existing prose counters field | |||||
composure_nodes | object: {mode: node_name} over the 7 modes | COMBAT_SYS Gap 3.4 + §5 — makes the mode-spread machine-checkable (Pillar-8 enforcer, §3.4) | COMBAT_SYS §5 mode list | |||||
phase_trigger | enum: `composure_break \ | part_break \ | hp_subphase \ | narrative_beat` | COMBAT_SYS Gap 3.6 — transitions asserted, not specified | COMBAT_SYS §3 (default composure_break) | ||
escalation_vector | enum-multi: `tighten_telegraph \ | multiply_telegraph \ | add_layer` | COMBAT_SYS Gap 3.6 — "evolve not swap" has no parameter | COMBAT_SYS §3, tuning contract E33 | |||
character_engagement_node | object: {phase, verb, integrity_routed:bool} | COMBAT_SYS Gap 3.4 — the MANDATORY Pillar-8 field has no mechanical form | §5.4 RULED definition (D-COMBAT-TD R4): a STANDALONE 8th Composure node, decoupled from astral | |||||
boss_kind (EXTEND the existing enum — do NOT add a parallel column) | existing enum `main \ | sub \ | environmental, extend with trade_gate \ | school \ | weapon \ | mmo_world` | COMBAT_SYS Gap 3.11 — the scale distinction already lives in the populated boss_kind column (main 79 / sub 201 / environmental 1); it only lacks the four additional Pillar-8-scope classes | §5.5 RULED (D-COMBAT-TD R5): which boss_kind values must be fully blended — no new column, an enum extension so Tier-A Solo vs Tier-C MMO cannot fork into two disagreeing scale fields |
ws_writes | array of ws.* keys | Step 7 — the worldstate deltas the encounter persists (cross-lane save) | WS7 worldstate rows; UE5_BUILD Step 10 |
Firewall: the SCHEMA §4.1-defined MMO-World-Boss fields (ue5_boss_class_ref, mesh/voice/cue/
cinematic FKs — defined in SCHEMA §4.1 L844-873 but NOT present in the current 21-column CSV;
scope-locked at MMO build phase, authority split COMBAT/T4) are not touched — this extension
neither adds nor populates them; the one live column of that family, phase_breakdown_object, is
likewise left as-is. This extension adds only the SOLO-boss combat columns and extends the
already-populated boss_kind enum (never a second, parallel scale column that could disagree with it),
keeping the two scales
categorically separate within one authoritative field (Tier-A Solo vs 100-player Tier-C MMO —
COMBAT_SYS §1.6). No column mints a boss, chapter, verb, or count — every value references an existing
space or a §5 ruling [SRC: COMBAT_SYS Gap 3.2–3.6, 3.11; SCHEMA §4.1; boss CSV header verified
2026-07-19; registry_extensions.json discipline; WS7 GATE NOTES].
---
✅ ALL OF §5 IS NOW RULED (D-COMBAT-TD, Josh 2026-07-19, wf_89c44de5-e16). The [JOSH] flags below
are flipped to their rulings in place: §5.1 = a 9-verb win_condition enum + a REQUIRED, gate-enforced
win_shape axis (R3); §5.2/§5.3 = Patterns/Puzzles/Preparation ratified in order + the
decode-vs-investment boundary made canon + the R2 free-knowledge-route rule; §5.4 =
character-engagement is a STANDALONE 8th Composure node decoupled from astral (R4); §5.5 = mains carry
a mandatory character node + a machine chapter-floor gate now, and the 7/10/5 mode reconciliation is
corrected (R5/R6). The Pillar-8 validator binds BOTH win_condition and win_shape; the §4 columns
are UNBLOCKED for declare + back-fill. The bracketed prose below is preserved as the surfacing brief.
These are system-canon (they define victory conditions and the Pillar-8 blend across the whole game).
Per the decision protocol, they are surfaced as full briefs with a RECOMMENDATION, **not silently
minted**. Each is grounded in the executed spine's ACTUAL win shapes — re-grepped 2026-07-19 across all
79 docs/spine/CH_NN.md main_boss_win_condition rows, and the observed-classes sample below now
spans Ch 2-77 (not just the early arc). The enum is a naming/consolidation of recurring verb classes
already authored, not an invention — but it is NOT complete over every executed win shape: the
endgame/bookend verbs (Ch 66-77 witness / recombine / seal / endure) and the WS4 win-SHAPE family
(Ch 59-63) are surfaced below for Josh to route, so the ruling covers the whole arc rather than
shoe-horning them silently later.
Observed spine classes (verbatim, Ch 2-77) — early arc: HP (Ch 2, fallback at 15/18) · pacify
(Ch 3/7/9/12/17/21/27/35/39/40/42/43/44/47) · perceive / perceive-then-pacify /
perceive-then-break (Ch 4/6/16/36/46) · part-break (Ch 6/13/25/31/33) · pacify-by-purge (Ch 26)
· free-the-shaman (Ch 22) · restraint-then-purgation / attune (Ch 10/20/37/38/57) ·
pacify-via-exposure / EXPOSED (Ch 14/23/28/42/43/44/49) · refutation / theological-debate /
declare (Ch 15/18/69) · bypass (Ch 23 "canonical questline-bypass", Ch 24, Ch 30 "Anglo-Saxon
common-access legal challenge", Ch 34 "HP/pacify/bypass"). Late/endgame arc (Ch 45-77): `restraint-
then-STRIKE (Ch 45) · WIN-by-strike/breaking-the-front (Ch 50/53/54/58) · WIN-by-reading`/
perceive (Ch 51/64/68) · WIN-by-the-pause (attune, Ch 52) · pacify/infiltrate DELEGATED (Ch 56)
· restore/attune (Ch 57) · the WS4 win-SHAPE family (Ch 59 FRONT-THAT-DOES-NOT-FULLY-BREAK,
Ch 60 DELEGATED-VICTORY, Ch 61 PERSONAL-COST, Ch 62 SIEGE, Ch 63 MAGIC-DUEL) · pacify-the-vessel +
declare (Ch 65) · strike/redirect/traverse + attune/decode (Ch 66) · strike-as-passage
(Ch 67/70) · release (Ch 72) · strike/restraint single-blow (Ch 73) · re-root/drive-back
(Ch 74) · command-terrain — "WIN the peopled war for the realm" (Ch 75) · recombine-all +
declare (Ch 76) · witness (Ch 77). Bookends: seal (Prologue), endure (Ch 1), none (Epilogue).
**✅ RULED (D-COMBAT-TD R3-refined, Josh 2026-07-19) — a 9-verb win_condition enum PLUS a required
win_shape axis.** The 11-value draft's verified asymmetry dissolved, not shipped: the two thinnest
doc-proposed verbs (REACH, COMMAND) are dropped as verbs and re-expressed as win_shape values
(passage, peopled_war), so no single-mode escape hatch is minted. Per-value provenance is kept so
no doc-invented value is ratified as canon unnoticed.
The win_condition verbs (9 ruled at D-COMBAT-TD R3; EVADE minted 2026-07-20 at D-EVADE-TOKEN, making 10; each still Pillar-8-blended, never a pure single mode):
REDUCE — health-depletion resolution (still blended, never a pure DPS check). [canon verb, renamed from COMBAT §11 HP]PART_BREAK — break named anatomy / anchor / technology-lock nodes (Ch 6/13/25/31/33). [canon-named — COMBAT §11 part-break]PACIFY — yield-into-respect / no-kill de-escalation; the killing blow refusable at explicit integrity cost (Ch 3/7/17/21/27; HL_0021). [canon-named — COMBAT §11 pacify]
PURGE — the environmental 4-step protocol's non-damage win (restraint→purgation; Ch 10/20/38/57; = ATTUNE). [canon-derived — COMBAT §11 restraint + the purgation protocol, CVD §12.3]PERCEIVE — recognition/reading/decode IS the win; the social/read-boss class (Ch 16/36/46/51/64/68 + the perceive-then-X compounds). [canon-named — COMBAT §11 perceive]EXPOSE — reveal the operation/ledger/apparatus (Ch 14/23/28/42/43/44/49); routes the antagonist through the institution, never the community (§2.6). [DOC-PROPOSED — spine-attested as expose/EXPOSED]
FREE — liberate the coerced host/possessed/shaman/construct (Ch 22; the WS4 "freed" beats Ch 59-63; the "freed" fiction at Ch 2). [DOC-PROPOSED — spine-attested as free/FREED]REFUTE — the materialized-argument class: counter with sourced truth / recitation / declare (Ch 15/18; Ch 69 the Architect where the school IS the boss). [canon-derived — COMBAT §11 declare]
BYPASS — win by walking a legitimate route past the false gate (Ch 23/24/30/34). [canon-named — COMBAT §11 rule 4 bypass, retained]EVADE — the undefeatable near-miss class: escape-by-wit-and-cost IS the win; the encounter isexplicitly not winnable by defeat (the Ch 54/56 Verderer Hunter-Trigger near-misses,
BE_0054_S4/BE_0056_S3). [RULED — D-EVADE-TOKEN, Josh 2026-07-20; minted on the back-fill's
evidence that the 9-verb enum could not honestly express the class; the interim BYPASS retired]
Provenance summary: canon-named/derived = REDUCE (rename of canon HP), PART_BREAK, PACIFY,
PURGE, PERCEIVE, REFUTE, BYPASS; DOC-PROPOSED (attested but not in the COMBAT §11 verb
rotation) = EXPOSE, FREE. The dropped REACH/COMMAND are NOT verbs — they become win_shape
values.
The required win_shape axis (parallel to the verb, gate-enforced — R3): a REQUIRED field carrying
the SHAPE of a win, distinct from its verb. Enum (8 values): front_not_fully_break, delegated,
personal_cost, siege, magic_duel (the WS4 five — Ch 59 / 60 / 61 / 62 / 63 respectively),
passage (the kinetic relief-chapter win where the "boss" is passage itself — absorbs the dropped
REACH), peopled_war (WIN a peopled war / hold a front for the realm — absorbs the dropped
COMMAND), and omni_recombine (the whole-kit recombination set-piece). Each shape still resolves
THROUGH a verb above (e.g. Ch 63 magic_duel wins by PERCEIVE+PURGE/FREE). The Pillar-8
validator binds BOTH fields (§4 marks both REQUIRED).
Back-fill notes (the whole arc covered, not shoe-horned): Ch 67 = REDUCE; Ch 70 = REDUCE-or-
PACIFY + passage; Ch 75 = the verb per its own rows + peopled_war; Ch 55 and Ch 76 = their own
verbs + omni_recombine.
Bookend exceptions (authored, NOT enum values): witness (Ch 77), seal (Prologue), endure
(Ch 1), none (Epilogue) stay authored bookend win-shapes, outside both the verb enum and the
win_shape enum. Compound win-conditions (perceive-then-pacify) are represented as an ordered verb
pair, not a separate enum value.
axis_split (e.g. 60/20/20) is authored on all 281 rows but its axes were undefined (COMBAT_SYS Gap
3.5; it originates in ROADMAP §0.E, not CVD/COMBAT). RULED (R1): the axes are
Patterns / Puzzles / Preparation, in that order — the existing numbers become meaningful with no
re-authoring. The "never 100/0/0" rule (BUILD L20) is now the machine never-zero axis gate: no axis
is 0 across any Boss_Encounter row, EXCEPT the two bookend rows whose chapter_id is CH_PROLOGUE /
CH_EPILOGUE (the exemption is keyed on chapter + witness/no-fail status, NOT on boss_kind). The gate
is implemented in harness/check_boss_axes.py (§4; §9 spike C-4).
read-and-respond spine. The [DIAL] tell-slack (§2.1) lives here.
trap-on-cycle. What a perceptive L2/L3 player weaponizes.
knowledge (§2.4 — chemistry/physics/biology, the rewards-intelligence axis), intel/scouting,
consumables, relationship/familiar-bond state. This is where "rewards intelligence" is measured.
✅ The decode-vs-investment boundary is now CANON (R1): in-fight cognition — including
decode/sequence/read-the-arena performed DURING the fight — scores as Puzzles; pre-fight gathering,
loadout, intel/scouting, and relationship/familiar-bond state score as Preparation. (This retires
the boss_roster philosophy's looser "the investigation layer literally becomes the Preparation axis"
line — investigation feeds BOTH axes on the two sides of this boundary.)
✅ CANON RULE (R2): every combat boss's Preparation axis must carry **≥1 FREE in-fiction
knowledge/skill route** — never a purchase-only route, never a mandatory external scaling item (§2.4;
ROSTER tuning contract). This is the rule, not a mitigation: it binds every boss row.
Pillar 8 makes "boss without a character-engagement field = pillar violation" executable (CVD L218) but
never defined the mechanic (COMBAT_SYS Gap 3.4). RULED (R4): character-engagement is a **STANDALONE
8th Composure node — DECOUPLED from the astral node** (astral stays a Pillar-11 hard-line-gated mode;
the two are no longer fused). It is a Composure sub-node broken by a character verb
(declare/weigh/witness/spare-or-kill), integrity-band-routed (the integrity band selects the
resolution, per the Ch-65 lock), present on every MAIN boss for ≥1 phase (the Entu P3 template). Its
verbs are varied and woven-not-bolted onto pure-strike mains (never a tacked-on lecture); for a
talk-boss the Composure break = completing the recitation/refutation. Machine form = the
character_engagement_node column (§4). Sub-bosses may carry it optionally (§5.5). This is the 8th
Composure node alongside the 7 combat modes; forcing it onto every sub-boss would 3–5× the authoring
load (COMBAT_SYS Gap 3.11), hence §5.5 scopes the mandate to mains.
(§5.4). RULED: a machine chapter-floor gate lands NOW — each chapter's sub-boss LADDER must
span ≥3 distinct combat modes (delivered across the ladder per different threads/systems —
CHAPTER_BUILD_TARGET §1 Ruling 1 — never forced onto each sub-boss). The floor runs off the
populated engagement_modes_object today and migrates to composure_nodes when that
extension lands. The stricter "a character beat below every main" clause is DEFERRED behind
the ~72-sub person-classification pass and recorded as a NAMED greybox exit-criterion (not
open-ended): the sub-ladder character-node gate turns on when that person-classification pass
completes. (Cite fix: the earlier draft's "Ruling 7" pointer is corrected to **CHAPTER_BUILD_TARGET
§1 Ruling 1**.)
axis** — they drive dominant_combat_mode, the §12.2 anti-staleness gate (no-two-consecutive-
dominant; ≥3-per-5-window), and map 1:1 onto the engine Composure node map (§3.4). The **5
mode_variety_check booleans are a SEPARATE, honestly-named §16 pacing-beat presence check**
(combat / puzzle / learning / character / transformation present in the chapter), **NOT a rollup of
the 7 modes — the "5-derived-from-7 rollup" claim is REJECTED and removed. The 10 COMBAT
encounter categories are demoted to an advisory audit lens**, not a binding taxonomy.
mode_variety_check is verified populated on all 79/79 chapters with genuine per-chapter values
(e.g. Ch 2 combat=Y;puzzle=Y;learning=Y;character=Y;transformation=Y) — so this is a
form-reconciliation, never a 2→79 population pass.
dominant_combat_mode cells are off the 7-mode canon(CH_47 / CH_48 / CH_70 / CH_71). These are recorded as a bounded micro-ruling to follow — **do
NOT change the cells now**; they are flagged for a targeted correction pass, not silently re-mapped.
[SRC: spine main_boss_win_condition grep 2026-07-19; COMBAT_SYS Gap 3.3–3.7, 3.11; CVD §5 P8,
§12.2; BUILD L20; ROSTER tuning contract]
---
The runtime-generation layer (RUNTIME_GEN + RUNTIME_GUARD) is the continuo bet: a dumb local model
made reliable by deterministic scaffolding. The build order is **deterministic-first — the whole spine
stands up with ZERO GPU** — then the model is layered as pure upside.
Build these as pure code (Python/C++), no model, no engine:
({goal∈enum, plan∈legal-set, knobs∈ranges, line≤N tok}), never an action. A deterministic
controller (StateTree/utility AI, Step 2/8) executes it at 60 Hz; the token is a read-only leaf with
no write path into the sim (F10, enforced at the API boundary) (RUNTIME_GUARD §1).
lint_canon_graph.py: V1 cultural denylist (§17.1forbidden-framing corpus, HL_0005) → V2 hard-line rule-vector (protected-community no-combat-
provocation, §17.5 no Grand-Sage pre-reveal) → V3 canon-graph name resolution incl. the retired-alias
reverse index → V4 persona/register → V5 anti-slop. V1–V3 hard-fail → fallback; V4–V5 one retry then
fallback (RUNTIME_GUARD §5).
(entity_id, state_bucket) — 3–6 lines / the authoreddefault StateTree behavior. The sim is already coherent on fallbacks alone; the model is upside,
never a dependency (RUNTIME_GUARD §6).
runtime_generation_log + first-try-pass-rate scorer — every miss logged; a nightly replayscores candidate model+prompt versions on the same V1–V5 checks (the continuo 0.965 analog)
(RUNTIME_GUARD §7).
harness/recall.py)recall.py EXISTS (§1 correction). The missing piece is recall packs — a new offline exporter in
harness/ that runs recall's recall node <id> union query once per entity at bake time and freezes a
per-entity pack: persona_card, fewshot_exemplars, hardline_rule_vector (add applies_to_pipeline
enum value Runtime), fact_whitelist, retired_alias_index, care_band, action_vocabulary
(strategic entities), state_bucket_map. Frozen + KV-prefix-cached, so per-frame cost is zero graph
work. A prototype hand-authors one boss's pack; production population cannot start until the exporter
exists (RUNTIME_GUARD §3, §9; ROADMAP §3 row 5).
Stand up the on-device inference leg on the CURRENT GPU: a 3–4B GGUF (Qwen3-3B / Phi-4-mini class) in
llama.cpp under a GBNF grammar emitting {emotion∈enum, line≤20 tok}, fed a canned sim next-move
intent, through the §6.1 validator + fallback + pass-rate log. This is the ROADMAP execution-queue item
#6. Passing criterion: the loop NEVER emits an invalid or off-whitelist line to "the player" (fallback
always catches) and prints a first-try pass rate. Constrained decoding makes malformed/out-of-vocab
output unsampleable (F8 prevented, not caught); the novel per-entity canon-vocabulary logit mask makes
a hallucinated/retired name unsampleable too (F1/F2 prevented) (RUNTIME_GUARD §4) [SRC: combat lane
first_smoke_test; ROADMAP §2 item 6].
Reserved to the incoming workstation (design's own pin): the 14B on-device reference model for
dev-side quality prototyping (the 3–4B is the SHIP target and runs today); the runtime-inference
perf-budget validation (batching, speculative/draft decode 2–3×, KV/prefix cache, the ~8–15 gen/s
busy-scene target, latency P99s — the Phase-5M-analog runtime perf audit); the nightly first-try-pass-
rate eval at corpus scale. Console packaging (Xbox int4/DirectML, PS5 compute-shader) is separately
devkit-gated — neither current-machine nor 5090 [SRC: RUNTIME_GEN §B; ROADMAP §4; combat lane
gated_5090].
RULED (R7, Josh 2026-07-19) — the §17.1 posture call at the high-care chapters (Ch 29 / 42 / 57) is
the entity-class scalpel: bosses + generic ambient fauna ship runtime-generation ON under the
standard V1–V5 guardrail, but each such boss's fact_whitelist excludes the Dreaming / songline /
joik nodes (HL_0007). Community + cultural NPCs + folklore-bearing fauna are AUTHORED-ONLY; any
untagged high-care entity defaults to authored-only (fail-safe). Every affirmatively-ON tag takes a
two-reviewer pre-launch audit; any later community-NPC flip-on is gated on a **human
source-fidelity review, never the §7 metric alone. Cite basis corrected:** HL_0002 (retained) +
HL_0003 / HL_0005 / HL_0007. (RUNTIME_GUARD §3.1 now carries the same ruling; its §9 open-item
recommendation is superseded.)
---
One boss-as-system, built to prove the load-bearing thesis with zero enemy-stat change. This is
ROADMAP execution-queue item #12, expanded to concrete UE steps. Runs on installed UE 5.8.0 (GAS/
StateTree/MetaSounds all present); the 5.8 GAS AttributeSet-init deprecation now applies on this
engine — verify that migration path in the greybox (C-7).
1. Arena + boss ASC. A greybox arena. One boss actor with an AbilitySystemComponent; author a
UAttributeSet with Composure (+ 2–3 mode-bound sub-nodes: direct, environmental, character)
and a single global vril_density float (Step 1, 3). No Health-inflation attribute exists on the
boss beyond the base; prove the dial never writes it.
2. Verbs + phases. Two boss verbs as GameplayAbilities (primary, secondary in different modes);
phase state as GameplayTags; a StateTree with two phases, the transition Enter Condition gated on a
Composure break (Step 2, 4). Prove evolve-not-swap: Phase-2 adds Tasks, keeps Phase-1's live.
3. The clocks + habit vector. StateTree Tasks for tell-windup, punish-window, and the Withdrawal
clock (all [DIAL]-scaled off vril_density); a player_habit_vector rolling histogram biasing a
Sigma-bounded move-selection table. Prove roll-spam → baited sweep (a smarter opponent, §2.1/§4.9).
4. The dial at two world-tensions. Drive vril_density as one float into GameplayEffect magnitudes
narrows, well latency rises, an off-mode answer prunes — **with zero change to any enemy attribute
or the arena cycle speed** (Step 3; §2.1). This is the headline proof.
5. The character node. One Composure sub-node broken by a declare verb, resolved on an
integrity-band condition (the mandatory Pillar-8 field, §5.4).
6. (If time) the barks leg. Wire §6.3's 3–4B + validator + fallback so the boss needles the actual
habit-vector read ("you always roll left") — the sim tells the model; the model never invents the
tactic.
Exit criterion: the same authored boss plays at two world-tensions with zero enemy-stat delta, and
(if #6) never emits an off-whitelist line. Illustrative numbers only (§8) [SRC: ROADMAP §2 item 12;
combat lane executable_now, first_smoke_test; COMBAT_SYS §5, §9, §10].
---
**Every numeric constant in the combat system is deferred to the Phase-5M balance audit (which has
never run) or a benchmark day.** This doc defines SHAPES and BINDINGS; any number it shows is
illustrative shape, not a locked value, and is labeled as such. Bound here, valued there:
cost-class→damage-range mappings, defensive timing windows → Phase 5M (COMBAT_SYS §1.5, §3.1;
structure locked at Session 5H, numbers deferred).
0.6 + 0.4×density, 0.7 + 0.3×density are illustrative shape from COMBAT_SYS §4, NOT locked), withdrawal_timer steps, adaptation_gain
rates → Phase 5M balance audit + BENCHMARK-DAY where they need the 5090 to profile at scale.
Range note (reconciled with Step 3): density in these coefficients is the normalized resultant
d_local ∈ [0,1] (defined in Step 3 as clamp(tier_baseline × WS_024/2.0, 0, 1)), NOT the
raw WS_024 multiplier ([0.0, 2.0]) — a coefficient like 0.6 + 0.4×density is written for the
[0,1] resultant and would mis-scale if fed raw WS_024. The two quantities are never interchangeable.
Phase-5M analog, §6.4), BENCHMARK-DAY on the 5090.
The greybox (§7) proceeds on illustrative shapes; a faithful TUNED build cannot exist until Phase 5M
runs as its own workflow (ROADMAP §3 row 3) [SRC: COMBAT_SYS §1.5, §3.1, §8, §12; ROADMAP §3].
Mirroring Terrain §3's owned-parameter table so §8's firewalled tunables are enumerable, not prose-only.
Owner-class is the five-doc triage vocabulary: PHASE-5M (the balance-audit numbers) ·
BENCHMARK-DAY (needs the 5090 / a perf run to pick a default) · JOSH-RULES (canon/system-canon).
Every value below is deferred — this table binds WHERE each lands, not the number.
| Parameter | Type | Owner-class | Where the value lands |
|---|---|---|---|
dial_telegraph_slack coefficient (e.g. 0.6 + 0.4×d_local) | float curve over d_local ∈ [0,1] | PHASE-5M | UGameplayEffect magnitude / UGameplayModMagnitudeCalculation (Step 1/3) |
dial_window_width coefficient (e.g. 0.7 + 0.3×d_local) | float curve over d_local ∈ [0,1] | PHASE-5M | GameplayEffect magnitude (Step 1/3) |
dial_well_latency coefficient | float curve over d_local ∈ [0,1] | PHASE-5M | recharge-well timer Task (Step 2) |
answer_pruning step (valid-solution thinning per tier) | int/enum over the 5 tensions | PHASE-5M + JOSH-RULES (which answers prune) | move-selection scorer / StateTree condition (Step 2) |
tell_windup_ms / punish_window_ms / cooldown_ms | int (ms) | PHASE-5M + BENCHMARK-DAY | StateTree timer Tasks (Step 2) |
sigma_bound (±1σ floor/ceiling magnitudes) | float (abs units) | PHASE-5M | Sigma Constraint in the GameplayEffect exec / scorer (Step 1/2; CVD §17.13) |
adaptation_gain (habit-vector learning rate) | float [DIAL] | PHASE-5M | player_habit_vector scorer bias (Step 2) |
withdrawal_timer step (vril_density -= step on expiry) | float [DIAL] | PHASE-5M | Withdrawal clock Task (Step 2/§4.7) |
integrity_band_delta (L1..L5 heal/dmg/vuln %) | float (%) on the PLAYER only | PHASE-5M | player GameplayEffect (Step 1 firewall — never on an enemy) |
restraint_budget clock | int/float | PHASE-5M + JOSH-RULES | environmental-boss StateTree (Step 6) |
env_cycle_period_s / env_phase | float (s) | PHASE-5M + JOSH-RULES (per-arena substrate) | arena periodic StateTree + Quartz (Step 3/5; read-only to the dial) |
| runtime-inference budget (latency P99, VRAM, quant, gen/s) | mixed | BENCHMARK-DAY | the runtime perf audit on the 5090 (§6.4) |
---
Every row is a genuine open question; none is settled by this doc. Class uses the five-doc triage
vocabulary — JOSH-RULES (canon/CVD/hard-line/§17/system-canon — Josh decides) · ENGINEERING-SPIKE
(bounded build work, no doc answer exists) · BENCHMARK-DAY (needs the 5090 / a perf run to pick a
default) · PHASE-5M (the balance-audit numbers). Trigger = what gates it; Owner = who resolves it.
| # | Spike | Class | Trigger | Owner / note |
|---|---|---|---|---|
| C-1 | No combat/runtime section in T1_Build_Pipeline_Contracts — this doc has no contract parent | ENGINEERING-SPIKE | before the combat lane is a first-class pipeline | add a §11 combat/runtime section to CONTRACTS naming this doc as its Translation Doc (ROADMAP §3 row 1) |
| C-2 | Win-condition enum (§5.1) | JOSH-RULES | — (RULED) | ✅ RULED-CLOSED (D-COMBAT-TD R3, 2026-07-19): a 9-verb win_condition enum + a REQUIRED win_shape axis; bookend verbs (witness/seal/endure/none) stay authored exceptions. UNBLOCKED for §4 declare + back-fill |
| C-3 | Three-axis names + definitions + the mandatory character-engagement definition (§5.2–5.4) | JOSH-RULES | — (RULED) | ✅ RULED-CLOSED (D-COMBAT-TD R1/R2/R4, 2026-07-19): Patterns/Puzzles/Preparation in order + the decode-vs-investment boundary + the R2 free-knowledge-route rule; character-engagement = a STANDALONE 8th Composure node (NOT the astral node) |
| C-4 | Sub-boss Pillar-8 scope + the 7/10/5 mode-vocabulary reconciliation (§5.5) | JOSH-RULES | — (RULED) | ✅ RULED-CLOSED (D-COMBAT-TD R5/R6, 2026-07-19): mains carry the mandatory character node; a machine chapter-floor gate (sub-ladder ≥3 modes) lands now in harness/check_boss_axes.py; the 7 CVD modes own combat-texture, the 5 booleans are a SEPARATE §16 pacing-beat check (rollup claim rejected), the 10 categories advisory; 4 off-canon cells (CH_47/48/70/71) = a bounded micro-ruling to follow |
| C-5 | The boss schema EXTENSION (§4) | ENGINEERING-SPIKE (gated on C-2/C-3) | before the BOSSJSON rich model + 281 rows carry machine combat columns | declare in registry_extensions.json + fidelity_baseline.json, re-baseline, gate green — NOT applied by this doc |
| C-6 | Combat runtime state → save: new ws.* keys vs WS7 sim vars; mark_write shape | JOSH-RULES (canon half) + ENGINEERING-SPIKE (typing) | typing before persist | ✅ CANON HALF RULED-CLOSED (D-COMBAT-TD R8, 2026-07-19): mint composure_node_mastery (WS_041) + banked_tell_reads (WS_042) as canonical Worldstate rows; live Composure + d_local get NO keys; WS_019 ratified as the mark_write home (forward_track = a build-time index). REMAINS OPEN: FWorldStateValue typing → the UE5_BUILD Step-10 spike |
| C-7 | GAS-vs-custom for Composure/dial/formula | ENGINEERING-SPIKE | before Step 1 is trusted at scale | RECOMMEND GAS; verify the 5.8 AttributeSet-init deprecation path in the greybox |
| C-8 | StateTree-vs-BehaviorTree for boss AI + the utility scorer standing in for "GOAP" | ENGINEERING-SPIKE | before Step 2 is trusted | RECOMMEND StateTree (5.8 default, production-ready 5.7); no first-party GOAP exists |
| C-9 | The recall packs exporter atop recall.py | ENGINEERING-SPIKE | before runtime context-pack population starts | build in harness/; prototype hand-authors one pack (§6.2) |
| C-10 | Balance numbers — damage/σ/ms/dial coefficients (§8) | PHASE-5M | before any faithful tuned build | run Phase 5M as its own workflow; greybox uses illustrative shapes |
| C-11 | Runtime-inference perf budget (latency/VRAM/gen-s) + the 14B reference | BENCHMARK-DAY | before the runtime layer's perf is trusted at scale | 5090; the 3–4B ship target + deterministic spine run now |
| C-12 | Launch posture — which entity classes ship runtime-gen ON (§6.5) | JOSH-RULES | — (RULED) | ✅ RULED-CLOSED (D-COMBAT-TD R7, 2026-07-19): bosses + generic ambient fauna ON (boss whitelists exclude Dreaming/songline/joik, HL_0007); community/cultural NPCs + folklore-bearing fauna authored-only; untagged high-care defaults authored-only; two-reviewer pre-launch audit; cite HL_0002 + HL_0003/0005/0007 |
| C-13 | Chaos destruction perf + the D-verb→feature binding at scale (§5, Step 5) | BENCHMARK-DAY + ENGINEERING-SPIKE | before environment-combat is load-bearing across regions | 5090 perf; WS7 T0_Environment_Grammar_Registry supplies the verb set |
| C-14 | Boss-combat-state event → cinematic trigger (cross-lane) | ENGINEERING-SPIKE | before boss cinematics fire | resolves the cinematic lane's spike 4 — a StateTree/GameplayTag event (Step 7) |
| C-15 | Live protected-chapter source contradictions (Ch 57 fauna combat; Ch 43 region; Ch 59-63 order; Ch 23-vs-25 anchor) | JOSH-RULES | — (RULED) | ✅ RULED-CLOSED (D-COMBAT-TD R9, 2026-07-19): Ch 57 = environmental + astral ONLY (no fauna cull); Ch 43 both regions (Appalachia + Gullah/Sea-Islands); Ch 59-63 order = 59 Africa / 60 Asia / 61 Europe / 62 Americas / 63 Pacific; anchor #2 = Ch 23 (T1_Combat L222 locked, BE_0023 token). Ledger D-3/D-4/D-5 + anchor #2 closed |
---
The repeatable loop a boss row drives once the §5 rulings + §4 extension land. Precondition: the boss's
docs/spine/CH_NN.md entry passes check_spine_graph.py and the chapter's region page is Build Ready.
1. Extract — pull the boss + sub-boss rows for this chapter from T0_Boss_Encounter_Registry +
the spine main_boss_win_condition / verb / axis prose; resolve win_condition, composure_nodes,
axis_split, signature_counters per §4/§5.
2. Attributes — author the boss ASC + UAttributeSet (Composure sub-nodes per composure_nodes;
vril_density read from the arena's realm+site density band, §2.2 — never Z/latitude).
3. Abilities + phases — primary/secondary verbs as GameplayAbilities in different modes; phases as
StateTree states + GameplayTags; transitions per phase_trigger, escalation per escalation_vector
(evolve-not-swap verified: no state pops a prior state's Tasks).
4. Clocks + adaptation — the [DIAL]-scaled clocks off vril_density; player_habit_vector biases
the Sigma-bounded move table; the Withdrawal clock steps density on expiry (never a damage spike).
5. Character node — the mandatory character-engagement Composure node (main bosses; §5.4),
integrity-routed.
6. Environment — bind the arena's WS7 environment-grammar features + D-verbs (Chaos), respecting
alteration_permanence_default (C2 — sacred hard_blocked, Evil scars heals_over).
7. Win + death economy — win_reward / death_reward wired (Hades on both; banked tell-reads;
recharge-as-checkpoint; graduated failure for environmental bosses).
8. Worldstate — ws_writes call the UWorldStateSubsystem (Step 7); the boss-combat-state event
emits for the cinematic trigger (C-14).
9. Runtime-gen (optional, upside) — attach the boss's recall packs context pack + the §6 barks
leg; validator + fallback active; off for high-care entities per C-12.
10. Validate — Pillar-8 gate: axis_split no 0; ≥2 modes (main = full blend + character node);
≥1 counter/signature + ≥2 across builds; no enemy-stat difficulty delta anywhere (§2.1); the
chapter's already-populated mode_variety_check 5-boolean row reconciled against the 7 modes (C-4 —
not re-populated); run_gates.py UNPIPED green after --emit-baseline.
This doc updates as the §5 rulings land, the §4 extension is declared, and the first greybox surfaces
edge cases — per the versioning discipline in §1, a Translation Doc refinement, not a doctrine
amendment, unless a build surfaces an actual canon gap (then it flags for Josh).