docs(architecture): record GameWindow automated closeout

Reconcile the architecture, roadmap, milestones, issue ledger, session instructions, and durable memory with the 1,622-line native shell, canonical soak evidence, connected framebuffer comparison, and sole remaining user visual gate.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-22 20:52:25 +02:00
parent 69650b1946
commit 5c955c36ec
11 changed files with 239 additions and 201 deletions

View file

@ -26,29 +26,13 @@ What does NOT go here:
## Current queue — 2026-07-22
- **Active structural work:** `GameWindow` decomposition. Slices 17 and Slice
8 checkpoints AH are complete; I.1I.7 now own the executable ordered
startup path through retained UI and live presentation, including the
canonical runtime/world, selection/radar, landblock publishers, and
portal/sky/particle resources.
I.7 now owns streaming/session/hydration/local-player/teleport startup and
every late edge explicitly. I.8a now owns the focused session factory,
command targets, and sole gameplay input subscriber before frame publication.
I.8b now owns the complete update/render construction, exact atomic frame
publication, and lifecycle resource snapshot source. I.8c makes session
start the terminal `OnLoad` operation. I.9 corrected the production root to
invoke the exact tested pipeline and made every consumed platform/settings
result explicit. Checkpoint J moves the exact retryable shutdown graph into
`GameWindowLifetime`, including typed roots, hard session/GPU barriers,
reportable physical detach, structured terminal state, and native-window-last
release. `GameWindow.OnUpdate` and `GameWindow.OnRender` are typed
orchestration handoffs and the class is 1,625 raw lines. Checkpoints KL—the
canonical soak snapshots and final closeout—remain active in
[`docs/architecture/code-structure.md`](architecture/code-structure.md).
This is the behavior-preserving prerequisite before new M4 feature bodies.
- **Connected-gate fidelity:** `#232` adds canonical managed/GPU/cache-owner
snapshots to the nine-stop soak so process-residency variance cannot be
mistaken for an owner leak or silently waved away.
- **Structural handoff:** all eight `GameWindow` decomposition slices and the
automated closeout are complete. The 1,622-line native shell has typed
startup, frame, callback, and shutdown owners; 293 focused tests, the
7,823/5 Release suite, the lifecycle/reconnect route, two canonical
nine-stop soaks, and the Slice-7 framebuffer comparison pass. Only the
user's final connected visual matrix remains before the campaign is marked
complete in [`docs/architecture/code-structure.md`](architecture/code-structure.md).
- **Separate rendering gate:** `#225`, lifestone/particle alpha ordering. Its
connected performance, lifetime, and unattended portal routes pass.
- **Carried behavior debt:** `#153` far-teleport unstreamed-edge arrival and
@ -122,7 +106,7 @@ attributes remain safely projected as zero.
## #232 — Nine-stop soak process-memory gate lacks canonical owner snapshots
**Status:** OPEN
**Status:** DONE (2026-07-22, `bca41487` + `6c5e0604`)
**Severity:** LOW
**Filed:** 2026-07-22
**Component:** connected automation / resource diagnostics
@ -135,13 +119,17 @@ growth of +240.9 MiB and +497.4 MiB; a third unchanged run passed at +85.7 MiB
(private +59.3 MiB). Earlier Slice 6 development history also contains both a
coarse-memory failure and subsequent clean runs.
**Root cause / status:** The current soak samples only process working set and
private bytes plus coarse world/title counters. Those totals combine live .NET
objects, committed-but-free GC segments, native allocations, mapped pages, and
GPU-driver residency, so a failed total cannot identify the owner that grew.
This is a diagnostic blind spot, not evidence that the threshold should be
raised. The unchanged gate produced a clean required closeout pass; no runtime
workaround or tolerance change was made.
**Root cause / status:** The old soak sampled only process working set/private
bytes plus coarse world/title counters. Those totals combine live .NET objects,
committed-but-free GC segments, native allocations, mapped pages, and GPU
driver residency, so a failed total could not identify the owner that grew.
Deferred acknowledged render-frame checkpoints now record the exact frame
outcome and canonical managed/GPU/cache/VFX/pending-work owners. Two fresh
403-second routes pass all nine ordered checkpoints, zero pending/staged/warmup
work, no unconfounded owner growth, graceful close, and the unchanged process
and performance limits. Legitimate owner retirement is allowed; growth becomes
a hard failure when workload is stable and a named warning when authoritative
or visible workload changed.
**Files:** `tools/run-connected-r6-soak.ps1`;
`src/AcDream.App/Diagnostics/WorldLifecycleAutomationController.cs`;