From 544d4d3eefba7f25c2510023b4db5ec2c3c7f8c3 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 5 Jul 2026 20:13:19 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20session=20handoff=20=E2=80=94=20#137=20?= =?UTF-8?q?corridor=20arc=20closed,=20#176/#177=20render=20pair=20pickup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- ...6-07-06-137-closeout-render-pair-pickup.md | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 docs/research/2026-07-06-137-closeout-render-pair-pickup.md diff --git a/docs/research/2026-07-06-137-closeout-render-pair-pickup.md b/docs/research/2026-07-06-137-closeout-render-pair-pickup.md new file mode 100644 index 00000000..bccd8a17 --- /dev/null +++ b/docs/research/2026-07-06-137-closeout-render-pair-pickup.md @@ -0,0 +1,92 @@ +# Pickup prompt — post-#137-corridor session: the #176/#177 render pair (paste into a fresh session) + +**Read `claude-memory/project_render_pipeline_digest.md` FIRST** (Option A — +one DrawInside(viewer_cell); binding DO-NOT-RETRY table), then **ISSUES #176 +and #177**, then this file. The physics digest +(`claude-memory/project_physics_collision_digest.md`) carries the full +2026-07-06 collision saga if background is needed — do NOT reopen it. + +## Where we are (2026-07-06 end of session) + +**The #137 Facility Hub corridor collision arc is DONE, user-gated** ("not +collision anymore. Good." / "Looks good"). Branch +`claude/vigorous-joliot-f0c3ad` (worktree), 10 commits ahead of `e73e45da`, +NOT merged to main. All suites green (Core 2562 / App 713 / UI 425 / Net 385). + +| Commit | Fix | +|---|---| +| `a11df5b8` | BSPQuery Contact-branch stub slide responses leaked sliding normals (the absorbing wedge). Retail's BSP layer never writes `collision_info.sliding_normal` — only `validate_transition` 0x0050ac21; body persistence success-only (`SetPositionInternal` 0x005154c2). | +| `e8651b38` | `slide_sphere` opposing-normals branch returned OK; retail returns COLLIDED_TS (0x0053762c). The "phantom wall" normal was SYNTHETIC (negated movement). PortalSide-poly theory refuted. | +| `d4869154` | `CheckOtherCells` queried remaining cells at a stale pre-climb center (P2 lesson one loop deeper) — the seam shake. Per-iteration `footCenter = sp.GlobalSphere[0].Origin` refresh. | +| `aa96d7ad` | The collision capsule topped out at 1.2 m (callers passed `sphereHeight: 1.2f`; head sphere center 0.72). Dat Setup 0x02000001: spheres (0,0,0.475)+(0,0,1.350) r=0.48, top 1.83 = Height 1.835. Callers now pass 1.835. Register TS-46. The window climb. | + +**#137 stays OPEN for the DOORS half only** (block/pass per open state). +The #175 door-pose fix (2026-07-05) still needs its user gate — ask for it +whenever the user is next at the hub double door (closed blocks AT the +visual panels from both sides, no embed, no phantom wall). + +## NEXT ARC: #176 + #177 (render, both filed 2026-07-06 from the gate session) + +- **#176 — purple flashing on dungeon floors at cell seams, camera-angle + dependent.** Survives all physics fixes → render-side. Magenta/purple = + the placeholder-texture class ([[feedback_ui_resolve_zero_magenta]]). +- **#177 — stairs between levels pop in/out.** Invisible from the corridor + looking into the stair room, appear on entering, vanish on the last step + running down. The #119 visibility class, dungeon edition. Anchor cells: + the transit `0x8A020182 → 0x8A020183` drops z −6 → −9 on stairs + (launch-137-gate2.log). + +**The load-bearing topology fact both issues share (discovered this +session):** Facility Hub corridor FLOORS are portal polygons — PortalSide +floor-portals to under-rooms (e.g. 0x8A02016E visual polys 1/3/5 → 0x011E, +horizontal at z=−6, spanning the whole floor; 0x011E is a hall at z=−12). +Level connections run through these floor-portals. "Purple at the seams" is +purple exactly where portal surfaces meet, and the stairs' rooms hang off +the same portal graph — suspect the render portal-flood/portal-surface +handling of HORIZONTAL portals. + +**⚠️ The id-space trap (cost this saga a wrong mechanism):** +`CellPortal.PolygonId` indexes the VISUAL polygon table (`CellStruct.Polygons`), +NOT `PhysicsPolygons`. Same ids in both tables are UNRELATED polygons. + +## Tooling built this session (reuse, don't rebuild) + +- `Issue137CorridorSeamInspectionTests` — dat-inspection theories (add + `InlineData` cells as needed): portal spans (`CorridorCell_PortalPolygonWorldSpans`), + full-vertex poly dumps (`WindowShaft_FullPolyDump`), physics-BSP leaf + membership, hit-normal candidate sweep (use |align| — winding flips), + `HumanSetup_CollisionSpheres_DatTruth`. +- `Issue137CorridorSeamReplayTests` — dat-backed `PhysicsEngine` corridor + harness (`BuildCorridorEngine`: hydrate THREE portal rings or ring-3 + cells are invisible to the flood — why clean-room replays kept passing). + In-test probe capture pattern: `Console.SetOut(StringWriter)` + + `PhysicsDiagnostics.Probe*Enabled = true` → line-diff offline vs live. +- Live probe logs (worktree root, PowerShell Tee = UTF-16, `tr -d '\000'` + before grep): `launch-137-seam-probes.log` (790 MB, step-level), + `launch-137-gate2.log`, `launch-137-gate3.log`, + `resolve-137-seam-capture.jsonl` (body snapshots, untracked). + +## Physics DO-NOT-RETRY highlights from today (full table in the digest) + +- No `SetSlidingNormal` in the BSP/sphere layer; opposing branch returns + Collided; failed transitions never write body sliding state. +- The absorbed exactly-anti-parallel frame against a persisted sliding + normal is RETAIL behavior — fix normal PROVENANCE, not the abort. +- No height-budget check in the step-down accept — retail's climb cap is + `adjust_sphere_to_plane`'s walk_interp −0.5 overshoot bound (0x00538210) + + the placement insert rejecting the HEAD in solids. +- Probe-field misreads: `[neg-poly]`/`[neg-poly-dispatch]` print `stepUp=` + = NegStepUp (dispatch class), NOT sp.StepUp. `[walkable-nearest]` is a + logger, not the decision-maker. +- Remaining registered leaks (rows exist, fix later): TS-45 + (`SphereCollision`'s SetSlidingNormal tail), TS-4 (Path-6 steep-tangent), + TS-46 (scalar sphere approximation; remotes use human dims). + +## Launch protocol (unchanged) + +Build green first; PowerShell launch with the env block from CLAUDE.md +(+ `ACDREAM_PROBE_RESOLVE=1 ACDREAM_PROBE_CELL=1` for gates), background + +Tee to `launch-*.log`. The user manages client lifecycle. Graceful close → +ACE session clears in ~5 s; hard kill → ~3 min. The test character may be +saved in odd places after collision testing (last session it was inside the +window alcove and ACE bounced it to Holtburg — the user portals back).