acdream/docs/research/2026-08-30-cathedral-review-audit.md
Erik 6d990d38b3 docs: the cathedral seven-report synthesis + adjudicated FW4 plan
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>
2026-08-30 20:52:14 +02:00

9 KiB
Raw Blame History

Cathedral review — code + probe-log audit (companion report)

Delivered 2026-08-30 by the code/log audit agent (separate from the fable/opus mechanism reviews; this one audited the six commits, the exact HEAD frame flow, and every fw3-*/fw4-* probe log of the day). The full text below is verbatim from the agent's report.

Executive synthesis

  1. All six FW4 slices behave as written on frames where the walk yields exit views — the post-slice-6 log shows the falls emitting pre-clear and draining over full-screen terrain depth on those frames.
  2. Two defect mechanisms visible in the FINAL log are untouched by all six commits:
    • Anomaly 1 — ov==0 frames: 66 of 26,601 interior frames at the terrace produced ZERO walk exit views → RetailFrameWalk.DrawInside skips DrawLandscape entirely → no terrain color, no terrain depth, no sky that frame. Everything drawn that frame (pre-clear alpha included — 17 frames had the falls straddler set drain against an EMPTY depth buffer) composites over stale color. These are the seam frames. Slices 15 fixed staging; slice 6 fixed clipping WHEN the landscape turn runs; nothing addressed the no-views case.
    • Anomaly 2 — cell 0xF418010D never floods: the connecting portal from f418010c classifies inview=1 (a FACING SURFACE, not an armed opening) at the terrace viewpoint ([walk-portal] init cell=f418010c i=1 dest=f418010d d=-23..-50 pside=0 inview=1), so the walk never traverses into it: never sealed, always fails the outside-stage flood gate (outside=0 in every sampled [walk-dyn] line since the probe existed), and its r≈10 m weenies (the STALKS: f428a/f428b etc.) ride DynamicLast — post-clear meshes that z-pass over every vista pixel no seal covers, on EVERY interior frame.
  3. Combined with the fable review's oracle-trace finding (retail has ZERO interior-rooted frames at the terrace — terrace-center.log and terrace-edge.log contain no DI lines at all; the whole cathedral arrives as ov=0 n=1 building look-ins under an OUTDOOR root), the remaining user-visible defects reduce to:
    • ROOT DIVERGENCE A: our camera-cell resolution roots INTERIOR at the terrace where retail roots OUTDOOR. An outdoor root has no clear, no seals, no ov==0 case — the entire problem class does not exist in retail's frame shape at these poses.
    • ROOT DIVERGENCE B: the walk's portal side classification at f418010c → f418010d (facing-surface vs opening — PortalSide vs the sign of d, WalkPView.cs:103-120) — the same family as the FW1 foundry F6779 residue.
  4. UNVERIFIED (flagged, not papered over): whether the old apparatus's flood contains f418010d (needed for the stalk meshes' DynamicLast viewcone admission); the exact dat portal/panel geometry behind the 66 ov==0 frames; the color-attachment load behavior behind slice 6's "stale color" claim.

Full audit text

PART 1 — The six same-day commits (times: 18:21 / 19:22 / 19:28 / 19:37 / 19:58 / 20:06)

  • 37febd1f slice 1: interior outside-view slices from the walk (ClipFrameAssembler.ReassembleOutsideViewFromWalk; PrepareClipFrame moved below the walk block; Landscape event carries ViewCount; the per-view TerrainSlice fan; activeTerrainSliceCount deleted; ACDREAM_PROBE_WALK_ROOT added). 4 new materializer tests.
  • c40aecfc slice 2: exit seals stamp the walk's own flood (WalkFrameDriver.InteriorFloodCells; DrawWalkExitPortalMasks — the walk decides WHICH cells seal, the OLD assembly still decides the per-cell CLIP, unclipped fallback). Phase-tag probe apparatus added. No test changes.
  • 5f7ccdea slice 3: outsideStageFlood = walkDriver.VisitedCells passed to BOTH DynamicDrawsInOutsideStage call sites (renderer + frame product). [walk-dyn] probe. No test changes.
  • f3a03efc slice 4: interior roots keep outside-stage owners (straddlers included) in the pre-clear union, record them in _preClearParticleOwnerScratch, both DrawDynamicsLast arms subtract. Outdoor keeps ExceptRoute(DynamicLast). No test changes.
  • 0d6cd5c0 slice 5: the falls re-identified as EnvCell stab statics; SphereStraddlesExitPlane extracted; straddling flood-cell statics' owners submit pre-clear, post-replay cell union subtracts. [walk-emit]/[walk-portal] probes. No test changes.
  • bb9212c7 slice 6: one TerrainSlice(0) fan; interior roots draw terrain+sky UNCLIPPED (view-culled only); outdoor keeps the sliced path. Latent: the bounds check at WalkLeaf.cs:81-86 still throws if the reassembly yields 0 slices while a Landscape turn fired. No test changes.

Test posture: slice 1 shipped tests; slices 26 shipped zero test changes (probe + production only).

PART 2 — HEAD frame flow for an interior-rooted production frame

Setup: BeginFrame (phase:=pre) → OLD PortalVisibilityBuilder.Build → BuildInteriorRootLookIns (old apparatus) → AssembleClipFrame + AppendLookInClipFrames (old per-cell slices) → walk Collect (no GPU; flood → optional Landscape turn iff OutsideView.ViewCount > 0 → building turns → OnInteriorFloodDrawTurn: Clear/Seals events + InteriorFloodCells + flood cell turns) → ReassembleOutsideViewFromWalk → the ONE PrepareClipFrame → prepareCells = old look-in walk → ViewconeCuller.Build (outside planes = walk-derived; per-cell planes = OLD) → BuildAndBorrow with outsideStageFlood = walk VisitedCells → routes: LookInObject (old-assembly slices), LandscapeOutsideDynamic (walk slices + cone), DynamicLast (indoor dynamics; viewcone from OLD per-cell planes — a cell with NO plane set returns false).

Replay (pre-clear only when a Landscape turn recorded): Sky (unclipped, interior) → TerrainSlice(0) (unclipped, depth write ON) → interleaved static/building/look-in mesh ranges + AlphaBarrier partial drains + punch fans (stencil far-Z, clipped by the walk view pinned at emission) → ClearInteriorDepth event → closure: [static-owner particles + slice-5 straddler statics + DrawLandscapeDynamicsPhase (EARLY-OUTS ENTIRELY if OutsideViewSlices.Length == 0) ] → FlushLandscapeAlpha (the pre-clear drain, full far→near over true landscape depth) → ClearInteriorDepth (depth aspect only, color preserved; phase:=post) → ExitSeals (walk InteriorFloodCells × old-assembly clips; TRUE depth, ALWAYS+write, no color; cells not in the walk flood never seal) → flood CellShell + statics (the interior repaint).

Post-replay: cell-owner particles (walk flood minus look-ins minus straddlers; post, deferred) → DrawDynamicsLast (post-clear meshes, old-plane viewcone; particles minus pre-set) → unattached-interior → MarkVisibleCells(old look-in walk) → final alpha EndFrame drain (far→near, depth LESS/no write vs clear+seal+repaint depth) → ParticleVisibilityController admission = the union of both apparatuses.

Structural observations: the walk decides the seal CELL SET, the OLD assembly still decides seal clips, look-in slices, and the DynamicLast per-cell viewcone; the walk's thin exit views still gate all dynamics staging; if ViewCount == 0 no Landscape turn fires at all while clear + seals + repaint still run.

PART 3 — Probe-log findings

Log-era map: fw3-walk-root-probe.log 18:09 = pre-slice-1 AND NOT the cathedral (all roots 0xA9B4… — the stairwell investigation); fw3-falls-probe.log 19:23 ≈ slice-2; fw4-seal-gate 19:27; fw4-slice3-gate 19:32; fw4-slice4-gate 19:44; fw4-portal-probe 19:50 (slice-4 + uncommitted slice-5 probes); fw4-slice5-gate ≈19:59; fw4-slice6-gate 20:23 = the ONLY post-slice-6 run.

  • The falls emitters are 4f418012..15 + f4180106 (InteriorEntityId- Allocator statics of cell 0xF4180106), riding a per-look-in-cell DrawCellParticles union; viewer=0xF4180106 appears in ZERO [walk-root] lines (the 8-frame post-flip sampler never caught it).
  • Post-slice-6 frames WITH exit views: falls pre-clear, no cell-owners/dyn-owners post — the staging repairs work as written.
  • ANOMALY 1: 66/26,601 interior frames with NO landscape turn (no SkyPreScene, no outdoor static-owners, no unattached-outdoor) — the ov==0 shape; all 66 carry dyn-owners n=2 ids=[f4243,f4287] phase=post, and 17 carry a pre-clear falls drain against EMPTY depth.
  • ANOMALY 2: cell f418010d in ZERO walkCells lists across all 7 cathedral logs; init cell=f418010c i=1 dest=f418010d d=-23..-50 pside=0 inview=1; its dynamics f428a/f428b always outside=0; their particles appear in NO dyn-owners set — the visible stalks are the MESHES, drawn post-clear.
  • ANOMALY 3: 17 seam FLIPs at nearly identical eye positions (interior 0xF4180104 eye=(31.09,61.34,172.05) vs outdoor 0xF418000B eye=(30.90,63.04,172.05)).
  • ANOMALY 4: [walk-emit] empty in ALL logs — the interior-unattached route carried no emitters (the falls are attached statics).
  • ANOMALY 5: the surviving exit views are thin (n=4 clips on portals j=1/2/4; j=0 often n=0) — consistent with the authored polys being narrow bands.