factory_contract.json

pipelines/factory_contract.json

{
 "schema_version": "1.0",
 "contract_version": "v1.0.5",
 "minted": "2026-07-27",
 "revised": "2026-07-27 — lane-B critic pass: 16 unreachable ruling_src anchors corrected against the doc's own 48-character slug rule, ruler R4 minted to resolve the pointer field nothing checked, S2's rank scan made case-insensitive and decimal-aware (freeze constraints 1 and 4 open with a capital \"Rank\", so rank 11 was asserted by nothing) and widened past the first paragraph, and the DOC_MAP / ROADMAP secondary surfaces declared.  2026-07-29 — story-depth Wave 3 (the arc-axis wiring): FR-058 promoted to BUILT against the landed arc schema and the enrich.py ARC PACK; FR-068 to FR-070 minted for /spine-chapter Step 3a-ARC, the normalize-doc arc lens and the one-time /arc-pass; the two natural-voice critic lenses (FR-024, FR-025, and the teeth of FR-028 and FR-029) WIRED onto the normalize-doc rubric, resolving six of the seven findings gate 30 had been reporting every run; consumption_kinds gains skill:arc-pass.  2026-07-29 - the ten-lane pipeline gap audit fold: FR-071 to FR-081 minted for the eleven content classes the chapter axis was measurably blind to (audio rows, interiors, water, weather and time-of-day, the item and material bill, vendors and the diegetic exchange medium, journal entries, quest rows, persona schedules and crowd buckets, UI icons, cinematics), all SEED and all citing their register entry; data_home_kinds and consumption_kinds gain the NONE_YET(GAP-NNN) register-pointer form, which gate 30 R2 and R3 now resolve; FR-039 and FR-033 gain the named debts the audit found in them.  2026-08-03 - the thirty-first sitting pipeline-hardwiring mandate, applied through the four-lane art compatibility pass: FR-083 to FR-087 minted for the concept-art PLATE lane, which was measurably outside the chapter axis (a recursive walk of this file found ZERO art-board references against a 50-hit registry positive control, so 76 generated plates carried no per-chapter obligation and were measured by nothing). data_home_kinds gains plates:<path>#<column>; consumption_kinds gains art:<label> and art_boards:<label>. One DECLARED NOT-ARMED consequence, recorded in the plates: kind itself: gate 30 R2 does not yet resolve that prefix.",
 "provenance": "window-plan rank 2.5; charter docs/proposals/STORY_DEPTH_PROGRAM.md sections 4.3/4.4/4.6 and section 7 item 11",
 "tier": "T99 operational. Subordinate to the CVD and to every tier doc. A rider row is never the source of a rule, always a pointer to one. This file sets no canon.",
 "md_view": "docs/FACTORY_CONTRACT.md",
 "md_render_command": "python harness/emit_chapter_checklist.py --render-contract",
 "gate": "factory_contract (gate 30) — harness/check_factory_contract.py",
 "declared_doc_set": [
  "docs/COMBAT_PROGRAM_ADDENDUM.md",
  "docs/NATURAL_VOICE_DOCTRINE.md",
  "docs/DESIGN_GAP_REGISTER.md",
  "docs/ROADMAP_POST_5090_TO_SHIP.md"
 ],
 "owner_token": "OWNER:",
 "owner_anchor_rule": "An OWNER: line's identity is doc#anchor, where anchor is the slug of the nearest preceding unit head: a markdown heading (consecutive same-level heading lines are joined as one wrapped heading) or an ordered-list item whose title is bold. Line numbers are never the identity — they rot on every edit.",
 "ruling_src_rule": "A rider's ruling_src is doc#anchor and gate 30 ruler R4 RESOLVES it: the doc must exist and the anchor must be reachable, either as a unit head under owner_anchor_rule or as the slug of the real line the rider cites. slug() truncates at 48 characters, so an anchor longer than 48 cannot be produced by any input -- nine such anchors were live at mint, in the one field nothing checked. R4 is WARN-scoped at v1 (promotion to status-following severity is a v1.1 item) and the pointers resolving to a cited line rather than a unit head are printed under DECLARED NOT-ARMED on every run: 16 of 67 at v1.0.1, all in ROADMAP_POST_5090_TO_SHIP's machinery bullet line and the DECISIONS fork lines.",
 "promise_phrases": [
  {
   "id": "P1",
   "kind": "literal",
   "pattern": "the factory inherits"
  },
  {
   "id": "P2",
   "kind": "literal",
   "pattern": "joins the P5 factory"
  },
  {
   "id": "P3",
   "kind": "literal",
   "pattern": "the factory per chapter"
  },
  {
   "id": "P4",
   "kind": "regex",
   "pattern": "the P5 factory[^.]{0,60}gains"
  },
  {
   "id": "P5",
   "kind": "literal",
   "pattern": "the factory's authored lanes"
  }
 ],
 "promise_phrase_note": "P1-P4 are the charter's four. P5 was added at mint from a measured occurrence the four missed (NATURAL_VOICE_DOCTRINE: NPC dialogue authoring 'enters the factory's authored lanes per chapter'). The phrase net is the SECONDARY ruler and is reviewed at every wave boundary; adding a phrasing is a one-line change. 'per-chapter factory' is deliberately EXCLUDED: in ROADMAP_POST_5090_TO_SHIP.md it is the definitional name of the P5 stage, not a promise. MEASURED 2026-07-27 (P1 1, P2 1, P3 0, P4 1, P5 1): P3 ('the factory per chapter') matches ZERO occurrences in the declared doc set. That is correct by design -- an unmatched phrase is a trap set for a future phrasing -- but it means those phrases are UNEXERCISED and a malformed one would not be noticed, because the vacuity guard catches only TOTAL phrase-net rot. The gate now prints every zero-hit phrase id under DECLARED NOT-ARMED so the zero is read as a declaration rather than as evidence.",
 "lanes": [
  "canon-author",
  "schema-data",
  "engine-code",
  "qa-teeth",
  "art-asset",
  "spec-doc"
 ],
 "lane_order": [
  "canon-author",
  "schema-data",
  "engine-code",
  "art-asset",
  "qa-teeth",
  "spec-doc"
 ],
 "statuses": {
  "BUILT": "proven and binding — every ruler runs at FAIL severity against this rider",
  "PARTIAL": "the home exists and some nodes carry it — home failures are FAIL, consumption failures are WARN",
  "SEED": "advisory — surfaces in every checklist, never fails the gate",
  "DEFERRED": "parked behind a named pointer — the pointer must resolve"
 },
 "scope_classes": {
  "all": {
   "derivation": "every node in T0_Chapter_Index (79)"
  },
  "class:slice": {
   "derivation": "CH_PROLOGUE + CH_01..CH_13 — the vertical slice Josh ruled 2026-07-27 (fifth sitting)"
  },
  "class:hard_line": {
   "derivation": "T0_Chapter_Index.canonical_hard_line_flag == TRUE, or hard_line_status not in {NONE, ''}"
  },
  "class:boss": {
   "derivation": "T0_Chapter_Index.primary_boss_id is non-empty",
   "cardinality_note": "MEASURED 2026-07-27: all 79 rows carry a non-empty primary_boss_id (79 distinct values; CH_PROLOGUE = BE_PROLOGUE), so class:boss currently selects the same set as 'all' and no chapter is left to GAIN a boss. The deriver is live and correct, and the boss-scoped riders therefore reach every node including the Prologue; the cardinality is recorded so a future reader does not read this class as a filter that is currently narrowing anything."
  },
  "class:high_care": {
   "derivation": "harness/enrich.py HIGH_CARE (parsed from source, never re-typed)"
  },
  "class:elevated_care": {
   "derivation": "harness/enrich.py ELEVATED_CARE (parsed from source, never re-typed)"
  },
  "class:realm": {
   "derivation": "T0_Region_Index rows with node_kind == mythic_realm, expanded through their chapters column"
  },
  "class:rr_node": {
   "derivation": "the Range-Review nodes: CH_11, CH_21, CH_31, CH_41, CH_51, CH_61, CH_71 and CH_77 (RR-FINAL)"
  },
  "once": {
   "derivation": "a one-time obligation — surfaces in no per-chapter checklist"
  }
 },
 "data_home_kinds": {
  "registry:<Base>#<column>": "the registry resolves version-agnostically under registries/ and its tab header carries the column",
  "registry:<Base>": "the registry directory resolves",
  "path:<glob>": "the glob matches at least one file",
  "doctrine_only:<path>": "the rider's only home is prose, and that prose file exists",
  "NONE_YET(rank <N>)": "no home yet, with the live window-plan rank that mints one",
  "NONE_YET(<GAP-NNN>)": "no home yet, with the DESIGN_GAP_REGISTER entry that owns the gap -- the pointer form for an obligation no rank owns, so an unbuilt obligation is a cited debt rather than a rider that reads legitimately-pending forever",
  "plates:<path>#<column>": "the concept-art PLATE TABLE resolves and its header carries the column. docs/art_boards/PLATES.csv is a live status-bearing table that is NOT a registries/ registry, so registry:<Base>#<column> cannot address it and path:<glob> would resolve the file while leaving the column unchecked. DECLARED NOT-ARMED: gate 30 R2 hardcodes its data_home prefixes and does not yet know this one, so it reports the five art riders as an unrecognised form at WARN (SEED severity) until a prefix branch plus its must-fire fixture lands in harness/check_factory_contract.py -- recorded rather than dodged by downgrading the riders to a form that resolves without checking anything"
 },
 "consumption_kinds": {
  "enrich:<CONST>": "harness/enrich.py",
  "skill:spine-chapter#<label>": ".claude/skills/spine-chapter/SKILL.md",
  "skill:normalize-doc#<label>": ".claude/skills/normalize-doc/SKILL.md",
  "skill:arc-pass#<label>": ".claude/skills/arc-pass/SKILL.md",
  "vol2:<label>": "docs/PRE_5090_BUILD_PLAN_VOL2.md",
  "p5:<label>": "docs/ROADMAP_POST_5090_TO_SHIP.md",
  "plan:rank<N>": "docs/PRE_5090_BUILD_PLAN.md — the rank must resolve in the window plan's ranked list",
  "gate:<name>": "harness/gates_config.json — the gate must be registered",
  "NONE_YET(rank <N>)": "no consumption point yet, with the live rank that wires one; never satisfies a BUILT rider",
  "NONE_YET(<GAP-NNN>)": "no consumption point yet, with the DESIGN_GAP_REGISTER entry that owns it; never satisfies a BUILT rider",
  "art:<label>": "docs/CONCEPT_ART_PRODUCTION_PROGRAM.md -- the concept-art production program (the HOW half of the art program); the label must be a real section head in it",
  "art_boards:<label>": "docs/art_boards/README.md -- the board-program interface contract; the label must be a real section head in it"
 },
 "critic_surfaces": [
  ".claude/skills/normalize-doc/SKILL.md",
  ".claude/skills/spine-chapter/SKILL.md"
 ],
 "riders": [
  {
   "rider_id": "FR-001",
   "obligation": "Build this chapter's ability unlock set through the foundry stage — canon row to GAS binding via the cast-primitive system, then the counter-class and element hooks, then a per-ability Tier-1 test and capture station.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#1-the-ability-foundry-the-185-buildout",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#1-the-ability-foundry-the-185-buildout"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Ability_Tree_Registry#unlock_chapter_ref",
   "tooth": "NONE(no per-chapter foundry-completeness assertion exists; rank 13's ability data pass mints the unlock/cost/cooldown cells a tooth can read)",
   "consumption_point": "vol2:W9",
   "citation_token": "W9",
   "evidence": "4 of 185 abilities are live GAS bindings (the Ch-2 starter kit) — addendum section 1"
  },
  {
   "rider_id": "FR-002",
   "obligation": "Resolve this chapter's element combos and familiar-bonded EAM pairings through the combo runtime — dual-pool cast validation, the element-matrix resolution with both parents' attacker_axis inherited, and bond-state gating.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#2-the-combo-eam-runtime-fusion",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#2-the-combo-eam-runtime-fusion"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Ability_Tree_Registry#eam_pair_eligibility",
   "tooth": "NONE(the 21 Layer-B combos are authored data with no runtime; the tooth arms with the W9-tail build)",
   "consumption_point": "vol2:W9",
   "citation_token": "W9",
   "evidence": "addendum section 2 — authored data, no runtime"
  },
  {
   "rider_id": "FR-003",
   "obligation": "Keep every operator-rune creation slot this chapter grants inside the mastered-proficiency palette — the palette gate is what holds custom abilities inside the vril doctrine by construction.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#2b-the-rune-forge-the-player-facing-ability-crea",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#2b-the-rune-forge-the-player-facing-ability-crea"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Rune_Registry#operator_family",
   "tooth": "gate:rarity_firewall",
   "consumption_point": "vol2:W9",
   "citation_token": "W9",
   "evidence": "T0_Rune_Registry carries 19 rows; the operator/imprint lane split is the addendum's section 2b vs section 8"
  },
  {
   "rider_id": "FR-004",
   "obligation": "Give every status this chapter applies a row in the status grid with its application rule, cure or counter hook, and per-creature immunity — shapes now, magnitudes at Phase-5M.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#3-the-status-effect-framework",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#3-the-status-effect-framework"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Status_Table#status_family",
   "tooth": "NONE(rank 25 mints the canon status grid, the cure/antidote chains and the status_immunity column a per-chapter tooth would read)",
   "consumption_point": "plan:rank25",
   "citation_token": "",
   "evidence": "T0_Status_Table holds 10 rows against a per-element table authored twice over"
  },
  {
   "rider_id": "FR-005",
   "obligation": "Wire this chapter's healing, revival and poison beats through the healing verb family and the cure loop — revival costs scale per the no-cheap-death rule, and NPC/companion healing hooks read the same lane.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#4-the-healing-poison-lanes",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#4-the-healing-poison-lanes"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Status_Table#cure_material_refs",
   "tooth": "NONE(the healing verb family has no runtime; the tooth arms with the W9 tail and the herbalism cure loops)",
   "consumption_point": "vol2:W-LW3",
   "citation_token": "W-LW3",
   "evidence": "addendum section 4 — authored with no runtime lane"
  },
  {
   "rider_id": "FR-006",
   "obligation": "Carry a presentation tier on every ability family and weapon class this chapter surfaces, so the mastery ladder renders as tiered animation and VFX variants rather than one asset — presentation only, never a hidden power scale.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#5-the-proficiency-presentation-ladder-new-system",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#5-the-proficiency-presentation-ladder-new-system"
   ],
   "promise_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#P1#1"
   ],
   "data_home": "registry:T0_Ability_Tree_Registry#presentation_tier_ref",
   "tooth": "gate:registry_extensions",
   "consumption_point": "plan:rank13",
   "citation_token": "",
   "evidence": "SUPERSEDED 2026-08-02 (the 2026-07-27 reading 'live T0_Ability_Tree_Registry header carries no presentation_tier_ref column, 35 columns' is now FALSE and was seeding a wrong premise). Re-measured on the live tree: T0_Ability_Tree_Registry is 36 columns with presentation_tier_ref at index 35 (landed 28n on both rails, T0_Ability_Tree_Registry + T0_Weapon_Registry, system presentation-ladder). The data_home now RESOLVES; what is still owed is population — 0 of 185 ability rows carry a value, against the DR-2 §7 item 7 ruled sizing of 248 live variant keys (31 elements x 8 live tier values)."
  },
  {
   "rider_id": "FR-007",
   "obligation": "Give this chapter's boss arenas a mutation vocabulary drawn from the arena's own affordance list — hazard actors both sides can use, per-phase arena state, and presence rules that let a boss create the medium its element needs.",
   "lane": "engine-code",
   "scope": "class:boss",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#6-the-arena-mutation-framework-boss-environmenta",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#6-the-arena-mutation-framework-boss-environmenta"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Environment_Grammar_Registry#attack_verbs",
   "tooth": "NONE(the environment-grammar registry holds 2 rows; rank 7 authors the EG_ rows for every slice combat surface)",
   "consumption_point": "plan:rank7",
   "citation_token": "",
   "evidence": "T0_Environment_Grammar_Registry: 2 rows on 2026-07-27"
  },
  {
   "rider_id": "FR-008",
   "obligation": "Give every ability this chapter unlocks its tier-bonus rows in both lanes — the incremental sharpening and the quest-gate transformative bonus that changes what the ability is.",
   "lane": "schema-data",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#7-the-ability-progression-bonus-system-ruled-jos",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#7-the-ability-progression-bonus-system-ruled-jos"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Bonus_Pool_Registry#pool_id",
   "tooth": "gate:build_space",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "T0_Bonus_Pool_Registry: 7 rows; the per-ability rows are rank 14's data pass"
  },
  {
   "rider_id": "FR-009",
   "obligation": "Roll this chapter's gear imprints inside the rarity ladder — rarity-and-proficiency-gated crafting, sigma-bounded rolls, and the boss-drop tie-in riding the part-break and carve loop.",
   "lane": "schema-data",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#8-the-gear-imprint-rune-lane-ruled-josh-2026-07",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#8-the-gear-imprint-rune-lane-ruled-josh-2026-07"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Imprint_Affix#rarity_token_min",
   "tooth": "gate:rarity_firewall",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "T0_Imprint_Affix: 5 rows; RN_0018 is the registry anchor named in the ruling"
  },
  {
   "rider_id": "FR-010",
   "obligation": "Let this chapter's vril sites serve as loadout sanctums — save, recharge and quick-change between the purchased second and third gear-plus-ability sets, with companion loadouts mirrored and the gear returned when a companion departs.",
   "lane": "schema-data",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#9-build-agency-selectable-bonuses-loadout-sets-s",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#9-build-agency-selectable-bonuses-loadout-sets-s"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Loadout_Set_Definition#switch_venue_class",
   "tooth": "gate:build_space",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "T0_Loadout_Set_Definition: 3 rows carrying departs_with_companion"
  },
  {
   "rider_id": "FR-011",
   "obligation": "Keep this chapter's additions inside the AAAAA balance doctrine — mathematically strong builds are allowed, meta-collapse is not, and every pool option this chapter adds must be reachable by a viable build in the sweeps.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#10-universal-pools-the-aaaaa-balance-doctrine-ru",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#10-universal-pools-the-aaaaa-balance-doctrine-ru"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Bonus_Pool_Registry#pick_class",
   "tooth": "gate:build_space",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "a pool option never picked in a sweep is a balance defect — the ruled teeth philosophy"
  },
  {
   "rider_id": "FR-012",
   "obligation": "Tag this chapter's new build components against the role taxonomy so the build-space sweeps can measure viability breadth per role axis.",
   "lane": "schema-data",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#11-the-endgame-build-role-taxonomy-companion-fam",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#11-the-endgame-build-role-taxonomy-companion-fam"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Role_Axis_Registry#role_axis_token",
   "tooth": "gate:ally_build",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "T0_Role_Axis_Registry: 7 rows"
  },
  {
   "rider_id": "FR-013",
   "obligation": "Give every companion or familiar this chapter introduces a player-shaped stat spread on the shared point budget, so intelligence competes with the combat stats exactly as ruled.",
   "lane": "schema-data",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#12-companion-familiar-stat-builds-the-ai-intelli",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#12-companion-familiar-stat-builds-the-ai-intelli"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Familiar_Bond_Ability#grants_class",
   "tooth": "gate:ally_build",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "gate 29 hosts T-B1, the INT-vs-combat stat-budget tooth"
  },
  {
   "rider_id": "FR-014",
   "obligation": "Give this chapter's bosses per-part hitzones with damage-type multipliers and break thresholds, so the monster body itself is the tactical surface.",
   "lane": "engine-code",
   "scope": "class:boss",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#10-per-part-hitzones-part-breaks",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#10-per-part-hitzones-part-breaks"
   ],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 16)",
   "tooth": "NONE(rank 16 mints the hitzone-part rail the tooth would read)",
   "consumption_point": "plan:rank16",
   "citation_token": "",
   "evidence": "the damage formula is whole-target today (T1_Combat, Damage)"
  },
  {
   "rider_id": "FR-015",
   "obligation": "Give every boss attack in this chapter a recovery window beside its telegraph and counter, so the read-counter-punish loop has data to stand on.",
   "lane": "schema-data",
   "scope": "class:boss",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#11-boss-punish-recovery-windows-as-data",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#11-boss-punish-recovery-windows-as-data"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Boss_Attack_Rail#recovery_seconds",
   "tooth": "gate:counter_class_coverage",
   "consumption_point": "plan:rank16",
   "citation_token": "",
   "evidence": "T0_Boss_Attack_Rail carries the column and 0 rows — the column landed, the population is rank 16"
  },
  {
   "rider_id": "FR-016",
   "obligation": "Give every boss arena in this chapter an unlockable shortcut back to the nearest recharge well, so deep progress converts into permanent convenience.",
   "lane": "engine-code",
   "scope": "class:boss",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#12-shortcut-loopback-clause-in-the-arena-grammar",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#12-shortcut-loopback-clause-in-the-arena-grammar"
   ],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 7)",
   "tooth": "NONE(the shortcut clause is a W-SPACE grammar affordance with no data column today)",
   "consumption_point": "plan:rank7",
   "citation_token": "",
   "evidence": "director-marked REAL in the gap register"
  },
  {
   "rider_id": "FR-017",
   "obligation": "Split this chapter's combatants by respawn class — named and persona'd NPCs stay permanently dead, ambient and fauna and construct combatants renew on rest at a well.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#13-combatant-respawn-model-split-by-class",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#13-combatant-respawn-model-split-by-class"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Creature_Roster#spawn_rate",
   "tooth": "NONE(the split is a runtime model; the community-ripple half is persona-gated on rank 11)",
   "consumption_point": "vol2:W9",
   "citation_token": "W9",
   "evidence": "the split is our canon expressed as a mechanic — director note"
  },
  {
   "rider_id": "FR-018",
   "obligation": "Draw this chapter's creature movesets from the shared windup-active-recovery attack library with per-creature tag-driven variety, never one reused pattern.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#14-telegraphed-attack-moveset-library-per-creatu",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#14-telegraphed-attack-moveset-library-per-creatu"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Boss_Attack_Rail#attack_kind",
   "tooth": "NONE(variety is measured per creature; the rail holds 0 rows until rank 16)",
   "consumption_point": "vol2:W9",
   "citation_token": "W9",
   "evidence": "the enemy-AI-unbuilt premise is stale (W5 landed patrol/pursue/flee); the residue is variety"
  },
  {
   "rider_id": "FR-019",
   "obligation": "Wire at least one predator-prey clash into this chapter's crossroads from the fauna substrate the region already carries.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#15-ecology-clashes-turf-wars-at-arena-crossroads",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#15-ecology-clashes-turf-wars-at-arena-crossroads"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Creature_Roster#trophic_role",
   "tooth": "NONE(no runtime reads predator_prey_relationships today)",
   "consumption_point": "vol2:W-LW3",
   "citation_token": "W-LW3",
   "evidence": "the substrate carries predator_prey_relationships and territory_range already"
  },
  {
   "rider_id": "FR-020",
   "obligation": "Give each arena in this chapter one or two diegetic hazards the player can turn on a boss.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#16-environmental-combat-affordances-per-arena",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#16-environmental-combat-affordances-per-arena"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Environment_Grammar_Registry#tactical_affordance_class",
   "tooth": "NONE(rank 7 authors the EG_ rows; the affordance count per arena is checkable once they exist)",
   "consumption_point": "plan:rank7",
   "citation_token": "",
   "evidence": "pairs with the amplification doctrine — director note"
  },
  {
   "rider_id": "FR-021",
   "obligation": "Give this chapter an earned way to read an enemy weakness through shape and behaviour tells and the clue lane, never a stat sheet.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#17-diegetic-weakness-read-channel",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#17-diegetic-weakness-read-channel"
   ],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 17)",
   "tooth": "NONE(rank 17 completes the element matrix and the per-enemy weaknesses the read channel exposes)",
   "consumption_point": "plan:rank17",
   "citation_token": "",
   "evidence": "the matrix exists as data with no player-facing half"
  },
  {
   "rider_id": "FR-022",
   "obligation": "Let a bonded familiar be summoned into this chapter's hard fights as the diegetic easing lever — aggro split at a resource cost, never a settings menu.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#18-familiar-summon-as-the-diegetic-easing-lever",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#18-familiar-summon-as-the-diegetic-easing-lever"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Familiar_Bond_Ability#command_permission",
   "tooth": "NONE(the familiar combat wave is post-slice)",
   "consumption_point": "vol2:W9",
   "citation_token": "W9",
   "evidence": "respects the 22-slot canon — director note"
  },
  {
   "rider_id": "FR-023",
   "obligation": "Give this chapter's populated areas the immediate consequence loop — witness, local alarm, response, decay — feeding the antagonist-network escalation.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#19-local-alarm-consequence-loop-wanted-analog",
   "owner_refs": [
    "docs/DESIGN_GAP_REGISTER.md#19-local-alarm-consequence-loop-wanted-analog"
   ],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 30)",
   "tooth": "NONE(no witness/alarm worldstate variable exists today)",
   "consumption_point": "vol2:W-LW3",
   "citation_token": "W-LW3",
   "evidence": "director-ruled REAL per the R-17 sandbox ruling"
  },
  {
   "rider_id": "FR-024",
   "obligation": "Write every player-facing line in this chapter as something a person said or the protagonist thought — the quest log is a memory of conversations, never a system's summary.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/NATURAL_VOICE_DOCTRINE.md#1-the-voice-rule-every-player-facing-line-sounds",
   "owner_refs": [],
   "promise_refs": [
    "docs/NATURAL_VOICE_DOCTRINE.md#P2#1",
    "docs/NATURAL_VOICE_DOCTRINE.md#P4#1"
   ],
   "data_home": "path:docs/spine/player_strings/*.csv",
   "tooth": "critic:does a person say this",
   "consumption_point": "skill:normalize-doc#rubric",
   "citation_token": "does a person say this",
   "evidence": "WIRED 2026-07-29 (story-depth Wave 3): the lens is rubric item 15 lens 1 on .claude/skills/normalize-doc/SKILL.md, verbatim. It had lived only as doctrine prose -- positive-controlled at 0 hits in either skill on 2026-07-27."
  },
  {
   "rider_id": "FR-025",
   "obligation": "Ground this chapter's names and speech in the culture's own conventions — how a person of this place speaks presents their people, sourced from the region page's substrate and the persona and voice registries.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/NATURAL_VOICE_DOCTRINE.md#2-the-cultural-register-names-and-speech-carry-t",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Voice_Registry#voice_substrate",
   "tooth": "critic:does this carry the culture",
   "consumption_point": "skill:normalize-doc#rubric",
   "citation_token": "does this carry the culture",
   "evidence": "WIRED 2026-07-29 (story-depth Wave 3): the lens is rubric item 15 lens 2 on .claude/skills/normalize-doc/SKILL.md, verbatim. T0_Voice_Registry carries 10 rows; the lens was unwired in both skills until this landing."
  },
  {
   "rider_id": "FR-026",
   "obligation": "Make every progression-path puzzle in this chapter solvable by an attentive player in reasonable time from in-world information — mysterious is allowed, unfun is not.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/NATURAL_VOICE_DOCTRINE.md#3-clues-mysterious-is-allowed-unfun-is-not",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:build/spine_rows/CH_*/clues.csv",
   "tooth": "NONE(solvability is proven by the QA loop's attempt budget; no static assertion can prove it)",
   "consumption_point": "plan:rank29",
   "citation_token": "",
   "evidence": "CH_03-05 clues.csv are header-only; 10 clue rows exist across 79 nodes"
  },
  {
   "rider_id": "FR-027",
   "obligation": "Route this chapter's genuinely hard or time-consuming challenges to the completionist, Layer-3, no-kill and easter-egg tiers — a hard puzzle is a prize, never a wall on the progression path.",
   "lane": "canon-author",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/NATURAL_VOICE_DOCTRINE.md#4-the-difficulty-routing-rule-ruled",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/NATURAL_VOICE_DOCTRINE.md",
   "tooth": "gate:no_dead_end",
   "consumption_point": "skill:spine-chapter#Step 3a",
   "citation_token": "non-gating multi-path",
   "evidence": "extends the standing no-dead-end and multi-path canon, which the skill already carries"
  },
  {
   "rider_id": "FR-028",
   "obligation": "Name this chapter's bosses the way the people there name them — the village's word for the night-hunter, the healer's name for the bound serpent.",
   "lane": "canon-author",
   "scope": "class:boss",
   "status": "SEED",
   "ruling_src": "docs/NATURAL_VOICE_DOCTRINE.md#2-the-cultural-register-names-and-speech-carry-t",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Boss_Encounter_Registry#boss_name",
   "tooth": "critic:does this carry the culture",
   "consumption_point": "NONE_YET(rank 11)",
   "citation_token": "",
   "evidence": "the boss-display-name half of the cultural-register lens, which is now on the critic surface as rubric item 15 lens 2; the per-boss consumption point still waits on rank 11's persona index."
  },
  {
   "rider_id": "FR-029",
   "obligation": "Author the quest-giver conversations this chapter's quest log then remembers — the NPC dialogue lane is per chapter, not a one-time pass.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/NATURAL_VOICE_DOCTRINE.md#5-execution-the-next-session-s-first-canon-lane",
   "owner_refs": [],
   "promise_refs": [
    "docs/NATURAL_VOICE_DOCTRINE.md#P5#1"
   ],
   "data_home": "NONE_YET(rank 11)",
   "tooth": "critic:does a person say this",
   "consumption_point": "NONE_YET(rank 11)",
   "citation_token": "",
   "evidence": "the doctrine promises the authored dialogue lane per chapter; no dialogue data home exists today, and the lens that will judge it is now on the critic surface as rubric item 15 lens 1."
  },
  {
   "rider_id": "FR-030",
   "obligation": "Drive this chapter's build from its spine entry and its RCM section — those two are the canon input, and everything downstream cites them.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/CH_*.md",
   "tooth": "gate:lint",
   "consumption_point": "p5:machinery",
   "citation_token": "the chapter's spine entry and RCM section drive it",
   "evidence": "79/79 spine entries exist; lint and anchors enrol each at Step 5"
  },
  {
   "rider_id": "FR-031",
   "obligation": "Acquire this region's must-acquire anchors and deep-research the rest, then run the region's pass-2 deep-read batch before the chapter's L2 content is called done.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/BOOK_ACQUISITION.md",
   "tooth": "NONE(acquisition is an action in the world; the deep-read batch is contracted in DEEP_BOOK_PROCESSING_CONTRACT section 4.3)",
   "consumption_point": "p5:machinery",
   "citation_token": "docs/BOOK_ACQUISITION.md",
   "evidence": "the P5 machinery list names the acquisition and deep-read split explicitly"
  },
  {
   "rider_id": "FR-032",
   "obligation": "Build this chapter's region through the parameterized terrain and staging drivers — bbox, terrain fetch, landscape import with a nonzero weightmap assertion, dress, stage.",
   "lane": "engine-code",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.md",
   "tooth": "NONE(the drivers and their assertions live in the game repo, which this gate never reaches across)",
   "consumption_point": "p5:machinery",
   "citation_token": "derive_region_bbox",
   "evidence": "the CH 2-5 slice map's generalization seam, cited in the P5 machinery list"
  },
  {
   "rider_id": "FR-033",
   "obligation": "Run the W-SPACE pass on this chapter, always — the slope and space audit, arena pads sculpted to the zone catalog's own bounds, the amplification doctrine applied, graded golden-path trails, and the permanent teeth under every encounter volume.",
   "lane": "engine-code",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.md",
   "tooth": "NONE(the slope assertion and navmesh continuity teeth are game-repo side)",
   "consumption_point": "p5:machinery",
   "citation_token": "the AMPLIFICATION",
   "evidence": "wired 2026-07-25 from the slice's measured lesson -- 6 of 11 staged sites sat on more than 15 degrees of raw slope. NAMED DEBT 2026-07-29 (gap audit): the amplification half of this row has doctrine_only as its source and NONE as its tooth, and the interior half of what amplification promises now has its own rider (FR-072, GAP-142) -- the space tooth graded a 220x180x60 karst interior OK at 0.0 degrees, which is the slope of the ground above the cave."
  },
  {
   "rider_id": "FR-034",
   "obligation": "Type this chapter's seeds through the housing ledger so every seed has a home, an owner and a route.",
   "lane": "schema-data",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Quest_Seed_Registry#chapter_anchor",
   "tooth": "gate:seed_housing",
   "consumption_point": "p5:machinery",
   "citation_token": "seeds typed through the housing ledger",
   "evidence": "T0_Quest_Seed_Registry: 0 rows; rank 10 is the 264-seed typing pass"
  },
  {
   "rider_id": "FR-035",
   "obligation": "Flesh a complete persona on every entity this chapter surfaces — the 13-field persona is what the natural-voice and living-world lanes read from.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 11)",
   "tooth": "gate:entity_taxonomy",
   "consumption_point": "p5:machinery",
   "citation_token": "personas fleshed",
   "evidence": "T0_Persona_Index does not exist yet; rank 11 mints it and is a P1 exit criterion"
  },
  {
   "rider_id": "FR-036",
   "obligation": "Author this chapter's spoiler-safe player strings sidecar — beat objectives, fork options and site display names — and pass the reveal critic before staging consumes it.",
   "lane": "canon-author",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/player_strings/*.csv",
   "tooth": "gate:reveal_discipline",
   "consumption_point": "p5:machinery",
   "citation_token": "PLAYER STRINGS",
   "evidence": "4 of 79 nodes carry a strings sidecar (CH_02-05) on 2026-07-27"
  },
  {
   "rider_id": "FR-037",
   "obligation": "Author this chapter's discovery clue rows per encounter from the legal-source enum — a clue is legibility, never a gate.",
   "lane": "canon-author",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:build/spine_rows/CH_*/clues.csv",
   "tooth": "NONE(the clue surface has no registry home until rank 29 re-homes it into DT_Clue)",
   "consumption_point": "p5:machinery",
   "citation_token": "DISCOVERY CLUE",
   "evidence": "clues.csv exists per node; most are header-only"
  },
  {
   "rider_id": "FR-038",
   "obligation": "Populate the non-kill and pip schema on every boss in this chapter — has_nonkill_path, pip_count, pip_reveal_threshold and defeat_protected per the ratified template.",
   "lane": "schema-data",
   "scope": "class:boss",
   "status": "PARTIAL",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Boss_Encounter_Registry#win_condition",
   "tooth": "gate:counter_class_coverage",
   "consumption_point": "p5:machinery",
   "citation_token": "NON-KILL/pip",
   "evidence": "T0_Boss_Encounter_Registry: 281 rows"
  },
  {
   "rider_id": "FR-039",
   "obligation": "Author this chapter's festival windows and the region's ambient and SFX rows as part of the staging pass, not as a later sweep.",
   "lane": "canon-author",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Festival_Registry#chapter_range",
   "tooth": "NONE(no per-chapter festival or ambient coverage assertion exists; rank 8 authors the cue table)",
   "consumption_point": "p5:machinery",
   "citation_token": "the festival windows",
   "evidence": "T0_Festival_Registry: 16 rows; T0_SFX_Registry: 30 rows. NAMED DEBT 2026-07-29 (gap audit): this row's data_home is a FESTIVAL column while half its obligation is audio, and its tooth is NONE -- the audio half now has its own rider (FR-071, home T0_SFX_Registry#chapter_anchor). Re-pointing this home is a PARTIAL-status edit and is carried as its own adjudication, not as a side effect of that mint."
  },
  {
   "rider_id": "FR-040",
   "obligation": "Run this chapter's asset passes as drop-ins over the asset-path contract, so a generated surface replaces a placeholder without touching canon data.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Vril_Site_Registry#mesh_pipeline_type",
   "tooth": "NONE(asset completeness is a post-5090 window check)",
   "consumption_point": "p5:machinery",
   "citation_token": "Asset passes",
   "evidence": "the mesh and asset-path columns exist on the site, boss and character registries"
  },
  {
   "rider_id": "FR-041",
   "obligation": "Run the QA fleet loop on this chapter to the same zero-bug bar before it is called shippable.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.md",
   "tooth": "NONE(the P3 loop is post-5090; rank 1 authors the kill-test and benchmark harness set)",
   "consumption_point": "p5:machinery",
   "citation_token": "QA fleet",
   "evidence": "P0 entry criterion — the X9.5 harness set is window-plan rank 1"
  },
  {
   "rider_id": "FR-042",
   "obligation": "Score this chapter on all five scorecard row classes — content budget, structure completeness, test coverage, care and reveal, and rider completeness.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "PARTIAL",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-3-the-artifact-docs-factorycontract-md-docs-fa",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 1)",
   "tooth": "gate:factory_contract",
   "consumption_point": "p5:scorecard",
   "citation_token": "content-budget",
   "evidence": "the fifth row class is this contract's addition; the first four ship in the P5 scorecard spec"
  },
  {
   "rider_id": "FR-043",
   "obligation": "Assemble the enrich pack first and build this chapter inside it — the pack is the single grounded context, and anything not derivable from it is flagged rather than guessed.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-1-assemble-the-pack-the-single-grounded-con",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/enrich.py",
   "tooth": "NONE(the pack's completeness is the author's precondition and is proven by Step 1 running clean)",
   "consumption_point": "skill:spine-chapter#Step 1",
   "citation_token": "harness/enrich.py",
   "evidence": "the skill's Step 1 is the load manifest"
  },
  {
   "rider_id": "FR-044",
   "obligation": "Run the significance-lens pass before authoring this chapter's region blocks — every surfaced site and web connection clears at least one of the 33 lenses and the relevance filter.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-3a-the-significance-lens-pass-run-before-au",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/proposals/SIGNIFICANCE_LENSES.md",
   "tooth": "critic:Significance-lens coverage",
   "consumption_point": "skill:spine-chapter#Step 3a",
   "citation_token": "SIGNIFICANCE_LENSES",
   "evidence": "rubric item 12 in normalize-doc; Step 3a in the skill"
  },
  {
   "rider_id": "FR-045",
   "obligation": "Deliver all three player layers in this chapter — a self-contained L1 loop, the real culture shown on its own terms at L2, and the vril metaphysics felt at L3 and never declared.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#standing-rules-bind-every-step-not-just-the-one",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/CH_*.md",
   "tooth": "gate:layer_register",
   "consumption_point": "skill:spine-chapter#Step 3",
   "citation_token": "check_layer_register.py",
   "evidence": "0 TIER-A findings is a hard exit condition of the layer_register gate"
  },
  {
   "rider_id": "FR-046",
   "obligation": "Hold reveal discipline in this chapter — no House-of-Velheim pattern before roughly Ch 38 and no pre-Ch-76 Grand Sage hint, in prose or in any player-facing string.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#the-20-block-order-author-top-to-bottom",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/CH_*.md",
   "tooth": "gate:reveal_discipline",
   "consumption_point": "skill:spine-chapter#Step 3",
   "citation_token": "Grand-Sage",
   "evidence": "gates reveal_discipline and grand_sage_silence both ship"
  },
  {
   "rider_id": "FR-047",
   "obligation": "Anchor every load-bearing claim in this chapter to a resolvable source and enrol the entry in the anchors target list in the same commit.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-5-lock-scatter-baseline-enrollment-ssbl-ste",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/CH_*.md",
   "tooth": "gate:anchors",
   "consumption_point": "skill:spine-chapter#Step 5",
   "citation_token": "anchors.targets",
   "evidence": "an entry absent from the target lists is unguarded canon — the skill's own words"
  },
  {
   "rider_id": "FR-048",
   "obligation": "Write this chapter's entry in the CVD formatting register — H2 to H4 only under one H1 title, plain prose, single-level dashed bullets, no code fences.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-3-author-docs-spine-chnn-md-to-the-v2-5-anc",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/CH_*.md",
   "tooth": "gate:lint",
   "consumption_point": "skill:spine-chapter#Step 5",
   "citation_token": "lint.targets",
   "evidence": "the lint gate enforces heading levels on every enrolled entry"
  },
  {
   "rider_id": "FR-049",
   "obligation": "Entailment-verify this chapter's anchored prose claims — a resolving anchor that does not support the sentence is invented canon the anchor gate cannot see.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-4-fresh-context-critic-gate-ssbl-step-10",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/extract_claims.py",
   "tooth": "critic:Entailment-verify",
   "consumption_point": "skill:spine-chapter#Step 4",
   "citation_token": "extract_claims.py",
   "evidence": "Step 4 pairs each prose claim with its best-overlap source section and adjudicates it"
  },
  {
   "rider_id": "FR-050",
   "obligation": "Scatter this chapter's structured fields to the live registries with the csv module and refresh the fidelity baseline in the same commit.",
   "lane": "schema-data",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-5-lock-scatter-baseline-enrollment-ssbl-ste",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Chapter_Index#spine_status",
   "tooth": "gate:fidelity",
   "consumption_point": "skill:spine-chapter#Step 5",
   "citation_token": "--emit-baseline",
   "evidence": "a scatter commit that leaves fidelity red fails the next session's preflight"
  },
  {
   "rider_id": "FR-051",
   "obligation": "Enrol this chapter's entry in both the lint and the anchors target lists — an entry absent from them is unguarded canon.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-5-lock-scatter-baseline-enrollment-ssbl-ste",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/gates_config.json",
   "tooth": "gate:index_freshness",
   "consumption_point": "skill:spine-chapter#Step 5",
   "citation_token": "lint.targets",
   "evidence": "the gates_config target lists carry the enrolled spine docs"
  },
  {
   "rider_id": "FR-052",
   "obligation": "Set every NPC, site and boss name this chapter introduces through the naming method's deep-dive and adversarial screens, and leave no working name pending across a Range Review.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#standing-rules-bind-every-step-not-just-the-one",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "doctrine_only:docs/NAMING_METHOD.md",
   "tooth": "critic:NAMING_METHOD",
   "consumption_point": "skill:spine-chapter#Step 3",
   "citation_token": "NAMING_METHOD",
   "evidence": "a pending name is a future-hallucination source — the skill's own standing rule"
  },
  {
   "rider_id": "FR-053",
   "obligation": "Pre-draft the Stage-2 canonical-question set before authoring a hard-line chapter, and carry the cultural-depiction tier through to the critic.",
   "lane": "canon-author",
   "scope": "class:hard_line",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-2-hard-line-chapters-only-pre-draft-the-sta",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Chapter_Index#hard_line_status",
   "tooth": "gate:care_scope",
   "consumption_point": "skill:spine-chapter#Step 2",
   "citation_token": "Stage-2 question set",
   "evidence": "18 nodes carry canonical_hard_line_flag TRUE; 13 carry a non-NONE hard_line_status"
  },
  {
   "rider_id": "FR-054",
   "obligation": "Start this chapter from the predecessor's end state on all seven carry-forward fields — age, companions, familiars, homes, found family, identity hiding, path states.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#step-0-preflight-ssbl-steps-1-2",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Chapter_Index#identity_hiding_status_start",
   "tooth": "gate:spine_graph",
   "consumption_point": "enrich:CONTINUITY_FIELDS",
   "citation_token": "CONTINUITY_FIELDS",
   "evidence": "SSBL section 9.3 hard constraint — drift here cascades across the remaining arc"
  },
  {
   "rider_id": "FR-055",
   "obligation": "Close the Range Review window at this node before any forward build — the multi-grid audit, L1 completeness, the L3 naming finalization, the L2 transition pass, and the consistency audit.",
   "lane": "qa-teeth",
   "scope": "class:rr_node",
   "status": "BUILT",
   "ruling_src": ".claude/skills/spine-chapter/SKILL.md#range-review-every-10-chapters-gating",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/spine/range_reviews/*.md",
   "tooth": "NONE(the review is a judgment pass; its enrolment rides the lint and anchors target lists)",
   "consumption_point": "skill:spine-chapter#Range Review",
   "citation_token": "Range Review every 10 chapters",
   "evidence": "RR-12 is filed; RR-22 is next"
  },
  {
   "rider_id": "FR-056",
   "obligation": "Hand this chapter's author the design-system docs through the pack, not through a human remembering to name them.",
   "lane": "spec-doc",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/enrich.py",
   "tooth": "gate:factory_contract",
   "consumption_point": "enrich:SYSTEM_DOCS",
   "citation_token": "docs/COMBAT_ENCOUNTER_SYSTEM.md",
   "evidence": "SYSTEM_DOCS carries 5 entries today"
  },
  {
   "rider_id": "FR-057",
   "obligation": "Carry the enhancement-program docs the skill manifest loads into the pack as well, so the canon surface and the pack surface cannot diverge.",
   "lane": "spec-doc",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/enrich.py",
   "tooth": "gate:factory_contract",
   "consumption_point": "enrich:SYSTEM_DOCS",
   "citation_token": "docs/proposals/SIGNIFICANCE_LENSES.md",
   "evidence": "D3, recorded as its own row rather than hidden: the skill loads SIGNIFICANCE_LENSES, ESOTERIC_GROUNDING, CROSS_CULTURAL_WEAVE and ENTITY_PERSONA_SYSTEM; enrich.py loads none of them"
  },
  {
   "rider_id": "FR-058",
   "obligation": "Show this chapter's author every open promise pointed at this node, every promise this node makes, and each touching arc's stage — not just the predecessor's end state.",
   "lane": "schema-data",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-5-the-single-highest-leverage-change-in-the-en",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Arc_Grid#progression_stage",
   "tooth": "gate:arc_continuity",
   "consumption_point": "enrich:ARC_PACK_SOURCES",
   "citation_token": "T0_Promise_Ledger",
   "evidence": "the one-hop read is closed: enrich.py section 0f assembles every arc staged at the node with its previous and next staged node, every promise the node makes and every promise pointed at it, and the undeclared-disposition count -- verified on CH_02 (17 arcs / 9 edges), CH_13 (15 / 3) and CH_57 (16 / 1)"
  },
  {
   "rider_id": "FR-059",
   "obligation": "Carry the 2026-07 combat and voice doctrine into the pack, so a chapter author inherits the rulings rather than the rulings waiting for an author who happens to know them.",
   "lane": "spec-doc",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/enrich.py",
   "tooth": "gate:factory_contract",
   "consumption_point": "enrich:SYSTEM_DOCS",
   "citation_token": "docs/COMBAT_PROGRAM_ADDENDUM.md",
   "evidence": "D2: SYSTEM_DOCS has been frozen at 5 docs since the enhancement program"
  },
  {
   "rider_id": "FR-060",
   "obligation": "Point every factory-bearing doc's DOC_MAP consumer column at rider ids rather than restating its wiring in prose.",
   "lane": "spec-doc",
   "scope": "once",
   "status": "SEED",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/DOC_MAP.md",
   "tooth": "gate:factory_contract",
   "consumption_point": "NONE_YET(rank 2.5)",
   "citation_token": "",
   "evidence": "D4: DOC_MAP status labels rotted in both directions; the rider row is the thing with the tooth"
  },
  {
   "rider_id": "FR-061",
   "obligation": "Hold continuity by default in this chapter's presentation — the lens is one continuous presence, and a hard cut is legal only for the schema-keyed beat classes.",
   "lane": "spec-doc",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/spine/DECISIONS_PENDING_JOSH.md#fork-a-ruled-same-sitting-recorded-here-per-the",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 19)",
   "tooth": "NONE(the cut-class schema is minted by the presentation-doctrine brief at rank 19)",
   "consumption_point": "plan:rank19",
   "citation_token": "",
   "evidence": "Josh ruled fork A option 2 — continuity by default, cut earned; binding on the CN5.2 template bake"
  },
  {
   "rider_id": "FR-062",
   "obligation": "Give this chapter's defeat moments the ruled shape — hold-on by default with a let-go countdown, and an ally revival that is out-of-combat and countdown-bounded.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/spine/DECISIONS_PENDING_JOSH.md#fork-b-shape-b-staged-adopted-with-josh-s-reshap",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Worldstate_Variables#variable_id",
   "tooth": "NONE(the defeat-axis brief is Josh-pending in the Vol2 decisions register)",
   "consumption_point": "vol2:D-DEFEAT-AXIS",
   "citation_token": "D-DEFEAT-AXIS",
   "evidence": "fork B shape-B staged, adopted with Josh's reshaping of the decision points"
  },
  {
   "rider_id": "FR-063",
   "obligation": "Build this chapter's travel as playable navigable segments — geography accurate, distance compressed, and the important crossings staged as real dungeons.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/spine/DECISIONS_PENDING_JOSH.md#fork-c-tiered-traversal-adopted-with-josh-s-desi",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 21)",
   "tooth": "NONE(rank 21 mints the route-leg data a traversal tooth can read)",
   "consumption_point": "plan:rank21",
   "citation_token": "",
   "evidence": "the West Texas principle, ruled 2026-07-27; the fallback screen survives only as the honest failure state"
  },
  {
   "rider_id": "FR-064",
   "obligation": "Type this chapter's inbound and outbound seams T0 to T3 so every crossing declares its treatment.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/spine/DECISIONS_PENDING_JOSH.md#fork-c-tiered-traversal-adopted-with-josh-s-desi",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 21)",
   "tooth": "gate:spine_graph",
   "consumption_point": "plan:rank21",
   "citation_token": "",
   "evidence": "D5: seam_type and seam_class resolve to 0 files under registries/ on 2026-07-27 — the ruling's most load-bearing dangling wire, now homed"
  },
  {
   "rider_id": "FR-065",
   "obligation": "Declare an OWNER line and a rider row in the same landing as any per-chapter promise — a promise without a row is an orphan by construction.",
   "lane": "spec-doc",
   "scope": "once",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-4-the-tooth-gate-30-factorycontract-three-self",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:docs/factory_contract.json",
   "tooth": "gate:factory_contract",
   "consumption_point": "gate:factory_contract",
   "citation_token": "factory_contract",
   "evidence": "R1 is the anti-orphan doctrine made executable; it fires on the day a promise lands uncited"
  },
  {
   "rider_id": "FR-066",
   "obligation": "Derive this chapter's build checklist from the contract rather than hand-typing it, so a new rider reaches every future chapter automatically.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-3-the-artifact-docs-factorycontract-md-docs-fa",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "path:harness/emit_chapter_checklist.py",
   "tooth": "gate:factory_contract",
   "consumption_point": "gate:factory_contract",
   "citation_token": "factory_contract",
   "evidence": "the emitter self-tests on a built slice node and an endgame realm node"
  },
  {
   "rider_id": "FR-067",
   "obligation": "Write this chapter's consumption manifest at build time — rider id to artifact path, verdict and evidence.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#4-3-the-artifact-docs-factorycontract-md-docs-fa",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(rank 1)",
   "tooth": "NONE(the manifest is written by the build; the scorecard's fifth row class arms with it)",
   "consumption_point": "NONE_YET(rank 1)",
   "citation_token": "",
   "evidence": "build/factory/CH_NN.json does not exist yet — positive-controlled against the live tree"
  },
  {
   "rider_id": "FR-068",
   "obligation": "Advance every arc this chapter stages or state the hold, pay every promise pointed at this node, and never resolve an arc whose disposition is undeclared.",
   "lane": "canon-author",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#wave-3-the-authoring-input-highest-leverage-per",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Arc_Grid#stage_role",
   "tooth": "gate:arc_continuity",
   "consumption_point": "skill:spine-chapter#Step 3a-ARC",
   "citation_token": "ARC PACK",
   "evidence": "Step 3a-ARC lands with the pack section it reads; gate 32's T-1/T-4/A1/A2 are the deterministic half and rubric item 14 is the judgement half"
  },
  {
   "rider_id": "FR-069",
   "obligation": "Verify this chapter's staged arcs against its grid rows -- a claimed stage the prose does not stage, a payoff with no setup, or a resolved undeclared arc is a finding.",
   "lane": "qa-teeth",
   "scope": "all",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#wave-3-the-authoring-input-highest-leverage-per",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Promise_Ledger#edge_state",
   "tooth": "critic:Arc continuity and promise discipline",
   "consumption_point": "skill:normalize-doc#rubric",
   "citation_token": "Arc continuity and promise discipline",
   "evidence": "the critic surface carries the lens as rubric item 14; the deterministic half is gate 32, and this is the half no gate can read"
  },
  {
   "rider_id": "FR-070",
   "obligation": "Author the arc layer the schema declares non-derivable -- the ANCHOR disambiguation and the class-grammar stage_role -- once, under the carried token discipline, and re-emit the carry-forward baseline in the same commit.",
   "lane": "schema-data",
   "scope": "once",
   "status": "BUILT",
   "ruling_src": "docs/proposals/STORY_DEPTH_PROGRAM.md#2-5-the-strongest-objection-and-the-structural-a",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Arc_Grid#derivation_source",
   "tooth": "gate:arc_continuity",
   "consumption_point": "skill:arc-pass#Step 3",
   "citation_token": "arc-pass read",
   "evidence": "the skill lands wired and the work is NOT done: measured on the landed grid, 421 rows carry the declared `default ANCHOR->` placeholder and 0 carry an authored `[arc-pass read]` cell -- that count is the backlog this rider owns"
  },
  {
   "rider_id": "FR-071",
   "obligation": "Author this chapter's audio rows as part of its staging pass -- the footstep, ambient, creature-voice and effect cues the chapter actually plays, each with its category, track and production state, not a path string standing in for all four.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-141-critical-audio-sfx-ambience-t0sfxregistr",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_SFX_Registry#chapter_anchor",
   "tooth": "NONE(no per-chapter sfx coverage assertion exists; the registry implements 1 of its 21 ratified columns, so there is no category, track or generation-state cell for a tooth to read until the reconcile named by GAP-141)",
   "consumption_point": "plan:rank8",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane audio-sfx-ambience): T0_SFX_Registry = 30 rows and 18 of them anchor to CH_02, so 67 of 79 nodes carry zero rows; the ten declared consumption arrays measure ability_sfx 0/185, vril_cast_sfx 0/185, weapon_sfx 0/72, boss_sfx 0/281, chapter_sfx 0/79, with only Region_Index env-ambient 8/76 and ritual 4/76 populated"
  },
  {
   "rider_id": "FR-072",
   "obligation": "Build this chapter's interiors as real enterable volume where its region page already specifies one -- footprint, storeys, below-grade depth and room count carried as data, under the culture's own architectural grammar.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-142-critical-world-terrain-interiors-the-wor",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(GAP-142)",
   "tooth": "NONE(the space audit grades DEM slope and graded a 220x180x60 karst interior OK at 0.0 degrees -- it measures the ground above the cave; a tooth that refuses terrain slope as evidence for an interior volume is GAP-142's extension)",
   "consumption_point": "NONE_YET(GAP-142)",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane world-terrain-interiors): 11 of 12 slice region pages carry interior prose with measured footprints buried inside single free-text area_bounds cells (sumatra_java 44, south_india 15, south_africa 14, central_africa_congo 12); a positive-controlled scan of all 62 registries returns ZERO columns matching interior, room or building, and Content/Maps holds 9 region and arena levels and no interior level"
  },
  {
   "rider_id": "FR-073",
   "obligation": "Represent this chapter's water as water -- class, depth band, current, navigability, seasonal state and shore type -- wherever a beat, arena or mechanic stands on it, rather than on a placeholder plane.",
   "lane": "engine-code",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-142-critical-world-terrain-interiors-the-wor",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(GAP-142)",
   "tooth": "NONE(no water class, depth, current or navigability column exists anywhere; the only water in the tree is the FloresOcean placeholder plane, so there is nothing a per-chapter assertion could read)",
   "consumption_point": "plan:rank27",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane world-terrain-interiors): TODO_CANON.md L395-398 records the placeholder plane and that the real water pass remains open, L641 puts it on a later item that exists as no plan row; rank 27 is LIVE and builds a baray-flow mechanic on a reservoir with no water representation, and the Ch-8 dhow set-piece stages on open water"
  },
  {
   "rider_id": "FR-074",
   "obligation": "Declare this chapter's weather and time-of-day per beat, and what each does -- a sky vocabulary with no effect model and no per-beat authority cannot stage a storm the player feels.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-134-critical-cross-lane-factory-contract-the",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Region_Index#weather_cycle_profile",
   "tooth": "NONE(weather_cycle_profile is populated 4 of 76 and a positive-controlled scan of all 62 registries returns ZERO time_of_day columns, so per-beat weather has no cell; the effect model is unowned)",
   "consumption_point": "plan:rank30",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lanes world-terrain-interiors and audio-sfx-ambience): the nine-token weather vocabulary has drivers queued and no effect model; ambience is keyed at region grain with no zone, time-of-day or weather axis, one granularity above the world being built"
  },
  {
   "rider_id": "FR-075",
   "obligation": "Name this chapter's item bill -- the wearables, consumables and craft materials it introduces, and the gather nodes its region actually carries -- so the gather-to-craft-to-trade loop has stable ids to stand on.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-138-critical-items-economy-the-item-economy",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Equipment_Registry#canonical_chapter_acquisition",
   "tooth": "NONE(the QT-17 content-budget vector enumerates ten axes and none is item, loot, material, gather-node or vendor, so a chapter passes the density check with zero items; the axes are GAP-138's addition)",
   "consumption_point": "plan:rank14",
   "citation_token": "",
   "evidence": "RULED 2026-07-30 (twenty-sixth sitting item 5, option c): the per-region FLOOR is the binding rule -- every region page contributes a STATED item/material/gather count from its own prose and the total is whatever those sum to; the computed sanity band is RECORDED, NEVER RATIFIED at docs/concept_art/item_economy_sanity_band.csv (+ .json, re-runnable); NO item count enters CVD s17.12. THIS RIDER STAYS SEED AND ITS TOOTH STAYS NONE(...) -- recording a ruling is not arming a rider. ARMING IT TAKES, exactly: (1) the QT-17 content-budget vector gains the three axes it does not have -- item, material, gather-node -- so a chapter can no longer pass the density check with zero items; (2) the tooth changes from NONE(...) to the gate that then reads them; (3) the rider flips SEED -> PARTIAL, at which point gate 30 binds on home and tooth rather than warning. None of that is done here and none of it is a registry edit -- it is a checker change, and gate 30 was deliberately not rewritten by this wave. | MEASURED 2026-07-29 (gap audit, lane items-economy): T0_Equipment_Registry = 1 row (EQ_0001, whose own notes say never rolled or crafted) against 72 weapons by the same reader; Mineral 19, Flora 25 and Gather 24 rows key EXCLUSIVELY to flores_island, bali, sumatra_java and angkor_khmer, so nine of the thirteen slice regions carry zero material or gather rows while their eight region pages measure 20/20 template sections each"
  },
  {
   "rider_id": "FR-076",
   "obligation": "Declare what this chapter's region accepts in trade and who accepts it -- the diegetic exchange medium and the vendor's stock and accepted goods -- with the trade-value lens displayed and never stored or spendable.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-138-critical-items-economy-the-item-economy",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(GAP-138)",
   "tooth": "NONE(a positive-controlled scan of all 62 registries returns ZERO columns matching vendor, currenc or exchange, so the ruled medium_of_exchange token has no cell to live in and no tooth to read it)",
   "consumption_point": "plan:rank30",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane items-economy): medium_of_exchange occurs in exactly TWO files repo-wide and in ZERO registries; T0_Region_Index's 26 columns were read in full and carry no economic field; 15 merchant and trader characters exist in T0_Character_Index with no stock, accepted-goods or market row anywhere. The ruling is Josh's, fourteenth sitting item 7 (fully diegetic regional exchange media plus one presentation-only trade-value lens)"
  },
  {
   "rider_id": "FR-077",
   "obligation": "Write this chapter's journal entries as the story object Pillar 6 rules them to be -- the protagonist's own record, not a system log -- and carry the canonical beats the pillar names.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-135-critical-quest-dialogue-runtime-ui-ux-th",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(GAP-135)",
   "tooth": "NONE(no journal column exists in any of the 62 registries and the CVD-named T0_Journal_Entry_Template_Registry has never existed, so Pillar 6's own executable test cannot be evaluated on any node)",
   "consumption_point": "NONE_YET(GAP-135)",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lanes quest-dialogue-runtime and ui-ux): the CVD-cross-referenced template registry is not among the 62 registry directories (positive control: the same listing returns all three T0_Quest* directories); journal_entry_id occurs once corpus-wide, inside WS_010's own description cell; the Ch-13 closing beat passes the amulet and the journal to the healer's child with no data to render"
  },
  {
   "rider_id": "FR-078",
   "obligation": "Decompose this chapter's main-story and side-bucket quests into rows -- one per quest, with its stages, giver and completion condition -- so the quest log names quests that exist.",
   "lane": "canon-author",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-135-critical-quest-dialogue-runtime-ui-ux-th",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Quest_Definition_Registry#chapter",
   "tooth": "NONE(no per-chapter quest-row assertion exists; rank 15 populates the execution columns on the 16 rows already there and mints no row for any slice chapter, so the count a tooth would check has no owner until GAP-135 lands one)",
   "consumption_point": "plan:rank15",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane quest-dialogue-runtime): T0_Quest_Definition_Registry = exactly 16 rows, all Ch 55, 58, 76, 77, PROLOGUE or EPILOGUE, and ZERO rows for Ch 2-13; T0_Quest_Seed_Registry is header-only at 0 rows (positive control: the sibling T0_Source_Material_Registry reads 1915 lines by the same reader) against 87 authored Section-13 seeds on the eight Ch 6-13 region pages"
  },
  {
   "rider_id": "FR-079",
   "obligation": "Give this chapter's inhabitants a day -- a schedule state, a home site, a work site and a presence window per named persona, and a pooled bucket per ambient crowd, with a population band for every settled zone.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-139-critical-npc-simulation-rank-11-s-person",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(GAP-139)",
   "tooth": "NONE(the SCHEMA home now exists -- ENTITY_PERSONA_SYSTEM 5.2.1, the GAP-139 amendment of 2026-07-30 -- but no gate asserts a persona's day: the eight index columns and the T0_Persona_Schedule / T0_Persona_Bucket tables are minted at rank 11, and the tooth that arms with them is a check_no_dead_end.py extension requiring presence_nongating_class to read always_present or alternate_reach_declared on every progression-critical persona. The population half IS rowed today: T0_Region_Index.ambient_population_band_default plus the per-zone Zone Catalog ambient_population_band, both blank pending rank 5's crowd budgets)",
   "consumption_point": "plan:rank11",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane npc-simulation): ENTITY_PERSONA_SYSTEM L218 AS OF 2026-07-29 -- a LINE reference the amendment below supersedes by growing the file, so the durable citation is SECTION 5.2 -- enumerated the T0_Persona_Index columns and own_life was NOT among them; VOL2 LW-8 states its own blocker (no schedule field in Character_Index); T0_Character_Index's 33 columns carry role 164/164 with the occupational fact unnormalised inside the slug and no occupation, trade, home_site or work_site field; no number exists anywhere for how many people a village, market, port or trade compound holds. GAP-139 schema amendment landed 2026-07-30: ENTITY_PERSONA_SYSTEM gained 5.2.1, which declares the eight daily-rhythm columns on T0_Persona_Index, the T0_Persona_Schedule child table, the T0_Persona_Bucket ambient roster, the non-gating-in-time invariant, and the ambient-population band -- which LANDED on both rails, blank. Re-measured 2026-07-30 on the live tree: the header scan over all 65 live registry tabs returns ONE schedule/routine/occupation/population/crowd column, T0_Chapter_Index.ambient_crowd_voice_signature_array, a voice-casting array and a false friend (positive control, same scan: 27 trade/home/density columns across 18 registries). The DATA half is unchanged and belongs to rank 11 (named personas + buckets) and rank 5 (crowd budgets), which is why this rider stays SEED with data_home NONE_YET(GAP-139) and the register entry stays OPEN."
  },
  {
   "rider_id": "FR-080",
   "obligation": "Give every entity this chapter surfaces on a player screen an icon id -- abilities, weapons, statuses, runes, materials and trades -- so the icon bill is a query rather than a later inventory of screenshots.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-144-critical-ui-ux-the-player-facing-ui-has",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "NONE_YET(GAP-144)",
   "tooth": "NONE(exactly ONE icon column exists corpus-wide, T0_Status_Table.icon_class on 10 rows and itself with no consumer, so there is no rail a coverage tooth could read; the icon_id_ref mint is GAP-144's proposal)",
   "consumption_point": "plan:rank13",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane ui-ux): a countable ~542-icon bill from live rows (Ability 185, Weapon 72, Creature 150, Familiar 22, Rune 19, Rarity 13, Flora 25, Mineral 19, Trade 10, Status 10, Imprint 5, Bonus 12) against that one column; the asset contract's HUD-art row carries the prose id source 'UMG widget binding (authored, not generated)' with generation_status N/A, so icons are tagged a 5090 workload with no prompt-composable id list"
  },
  {
   "rider_id": "FR-081",
   "obligation": "Size this chapter's moving image before it is built -- every scene row carrying its shot count, duration class, production track and cinematic tier, and the seam into the next chapter carrying its bridging scene.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/DESIGN_GAP_REGISTER.md#gap-140-critical-animation-cinematics-the-moving",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "registry:T0_Scene_Spec_Registry#chapter",
   "tooth": "NONE(the scene registry holds 16 rows against 450 authored scenes and none of its columns is duration, shot count, complexity or production tier, so no per-chapter cinematic obligation is measurable until GAP-140 mints them)",
   "consumption_point": "plan:rank6",
   "citation_token": "",
   "evidence": "MEASURED 2026-07-29 (gap audit, lane animation-cinematics): build/spine_rows/*/scenes.csv = 450 rows across 11 scene_type values; T0_Scene_Spec_Registry = 16 rows with cinematic_status pending 16/16 and mesh_refs empty 16/16, so 434 scenes have no registry row; chapter_bridging_cinematic is NOT among the 11 live scene_type values, so all 78 chapter seams carry zero bridging rows"
  },
  {
   "rider_id": "FR-082",
   "obligation": "Give every ally this chapter fields the uncontrolled-behaviour data the ally switch depends on -- the behaviour-policy rows that apply to it and the intelligence tier that selects them -- so an ally the player switches away from still acts as its own character instead of going inert.",
   "lane": "schema-data",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/COMBAT_PROGRAM_ADDENDUM.md#13-the-ff7r-switch-direct-ally-control-the-chara",
   "owner_refs": [
    "docs/COMBAT_PROGRAM_ADDENDUM.md#13-the-ff7r-switch-direct-ally-control-the-chara"
   ],
   "promise_refs": [],
   "data_home": "registry:T0_Ally_Behavior_Policy#autonomy_band",
   "tooth": "gate:ally_build",
   "consumption_point": "plan:rank22",
   "citation_token": "",
   "evidence": "RULED 2026-07-30 (Josh, twenty-eighth sitting item J4): the ally is a character, not a unit; the player may take direct control by switching to them; an ally not under player control acts as that character, per its specialization and awarded stats, with intelligence leaning into prediction. Gate 29 hosts the tooth and gained B5(iii), which asserts the ruled ABSENCE of an order-verb column. SEED because nothing per-chapter is populated yet: T0_Ally_Behavior_Policy holds 14 rows, 13 of them role-generic (ally_ref = *), so a PARTIAL rider would bind rulers against data that does not exist. Rank 22 (the ally survival/defeat model and ally combat-line class) is where the per-chapter shape lands."
  },
  {
   "rider_id": "FR-083",
   "obligation": "Key every concept plate this chapter's art leg produces on a LIVE canon id -- the density class selects the registry, the canon id is a primary key in exactly that registry, and the plate row carries the id, the registry and the canon_ref token list so the plate is addressable from the row it realizes.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/CONCEPT_ART_PRODUCTION_PROGRAM.md#3-2-the-path-form-and-the-canon-id-law",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "plates:docs/art_boards/PLATES.csv#canon_id",
   "tooth": "gate:art_pointers",
   "consumption_point": "art:3.2 The path form and the canon-id law",
   "citation_token": "FR-083",
   "evidence": "MEASURED 2026-08-03 (the four-lane art compatibility pass): all 76 generated lane-G plates carry a prompt-pack kebab slug in asset_path segment 2 (D1-15/komodo-dragon-guardian/...), PLATES.csv has no canon_id column, and a header scan of all 60 registries found ZERO concept-plate columns against a 7-registry mesh_id_ref positive control -- so the join is absent in both directions and GATE 39 still reports BRD_0001 at 'canon ids 62, covered 5, pending 57' after 76 plates of spend. SEED because the columns are not minted yet; the canon-id law and the key_registry/key_column binding landed the same day in docs/concept_art/density_model.csv, so the class-to-registry half of the join is already live data."
  },
  {
   "rider_id": "FR-084",
   "obligation": "Deliver this chapter's art leg against the per-density-class floors the density model sets, COUNTED from the plate rows by class and stage rather than asserted -- a draft candidate sweep is not delivered work.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/CONCEPT_ART_PRODUCTION_PROGRAM.md#3-2e-the-stage-discipline-four-candidates-are-on",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "plates:docs/art_boards/PLATES.csv#density_class_id",
   "tooth": "NONE(the per-class production ledger does not exist: no artifact joins density_model.csv's floors to counted PLATES.csv rows, so 'how far is D1-01 against its floor of 180' has no answer a gate could read; harness/art_production_ledger.py emitting docs/concept_art/art_production_ledger.csv is the named mint, and until it exists this tooth reads NONE rather than a green it did not earn)",
   "consumption_point": "art:6. PRIORITY ORDER FOR THE PROLOGUE",
   "citation_token": "FR-084",
   "evidence": "MEASURED 2026-08-03: docs/concept_art/density_model.csv carries floor and target counts for all 43 classes and nothing in the repo counts delivered plates against them; the 76 lane-G rows are recorded generation_status=complete at what is really the DRAFT stage (4 seeds per subject), which would have inflated any progress reading by roughly 4x. The stage column and the ledger are the two arming steps."
  },
  {
   "rider_id": "FR-085",
   "obligation": "Refuse Lane-G generation for every art subject this chapter carries whose care tier is in the living-tradition set or whose site row is protected -- the composer emits a Lane-R reference request instead, and the refusal reads off columns on the plate row rather than out of a commit message.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/proposals/CONCEPT_ART_PROGRAM.md#4-4-where-the-human-and-josh-sit",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "plates:docs/art_boards/PLATES.csv#care_tier",
   "tooth": "gate:boards",
   "consumption_point": "art:7.3 EXHAUSTIVE",
   "citation_token": "FR-085",
   "evidence": "MEASURED 2026-08-03: CONCEPT_ART_PROGRAM 4.4 rules that rows whose care_tier is in the living-tradition set can never dispatch to Lane G, and PLATES.csv carries NO care_tier column, NO protected column and no FK to a site row -- so the rule is unrepresentable on the surface it governs. 6 of the 12 Ch2+Ch3 spine site rows are protected=true; the 2026-08-02 lane held six rows by hand and recorded which ones only in a commit message. SEED because the two columns are not minted yet; the care call itself was made correctly, which is why this is a representation defect and not a care breach."
  },
  {
   "rider_id": "FR-086",
   "obligation": "Write a per-artifact licence record for every plate this chapter's art leg generates and point that plate row's generation_licence_ref at the record's repo-relative path, so the weights licence the outputs inherit is recorded where a gate can resolve it.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/CONCEPT_ART_PRODUCTION_PROGRAM.md#5-3-what-an-approval-becomes",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "plates:docs/art_boards/PLATES.csv#generation_licence_ref",
   "tooth": "gate:generation_lifecycle",
   "consumption_point": "art:5.3 What an approval becomes",
   "citation_token": "FR-086",
   "evidence": "MEASURED 2026-08-03: listing docs/licence_records returns README.md and RECORD_SCHEMA.json only -- zero records for 76 generation_status=complete artifacts -- corroborated independently by GATE 36 printing 'licence refs 0, records 0'. PLATES.csv generation_licence_ref reads the literal token 'shippable' on all 76 rows, which is a licence CLASS value sitting in the column the ratified contract says holds a PATH TO THE RECORD. SEED because PLATES.csv is not yet enrolled in docs/generation_lifecycle.json, so GATE 36 cannot see the table at all (it walks registries/ only) -- the enrolment plus the L1 scope widening is the arming step."
  },
  {
   "rider_id": "FR-087",
   "obligation": "Publish this chapter's art only through the marketing-clear query -- every previz plate carries its directional label, reveal-gated rows never publish, and the public region page emits rows whose computed marketing_clear is true rather than walking a directory.",
   "lane": "art-asset",
   "scope": "all",
   "status": "SEED",
   "ruling_src": "docs/spine/DECISIONS_PENDING_JOSH.md#the-concept-art-site-is-public-marketing-no-acce",
   "owner_refs": [],
   "promise_refs": [],
   "data_home": "plates:docs/art_boards/PLATES.csv#directional_label",
   "tooth": "gate:boards",
   "consumption_point": "art_boards:The site is a QUERY",
   "citation_token": "FR-087",
   "evidence": "RULED 2026-08-03 (Josh, thirty-first sitting, verbatim in docs/spine/DECISIONS_PENDING_JOSH.md): a public webpage per region and subpages per asset and view type, no access lock, 'PREVIZ_DIRECTIONAL plates publish WITH their directional label visible', reveal-gated content never publishes. MEASURED the same day: the only eligibility computation in the system is BOARD-grain (marketing_eligible on MANIFEST.csv) while the ruled site architecture is PLATE-grain, and previz_only was barred unconditionally from every panel of every board -- so the ruled tier could not be represented at all. docs/art_boards/README.md was amended in place to the narrowed bar, the mandatory directional_label and the site-is-a-query rule; SEED because no site builder exists in the tree and the directional_label column is not minted yet."
  }
 ],
 "migration_ledger": [
  {
   "source": "docs/COMBAT_PROGRAM_ADDENDUM.md OWNER: lines",
   "measured": 13,
   "riders": "FR-001..FR-013",
   "lossless": "one rider per OWNER anchor"
  },
  {
   "source": "docs/DESIGN_GAP_REGISTER.md OWNER: lines",
   "measured": 10,
   "riders": "FR-014..FR-023",
   "lossless": "one rider per OWNER anchor"
  },
  {
   "source": "docs/NATURAL_VOICE_DOCTRINE.md",
   "measured": 5,
   "riders": "FR-024..FR-029",
   "lossless": "the four doctrine sections plus the execution section's NPC-dialogue lane; both critic lenses carried as teeth"
  },
  {
   "source": "docs/ROADMAP_POST_5090_TO_SHIP.md P5 machinery bullets (the BUILT baseline)",
   "measured": 13,
   "riders": "FR-030..FR-042",
   "lossless": "each machinery bullet and the scorecard's fifth row class"
  },
  {
   "source": ".claude/skills/spine-chapter/SKILL.md canon-side obligations",
   "measured": 13,
   "riders": "FR-043..FR-055",
   "lossless": "the best-maintained per-chapter set in the repo; the shape this register generalizes"
  },
  {
   "source": "the pack riders including the D3 divergence",
   "measured": 5,
   "riders": "FR-056..FR-060",
   "lossless": "the divergence is two rows (FR-056 pack membership, FR-057 the skill-only docs), never one hidden row"
  },
  {
   "source": "the ruled forks A/B/C including seam typing",
   "measured": 4,
   "riders": "FR-061..FR-064",
   "lossless": "D5 gets its home here"
  },
  {
   "source": "the charter applied to itself (section 7)",
   "measured": 3,
   "riders": "FR-065..FR-067",
   "lossless": "if the charter's own artifacts cannot pass R1/R2/R3, the charter is wrong"
  },
  {
   "source": "the story-depth Wave 3 arc-axis wiring",
   "measured": 3,
   "riders": "FR-068..FR-070",
   "lossless": "one rider per new consumption surface: the author step, the critic lens and the one-time pass; the pack itself is FR-058, updated in place rather than duplicated"
  },
  {
   "source": "the ten-lane pipeline gap audit (DESIGN_GAP_REGISTER v1.8, entries GAP-133..GAP-207)",
   "measured": 11,
   "riders": "FR-071..FR-081",
   "lossless": "one rider per content class the rider-set token census measured at ZERO; the nine classes named in the audit entry plus icons and cinematics, with vendors and currency on one row and crowds and schedules on one row because each pair is one obligation"
  },
  {
   "source": "docs/COMBAT_PROGRAM_ADDENDUM.md section 13 (the twenty-eighth sitting item J4 -- the FF7R switch)",
   "measured": 1,
   "riders": "FR-082",
   "lossless": "one rider per OWNER anchor, exactly as the FR-001..FR-013 block: section 13 declares one OWNER: line and it is cited once. The source is exhausted -- J4's other consequences are canon and schema edits, not per-chapter obligations"
  },
  {
   "source": "the four-lane art compatibility pass (thirty-first sitting 2026-08-03) -- docs/CONCEPT_ART_PRODUCTION_PROGRAM.md section 3.2 + docs/art_boards/README.md",
   "measured": 5,
   "riders": "FR-083..FR-087",
   "lossless": "one rider per art-bearing obligation the chapter axis was measurably blind to: the canon key, the class floor, the Lane-G care refusal, the licence record, and the publish gate. The source is exhausted -- section 3.2's remaining clauses (the multi-id dispositions, the canon_ref grammar, render_tier) are HOW a plate is composed rather than things a chapter must independently be true of, so they ride FR-083 instead of minting rows nothing would ever check separately"
  }
 ],
 "known_secondary_surfaces": [
  "docs/DESIGN_GAP_REGISTER.md entries 1-9 use a lowercase 'Owner:' token (9 lines, measured 2026-07-27) rather than the machine token 'OWNER:'. They are outside R1's primary net at v1 by design — folding them in means normalising the token in the source doc, which is a v1.1 item, not a silent regex widening.",
  "docs/ROADMAP_POST_5090_TO_SHIP.md carries 1 further lowercase 'Owner:' line (measured 2026-07-27), on the same v1.1 token-normalisation path as the DESIGN_GAP_REGISTER nine.",
  "docs/DOC_MAP.md is OUTSIDE declared_doc_set and carries 3 factory-promise occurrences (measured 2026-07-27: P2 'joins the P5 factory' and P5 \"the factory's authored lanes\" at line 54, P1 'the factory inherits' at line 56), so they are outside R1's universe entirely. DOC_MAP is both the surface FR-060 obligates and the surface the charter records as rotted in both directions, which makes it the FIRST entry in the v1.1 harvest rather than a footnote.",
  "DESIGN_GAP_REGISTER 'Owner: P5-factory' assignments, Vol2's STATUS block, QA_WATCHING's pillars, REALM_DESIGN's class:realm riders and the PROGRESS LEDGER's 'riders noted' lines are the rest of the declared v1.1 harvest."
 ]
}

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