diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 6b9f9e17..88fe789f 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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