FACTORY_CONTRACT.md

pipelines/FACTORY_CONTRACT.md

The Factory Contract — the chapter axis

Status: ACTIVE v1.0.5 (minted 2026-07-27, window-plan rank 2.5; revised the same day by the lane-B

critic pass — R4 minted, the S2 rank scan corrected, sixteen ruling anchors repaired; v1.0.2

the story-depth Wave 3 arc-axis wiring 2026-07-29; v1.0.3 the ten-lane pipeline gap audit's

eleven content-class riders 2026-07-29 — this header still read v1.0.1 at v1.0.2, so the version

is now carried in one place and corrected here rather than left as a stale label; v1.0.4 the

twenty-eighth sitting item J4 — FR-082, the ally switch's uncontrolled-behaviour obligation,

with its migration_ledger row 2026-07-30; v1.0.5 the thirty-first sitting's pipeline-hardwiring

mandate 2026-08-03 — FR-083 to FR-087, the five art-asset riders for the concept-art PLATE lane,

which a recursive walk of the machine mirror found to have ZERO representation here against a

50-hit registry positive control). Tier: T99 operational — subordinate to

the CVD and to every tier doc. Machine mirror: docs/factory_contract.json. Tooth: gate 30

factory_contract (harness/check_factory_contract.py). Checklist emitter:

harness/emit_chapter_checklist.py.

This document sets no canon. A rider row is never the source of a rule — it is always a pointer to

one, and the ruling it points at is the authority.

1. What this is, and the failure it ends

Everything in the factory is keyed on a NODE or on a SYSTEM. The chapter-as-obligation axis had no key

at all: nothing in the repo answered "for Ch 23, what must be true?" Rulings reliably became canon and

reliably became gates; they became per-chapter factory behaviour only when a human remembered to edit

a prose bullet list, and that memory measurably failed.

The contract is the single accumulating per-chapter obligation register. One row per RIDER: a thing

that must be true of every chapter, or of every chapter of a class, as a consequence of a ruling. Two

things follow from that shape, and they are the whole design:

hand-maintained list reaches only the chapters someone remembered to edit.

commit. Gate 30 fires the day a promise lands uncited, which is the anti-orphan doctrine made

executable rather than aspirational.

2. The four freeze constraints (verbatim, as landed in the window plan)

These are quoted exactly as they stand in docs/PRE_5090_BUILD_PLAN.md, which is the binding copy —

the window plan, not the charter, is what the factory reads. Gate 30 asserts this block is a verbatim

substring of the plan and that all four cited ranks resolve to real ranks.

Story-depth program freeze constraints (2026-07-27). (1) Rank 2.5 (factory contract) lands

BEFORE ranks 13-17 — the schema-freeze ranks emit rider rows rather than retrofit them.

(2) The arc schema (T0_Arc_Index / T0_Arc_Grid / T0_Arc_Grammar / T0_Promise_Ledger) lands

BEFORE rank 10 — the 264-seed typing pass assigns arc_id at typing time, which turns the

hub-and-spoke gap and the flat-SQ finding into one fix instead of two passes. (3)

T0_Chapter_Index.emotional_register lands BEFORE rank 8 — rank 8's music cue table has no

upstream mood source today. (4) Rank 11 (T0_Persona_Index) lands BEFORE any companion-arc

typing — typing arcs against personas that are about to change types them twice. Source: the

story-depth program charter; constraints are recorded here because the window plan, not the

charter, is what the factory reads.

3. What every chapter build MUST consume

The inputs below are the ruled systems inventory a chapter build reads before it authors anything.

Each is carried by at least one rider, so the list cannot rot independently of the register.

(FR-030).

that make the predecessor's end state this node's start state (FR-043, FR-054).

/spine-chapter manifest loads — recorded as two rows precisely because they have diverged

(FR-056, FR-057), with the 2026-07 combat and voice doctrine still outside the pack (FR-059).

region-as-relational-web reading (FR-044).

lanes read from (FR-035).

pass-2 deep-read batch (FR-031).

and poison lanes, presentation ladder, arena mutation, bonus tiers, imprints, loadout sets, the

balance doctrine, the role taxonomy and the ally stat model (FR-001 to FR-013).

node, every promise the node makes, every promise pointed at it, and how many of those arcs

still carry no declared disposition (FR-058).

4. What every chapter build MUST emit

entailment-verified (FR-047, FR-048, FR-049).

(FR-045, FR-046).

held, every promise pointed at the node paid or explicitly carried, and no arc with an

undeclared disposition resolved — authored at Step 3a-ARC, verified by the critic's arc lens

(FR-068, FR-069).

same commit, and the entry enrolled in the lint and anchors target lists (FR-050, FR-051).

(FR-032, FR-033).

non-kill and pip schema, the festival windows and the region's ambient and SFX rows (FR-034,

FR-036 to FR-039).

(FR-041, FR-042).

audio rows, its interiors as real enterable volume, its water as water, its weather and

time-of-day per beat, its item and material and gather bill, its vendors and the region's diegetic

exchange medium, its journal entries, its quest rows, its personas' schedules and the pooled

buckets its crowds draw on, its icon ids, and its cinematics sized before they are built

(FR-071 to FR-081). All eleven are SEED: they surface in every checklist and gate nothing yet,

and each names the register entry that owns its gap.

against the per-density-class floors by counted rows rather than assertion, Lane-G refused for

every living-tradition or protected subject, a resolvable licence record per generated plate, and

nothing published except through the marketing-clear query (FR-083 to FR-087). All five are SEED:

the plate lane was measurably outside this axis until 2026-08-03, and recording the obligation is

not the same as arming it.

evidence (FR-067).

5. The rider register

Field meanings: rider_id is stable forever; ruling_src points at the RULING, never a summary, as a

doc#anchor pointer gate 30 resolves rather than trusts;

obligation is one imperative sentence, per chapter; lane routes the work; scope is all, a

class: token derived from the live tree, or once; data_home is the registry column, path glob,

anchored doctrine file, the plates:<path>#<column> plate-table column (the concept-art lane's home

is docs/art_boards/PLATES.csv, a live status-bearing table that is not a registries/ registry),

an explicit NONE_YET(rank NN), or NONE_YET(GAP-NNN) naming the

DESIGN_GAP_REGISTER entry that owns the gap when no rank owns it yet; tooth is a gate name, a critic lens, or

NONE(reason); consumption_point is the real place a chapter build picks the rider up; status

is BUILT, PARTIAL, SEED or DEFERRED.

Only BUILT riders bind. SEED riders surface in every checklist and never fail the gate — the

contract records the whole obligation set, and only the proven part is binding. That is the answer to

the ossification objection: a fifty-row register is not a fifty-row bureaucracy unless every row

gates, and most rows do not.

The table below is GENERATED from docs/factory_contract.json by

python harness/emit_chapter_checklist.py --render-contract. Editing it by hand is a gate failure —

gate 30 re-derives it and compares.

<!-- RIDER-TABLE:BEGIN (generated -- python harness/emit_chapter_checklist.py --render-contract) -->

riderlanescopestatusobligationdata hometoothconsumption pointruling
FR-001engine-codeallSEEDBuild 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.registry:T0_Ability_Tree_Registry#unlock_chapter_refNONE(no per-chapter foundry-completeness assertion exists; rank 13's ability data pass mints the unlock/cost/cooldown cells a tooth can read)vol2:W9docs/COMBAT_PROGRAM_ADDENDUM.md#1-the-ability-foundry-the-185-buildout
FR-002engine-codeallSEEDResolve 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.registry:T0_Ability_Tree_Registry#eam_pair_eligibilityNONE(the 21 Layer-B combos are authored data with no runtime; the tooth arms with the W9-tail build)vol2:W9docs/COMBAT_PROGRAM_ADDENDUM.md#2-the-combo-eam-runtime-fusion
FR-003schema-dataallSEEDKeep 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.registry:T0_Rune_Registry#operator_familygate:rarity_firewallvol2:W9docs/COMBAT_PROGRAM_ADDENDUM.md#2b-the-rune-forge-the-player-facing-ability-crea
FR-004schema-dataallSEEDGive 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.registry:T0_Status_Table#status_familyNONE(rank 25 mints the canon status grid, the cure/antidote chains and the status_immunity column a per-chapter tooth would read)plan:rank25docs/COMBAT_PROGRAM_ADDENDUM.md#3-the-status-effect-framework
FR-005engine-codeallSEEDWire 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.registry:T0_Status_Table#cure_material_refsNONE(the healing verb family has no runtime; the tooth arms with the W9 tail and the herbalism cure loops)vol2:W-LW3docs/COMBAT_PROGRAM_ADDENDUM.md#4-the-healing-poison-lanes
FR-006art-assetallSEEDCarry 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.registry:T0_Ability_Tree_Registry#presentation_tier_refgate:registry_extensionsplan:rank13docs/COMBAT_PROGRAM_ADDENDUM.md#5-the-proficiency-presentation-ladder-new-system
FR-007engine-codeclass:bossSEEDGive 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.registry:T0_Environment_Grammar_Registry#attack_verbsNONE(the environment-grammar registry holds 2 rows; rank 7 authors the EG_ rows for every slice combat surface)plan:rank7docs/COMBAT_PROGRAM_ADDENDUM.md#6-the-arena-mutation-framework-boss-environmenta
FR-008schema-dataallPARTIALGive 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.registry:T0_Bonus_Pool_Registry#pool_idgate:build_spaceplan:rank14docs/COMBAT_PROGRAM_ADDENDUM.md#7-the-ability-progression-bonus-system-ruled-jos
FR-009schema-dataallPARTIALRoll 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.registry:T0_Imprint_Affix#rarity_token_mingate:rarity_firewallplan:rank14docs/COMBAT_PROGRAM_ADDENDUM.md#8-the-gear-imprint-rune-lane-ruled-josh-2026-07
FR-010schema-dataallPARTIALLet 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.registry:T0_Loadout_Set_Definition#switch_venue_classgate:build_spaceplan:rank14docs/COMBAT_PROGRAM_ADDENDUM.md#9-build-agency-selectable-bonuses-loadout-sets-s
FR-011qa-teethallPARTIALKeep 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.registry:T0_Bonus_Pool_Registry#pick_classgate:build_spaceplan:rank14docs/COMBAT_PROGRAM_ADDENDUM.md#10-universal-pools-the-aaaaa-balance-doctrine-ru
FR-012schema-dataallPARTIALTag this chapter's new build components against the role taxonomy so the build-space sweeps can measure viability breadth per role axis.registry:T0_Role_Axis_Registry#role_axis_tokengate:ally_buildplan:rank14docs/COMBAT_PROGRAM_ADDENDUM.md#11-the-endgame-build-role-taxonomy-companion-fam
FR-013schema-dataallPARTIALGive 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.registry:T0_Familiar_Bond_Ability#grants_classgate:ally_buildplan:rank14docs/COMBAT_PROGRAM_ADDENDUM.md#12-companion-familiar-stat-builds-the-ai-intelli
FR-014engine-codeclass:bossSEEDGive this chapter's bosses per-part hitzones with damage-type multipliers and break thresholds, so the monster body itself is the tactical surface.NONE_YET(rank 16)NONE(rank 16 mints the hitzone-part rail the tooth would read)plan:rank16docs/DESIGN_GAP_REGISTER.md#10-per-part-hitzones-part-breaks
FR-015schema-dataclass:bossSEEDGive 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.registry:T0_Boss_Attack_Rail#recovery_secondsgate:counter_class_coverageplan:rank16docs/DESIGN_GAP_REGISTER.md#11-boss-punish-recovery-windows-as-data
FR-016engine-codeclass:bossSEEDGive every boss arena in this chapter an unlockable shortcut back to the nearest recharge well, so deep progress converts into permanent convenience.NONE_YET(rank 7)NONE(the shortcut clause is a W-SPACE grammar affordance with no data column today)plan:rank7docs/DESIGN_GAP_REGISTER.md#12-shortcut-loopback-clause-in-the-arena-grammar
FR-017engine-codeallSEEDSplit 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.registry:T0_Creature_Roster#spawn_rateNONE(the split is a runtime model; the community-ripple half is persona-gated on rank 11)vol2:W9docs/DESIGN_GAP_REGISTER.md#13-combatant-respawn-model-split-by-class
FR-018engine-codeallSEEDDraw this chapter's creature movesets from the shared windup-active-recovery attack library with per-creature tag-driven variety, never one reused pattern.registry:T0_Boss_Attack_Rail#attack_kindNONE(variety is measured per creature; the rail holds 0 rows until rank 16)vol2:W9docs/DESIGN_GAP_REGISTER.md#14-telegraphed-attack-moveset-library-per-creatu
FR-019engine-codeallSEEDWire at least one predator-prey clash into this chapter's crossroads from the fauna substrate the region already carries.registry:T0_Creature_Roster#trophic_roleNONE(no runtime reads predator_prey_relationships today)vol2:W-LW3docs/DESIGN_GAP_REGISTER.md#15-ecology-clashes-turf-wars-at-arena-crossroads
FR-020engine-codeallSEEDGive each arena in this chapter one or two diegetic hazards the player can turn on a boss.registry:T0_Environment_Grammar_Registry#tactical_affordance_classNONE(rank 7 authors the EG_ rows; the affordance count per arena is checkable once they exist)plan:rank7docs/DESIGN_GAP_REGISTER.md#16-environmental-combat-affordances-per-arena
FR-021canon-authorallSEEDGive this chapter an earned way to read an enemy weakness through shape and behaviour tells and the clue lane, never a stat sheet.NONE_YET(rank 17)NONE(rank 17 completes the element matrix and the per-enemy weaknesses the read channel exposes)plan:rank17docs/DESIGN_GAP_REGISTER.md#17-diegetic-weakness-read-channel
FR-022engine-codeallSEEDLet 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.registry:T0_Familiar_Bond_Ability#command_permissionNONE(the familiar combat wave is post-slice)vol2:W9docs/DESIGN_GAP_REGISTER.md#18-familiar-summon-as-the-diegetic-easing-lever
FR-023engine-codeallSEEDGive this chapter's populated areas the immediate consequence loop — witness, local alarm, response, decay — feeding the antagonist-network escalation.NONE_YET(rank 30)NONE(no witness/alarm worldstate variable exists today)vol2:W-LW3docs/DESIGN_GAP_REGISTER.md#19-local-alarm-consequence-loop-wanted-analog
FR-024canon-authorallSEEDWrite 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.path:docs/spine/player_strings/*.csvcritic:does a person say thisskill:normalize-doc#rubricdocs/NATURAL_VOICE_DOCTRINE.md#1-the-voice-rule-every-player-facing-line-sounds
FR-025canon-authorallSEEDGround 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.registry:T0_Voice_Registry#voice_substratecritic:does this carry the cultureskill:normalize-doc#rubricdocs/NATURAL_VOICE_DOCTRINE.md#2-the-cultural-register-names-and-speech-carry-t
FR-026canon-authorallSEEDMake 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.path:build/spine_rows/CH_*/clues.csvNONE(solvability is proven by the QA loop's attempt budget; no static assertion can prove it)plan:rank29docs/NATURAL_VOICE_DOCTRINE.md#3-clues-mysterious-is-allowed-unfun-is-not
FR-027canon-authorallPARTIALRoute 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.doctrine_only:docs/NATURAL_VOICE_DOCTRINE.mdgate:no_dead_endskill:spine-chapter#Step 3adocs/NATURAL_VOICE_DOCTRINE.md#4-the-difficulty-routing-rule-ruled
FR-028canon-authorclass:bossSEEDName 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.registry:T0_Boss_Encounter_Registry#boss_namecritic:does this carry the cultureNONE_YET(rank 11)docs/NATURAL_VOICE_DOCTRINE.md#2-the-cultural-register-names-and-speech-carry-t
FR-029canon-authorallSEEDAuthor the quest-giver conversations this chapter's quest log then remembers — the NPC dialogue lane is per chapter, not a one-time pass.NONE_YET(rank 11)critic:does a person say thisNONE_YET(rank 11)docs/NATURAL_VOICE_DOCTRINE.md#5-execution-the-next-session-s-first-canon-lane
FR-030canon-authorallBUILTDrive this chapter's build from its spine entry and its RCM section — those two are the canon input, and everything downstream cites them.path:docs/spine/CH_*.mdgate:lintp5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-031canon-authorallBUILTAcquire 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.doctrine_only:docs/BOOK_ACQUISITION.mdNONE(acquisition is an action in the world; the deep-read batch is contracted in DEEP_BOOK_PROCESSING_CONTRACT section 4.3)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-032engine-codeallBUILTBuild this chapter's region through the parameterized terrain and staging drivers — bbox, terrain fetch, landscape import with a nonzero weightmap assertion, dress, stage.doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.mdNONE(the drivers and their assertions live in the game repo, which this gate never reaches across)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-033engine-codeallBUILTRun 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.doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.mdNONE(the slope assertion and navmesh continuity teeth are game-repo side)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-034schema-dataallPARTIALType this chapter's seeds through the housing ledger so every seed has a home, an owner and a route.registry:T0_Quest_Seed_Registry#chapter_anchorgate:seed_housingp5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-035schema-dataallSEEDFlesh a complete persona on every entity this chapter surfaces — the 13-field persona is what the natural-voice and living-world lanes read from.NONE_YET(rank 11)gate:entity_taxonomyp5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-036canon-authorallPARTIALAuthor 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.path:docs/spine/player_strings/*.csvgate:reveal_disciplinep5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-037canon-authorallPARTIALAuthor this chapter's discovery clue rows per encounter from the legal-source enum — a clue is legibility, never a gate.path:build/spine_rows/CH_*/clues.csvNONE(the clue surface has no registry home until rank 29 re-homes it into DT_Clue)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-038schema-dataclass:bossPARTIALPopulate 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.registry:T0_Boss_Encounter_Registry#win_conditiongate:counter_class_coveragep5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-039canon-authorallPARTIALAuthor this chapter's festival windows and the region's ambient and SFX rows as part of the staging pass, not as a later sweep.registry:T0_Festival_Registry#chapter_rangeNONE(no per-chapter festival or ambient coverage assertion exists; rank 8 authors the cue table)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-040art-assetallSEEDRun this chapter's asset passes as drop-ins over the asset-path contract, so a generated surface replaces a placeholder without touching canon data.registry:T0_Vril_Site_Registry#mesh_pipeline_typeNONE(asset completeness is a post-5090 window check)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-041qa-teethallSEEDRun the QA fleet loop on this chapter to the same zero-bug bar before it is called shippable.doctrine_only:docs/ROADMAP_POST_5090_TO_SHIP.mdNONE(the P3 loop is post-5090; rank 1 authors the kill-test and benchmark harness set)p5:machinerydocs/ROADMAP_POST_5090_TO_SHIP.md#machinery-it-runs-on-cited-the-factory-is-the-ph
FR-042qa-teethallPARTIALScore this chapter on all five scorecard row classes — content budget, structure completeness, test coverage, care and reveal, and rider completeness.NONE_YET(rank 1)gate:factory_contractp5:scorecarddocs/proposals/STORY_DEPTH_PROGRAM.md#4-3-the-artifact-docs-factorycontract-md-docs-fa
FR-043canon-authorallBUILTAssemble 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.path:harness/enrich.pyNONE(the pack's completeness is the author's precondition and is proven by Step 1 running clean)skill:spine-chapter#Step 1.claude/skills/spine-chapter/SKILL.md#step-1-assemble-the-pack-the-single-grounded-con
FR-044canon-authorallBUILTRun 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.doctrine_only:docs/proposals/SIGNIFICANCE_LENSES.mdcritic:Significance-lens coverageskill:spine-chapter#Step 3a.claude/skills/spine-chapter/SKILL.md#step-3a-the-significance-lens-pass-run-before-au
FR-045canon-authorallBUILTDeliver 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.path:docs/spine/CH_*.mdgate:layer_registerskill:spine-chapter#Step 3.claude/skills/spine-chapter/SKILL.md#standing-rules-bind-every-step-not-just-the-one
FR-046canon-authorallBUILTHold 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.path:docs/spine/CH_*.mdgate:reveal_disciplineskill:spine-chapter#Step 3.claude/skills/spine-chapter/SKILL.md#the-20-block-order-author-top-to-bottom
FR-047canon-authorallBUILTAnchor every load-bearing claim in this chapter to a resolvable source and enrol the entry in the anchors target list in the same commit.path:docs/spine/CH_*.mdgate:anchorsskill:spine-chapter#Step 5.claude/skills/spine-chapter/SKILL.md#step-5-lock-scatter-baseline-enrollment-ssbl-ste
FR-048canon-authorallBUILTWrite 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.path:docs/spine/CH_*.mdgate:lintskill:spine-chapter#Step 5.claude/skills/spine-chapter/SKILL.md#step-3-author-docs-spine-chnn-md-to-the-v2-5-anc
FR-049qa-teethallBUILTEntailment-verify this chapter's anchored prose claims — a resolving anchor that does not support the sentence is invented canon the anchor gate cannot see.path:harness/extract_claims.pycritic:Entailment-verifyskill:spine-chapter#Step 4.claude/skills/spine-chapter/SKILL.md#step-4-fresh-context-critic-gate-ssbl-step-10
FR-050schema-dataallBUILTScatter this chapter's structured fields to the live registries with the csv module and refresh the fidelity baseline in the same commit.registry:T0_Chapter_Index#spine_statusgate:fidelityskill:spine-chapter#Step 5.claude/skills/spine-chapter/SKILL.md#step-5-lock-scatter-baseline-enrollment-ssbl-ste
FR-051qa-teethallBUILTEnrol this chapter's entry in both the lint and the anchors target lists — an entry absent from them is unguarded canon.path:harness/gates_config.jsongate:index_freshnessskill:spine-chapter#Step 5.claude/skills/spine-chapter/SKILL.md#step-5-lock-scatter-baseline-enrollment-ssbl-ste
FR-052canon-authorallBUILTSet 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.doctrine_only:docs/NAMING_METHOD.mdcritic:NAMING_METHODskill:spine-chapter#Step 3.claude/skills/spine-chapter/SKILL.md#standing-rules-bind-every-step-not-just-the-one
FR-053canon-authorclass:hard_lineBUILTPre-draft the Stage-2 canonical-question set before authoring a hard-line chapter, and carry the cultural-depiction tier through to the critic.registry:T0_Chapter_Index#hard_line_statusgate:care_scopeskill:spine-chapter#Step 2.claude/skills/spine-chapter/SKILL.md#step-2-hard-line-chapters-only-pre-draft-the-sta
FR-054canon-authorallBUILTStart this chapter from the predecessor's end state on all seven carry-forward fields — age, companions, familiars, homes, found family, identity hiding, path states.registry:T0_Chapter_Index#identity_hiding_status_startgate:spine_graphenrich:CONTINUITY_FIELDS.claude/skills/spine-chapter/SKILL.md#step-0-preflight-ssbl-steps-1-2
FR-055qa-teethclass:rr_nodeBUILTClose 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.path:docs/spine/range_reviews/*.mdNONE(the review is a judgment pass; its enrolment rides the lint and anchors target lists)skill:spine-chapter#Range Review.claude/skills/spine-chapter/SKILL.md#range-review-every-10-chapters-gating
FR-056spec-docallBUILTHand this chapter's author the design-system docs through the pack, not through a human remembering to name them.path:harness/enrich.pygate:factory_contractenrich:SYSTEM_DOCSdocs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix
FR-057spec-docallSEEDCarry the enhancement-program docs the skill manifest loads into the pack as well, so the canon surface and the pack surface cannot diverge.path:harness/enrich.pygate:factory_contractenrich:SYSTEM_DOCSdocs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix
FR-058schema-dataallBUILTShow 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.registry:T0_Arc_Grid#progression_stagegate:arc_continuityenrich:ARC_PACK_SOURCESdocs/proposals/STORY_DEPTH_PROGRAM.md#4-5-the-single-highest-leverage-change-in-the-en
FR-059spec-docallSEEDCarry 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.path:harness/enrich.pygate:factory_contractenrich:SYSTEM_DOCSdocs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix
FR-060spec-doconceSEEDPoint every factory-bearing doc's DOC_MAP consumer column at rider ids rather than restating its wiring in prose.path:docs/DOC_MAP.mdgate:factory_contractNONE_YET(rank 2.5)docs/proposals/STORY_DEPTH_PROGRAM.md#4-2-every-dangling-wire-with-its-fix
FR-061spec-docallSEEDHold 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.NONE_YET(rank 19)NONE(the cut-class schema is minted by the presentation-doctrine brief at rank 19)plan:rank19docs/spine/DECISIONS_PENDING_JOSH.md#fork-a-ruled-same-sitting-recorded-here-per-the
FR-062engine-codeallSEEDGive 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.registry:T0_Worldstate_Variables#variable_idNONE(the defeat-axis brief is Josh-pending in the Vol2 decisions register)vol2:D-DEFEAT-AXISdocs/spine/DECISIONS_PENDING_JOSH.md#fork-b-shape-b-staged-adopted-with-josh-s-reshap
FR-063canon-authorallSEEDBuild this chapter's travel as playable navigable segments — geography accurate, distance compressed, and the important crossings staged as real dungeons.NONE_YET(rank 21)NONE(rank 21 mints the route-leg data a traversal tooth can read)plan:rank21docs/spine/DECISIONS_PENDING_JOSH.md#fork-c-tiered-traversal-adopted-with-josh-s-desi
FR-064schema-dataallSEEDType this chapter's inbound and outbound seams T0 to T3 so every crossing declares its treatment.NONE_YET(rank 21)gate:spine_graphplan:rank21docs/spine/DECISIONS_PENDING_JOSH.md#fork-c-tiered-traversal-adopted-with-josh-s-desi
FR-065spec-doconceBUILTDeclare 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.path:docs/factory_contract.jsongate:factory_contractgate:factory_contractdocs/proposals/STORY_DEPTH_PROGRAM.md#4-4-the-tooth-gate-30-factorycontract-three-self
FR-066qa-teethallBUILTDerive this chapter's build checklist from the contract rather than hand-typing it, so a new rider reaches every future chapter automatically.path:harness/emit_chapter_checklist.pygate:factory_contractgate:factory_contractdocs/proposals/STORY_DEPTH_PROGRAM.md#4-3-the-artifact-docs-factorycontract-md-docs-fa
FR-067qa-teethallSEEDWrite this chapter's consumption manifest at build time — rider id to artifact path, verdict and evidence.NONE_YET(rank 1)NONE(the manifest is written by the build; the scorecard's fifth row class arms with it)NONE_YET(rank 1)docs/proposals/STORY_DEPTH_PROGRAM.md#4-3-the-artifact-docs-factorycontract-md-docs-fa
FR-068canon-authorallBUILTAdvance 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.registry:T0_Arc_Grid#stage_rolegate:arc_continuityskill:spine-chapter#Step 3a-ARCdocs/proposals/STORY_DEPTH_PROGRAM.md#wave-3-the-authoring-input-highest-leverage-per
FR-069qa-teethallBUILTVerify 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.registry:T0_Promise_Ledger#edge_statecritic:Arc continuity and promise disciplineskill:normalize-doc#rubricdocs/proposals/STORY_DEPTH_PROGRAM.md#wave-3-the-authoring-input-highest-leverage-per
FR-070schema-dataonceBUILTAuthor 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.registry:T0_Arc_Grid#derivation_sourcegate:arc_continuityskill:arc-pass#Step 3docs/proposals/STORY_DEPTH_PROGRAM.md#2-5-the-strongest-objection-and-the-structural-a
FR-071canon-authorallSEEDAuthor 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.registry:T0_SFX_Registry#chapter_anchorNONE(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)plan:rank8docs/DESIGN_GAP_REGISTER.md#gap-141-critical-audio-sfx-ambience-t0sfxregistr
FR-072art-assetallSEEDBuild 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.NONE_YET(GAP-142)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)NONE_YET(GAP-142)docs/DESIGN_GAP_REGISTER.md#gap-142-critical-world-terrain-interiors-the-wor
FR-073engine-codeallSEEDRepresent 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.NONE_YET(GAP-142)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)plan:rank27docs/DESIGN_GAP_REGISTER.md#gap-142-critical-world-terrain-interiors-the-wor
FR-074schema-dataallSEEDDeclare 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.registry:T0_Region_Index#weather_cycle_profileNONE(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)plan:rank30docs/DESIGN_GAP_REGISTER.md#gap-134-critical-cross-lane-factory-contract-the
FR-075schema-dataallSEEDName 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.registry:T0_Equipment_Registry#canonical_chapter_acquisitionNONE(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)plan:rank14docs/DESIGN_GAP_REGISTER.md#gap-138-critical-items-economy-the-item-economy
FR-076schema-dataallSEEDDeclare 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.NONE_YET(GAP-138)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)plan:rank30docs/DESIGN_GAP_REGISTER.md#gap-138-critical-items-economy-the-item-economy
FR-077canon-authorallSEEDWrite 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.NONE_YET(GAP-135)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)NONE_YET(GAP-135)docs/DESIGN_GAP_REGISTER.md#gap-135-critical-quest-dialogue-runtime-ui-ux-th
FR-078canon-authorallSEEDDecompose 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.registry:T0_Quest_Definition_Registry#chapterNONE(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)plan:rank15docs/DESIGN_GAP_REGISTER.md#gap-135-critical-quest-dialogue-runtime-ui-ux-th
FR-079schema-dataallSEEDGive 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.NONE_YET(GAP-139)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)plan:rank11docs/DESIGN_GAP_REGISTER.md#gap-139-critical-npc-simulation-rank-11-s-person
FR-080art-assetallSEEDGive 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.NONE_YET(GAP-144)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)plan:rank13docs/DESIGN_GAP_REGISTER.md#gap-144-critical-ui-ux-the-player-facing-ui-has
FR-081art-assetallSEEDSize 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.registry:T0_Scene_Spec_Registry#chapterNONE(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)plan:rank6docs/DESIGN_GAP_REGISTER.md#gap-140-critical-animation-cinematics-the-moving
FR-082schema-dataallSEEDGive 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.registry:T0_Ally_Behavior_Policy#autonomy_bandgate:ally_buildplan:rank22docs/COMBAT_PROGRAM_ADDENDUM.md#13-the-ff7r-switch-direct-ally-control-the-chara
FR-083art-assetallSEEDKey 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.plates:docs/art_boards/PLATES.csv#canon_idgate:art_pointersart:3.2 The path form and the canon-id lawdocs/CONCEPT_ART_PRODUCTION_PROGRAM.md#3-2-the-path-form-and-the-canon-id-law
FR-084art-assetallSEEDDeliver 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.plates:docs/art_boards/PLATES.csv#density_class_idNONE(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)art:6. PRIORITY ORDER FOR THE PROLOGUEdocs/CONCEPT_ART_PRODUCTION_PROGRAM.md#3-2e-the-stage-discipline-four-candidates-are-on
FR-085art-assetallSEEDRefuse 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.plates:docs/art_boards/PLATES.csv#care_tiergate:boardsart:7.3 EXHAUSTIVEdocs/proposals/CONCEPT_ART_PROGRAM.md#4-4-where-the-human-and-josh-sit
FR-086art-assetallSEEDWrite 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.plates:docs/art_boards/PLATES.csv#generation_licence_refgate:generation_lifecycleart:5.3 What an approval becomesdocs/CONCEPT_ART_PRODUCTION_PROGRAM.md#5-3-what-an-approval-becomes
FR-087art-assetallSEEDPublish 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.plates:docs/art_boards/PLATES.csv#directional_labelgate:boardsart_boards:The site is a QUERYdocs/spine/DECISIONS_PENDING_JOSH.md#the-concept-art-site-is-public-marketing-no-acce

<!-- RIDER-TABLE:END -->

6. The per-chapter checklist — derived, never hand-typed

python harness/emit_chapter_checklist.py CH_NN emits the rider set filtered by scope, ordered by

lane, split into binding and advisory, each with an evidence slot. This is the artifact that answers

"for Ch NN, what must be true?" and it is the brief a chapter-build agent is handed.

Scope classes are derived from the live tree, never from a re-typed list: class:slice is the ruled

Prologue-to-Ch-13 vertical slice, class:hard_line and class:boss come from T0_Chapter_Index,

class:realm from T0_Region_Index node kinds, and the two care classes are parsed out of

harness/enrich.py so the care vocabulary has exactly one home. A chapter that gains a boss gains the

boss riders with no edit anywhere — though as measured on 2026-07-27 all 79 chapter rows already carry

a primary_boss_id, so class:boss currently selects the same set as all and nothing is left to

gain one. The deriver is live and correct; the cardinality is recorded here and in the json so a

future reader does not mistake that class for a filter that is currently narrowing anything.

7. The consumption manifest, written by the build

build/factory/CH_NN.json maps rider_id to artifact path, verdict and evidence. The P5 per-chapter

scorecard's four row classes — content budget, structure completeness, test coverage, care and reveal

— gain a fifth: rider completeness.

8. The tooth — gate 30 factory_contract

Six rulers plus a vacuity guard, all deterministic and offline. Severity follows status: a BUILT

rider fails, a PARTIAL rider fails on its home and warns on its consumption, a SEED or DEFERRED

rider warns. R1 is the exception — an uncited promise is a FAIL at any status, because losslessness is

the property the whole register rests on.

every promise-phrase occurrence is cited too. The primary net is structured: an OWNER: line is a

machine token an author cannot paraphrase away. The phrase net is the secondary catch for landings

that promise per-chapter behaviour with no OWNER: line at all, and it is reviewed at every wave

boundary — a phrase-list addition is a one-line change, never a redesign.

glob is non-empty, or the doctrine file exists, or it is NONE_YET with a live window-plan rank

cited or a real DESIGN_GAP_REGISTER entry id cited. The register form exists because the rank

form rots silently: FR-029 cited rank 11 for a dialogue home that rank does not deliver, so the

rider read legitimately-pending forever while this ruler stayed green. Every tooth names a registered gate, a critic lens that appears on a declared critic

surface, or NONE(reason) with a real reason — a lens that lives only in a doctrine file is run by

whichever agent happens to know it, which is the same rot in a different costume.

cites the rider's subject through its declared citation token. A BUILT rider must declare a

citation token that resolves.

either as a unit head under the anchor rule or as the slug of the real line the rider cites. This

ruler exists because section 1 rests the whole design on a rider row being a pointer, and nothing

checked the pointer — sixteen anchors were unreachable at mint, nine of them longer than the

48-character truncation the rule itself declares, so no input could ever have produced them. R4 is

WARN-scoped at v1 and reports the pointers that resolve to a cited line rather than a unit head

under DECLARED NOT-ARMED on every run.

the json. The human view can never drift from the machine view.

2.5 is greppable there, and every rank the four constraints cite resolves to a real rank in the

window plan. The scan is case-insensitive and decimal-aware, and it reads the whole block rather

than its first paragraph — constraints (1) and (4) open with a capital Rank, so a case-sensitive

scan saw neither, and rank 11 was asserted by nothing while looking exactly like a clean check.

declared doc set yields zero OWNER: lines, or if it matches zero promise phrases — a regex that

can no longer match reports zero and looks exactly like a clean repo.

Every ruler ships must-fire and must-not-fire fixtures, runnable with --self-test, which the gate

also runs on every real invocation and exits 2 if a ruler rotted.

DECLARED NOT-ARMED (2026-08-03): R2 does not yet resolve the plates: home form. R2's

data_home branches are hardcoded in harness/check_factory_contract.py, so the five art riders

FR-083 to FR-087 are reported as an *unrecognised data_home form* at WARN — SEED severity, so gate 30

stays green — until a prefix branch plus its must-fire fixture lands there. The form is declared in

docs/factory_contract.json under data_home_kinds, and it is recorded this way on purpose: the

alternative was to downgrade the five riders to path:docs/art_boards/PLATES.csv, which resolves the

FILE while leaving the COLUMN unchecked and would have read green without checking anything. A WARN

that names the exact one-line arming step is the honest state; a green that checks nothing is not.

9. The migration ledger — where v1 came from

Losslessness claim for the critic: every OWNER: line and every promise-phrase occurrence in the

declared doc set maps to at least one rider, and every rider cites a real ruling anchor. The

measurements below were taken on 2026-07-27 against the live tree.

sourcemeasuredriders
docs/COMBAT_PROGRAM_ADDENDUM.md OWNER: lines13FR-001 to FR-013
docs/DESIGN_GAP_REGISTER.md OWNER: lines10FR-014 to FR-023
docs/NATURAL_VOICE_DOCTRINE.md5 sectionsFR-024 to FR-029
docs/ROADMAP_POST_5090_TO_SHIP.md P5 machinery (the BUILT baseline)13FR-030 to FR-042
.claude/skills/spine-chapter/SKILL.md canon-side obligations13FR-043 to FR-055
the pack riders including the divergence5FR-056 to FR-060
the ruled forks A, B and C including seam typing4FR-061 to FR-064
the charter applied to itself3FR-065 to FR-067
the story-depth Wave 3 arc-axis wiring (measured 2026-07-29)3FR-068 to FR-070
the ten-lane pipeline gap audit (measured 2026-07-29; register v1.8 GAP-133 to GAP-207)11FR-071 to FR-081
docs/COMBAT_PROGRAM_ADDENDUM.md section 13 (twenty-eighth sitting item J4)1FR-082
the four-lane art compatibility pass (measured 2026-08-03; docs/CONCEPT_ART_PRODUCTION_PROGRAM.md §3.2 + docs/art_boards/README.md)5FR-083 to FR-087

Known secondary surfaces, declared rather than silently widened: entries 1 to 9 of

docs/DESIGN_GAP_REGISTER.md use a lowercase Owner: token (9 lines) instead of the machine token,

and they sit 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. docs/ROADMAP_POST_5090_TO_SHIP.md carries one more

lowercase Owner: line, measured the same day.

Two surfaces outside the declared doc set carry live factory promises and are named here rather than

silently omitted. docs/DOC_MAP.md carries three promise-phrase occurrences — "joins the P5 factory"

and "the factory's authored lanes" and "the factory inherits" — and it is both the surface FR-060

obligates and the surface the charter records as rotted in both directions, so it is the first entry

in the v1.1 harvest. The rest of that harvest: Vol2's status block, QA_WATCHING's pillars, the

realm-design class:realm riders, and the progress ledger's "riders noted" lines, which are the most

fragile home of all.

10. Standing rules for anyone landing work

commit. A promise without a row is an orphan by construction.

a per-chapter checklist.

names something that runs, and its consumption_point is a place that actually cites it.

commit or ledger entry that made it true in the evidence field.

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