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:
parent
69650b1946
commit
5c955c36ec
11 changed files with 239 additions and 201 deletions
|
|
@ -1,9 +1,9 @@
|
|||
# acdream — code structure & extraction sequence
|
||||
|
||||
**Status:** Living document. Created 2026-05-16; implementation reconciliation
|
||||
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.
|
||||
completed 2026-07-21; Slices 1–8 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 (K–L 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 K–L 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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue