CRITIC_zelda-dungeon-tool-ladder.md

pipelines/CRITIC_zelda-dungeon-tool-ladder.md

CRITIC PASS — refutation verdict on LENS_zelda-dungeon-tool-ladder_DRAFT.md

Fresh-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**.

---

1. VERIFICATION LOG — what I re-derived myself

ClaimDraft saysI measuredVerdict
Site rows corpus-wide380 rows, 9 named columns79 files, 380 rows, header identicalEXACT
functions vocabulary12-token multi-value12 tokensEXACT
climactic_affordancenone 159 · sacred 48 · threshold 39 · climactic_geometry 23 · vista 20 · weather_dramatic 9identical standalone counts, 24 raw combosEXACT
FR rows6767 unique in MD, 67 riders in JSONEXACT
FR keyword scandungeon 1 · rift 0 · capacity 0 · piece 0 · agility 0 · course 0 · Hollow 0 · cleansing 0; control boss 10, clue 3, crossing 2, seam 1reproduced identicallyEXACT
declared_doc_setexactly 4 filesexactly 4, as listedEXACT
Vril-site corruption30 of 42 non-mastery, 6 real tokens42 rows; 6 real tokens; 6 NULL; 30 garbageEXACT
Literal corrupt row...,False,False,"""T01","T22""",NULL,NULL,byte-identical on VS_CH02_001EXACT
Asset columns blank6 columns blank on all 420 non-empty on all sixEXACT
revisit density179 hits / 30 nodes; Ch59=26, Ch60=24179 / 30; Ch59 26, Ch60 24EXACT
A_E3_002 cellstier 2.0 Zelator, Ch_15, perception, low, instant, sustained, resource_cost emptyevery cell matches; range_class/duration_class also emptyEXACT (col count 35 not 34)
Targeting occlusionnone; DistSquared onlyGatherCandidates L110 distance-only; IsStillValidTarget L250-259 targetable+range onlyEXACT
StancebOrientRotationToMovement=true at Character.cpp:80; toggle only calls ToggleLock()both exact; bUseControllerDesiredRotation exists only on HumanityEnemyCharacterEXACT
Camera collision`bDoCollisionTest\ProbeSize\CameraLagSpeed` → zerozero, with positive control TargetArmLength → 1 hit at L105, comment ILLUSTRATIVEEXACT
HL_007977 × 3 = 231verbatim in T0_Hard_LinesEXACT
HL_0028 / HL_0005three-rung ladder / entrance grammarverbatimEXACT
T1_Combat L63fifths quantum, 50 pieces, TWENTY to rift dungeons, 7 layers / 5 barsverbatim at L63EXACT
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_B13climax beat, crown_device_force_boundbeat header L177, out-state L180, §-note L282EXACT
CH_03 liang_bua_cavebacktrack site rowL89 verbatimEXACT
CH_71 teaching loop"nothing here can be failed out of"L139, 1 hitEXACT
DT-9 scopebound to crossingstitle 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-outonly sub-level streamingverbatimEXACT
REALM LAW 5L423-426 verbatimL423 verbatimEXACT
Register row 12 / entry 27quotedverbatim at L260 / L334EXACT
VOL2 U11.16/18/19quoted incl. rescope noteverbatim at L724-728EXACT
RUNTIME_GENERATIVE_LAYER layoutsingle hit = block-int4 model weightssingle hit, L232, exactly thatEXACT
"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.

---

2. AMENDMENTS (8) — findings that survive but must change before landing

A-1 (Z-1 + Z-5) — INTERNAL CONTRADICTION, and it changes the recommendation. Load-bearing.

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.

A-2 (Z-2) — recommendation move (1) is a mechanical no-op. Decisive.

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.

A-3 (Z-2, Z-14) — 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.

A-4 (Z-3) — an unaddressed COVERED register row must be deduped explicitly.

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.**

A-5 (Z-3) — cite the OPEN cell that has no owner. Strengthens the finding.

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.

A-6 (Z-15) — two line citations are wrong; the underlying canon is right.

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-7 (Z-5) — the repair spec is wrong in two mechanical details.

(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.

A-8 (whole audit) — 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.

---

3. DEVIL'S-ADVOCATE-AGAINST-TIMIDITY PASS

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).

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.

---

4. CONTESTED — for the director

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.

---

5. DEDUPE SWEEP — clean

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.

---

6. FINAL DISPOSITION

FindingClass as draftedCritic verdict
Z-1 interior gate schemaMISSINGSURVIVES — 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 ridersMISSINGSURVIVES — 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 ledgerMISSINGSURVIVES — amended (A-4 dedupe vs COVERED metroidvania row; A-5 claim ownerless cell 21)
Z-4 perception mode formWEAKERSURVIVES (35 cols not 34)
Z-5 vril-site corruptionWEAKERSURVIVES — amended (A-7: variable shift width; thread-anchor convention claim false)
Z-6 acquisition stagingCOVEREDSURVIVES — every quote verbatim
Z-7 boss-as-examCOVEREDSURVIVES
Z-8 heart-piece grainCOVEREDSURVIVES — exact
Z-9 dungeon identity briefWEAKERSURVIVES — exact
Z-10 targeting contractWEAKERSURVIVES — every code claim line-exact
Z-11 LAW 5 scopeWEAKERSURVIVES — exact; concur it is the highest-leverage item
Z-12 outstanding-work surfaceWEAKERSURVIVES — exact
Z-13 pop-up layoutDESIGNED-UNBUILTSURVIVES — contested class, low confidence, keep
Z-14 shortcut scopeWEAKERSURVIVES — amended (A-3 field labels)
Z-15 key economyDIVERGENT-BY-DESIGNSURVIVES — amended to CONTESTED (A-6 wrong line cites; §3 anti-timidity)
Z-16 DT-9 scopeWEAKERSURVIVES — 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.

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