pipelines/CRITIC_zelda-dungeon-tool-ladder.md
LENS_zelda-dungeon-tool-ladder_DRAFT.mdFresh-context adversarial critic. Both repos read READ-ONLY. Every finding attacked on four axes:
citation reality (file opened), verdict class (MISSING vs DESIGNED-UNBUILT re-searched independently),
reuse-first quality of the recommendation, and dedupe against docs/DESIGN_GAP_REGISTER.md including
the v1.2 ASPECT×LENS section dated 2026-07-28 (which the draft does not cite — see A-8).
Headline: 0 hard kills, 16 survive, 8 amended, 2 contested. This is an unusually well-evidenced
draft. I independently re-derived the two hardest data claims (the 380-row site schema and the 30/42
vril-site corruption) and both reproduced *exactly*, including the literal corrupted CSV line. Every
engine claim in Z-10 reproduced line-for-line. The defects I found are in two recommendations
(one is a mechanical no-op), one internal contradiction between Z-1 and Z-5, **two misfiled line
citations in Z-15, and a systematic line-offset artifact on one file**.
---
| Claim | Draft says | I measured | Verdict | ||
|---|---|---|---|---|---|
| Site rows corpus-wide | 380 rows, 9 named columns | 79 files, 380 rows, header identical | EXACT | ||
functions vocabulary | 12-token multi-value | 12 tokens | EXACT | ||
climactic_affordance | none 159 · sacred 48 · threshold 39 · climactic_geometry 23 · vista 20 · weather_dramatic 9 | identical standalone counts, 24 raw combos | EXACT | ||
| FR rows | 67 | 67 unique in MD, 67 riders in JSON | EXACT | ||
| FR keyword scan | dungeon 1 · rift 0 · capacity 0 · piece 0 · agility 0 · course 0 · Hollow 0 · cleansing 0; control boss 10, clue 3, crossing 2, seam 1 | reproduced identically | EXACT | ||
declared_doc_set | exactly 4 files | exactly 4, as listed | EXACT | ||
| Vril-site corruption | 30 of 42 non-mastery, 6 real tokens | 42 rows; 6 real tokens; 6 NULL; 30 garbage | EXACT | ||
| Literal corrupt row | ...,False,False,"""T01","T22""",NULL,NULL, | byte-identical on VS_CH02_001 | EXACT | ||
| Asset columns blank | 6 columns blank on all 42 | 0 non-empty on all six | EXACT | ||
revisit density | 179 hits / 30 nodes; Ch59=26, Ch60=24 | 179 / 30; Ch59 26, Ch60 24 | EXACT | ||
| A_E3_002 cells | tier 2.0 Zelator, Ch_15, perception, low, instant, sustained, resource_cost empty | every cell matches; range_class/duration_class also empty | EXACT (col count 35 not 34) | ||
| Targeting occlusion | none; DistSquared only | GatherCandidates L110 distance-only; IsStillValidTarget L250-259 targetable+range only | EXACT | ||
| Stance | bOrientRotationToMovement=true at Character.cpp:80; toggle only calls ToggleLock() | both exact; bUseControllerDesiredRotation exists only on HumanityEnemyCharacter | EXACT | ||
| Camera collision | `bDoCollisionTest\ | ProbeSize\ | CameraLagSpeed` → zero | zero, with positive control TargetArmLength → 1 hit at L105, comment ILLUSTRATIVE | EXACT |
| HL_0079 | 77 × 3 = 231 | verbatim in T0_Hard_Lines | EXACT | ||
| HL_0028 / HL_0005 | three-rung ladder / entrance grammar | verbatim | EXACT | ||
| T1_Combat L63 | fifths quantum, 50 pieces, TWENTY to rift dungeons, 7 layers / 5 bars | verbatim at L63 | EXACT | ||
| CH_38 acquisition quote | "carried dormant since Egypt … comes awake at last … clear enough to bear it" | verbatim, all on L28 (my first grep false-negatived on line truncation — re-checked with full-line output) | EXACT | ||
| CH_15 CH15_B13 | climax beat, crown_device_force_bound | beat header L177, out-state L180, §-note L282 | EXACT | ||
| CH_03 liang_bua_cave | backtrack site row | L89 verbatim | EXACT | ||
| CH_71 teaching loop | "nothing here can be failed out of" | L139, 1 hit | EXACT | ||
| DT-9 scope | bound to crossings | title is literally "A CROSSING IS A FRAMED SURFACE"; "the seam-typing pass runs the same check on all 78 seams" | EXACT | ||
| CC §2.2 scope-out | only sub-level streaming | verbatim | EXACT | ||
| REALM LAW 5 | L423-426 verbatim | L423 verbatim | EXACT | ||
| Register row 12 / entry 27 | quoted | verbatim at L260 / L334 | EXACT | ||
| VOL2 U11.16/18/19 | quoted incl. rescope note | verbatim at L724-728 | EXACT | ||
RUNTIME_GENERATIVE_LAYER layout | single hit = block-int4 model weights | single hit, L232, exactly that | EXACT | ||
| "key item" canon | (Z-15 absence) | key item/key_item 0 with working control (keystone 44, dungeon in 6 docs) | EXACT |
Independent absence re-run for Z-1. My own Python scan (2,348 files across `docs/ _source/
registries/ .claude/, control site_id → 126 files) returns room graph 0, floorplan` 2,
floor plan 9 — and the raw room/chamber volume (28,701 / 14,015) is prose noise exactly as the
draft reported after reading its sample. Targeted ripgrep for `room graph|gated room|room-to-room|
multi-room|dungeon layout|puzzle room across docs/**/*.md` returns three hits, all unrelated
(a Tier-0 "Neophyte antechamber" grade proposal, a Nysa "antechamber-door" metaphor, and a
3D-reconstruction paper's "multi-room scenes"). The absence is real and independently confirmed.
---
Z-1 states flatly: *"Not one column, in any registry or spine row, expresses 'this part of this place
is closed until you have X.'"* Z-5, in the same audit, states: T0_Vril_Site_Registry is *"the only
live registry with a per-place gating column: mastery_tier_required."* Both cannot stand as worded.
Z-1's *sub-space* claim survives (a whole-site tier gate cannot say which part of a site opens); its
*absolute* claim does not.
This is not cosmetic, because it moves the reuse-first target. The Hollow record's D-2 ruling
(HOLLOW_EXPANSION_INTEGRATION_2026-07-27.md §10 C-1) rules **R-A primary with R-D as the entrance
grammar**, and R-D says verbatim that *"authored stat-upgrade dungeons sit at ruins, tombs and
megalith sites already in T0_Vril_Site_Registry."* So the ruled home of an authored dungeon's
entrance is the very registry whose gating column Z-5 is repairing.
Amended recommendation: land Z-1 and Z-5 as one move, not two. Repair
mastery_tier_required (Z-5) and extend the *same* gate vocabulary — verbs, devices, mastery tiers —
rather than minting an unrelated entry_gate token space on the spine site row. Z-1's genuine new
requirement is only the sub-site grain (entry_gate + internal_shortcut on the §3b row) plus
an FK from the spine site row to the vril-site row that already carries the place-level gate. State
D-2/R-D as the ruling that makes this the reuse-first home. Zero new systems still holds.
Z-2 recommends adding HOLLOW_EXPANSION_INTEGRATION and the ledger to declared_doc_set *"so R1
pulls their OWNER: lines into coverage."* I measured both docs:
grep -c "OWNER:" HOLLOW_EXPANSION_INTEGRATION_2026-07-27.md -> 0 grep -c "OWNER:" PRE_5090_BUILD_PLAN.md -> 0 (control: DESIGN_GAP_REGISTER.md -> 10, COMBAT_PROGRAM_ADDENDUM.md -> 13)
R1 also scans promise_phrases (harness/check_factory_contract.py r1_coverage), so I checked
that path too — all five phrases (the factory inherits, joins the P5 factory, `the factory per
chapter, the P5 factory…gains, the factory's authored lanes`): 0 hits in both docs.
Adding those two files to declared_doc_set therefore pulls in nothing at all — and the gate's
own VACUITY GUARD (F2) exists precisely because *"a search that cannot match reports zero and looks
exactly like a clean repo."* Amended: either (a) author OWNER: lines into the two ruling docs
*first*, then declare them, or (b) reuse-first and cheaper — put the four dungeon/capacity OWNER:
lines in DESIGN_GAP_REGISTER.md, which is already declared and already carries 10 of them.
Move (2) — the four rider rows — is unaffected and is the finding's real substance; it stands.
data_home / consumption_point labels are swapped in both findings.Actual JSON for FR-016: data_home: "NONE_YET(rank 7)" · `tooth: "NONE(the shortcut clause is a
W-SPACE grammar affordance with no data column today)" · consumption_point: "plan:rank7"`. The
draft reports the NONE(...) string as data_home and NONE_YET as consumption. Same inversion
on FR-063 (data_home NONE_YET(rank 21), tooth NONE(...), consumption_point plan:rank21 — the
draft says consumption NONE). Substance unaffected (there is genuinely no data column); the field
names must be corrected or the rider edit will be written to the wrong cell.
DESIGN_GAP_REGISTER.md §Covered lists, under Elden Ring: *"Progression as new verbs, not bigger
numbers (metroidvania)"* — COVERED. Z-3 uses the same word for its claim and never
distinguishes itself from that row. The distinction is real and defensible (the COVERED row is about
progression *form* — verbs rather than stat inflation — while Z-3 is about *spatial re-entry*), and
the draft's own evidence supports it, but the wave rule requires the dedupe on the page. **Survives
with the dedupe paragraph added.**
Register v1.2 cell 21: *"Late-unlocked FLIGHT inverting walked geography — ac-domains (ship-as-
domain only) — OPEN in part — the flight-inversion half has NO owner."* That is the same lesson
(a late tool re-reads ground already walked) at Vimana grain, and it is a standing ownerless gap.
Z-3 should claim it. This raises Z-3's priority rather than lowering it.
Draft cites CVD L977 and T1_Ability_Tree §2 L49/L68 for *"every mastery tier requires a
quest-unlock, never a numerical threshold."* Actual content at those lines: CVD L977 = the banned-
tropes §17.1 paragraph; ABIL L49 = T1_Vril §9 owning the Vril Sight mapping; ABIL L68 = "First Order
Outer Tiers covering numerical 1-99." None states the rule. The rule is real and easy to cite
correctly: CVD L1031 (*"Every tier requires a quest-unlock, not just numerical threshold hit."*),
T1_Ability_Tree L46 (*"CVD §17.5 owns the mastery framework hard line"*), L89, and L511.
The CVD §12.1 citation is correct (§12.1 spans L617-671; the "becoming a practitioner…rather than
leveling up a stat" quote is at L621).
(a) *"every downstream column shifts one place left"* — the shift magnitude varies by row. VS_CH02_001
shifts by 1 (one quoted list split); VS_CH14_001 shifts by 2 because vril_function *also* split
("""harnessing","recharge_passive"""). A repair script assuming a uniform 1-column shift will
corrupt the 2-shift rows. (b) *"restore thread_anchors as a semicolon list (the convention **6 clean
rows** already use — T03;T08;T13;T17)"* — false. Of the 13 clean-thread rows: comma 6 (T02,T16),
pipe 4 (T13 | T18 | T22), semicolon 2 (VS_CH67_001, VS_CH68_001). Semicolon may still be the
right target (it is the convention in build/spine_rows), but it must be chosen and stated as a
normalization decision, not asserted as the existing majority convention.
PRE_5090_BUILD_PLAN.md line refs run ~24 low.The file is CRLF (1,975 CR / 1,975 LF). Python/editor-authoritative numbers: TWENTY-dungeon ruling
L314 (draft: L290-300); "~3-4 bounded dungeons" L323 (draft: L299); cleansing meter
L519 (draft: L495); visibility law ≈L498-500 (draft: L474-476). Every quotation is real and
verbatim — only the anchors are off, and only on this one file (I re-checked all other cited files
with Python: T1_Combat L63, FACTORY_CONTRACT L130, MILESTONE L331, CH_03 L89, CH_71 L139,
REALM L423/533/765/999, PRESENTATION L497/768/858, VOL2 L724-728, register L260/L334 — **all
exact**). Re-anchor the PRE_5090 refs before landing so the director can find them.
---
One finding is over-conservative: Z-15. It declares DIVERGENT-BY-DESIGN on the small-key economy
resting on (i) the mastery-tier quest-unlock hard line, (ii) the no-scoreboard posture, and (iii) "the
ruled inventory-minimum posture."
bought with a number. A dungeon door key is not a mastery tier. Extending a progression-gating hard
line to ban a level-design object is doctrine-stretching.
*progression stats*, and CVD §17.12 ratifies completion reads).
PG-12 inventory-minimum at PRE_5090_BUILD_PLAN_VOL2.md L883, routed to P2.6/economy and scoped slice-LOW for Ch 2. That
is a slice-scoping posture, not an arc-wide ban on key objects.
Against it stands a direct positive licence: HL_0005 — *"Ancient ruins, tombs, and abandoned
temples MAY be trap-laden puzzle-dungeons — classic adventure fun; the trap-dungeon ban is lifted for
non-living, ruined sites."* Canon has already ruled *toward* the classic dungeon idiom here.
Amended class: CONTESTED (open director call), not DIVERGENT-BY-DESIGN. The draft's own narrow
allowance — a named, single-instance diegetic seal-object as an entry_gate value — should be the
default, with only a countable stackable key *currency* held for a ruling. The draft ran its own
anti-timidity check and reached nearly this position; it then filed the timid half as the verdict
class. Nothing else in the audit is care-inflated or defanged: Z-1/Z-11's trap-and-gate interiors,
Z-10's occlusion/stance clauses, and Z-9's per-dungeon identity briefs are all at or above the R-17+
AAA bar, and no finding proposes omission where weight is the correct tool.
---
1. Z-15's verdict class. Recommend re-filing as CONTESTED per §3 above, with the diegetic
seal-object permitted by default. Josh fork: none — this is execution inside the locked vision;
director call only.
2. Z-13's DESIGNED-UNBUILT class (low confidence, keep as-is). Arguable that a pop-up's *layout*
has no spec at all → MISSING(spec). I do not kill it: the kit of parts is budgeted
(PRESENTATION_DOCTRINE.md L768, "one corridor kit, re-skinned per region"), the entrance grammar
is ruled (HL_0005 + D-2 R-D), and the governance is ruled — so what is absent is assembly,
not doctrine. DESIGNED-UNBUILT is defensible and the draft's stated reason for choosing the
conservative class (so a later wave does not read the blank as licence for a generator) is sound.
---
Checked against register §Covered/Divergent, the 9 ranked + rows 10-19 + entries 20-45, **and the
v1.2 ASPECT×LENS matrix (2026-07-28)**. No finding re-litigates a pre-registered divergence:
Enterable interior density (GTA, DIVERGENT) is explicitly respected in the draft preamble;
Markerless navigation (WoW, DIVERGENT) is correctly handled by Z-12; `Corridor-arena spatial
grammar` (FF7R, COVERED) is correctly distinguished by Z-1 at arena-vs-interior grain; row 4
(silhouettes) is creature-families + landmarks, not interior identity, so Z-9 is clear; row 17 is
enemy-weakness reading, not environmental search, so Z-4 is clear; row 29 (presentation doctrine) is
closed on camera *continuity*, and §2.2 scopes out the combat/enclosed-space camera, so Z-10 is clear.
The one miss is A-4 (the Elden Ring metroidvania COVERED row vs Z-3) and A-5 (cell 21, ownerless).
The draft's own "Refuted and dropped" section is honest: I spot-verified three of its self-kills
(lock-on built, LAW 5 exists, T1_Combat L63 covers the heart-piece analog) and all three were
correctly killed for the stated reason.
---
| Finding | Class as drafted | Critic verdict |
|---|---|---|
| Z-1 interior gate schema | MISSING | SURVIVES — amended (A-1: absolute phrasing refuted at site grain by Z-5's own column; retarget onto mastery_tier_required + D-2/R-D; sub-site grain is the real new ask) |
| Z-2 factory riders | MISSING | SURVIVES — amended (A-2: move 1 is a no-op, 0 OWNER: lines and 0 promise-phrase hits; A-3 field labels) |
| Z-3 backward re-open ledger | MISSING | SURVIVES — amended (A-4 dedupe vs COVERED metroidvania row; A-5 claim ownerless cell 21) |
| Z-4 perception mode form | WEAKER | SURVIVES (35 cols not 34) |
| Z-5 vril-site corruption | WEAKER | SURVIVES — amended (A-7: variable shift width; thread-anchor convention claim false) |
| Z-6 acquisition staging | COVERED | SURVIVES — every quote verbatim |
| Z-7 boss-as-exam | COVERED | SURVIVES |
| Z-8 heart-piece grain | COVERED | SURVIVES — exact |
| Z-9 dungeon identity brief | WEAKER | SURVIVES — exact |
| Z-10 targeting contract | WEAKER | SURVIVES — every code claim line-exact |
| Z-11 LAW 5 scope | WEAKER | SURVIVES — exact; concur it is the highest-leverage item |
| Z-12 outstanding-work surface | WEAKER | SURVIVES — exact |
| Z-13 pop-up layout | DESIGNED-UNBUILT | SURVIVES — contested class, low confidence, keep |
| Z-14 shortcut scope | WEAKER | SURVIVES — amended (A-3 field labels) |
| Z-15 key economy | DIVERGENT-BY-DESIGN | SURVIVES — amended to CONTESTED (A-6 wrong line cites; §3 anti-timidity) |
| Z-16 DT-9 scope | WEAKER | SURVIVES — exact |
Killed: 0 · Survived: 16 · Amended: 8 · Contested: 2.
Landing order I would keep as the draft has it (Z-1 → Z-11 → Z-2 → Z-5 → Z-10), with one change:
land Z-5 with Z-1 as a single schema move per A-1, because the repair and the gate column are the
same column at the same grain, and D-2/R-D already ruled that registry the home of an authored
dungeon's entrance.