CRITIC_ac-historical-reconstruction-teaching.md

pipelines/CRITIC_ac-historical-reconstruction-teaching.md

CRITIC PASS — ac-historical-reconstruction-teaching

Fresh-context adversarial refutation of

LENS_ac-historical-reconstruction-teaching_DRAFT.md (16 findings).

Read-only on both repos. Every citation below was opened; every count was

re-derived independently in Python over the same corpus, not taken from the draft.

Headline: this is the most numerically honest lens draft I have audited. I

re-derived fifteen independent enumerations and **all fifteen matched to the

row** — including the 909-beat layer/mode distributions and the 184-row CCLG

cross-tab down to the four reward-class sub-counts. Every zero I re-ran was

positive-controlled and real. The draft's own §"Refuted and dropped" records a

live method failure honestly. What needs fixing: one recommendation is aimed at

the wrong file, one finding's supporting argument leans on a citation that a

*sibling finding in the same draft* declares unreliable, one finding reaches into

a sibling lens's aspect territory, and one care-adjacent finding needs an

anti-ratchet wording guard. Nothing is killed.

---

A · INDEPENDENT RE-DERIVATIONS (the numeric spine of the draft)

Draft claimMy re-derivationVerdict
909 live beat rows across 79 node dirsbuild/spine_rows/*/beats.csv909 rows, 79 filesEXACT
layers: L1+L2 294 · L1+L3 273 · L1 190 · L1+L2+L3 56 · L2+L3 53 · L2 30 · L3 13identical, every bucketEXACT
L1.5 in 0 of 909 beat rows0EXACT
mode: character 187 · combat 185 · learning 98 · puzzle 98 · discovery 82 · transformation 77 · investigation 48 · traversal 45 · vril_management 31 · stealth 28 · dialogue 26 · trade 4identicalEXACT
learning+discovery+investigation = 228 = 25.1%; combat 20.4%228/909 = 25.08%; 185/909 = 20.35%EXACT
CCLG 184 rows; evidence_tier primary 86 / needs_research 88 / blank 10identicalEXACT
primary_source non-empty 86; reward_class non-empty 62; 16 reward rows with empty primary_sourceidenticalEXACT
those 16 = DISCOVERY_UNLOCK ×5 · INTUITION_TIER ×4 · PUZZLE_UNLOCK ×4 · SCHOOL_TECHNIQUE ×3identicalEXACT
380 site rows across 79 nodes; affordance tally none 159 · sacred 109 · threshold 68 · climactic_geometry 63 · vista 53 · weather_dramatic 15identical (token-level; 53 distinct rows carry vista)EXACT
clue lane: 10 rows in 1 node (CH_02), observed_behavior ×8 / npc_dialogue ×2identicalEXACT
L1.5 in 1 of 80 spine files (CH_67)1 — docs/spine/CH_67.mdEXACT
"Three-layer surfacing" in 79 of 8079; the one miss is CH_57_BUILD_BRIEF.mdEXACT (see A-1)
Civilizational-marks block on 80 of 8080 (one file lowercases the header)EXACT
row_struct_overrides.json holds one entryone (T0_Worldstate_Variables.__aliases__)EXACT
T1_UI_UX_Spec [DRAFT v0.1].md = 35 bytes35 bytesEXACT

A-1 — denominator nit (amend, do not kill). The draft's "80 nodes" denominator

is a file count over docs/spine/CH_*.md, and one of those 80 files is

CH_57_BUILD_BRIEF.md, not a node. The real spine is 79 nodes (CH_01–CH_77 +

CH_PROLOGUE + CH_EPILOGUE). This makes two draft numbers *understated*, not

overstated: "Three-layer surfacing present in 79 of 80" is actually **79/79 nodes

= universal**, and civ-marks is 79/79 nodes plus the brief. Amend the denominators

to 79; both findings get slightly stronger.

---

B · PER-FINDING VERDICTS

AC-1 — L1.5 has no typed carrier · SURVIVES, AMENDED (recommendation is aimed at the wrong file)

Citations verified. CVD Pillar 12 is at _source/01_Tier_1_Foundation/T1_CVD_Creative_Vision_Document [ACTIVE v1.4].md L245–250. The design-intent quote (L247) and the executable test (L249) are verbatim, including "missing its L1 systems-play or its L1.5 ambient-culture layer = pillar violation" and "L1.5 cultural immersion delivered as lecture … = pillar violation". docs/SPINE_SCHEMA_v3.md L49 reads - layers: {L1|L2|L3 combo} exactly as quoted.

AMENDMENT 1 (material — the fix is cheaper than the draft says, and one pointer is wrong). The draft says to add L1.5 "to the existing beat layers value grammar in §3a and §4 (the enum already lives there)". It does not. SPINE_SCHEMA_v3.md §4 (L82–84) enumerates gameplay_function, scene_type, sq_stage, fork_kind, magnitude, direction, path_bucket, care_bandlayers is not among them. And the gate does not enforce it either: harness/check_spine_graph.py treats layers as *presence-only* (its own docstring: "layers / reveal (present-or-none, fixed grammar)"; the only code path is if not layers_line: E(f"{bid}: no layers field")). §6's checks list (L93) likewise covers "layers/reveal present-or-none", never enum membership.

Consequence, and it strengthens the finding: L1.5 is not blocked by any gate today — it is blocked only by the documented value grammar and by convention. The draft's framing "L1.5 is not a legal token" overstates the machinery; the accurate statement is *L1.5 has no documented legal form and consequently zero adoption in 909 rows*. Fix the §4 pointer (edit §3a L49 only) and the work drops to one doc line + backfill.

AMENDMENT 2 (material — reuse target mismatch). Recommendation step (2) extends harness/check_layer_register.py "which already globs every docs/spine/CH_*.md". Verified — it does glob the spine markdown (docstring L28–29), and the beat rows with layers: lines do live inline in the md (CH_02 carries 11 - layers: lines), so the corpus is reachable. But that gate's entire machinery is a *debunk-language leak detector* with a self-testing ruler and a waiver baseline (docs/layer_register_baseline.json); bolting a coverage assertion onto it mixes two unrelated failure modes in one exit code. Better reuse target: harness/check_spine_graph.py, which already parses per-beat layers lines, already owns the closed-enum checks, and already fires corpus-wide. One predicate there is idiomatic; in check_layer_register.py it is a squatter.

Self-refutation audit. The draft's rebuttal (b) — "DESIGNED-UNBUILT, the pipeline is young" — is correctly rejected: 909 typed rows and a teeth-verified graph gate is a mature layer, and WEAKER is the right class for an omission inside built machinery. Not MISSING is also correct, since the lane itself is ratified canon. Class WEAKER upheld.

Timidity check: clean. This adds measurement, removes no content, softens nothing.

---

AC-2 — "L2" means two things · SURVIVES UNCHANGED

Citations verified verbatim. The disambiguation ruling is real and sits exactly where claimed — CVD L250, Pillar 12 Cross-ref: "Disambiguation (Josh 2026-07-13): Pillar 12's engagement layers … and layer-model-v2's content lanes … 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." The three violating surfaces all check out: the spine block heading ## Three-layer surfacing with - L1 self-contained: … - L2 investigatable: (docs/spine/CH_02.md, engagement-track sense, framework unnamed); SPINE_SCHEMA_v3.md L49 unnamed; and harness/check_layer_register.py L10–11 verbatim: "L2 (Depth) = documented cultural authenticity, immersive, for invested players who slow down and read" — which is the engagement-track reading, filed under a header that says "CVD Pillar 12", i.e. the exact collision. Meanwhile CVD L248 defines the content-lane L2 as "completionist mastery — max skills, top-score every minigame…". The contradiction is real and load-bearing.

Dedupe check. Not a pre-registered divergence; this reports a *ruling unapplied*, which the register does not cover. Not re-litigation — the draft's rebuttal (b) is right.

Timidity check: clean (pure disambiguation, zero content effect).

---

AC-3 — Pillar 5 citation test has no tooth; 16 live rows fail it · SURVIVES UNCHANGED — strongest finding in the draft

Every number re-derived exactly (table A). CVD Pillar 5's executable test wording, harness/check_source_anchors.py's inward-only scope, and the absence of any gate reading primary_source/reward_class/evidence_tier all hold up. The recommendation is properly reuse-first (lint_canon_graph.py, already in gates_config.json) and correctly splits fail (reward without source) from report (the 88-row needs_research backlog as a visible number). The scoping discipline — 16 rows, not 88 — is exactly right and pre-empts the obvious objection.

Timidity check: clean. This is a *raise-the-bar* finding, not a softening one; it makes a doctrinal sentence enforceable at zero token cost.

---

AC-4 — citation columns typed machine-only, no player attribution surface · SURVIVES UNCHANGED

Verified in the game repo. C:\dev\Humanity\Humanity\Source\Humanity\Public\Data\CrossCulturalLinkGraphRow.h binds all 22 columns; link_name, source_anchor_name, target_anchor_name are FText; evidence_basis, reward_class, lore_pointer, evidence_tier, primary_source are all FString. The inference rules are as quoted: docs/REGISTRY_ROW_STRUCT_SPEC.md L34–35 (rule 2, the (title|name|…|blurb)$ promotion regex — note primary_source and lore_pointer genuinely cannot match it) and L50 (rule 7, "Default → FString — … everything else"). docs/row_struct_overrides.json holds exactly one entry. T1_UI_UX_Spec [DRAFT v0.1].md is 35 bytes. Every link in the chain holds.

Timidity check — this is the finding the unit-specific instruction targets, and it passes in the anti-timid direction. The draft's rebuttal (a) is correct on the doctrine: §4.6 show-never-tell binds the thesis and its 11 components, not documented history, and §17.1 affirmatively requires that true history is never hidden or scrubbed. Surfacing a bibliography is the *bolder* option and the draft takes it. No care inflation. Recommendation is genuinely reuse-first (the declared escape hatch, two JSON lines).

---

AC-5 — civilizational_marks authored 79/79 with no delivery channel · SURVIVES, AMENDED (one supporting argument is self-undermined)

Verified. Every node carries the block (80/80 files incl. the brief; 79/79 real nodes — amend the denominator per A-1). docs/spine/CH_15.md §"Civilizational marks (the culture as builders-of-knowledge, L2)" names Faulkner, Allen, Lehner and "Denys Stocks's peer-revi[ewed]" replication and binds Frame-A verbatim ("Egyptian agency and invention, never a hyperdiffusion or single-source-taught-the-world framing"). The clue lane is real and built (Public/Data/ClueRow.h + Public/Discovery/HumanityClueSubsystem.h both present in the game repo) and carries 10 rows in one node. 380 site rows across 79 nodes.

AMENDMENT (argument, not verdict). The draft's self-refutation (a) rebuts "marks are authorial-only" by citing check_layer_register.py's contract docstring for what L2 means to a player. That is the very docstring AC-2 in this same draft declares framework-confused. Using it as authority here is circular. The argument does not need it: cite CVD L248 instead, where the *content-lane* L2 is "completionist mastery" and the *engagement* L2 (§18.2) is investigatable depth — under either reading the marks are player-reachable content, not authorial substrate, and §17.1's reframe logic (AC-7's eight renames handing the real people to this layer) independently requires a player-meetable home. Swap the citation; the verdict stands.

Class check. DESIGNED-UNBUILT was correctly considered and correctly rejected: the *vehicle* is built, the *binding* is unspecified anywhere. I searched for a civ-mark delivery spec myself (below) and found none. WEAKER upheld.

Timidity check: clean, and notably anti-timid — it insists the honored real figures actually reach a player rather than sitting in a file, which is the §17.1 "never scrubbed" direction.

---

AC-6 — no reconstruction-fidelity disclosure · SURVIVES, AMENDED (weakest class call in the draft; upheld narrowly)

Citations verified. The D-MPV ladder is real and ruled: docs/translation/T99_Translation_Terrain.md L59 and L304 ("RULED (D-MPV, Josh 2026-07-21): per-AOI tiered ladder — 1 m/vertex hero set-pieces … 2 m standard playable · 5-10 m ambient/vista"). The alteration_list schema is at L225 exactly as quoted. docs/BUILD_PLAN_END_TO_END.md H9 (L282) confirms DESIGNED-UNBUILT verbatim: "no alteration_list instantiated on ANY of the 4 pages … and no carve script exists in Tools/". Zone catalogs re-counted: flores_island 11/11, bali 7/7, angkor_khmer 5/5, sumatra_java 4/4 — zone_bounds_wgs84, meters_per_vertex and care_tier populated on every row (27/27). Positive control on the absence: artistic licen|not to scale|what we changed|liberties = 0 hits repo-wide, while accuracy note returns 8 hits across 6 files through the same tool — the search reaches, the idiom is genuinely not ours.

Class attack (my strongest attempt to kill this one). I pushed hard on DESIGNED-UNBUILT, because the runbook forbids reporting designed work as MISSING. The draft pre-empted it correctly and explicitly: the change record is cited as DESIGNED-UNBUILT and is *not* re-reported; only the disclosure policy — a decision to state what was changed and where — is called MISSING, and I confirmed no such policy is designed anywhere. The split is legitimate.

AMENDMENT (scope honesty). This is nevertheless the draft's weakest class call, and the landing should say so: MISSING here names a *publishing/process* artifact, not a player-experience gap. It has no slice impact and no runtime surface. Recommend landing it as a one-paragraph addendum to the terrain lane (the draft's own recommendation step 1) rather than as a standalone register row — the fold-what-exists framing is right, the register-row weight is not.

Timidity check: clean, and actively anti-timid — the draft's argument that a stated compression policy lets us compress *harder* without an authenticity objection is correct and is the production-positive reading.

---

AC-7 — real named historical figures COVERED (exceeds) · SURVIVES UNCHANGED

_source/03_Tier_3_Characters/T3_Supporting_Characters [ACTIVE v1.0].md §8 at L858. Verified: §8.1 rosters (L864 al-Hasan + Ibn Battuta Ch 08; L866 Ch 10; L868 Ch 12; L870 Amanirenas-as-Nawitare Ch 14; L878 Enheduanna Ch 17); §8.3's three constraints incl. the witness-only register at L890 verbatim ("Protagonist witnesses without altering the documented record"); §8.4 production-blocking at L901. The Ch-15 eight-rename sweep and the D-15 Anders Poulsen AUDIT-ONLY ruling are as cited. COVERED (exceeds) is the correct and non-flattering verdict — §8.3 genuinely binds harder than the comparator.

---

AC-8 — anti-collectible-bloat COVERED with enforcement deferred · SURVIVES UNCHANGED

docs/proposals/SIGNIFICANCE_LENSES.md: five-gate filter + distance-decay budget at L168; the no-sprawl cap at L128–130 ("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 at L117 verbatim — and the full sentence is *more* anti-timid than the draft quotes: "A candidate that cannot be represented with care is cut, never sanitized-and-kept — thinning grounded material to the inoffensive is itself a §17.1 failure." .claude/skills/normalize-doc/SKILL.md rubric item 12 (L57) carries the myth-only-skew + isolated-village checks verbatim. Register #26 exists as quoted (L331-333, rank 9, lands before the 264-seed typing pass). Correctly deferred rather than re-minted.

---

AC-9 — no packaged teaching product · SURVIVES; CONTESTED ON SCOPE (the draft flags this itself)

Discovery Tour appears in exactly 2 files (docs/pipeline_review/REALM_ANALYSIS_LENS_GAPS_2026-07-27.md L24/L260/L266 — the draft missed L24, which does not change the file count — and docs/proposals/REALM_DESIGN_PROGRAM.md L1111). docs/MARKETING_WEB_PROGRAM.md L24 "## The four lanes" = Capture / Asset / Web skeleton / i18n, no companion lane; that doc also states at L15 that no web lane existed at all before 2026-07-28, so it is two days old and a fifth lane is a genuinely cheap addition. Twelve region pages re-counted directly: 12 .md pages. The flores_island.md honesty quote is verbatim ("the ikat-weaving query scored only 0.32 region-filtered, an honest 'no strong textile substrate yet' rather than a false Egypt citation").

Nit (not a defect): the draft calls grand_sage_silence "gate #25"; in harness/gates_config.json it is the 24th of 30 gates. The gate exists and is correctly named; drop the ordinal.

Timidity check: clean. Rebuttal (a) is doctrinally right — §4.6 binds the thesis and its 11 components, not documented history, and the grand_sage_silence gate already polices that boundary.

---

AC-10 — 53 vista sites pay nothing · SURVIVES, AMENDED (aspect-owner collision — director dedupe required)

Numbers exact (380 sites, 53 carrying vista, full token tally identical). docs/SPINE_SCHEMA_v3.md §3b L56 carries the {vista|threshold|sacred|climactic_geometry|weather_dramatic} enum as quoted. Photo mode = 0 hits in both repos (canon repo and C:\dev\Humanity\Humanity\Source), and the control holds (civmark-family terms return 278 hits across 111 files through the same tool). Cell 24 exists in docs/DESIGN_GAP_REGISTER.md L420.

AMENDMENT (material, landing-blocking). Cell 24's claiming lens is ac-traversal (sightseeing/vista aspect), and the register's new-aspect row sightseeing-vista-reward (ac-traversal) (L436) is that sibling lens's row, not this one's — and ac-traversal is running in the same P1-B wave (wave board L457). This lens's four owned aspect rows are the ones at L433-435: cultural-consultation-disclosure, real-place-reconstruction-fidelity, secondary-modes-from-one-world-build, source-attribution-surface — all (ac-historical). AC-10 therefore reaches into a sibling's territory. The draft handles this as well as it can (it amends rather than mints), but the director must dedupe AC-10 against the ac-traversal return at landing or cell 24 gets two overlapping amendments from one wave. The genuinely new-to-this-lens half is the civ-mark↔vista binding (a teaching payload at the viewpoint), which is ac-historical territory; the *vista-as-reward* half is ac-traversal's. Recommend splitting AC-10 on that seam.

---

AC-11 — no frame device, DIVERGENT-BY-DESIGN · SURVIVES UNCHANGED

CVD L963 verbatim: "Real is real. The metaphysical is canonically real per §2. … Precursor civilizations, the threshold realms, and submerged sites are real in-world per §3." Pillar 12's "L3 canonical truth declared explicitly in dialogue/marketing/UI = pillar violation" is at L249. The divergence is correctly classed and the residual obligation (AC-6 + AC-9 + AC-14 as one honesty burden, not three optional extras) is the most useful sentence in the draft — it prevents a later lens from picking off one of the three and calling the obligation served.

---

AC-12 — time_fluctuation_range 23/79 · SURVIVES, AMENDED (strengthened by a third case the draft missed)

Re-derived off registries/T0_Chapter_Index [ACTIVE v1.2]/T0_Chapter_Index DRAFT v1.1.csv: 79 rows; era 79/79; time_fluctuation_range 23/79; mode_variety_check 79/79. Per-chapter check reproduces the draft exactly — CH_10 ("Pleistocene-era megafauna time-fluctuation"), CH_12 ("Atlantic slave trade 1500-1888 CE"), CH_42 ("Bois Caïman 1791 time fluctuation") populated; CH_07, CH_08, CH_14, CH_15, CH_17 empty.

AMENDMENT (strengthens the finding). The draft rests its case on Ch 08 and Ch 17. There is a third demonstrable false-empty: §8.1 L870 stages "Julius Cornelius … Roman Campaign Veteran time-fluctuation encounter from 24-22 BCE Roman-Meroe war window" in Ch 14 — and CH_14's time_fluctuation_range is empty. Three named protocol users with no machine window is past the point where the column can be read as a signal. Cite Ch 14 alongside Ch 08 and Ch 17.

Timidity check: clean (a derivation, not a restriction).

---

AC-13 — the "never lectured" test is enforced on body prose only · SURVIVES UNCHANGED

CVD L249 carries the executable test verbatim; L951 restates it in §17.1 verbatim ("Care means weight and authenticity. Care never means omission, reverence-gloss, or rated-G sanitization, and it never means lecturing the player — the surface stays fun-first, action-forward, and explorable"). .claude/skills/normalize-doc/SKILL.md rubric item 6 (L43) does scope "cultural immersion as flavor not lecture" inside "the 9-item body-prose checklist" at ~300-1200 words. Positive control on the harness zero: lectur = 0 across harness/; control debunk = 9 hits across 3 harness files through the same tool. The zero is real.

I checked whether another rubric item already covers player-facing strings and closes the gap: the item at L35 does sweep a wide player-facing surface list (body prose, side-questlines, main-quest beats, boss win-condition, NPC dialogue anchors, L1 bullet, L2 objective, everything-woven, three-layer surfacing) — but it polices debunk/invoke-and-negate language, a different failure mode. The lecture rule genuinely remains body-prose-scoped. Finding holds.

Timidity check: clean and explicitly anti-timid — the draft ran this check itself and is right that the recommendation *reduces* explanatory text and pushes toward showing.

---

AC-14 — no ship-time sources-and-care disclosure · SURVIVES, AMENDED (anti-ratchet wording guard added — this is the finding the unit brief targets)

Citations verified. CVD §17.1 L953 carries the calibration verbatim, including every clause the draft leans on: "Every care judgement ABOVE that floor is ruled by the build loop rather than escalated: true history is never hidden or scrubbed … where material reads insensitive the instrument is renaming or reframing it, never removing it; and care-tier inflation is itself a defect, because the timid option in a rated-M action-adventure fantasy RPG is usually the wrong one. … Josh is the backstop." The live care-banding re-derived exactly off build/spine_rows/*/forks.csv: open 45 · protected-elevated 21 · elevated 13 · maximum 7 · antisemitism-guardrail 4, with CH_29 / CH_42 / CH_57 each at maximum and CH_12/13/47/50 at protected-elevated. care_scope is gate 23 of 30 in gates_config.json. Positive control on the absence holds.

THE DEVIL'S-ADVOCATE-AGAINST-TIMIDITY PASS, RUN HARD (per the unit brief).

The draft passes the obvious test: it recommends no sensitivity-reader lane, no external veto, no content review, no authoring gate, and explicitly refuses to re-litigate the delegation ruling. Zero content is scrubbed, softened, renamed away, or gated. Judged as written, this is not care-tier inflation.

But there is a second-order timidity risk the draft does not name, and it is the real one. A published care statement is a *commitment surface*. Once it exists, a future loop pass — or a future critic — can cite it as authority to remove or soften content it would otherwise have kept, on the reasoning "we published a standard." That is exactly the ratchet §17.1 L953 was written to stop. The artifact is safe; the *wording* is where the defect would enter.

Guard (recommend binding it to the finding, not optional). If AC-14 lands, the statement must be written from §17.1's affirmative frame and must state what the work includes and how it is grounded — never what it avoids, protects, or declines to depict. Concretely: no "we chose not to depict…", no list of protections, no omission inventory, no language a later pass can read as a promise to remove. §17.1's own sentences are the template ("Care means weight and authenticity. Care never means omission, reverence-gloss, or rated-G sanitization"), and quoting the doctrine's *anti-omission* half is what keeps the artifact from becoming the instrument of the thing the doctrine forbids. A disclosure that reads as an inclusion-and-sourcing statement is anti-timid; one that reads as a content-warning ledger is the defect.

With that guard, AC-14 stands at LOW slice priority. Without it, I would contest it.

---

AC-15 — 25.1% of live beats are learning/discovery/investigation · SURVIVES UNCHANGED

228 of 909 = 25.08%; combat 185 = 20.35%. mode_variety_check 79/79 confirmed on the live Chapter_Index. The gameplay_function closed enum is at docs/SPINE_SCHEMA_v3.md §4 L82 as described. The honest caveat (learning ≠ necessarily *cultural* learning) is stated rather than buried, and the observation that AC-1's L1.5 token turns the proxy into an exact metric is the strongest argument in the draft for landing AC-1. Recording 25.1% as a watched baseline is the right no-action outcome.

---

AC-16 — per-region bibliographies complete-by-gate · SURVIVES UNCHANGED

harness/check_region_page.py L23-29 carries the whole-page use_class rule verbatim ("every SRC_ id cited ANYWHERE on the page must be declared in Section 16 on at least one line that also carries a use_class token"), and it is the region_pages gate in the 30-gate gates_config.json. The comments record the deliberate widening, and — a detail the draft did not claim and that strengthens the finding's honesty — L60-62 self-flags that angkor_khmer.md contains zero SRC ids so the rule is "VACUOUSLY satisfied there. That page's green is not evidence the use_class rule works." That is a gate that documents its own blind spot, which supports the COVERED (exceeds) verdict rather than undermining it. 12 region pages confirmed by direct count.

---

C · THE DRAFT'S OWN "REFUTED AND DROPPED" — AUDITED

All eight drops check out and none is a disguised gap.

Dedupe sweep against docs/DESIGN_GAP_REGISTER.md (entries 1-9, 20-45, the 24 cells, the new aspect rows): no finding in this draft duplicates a live register row. #21 (row-struct drift) is adjacent to AC-4 but distinct — I confirmed the CCLG struct is *not* drifted (22/22 columns bound), so AC-4 is about type *classification*, not drift. #22 (the four byte-empty T1 stubs) is correctly cited as context by AC-4 and AC-9 rather than re-minted. #26 is correctly deferred to by AC-8.

---

D · DEVIL'S-ADVOCATE-AGAINST-TIMIDITY — WHOLE-DRAFT SWEEP

Per the unit brief, every finding was re-read against the ruled calibration (CVD §17.1 L951/L953): care-tier inflation is a defect, true history is never scrubbed, rename-don't-remove, the timid option is usually wrong.

Result: zero care-inflated findings. The draft leans anti-timid throughout, correctly.

---

E · CONTESTED / DIRECTOR CALLS

1. AC-10 aspect-owner collision (NEW — landing-blocking). Cell 24 and the sightseeing-vista-reward aspect row belong to ac-traversal, which is running in this same P1-B wave. Dedupe AC-10 against that lens's return before folding. Recommend splitting on the seam: the civ-mark↔vista teaching binding is this lens's (ac-historical); the vista-as-reward half is ac-traversal's.

2. AC-1/AC-2 are LESS pillar-adjacent than the draft fears. The draft's contested item 3 offers to route them to a director-level commit. Having read check_spine_graph.py, I would not: no gate enforces the layers value set, so adding L1.5 changes a documentation grammar and nothing else. Pillar 12, its lanes and its tests are untouched. Downgrade to factory housekeeping — but fix the two recommendation errors first (§4 does not hold the enum; the gate predicate belongs in check_spine_graph.py, not check_layer_register.py).

3. AC-14 vs Josh's delegation ruling. I agree with the draft's reading — L953 delegates the *judgement*, and says nothing about what the shipped product states about its sources. I additionally require the anti-ratchet wording guard (§B/AC-14). If the director reads the ruling as covering disclosure too, AC-14 collapses into AC-9 with no loss.

4. AC-9 product scope. The draft's own flag stands. Note in its favour that MARKETING_WEB_PROGRAM.md is two days old and explicitly a new lane structure, so a fifth lane is cheap now and expensive later.

5. AC-6's MISSING class. Defensible but the draft's weakest. Land as a terrain-lane addendum paragraph rather than a register row.

---

F · LANDING RECOMMENDATION

LAND WITH AMENDMENTS — GO. Nothing is killed. This draft's evidence discipline is the best I have audited in this program: fifteen independent enumerations re-derived, fifteen exact, including four-way sub-counts on a 184-row cross-tab and a 909-row two-dimensional distribution. Every zero I re-ran was positive-controlled and real. The DESIGNED-UNBUILT / MISSING boundary was applied correctly in the one place it was genuinely hard (AC-6's record-vs-policy split), the pre-registered divergences were respected, and the draft records its own live method failure rather than hiding it.

Apply before folding into docs/DESIGN_GAP_REGISTER.md:

1. Denominator fix (global): 79 spine nodes, not 80 — CH_57_BUILD_BRIEF.md is not a node. Touches AC-1, AC-2, AC-5; makes AC-2's and AC-5's coverage numbers *stronger* (universal).

2. AC-1: drop the "§4" pointer (the layers enum lives only in §3a); re-aim the gate predicate at harness/check_spine_graph.py; restate the barrier as "no documented legal form", not "not a legal token" — nothing enforces it today.

3. AC-5: replace the check_layer_register.py-docstring citation for what L2 means with CVD L248 / §18.2 — the current argument leans on the very docstring AC-2 declares framework-confused.

4. AC-10: split on the civ-mark-binding vs vista-reward seam; dedupe with the ac-traversal return.

5. AC-12: add Ch 14 (Julius Cornelius, §8.1 L870) as the third demonstrable false-empty.

6. AC-14: bind the anti-ratchet wording guard to the finding (affirmative inclusion-and-sourcing frame only; never an omission inventory).

7. AC-8: carry SIGNIFICANCE_LENSES L117's full clause — "thinning grounded material to the inoffensive is itself a §17.1 failure" — into register #26's craft gate alongside the no-sprawl cap.

8. Nits: drop the "gate #25" ordinal for grand_sage_silence (it is 24th of 30); drop "Fifteen months of registry work later" in AC-3 — the repo history is weeks, and the rhetorical flourish is the only unsupported sentence in an otherwise fully-evidenced finding.

Priority order for the fold, on slice impact: AC-3 (zero-token gate, live violations) → AC-5 + AC-1 (slice, shared commit) → AC-13 (rides the natural-voice wave already scheduled) → AC-4 (two JSON lines) → AC-12 → AC-10 (after dedupe) → AC-6 / AC-9 / AC-14 (post-slice, ship lane).

---

Killed: 0 · Survived: 16 · Amended: 8 · Contested: 5

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