From ed00719cf4fe597eb84535d9b269223707df0862 Mon Sep 17 00:00:00 2001 From: Erik Date: Tue, 2 Jun 2026 14:26:00 +0200 Subject: [PATCH] =?UTF-8?q?docs(render):=20Phase=20W=20=C2=A71a=20?= =?UTF-8?q?=E2=80=94=20Stage-1=20gate=20finding=20(deeper=20root:=20FindEn?= =?UTF-8?q?vCollisions:1947)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stage 1 (return swept sp.CurCellId, 3e1d502) was gated and the doorway strobe PERSISTS: [cell-transit] still flips 0170<->0031. Airtight root from code analysis: Transition.FindEnvCollisions re-derives the cell from the STATIC origin via engine.ResolveCellId at TransitionTypes.cs:1947 and clobbers sp.CheckCellId (:1949) at the start of every sweep pass — a second, earlier static re-derive the four studies missed (they targeted the late return-site). It is the sole path that can set an indoor swept cell outdoor (the containment pick at :2075 skips outdoor cells). :1947 is dual-purpose (jitter source AND the only indoor->outdoor exit), so Stage 2 must replace it with a directed exit-portal crossing + do_not_load prune + exitOutside re-gate — a careful #98-area rework, not a one-line delete. Render residuals at the gate (no interior outside-looking-in, blue-through-door, particle/NPC bleed) are all expected Stages 3-5, not Stage-1 regressions. Stage 1 is kept (correct + necessary). Co-Authored-By: Claude Opus 4.8 (1M context) --- ...tion-membership-and-pview-render-design.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/superpowers/specs/2026-06-02-phase-w-transition-membership-and-pview-render-design.md b/docs/superpowers/specs/2026-06-02-phase-w-transition-membership-and-pview-render-design.md index 963b26c..0f0af09 100644 --- a/docs/superpowers/specs/2026-06-02-phase-w-transition-membership-and-pview-render-design.md +++ b/docs/superpowers/specs/2026-06-02-phase-w-transition-membership-and-pview-render-design.md @@ -47,6 +47,39 @@ membership-return fix alone is expected to stop the flicker; the prune is correc after. (This makes the shipped W2b doubly wrong — wrong location *and* wrong mechanism — and it is reverted.) +## 1a. Stage-1 gate finding (2026-06-02) — the deeper root is `FindEnvCollisions:1947` + +Stage 1 (return `sp.CurCellId`) shipped (`3e1d502`) and was visually gated. **The doorway strobe +PERSISTS:** `[cell-transit]` (now fed by `sp.CurCellId`) still flips `0170↔0031` at a ~0.2 m +jitter. So the swept cell is itself tainted — Codex's "verify before delete" caution was correct. + +**Airtight root (code analysis):** `Transition.FindEnvCollisions` re-derives the cell from the +**static** sphere origin via `engine.ResolveCellId(sp.GlobalSphere[0].Origin, …)` at +`TransitionTypes.cs:1947` at the *start* of every sweep pass and overwrites `sp.CheckCellId` +(`:1949`). `ValidateTransition` then latches that into `sp.CurCellId`. This is a **second, earlier +static re-derive** the four studies under-analyzed (they all targeted the late return-site). It is +the **only** path that can set an indoor swept cell to outdoor: the containment pick +(`FindCellSet`/`BuildCellSetAndPickContaining` at `:2075`) skips outdoor landcells (no `CellBSP`), +so `:1947→:1949` is the sole outdoor-taint source. Stage 1's return fix was necessary but +insufficient; `:1947` is the load-bearing taint. + +**Why it's not a one-line delete:** `:1947` is dual-purpose — it is *both* the jitter source *and* +the only indoor→outdoor exit mechanism acdream has (naive removal fixes the strobe but strands the +player indoors, unable to walk out). Stage 2 must **replace** it with a retail-faithful directed +exit-portal crossing (`CEnvCell::find_transit_cells` exit-portal path — become outdoor by crossing +the doorway polygon, not by a static re-resolve) plus the `do_not_load_cells` prune for indoor +candidate stability, and re-gate `CellTransit.FindTransitCellsSphere`'s unconditional +`exitOutside=true` (`CellTransit.cs:95-123`). This is the genuine transition-cell-tracking rework; +it is `#98`-area (FindEnvCollisions/CheckOtherCells) and must be approached carefully, not guessed. + +**Render residuals seen at the Stage-1 gate (all expected; Stages 3-5):** outside-looking-in shows +no interior (walls/floor missing, cellar mouth shows ground) = no PView exterior→interior portal +(U.5); bluish background + all particles/NPCs at the threshold/stairs = ungated entities + the +strobe-induced render-root flip (Stage 2 stabilizes the flip; Stage 4 seals); sky-through-door is +blue/no-clouds and down/up portals show blue = `OutsideView`/portal not drawn (Stage 4); cellar +renders best (walls+roof) with a blue flicker over the exit = closest to sealed, residual portal. +None of these are Stage-1 regressions. + ## 2. Target architecture (retail-faithful) **One cell graph, one membership authority, render obeys it.**