pipelines/LENS_ac-historical-reconstruction-teaching_DRAFT.md
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.
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.
---
Slice-relevant (Prologue→Ch 13) findings are flagged [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.
---
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.
---
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.
---
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).
---
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.
---
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).
---
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.
---
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.
---
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).
---
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.
---
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.
---
time_fluctuation_range is populated on 23 of 79 nodes, and the historical-figure protocol depends on itClass: 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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
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.