RIFT_DUNGEON_SCAFFOLDING_SPEC.md

music/RIFT_DUNGEON_SCAFFOLDING_SPEC.md

RIFT-DUNGEON SCAFFOLDING SPEC — the twenty-dungeon economy (REVISED, critic round 1 applied)

CANON SUBORDINATION — this document is PROPOSAL-TIER: it serves canon and never outranks it.
The canon: the CVD · the T1 foundation docs · the T0 registries (registries/) · the spine
(docs/spine/CH_*.md) · the region pages (_source/02_Tier_2_Region_Pages/). Authority order: docs/DOC_MAP.md § 0.
Canon served (scanned from this document's own citations — widen it by hand where it is thin):
CVD §12 · CVD §17 · T1_Combat_System_Spec · T1_Integrity_Paths · T1_Tier_C_MMO_Spec · (+1 more tier) · T0_Ability_Tree_Registry · T0_Boss_Encounter_Registry · T0_Dungeon_Class_Reference · T0_Environment_Grammar_Registry · (+6 more t0)
READ THAT CANON FIRST — open it and derive from it before you build anything from this document.
If this document disagrees with canon, CANON WINS and this document is the defect — fix the
document, never the canon. Nothing here is applied until it is ratified into canon.

Proposal-tier design contract. Authors no canon, edits nothing, ratifies nothing. It is the contract

the engine implements after the 5090 lands: data model, registry touches, state machine, edge cases,

verification teeth. Register: CVD §17.14 throughout. Every claim carries its ruled-canon anchor.

Every fork that would decide numerical, naming, or hard-line canon is presented as options with a

recommendation and is NOT self-closed.

REVISION STATUS. This is revision 2, produced against the fresh-context critic verdict on revision 1

(GO-WITH-FIXES, four MAJOR blocking, ten MEDIUM, two MINOR). All sixteen findings are applied; the

per-finding record is at section 13. Every live-tree number in this revision was re-measured this

pass, not carried forward. Three director rulings for this wave also land here and are marked

DIRECTOR RULING where they appear (sections 2.5, 6.3, 8 edge case 13).

0. PROVENANCE AND AUTHORITY

proposal-tier lens and a T1 doc disagree, the T1 doc wins and the disagreement is named rather

than smoothed (section 11).

expanded, axis 2 rift dungeons, axis 6 events, axis 7 the cleansing meter); the ninth sitting JB-1

(Hollows are defeated; the encounter-design mandate; the full loop find the cause, enter the rift,

clear the contamination and the Hollow) and JB-2 (the meter scope and the no-lockout law); the

twelfth sitting (TWENTY bounded rift dungeons; the leveling value-scaling model); director rulings

D-1 (the unsealed re-cleansable gap) and D-2 (the membrane-pocket ontology plus the HL_0005

entrance grammar); the X-2 dungeon-budget ruling as superseded to twenty. Anchors:

docs/spine/DECISIONS_PENDING_JOSH.md eighth, ninth and twelfth sitting blocks (the twelfth at

L299-320); docs/pipeline_review/HOLLOW_EXPANSION_INTEGRATION_2026-07-27.md §§1.2, 1.6, 1.7, 2, 3,

5, 6, 7.3 and the §11 worklist carrying D-1, D-2 and X-2 (X-2 at L1665-1697).

0.1 The supersession sweep — sittings 13 through 20, read this pass

Revision 1 stopped its ruling sweep at the twelfth sitting and it bit once (F-6). The sweep is now

explicit, so the next reader can see exactly what was checked and what bears.

ratified with the anything-open-needs-a-full-brief rider, and DR-2's full-per-tier presentation

variants stand at full strength. A rift dungeon's reward presentation inherits both; neither

touches the meter predicate or the bounded pot.

ratified). Does not bear, except that Ch 72 is a FIXED node and no rift dungeon may be authored

in a way that re-shapes it.

§12 grade names are BANDS over the twelve ruled levels — Neophyte 1, Zelator 2, Theoricus 3,

Practicus 4, Philosophus 5, Adeptus Minor 6, Adeptus Major 7-8, Adeptus Exemptus 9-10, Magister

Templi 11, Magus 12. The mastery_tier_required repair at Step 1 writes into THAT vocabulary, and

entry_gate's mastery-tier tokens resolve through it. The six surviving real tokens on the live

registry (section 1) are band names and are legible under this mapping.

and identified it as the rift-interior register (section 3.2).

evidence that the item ladder now carries item-specific semantics that make no sense on a place.

epithets are ruled and live — "the Quiet Step" (Ch 2, Rangku Wera) and "the Iron Step" (Ch 60, the

retainer), applied across roughly 45 occurrences in 27 files. T0_Boss_Encounter_Registry BE_0002

boss_name reads "Rangku Wera, the Quiet Step" on the live row, verified this pass. F-6 is rewritten

accordingly.

bear on the rift economy. It reinforces the persistence-of-self clause at 3.2 (a pocket never

strips a pick) and nothing else.

0.2 The living surfaces and the hard lines

reading, L47-57), §1.2.5 (the answerability rule), §1.2.6 (the invented-realm rider), §1.2.7,

§9 (Outer-Order vril perception), §12.7 (negative vril is not personified evil), and the drift log

entry recording D-2 (L578). T1_Combat_System_Spec [ACTIVE v1.0] L61 and L63 (the four resource

types, the fifths quantum, the ceilings, and the twelfth-sitting amendment carrying the twenty).

T1_CVD [ACTIVE v1.4] Pillar 1 Random Encounter Policy (L166-171). T1_Tier_C_MMO_Spec [ACTIVE v1.0]

§8.4 (World Boss kill benefits, L290-298), §8.5 (discovery stays player-owned), §8.8 (the

operational-team architecture and the adaptive boss AI, L328).

tombs and abandoned temples may be trap-laden puzzle-dungeons; the trap-dungeon ban is lifted for

non-living ruined sites), HL_0092 (dungeon and pure-gameplay generation is not gated on

ethnographic sourcing), HL_0080 as amended at the ninth sitting (the Hollow class removed from the

non-damage protocol; the six sacred-site atmospheric-echo instances keep it), HL_0043 and HL_0046

(thesis silence and the Grand Sage never speaks), HL_0048 (mode variety per chapter across all 79

nodes), HL_0014 (the Evil path is cumulative self-loss).

seven-layer and five-bar ceilings, and the one-piece granularity lock are RULED and are reproduced,

never re-derived. Every other magnitude is ordinal and defers to the Phase-5M balance audit, per

T1_Vril §1's magnitudes clause and X-2's own tunables paragraph.

1. WHAT THE LIVE TREE ACTUALLY CONTAINS TODAY

Stated first, with positive controls, because the spec's whole shape depends on it and because a

zero reported without a control is worthless. Every figure below was re-measured this revision.

Positive control: the same listing resolves 56 registry directories by name, so the scan reaches

the right place.

(dimensional_threshold 9, pyramid 6, vortex_anchor 6, megalith 5, waterfall 3, tomb 3, obelisk 2,

site_geoglyph_earthwork 2, orb 1, vimana_facility 1, underground_facility 1, songline_path 1,

ceremony_anchor 1, site_reservoir 1) and zero rows whose name or class contains rift. Positive

control: the same scan returns the fourteen live class tokens, so it is reading the column.

and 51 columns including counts_toward_cleansing_meter, ledger_axis and manifestation_tier — all

three empty on all 281 rows. ontology_class is populated on 2 rows (CONSTRUCT) and collect_verb on

2 (FIGHT). That both meter columns already exist here is the reason section 2.5 must name a single

owner rather than mirror them.

COLUMNS and the vocabulary declaration; no row carries either token. Positive control: the same

case-sensitive scan over the same tree returns hits for CONSTRUCT and FIGHT.

purify|harvest, region_id central_africa_congo, chapter_window CH_39-CH_65, perception_gate

"tier-gated vril-sight", reveal_tier "design-layer" and care_register "standard" — that is, the

X-5 repair has not landed.

2 rows. Both are DESIGNED-UNBUILT, not missing.

site_id, terrain, functions, ambient_threat, vril_density, climactic_affordance, protected,

display_name. Live total across all chapters: 380 rows, of which protected is true on 196 and

false on 184. Site ids are slug-shaped (liang_bua_cave), which matters at 6.3 because the vril-site

registry's ids are VS_CHNN_NNN-shaped — two disjoint id spaces that need a declared join.

distribution is now MEASURED rather than asserted. Across the 42 rows: 6 rows carry a real tier

token (ADEPTUS_MAJOR 2, Adeptus_Exemptus 2, ADEPTUS_MINOR 1, PHILOSOPHUS 1), 6 rows carry NULL,

and 30 rows carry garbage — quote-fragment thread tokens ("T13 ten times, T22" twice, "T02 twice,

and "T17, "T01, "T04 once each), boolean spill (True ten times, False twice), and one numeric

spill (6.0). That is 6 plus 6 plus 30 equals 42, cell for cell. Revision 1 claimed 41 of 42 rows

held thread-token fragments and then manufactured a disagreement with the zelda lens's 30-of-42;

the lens was exact, the manufactured contradiction did not exist, and it is struck here and at

section 11. The repair is a PRECONDITION for the entrance grammar at section 4, because entry_gate

lands on that same row shape, and the repair writes into the sixteenth sitting's ruled band

vocabulary (section 0.1).

2. THE ROSTER MODEL — five classes, one meter predicate, one owner

2.1 The predicate, restated from the ruling

non-random), including the easter-egg and hard-to-find authored instances. Josh, ninth sitting

JB-2, verbatim: the meter "only counts non-event and non-random rifts, but does include some

Easter eggs or harder to find but those won't gate progession," and it "does also include

affliction cleansing."

count. Their exclusion is what makes the completionist 100 percent knowable at all, since a

sigma-spawned population has no denominator a player can ever see

(HOLLOW_EXPANSION_INTEGRATION §2.2).

percent may be gated by an integrity path or an absorb choice. Story consequences of absorbing are

permanent and remembered; the meter axis stays completable. D-1's re-cleansable gap is the named

delivery vehicle and is confirmed by that ruling.

2.2 The five classes

ten granting a Health capacity piece (twelfth sitting; T1_Combat_System_Spec L63). Counts toward

the meter. Never gates progression. One dungeon grants exactly one PIECE, never a full unit — the

granularity lock from X-2, composing across sites through the ruled fifths quantum.

(the universal meter-credit invariant: every authored dungeon grants meter credit regardless of

stat lane). Reward routes by X-2's priority order: first the uncapped Stamina or Rage swap lane,

second the rarity lane under §17.13 sigma with gate 27 policing, third meter-credit-and-the-record.

Never draws the bounded pot.

(JB-2, verbatim). Never carries a bounded piece and never gates progression or completion (X-2's

third tooth, which is the no-lockout law expressed on the dungeon row).

MMO team form. Never counts. Governed by schedule rather than by world placement

(HOLLOW_EXPANSION_INTEGRATION §2.4). Every window declares a changed law (section 7).

three declared random systems, never a fourth (T1_Vril §1.1; CVD L166-171). Never counts, never

draws the bounded pot, and carries NO per-instance registry row: a small number of templates plus

a generator, per the RUNTIME_GENERATIVE_LAYER doctrine and HOLLOW_EXPANSION_INTEGRATION §5.

(JB-2). It is in scope for this spec only where it touches the meter arithmetic and the no-lockout

law.

2.3 The class-to-column mapping, so no judgement call survives into the build

POPUP_TEMPLATE. Declared as a MINT at 6.5.

rift_class and asserted by a tooth rather than hand-set, so the two can never disagree.

RARITY_ONLY. BOUNDED_VRIL and BOUNDED_HEALTH are legal only on rift_class AUTHORED_BOUNDED.

T0_Boss_Encounter_Registry. Rift dungeon rows write RIFT.

2.4 The realm axis is NOT written by this spec

written into the meter and tracks through worldstate instead, with an explicit invitation to flag

it. This spec keeps the REALM token in the enum so a later ruling is a filter rather than a

migration (the M-2 hedge at HOLLOW_EXPANSION_INTEGRATION §6.1), and writes nothing to it. The fork

is carried to Josh at section 10, F-3.

2.5 ONE OWNER FOR THE METER PREDICATE — the rift row, and nothing else

This subsection is new in revision 2 and closes the critic's third MAJOR: the predicate had two homes

and no declared owner, which is the twins-drift defect this spec uses to reject F-1 option (c).

written on the rift-dungeon row and derived there from rift_class, because rift_class lives there

and the derivation is defined off it. No other surface mints the predicate.

live on that registry (empty on all 281 rows, verified this pass). Any BE_ row reachable from a

rift row's encounter_ref leaves both cells EMPTY. They are not a mirror to maintain; they are a

surface this system does not write. Non-rift BE_ rows are outside this spec's scope and keep

whatever the encounter program gives them.

BE_ cells to be populated for rift-linked encounters, they are DERIVED from the rift row and a

tooth asserts cell-for-cell agreement. That assertion is specified now so it never has to be

invented later: T-RIFT-7, third assertion block, with its own positive control.

seam-typing spec's crossing_weight column DELEGATES to this spec's CLASS VOCABULARY and to the

universal meter-credit invariant, and to nothing else: a seam whose crossing_weight is

staged_crossing or open_crossing takes its class token from THIS spec's five-class taxonomy — read

off the authored-dungeon CLASS table T0_Dungeon_Class_Reference, which stands above both

registries — and its meter credit from THIS spec's universal meter-credit invariant. A crossing

dungeon is NEVER a rift row: §3.1 rules that no rift dungeon is a crossing and that rift dungeons

never cross to realms, so the crossing's INSTANCE homes on the travel and seam surface and never in

this spec's rift instance registry, and the crossing tooth T-RIFT-4 is scoped to rift_class rows so

a crossing-class row cannot trip it. The seam spec never mints a parallel class taxonomy and never

mints a second meter predicate. One owner of the class taxonomy, never two mints. The seam spec's

own crossing_weight vocabulary (none, dressed, staged_crossing, open_crossing) stays its own — it

types the SEAM, not the dungeon.

3. THE MEMBRANE-POCKET PHYSICS CONTRACT

Every clause here is reproduced from T1_Vril §1.1 and §1.2.6, which are ACTIVE living-source canon.

The engine implements them as invariants, not as guidance.

3.1 The five invariants

pocket is what a rupture leaves behind where the dimensional pressure differential across the veil

has not equalized, and it is ANCHORED TO A REAL EARTH LOCATION. Negative vril pools and hardens in

the vacated substrate-gap by the physics §1 already states, so the pocket needs no new metaphysics.

already grounded, never opened by the one who finds it. The no-controlled-rift invariant holds, so

the Ch 46 to Ch 54 to Ch 56 to Ch 58 antagonist research thread remains the canonical decades-long

failure it is. No player ability, item, vimana or device opens a rift. The vimana's §6.4 exclusion

is unaffected.

Ch 58 Phase 3 stabilization. No rift dungeon is a crossing.

and none supplies a route that the Ch 74 Yggdrasil World Tree crossing or the Ch 66-69

threshold-traversal mechanics own. This is the §1.1 invariant the spec's crossing tooth exists to

enforce (section 9, T-RIFT-4).

RIFT and "rift" is the durable player-facing activity noun. No HUD readout expresses the

membrane-pocket distinction, no character states it, no journal entry teaches it. This is the same

discipline §1 applies to vril gravity.

3.2 The rift interior is the invented eleventh register, and it inherits that rider

RIFT-INTERIOR REGISTER, framed by the ruled twenty-rift-dungeon economy (Josh, seventeenth

sitting, 2026-07-28).

may bend any of the seven profile families at any depth the design earns, and it obeys the floor,

the partition, the three-layer expression rule and the answerability rule exactly as the nine

mythological realms do.

cite, so its warrant is the game's own canon; the provenance tooth scopes to source-bearing rows.

Invented licenses the pixels and never the sourcing, and citation still binds every row that HAS a

source — which includes every ENTRANCE row, because entrances sit at real ruins, tombs and

megaliths.

Dreaming substrate, and draws none of its law, imagery, vocabulary or envelope from it.

ONLY as a consequence of its declared law, never by fiat; every suppression declares its EXTENT

(realm, locus, or single encounter) and its RESTORATION condition in the machine-readable

condition-expression grammar; an encounter-scoped suppression with no declared restoration is a

confiscation and fails the floor (T1_Vril §1.2.5). Persistence of self bounds it: mastery levels,

picks, gear, imprints, bonds and record cross the pocket threshold intact — the twentieth sitting's

24-picks-per-capability economy is never touched by a pocket.

harness/check_counter_class_coverage.py is a monotone-unlock model and passes a revoking space

green by construction. Until ability_availability_delta lands and is READ, a green answerability

run is not evidence that a rift interior's suppressions are answerable. Tooth T-RIFT-8 closes it

for rift rows.

3.3 The one place a rift dungeon must not go

standing in that rift gives the death an author and leaks the antagonist pattern roughly

thirty-eight chapters early (HOLLOW_EXPANSION_INTEGRATION §7.3, citing the ratified

AMULET_PROVENANCE_BRIEF). Prologue rift content stays rift-closing without an occupant, and the

eleventh-sitting arrive-too-late staging binds the beat.

4. THE ENTRANCE GRAMMAR

4.1 The ruled placement law

trap-laden puzzle-dungeons, drawing on the §5.4 tomb class and the §5.5 megalithic and

vortex-anchor class already carried in T0_Vril_Site_Registry (T1_Vril §1.1, entrance placement

paragraph; D-2's R-D leg).

lines bind unchanged. This is the one care clause in the whole rift program that is absolute. The

refusal is absolute; its PREDICATE is narrow, and revision 2 narrows it (next bullet).

protected is TRUE on 196 of the 380 live site rows, 52 percent of the authored world. A blanket

protected-equals-TRUE refusal would wall off half the map, and HL_0005 explicitly LIFTS the

trap-dungeon ban for non-living ruined sites, many of which legitimately carry a protection flag

precisely because they are archaeologically or culturally significant ruins. Josh's standing

calibration is that care-tier inflation is a defect and the timid option is usually the wrong one.

So the refusal keys on a LIVING-OR-OCCUPIED predicate: a site in active ceremonial use, an

inhabited settlement, or a site carrying a living-tradition custodianship. That predicate does not

exist as a column today (the live sites.csv functions vocabulary is character, learning, discovery,

combat, puzzle, transformation, traversal, investigation, vril_management, dialogue, stealth,

trade — none of which encodes occupancy), so it is MINTED at 6.5 as site_occupancy_class and its

landing is a Step-1 precondition alongside the mastery_tier_required repair. Until it lands, no

authored mouth row is written and T-RIFT-5 declares itself unarmed rather than reporting a false

pass.

has become enterable, which is one of the three declared random systems rather than a fourth. The

mapping must be stated explicitly in the pop-up's own doctrine row, because an undeclared "pop-up

dungeon spawner" reads as a Pillar 1 violation on the face of the executable test.

megalith (5) and vortex_anchor (6). T1_Vril §1.1 and D-2's R-D leg name the §5.4 tomb class and the

§5.5 megalithic and vortex-anchor class and no others. Revision 1 silently widened the set to

include pyramid (6 rows) and obelisk (2) and then wrote the widened set into a tooth, which turned

a proposal into an enforced invariant. The widening is now carried as its own fork, F-8, with the

ruined-and-unoccupied predicate as its acceptance criterion, and T-RIFT-5 enforces only the three

ruled classes until F-8 is ruled.

crossing mechanics §1.1 explicitly walls off from rift dungeons, and routing an entrance there

would breach the crossing invariant on the data layer.

4.2 The locus vocabulary is reveal-gated

not unattributable. Every pre-39 rift stands at a natural deadzone.

procedural spawn table draws locus type from a CHAPTER-SCOPED table in which

VELHEIM_EXTRACTION_SCAR and CORRUPTION_SEAM are absent below Ch 39. This is the first reveal

constraint in the corpus that must live in a data table rather than in prose, because no prose

critic reads a spawner. Tooth T-RIFT-6 is that assertion, and revision 2 fixes its home so it can

actually read that table (section 9).

CORRUPTION_SEAM, REALM_SITE, RIFT_POCKET) with a chapter floor per token. Declared as a MINT at

6.5, tokens traced to section 3.5 of the integration record's locus list.

5. THE STATE MACHINE — the re-cleansable gap made mechanical

5.1 States

The integration record's §6.3 key is four states (UNDISCOVERED, OPEN, CLEANSED, ABSORBED). This spec

EXTENDS it to seven, and revision 2 names the extension rather than presenting it as the record's own

shape. The ground for each added state: CLEARED is required by the payment-point fork at 5.3 and

F-7 (there must be a state that means the container is complete and the fork not yet taken);

PERCEIVED is required by the three-rung perception ladder at §7.1, which has a player-visible

consequence before entry; COLLAPSED is required by pop-up expiry and event-window close, which the

four-state key cannot express. The extension is additive — no recorded state changes meaning.

§9; three-rung perception ladder at HOLLOW_EXPANSION_INTEGRATION §7.1: Neophyte vril-trace from

Ch 2, Vril Sight at Ch 15, substrate perception at Tier 6). No meter contribution.

the ninth sitting's full loop, and the fork not yet taken. The payment point is a live fork, F-7.

record lifted. Meter contribution of exactly one.

affliction lifted so nothing dead-ends, the gap is NOT sealed, no substrate returned, the region's

vril does not rise, and the node stays RE-CLEANSABLE (D-1).

meter state.

5.2 Transitions

corpse, because the body was never alive).

timer that chooses for the player. The fork is unskippable — the moment it can be skipped, the

encounter is a kill (HOLLOW_EXPANSION_INTEGRATION §3.4).

what keeps 100 percent reachable on every path and is the mechanism JB-2 named.

on_exit_state, section 6.

5.3 The reward split, and the payment point as an OPEN FORK

Revision 1 closed the payment-point question as a derivation. It is not one: nothing in JB-2 or X-2

rules the payment point, and the justification revision 1 gave (that pay-on-cleanse would forfeit two

bubble layers and two health bars, a de facto lockout) is refuted by this spec's own D-1 mechanism —

under pay-on-cleanse the absorb player DEFERS the piece to the re-cleanse rather than forfeiting it,

and 5.4's piece_paid key already guarantees single payment. The de-facto-lockout claim is STRUCK. The

question is re-opened as F-7 with a recommendation and its strongest objection.

stat upgrade belongs to the dungeon; the entity yields the fork's outcome and nothing else

(HOLLOW_EXPANSION_INTEGRATION §3.4, the anti-kill-loot teeth).

reaches the same total capacity only by revisiting, so the absorb path carries a revisit tax on

the stat lane. That is friction, not a lockout, and it is a legitimate design lever rather than a

violation.

INTEGRATION §3.3 enumerates the full price of absorbing — the place stays drained, the region's

vril does not rise, the meter does not advance on that node, and the node stays re-cleansable. The

stat reward is NOT in that enumeration. Adding it would be adding a price the record did not rule.

absorb-depth charges, and the node's terminal state.

rule at section 6. This half is not contested — it follows directly from §3.4.

is keyed on the node and the payment TRIGGER is a single declared state token on the rift row, so

a ruling is a one-token change rather than a migration.

5.4 Idempotency

absorbed node contributes the one it never contributed; it never contributes a second.

and rolls no second drop. This holds identically under both F-7 options, which is why the fork is

a token change and not a schema change.

impossible rather than balance-tuned, which matters because the integration record uses the phrase

"farm the cap" twice.

6. THE PER-DUNGEON DATA MODEL

6.1 Three surfaces, and the reason they stay separate

An authored rift dungeon is three things at once, and the corpus already owns a home for two of them.

its env paragraph and its hosts CH_NN_BNN beat binding, parsed by check_spine_graph.py. A bounded

dungeon authors as three to six site rows with gates between them — the zelda lens's reuse-first

recommendation, which this spec adopts. This is the surface that carries protected and, after the

6.5 mint, site_occupancy_class.

verified this pass; the integration record's §6.1 paraphrase says 45 columns, and that figure is

SUPERSEDED by the live 51-column schema. The row already carries every field a Hollow encounter

needs, and the precedents are already in the table (BE_PROLOGUE "The First Rift", primary_verb

seal, no fail wall; BE_0029 boss_kind environmental, resolved by PURGE; BE_0002 ontology_class

CONSTRUCT, has_nonkill_path TRUE, boss_name live as "Rangku Wera, the Quiet Step" per the

nineteenth sitting). The only stated reason the admission brief refused a BE_ row was the

never-fought property, and Josh superseded it.

section 10, F-1.

6.2 Recommended home for the run-economy row

rift_pocket and a new pocket_parent_site_id FK pointing at the MOUTH row (whose site_class stays

one of the HL_0005-licensed classes). Two rows per dungeon, one registry, one FK, zero new tables.

to a shrine roster and the natural parent for an authored rift-dungeon SITE row." It already

carries the whole mesh and generation pipeline block (mesh_id_ref, mesh_pipeline_type,

substrate_material_ref_path, mesh_tags, generation_status, generation_prompt_hash,

regeneration_trigger, generation_tier, decay_bearing, decay_stage) that the art factory needs on

the interior, plus site_sfx and magic-effect SFX arrays. It already carries chapter, region,

thread_anchors, vril_function and cvd_anchor. And it is the registry D-2 already made the home of

an authored dungeon's entrance, so mouth and pocket sit in one grammar.

and NO care column. The care surface lives on sites.csv. So the mouth row cannot enforce care by

itself — it needs a declared join, which 6.3 now supplies as mouth_site_row_ref. Revision 1 omitted

that join and therefore specified a care tooth with no runnable input path.

HOLLOW_EXPANSION_INTEGRATION §5 rules the codex to be the WHISPER LOGBOOK with a capped row count,

and rules content-tier resolutions to log to the meter and the region and community ledgers

instead. Putting twenty content-tier dungeon rows into a capped whisper logbook contradicts that

ruling directly and re-opens the cap-versus-density tension §5 exists to resolve. The collision is

NAMED here rather than smoothed, and the fork carries the alternative honestly at F-1.

coverage the site registry already has, and the twins would drift — the same defect the realm

charter already rejected in another form. Carried as F-1 option (c) anyway, because it is the

option that costs the least schema contortion if the site registry's save-and-recharge semantics

turn out to bind (section 8, edge case 13).

6.3 The extension columns

All of these are ADDED COLUMNS beyond the frozen _source reference width. The gate-safe vector is

already documented and must be followed exactly: declare each column in docs/registry_extensions.json

under one owning system, declare it in docs/fidelity_baseline.json added_columns, and refresh the

baseline with registry_fidelity.py --emit-baseline in the SAME commit. Owning system name proposed:

rift-dungeon-economy.

Not a mint — X-2's ruled vocabulary reproduced.

same-named column on T0_Boss_Encounter_Registry stays unwritten on rift-linked rows.

rewards pay, one of CLEARED or CLEANSED. Written once when F-7 is ruled; a ruling is a token

change, not a migration.

creature_spawn (1) and pool_option (4). MINT. INTERNAL ROUTING ONLY, never a player surface —

declared explicitly here because the no-mode-taxonomy-on-player-surfaces law makes that

declaration mandatory rather than optional. Token slate is a fork, F-4. Gate 27 polices it only

after the two-line gate edit specified at F-4 and at section 12 Step 4.

every authored MOUTH row, resolving to build/spine_rows/CH_NN/sites.csv site_id. THE JOIN, stated

so it can be implemented without guessing: the two id spaces are disjoint by construction — the

vril-site registry keys VS_CHNN_NNN (VS_CH02_001) and the site rows key slugs (liang_bua_cave) —

so no implicit match exists and the FK is the only path. Resolution is chapter-scoped: the mouth

row's chapter column selects the CH_NN directory, and mouth_site_row_ref selects the row within it.

Through this FK the mouth row reads protected and site_occupancy_class, which is what makes

T-RIFT-5's care assertions runnable at all.

POPUP_TEMPLATE rows. This is the intra-registry join and is NOT a substitute for

mouth_site_row_ref, which is the cross-surface one.

drawn from the vocabularies that already exist (T0_Ability_Tree_Registry.ability_id, the six-device

schedule, the twelve mastery levels read through the sixteenth sitting's ruled band mapping).

This is the zelda lens's intra-space gate.

no Hollow (the Prologue exclusion is the canonical instance).

EVENT_WINDOWED. Register entry 116 names the field; this spec proposes the slate. MINT.

built: §17.13 sigma, T0_RNG_Drop_Table, WS_046 item_instance_ledger, gate 27. MINT.

SAME closed counter-class vocabulary check_counter_class_coverage.py already owns), effect

(suppressed, restyled, unchanged), extent and restored_at. Not a mint — the vocabulary is the

gate's own.

for the doctrine clause; this is its data hook).

precondition. See 6.5.

6.4 Worldstate keys

Three new keys, all shaped KEYED-REPLACE so the wiring lands WITHOUT touching the Josh-ruled

APPEND_LEGAL_IDS set (D-CG25-APPEND-SET, currently fourteen ids in harness/check_ws_value_form.py).

roll-up. A float would make the 100 percent claim unauditable; a single scalar would make JB-2 a

save migration instead of a display choice.

credited (the idempotency flag), piece_paid (the same for the bounded piece). THE STATE ENUM IS

THIS SPEC'S SEVEN-STATE EXTENSION of the record's recorded four (§6.3 of the integration record:

UNDISCOVERED, OPEN, CLEANSED, ABSORBED), named as an extension at 5.1 with the ground for each

added state. The two idempotency flags are likewise this spec's addition, grounded in 5.4.

be low-integrity without being hollowed — that distinction is HL_0014's whole point.

power lands), WS_003 world_state_current, WS_019 community_state_per_region (the affliction

outcome), WS_020 antagonist_operational_state_per_region (the scar loci), WS_001 and WS_002

(integrity), WS_023 vril_polarity_signature, WS_006 appearance_score, WS_039

hollow_containment_fork_last, WS_043 and WS_045 (bonus and loadout state), WS_046

item_instance_ledger, and WS_027 for companion state (the loadout spec's home per ratified

T1_Integrity_Paths §8.11.6 L581 — this spec never relocates it).

seasonal tally that never enters the completionist denominator (the denominator rule at

HOLLOW_EXPANSION_INTEGRATION §1.7). Recommended shape: a server-side or profile-side counter

outside the completionist save object entirely, so the offline test at section 9 T-RIFT-2 can

never be contaminated by it.

6.5 THE MINTS BLOCK — every new controlled vocabulary declared as a mint

New in revision 2. The integration record's §6.2 declares each new controlled vocabulary as a mint

with its authority; revision 1 declared only dungeon_grade and presented six other token sets as

settled schema. Gate 14 registry_extensions polices ownership; this block supplies the declaration it

polices against. Each entry names the token slate, the authority, and the owning system.

from JB-2's named sets plus X-2's beyond-the-bounded lane; the tokens themselves are spec-proposed.

Owner: rift-dungeon-economy. This is the vocabulary the seam spec delegates to (2.5).

Authority: DERIVED, tokens traced to the integration record's §3.5 locus list. Owner:

rift-dungeon-economy, with the per-token chapter floor owned jointly with the reveal program.

Authority: SPEC-PROPOSED (register entry 116 names the field, not the slate). Owner:

rift-dungeon-economy.

rift-dungeon-economy.

existing §17.13 sigma machinery. Owner: rift-dungeon-economy.

mint declaration. Token slate OPEN at F-4. Owner: rift-dungeon-economy; policed by gate 27 after

the Step-4 gate edit. INTERNAL-only surface status declared at 6.3.

rift-dungeon-economy.

LIVING_TRADITION (in active ceremonial or custodial use), INHABITED (an occupied settlement or

dwelling), RUINED_UNOCCUPIED, UNKNOWN. Authority: SPEC-PROPOSED, minted because no live column

encodes occupancy (4.1) and because protected is a 52-percent flag, not an occupancy proxy. Owner:

rift-dungeon-economy proposes it; the care program should be offered ownership at the apply, since

the column serves every care surface and not only rifts. UNKNOWN is treated as refusing (a mouth

may not be placed on an UNKNOWN row) so the default is safe without being blanket.

Reproduced verbatim from X-2, from the counter-class gate's own closed vocabulary, and from the

columns already live on T0_Boss_Encounter_Registry respectively.

7. EVENT AND MMO HOOKS — the never-counting layer

(Environmental Manipulation, Combat Core, Spawnling Management, Enhancement and Protection) and an

adaptive boss AI that weights successful attack patterns upward mid-fight and resets on respawn.

The spawnling mechanic is the Hollow's own physics at scale; the environmental team has real work

because a Hollow is locus-bound by definition; and the kill benefit is already the §8.4 cleansing

chain (regional recharge rises, negative spawn rates fall, resource abundance rises, settlements

recover, the global restoration meter advances at canonical thresholds, and the casual difficulty

floor lowers without touching high-end content).

T1_Vril §12.7 rules negative vril is not personified evil. The adaptive AI is authored as a

HARDENING SYSTEM — the substrate finds the paths that meet less resistance and hardens along them,

and it forgets on respawn because nothing was remembering. That framing keeps §8.8 intact and never

gives the substrate a mind.

changes one RULE of the encounter — the site's law, reusing the realm signature-law grammar the

road already teaches. Every scheduled event row declares changed_law_ref, and a window reusing the

immediately preceding window's law FAILS the gate. Novelty by rule costs design time rather than

art time, which is the right trade for a solo build.

never published in-game. The event layer ships no recommended composition; per-server strategy

variation is one of the two canonical counterweights to meta-collapse.

counts_toward_cleansing_meter FALSE by derivation from rift_class, and no event resolution may

write world_cleansing_meter. Tooth T-RIFT-7.

anywhere in T1, CVD or T0 — the integration record ran that control and reported the matches it

found (fauna seasonal_behavior, Sami drum iconography, monsoon terms, Khmer near-weekly ceremonies,

book-pipeline cadence), none of which denotes a content schedule. The cadence itself is therefore a

production decision, not a canon recovery, and this spec does not mint one.

8. EDGE CASES

piece_paid), and it holds under both F-7 options. Without them the absorb path becomes the optimal

farming route, which inverts the ruling's intent exactly.

case most likely to be implemented wrong in either direction, because "cleansing is the good

outcome" invites paying there while the container rule invites paying at CLEARED.

countdown, ally revival out of combat). on_exit_state decides what a let-go preserves; recommended

default PRESERVE_SUBGATES for AUTHORED_BOUNDED and EASTER_EGG, COLLAPSE for POPUP_TEMPLATE. The

runtime semantics of the countdown itself belong to the death-runtime spec, which this spec

consumes and never re-states.

with sub-gates preserved; a pop-up is ephemeral and does not persist; an event instance is

window-scoped.

a second drop; pop-ups roll under SIGMA_BOUNDED with the existing sigma machinery, which is where

§17.13 already governs ambient world events.

environmental-boss protocol is the playable layer; a rift dungeon placed there is authored under

that protocol rather than dropped. HL_0048's mode-variety clause binds across all 79 nodes, so a

chapter cannot coast on rift dungeons either.

prose critic, which is why it is a data assertion — and why T-RIFT-6's home had to be corrected to

a gate that actually reads the table (section 9).

reads the occupancy predicate through mouth_site_row_ref rather than the blanket protected flag,

because protected is true on 196 of 380 rows and HL_0005 lifts the ban for non-living ruined sites.

T-RIFT-5.

This is the failure mode that makes a hidden dungeon a soft-lock for the player who never finds it.

loadout sanctum. A pocket interior is a committed run and does NOT inherit that. DIRECTOR RULING,

cross-spec: the MOUTH row carries the sanctum affordance and the POCKET row declares it FALSE by

default, with per-dungeon opt-in for the longest interiors; the loadout-sets spec §8.2 carries the

rift-pocket-interior rule in the same words — a committed-run pocket inherits no sanctum, and the

no-lockout law is what bounds it (a pocket may never strand a build it did not let the player

prepare for). If this proves untenable on the shared row shape it is the strongest argument for

F-1 option (c).

confiscated, and bonds cross the threshold intact. Companion loyalty reacts to the absorb fork

through the existing band-driven belief-distance model, and a bespoke "companions react to hollow

abilities" mechanic is explicitly REFUSED (it double-counts the same signal). Companion STATE homes

on WS_027 per ratified T1_Integrity_Paths §8.11.6 L581 — this spec reads it and never relocates it.

is exactly two layers and two bars, so rifts alone cannot reach a ceiling; the arithmetic is at

section 9, T-RIFT-1.

loot-table reference or a win_reward containing an item id. There is no corpse to loot.

Progression flows through the meter and the quest, never through a defeat counter.

9. THE VERIFICATION TEETH

Eight teeth. Each names its gate home, its inputs, the exact assertion, the failure it catches, and

the positive control that proves the check can fail. Gates register in harness/gates_config.json in

the existing script-plus-args idiom (the config is a 31-entry object keyed by gate name, with script

and args per entry) and must exit non-zero on failure; a gate that cannot fail is not armed.

T-RIFT-1 — the bounded-pot arithmetic tooth, in two declared modes

Revision 1 specified a tooth that asserted exactly 20 rows with exactly 10 and 10 — which goes RED

for the entire authoring window (rows 1 through 19) while the same tooth also claimed it must pass as

a declared-empty scaffold. A gate red through all of production is the repo's documented

noisy-gate-gets-disabled defect. Revision 2 specifies two modes and the flag that selects them.

T1_Combat_System_Spec L63's ruled numbers, and the mode flag.

rift-dungeon-economy system entry, with tokens SCAFFOLD and COMPLETE. Flipping it is a deliberate

one-line commit made when the twentieth bounded row lands, and the flip itself is reviewable.

AUTHORED_BOUNDED rows is at most 20; BOUNDED_VRIL rows at most 10 and BOUNDED_HEALTH rows at most

10; no row of class AUTHORED_OPEN, EASTER_EGG, EVENT or POPUP_TEMPLATE carries a BOUNDED_

reward_class; capacity_piece_count is 0 or 1 on every row and is 1 exactly on AUTHORED_BOUNDED

rows and 0 elsewhere.

exactly 10 BOUNDED_HEALTH, every one carrying capacity_piece_count 1, and the rift contribution

equalling exactly two bubble layers and two health bars against the ruled fifths quantum. Every

SCAFFOLD assertion also holds.

fifty-piece economy coherent: with the player starting at one layer and one bar (X-2's ruled

correction), headroom is six vril layers plus four health bars, which is ten bounded units, which

at five pieces each is exactly fifty pieces. Rifts take twenty of those fifty; the other thirty are

carried by agility-course puzzle variants, achievements and world secrets.

modes); a dungeon granting a full unit instead of a piece (both modes); a drift in the ten-and-ten

split (SCAFFOLD catches over-run, COMPLETE catches under-run too).

per-class ceiling; set capacity_piece_count to 1 on a POPUP_TEMPLATE row and it must go red.

BOUNDED_VRIL to BOUNDED_HEALTH and the gate must go red on the split; delete one row and it must go

red on the count.

across all four resource types, so a reader can take the fifty pieces as covering swap-lane pieces

too. Under that reading the vril and health ceilings become unreachable, which makes them

decorative. This spec adopts the derived reading (the fifty ARE the vril-plus-health headroom, and

swap-lane pieces are an open-ended parallel pot outside it, consistent with L63's own "no ceiling"

description of the swap bar), states it as derived rather than ruled, and carries the alternative

to the Phase-5M balance audit at F-4.

T-RIFT-2 — the meter-completability tooth (the 100 percent under every integrity path)

rift_node_state shape; reentry_class.

such row is reachable to state CLEANSED under EVERY integrity band, which resolves to the concrete

structural test — every counting row is either fork-independent in its credit or carries

reentry_class permitting a re-cleanse, and no counting row's credit depends on a choice a player

can make irreversibly; no counting row is progression_critical; and the sum of per-axis

denominators equals the roll-up denominator.

from the input set, every axis must still reach its own 100 percent. Any row whose class is EVENT

or POPUP_TEMPLATE appearing in the denominator is a hard fail.

which makes 100 percent unreachable for the evil-path completionist; and a seasonal tally leaking

into the completionist denominator.

must go red; add one EVENT row to the counting set and it must go red.

T-RIFT-3 — the non-gating tooth

registries), which already owns the invariant and already fails loudly rather than skipping when

data appears without the fields it needs.

a non-meter path to arc completion exists; no EASTER_EGG row appears in any progression gate_ref;

no whisper-tier record appears in any gate_ref, unlock condition or completion denominator.

main-path authority. The MAY-GATE set stays exactly as ruled: ability unlocks, mastery lanes,

easter eggs, prestige and cosmetic tiers, optional region content, optional venue access.

T-RIFT-4 — the crossing-invariant tooth

token — this spec's rift INSTANCE rows — and nothing else. A crossing-class row (the seam spec's

staged_crossing or open_crossing, which carries no rift_class and homes on the travel and seam

surface) is out of scope by construction and can never trip this tooth; a crossing's legality

belongs to the realm-crossing mechanics and the seam spec's own teeth.

a realm id, to the fairy realm, to a threshold realm, or to any site_class dimensional_threshold

row; no rift_class row claims to open a rift (found-never-opened); no rift_class row exists in the

Prologue carrying an encounter_ref.

deflate the Ch 58 climax and the antagonist family's decades-of-research thread in one row.

go red. SCOPE CONTROL, proving the narrowing rather than assuming it: a crossing-class row carrying

no rift_class and pointing at a realm must go GREEN under this tooth.

T-RIFT-5 — the entrance-license and care tooth, now with a runnable input path

Revision 1's version could not fire: it asserted a protected column and care columns against a

T0_Vril_Site_Registry row, and that registry's 28 live columns carry neither. Revision 2 supplies the

join and narrows the predicate.

carries mouth_site_row_ref; the tooth resolves it against build/spine_rows/CH_NN/sites.csv, scoped

by the mouth row's chapter column, and reads protected and site_occupancy_class from the resolved

SITE row. A mouth row whose mouth_site_row_ref is empty or unresolvable is a hard FAIL, never a

skip — an unresolvable care join is exactly the silently-covering-nothing failure this tooth exists

to prevent.

within tomb, megalith, vortex_anchor. Not pyramid, not obelisk — that widening is F-8 and the tooth

does not enforce it before it is ruled. When F-8 rules, the licensed set is extended in ONE place

and the fork's ruined-and-unoccupied predicate becomes an additional conjunct on those two classes.

site_occupancy_class is LIVING_TRADITION, INHABITED or UNKNOWN. The refusal is absolute; the

predicate is narrow. The blanket protected flag is deliberately NOT the predicate, because it is

true on 196 of 380 rows and HL_0005 lifts the trap-dungeon ban for non-living ruined sites.

row, as information the care reviewer sees, never as an automatic refusal. A protected

RUINED_UNOCCUPIED site is legal and is reported, so the human check has a list.

the tooth reports UNARMED-BY-DECLARATION and the authoring wave does not start. It never reports

PASS on an absent predicate.

program — and, equally, a care refusal so wide it walls off half the authored world.

mouth_site_row_ref at a site row whose site_occupancy_class is LIVING_TRADITION and the gate must

go red; blank a mouth row's mouth_site_row_ref and it must go red on the unresolvable-join

assertion; set one mouth row's site_class to pyramid (pre-F-8) and it must go red on the license.

T-RIFT-6 — the reveal spawn-table tooth (Gate 3 made mechanical)

Revision 1 homed this in harness/check_reveal_discipline.py, which is registered as gate 13 with

--candidate docs/spine and a reveal_discipline_baseline.json. It reads prose and cannot see registry

rows or a spawn table, so the tooth as specified would have reported green on prose while covering

none of the data it exists for. Revision 2 re-homes it and cross-registers.

therefore read the rift rows and the chapter-scoped pop-up spawn table. CROSS-REGISTERED with

reveal_discipline: the reveal gate's scorecard names rift_economy as the owner of the data-layer

reveal assertion, so a reader of either scorecard finds the other. This is the option taken over

widening reveal_discipline's candidate set, because widening a prose gate to registries changes its

baseline semantics for every existing check.

substrate-read strings on rift rows below Ch 39.

chapter-scoped pop-up spawn table below 39, locus_type is DEADZONE; VELHEIM_EXTRACTION_SCAR and

CORRUPTION_SEAM appear in no row below Ch 39; and the substrate read returns ground rather than

signature below Ch 39, including the negation form (invoking and negating the who-frame still

plants the scaffolding).

no prose critic reads.

VELHEIM_EXTRACTION_SCAR and the gate must go red; add a below-39 entry to the pop-up spawn table

drawing CORRUPTION_SEAM and it must go red. Both controls are constructible in the registries

input set the gate already reads.

T-RIFT-7 — the event non-count, law-rotation, and predicate-agreement tooth

counts_toward_cleansing_meter FALSE and capacity_piece_count 0; every scheduled event window

declares changed_law_ref; and no window reuses the immediately preceding window's law.

encounter_ref, the referenced T0_Boss_Encounter_Registry row's counts_toward_cleansing_meter and

ledger_axis cells are EMPTY — or, if a later ruling populates them, equal cell-for-cell to the rift

row's values. Two populated cells that disagree are a hard FAIL. This is the assertion that makes

the single-owner rule at 2.5 structural rather than editorial.

live-ops layer degenerating into the same encounter with a new skin; and the twins-drift defect of

a dungeon whose BE_ row says it counts while its rift row says it does not.

write TRUE into the BE_ row's counts_toward_cleansing_meter for a rift-linked encounter whose rift

row reads FALSE and the gate must go red on the agreement assertion.

T-RIFT-8 — the interior answerability tooth

--registries), closing the monotone-unlock hole T1_Vril §1.2.5 names on the record.

capability_class drawn from the gate's own closed counter-class vocabulary, an effect, an EXTENT

and a restored_at; an attack inside that interior whose counter class is suppressed and not

restored is treated as unanswerable exactly as a late grant is; and no suppression is

encounter-scoped without a restoration.

construction because it only models monotone unlocks.

is the suppressed one and the gate must go red.

Teeth hygiene

never PASS, and a gate that errors is FAIL — the runner's existing discipline, which this spec

inherits rather than restates. T-RIFT-5's UNARMED-BY-DECLARATION state is a SKIPPED-class report

carrying its precondition by name, never a PASS.

and the 6.5 mints block is what that declaration says) and docs/fidelity_baseline.json

added_columns, with --emit-baseline in the same commit.

harness/check_rarity_firewall.py before it can police anything; the details and the sequencing are

at F-4 and section 12 Step 4. Landing the axis without the edit turns gate 27 RED.

derived before authoring rather than chosen and reconciled afterwards; T-RIFT-1 in SCAFFOLD mode

passes against an empty row set and fails on the first bad row, and flips to COMPLETE mode by the

declared roster_status token when the twentieth row lands.

10. THE OPEN FORKS

Each carries options, a recommendation, and the strongest objection to that recommendation. None is

self-closed. F-3, F-4, F-6 and F-8 touch numerical, naming or hard-line canon and are Josh's; F-1,

F-2, F-5 and F-7 are director-level under the locked-versus-execution rule.

F-1 — the run-economy row's registry home (DIRECTOR)

at 6.3.

the full mesh and generation pipeline the interior needs, and it costs one FK inside the registry

plus one cross-surface FK instead of a table.

a committed run; sharing a row shape with sanctum semantics invites a wrong default. Mitigated at

edge case 13 by making the sanctum affordance a mouth-row property with pocket-row opt-in — a rule

the loadout spec §8.2 now carries in the same words — and if that mitigation does not hold,

(c) becomes correct.

it contradicts HOLLOW_EXPANSION_INTEGRATION §5's ruling that the codex is the capped whisper

logbook. Whichever way this lands, one of the two records needs a supersession note.

F-2 — is the authored roster exactly twenty, or twenty bounded plus an open tail (DIRECTOR)

priority order (swap lane, then rarity, then meter credit).

bounded set and that ruling would be dead text under (a) — but with the tail's SIZE held as a

production budget rather than canon, and with T-RIFT-1 policing only the bounded twenty.

denominator that moves late in production is the classic completionist-trust defect. Mitigated by

the derived-denominator shape at 6.4, which lets content ship without migrating saves.

F-3 — does realm-traversal cleansing write the meter (JOSH)

NOT written into the meter, tracks through worldstate, and invites a flag. The REALM token exists

in the enum and is unwritten.

vril potency.

intensity curve is the arc's best instrument and a meter that counts realm nodes invites players

to flatten it. The column already hedges the reversal to a filter rather than a migration.

uncounted work in the most spectacular content in the game, which is exactly where the reward

should be legible.

F-4 — the dungeon-grade token slate, and the ONE genuinely-open tunable (JOSH, at the balance audit)

WHAT IS CLOSED, corrected in revision 2: the ten-and-ten split and the fifty-percent rift share of

the exploration channel are NOT open tunables. X-2 held 5/5-versus-6/4 and the rift share

proposal-tier, but the TWELFTH sitting superseded X-2 by ruling the count at twenty and the split at

ten Vril plus ten Health in Josh's own words. Revision 1 carried both back to Josh as held tunables,

which re-opened a ruled number. They are recorded here as CLOSED by the twelfth sitting.

T-RIFT-1's ambiguity paragraph (whether the fifty pieces cover swap-lane pieces too).

ladder describing how far the pocket has hardened, sized to the same ordinal count so the shared

ladder's arithmetic still holds.

below. Whichever slate is chosen, it must sit inside the firewall's LADDER_TOKENS or LADDER_TOKENS

must be extended in the same edit.

unchanged" was FALSE against the live code. harness/check_rarity_firewall.py hardcodes

AXES = ("item_grade", "pool_option", "creature_spawn") and its axis class emits FAIL for any axis

outside that tuple; REFERENCE_MAP is a declared list of (registry, column, axis, multi-valued)

tuples and any referencing column not declared there reports NOT ARMED. Minting a fourth axis and a

referencing dungeon_grade column without editing BOTH structures turns gate 27 RED the moment the

mint lands. The edit is two lines — extend AXES with "dungeon_grade", add the (rift registry,

"dungeon_grade", "dungeon_grade", False) REFERENCE_MAP row — plus a confirmation that the chosen

slate sits inside LADDER_TOKENS ("none", "common", "uncommon", "rare", "epic", "legendary",

"mythic", "signature"). It is sequenced explicitly at section 12 Step 4.

ladder a token belongs to. Mitigated because dungeon_grade is INTERNAL-only (6.3) and never appears

on a player surface, so the cost is a developer's, not a player's.

legendary and mythic, which Josh RULED at the tenth sitting are RARITY GRADES of equipment,

consumables, drops, crafting and runes, unlocked via the final mastery questline. Mirroring them

onto PLACES applies a questline-gated equipment ladder to geography. The eighteenth sitting sharpens

the point: the rarity floor now carries imprint-slot semantics (common = 0 slots, uncommon = 1),

which are meaningless on a dungeon. All 13 live T0_Rarity_Grade rows read string_status placeholder

with display_name_text empty, so nothing is lost by not reusing them.

dungeon_grade is INTERNAL ROUTING ONLY. If a later ruling ever surfaces it, its display_name_text

routes through the natural-voice pass with string_status, which T0_Rarity_Grade already schemas.

F-5 — the extent_class question on the realm ruleset (DIRECTOR, charter owner)

eleven-row realm roster cannot hold, and it is recorded CONTESTED against the charter's

confirmation block. T1_Vril §1.2.6 settles the adjacent half already: the rift and deadzone LOCUS

rows are per-feature rows living in T0_Environment_Grammar_Registry, never in the realm ruleset.

row's own columns (6.3) plus the environment-grammar locus rows, which is what §1.2.6 already

rules. No extent_class on the realm ruleset.

framing, so denying it a realm row splits its law across two homes.

F-6 — the INSTANCE noun on three surfaces (JOSH, via the natural-voice pass)

Rewritten in revision 2. Revision 1 recommended naming the DOOR rather than the OCCUPANT on every

surface, which contradicts ruled-and-applied canon: the NINETEENTH sitting ruled the Hollow occupant

epithets and they are LIVE — "the Quiet Step" (Ch 2, Rangku Wera) and "the Iron Step" (Ch 60, the

retainer), applied across roughly 45 occurrences in 27 files, with BE_0002.boss_name reading "Rangku

Wera, the Quiet Step" on the live row. Occupant naming is settled; the fork is narrower than

revision 1 presented it.

epithets exist and are named per the nineteenth sitting; "Hollow" stays authorial and registry-only

as a class noun and never becomes a proper noun on a player surface.

log line, the map pin, and the completion screen.

standing beside it — the epithet names the OCCUPANT where an occupant is named, the instance noun

names the PLACE, and the two coexist exactly as they already do on the live BE_0002 row.

inconsistently, and a completionist UI is exactly where a player expects one word. Mitigable by

scoping (b) to the completion screen alone while the log and pin take (a).

F-7 — the payment point of the bounded capacity piece (DIRECTOR)

New in revision 2. Revision 1 self-closed this as a derivation on a justification its own D-1

mechanism refutes; it is a genuine fork and is re-opened.

and the fork governs only the meter credit, the regional yield, the integrity and absorb-depth

charges, and the terminal state.

on the re-cleanse. piece_paid already guarantees single payment, so nothing is forfeited — the

cost is a revisit.

HOLLOW_EXPANSION_INTEGRATION §3.4 rules that rewards attach to the CONTAINER and never to the

entity, and CLEARED is precisely the state that means the container is complete. Second, §3.3

enumerates the full price of absorbing — the place stays drained, the region's vril does not rise,

the meter does not advance, the node stays re-cleansable — and the stat reward is NOT in that

enumeration; adding it would be adding a price the record declined to rule.

the dungeon layer. Under (a) the absorb player pays only in world state, story consequence and

meter timing, and a player who does not care about the meter feels no cost at all in the moment of

the choice. Option (b) restores a felt cost cheaply (a revisit), which is a legitimate design

answer — it is friction, not a lockout, and revision 1's claim that it would be a de-facto lockout

is struck.

F-8 — do pyramid and obelisk join the licensed entrance classes (JOSH)

New in revision 2, carrying the widening revision 1 applied silently and then wrote into a tooth.

and vortex-anchor class named by T1_Vril §1.1 and D-2's R-D leg.

site being RUINED_UNOCCUPIED by the 6.5 predicate.

temples as a category rather than about three enumerated site_class tokens, and because a ruined

unoccupied pyramid is the paradigm case of what HL_0005 lifts the ban for — but it is a widening of

a ruled grammar and therefore Josh's, not the director's.

conjunct on those two classes only, and T-RIFT-5 assertion 1 extends in exactly one place.

every loosening of an entrance rule is a loosening of the care surface it sits on.

11. CONTRADICTIONS AND GAPS NAMED, NOT SMOOTHED

codex is the capped whisper logbook. Carried at F-1.

adopted and labelled derived. Carried at T-RIFT-1 and F-4.

holding thread-token fragments and manufactured a disagreement with the zelda lens's 30 of 42. The

measured distribution is 6 real tokens, 6 NULL, 30 corrupt across 42 rows — the lens was exact,

revision 1 was wrong twice, and the manufactured contradiction is struck. The repair still blocks

(Step 1); it is now grounded on the measured 30.

columns; the live schema is 281 rows and 51 columns, verified this pass. Recorded rather than

silently corrected.

chapter_window token and the R17 care register, populate the three-rung perception ladder and the

five reveal gates, retire purify and harvest, add the class_row flag) has not landed, and this

spec depends on the class row existing.

claim that the encounter vocabulary is minted is currently false at the value layer.

and no live column carries one; protected is a 52-percent flag and not a proxy. site_occupancy_class

is minted at 6.5 and blocks the authoring wave until it lands.

currently scoped to realm rulesets only, be promoted to cover every bounded interior. This spec

supplies the data hook (escalation_ladder_ref) and not the doctrine paragraph.

capacity budget are three artifacts gate 30 cannot see. The rider rows and the declared-doc-set

entries land with this spec's first apply wave, not after it.

recommended first authored rift dungeon at Ch 3. That recommendation is CONTESTED on the record

(C-2) and is a production call, not canon.

12. SEQUENCING

required (the measured 30 corrupt plus 6 NULL rows, written into the sixteenth sitting's ruled band

vocabulary) and mint site_occupancy_class on the site surface. Re-emit the fidelity baseline in the

same commit as each. Nothing lands on the vril-site row shape until the first is clean; no mouth row

is authored and T-RIFT-5 stays unarmed until the second lands.

docs/registry_extensions.json (with the 6.5 mints block as the declaration) and

docs/fidelity_baseline.json, including the roster_status mode token T-RIFT-1 reads.

the encounter rows reference the class row.

T0_Environment_Grammar_Registry. THE GATE-27 EDIT LANDS IN THIS SAME STEP AND IN THE SAME COMMIT,

as three explicit sub-items: extend harness/check_rarity_firewall.py AXES with "dungeon_grade"; add

the (rift registry, "dungeon_grade", "dungeon_grade", False) row to REFERENCE_MAP; confirm the

F-4 slate sits inside LADDER_TOKENS, or extend LADDER_TOKENS in the same edit. Then re-run gate 27

and re-emit the firewall baseline. Landing the mint without this edit turns gate 27 RED.

gates_config.json. T-RIFT-6 registers under rift_economy and cross-registers with

reveal_discipline.

COMPLETE in its own reviewable commit when the twentieth lands.

Its consumers are the rift-dungeon authoring wave, the factory contract rider (entry 48), the five

new or extended gates, and — by the cross-spec delegation at 2.5 — the seam-typing spec's

crossing_weight column and the loadout-sets spec §8.2.

13. REVISION RECORD — the critic round, finding by finding

Recorded so the next reader can audit the revision rather than trust it. Sixteen findings, all

applied. Where a finding offered options, the option taken is marked.

42 equals 6 real plus 6 NULL plus 30 corrupt, with the token-level breakdown; the manufactured

disagreement is struck from section 1 and section 11; Step 1 stays blocking, grounded on the

measured 30. Re-measured this pass, not carried from the critic.

is minted at 6.3 with the join stated (disjoint id spaces, chapter-scoped resolution); 6.2 names the

cost that made the FK necessary; T-RIFT-5's inputs, assertions and positive controls are restated

against the joined shape, with unresolvable joins a hard FAIL.

authoritative surface and leaves the BE_ columns unwritten on rift-linked rows; the cross-registry

agreement assertion and its positive control are added to T-RIFT-7.

dungeon_grade only after a declared two-line edit, quoting the live AXES tuple and REFERENCE_MAP

shape; section 12 Step 4 carries the edit as three explicit same-commit sub-items.

recommendation (a) on the §3.4 container rule plus the §3.3 price enumeration; the de-facto-lockout

claim STRUCK and restated as friction; the strongest objection named.

roster_status flag, SCAFFOLD and COMPLETE assertion sets stated separately, and a positive control

per mode.

site_occupancy_class; the 196-of-380 figure is stated at 4.1 and at edge case 10; the refusal stays

absolute and its predicate narrows; protected is reported for review rather than auto-refusing.

through 20 with what bears and what does not; F-6 is rewritten around the nineteenth sitting's

ruled and applied occupant epithets.

check_rift_economy.py and cross-register with reveal_discipline (chosen over widening a prose

gate's candidate set, with the reason stated); positive controls restated against the registries

input set.

legendary/mythic and imprint-slot scope collision as the reason (a) is weaker, a place-native slate

as option (b) — now the recommendation — and an explicit INTERNAL-only declaration at 6.3 and 6.5,

with the natural-voice and string_status route named for the surfacing case.

integration record's §6.2 form, with token slate, authority and owner per entry, plus the explicit

NOT-MINTS line.

assertion 1 restricted to tomb, megalith, vortex_anchor; the pyramid and obelisk widening carried

as F-8 with the ruined-and-unoccupied acceptance criterion; a pre-F-8 pyramid mouth is a positive

control.

share are recorded CLOSED by the twelfth sitting; F-4 now carries only the dungeon_grade slate and

the fifty-piece reading.

45-column figure as superseded by the live 51-column schema, verified this pass.

states to seven and gives the ground for each added state; 6.4 repeats the naming on rift_node_state

and names the two idempotency flags as this spec's addition.

at 2.5 (the seam spec's crossing_weight delegates to this spec's five-class taxonomy and the

universal meter-credit invariant — one owner, never two mints); the rift-pocket-interior rule the

loadout spec §8.2 carries, mirrored at edge case 13 (committed-run pockets inherit no sanctum, under

the no-lockout law); and the companion-state home on WS_027 per ratified T1_Integrity_Paths §8.11.6

L581, read at 6.4 and edge case 14 and never relocated by this spec. The death-spec rulings for this

wave (the §12 execute-collision OPTIONS block and the D-4 impossibility-clock reversal) belong to

the death-runtime spec; this spec consumes the ruled death model at edge case 3 and states nothing

about it.

scoped to the CLASS VOCABULARY plus the universal meter-credit invariant only, with crossing

dungeons declared NEVER rift rows: their class is read off the non-rift authored-dungeon class

table T0_Dungeon_Class_Reference and their instances home on the travel and seam surface, so the

§3.1 no-rift-dungeon-is-a-crossing invariant is no longer contradicted by the seam spec's

dungeon_class_ref; T-RIFT-4 is scoped explicitly to rift_class rows and gains a scope control

proving a crossing-class row cannot trip it. NEW-2 (MINOR) — 2.5's stale staged_dungeon and

open_dungeon tokens retokened to staged_crossing and open_crossing, matching the seam spec's

renamed vocabulary.

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