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

@ -1,9 +1,9 @@
# acdream — code structure & extraction sequence
**Status:** Living document. Created 2026-05-16; implementation reconciliation
completed 2026-07-21; Slices 17 landed by 2026-07-22. The final Slice 8
composition/shutdown cleanup is active before new M4 subsystems enter the App
layer.
completed 2026-07-21; Slices 18 and their automated closeout landed by
2026-07-22. The final connected visual matrix remains 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
@ -37,9 +37,10 @@ after Slice 8 checkpoint F 4,057 lines / 198 fields / 54 method
after Slice 8 checkpoint G 3,663 lines / 162 fields / 37 methods
after Slice 8 checkpoint I 1,945 lines / startup composition shell
after Slice 8 checkpoint J 1,625 lines / focused lifetime shell
after Slice 8 checkpoint K 1,622 lines / canonical soak shell
```
`GameWindow` is the single object that:
At the campaign baseline, `GameWindow` was the single object that:
- Owns the GL context, the window, input, and shaders.
- Reads ~40 different environment variables across its lifetime.
@ -58,11 +59,11 @@ after Slice 8 checkpoint J 1,625 lines / focused lifetime shell
`StreamingController` and `GpuWorldState` owners.
- Wires up every plugin hook sink, every diagnostic, every panel.
The extracted controllers are valuable and tested, but line count alone proves
that creating collaborators has not yet made the window thin. A collaborator
is a completed extraction only when it owns the state and behavior body;
wrapping a `GameWindow` method in a delegate preserves ordering but remains a
partial extraction.
The completed slices moved those bodies into focused, tested owners. The rule
that governed the campaign still applies: a collaborator is a completed
extraction only when it owns the state and behavior body; wrapping a
`GameWindow` method in a delegate preserves ordering but remains a partial
extraction.
The fix is **not** "rewrite `GameWindow` in one pass" — that is a
high-risk change. The fix is to **extract one
@ -77,9 +78,9 @@ Recap of the rules from `CLAUDE.md` with the rationale:
### Rule 1: No new substantial feature bodies in `GameWindow.cs`
**Why:** Every line we add to `GameWindow` makes the eventual decomposition
harder. New features that "live in" `GameWindow` instead of being
extracted are the reason the file is 10k lines.
**Why:** New feature bodies in the native shell would reverse the ownership
campaign. Runtime work belongs in focused App owners, with only construction
and narrow callback handoffs retained here.
**How to apply:** A new feature gets its own class under
`src/AcDream.App/<Subsystem>/` (or deeper in `AcDream.Core` if it's pure
@ -685,7 +686,7 @@ 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 — ACTIVE (KL remain)
#### Slice 8 — composition and shutdown cleanup — AUTOMATED COMPLETE
Detailed execution ledger:
[`docs/plans/2026-07-22-gamewindow-slice-8-composition-lifecycle.md`](../plans/2026-07-22-gamewindow-slice-8-composition-lifecycle.md).
@ -749,11 +750,15 @@ groups, retry/no-replay progress, structured reportable physical-detach
failures, hard session/GPU barriers, and native-window-last release now live
outside the host. The shell captures roots once and makes one lifetime call
from Closing/Dispose; no shutdown stage remains in it. `GameWindow` is 1,625
raw lines after J. The App gate passes 3,441 tests / 3 intentional skips and
the complete Release suite passes 7,813 tests / 5 intentional skips. The clean
solution build retains only the 17 test-project warnings tracked by #228; the
complete Checkpoint-J behavior, architecture, and adversarial corrected-diff
passes are clean. Checkpoints KL remain active.
raw lines after J. Checkpoint K adds acknowledged same-frame canonical resource
checkpoints and leaves the shell at 1,622 lines. The App gate passes 3,451 tests
/ 3 intentional skips and the complete Release suite passes 7,823 / 5. Two
fresh-process nine-stop soaks and the connected lifecycle/reconnect route pass
with graceful exits; deterministic framebuffer captures preserve accepted
Slice 7 geometry, UI/paperdoll layering, private viewports, depth/alpha, and
reveal. The clean solution build retains only the 17 test-project warnings
tracked by #228, and all three final corrected-diff reviews are clean. Only the
user's final connected visual matrix remains.
### 4.4 Exit criteria