docs(architecture): close GameWindow render slice
Record the clean Release, lifecycle, soak, and framebuffer gates for Slice 7, advance the structural program to Slice 8, and preserve the observed process-residency diagnostic gap as issue 232 rather than weakening its leak threshold.\n\nCo-authored-by: Codex <codex@openai.com>
This commit is contained in:
parent
9d7df1bfc5
commit
96f8bfcfa8
8 changed files with 176 additions and 64 deletions
|
|
@ -26,12 +26,15 @@ What does NOT go here:
|
|||
|
||||
## Current queue — 2026-07-22
|
||||
|
||||
- **Active structural work:** `GameWindow` decomposition. Slices 1–6 are
|
||||
complete; `GameWindow.OnUpdate` is one typed orchestration handoff and the
|
||||
class is 7,026 lines / 241 fields / 108 methods. Slice 7 draw-frame
|
||||
orchestration is active in
|
||||
- **Active structural work:** `GameWindow` decomposition. Slices 1–7 are
|
||||
complete; `GameWindow.OnUpdate` and `GameWindow.OnRender` are typed
|
||||
orchestration handoffs and the class is 4,666 lines / 196 fields / 70
|
||||
methods. Final Slice 8 composition/shutdown cleanup is 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.
|
||||
- **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
|
||||
|
|
@ -70,6 +73,42 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #232 — Nine-stop soak process-memory gate lacks canonical owner snapshots
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** LOW
|
||||
**Filed:** 2026-07-22
|
||||
**Component:** connected automation / resource diagnostics
|
||||
|
||||
**Description:** Identical-binary nine-stop runs can cross the same-location
|
||||
working/private-process-memory tolerance even when all deterministic lifecycle,
|
||||
entity, animation, allocation-rate, update-cost, movement, and graceful-close
|
||||
checks pass. At Slice 7 closeout, two runs reported Caul-plateau working-set
|
||||
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.
|
||||
|
||||
**Files:** `tools/run-connected-r6-soak.ps1`;
|
||||
`src/AcDream.App/Diagnostics/WorldLifecycleAutomationController.cs`;
|
||||
`src/AcDream.App/Rendering/RenderFrameDiagnosticsController.cs`.
|
||||
|
||||
**Acceptance:** Each named soak checkpoint records the existing canonical
|
||||
world-lifecycle resource snapshot (managed used/committed, tracked GPU buffers
|
||||
and textures, mesh/atlas caches, composite/particle texture ownership, VFX and
|
||||
pending teardown counts). Same-location assertions identify which owner grew;
|
||||
process residency remains a secondary guard. Repeated clean runs pass without
|
||||
loosening the canonical-owner leak limits.
|
||||
|
||||
---
|
||||
|
||||
## #231 — F-key pickup omits retail pending destination-slot presentation
|
||||
|
||||
**Status:** DONE (2026-07-21, `52dbb574` + `5acc3f01`)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
# acdream — code structure & extraction sequence
|
||||
|
||||
**Status:** Living document. Created 2026-05-16; implementation reconciliation
|
||||
completed 2026-07-21; Slices 1–6 and the Slice 7 draw-frame cutover landed by
|
||||
2026-07-22. Slice 7 connected closeout is active before the final Slice 8
|
||||
composition/shutdown cleanup and new M4 subsystems enter the App layer.
|
||||
completed 2026-07-21; Slices 1–7 landed by 2026-07-22. The final Slice 8
|
||||
composition/shutdown cleanup is active before new M4 subsystems enter the App
|
||||
layer.
|
||||
**Purpose:** Describe the desired structural state of the App layer,
|
||||
explain the rules we've adopted, and lay out the safe extraction
|
||||
sequence from today's reality (one 15,723-line `GameWindow.cs` at the
|
||||
|
|
@ -644,11 +644,11 @@ counts, and a 0.8 ms update-frame p95 at the final Caul checkpoint.
|
|||
smaller than the campaign baseline. TS-50, TS-51, and TS-53 remain accurately
|
||||
registered; this behavior-preserving extraction introduced no new divergence.
|
||||
|
||||
#### Slice 7 — extract `RenderFrameOrchestrator`
|
||||
#### Slice 7 — extract `RenderFrameOrchestrator` — COMPLETE 2026-07-22
|
||||
|
||||
Detailed execution ledger:
|
||||
[`docs/plans/2026-07-22-gamewindow-slice-7-render-frame-orchestration.md`](../plans/2026-07-22-gamewindow-slice-7-render-frame-orchestration.md)
|
||||
(connected closeout active).
|
||||
(complete).
|
||||
|
||||
Move the complete draw graph and its reusable frame-local scratch state into a
|
||||
GL-owning App collaborator. Preserve the exact modern pipeline order, clip
|
||||
|
|
@ -667,10 +667,14 @@ value-only handoff to `RenderFrameOrchestrator`; focused resource, world,
|
|||
private-presentation, and diagnostic owners contain the former frame body and
|
||||
failure recovery. The Release suite passes 7,341 tests with five intentional
|
||||
skips. `GameWindow` is 4,666 raw lines / 196 fields / 70 methods: 11,057 lines
|
||||
(70.3%) smaller than the campaign baseline. The connected lifecycle and
|
||||
resource-soak closeout remains before Slice 7 is final.
|
||||
(70.3%) smaller than the campaign baseline. The 315.6-second lifecycle and
|
||||
395.2-second synchronized nine-stop soak pass with code-zero graceful exits;
|
||||
the six stable framebuffer checkpoints preserve the Slice 6 presentation.
|
||||
Issue #232 records the coarse process-residency gate's run-to-run variance so
|
||||
future diagnostics can distinguish canonical owner growth from OS/driver/GC
|
||||
residency without weakening leak detection.
|
||||
|
||||
#### Slice 8 — composition and shutdown cleanup
|
||||
#### Slice 8 — composition and shutdown cleanup — ACTIVE
|
||||
|
||||
Keep GL/window construction in `GameWindow.OnLoad`, but group creation into
|
||||
small composition functions and delete feature state left behind by prior
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# acdream — strategic roadmap
|
||||
|
||||
**Status:** Living document. Updated 2026-07-22. **M3 landed; M4 is next after the active `GameWindow` structural prerequisite.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. The current program is the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md); Slices 1–6 are complete and Slice 7 draw-frame orchestration is active. New M4 quest/emote/character-creation feature bodies wait until that campaign is complete. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
|
||||
**Status:** Living document. Updated 2026-07-22. **M3 landed; M4 is next after the active `GameWindow` structural prerequisite.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. The current program is the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md); Slices 1–7 are complete and final Slice 8 composition/shutdown cleanup is active. New M4 quest/emote/character-creation feature bodies wait until that campaign is complete. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
|
||||
**Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file.
|
||||
|
||||
---
|
||||
|
|
@ -68,7 +68,18 @@ passes 7,182 tests / 5 skips; the 314-second lifecycle/reconnect gate and
|
|||
394-second synchronized nine-stop resource soak pass with graceful exits and
|
||||
stable owner counts. The completed ledger is
|
||||
[`2026-07-21-gamewindow-slice-6-update-frame-orchestration.md`](2026-07-21-gamewindow-slice-6-update-frame-orchestration.md).
|
||||
Slice 7 `RenderFrameOrchestrator` extraction is now active.
|
||||
Slice 7 render-frame orchestration is complete. `GameWindow.OnRender` now
|
||||
supplies one immutable frame input to focused resource, world-scene,
|
||||
private-presentation, and diagnostic owners. Exact world/PView/alpha/portal/
|
||||
paperdoll/retained-UI/ImGui/screenshot/GPU-close order and failure recovery are
|
||||
pinned by tests. `GameWindow` is 4,666 raw lines / 196 fields / 70 methods,
|
||||
11,057 lines (70.3%) below the campaign baseline. The Release suite passes
|
||||
7,341 tests / 5 skips; the 315.6-second lifecycle/reconnect gate and 395.2-
|
||||
second synchronized soak pass with graceful exits, and the six stable PNG
|
||||
checkpoints preserve Slice 6 presentation. Issue #232 tracks the coarse
|
||||
process-residency gate's diagnostic blind spot; no tolerance was loosened.
|
||||
|
||||
Final Slice 8 composition/shutdown cleanup is now active.
|
||||
|
||||
This is a behavior-preserving structural program. Severe regressions still get
|
||||
root-cause fixes in separate commits; ordinary feature work resumes with M4
|
||||
|
|
|
|||
|
|
@ -32,7 +32,16 @@ suite passes 7,182 tests / 5 skips; the 314-second capped/reconnect lifecycle
|
|||
gate and synchronized 394-second nine-destination resource soak both pass with
|
||||
graceful exits and stable owner counts. The completed Slice 6 ledger is
|
||||
[`2026-07-21-gamewindow-slice-6-update-frame-orchestration.md`](2026-07-21-gamewindow-slice-6-update-frame-orchestration.md).
|
||||
Slice 7 draw-frame orchestration is active.
|
||||
Slice 7 draw-frame orchestration is complete. `GameWindow.OnRender` is one
|
||||
typed frame handoff; resource, world-scene, private-presentation, and
|
||||
diagnostic owners preserve the accepted draw/failure graph. `GameWindow` is
|
||||
4,666 raw lines / 196 fields / 70 methods, down 11,057 lines (70.3%) from the
|
||||
campaign baseline. The full Release suite passes 7,341 tests / 5 skips; the
|
||||
315.6-second capped/reconnect lifecycle gate and 395.2-second synchronized
|
||||
nine-destination soak pass with graceful exits, and six stable PNG checkpoints
|
||||
preserve Slice 6 presentation. Final Slice 8 composition/shutdown cleanup is
|
||||
active. Issue #232 tracks process-residency variance in the soak without
|
||||
loosening its leak threshold.
|
||||
|
||||
Carried:
|
||||
#153 far-teleport residual, #116 slide-response, the remaining R6 ownership cleanup plus
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# GameWindow Slice 7 — render-frame orchestration
|
||||
|
||||
**Status:** Active 2026-07-22.
|
||||
**Status:** Complete 2026-07-22.
|
||||
**Parent program:** [`docs/architecture/code-structure.md`](../architecture/code-structure.md), Slice 7.
|
||||
**Baseline:** `9512404e`; `GameWindow.cs` is 7,026 raw lines, 241 fields, and
|
||||
108 methods. The Release suite passes 7,182 tests / 5 fixture or environment
|
||||
|
|
@ -30,7 +30,7 @@ port, or resource-lifetime redesign.
|
|||
PView/fallback world branches, particles, debug world draw, and completion.
|
||||
- [x] G — compose `RenderFrameOrchestrator`, cut `GameWindow.OnRender` to one
|
||||
handoff, and delete obsolete frame bodies, fields, helpers, and callbacks.
|
||||
- [ ] H — corrected-diff reviews, full Release suite, connected lifecycle and
|
||||
- [x] H — corrected-diff reviews, full Release suite, connected lifecycle and
|
||||
soak gates, framebuffer comparison, documentation, memory, and metrics.
|
||||
|
||||
Every checked checkpoint is one bisectable architectural commit. A checkpoint
|
||||
|
|
@ -517,6 +517,22 @@ After three clean corrected-diff reviews:
|
|||
8. audit architecture, divergence pointers, roadmap, milestones, issues,
|
||||
`AGENTS.md`, `CLAUDE.md`, and durable memory.
|
||||
|
||||
Completed 2026-07-22. The 315.6-second lifecycle/reconnect gate passed at
|
||||
`9d7df1bf` with six valid PNG checkpoints, code-zero graceful capped exit, and
|
||||
fresh-process uncapped reconnect. Side-by-side comparison with the Slice 6
|
||||
artifacts preserved world geometry, UI/paperdoll layering, private viewports,
|
||||
and depth/presentation; only live weather, particle timing, authoritative
|
||||
vitals, and small scripted camera-settling differences changed. The unchanged
|
||||
nine-stop gate then passed in 395.2 seconds with nine materializations, all
|
||||
Caul/Holtburg movement exercises, code-zero graceful shutdown, update p95 at
|
||||
or below 0.8 ms, and same-location Caul plateau deltas of +85.7 MiB working set
|
||||
and +59.3 MiB private memory. Two immediately preceding identical-binary runs
|
||||
crossed the coarse process-residency limit while every other deterministic
|
||||
lifecycle, timing, and shutdown check passed; #232 records the need to add
|
||||
canonical managed/GPU/cache owner snapshots to that gate instead of weakening
|
||||
its leak threshold. Release build and the complete suite remain green at 7,341
|
||||
passed / 5 skipped. Slice 7 is closed with no new retail divergence.
|
||||
|
||||
The accepted baseline at docs-only commit `9512404e` is behavior-equivalent to
|
||||
production cutover `e91f3102`: 7,182 passed / 5 skipped, 314.195-second
|
||||
lifecycle/reconnect, and 393.581-second soak. Exact counters are recorded in
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue