LENS_ac-historical-reconstruction-teaching_DRAFT.md

pipelines/LENS_ac-historical-reconstruction-teaching_DRAFT.md

Comparator lens audit — ASSASSIN'S CREED (historical reconstruction + teaching)

Lens id: ac-historical-reconstruction-teaching · Wave P1-B · Read-only audit of

C:\dev\humanity-forgotten (canon) + C:\dev\Humanity\Humanity (built-system reference).

Title set: AC2/Brotherhood/Revelations, Unity, Origins, Odyssey, Valhalla, Mirage — **including the

Discovery Tour modes**. Aspects audited: immersive-history teaching · world-structure grammar ·

quest/side-content structure · writing/tone register · presentation/identity · collection/

completionism · onboarding/difficulty/accessibility · endgame/replay · **source-attribution surface

(NEW) · real-place reconstruction fidelity (NEW) · secondary modes from one world build

(NEW) · cultural consultation & disclosure (NEW)**.

Wave focus applied: historical-reconstruction authenticity pipeline · discovery-tour teaching vs

play · era texture density — mapped onto the immersive-teaching pillar, region pages, the

civilizational_marks lane, and the care doctrine.

Method law held

Every candidate was checked against both repos before judging. Every zero below is

positive-controlled with a term known to exist in the same corpus through the same tool. Every

finding was attacked before it was written; the ones that died are recorded in

§"Refuted and dropped" — including one where my own search could not match and produced a false

absence (the standing a-search-that-CANNOT-match-reports-zero trap fired once, live, and is

recorded honestly).

Dedupe baseline read in full and respected: docs/DESIGN_GAP_REGISTER.md (9 ranked + rows 10-45,

incl. the BG3 rows 39-45), docs/proposals/COMPARATOR_LENS_PROGRAM.md's **24 uncovered matrix

cells** (cells 1 and 24 sit directly in this lens's territory and are cited, never re-minted),

docs/pipeline_review/LENS_BG3_2026-07-27.md (format exemplar),

docs/pipeline_review/REALM_ANALYSIS_LENS_GAPS_2026-07-27.md (the only two Discovery-Tour mentions

in the repo), docs/PRE_5090_BUILD_PLAN.md + VOL2, docs/COMBAT_PROGRAM_ADDENDUM.md,

docs/NATURAL_VOICE_DOCTRINE.md.

Verdict classes per the standing wave rule. DESIGNED-UNBUILT is never reported as MISSING; where a

thing is designed at recommendation tier but has no ratified home, it is reported WEAKER and the

boundary is stated.

---

FINDINGS (16) — COVERED ×4 · WEAKER ×8 · MISSING ×3 · DIVERGENT-BY-DESIGN ×1

Slice-relevant (Prologue→Ch 13) findings are flagged [SLICE].

---

AC-1 — L1.5, the ambient-immersion lane that IS immersive-history teaching, has no typed carrier anywhere in the machine layer [SLICE]

Class: WEAKER (structural under-specification of a LOCKED pillar's own lane) · Priority: HIGH ·

Workable tag: SCHEMA-TINY (one legal token on an existing field + one gate predicate)

What AC proves. Discovery Tour exists because Ubisoft could *name and address* the teaching

layer as a separable content lane — the same world build, the same assets, a different addressable

set of content. You cannot ship, measure, or protect a teaching layer the pipeline cannot name.

Current state (cited). CVD Pillar 12 is locked canon and names four content lanes:

"L1 the systems-play action-adventure RPG complete in itself; **L1.5 ambient culture, history, and

geography absorbed through immersion**; L2 the completionist's systems mastery; L3 the

canonical-truth connections"

[_source/01_Tier_1_Foundation/T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md §5 Pillar 12].

Its executable test can fail a chapter on this lane specifically: "Chapter … missing its L1

systems-play or its L1.5 ambient-culture layer = pillar violation. … L1.5 cultural immersion

delivered as lecture … = pillar violation" [ibid.].

The typed spine cannot express it. docs/SPINE_SCHEMA_v3.md §3a defines the beat row's layer field

as layers: {L1|L2|L3 combo} — L1.5 is not a legal token. Enumerating the 909 live beat rows

across all 79 nodes (build/spine_rows/*/beats.csv) gives L1+L2 294 · L1+L3 273 · L1 190 ·

L1+L2+L3 56 · L2+L3 53 · L2 30 · L3 13 — L1.5 appears in exactly 0 of 909. The token

appears in 1 of 80 spine nodes in prose (docs/spine/CH_67.md, "L1.5 ambient culture and

history: the Kalevala Northland lived and walked"). It appears 0 times in harness/, so no gate

can evaluate Pillar 12's L1.5 clause.

Positive control. L1.5 is a matchable token: 137 occurrences across 46 files, including 14 in

the CVD itself and one live registry cell (registries/T0_Flora_Registry [DRAFT v0.1]/Sheet1.csv,

"L1.5 ambient (Ta Prohm site-signature tree)"). Control that the harness scan can match: debunk

returns 6 hits in harness/check_layer_register.py via the same tool over the same directory. The

909-row enumeration was done in Python over the CSVs, not shell grep.

Self-refutation attempted. (a) *"The engagement-track L1/L2/L3 already carries the teaching, so

nothing is lost."* — Partly true and that is exactly the collision AC-2 records; but the CVD's own

executable test names L1.5 as a failable condition, and a test whose subject has no

representation is not a test. (b) *"DESIGNED-UNBUILT — the lane is designed, the pipeline is young."*

— No: the pipeline is mature here (909 typed beats, 30 gates, a graph gate with teeth), and the

schema that was written *chose* a three-value enum. This is an omission in a built layer, not

unbuilt work. (c) *"Adding a token is bureaucracy."* — It is the difference between the QA loop being

able to answer "does Ch 7 teach anything ambiently" and not. Survives.

Reuse-first recommendation. No new system, no new registry, no new field. (1) Add L1.5 as a

legal token to the existing beat layers value grammar in docs/SPINE_SCHEMA_v3.md §3a and §4

(the enum already lives there). (2) Extend harness/check_layer_register.py — which already globs

every docs/spine/CH_*.md and already owns the Pillar-12 rule — with one presence assertion: every

node carries at least one L1.5-tagged beat. (3) Backfill is cheap and mechanical: the beats already

tagged mode = learning / discovery (180 rows) are the candidate set. Land it in the same

commit as AC-2's rename so the schema is touched once.

Owner suggestion. spec-doc (SPINE_SCHEMA_v3) + QA loop (check_layer_register.py); rides the

next spine-schema touch.

---

AC-2 — Two different frameworks share the token "L2", and the CVD's own disambiguation mandate is unmet on the load-bearing typed field [SLICE]

Class: WEAKER (ruled-disambiguation drift) · Priority: MEDIUM-HIGH ·

Workable tag: DOC-EDIT (rename + one docstring; zero data migration)

What AC proves. The Animus codex is unambiguously "the history layer". A teaching layer whose

label means two things cannot be routed, budgeted, or reviewed.

Current state (cited). Josh ruled the disambiguation into the CVD: "Pillar 12's engagement

layers (comprehension/attention tracks — surface, investigatable depth, canonical truth) and

layer-model-v2's content lanes (L1 fun/systems, L1.5 immersion, L2 completionist, L3 connections)

are orthogonal frameworks that measure different things; **where any doc writes 'Layer 2/3' it must

name which framework it means**, and neither supersedes the other's distinct axis" [CVD §5 Pillar 12,

disambiguation note, Josh 2026-07-13].

Three load-bearing surfaces violate it. (1) The spine's own block, present in 79 of 80 nodes, is

headed "Three-layer surfacing (CVD §18.2)" and reads `L1 self-contained / L2 investigatable /

L3 metaphysical-as-real — the engagement-track sense, unnamed [docs/spine/CH_02.md`

"Three-layer surfacing"]. (2) docs/SPINE_SCHEMA_v3.md §3a writes layers: {L1|L2|L3 combo} with

no framework named — 909 rows depend on it. (3) harness/check_layer_register.py's own contract

docstring encodes "L2 (Depth) = documented cultural authenticity, immersive, for invested players

who slow down and read" — again the engagement-track reading, and directly contradictory to

layer-model-v2's L2 = completionist mastery.

The consequence is not cosmetic: the immersive-history content is filed under a token whose other

meaning is "top-score every minigame", so a downstream consumer (the factory, the QA rubric, a

budget pass) cannot separate "teach the culture" content from "completionist mastery" content.

Positive control. The disambiguation paragraph is present and matchable in the CVD (verified by

direct read of §5 Pillar 12). The 79/80 count for the three-layer block and the 1/80 count for the

L1.5 token were both produced by the same Python glob over docs/spine/CH_*.md, so the reachability

of both is proven by the non-zero result.

Self-refutation attempted. (a) *"Everyone on the project knows which is meant."* — The one reader

who does not is the QA loop, which is the only player until the Josh Gate, and the factory agents

that consume the field cold. (b) *"This re-litigates a ruling."* — The opposite: the ruling

*mandates* the labelling; this finding reports it unapplied. (c) *"Cosmetic."* — It is the

precondition for AC-1's gate to mean anything. Survives.

Reuse-first recommendation. Three one-line edits, no data touched. Rename the spine block

heading to "Three-layer surfacing (engagement track — CVD §18.2)"; annotate the schema field as

layers: {L1|L1.5|L2|L3} with an explicit "content lanes, layer-model-v2" note; correct the

check_layer_register.py docstring to name the framework it enforces. Fold into AC-1's commit.

Owner suggestion. spec-doc + QA loop; zero-token, do it in the next housekeeping pass.

---

AC-3 — The citation apparatus is gated INWARD only; Pillar 5's executable primary-source test has no tooth, and 16 live rows already fail it

Class: WEAKER (ratified pillar test unenforced, with live violations) · Priority: HIGH ·

Workable tag: GATE-TINY (one predicate on an existing registry; zero-token to author)

What AC proves. AC's authenticity contract is that the scholarship is *externally* checkable —

the codex names real historians and real sources, and Discovery Tour ships the bibliography. Ours is

a research-corpus project; the corresponding contract is the CVD's, and it is written as a test.

Current state (cited). CVD Pillar 5 states the test in executable form: "Link-action without

scholarly basis = pillar violation. **Cross-cultural reward without primary-source documentation =

pillar violation**" [CVD §5 Pillar 5].

The gate that exists proves the *wrong direction*. harness/check_source_anchors.py verifies that

every [SRC: <doc> # <fragment>] and [SRC: <registry>/<tab> @ <row>] **resolves inside this

repo** — "doc renamed, section retitled, registry row dropped … fails the gate instead of silently

rotting" [ibid. docstring]. That is internal provenance. Nothing verifies external scholarship.

The live data shows the exposure. registries/T0_Cross_Cultural_Link_Graph [DRAFT v0.1]/Sheet1.csv

carries 184 rows with columns `evidence_basis · reward_class · lore_pointer · evidence_tier ·

primary_source. Enumerated: evidence_tier = primary 86 / needs_research` 88 / blank

10; primary_source non-empty 86; evidence_basis non-empty 184 (but pointing

overwhelmingly at our own T1 tier docs, not at scholarship). Cross-tabulating the actual test

condition: 62 rows carry a reward_class, and 16 of those have an empty primary_source

DISCOVERY_UNLOCK ×5, INTUITION_TIER ×4, PUZZLE_UNLOCK ×4, SCHOOL_TECHNIQUE ×3. Each is a

live instance of the exact condition Pillar 5 declares a violation.

This was already caught once and not closed. The ratification dossier's own adversarial review

states: "the claim that Pillar 5's L197 primary-source test is already satisfied is false, and

the CCLG's evidence_basis currently cites a T1 secondary doc, not primary sources — that is

arguably a pre-existing L197 exposure the dossier should surface, not smooth over"

[docs/DECISION_DOSSIER.md, the CCLG reward_class option-A adversarial-review block]. Fifteen

months of registry work later, no gate reads the column: grepping harness/ for

primary_source|reward_class|evidence_tier returns two hits, apply_t03_extensions.py (a

column-name list) and enrich.py (a display projection) — neither is a gate, and none of the 30

gates in harness/gates_config.json touches it.

Positive control. The grep can match: the same pattern returns the two non-gate hits, and

Grimoire returns 137 hits across 60 files in the same corpus. The 184-row cross-tab was computed

in Python directly off the CSV, and returns non-zero counts in every bucket.

Self-refutation attempted. (a) *"88 needs_research rows are an honest backlog marker, not a

violation."* — Agreed for the 122 rows with no reward_class; the finding is scoped precisely to

the 16 rows that grant a reward today. (b) *"The registry is DRAFT v0.1."* — It is enrolled in the

fidelity baseline, bound to a generated C++ row struct, and read by enrich.py into the chapter

build pack; it is live canon by consumption. (c) *"DESIGNED-UNBUILT — the reward engine isn't built,

so nothing violates yet."* — The *test* is on the data, not the runtime; the CVD phrases it as a

data condition and the fix is a data gate.

Reuse-first recommendation. One predicate, no new machinery. Extend harness/lint_canon_graph.py

(already the registry-relationship gate, already in gates_config.json) with a pillar5_citation

check: fail on reward_class != "" AND primary_source == ""; report the

evidence_tier == needs_research count as a visible backlog number in the scorecard so it can never

silently grow. That converts a doctrinal sentence into the project's own idiom (a gate with teeth)

and gives the 88-row research backlog an honest home. Zero-token, no GPU, authorable now.

Owner suggestion. QA loop / harness; the 16 rows then route to the deep-read lane as a bounded

citation task.

---

AC-4 — There is no player-facing attribution surface, and the schema currently classifies the citation columns as machine-only

Class: WEAKER (ratified intent with no surface + a schema classification contradicting it) ·

Priority: MEDIUM-HIGH · Workable tag: SCHEMA-TINY (two override entries) + SPEC (rides the

UI stub)

What AC proves. Discovery Tour and the Animus codex put the *source* in front of the player —

narrated by a historian, cited, and legible as scholarship rather than lore. The teaching only

compounds when the player can see it is real.

Current state (cited). The ratified direction says the player reads it: "every link also mints a

Grimoire / Thread-Map lore node with primary-source attribution … The **depth player reads the

scholarly basis** (Frazer/Eliade/Campbell per row) behind why the two cultures link"

[docs/DECISION_DOSSIER.md, three-layer fit, L2/MID block]. CVD Pillar 6 makes the Journal

"flippable in-game at any time".

But every citation surface in the project is authored *for us*. The region page's citation section

is titled "Section 16 — Academic References and Books to Acquire" — an acquisition and authoring

surface [_source/01_Tier_1_Foundation/T1_Region_Page_Template [ACTIVE v2.0].md §Section 16]. The

[SRC: …] anchor vocabulary is internal-doc-only by construction (AC-3). And the generated engine

struct types the citation as a machine string: FCrossCulturalLinkGraphRow declares

FString primary_source, FString lore_pointer, FString evidence_basis, while FText link_name,

FText source_anchor_name, FText target_anchor_name are the only player-facing-typed fields

[C:\dev\Humanity\Humanity\Source\Humanity\Public\Data\CrossCulturalLinkGraphRow.h]. That is not an

accident of hand-authoring — it is the type-inference rule firing: rule 2 promotes to FText only

columns matching (title|name|description|summary|prose|caption|label|display|line|text|blurb)$,

and rule 7 defaults "everything else" to FString

[docs/REGISTRY_ROW_STRUCT_SPEC.md §2]. So the pipeline has *already decided*, by default rather

than by intent, that the scholarly citation never goes through the localization flow — i.e. never

reaches a player. The delivery spec has no home either: T1_UI_UX_Spec [DRAFT v0.1].md is **35

bytes** (register entry 22).

Positive control. My first read of the struct with a FString <name> pattern reported

link_name/anchor_name as *absent* — they are FText, and the pattern could not match. Re-read

of the whole file corrected it (see §"Refuted and dropped"). The surviving claim above is from the

full file read, not a pattern.

Self-refutation attempted. (a) *"Show-don't-tell (§4.6) forbids surfacing scholarship."* — §4.6

forbids declaring the thesis and its 11 components; it says nothing about documented history.

§17.1 says the opposite for history: "true history is never hidden or scrubbed, because immersive

teaching of culture, geography, and history through action-first play is the point of the work."

A bibliography is not a thesis declaration. (b) *"This is register-22 (the UI stub) and already

tracked."* — Register 22 says the UI doc is empty; it does not identify that the data model has

already routed the citation away from the player. That is the new half. (c) *"Care-inflated —

players don't read citations."* — Depth players in this genre demonstrably do, the CVD ratified the

intent, and the cost here is two JSON lines.

Reuse-first recommendation. (1) Use the declared escape hatch, not a new mechanism:

docs/row_struct_overrides.json exists precisely for this ("the do-not-invent escape hatch: where

inference would guess, the override states the answer") and currently holds one entry — add

"T0_Cross_Cultural_Link_Graph": {"primary_source": "FText", "lore_pointer": "FText"} so the

citation ships through the string-table/localization flow with everything else player-facing.

(2) When register-22's UI spec is written, the Grimoire-entry render contract is one clause: a link

node renders link_name + the two anchor names + primary_source as a "why this is a real

parallel" line. No new registry, no new column, no new system.

Owner suggestion. schema-data (overrides + regenerate the struct — the diff is the review, per

REGISTRY_ROW_STRUCT_SPEC) + spec-doc (rides register 22).

---

AC-5 — civilizational_marks is 80/80 authored, scholar-cited, and has no delivery channel to the player [SLICE]

Class: WEAKER · Priority: HIGH · Workable tag: SCHEMA-SMALL (one enum value + a site

binding on an existing built lane)

What AC proves. The codex entry is *earned by physical presence at the real site* — teaching

triggered by geography, not by a menu. It is the closest shipped analog to our L1.5/L2 lanes, and

the delivery is what makes it teaching rather than an appendix.

Current state (cited). The corpus is real and it is excellent. All 80 of 80 spine nodes

carry a "Civilizational marks (the culture as builders-of-knowledge, L2)" block (verified by Python

glob over docs/spine/CH_*.md). Ch 15's block names Faulkner, Allen, Lehner, Denys Stocks's

peer-reviewed replication, Hornung, David and Wilkinson, and binds Frame-A explicitly: "Egyptian

agency and invention, never a hyperdiffusion or single-source-taught-the-world framing"

[docs/spine/CH_15.md §Civilizational marks]. It is the vessel the §17.1 real-person reframes hand

the real people back to: "the real Meryre is honored as documented Amarna history per Aldred **in

the civilizational-marks layer**" [ibid. §Decisions surfaced].

It has no route to a player. The block is prose with no site_id, no delivery kind, no row form and

no typed id. The CIVMARK edge convention reaches 22 of 80 nodes and 13 of 184 rows in

T0_Cross_Cultural_Link_Graph. The wiring audit predicted exactly this: "wire each chapter's

civilizational_marks to its CIVMARK edges so the edges have a consumer"

[docs/WIRING_AUDIT.md, knowledge-transmission PARTIAL entry] — the block landed 80/80 since (the

same audit's ORPHAN entry is now stale), the consumer did not.

Meanwhile the delivery vehicle already exists and is built. The clue lane is a typed row form

(chapter_id, clue_id, chain, source_kind, beat_scope, trigger_context, player_text, status, src)

with a live schema, an engine row struct (Public/Data/ClueRow.h) and a runtime subsystem

(Public/Discovery/HumanityClueSubsystem.h) — and it carries 10 rows in 1 node (Ch 2 only,

source_kind = observed_behavior ×8 / npc_dialogue ×2). The typed site layer it would bind to

is fully populated: 380 site rows across 79 nodes (build/spine_rows/*/sites.csv).

Positive control. The 80/80, 22/80, 13/184, 10-rows-1-node and 380-site counts were each

computed directly (Python over the md/CSV corpus); every one returned non-zero, proving the scans

reach their targets. HumanityClueSubsystem.h and ClueRow.h were listed from the game repo

directory, not inferred.

Self-refutation attempted. (a) *"Marks are authorial substrate, deliberately not player-facing."*

— The block's own heading tags it L2, an engagement layer the CVD defines as reachable by

"invested players who slow down and read" [harness/check_layer_register.py contract docstring];

and §17.1's whole reframe logic depends on the real figure being *honored* somewhere a player can

meet him. Authorial-only makes the reframe a private apology. (b) *"DESIGNED-UNBUILT — the delivery

is queued."* — Positive-controlled: no doc specifies civ-mark delivery. The delivery *vehicle* is

built; the binding is unspecified, which is WEAKER, not unbuilt work. (c) *"This bloats the

collectible layer — the AC failure mode."* — Guarded by AC-8: the marks already cleared the

five-gate significance filter, so they are the *filtered* set, not a checklist.

Reuse-first recommendation. Do not build a codex system. Emit each civilizational mark as a row

on the existing clue schema: add one source_kind value (site_examine) and bind beat_scope

to a beat that already references a site_id. That gives every mark (i) a typed id, (ii) a

geography trigger — the AC lesson exactly, (iii) player_text that lands in the natural-voice

rewrite queue with everything else, and (iv) a surface the QA loop can verify ("did the run

encounter mark X"). Ch 2-13 is 12 nodes' worth and is the slice. Pair with AC-10: a mark about a

landscape delivers at the vista site that shows it.

Owner suggestion. P5-factory (row emission per node) + QA loop (the encounter check); slice

scope first.

---

AC-6 — No reconstruction-fidelity contract: the compression parameter is ruled, the change record is designed-unbuilt, and the disclosure does not exist

Class: MISSING (the disclosure policy) · Priority: MEDIUM (LOW for the slice) ·

Workable tag: SCRIPT-SMALL (a fold over rows that already exist) + one ship-lane page

What AC proves. AC compresses and edits real cities to make them playable, and then *states what

it changed*. Accuracy becomes a declared policy rather than a vibe — which is what lets a

reconstruction be both honest and playable.

Current state (cited). We have the parameter and the schema; we have no record and no statement.

The compression policy is ruled: the D-MPV tiered ladder — "1 m/vertex hero set-pieces (caves,

boss pockets, ritual grounds) · 2 m standard playable · 5-10 m ambient/vista, assigned per AOI"

(Josh 2026-07-21) [docs/translation/T99_Translation_Terrain.md §5 item 1]. The change record is

schema'd: alteration_list — "ordered table: `zone_id, site_id (FK → T0_Vril_Site_Registry),

operation {carve, composite, raise, flatten}, feather_radius_m`" [ibid. L225] — and it is

DESIGNED-UNBUILT: "no alteration_list instantiated on ANY of the 4 pages … and no carve script

exists in Tools/" [docs/BUILD_PLAN_END_TO_END.md H9]. The era-change *set* is named but never

recorded per site: "Time-period modifications from modern: sea level, coastline, glaciers,

deforestation reversal, river courses, volcanic activity"

[T1_Region_Page_Template [ACTIVE v2.0].md §Section 1].

The raw material for a disclosure already exists and is fully populated. All four built zone

catalogs carry zone_bounds_wgs84, meters_per_vertex and care_tier on every row

(build/zones/: flores_island 11/11, bali 7/7, angkor_khmer 5/5, sumatra_java 4/4). So for each

built zone we already know the real-world footprint and the compression rung applied to it — the two

numbers a fidelity note is made of. What is missing is anyone deciding to state them.

Positive control. A search for a disclosure idiom does match in this corpus: "accuracy note"

returns _source/02_Tier_2_Region_Pages/sumatra_java.md L3726 ("Three accuracy notes ride it") —

which is about trade cargo, not geography, and is the only instance. `artistic licen* / not to

scale / what we changed / liberties` return nothing design-relevant. The zone-catalog population

counts are non-zero, proving the CSV read reaches the rows.

Self-refutation attempted. (a) *"This is timid process-work with no player impact."* — The

opposite: the disclosure is what lets us compress *harder* without an authenticity objection, which

is a production win, and it is the only honesty mechanism available to a project that deliberately

has no frame device (AC-11). (b) *"MISSING is the wrong class — the alteration_list is designed."* —

Split explicitly: the change record is DESIGNED-UNBUILT (cited above) and is not re-reported as

missing; the disclosure policy — a statement of what changed and where it is published — has no

design at all, and that is what MISSING names. (c) *"It breaks immersion."* — Not if it ships

out-of-fiction, which is the recommendation.

Reuse-first recommendation. Author nothing new; fold what exists. (1) Declare in one paragraph

of T1_Region_Page_Template §Section 1 that the alteration_list rows + meters_per_vertex +

the era-modification list are the reconstruction record — that makes the terrain lane's existing

queued work double as the fidelity ledger at no extra cost. (2) A ~40-line script folds

build/zones/*.csv (zone_bounds_wgs84 + meters_per_vertex) plus the alteration rows into one

per-region "what was compressed" note. (3) Publish it out-of-fiction — the marketing-web lane

(AC-9), never an in-game overlay, so the diegetic surface and the markerless doctrine are untouched.

Owner suggestion. spec-doc (the template paragraph, now) + terrain lane (the record, already

queued) + ship lane (publication, at P3).

---

AC-7 — Real named historical figures: COVERED, and the protocol is stricter than the comparator's

Class: COVERED (exceeds) · Priority: n/a · Recorded so no later lens re-mints it

What AC proves. Real named figures (Da Vinci, Socrates, Alfred) can carry questgiver and ally

roles at commercial scale — and AC freely alters what they did, which is the care-doctrine stress

test.

Current state (cited). We have a written protocol AC does not. `T3_Supporting_Characters

[ACTIVE v1.0].md` §8 Documented Historical Figures Protocol names eight player-encountered

figures for Ch 02-15 (§8.1: al-Hasan ibn Sulaiman, Ibn Battuta, Amanirenas-as-Nawitare, Meryre,

Avvaiyar, plus the archetype-framed Obi/Diallo/Joseph) and the Ch 16-77 framework (§8.2: Enheduanna,

Toussaint Louverture). §8.3 binds three constraints AC does not observe: archetype-framing where a

specific individual cannot be guaranteed accurate; "documented speech register, documented behavior

patterns, documented knowledge boundaries" retained; and a witness-only register where the

figure's documented actions are consequential — "Protagonist witnesses without altering the

documented record." §8.4 makes it production-blocking: "Production-blocking on player-encountered

historical figure content without sourced-material grounding."

It is wired, not aspirational. Enheduanna appears in build/spine_rows/CH_17/beats.csv and

boss.csv; Toussaint in build/spine_rows/CH_42/beats.csv and T0_Boss_Encounter_Registry;

Amanirenas/Nawitare in build/spine_rows/CH_14/beats.csv and T0_Character_Index; al-Hasan and

Avvaiyar in T0_Character_Index.

And the §17.1 Liqä-rule enforcement is live and costly, which is the real proof. The Ch 15 sweep

renamed eight characters off attested real bearers — CHAR_0109 Meryre (the attested Aten High

Priest, "the strongest Liqä-rule concern") became the constructed non-theophoric Wabenhotep;

CHAR_0115 Nehemet-Awai, "a goddess name … placed on a mortal Sobek-priestess, a direct Kxao-rule

violation", became Tasheret — "The real Meryre, Hapuseneb, Petosiris, Hetepheres, the Amenemhat

pharaohs, Ineni, and Khababash are honored as documented history in the civilizational-marks layer"

[docs/spine/CH_15.md §Decisions surfaced]. The real-victim case is separately ratified:

D-15 Anders Poulsen — "handled AUDIT-ONLY with dignity (named only in the evidence-layer, zero

invented interiority …), his death documented history, never fictionalized/spectacle/quest-prize"

[docs/spine/DECISIONS_PENDING_JOSH.md L1408].

Positive control. Each figure name was traced by direct file search into docs/spine/,

build/spine_rows/ and registries/ and returned hits; the searches that returned nothing

elsewhere are therefore not blind.

No action. One dependency: AC-5's delivery finding is what makes the "honored in the

civilizational-marks layer" clause reach a player rather than a file. That is the only reason this

COVERED verdict is not fully self-sufficient.

---

AC-8 — The checklist-map failure mode is answered at doctrine and has a real critic tooth; enforcement is deferred to existing register entries

Class: COVERED (doctrine + critic), with enforcement deferred · Priority: n/a — do not

re-mint

What AC proves. AC's sharpest negative lesson: teaching density degraded into collectible bloat.

Every map icon was once a piece of research.

Current state (cited). docs/proposals/SIGNIFICANCE_LENSES.md §4 is an explicit anti-sprawl

instrument: a five-gate filter (real relational tie / lens registration / arc-service /

layer-fit / care-and-Frame-A) inside a distance-decay budget (Tier 0 core → Tier 3 "Layer-2

seeds only"), under a stated no-sprawl cap: "if adding a connection does not change what the player

does, feels, or learns-that-pays-off, it is cut from Layer 1 and demoted." Gate 5 is pass-or-cut,

not soften: "A candidate that cannot be represented with care is cut, never sanitized-and-kept."

It has a live tooth. .claude/skills/normalize-doc/SKILL.md rubric item 12 checks both failure

modes by name: "a myth-only skew (the chapter surfaces the culture's supernatural/occult register

but not its group-A achievement register — block 6 Civilizational marks renders the people as

builders-of-knowledge, so a thin or absent block 6 is a defect), and an isolated-village read."

Where enforcement is thin, and why it is not re-minted here. No deterministic gate scores

lens-count or Tier budget, and the actual bloat surface is the 264 UNROUTED seeds in

QUEST_SEED_HOUSING_LEDGER. Both are already owned: register entry #26 ("Side content has no

narrative-craft gate — seeds pass on evidence/lens/arc/layer/care, never on reversal/cost/moral

residue", rank 9, lands *before* the 264-seed typing pass) and entry #3 (hub-and-spoke

side-content routing). Re-minting them here would be duplicate work.

Recommendation (one sentence, additive). When #26's narrative-craft gate is authored, carry the

§4.3 no-sprawl clause into it verbatim as a pass condition — the AC lesson is that the craft gate

and the density cap must be the same gate, or content passes one and floods the other.

---

AC-9 — No packaged teaching product exists, and the content for one is already 80-90% authored

Class: MISSING (product surface) · Priority: LOW for the slice / MEDIUM at ship ·

Workable tag: GENERATED-SITE (no runtime work, no in-game mode)

What AC proves. Discovery Tour is the only shipped mass-market teaching layer built from a

game's own research: guided, historian-narrated, cited, combat-free, and **a second product off the

same build**. Its structural insight is that the teaching mode does not compete with the game — it

"separates the game from the scholarship".

Current state (cited). "Discovery Tour" appears in exactly two files in the repo, both as a

*proposed future lens*, never as one of our surfaces:

docs/pipeline_review/REALM_ANALYSIS_LENS_GAPS_2026-07-27.md L260/L266 and

docs/proposals/REALM_DESIGN_PROGRAM.md L1111 — and the note there already identifies the fit:

"a mode that separates the game from the scholarship — **the exact separation our audit-only rule

performs**." No design of ours instantiates it. The marketing program's lanes are Capture / Asset /

Web skeleton / i18n, with no companion-content lane [docs/MARKETING_WEB_PROGRAM.md §The four

lanes]. The Tier-B DLC catalog is a byte-level stub (register entry 22).

The nearest thing we *did* ship is a deliberate divergence and should be credited: the **Wellspring

— Story** difficulty tier is written for "the traveller who came for the journey and the wonder"

[docs/proposals/DIFFICULTY_SYSTEM.md, RULED and CLOSED, Josh 2026-07-04]. That serves the

Discovery-Tour audience *inside the one game* rather than beside it — a defensible answer, but it is

a difficulty dial, not a teaching product.

The content already exists. Twelve built region pages carry gated, use_class-typed

bibliographies with honest gaps declared (flores_island.md §Section 16 lists seven SUBSTRATE

sources by SRC id, one AUTHORIAL-REBUTTAL, a MUST-ACQUIRE list, and an explicit "no strong textile

substrate yet" admission). Eighty of eighty spine nodes carry scholar-cited civilizational marks

(AC-5). Eighty-six link rows carry a full primary-source citation (AC-3). `T1_Research_Corpus_Master

[ACTIVE v1.1.4]` covers every narrative unit Ch 2-77 + Prologue + Epilogue.

Positive control. The two-hit Discovery Tour result is trustworthy: the same scan over the same

corpus returned 441 files for museum, 295 for bibliograph, 197 for codex — the corpus is

reachable and the term genuinely is not ours.

Self-refutation attempted. (a) *"This violates §4.6 show-never-tell."* — §4.6 binds **the

thesis** and the 11 components; a documented-history companion teaches Ch-15 Egyptian surveying and

Ch-29 Sámi noaidi tradition and never touches the L3 canon. The reveal-discipline gate

(grand_sage_silence, gate #25) already exists to police exactly that boundary, so the guard is

built. (b) *"Solo dev, no capacity."* — Which is why the recommendation is a *generated* web

companion, not an in-game mode: no runtime, no UI, no localization of gameplay strings. (c) *"It is

a distraction from the Josh Gate."* — Correct, and the priority reflects it: not a slice item.

Reuse-first recommendation. Add a fifth lane to docs/MARKETING_WEB_PROGRAM.md: a

generated companion site built from artifacts that already exist and are already gated — region-page

Section 16 (use_class-filtered to SUBSTRATE, which structurally excludes AUTHORIAL-REBUTTAL and

FRINGE-SKIP material), the 80 civilizational-marks blocks, and the CCLG rows whose

evidence_tier == primary. It inherits the program's existing binding disciplines (the reveal-

discipline clause is already written into that doc), needs no engine work, and is the honest

Discovery-Tour analog for a solo build. Sequence it after the slice.

Owner suggestion. spec-doc (the lane) + P3/ship lane (execution).

---

AC-10 — The vista is a typed affordance on 53 sites and pays the player nothing

Class: WEAKER · Priority: MEDIUM · Pre-registered: this is matrix cell 24

(COMPARATOR_LENS_PROGRAM.md) — the finding strengthens that cell rather than minting a new one

What AC proves. Tourism-as-content: the vista, the viewpoint and photo mode are *designed

rewards*, not a byproduct of pretty art. It is the cheapest way a reconstruction pays back its own

build cost.

Current state (cited). The affordance is typed and populated: climactic_affordance takes

{vista|threshold|sacred|climactic_geometry|weather_dramatic}

[docs/SPINE_SCHEMA_v3.md §3b], and 53 of 380 live site rows carry vista

(build/spine_rows/*/sites.csv; full tally none 159 · sacred 109 · threshold 68 ·

climactic_geometry 63 · vista 53 · weather_dramatic 15). Two consumers read it and neither

rewards it: the relief mechanism uses vista+ambient_threat to score a chapter's breathing room

["climactic_affordance with vista and sacred values is a live, checkable column",

docs/pipeline_review/REALMARC_RELIEF_MECHANISM_2026-07-27.md L196/L328], and the cinematic

translation reads the affordances as a camera signal

[docs/translation/T99_Translation_Cinematic.md L285]. Nothing marks, awards, or records a vista

visit. The QA rubric explicitly parks the measure: "tier-dependent ones (contrast, effect density,

composition, vista) stay INERT below final tier"

[docs/proposals/QA_WATCHING_PROGRAM.md §4.4].

Photo mode is a positive-controlled zero: photo mode|photo_mode|PhotoMode (case-insensitive)

returns 0 files in both repos; control, Grimoire returns 137 hits across 60 files in the same

canon repo through the same tool.

Self-refutation attempted. (a) *"Cell 24 already owns this."* — It does, and I am not minting a

second entry; the addition is the 53-site number and the observation that the affordance is

already typed, which changes cell 24 from a design question into a wiring task. (b) *"A vista reward

is an icon, i.e. the AC bloat failure."* — Which is why the recommendation below is not a

collectible.

Reuse-first recommendation. The half that does not wait on a photo-mode decision: bind the

53 vista sites to AC-5's civilizational-mark delivery — a mark *about* a landscape, a monument's

sightline or a settlement pattern delivers at the vista that shows it. The arrival becomes the

teaching beat, with no new system, no icon, and no marker (markerless navigation is pre-registered

doctrine and untouched). Photo mode itself stays in cell 24 for the P3 lens.

Owner suggestion. P5-factory (the binding) — shares the commit with AC-5.

---

AC-11 — No frame device: DIVERGENT-BY-DESIGN, with a stated residual obligation

Class: DIVERGENT-BY-DESIGN · Recorded so no later lens proposes an Animus

What AC proves. The Animus is an honesty device: it licenses anachronism and marks the

reconstruction *as* a reconstruction, so a compressed city and a fictional assassin can share a real

Florence without either lying.

Current state (cited). We deliberately cannot have one. The metaphysical is canonically real

in-world — "The metaphysical is canonically real per §2. … Precursor civilizations, the threshold

realms, and submerged sites are real in-world per §3" [CVD §17.1] — so an in-fiction device

declaring the world a reconstruction would collide with Pillar 12's executable test ("L3 canonical

truth declared explicitly in dialogue/marketing/UI = pillar violation", CVD §5 Pillar 12) and with

the Ch 76-77 reveal lock that gate #25 grand_sage_silence already polices. The lens spec itself

predicted this verdict ("We deliberately have no analog").

The residual, stated rather than waived. Because there is no in-fiction honesty device, the

entire honesty burden falls on out-of-fiction surfaces — which is precisely why AC-6 (reconstruction

disclosure), AC-9 (the companion) and AC-14 (the ship-time sources statement) are the three findings

that carry it. A later lens should read this trio as one obligation, not three optional extras.

---

AC-12 — time_fluctuation_range is populated on 23 of 79 nodes, and the historical-figure protocol depends on it

Class: WEAKER (data-empty on a load-bearing column) · Priority: MEDIUM ·

Workable tag: DATA-DERIVE (a script over a column that is already 79/79)

What AC proves. Era texture density is what makes a reconstruction read as a *time* rather than

a place — and AC's era is a single tight window per title, while ours is a composite reaching across

three horizons per node. The composite is the harder problem and needs more machine support, not

less.

Current state (cited). T0_Chapter_Index carries era on 79/79 rows (e.g. CH_02

"Composite — Homo floresiensis ~60,000-100,000 BP through pre-colonial Flores ~1[5]00", CH_15 a

three-horizon Old Kingdom / New Kingdom / Ptolemaic-Roman composite) — but

time_fluctuation_range on only 23/79. That column is the mechanical window the real-figure

protocol runs in: "Where documented historical figures appear outside their documented era, the game

uses time-fluctuation mechanic … Ibn Battuta encounter at Ch 08 follows the protocol — documented

visit date used" [T3_Supporting_Characters §8.3]; §8.2 likewise stages Enheduanna at a

"Time-fluctuation encounter window at Architect first contact". Checking the eight figure-bearing

chapters: CH_10, CH_12 and CH_42 carry a range; CH_07, CH_08, CH_14, CH_15 and CH_17 are empty

including the two chapters §8.3 names by name as protocol users (Ch 08 Ibn Battuta, Ch 17

Enheduanna).

Positive control. The read returns non-empty values for CH_10 ("Pleistocene-era megafauna time-

fluctuati…"), CH_12 ("Atlantic slave trade 1500-1888 CE") and CH_42 ("Bois Caïman 1791 time

fluctuation") through the same column read that returns empty for the other five — so the empties

are real, not a parse artifact.

Self-refutation attempted. (a) *"Prose carries it; the column is redundant."* — The spine prose

does carry the era composite, which is why the fix is a derivation rather than authoring; but the

column is what a runtime or a gate can read, and §8.3's protocol is a *mechanic*, not a note.

(b) *"56 empty rows are chapters with no time-fluctuation content."* — Possibly true for many; it is

demonstrably false for Ch 08 and Ch 17, which is enough to make the column unreliable as a signal.

Reuse-first recommendation. Derive, do not author: the era string is 79/79 and already carries

the horizons; a script proposes time_fluctuation_range from it, and the five figure-bearing nodes

are hand-confirmed. Then add one clause to harness/check_source_anchors.py's neighbours (or the

existing lint_canon_graph registry gate): a chapter whose spine references a §8 documented figure

must carry a non-empty time_fluctuation_range. Zero-token.

Owner suggestion. schema-data + QA loop.

---

AC-13 — The "never lectured" pillar test is enforced on body prose only, not on the player-facing text that will actually lecture [SLICE]

Class: WEAKER · Priority: MEDIUM-HIGH · Workable tag: RUBRIC-EDIT (widen an existing

critic item; rides the natural-voice pass already scheduled)

What AC proves. Discovery Tour is *allowed* to lecture because it is a separate mode; inside the

game AC teaches through inhabited space and incidental barks. The moment teaching text and gameplay

text share a surface, tone discipline is the whole game.

Current state (cited). The rule is a pillar-level executable test: "**L1.5 cultural immersion

delivered as lecture**, or blocking L1 progression = pillar violation" [CVD §5 Pillar 12]; §17.1

restates it ("care … never means lecturing the player — the surface stays fun-first, action-forward,

and explorable").

Enforcement reaches one block. .claude/skills/normalize-doc/SKILL.md rubric item 6 lists "cultural

immersion as flavor not lecture" inside "the 9-item body-prose checklist", scoped to a

"~300-1200 words" block. There is no deterministic gate: lecture|lectur returns **0 hits across

harness/**; control, debunk returns 6 hits in harness/check_layer_register.py through the same

tool over the same directory — so the harness is reachable and the rule genuinely is not in it.

The exposure is the text that has not been written yet and is scheduled next: player-facing

dialogue, journal entries, clue player_text, and any civ-mark delivery string from AC-5 — all of

which are the live subject of docs/NATURAL_VOICE_DOCTRINE.md's rewrite pass. Teaching text is the

single highest-risk category for the lecture failure mode, and it is the one category the check does

not cover.

Self-refutation attempted. (a) *"The natural-voice doctrine already covers tone."* — It governs

voice, register and cultural registration; it does not name the lecture failure mode or bind the

Pillar-12 test. One clause closes it. (b) *"A regex gate for 'lecturing' is unbuildable."* — Agreed,

which is why the recommendation is a critic-rubric widening, not a gate. (c) *"Care-inflated."* —

Devil's-advocate check against timidity: this recommendation *reduces* explanatory text and pushes

toward showing, which is the anti-timid direction; it adds no protection and removes no content.

Reuse-first recommendation. Widen rubric item 6's scope from "body prose" to "**every

player-facing string block in the entry**" (dialogue, journal, clue player_text, mark delivery),

and add the same clause to the NATURAL_VOICE_DOCTRINE rewrite checklist so the rewrite pass

carries it on first contact rather than as a later correction. Two sentences, zero tooling.

Owner suggestion. QA loop (normalize-doc rubric) + the natural-voice rewrite wave.

---

AC-14 — No ship-time sources-and-care disclosure; the ruling delegates the *judgement*, not the *statement*

Class: MISSING (ship surface) · Priority: LOW for the slice / MEDIUM at ship ·

Workable tag: ONE-PAGE (generated from artifacts that already pass a gate)

What AC proves. AC ships with named historians and publishes its consultation posture; Discovery

Tour credits its academic collaborators on-screen. The disclosure is itself a shipped artifact, and

it is what converts "we did the research" into something a player or a critic can check.

Current state (cited). Positive-controlled: `consultant | sensitivity read | community review |

cultural advisor return no process design anywhere in docs/ — control, elders` matches in

docs/translation/T99_Translation_Audio.md L224 ("Aboriginal elders Ch 57") and across

docs/book_extractions/, so the corpus is reachable.

What we *do* have is substantial and should be stated plainly rather than inflated into a gap: CVD

§17.1's care doctrine with its explicit ruling calibration; a live care-banding layer (fork rows

across the 79 nodes: open 45 · protected-elevated 21 · elevated 13 · maximum 7 ·

antisemitism-guardrail 4, with Ch 29 / Ch 42 / Ch 57 each correctly at maximum); the care_tier

zone column populated 27/27 on the built catalogs; a care_scope gate in the 30-gate suite; the

fresh-context critic; and use_class-typed bibliographies whose completeness is machine-enforced

(AC-16).

Where the actual gap is, stated precisely. Josh's ruling delegates the judgement to the loop

("Every care judgement ABOVE that floor is ruled by the build loop rather than escalated", CVD

§17.1 calibration paragraph) and names himself the backstop. Nothing in that ruling addresses what

the shipped product says about its sources. Those are different artifacts, and only the second

is missing.

Self-refutation attempted (the anti-timidity pass, run explicitly). (a) *"Proposing a consultant

programme re-litigates Josh's delegation ruling."* — It would, and it is therefore not

recommended: no sensitivity-reader lane, no external veto, no content review. (b) *"Any care

paperwork is care-tier inflation, which §17.1 calls a defect."* — Checked in that direction:

disclosure changes zero content, removes nothing, softens nothing, and adds no gate over

authoring. It is a publishing artifact, and its effect on the content bar is nil. (c) *"Then it is

not worth reporting."* — It is: a rated-M commercial title depicting ~76 living cultures with

maximum-depth chapters on Sámi, Haitian Vodou and Aboriginal Australian material will be asked "what

did you read"; having the answer already gated and generated (AC-16) and simply choosing not to

publish it is the strictly worse position. Survives, at LOW slice priority.

Reuse-first recommendation. One page in the ship lane, generated not authored: the

sources-and-care statement, folded from the use_class == SUBSTRATE lines of the region pages

(machine-verified complete per AC-16) plus the three maximum-depth chapters' source lists, plus a

plain-language statement of the represent-with-care standard as §17.1 already words it. It rides

AC-9's companion lane; if AC-9 is deferred, it is a Steam-page section. No new process, no external

reviewer, no content change.

Owner suggestion. ship lane / marketing web program; P3.

---

AC-15 — Teaching survives contact with play: 25% of live beats are learning/discovery/investigation

Class: COVERED · Recorded as the baseline number this lens exists to protect

What AC proves. The recurring AC critique is that the history is *adjacent* to the game — the

reconstruction is magnificent and the play is unrelated to it, which is exactly why Discovery Tour

had to be a separate mode. The measurable question is whether teaching is a play mode or a backdrop.

Current state (cited). Enumerating all 909 live beat rows by mode

(build/spine_rows/*/beats.csv, the closed gameplay_function enum of

docs/SPINE_SCHEMA_v3.md §4): character 187 · combat 185 · learning 98 · puzzle 98 ·

discovery 82 · transformation 77 · investigation 48 · traversal 45 ·

vril_management 31 · stealth 28 · dialogue 26 · trade 4. The

learning + discovery + investigation set is 228 beats, 25.1% — larger than combat's 20.4%. The

Pillar-11 mode_variety_check is populated 79/79 on T0_Chapter_Index, so the variety rule has

a live per-node value rather than a doctrine.

Honest caveat. mode = learning is not guaranteed to be *cultural* learning — some rows will be

ability or system learning. The number is a proxy and is stated as one. Refining it costs nothing

once AC-1's L1.5 token exists: the intersection of mode ∈ {learning, discovery} and an L1.5 layer

tag is the exact metric, and it is the second reason to land AC-1.

No action. Record the 25.1% as the baseline the QA loop watches; a later factory wave that

drives it down is a regression with a number attached.

---

AC-16 — Per-region bibliographies are complete-by-gate: the strongest authenticity artifact in the project

Class: COVERED (exceeds) · Recorded so the AC-9 recommendation is understood as cheap

What AC proves. Discovery Tour's credibility rests on a per-site source list that is actually

complete. Bibliographic completeness is normally a discipline problem; ours is a gate.

Current state (cited). harness/check_region_page.py — a live gate in the 30-gate

gates_config.json suite (region_pages) — enforces that all twenty ### Section N headers exist

and, critically, that "every SRC_ id cited ANYWHERE on the page must be declared in Section 16"

on a line carrying a use_class token, failing with `"use_class: {sid} is cited on the page but

Section 16 never declares it"`. Its own comments record that the rule was *deliberately widened*

from a per-line check to a whole-page check to catch "a used source Section 16 never declares" —

i.e. the failure mode was found and closed. The use_class vocabulary itself is a real epistemic

instrument: `SUBSTRATE · ESOTERIC-PRIMARY · AUTHORIAL-REBUTTAL · REFERENCE · TONE · DUPLICATE ·

FRINGE-SKIP`, with the binding rule that "AUTHORIAL-REBUTTAL may never be cited as truth"

[T1_Region_Page_Template [ACTIVE v2.0].md §Section 16].

In practice the pages are honest about their own gaps, which is the part AC does not do:

flores_island.md §Section 16 declares "the ikat-weaving query scored only 0.32 region-filtered, an

honest 'no strong textile substrate yet' rather than a false Egypt citation", and lists three

MUST-ACQUIRE specialist anchors it does not own.

Scope note (not a defect of this finding). Twelve of ~76 region pages are built. That is the

factory's known throughput state, not a design gap, and it is not re-reported here.

No action. This is the evidence that AC-9's companion is a *fold*, not a research project, and

that AC-3's citation gate is idiomatic rather than novel — the project already gates exactly this

shape of claim one tier up.

---

Refuted and dropped

Recorded so no later lens re-runs them, and so the one live method failure is on the record.

1. "The CCLG row struct drops the player-facing name columns." — FALSE, and my own search

caused it. A FString <name> pattern over

Source/Humanity/Public/Data/CrossCulturalLinkGraphRow.h returned 19 fields with no link_name

or *_anchor_name, which looked like the register-#21 struct drift biting the exact columns a

Grimoire entry needs. Reading the whole file refuted it: those three are FText, correctly

promoted by the type-inference rule, and the struct binds all 22 CSV columns. The

a-search-that-CANNOT-match-reports-zero trap, fired live. The surviving observation (that the

*citation* columns are FString, i.e. classified as non-player-facing) came from the full read

and is AC-4.

2. "civilizational_marks is an orphan field with no authored instances." — STALE. That is

docs/WIRING_AUDIT.md's ORPHAN entry, and it has been overtaken: 80/80 spine nodes now carry the

block. The audit's own [WIRED] entry for the same field is the current one. AC-5 reports the

*downstream* gap instead.

3. "No care-tier banding exists on the live spine." — FALSE. Fork rows carry care_band with

maximum correctly on CH_29 / CH_42 / CH_57 and protected-elevated on CH_12/13/47/50.

4. "There is no anti-collectible-bloat discipline." — FALSE; SIGNIFICANCE_LENSES §4 plus

normalize-doc rubric 12. Became AC-8 (COVERED).

5. "Real historical figures are handled loosely." — FALSE and backwards; §8.3's witness-only

register is stricter than the comparator's practice. Became AC-7.

6. "No photo/observation mode is a new gap." — Pre-registered as matrix cell 24. Folded into

AC-10 as a strengthening data point, not minted.

7. "Pillars 5/6/7 have no lens" as a finding of mine. — Pre-registered as matrix cell 1

(the heaviest uncovered cell) and assigned to the P1-C knowledge-progression-decipherment

lens. Not re-minted; AC-3 and AC-4 are scoped to the *attribution* half only, which cell 1's

lens (knowledge-as-progression mechanics) does not cover.

8. "Markerless navigation costs us the AC viewpoint-reveal information economy."

Pre-registered DIVERGENCE (register "Covered/Divergent" list, WoW row: "Markerless navigation

(our wayfinding legibility floor)"), and Mirage's own retreat from the tower-reveal pattern

argues our side. Dropped.

---

Contested / director calls

1. AC-9 (the teaching companion) touches product scope, not design. The recommendation is

scoped to a *generated web companion under an existing marketing lane* precisely to keep it out

of engine scope, but it is still a new deliverable and the director may want it deferred past

P3 entirely. The finding stands regardless of the timing call.

2. AC-14 (ship-time disclosure) sits adjacent to a Josh ruling. I have argued above that the

delegation ruling covers the *judgement* and not the *published statement*, and I explicitly do

not recommend any consultant/sensitivity-reader lane. If the director reads the ruling as

covering disclosure too, AC-14 collapses into AC-9's companion and loses nothing.

3. AC-1/AC-2 touch a locked pillar's vocabulary. Neither changes Pillar 12, its lanes, or its

tests — they make an existing lane and an existing ruled disambiguation representable. If the

director judges that adding L1.5 to a typed enum is pillar-adjacent, it should ride a

director-level commit rather than a factory one.

Wiring obligation

This audit is a docs/pipeline_review/ artifact when landed: it needs a docs/DOC_MAP.md row and a

fold of AC-1 · AC-3 · AC-5 · AC-13 into docs/DESIGN_GAP_REGISTER.md's live ASPECT×LENS matrix

(the four with slice-window impact). AC-10 amends cell 24 rather than creating a row; AC-8

amends register entry #26.

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