music/RIFT_DUNGEON_SCAFFOLDING_SPEC.md
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).
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).
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
(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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
--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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.