Files the independent review corpus (fable/opus/external + audit, DAT-format, F418 DAT-geometry, retail decomp reconstruction) and the synthesis that adjudicates their disagreements: retail roots INTERIOR at the posed terrace defect pose with a ONE-CELL flood and ov=1 (the free captures rooted outdoor - both were real); the falls are outdoor landblock emitters 0xCF418000-13; the "thin seam bands" claim is DAT-refuted (full-size exits; the seam is a coincident double exit-to-outside plane at y=48); clear+seals live inside retail''s ov>0 block with a one-frame seal latch. Carries the instrument-first plan (falls-owner trace, depth checkpoints, pose conformance) and the decomp-pinned repair sequence toward FW4''s single-owner goal. Also sweeps in the probe scaffolding slice 5''s path-limited add had missed (RenderingDiagnostics field + the launch-options row wording). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
8.6 KiB
Cathedral rendering — the seven-report synthesis and adjudicated plan
2026-08-30. Synthesizes: the fable review, the opus review, the external
model review (owner-supplied), the code+probe-log audit, the DAT-format
report, the F418 DAT-geometry report, and the retail decomp
reconstruction (2026-08-30-cathedral-review-*.md). Where reports
disagreed, the adjudication below names the winner and the evidence.
Adjudications (the disagreements, settled)
- Root kind at the terrace. The fable review said "retail never
roots interior at the terrace" (top-level free traces: zero DI); the
external review cited
DI f4180104, ov=1, n=1. BOTH are right about different captures:posed/terrace-center.log(the defect pose) shows 39×DI f4180104+DC ov=1 n=1; the top-level free captures rooted outdoor. VERDICT: retail roots interior at our defect pose, with a ONE-CELL flood and healthy exit views. The divergence to chase is the FLOOD SHAPE and the exit-view survival, not the root kind. - The falls' identity. Opus said cell-0x106 stabs; the DAT-geometry report proves the falls emitters are OUTDOOR LANDBLOCK OBJECTS (0xCF418000–13: 7 east jets Setup 0x0200085A, 7 north jets 0x02000859, 6 lake mist 0x020003C5), and 0x4F418012–15 are cell 0x106's TORCHES + prop + plant. VERDICT: DAT-geometry wins (byte-exact parse); slice 5 moved torches — the in-cathedral particle regression. Confirmed by the external review. Residual: trace the 0xC owners' live route (never directly observed in any probe — instrumentation step 1).
- "Thin authored seam bands." REFUTED by the DAT: all exits at 0x104/0x106 are full-size (10.72×10.20 m facades, 24×9.2 m arches). Thin/empty exit views (the 66 ov==0 frames) are OUR projection/clip/traversal loss. The REAL seam: 0x104's south exit and 0x106's north exit are the SAME coincident rectangle at y=48, EACH authored exit-to-outside — two abutting buildings; retail cannot flood between these cells (they meet only through 0xFFFF portals).
- "Retail gates clear+seals on ov>0." Refined by the decomp
reconstruction: the WHOLE landscape→drain→stamp→clear→seals block is
inside
ov > 0(pc:432715), and the depth clear is additionally a ONE-FRAME LATCH armed by the previous frame's seals (portalsDrawnCount, pc:432725-32). Ours emits clear+seals unconditionally — divergence confirmed, mechanism refined. - "Stale color." Retail full-clears COLOR+depth every frame at BeginScene (Clear(7), pc:68673-86). Whether our ov==0 frames show stale color depends on our world-pass color-load behavior — UNVERIFIED; the instrumentation phase settles it. Either way the ov==0 frames are wrong (retail has ov=1 at those poses).
The frame truth (retail, interior root — the decomp reconstruction)
See 2026-08-30-cathedral-review-decomp.md for the full pc-cited version.
Load-bearing facts:
- TWO PViews: the root's (draw_landscape=1) and the look-ins' (draw_landscape=0, ov always 0) — look-in floods are ISOLATED from the root flood and never trigger landscape/clear/seals.
- Landscape (sky, terrain in_view-culled + drawn whole, buildings with punches + look-in interiors, outdoor objects INCLUDING the falls emitters' parts) all draws PRE-clear; the full alpha drain at pc:432720 resolves outdoor translucency vs outdoor depth.
- m_nFrameStamp re-arms mid-frame (pc:432722): straddling parts draw in BOTH scopes. "Emit once" is anti-retail.
- z-only clear (latch-gated) → exit seals: EVERY 0xFFFF portal of EVERY flooded cell, TRUE depth, DEPTHTEST_ALWAYS + write, invisible fan, clipped to the installed view.
- Interior shells (whole, once, z-test only) → interior objects/emitters (per-view sphere-cull, whole) → final drain vs interior+seal depth.
- Alpha lists: two FIFOs, NO sort at flush; order = the walk + per-cell CYpt insertion sort. Full-flush sites: DrawBuilding (0f!), DrawCells pre-clear, RenderNormalMode final; DrawBlock's per-cell 0.75 pressure valve (BN misread resolved — it DOES fire).
- ShouldDrawParticles = UPDATE-time NoDraw (distance; cell test VACUOUS for interior emitters — CEnvCell inherits constant PARTIALLY_INSIDE, PDB-verified ICF fold @0x005269f0).
Why six fixes failed (unanimous)
Slices 1–3+6 repaired real seams of the hybrid renderer; slices 4–5 acted on a misidentified target (torches ≠ falls) with an invented mechanism (sphere-straddle) — and no round measured depth at the artifact pixels or verified the target's identity against the DAT before editing. The two live defect mechanisms (the ov==0 frames; the missing degrade admission for marker anchors) were never in any slice's scope.
Per-commit ledger (final)
37febd1fslice 1 — KEEP (transitional; the walk owns outside views; fixed real punch-fan index aliasing).c40aecfcslice 2 — KEEP the rule (seal the walk's flood); REWORK: use the walk cell's installed views for the clip, not legacy per-cell slices/no-clip fallback (plan step 4).5f7ccdeaslice 3 — KEEP mechanically for now; REWORK: VisitedCells is a union of root flood + look-ins — retail stages those differently (plan step 2 splits the sets and re-sources the predicate).f3a03efcslice 4 — REVERTED (7f500b97).0d6cd5c0slice 5 — REVERTED (7f500b97).bb9212c7slice 6 — KEEP the one-turn/no-hard-clip principle; FIX: the interior terrain currently uses the full camera frustum — restore retail's in_view landcell culling under the active exit views (draw_check_blocks @0x00505f80) (plan step 8).
The plan (instrument-first; each step gated)
PHASE I — instrumentation (NO rendering edits):
- Falls-owner trace: watch owners 0xCF418000–13 live — route (outdoor-static vs other), walk turn, submission phase, drain point, projected bounds/depth. Never infer identity from aggregate sets again.
- Depth checkpoints: read back depth at one known-bad pixel after terrain / around punches / before the pre-clear drain / after clear / after seals / before the final drain. Distinguishes missing terrain depth vs punch overwrite vs clear/seal mis-gating vs particle depth state.
- Pose conformance: drive OUR walk at posed/terrace-center's exact camera. Retail truth: DI f4180104, root flood n=1, ov=1, and separate look-ins. Compare our root flood size, exit-view survival, and the VisitedCells composition (root vs look-in members). If we produce ov=0 or a multi-cell ROOT flood there, fix WalkPView projection/side/clip math FIRST — the F67–79 foundry residue is the same family, and the coincident y=48 double-exit plane is the prime suspect surface.
PHASE II — decomp-pinned repairs (one at a time, each with a falsifiable prediction and a connected check): 4. Split the stage sets: InteriorFloodCells (root flood, post-clear) / look-in cells (pre-clear, landscape scope) / VisitedLandscapeCellIds — delete every union-based stage decision (incl. slice 3's predicate source and the cell-owners particle union). 5. Gate clear+seals as retail does (the ov>0 block; note the seal-latch nuance for the clear). 6. Seals from the walk cell's installed views (drop the legacy clip borrow + unclipped fallback). 7. Retail particle staging: emitters draw at their owner cell's actual walk turn; adopt the frame-stamp boundary (mid-frame re-arm) so straddling parts draw in both scopes; delete SphereStraddlesExitPlane. 8. Alpha parity: DrawBuilding barrier = FULL flush; the queue preserves insertion order (remove the global distance sort); keep the 0.75 per-cell valve semantics. 9. Terrain: whole + unclipped (slice 6) but culled by the walk's in_view landcell set (draw_check_blocks port). 10. Re-land the runtime-hidden degrade admission for outdoor objects (the stalks = drawn never-drawn marker anchors; fce250ec is NOT an ancestor of this branch). If a stalk survives, log its live GUID→Setup→GfxObj chain.
PHASE III — FW4 completion: delete the legacy PortalVisibilityBuilder production role, legacy clip frames/viewcone feeds, packed dynamic routes; the walk becomes the sole frame-decision owner; architecture doc updated (it currently overstates single ownership).
Open questions carried
- Depth at the leaking pixel pre-drain (Phase I.2 answers).
- The 0xC falls owners' actual live route (Phase I.1 answers).
- Why full-size authored portals yield thin/zero views at some poses (Phase I.3 localizes; the fix lands in WalkPView).
- Our world-pass color-load behavior (stale color vs black on ov==0).
- Seal/punch clip equivalence vs retail setup_view+polyClipFinish.
- The ~1.5 MB/frame walk alloc tail (FW6).