docs: close dungeon publication and respawn issues

Record the passed visual gates for #214 and #215 and move both completed entries into the recently closed ledger.

Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
Erik 2026-07-13 20:14:46 +02:00
parent 0ad6700a07
commit a944e49b9c

View file

@ -44,91 +44,6 @@ Copy this block when adding a new issue:
---
---
## #215 — Same-dungeon death respawn removed the dungeon floor physics
**Status:** IN-PROGRESS — root fix implemented; Release build + 5,054 tests green, pending user gate
**Severity:** HIGH
**Component:** teleport / streaming / physics cell identity
**Description:** After `/die` in the starter dungeon, the character respawned
at the dungeon start but fell through the world as soon as movement began.
**Root cause:** `OnLivePositionUpdated` decided whether a teleport crossed a
landblock by flooring the player's render-space XYZ against the current
streaming center. Dungeon EnvCells can have valid negative local frame origins;
at the captured `0x8C0401AD` position, Y `-30.4 m` falsely reconstructed source
landblock Y `3` instead of authoritative Y `4`. The same-cell respawn was
therefore treated as cross-landblock travel, and the `0x8C04FFFF` floor physics
was removed. Streaming still considered that collapsed landblock resident, so
the idempotent dungeon gate correctly did not enqueue a duplicate load.
**Resolution:** A dedicated `TeleportLandblockTransition` now compares the
player controller's current cell ID with the received destination cell ID,
matching retail's complete `Position::objcell_id + Frame` flow. XYZ is not used
for teleport identity. A zero pre-placement source falls back to the current
streaming-center ID, never a coordinate inference. Same-landblock respawns keep
the resident physics; true cross-landblock teleports retain the existing
recenter and hydration path.
**Files:** `src/AcDream.App/Streaming/TeleportLandblockTransition.cs`;
`src/AcDream.App/Rendering/GameWindow.cs`;
`tests/AcDream.App.Tests/Streaming/TeleportLandblockTransitionTests.cs`.
**Research:**
`docs/research/2026-07-13-same-dungeon-respawn-landblock-identity-pseudocode.md`.
**Acceptance:** In the starter dungeon, use `/die`, confirm the death dialog,
respawn in `0x8C0401AD`, then move in several directions. The character remains
on the dungeon floor and the teleport log reports old/new landblock `(140,4)`
without a physics removal or ten-second readiness timeout.
---
## #214 — Dungeon login could replace a complete EnvCell render with a partial second load
**Status:** IN-PROGRESS — architectural fix complete 2026-07-13, pending user visual gate
**Severity:** HIGH
**Component:** streaming / EnvCell rendering / portal visibility
**Description:** Logging directly into the starter dungeon could leave its room
shells untextured or absent after a relaunch even though the same dungeon had
rendered correctly before logout.
**Root cause:** Two independent load jobs published through shared, process-wide
pending collections. The login spawn first pre-collapsed streaming onto
`0x8C04FFFF`, then an obsolete post-spawn `ForceReloadWindow` reset the collapse
and enqueued the same dungeon again. `EnvCellRenderer.RegisterCell` mutated a
live landblock's pending lists from the worker while `FinalizeLandblock` drained
and replaced them on the render thread; the global portal-visibility bag had the
same ownership flaw across landblocks. The captured failure committed 1,123
shells, then the duplicate completion replaced them with its remaining 11.
**Resolution:** A worker now builds one private, immutable
`EnvCellLandblockBuild` per `LandblockBuild`. That exact payload travels with its
streaming completion and is committed on the render thread to
`CellVisibility`, `EnvCellRenderer`, and the cell physics cache. There are no
shared pending cell/shell collections to drain or cross-contaminate. The login
path now calls `InitializeKnownLoginCenter`: sealed dungeons pre-collapse once;
outdoor spawns wait for the first correctly centered tick. The old forced reload
was removed because `StreamingReadinessGate` already prevents guessed-center
loads before the real player spawn.
**Files:** `src/AcDream.App/Streaming/LandblockBuild.cs`;
`src/AcDream.App/Rendering/Wb/EnvCellLandblockBuild.cs`;
`src/AcDream.App/Rendering/Wb/EnvCellRenderer.cs`;
`src/AcDream.App/Rendering/CellVisibility.cs`;
`src/AcDream.App/Rendering/GameWindow.cs`.
**Research:** `docs/research/2026-07-13-envcell-landblock-transaction.md`.
**Acceptance:** Log out inside the starter dungeon, relaunch, and enter the same
character. The dungeon is fully textured on its first frame, remains complete,
and the log contains exactly one login dungeon collapse with no second reload.
---
## #213 — Retail client commands were sent to ACE as chat text
**Status:** IN-PROGRESS — command-family gate passed except two corrective fixes, pending re-gate
@ -6850,6 +6765,38 @@ outdoors at the angle that previously erased it.
# Recently closed
## #215 — [DONE 2026-07-13] Same-dungeon death respawn removed the dungeon floor physics
**Closed:** 2026-07-13
**Commit:** `0ad6700a`
**Resolution:** Teleport landblock classification now compares the player
controller's authoritative current `Position.objcell_id` with the received
destination cell ID. It no longer floors render-space XYZ, which had turned the
starter dungeon's valid Y `-30.4 m` into the false source landblock `0x8C03` and
removed the resident `0x8C04FFFF` floor physics. Same-landblock respawns keep
their published physics; true cross-landblock teleports retain the existing
recenter/hydration path. Release build and all 5,054 runnable tests passed.
User visual gate passed: `/die`, respawn, then movement remained on the dungeon
floor. Research:
`docs/research/2026-07-13-same-dungeon-respawn-landblock-identity-pseudocode.md`.
---
## #214 — [DONE 2026-07-13] Dungeon login could publish a partial EnvCell landblock
**Closed:** 2026-07-13
**Commit:** `b0c175af`
**Resolution:** Each streaming job now owns one private, immutable
`EnvCellLandblockBuild`, and the render thread commits its visibility, physics,
and drawable shells as one unit. The obsolete post-spawn forced reload was
removed, eliminating the duplicate job that could replace 1,123 complete
shells with the 11 entries remaining in shared pending collections. User visual
gate passed after relaunching directly into the starter dungeon: its textures
and geometry loaded completely. Research:
`docs/research/2026-07-13-envcell-landblock-transaction.md`.
---
## #157 — [DONE 2026-06-26] Live game threads per-element dat-font resolver
**Closed:** 2026-06-26