STORYDEPTH_FACTORY_WIRING_AUDIT_2026-07-27.md

pipelines/STORYDEPTH_FACTORY_WIRING_AUDIT_2026-07-27.md

THE FACTORY WIRING AUDIT + THE FACTORY CONTRACT

Read-only analysis, 2026-07-27. Axis: answer Josh's "how's everything been getting wired up here

so everything we've worked on makes it into the factory?" with evidence, then design the missing

artifact. Every claim below carries the file + line I read. Absence claims are positive-controlled

(the search is proven able to find something else in the same file before "zero" is reported).

---

PART 0 — THE DIRECT ANSWER

There IS a wiring chain, and it is mostly real. It has seven links:

1. RULING RECORDEDdocs/spine/DECISIONS_PENDING_JOSH.md (the ruled block at the head) and

the ▶ PROGRESS LEDGER in docs/PRE_5090_BUILD_PLAN.md L99+.

2. DOCTRINE DOC — a named home carrying the shape (COMBAT_PROGRAM_ADDENDUM.md,

NATURAL_VOICE_DOCTRINE.md, proposals/PRESENTATION_DOCTRINE.md…).

3. CANON HOME — the tier doc section and/or the registry rows the ruling becomes.

4. TOOTH — a gate in harness/gates_config.json (29 today).

5. SCHEDULED WORK — a rank in the ▶ THE PRE-5090 WINDOW PLAN (build plan L50-97).

6. DISCOVERABILITY — a docs/DOC_MAP.md row with a named consumer.

7. PER-CHAPTER CONSUMPTION — the thing that makes chapter N+1 inherit it automatically.

Links 1-6 are strong and were exercised repeatedly this session. **Link 7 is the broken one, and

it is the one Josh's question is actually about.** There are three separate per-chapter consumption

surfaces in this repo, they carry different lists, and nothing reconciles them:

L73-79, the block table L90-102, the Step-11 acceptance checklist L142-152) + the enrich pack

(harness/enrich.py SYSTEM_DOCS L54-60).

and docs/ROADMAP_POST_5090_TO_SHIP.md §P5 "Machinery it runs on" L395-421.

A ruling lands on whichever surface its author happened to be standing on. The addendum's

OWNER: lines are the closest thing to a reconciliation layer that exists — twelve sections, each

ending in an explicit owner ("OWNER: … + the factory per chapter", COMBAT_PROGRAM_ADDENDUM.md

L20, L52, L64, L86, L100, L132, L146, L173, L196, L221, L257) — but they are prose in a

proposal-tier doc that no tool reads.

**The honest one-line answer to Josh: rulings reliably become CANON and reliably become GATES;

they become per-chapter FACTORY BEHAVIOUR by a human remembering to edit a prose bullet list, and

this session that memory failed at least four times.**

---

PART 1 — THE PER-LANDING AUDIT

Grades: COMPLETE (all seven links, or the link is genuinely N/A) · PARTIAL (canon+tooth

landed, consumption or schedule missing) · DANGLING (a promise made in a doc tail that was

never applied anywhere).

1. The §§7-12 schema mint — PARTIAL (strongest wire of the session)

banner at L3-12).

(T1_Combat_System_Spec +4 sections; T1_Ability_Tree §5H/§5I/§14A; T1_Integrity_Paths §8.11.6-.9;

T1_Tier_C_MMO_Spec §8.7-.9 — ledger 2026-07-27a, build plan L265-287). Data homes minted at

a1a47c2: thirteen registries (registries/T0_Bonus_Pool_Registry [DRAFT v0.1] … verified on

disk; 55 registry dirs total), fk_spec 21→34 edges, WS_043-046.

ally_build), roster 25→29, every tooth fixtured (harness/gates_config.json _note).

factory machinery list gains: 'the ability foundry per chapter's unlock set; the presentation

ladder's tiered variants per the DR-2 contract; per-boss arena-mutation rows.'"* That edit was

never made — see DANGLING D1 below. ROADMAP_POST_5090_TO_SHIP.md contains zero occurrences of

"foundry", "presentation ladder", "arena-mutation" (positive control: the same grep finds

"ladder" at L283 and "voice" at L27/219/245, so the search works).

_deferred.item-ally-extension-columns (ledger 27f, build plan L180-185) — that is the right

behaviour and should be the model.

2. The natural-voice rewrite pass — PARTIAL

re-authored, 5 authors + 5 four-lens critics, GO-WITH-FIXES ×5, all fixes applied (ledger 27e,

build plan L187-206; commit ab5d32c).

factory checklist + adds two critic lenses."*

— not regexable" (§5 final bullet). Acceptable; but that makes the consumption link the ONLY

thing carrying it forward.

(a) P5 was never amended: ROADMAP_POST_5090_TO_SHIP.md has no "natural voice" string

(positive-controlled above).

(b) The two new critic lenses ("does a person say this?" / "does this carry the culture?") are

not in .claude/skills/normalize-doc/SKILL.md nor in /spine-chapter. The only repo-wide

hit for the phrase family is a comment in harness/check_build_space.py L603

("-- the natural-voice pass owns these words"). The lenses exist as prose in a doctrine file

and in the memory of the session that ran them.

no mechanism that hands it the doctrine.**

3. The presentation doctrine — PARTIAL (and correctly parked on Josh)

the CUT POLICY per-beat-class table, CP-0 precedence, diegetic transition covers.

CN5.2 — DECISIONS_PENDING_JOSH.md L66-69). Three forks still open (one-shot camera, defeat cut,

loading-screen standing) and correctly briefed with options+recommendation+objection.

LS_TPL_* templates, CN-4/CN-7/CN-8, U11.26/U11.22/PG-2, CF-10/SL-1, gap-register #29).

owner (32 rows with an off-enum scene_type and no template; one off-vocabulary anchor_type;

chapter_bridging_cinematic with zero executed rows) — those are per-chapter obligations with

no per-chapter home. Nothing says "every chapter's scene rows take a template and the precedence

rule is applied."

Josh, COMBAT_PROGRAM_ADDENDUM.md L75-87 + L110-113) is a *different* presentation rider and is

the one the P5 amendment was supposed to carry. It has a data seam named (presentation_tier_ref

on the extension rail) but that column is still on the residue list (handoff L48).

4. Seam typing (Fork C tiered traversal) — DANGLING

crossings, the West Texas principle, important crossings become staged/open dungeons, all 78

seams typed T0-T3 on SeamlessTravel, the screen survives only as the honest failure state).

all UNTRACKED at audit time (git status).

movement, DOC_MAP L93) was not amended.

only as authored prose in docs/spine/transitions/TRANSITIONS_*.md (7 files, DOC_MAP L253-260).

78 seams T0-T3) + the CH_05-belt prototype enter the window plan"* (L77). The ranked 30 was not

edited; rank 21 covers *between-site* traversal (intra-region legs), not the map seams.

all 79 nodes, with no doctrine doc, no column, no rank, and no tooth.

5. The composure routing table — COMPLETE

27h, build plan L130-132).

ability_class values, source_ref per row, the 8th standalone character-engagement node

positive-controlled.

This is what a complete wire looks like.

6. The five trade pins — COMPLETE, with one living-source residue

CLOSURE ("The gate CLOSES at the 2026-07-27 Phase 6 trade-pin batch") with all five pins + the

two-trades-per-chapter rationale; the Mining continent amendment carried inline at §3.2 with full

provenance; T0_Trade_Registry modern_home_chapter verified populated for all ten trades

(TRADE_01→Ch_59, 02→Ch_59, 03→Ch_60, 05→Ch_61, 06→Ch_60, 08→Ch_61, no placeholders left);

Chapter_Index reciprocal cells + nine stale spine lines refreshed.

(Animal Communication), 63 (Blacksmithing), 71 (Alchemy), 75 (Tailoring), 83 (Engineering) still

read *"Modern home base Ch 59-65 continental revisit …, specific chapter at Phase 6 spine cascade

pinning."* Only Mining (L59) got its inline amendment. A future agent reading §3 alone sees an

open gate that §3.11 closed — exactly the "a stale name left in a source doc makes later agents

hallucinate" failure the living-source doctrine names. Fix: five one-line edits.

7. The QA watching program — PARTIAL, with a self-refuting status label

briefs + 1 workflow brief + 2 fresh critics, 30 findings all applied (ledger 27c, build plan

L225-248; commit da6b29c).

(build plan L60-92) for captur|telemetry|agentic|reference|watch|lens → 0 hits; positive

control "harness" → 1 hit (rank 1). Rank 1's X9.5 kill-test set is a *different* item (build plan

L1394). So the DOC_MAP status asserts a schedule that does not exist.

wired into the plan — the sequencing rule at build plan L94-96 names "COMPARATOR_LENS_PROGRAM

P1-A" as a hard predecessor of ranks 13-17. One program got a sentence in the plan; the other

did not. Nothing structural distinguished them — only whether the director wrote the sentence.

inherently per-chapter/per-surface obligations. No home.

8. The realm charter — IN FLIGHT / DANGLING at audit time

proposal-tier and authoring no world canon — §0.1/§0.2 read).

positive control: DOC_MAP does match traversal at L93/L214).

own authored Prologue/Ch-1 emotional spine) and the 10 FORKB/FORKC/REALM analysis records.

ordering: discoverability lands LAST, which is precisely the ordering that produces orphans

when a session dies mid-ritual (and this repo has lost sessions mid-ritual repeatedly — the

handoff's own "IF THE TREE IS DIRTY ON ARRIVAL" block, L80-83).

---

PART 2 — EVERY DANGLING WIRE, NAMED

#Dangling wireEvidenceCost if unfixed
D1The P5 factory machinery list has never been amended by any 2026-07-26/27 landingROADMAP_POST_5090_TO_SHIP.md L395-421 unchanged; 0 hits for foundry / presentation ladder / arena-mutation / natural voice (positive-controlled)Ch 6+ inherits none of the six combat systems or the voice doctrine
D2enrich.py SYSTEM_DOCS is frozen at 5 docs since the enhancement programharness/enrich.py L54-60The per-chapter *pack* — the one thing every author reads — carries none of 2026-07's doctrine
D3The canon pack and the skill manifest have DIVERGEDSkill L56-57 loads ESOTERIC_GROUNDING, SIGNIFICANCE_LENSES, CROSS_CULTURAL_WEAVE, ENTITY_PERSONA; enrich.py loads none of themTwo per-chapter manifests, only one maintained; an agent that runs the pack and skips the skill silently drops four systems
D4DOC_MAP status labels have rotted in BOTH directionsSIGNIFICANCE_LENSES row L148 says "PENDING WIRING" but the skill runs it as Step 3a with landing rules (L73-79) and an acceptance line (L151); ESOTERIC row L140 is half-true (skill wired, enrich not); QA_WATCHING row L288 claims a schedule that doesn't existClosed work gets re-opened; open work reads as closed
D5Seam typing has no doctrine doc, no column, no rank, no toothPart 1 §4 aboveA 79-node design doctrine survives only in one ruled paragraph
D6T1_Trades_Master §3.x per-trade lines stale against §3.11L55/63/71/75/83 vs L95-105Future agents read a closed gate as open
D7The anti-orphan doctrine has NO toothgrep -rn "DOC_MAP" harness/*.py → 0"A doc is not done until it's in DOC_MAP" is enforced by director memory only
D816 artifacts from today are untracked / un-DOC_MAP'dgit statusSession-death exposure on ~4,000 lines of design
D9Nothing in the repo is keyed BY CHAPTEREvery rider is keyed by SYSTEM — a wave row, a DOC_MAP row, a gap-register Owner: fieldThere is no artifact that answers "for Ch 23, what must be true?" — which is Josh's literal question

D9 is the root cause; D1-D5 are its symptoms.

---

PART 3 — WHY THIS KEEPS HAPPENING (the structural read)

The repo's wiring doctrine is anti-orphan by discoverability: every artifact gets a DOC_MAP row

naming a consumer. That doctrine catches *orphan documents*. It does not catch **orphan

obligations** — a ruling that correctly lands in canon, correctly grows a gate, correctly earns a

DOC_MAP row, and still never becomes something a chapter build does.

The three closest existing near-misses, and why each falls short:

20-block table with per-block rules, an acceptance checklist, and RR-every-10. It is the model.

But it is scoped to *canon authoring* and the cascade it serves is COMPLETE; nothing extended it

to the build/QA surfaces, and nothing adds to it automatically.

bar* — but it is a prose bar for spine entries, not a rider register, and it has not grown since

the enhancement program.

P5-factory (5 of the 9 ranked v1.0 entries name the factory as owner: entries 2/3/4/5/8). That

is a *proto rider register* — it just has no per-chapter view and no tooth.

The missing artifact is therefore not "another index." It is the join between the three

consumption surfaces, keyed on chapter, with a tooth.

---

PART 4 — THE FACTORY CONTRACT (the design)

4.1 What it is

docs/FACTORY_CONTRACT.mdthe single accumulating per-chapter obligation register. One row

per RIDER: a thing that must be true of every chapter (or every chapter of a class) as a

consequence of a ruling. It sets no canon; it records what each ruling OBLIGES per chapter, and it

is the artifact the P5 factory reads instead of a hand-maintained prose bullet list.

Tier placement: operational (T99-class), subordinate to CVD and every tier doc. Its authority is

purely bookkeeping — a rider row is never the source of a rule, always a pointer to one.

Machine half: docs/factory_contract.json carries the rows; the .md is the human view generated

alongside it (same pattern as topography_baseline.json ↔ the topography proposal).

4.2 Section shape

§1 — THE RIDER REGISTER (the accumulating table; one row per rider)

fieldmeaning
rider_idFR-###, stable forever
ruling_srcdoc#anchor of the RULING (never a summary)
obligationone sentence, imperative, per chapter: *"the chapter's unlock set is built through the ability foundry"*
lanecanon-author · schema-data · engine-code · qa-teeth · art-asset · spec-doc (the window plan's own lane vocabulary)
scopeall · class:<name> (realm chapters, high-care chapters, boss-bearing nodes…) · once
data_homeregistry:<name>#<column> \path-glob \doctrine_only \NONE_YET(rank NN)
tootha gate name, or critic:<lens> for human-judgment lanes, or NONE(reason)
consumption_pointwhere the factory picks it up: enrich:SYSTEM_DOCS \skill:<step> \vol2:<wave> \p5:<bullet> \gate:<name>
statusBUILT · PARTIAL · SEED · DEFERRED(pointer) — the vocabulary RESIDUE_CLASSIFICATION_2026-07-27.md already uses
evidencethe commit/ledger entry that made it true

§2 — THE PER-CHAPTER CHECKLIST (derived, never hand-typed). For chapter N: the rider set

filtered by scope, ordered by lane, each with an evidence slot. Emitted by

harness/emit_chapter_checklist.py CH_NN. This is the artifact that answers *"for Ch 23, what must

be true?"* — and the one a chapter-build agent is handed as its brief. It is generated, per the

standing "work-lists are script-emitted, never hand-typed" rule.

§3 — THE CONSUMPTION MANIFEST (per chapter, written by the build). `rider_id → artifact path +

verdict + evidence, one file per chapter under build/factory/CH_NN.json`. This is the factory

half of the P5 scorecard: the scorecard's four existing row classes (content budget · structure

completeness · test coverage · care/reveal, roadmap L422-435) gain a fifth — rider completeness.

§4 — THE MIGRATION LEDGER. Where each rider was harvested from, so v1 is provably lossless and

so a later reader can audit the harvest rather than trust it.

4.3 The tooth — gate 30 factory_contract

Three rulers, each self-testing on canned known-bad/known-good fixtures (the self-testing-gate law;

the check_entity_taxonomy.py shape is the precedent):

OWNER: line and every factory-promise phrase (the factory inherits / joins the P5 factory /

the factory per chapter / the P5 factory … gains) must be cited by ≥1 rider row. **A landing

that adds a factory promise without a contract row FAILS.** This ruler alone catches D1 and the

natural-voice half of D2 on the day they happen.

glob is non-empty, or it is explicitly NONE_YET with a live window-plan rank cited. A rider

whose only home is a prose paragraph fails unless it declares doctrine_only. Catches D5.

actually cites the rider — enrich.py SYSTEM_DOCS membership, a skill step id, a Vol2 wave row,

a P5 bullet id, a gate name. Catches D1/D2/D3/D4/D5 as a class.

rider set is empty, if no rider resolves a home, or if the declared doc set matches zero

promise-phrases (which would mean the regex rotted, not that the repo is clean).

4.4 How the P5 roadmap consumes it

ROADMAP_POST_5090_TO_SHIP.md §P5's "Machinery it runs on" bullet list stops being hand-maintained

prose and becomes a pointer: *"the per-chapter machinery is the FACTORY_CONTRACT rider set at

scope=all, plus the class-scoped riders this chapter matches; the per-chapter scorecard carries

the consumption manifest."* The existing bullets are not deleted — they are harvested into riders

first (they are the BUILT baseline), then the prose is replaced by the pointer.

That inversion is the whole design. Today, every landing must remember to edit P5. After the

contract, P5 reads the contract, and the gate refuses a landing that made a factory promise without

a row. The failure mode moves from *silent omission* to *red gate*.

Same treatment for DOC_MAP: for factory-bearing docs, the "Consumer / wired" column should point at

rider_ids rather than restating the wiring in prose — that kills the D4 label-rot class at the

source, because the rider row is the thing with the tooth.

4.5 THE MIGRATION — where the riders live TODAY (enumerated for the harvest)

#SourceWhat to harvestest. riders
1docs/COMBAT_PROGRAM_ADDENDUM.md §§1-12 OWNER: lines (L20, 28, 52-53, 64, 72, 86, 100, 132, 146, 171-173, 195-196, 221, 257)every clause naming "the factory" / "per chapter" / "per boss"~14
2docs/NATURAL_VOICE_DOCTRINE.md §§2-5the strings/dialogue authoring lane; the two critic lenses; the QA solvability test (§3); the difficulty-routing audit (§4)4-5
3ROADMAP_POST_5090_TO_SHIP.md §P5 L395-421the already-codified BUILT baseline: player-strings sidecar · DT_Clue lane · non-kill/pip schema · festival windows · ambient/SFX rows · W-SPACE audit→sculpt→teeth · personas fleshed · seeds typed through the housing ledger · the P2 asset passes · the P3 QA loop~10
4.claude/skills/spine-chapter/SKILL.md (Step 3a L73-79; blocks 6/7/8/15/16; the L142-152 acceptance checklist; RR-every-10 L186)the canon-side riders — the best-maintained set, and the shape the register generalizes~12
5harness/enrich.py SYSTEM_DOCS L54-60 + docs/proposals/CHAPTER_BUILD_TARGET.mdthe pack riders (and the divergence D3 gets recorded as two rows, not hidden)~5
6docs/DESIGN_GAP_REGISTER.md Owner: fields naming the factory (entries 2/3/4/5/8 + the v1.1 tail)rider-in-waiting rows at status SEED~8
7PRE_5090_BUILD_PLAN_VOL2.md STATUS block (~L1405-1407)W-SPACE (per chapter, always) + the COMBAT ADDENDUM tail2-3
8docs/proposals/PRESENTATION_DOCTRINE.mdthe CUT POLICY per-beat-class table + CP-0 precedence applied to every chapter's scene rows2-3
9docs/proposals/QA_WATCHING_PROGRAM.md Pillars 1/2/4per-chapter capture + telemetry + reference boards per surface class3-4
10docs/proposals/REALM_DESIGN_PROGRAM.mdthe first class:realm scoped riders — the reason the scope column exists3-5
11DECISIONS_PENDING_JOSH.md ruled Forks A/B/Cseam typing T0-T3 per seam; continuity-by-default per scene; the downed/rescue loop per encounter class3-4
12The ▶ PROGRESS LEDGER "riders noted" lines (e.g. 27e's *"the 2-field log/tracker split idea → the W10 UI lane"*, build plan L204-206)the most fragile home of all — riders recorded only inside a ledger paragraphunknown; sweep required
13SIGNIFICANCE_LENSES / ENTITY_PERSONA_SYSTEM / CROSS_CULTURAL_WEAVEthe three approved systems' per-chapter obligations (incl. the still-missing T0_Persona_Index — verified absent among 55 registry dirs)~5

Recommended v1 scope: harvest sources 1-5 and 11 (the ones with explicit per-chapter language and

a ruled source) → ~45-50 riders. Sources 6-10 and 12-13 land at v1.1 as their programs ratify. The

lossless proof for the critic: *every OWNER: line and every factory-promise phrase in the declared

doc set maps to ≥1 rider, and every rider cites a real ruling anchor.*

4.6 Build cost, sequencing, and the honest objection

authoring wave for the harvest, one fresh-context critic for the lossless proof, one teeth agent

for gate 30's three rulers + fixtures. One wave, one landing.

and BEFORE the schema-freeze ranks 13-17. Reason: ranks 13-17 will mint schemas that carry

per-chapter obligations, and it is materially cheaper for them to emit rider rows than to

retrofit them. Every rank after 2.5 becomes self-wiring.

ledger, and Vol2 — a sixth index can rot exactly the way DOC_MAP's status labels rotted (D4), and

then it is worse than nothing because it looks authoritative. The answer: the contract is the

only one of the six with a TOOTH and a DERIVED view. DOC_MAP rotted *precisely because nothing

checked it*. Therefore the hard rule: **if gate 30 does not ship in the same commit as the doc,

do not ship the doc.** A rider register without R1/R2/R3 is another orphan.

every chapter must satisfy, which could ossify into bureaucracy. Mitigation is in the schema:

status=SEED riders are advisory (they surface in the checklist, they never fail the gate), and

only status=BUILT riders with a resolving tooth gate a chapter's scorecard. The contract

records the whole obligation set; only the proven part is binding.

---

PART 5 — THE DEPTH HALF OF JOSH'S QUESTION

Josh's question has two halves, and this audit's axis is the wiring half. But the halves connect at

exactly one point, and it should be stated:

The Prologue/Ch-1 emotional spine he just authored (the amulet as the mother's, the guilt, the

grudge, the dumb fight, the fall — DECISIONS_PENDING_JOSH.md L3-29) is *the class of depth he

wants everywhere*. Today the only mechanism that would carry that class into Ch 23 is a human

remembering. There is no rider for it, and no lane that owns it: the closest thing is window-plan

rank 9 (the 6th narrative-craft seed gate — reversal / cost / moral residue), which is scheduled

*before* the rank-10 typing pass over the 264 UNROUTED seeds precisely because a craft bar has to

exist before volume authoring consumes it.

Recommendation (creative-within-vision, applies without a Josh fork): the contract's first

class-scoped rider family should be the narrative-depth lane — one rider per depth obligation

(personal-arc cost · relationship consequence with a state row · side-story reversal/residue ·

through-line payoff registered on the connective web), with rank 9's narrative-craft gate as their

tooth and the standing whole-arc-connections directive (docs/proposals/WHOLE_ARC_CONNECTIONS_PASS.md,

DOC_MAP L426) as their arc-level auditor. That converts "you're missing a LOT" from a directive that

must be re-issued into a per-chapter row that fails a gate.

---

APPENDIX — POSITIVE CONTROLS RUN FOR THIS AUDIT

Every zero reported above was proven able to report non-zero:

"ladder"/"voice" family = 7 hits (L27, 28, 219, 245, 283, 352).

"harness" = 1 hit.

modern_home_chapter populated across all 10 T0_Trade_Registry rows.

natural-voice at check_build_space.py L603.

T0_Composure_Routing, T0_Bonus_Pool_Registry, T0_Imprint_Affix (55 dirs total).

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