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`;

View file

@ -224,7 +224,7 @@ src/
LiveEntityTeardown.cs -> failure-isolated multi-owner lifecycle drain
RetailLiveFrameCoordinator.cs -> object/physics-before-network frame barrier
Rendering/
GameWindow.cs -> still owns too much runtime wiring
GameWindow.cs -> native composition/callback shell
LiveEntityAnimationScheduler.cs -> canonical ordinary live-object workset
RetailStaticAnimatingObjectScheduler.cs -> retail static-animation workset
StaticLiveRootCommitter.cs -> static root pose/collision commit boundary
@ -820,8 +820,9 @@ Current movement/collision ownership:
- **M3 landed 2026-07-21** with connected magic/portal acceptance and the final
two-client observer gate; Track LH is the future presentation-independent
Linux/headless extraction.
- **The behavior-preserving thin-`GameWindow` ownership campaign is the active
prerequisite before new M4 subsystem bodies.** Selection/interaction Slice 1
- **The behavior-preserving thin-`GameWindow` ownership campaign has completed
its implementation and automated closeout; only the user's final connected
visual matrix remains before new M4 subsystem bodies.** Selection/interaction Slice 1
landed with `WorldSelectionQuery`, `SelectionInteractionController`, and the
shared retail inventory-request owner; Slice 2 moved final animation
presentation into `LiveEntityAnimationPresenter`; Slice 3 moved the complete
@ -843,9 +844,12 @@ Current movement/collision ownership:
production pipeline and terminal session start are complete. Checkpoint J
moves the exact shutdown dependency graph into `GameWindowLifetime`, whose
typed roots preserve hard session/GPU barriers, reportable physical detach,
retry/no-replay progress, and native-window-last release. `GameWindow` is
1,625 raw lines; only the canonical soak instrumentation and final connected
closeout checkpoints remain. The reconciled ledger and sequence live in
retry/no-replay progress, and native-window-last release. Checkpoint K adds
deferred same-frame canonical resource snapshots and closes #232 through two
clean fresh-process nine-stop routes without weakening process limits.
`GameWindow` is 1,622 raw lines; 293 focused tests, the 7,823/5 Release suite,
connected lifecycle/reconnect, canonical soaks, corrected-diff reviews, and
the Slice-7 framebuffer comparison pass. The reconciled ledger lives in
`docs/architecture/code-structure.md`. This decision does not reclassify the
remaining L.2 conformance work or Track LH.

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

View file

@ -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 17 and Slice 8 checkpoints AJ are complete, with only canonical soak instrumentation and final closeout checkpoints KL 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 final `GameWindow` visual handoff.** 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. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md) and their automated closeout are complete; only the user's connected visual matrix remains. 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.
---
@ -108,11 +108,15 @@ now 1,945 raw lines after I.9 makes production invoke the same typed pipeline
as the failure oracle and keeps session start terminal. Checkpoint J extracts
the exact shutdown dependency graph into `GameWindowLifetime`, with typed
immutable roots, hard session/GPU barriers, reportable physical cleanup,
retry/no-replay state, and native-window-last terminal reporting. The host is
now 1,625 raw lines. Only canonical soak snapshots and closeout checkpoints
KL remain. The App gate passes 3,441 tests / 3 intentional skips, the complete
Release suite passes 7,813 tests / 5 skips, and the complete Checkpoint-J
corrected-diff review is clean.
retry/no-replay state, and native-window-last terminal reporting. The host was
1,625 raw lines after J.
Checkpoint K adds deferred, acknowledged, same-frame canonical resource
snapshots and closes #232 through two clean fresh-process nine-stop routes.
The shell is 1,622 raw lines. All 293 focused tests, App Release 3,451/3, the
complete Release suite 7,823/5, connected lifecycle/reconnect, both canonical
soaks, three corrected-diff reviews, and the exact Slice-7 framebuffer
comparison pass. Only the user's final connected visual matrix remains.
This is a behavior-preserving structural program. Severe regressions still get
root-cause fixes in separate commits; ordinary feature work resumes with M4

View file

@ -68,10 +68,14 @@ tested pipeline with explicit prior-result dependencies. Checkpoint J adds the
focused `GameWindowLifetime`, immutable typed shutdown roots, hard dependency
barriers, structured report-and-continue physical cleanup, retry/no-replay
state, and native-window-last terminal reporting. The host is now 1,625 raw
lines. Checkpoints KL remain active; Issue #232 tracks process-residency
variance in the soak without loosening its leak threshold. The App gate passes
3,441 tests / 3 skips, the complete Release suite passes 7,813 tests / 5 skips,
and the complete Checkpoint-J corrected-diff review is clean.
lines after J. Checkpoint K adds deferred same-frame canonical owner snapshots
and closes #232 through two clean 403-second fresh-process nine-stop routes
without loosening the process thresholds. The automated Slice 8 closeout is
complete: `GameWindow` is 1,622 raw lines; 293 focused tests, App Release
3,451/3, the complete Release suite 7,823/5, lifecycle/reconnect, both
canonical soaks, all three corrected-diff reviews, and the Slice-7 framebuffer
comparison pass. Only the user's final connected visual matrix remains before
new M4 feature bodies begin.
Carried:
#153 far-teleport residual, #116 slide-response, the remaining R6 ownership cleanup plus

View file

@ -1,12 +1,13 @@
# GameWindow Slice 8 Checkpoint K — canonical soak snapshots
**Status:** Active 2026-07-22.
**Status:** Complete 2026-07-22 (`bca41487`, corrected gate semantics
`6c5e0604`).
**Parent:**
[`2026-07-22-gamewindow-slice-8-composition-lifecycle.md`](2026-07-22-gamewindow-slice-8-composition-lifecycle.md),
Checkpoint K.
**Integrated baseline:** `31e6e192`; Checkpoints IJ are complete,
`GameWindow.cs` is 1,625 raw lines, App Release passes 3,441 tests / 3 skips,
and the complete Release suite passes 7,813 tests / 5 skips.
**Integrated result:** `GameWindow.cs` is 1,622 raw lines, App Release passes
3,451 tests / 3 skips, and the complete Release suite passes 7,823 tests / 5
skips.
**Issue:** [`#232`](../ISSUES.md#232--nine-stop-soak-process-memory-gate-lacks-canonical-owner-snapshots).
**Behavior rule:** this checkpoint changes diagnostic capture and connected-gate
evidence only. It does not change rendering, streaming, gameplay, resource
@ -198,3 +199,27 @@ for-byte unchanged as the secondary residency/performance guard.
No visual gate is required for K because it changes diagnostic observation
only. Checkpoint L owns the final connected framebuffer and user visual gate.
## 6. Completion evidence
The focused checkpoint suite passes 74 tests. The Release build succeeds with
only the 17 pre-existing test-project warnings tracked by #228. Two independent
fresh-process routes produced all nine ordered render-frame checkpoints and
closed gracefully:
- `connected-r6-soak-20260722-201335.report.json`: 403.139 seconds; Caul
return-to-plateau working/private deltas +20.2/+10.3 MiB; update p95 1.5 ms.
- `connected-r6-soak-20260722-202025.report.json`: 403.021 seconds; Caul
return-to-plateau working/private deltas +165.0/+157.2 MiB; update p95 1.3 ms.
Every checkpoint had zero pending teardown/retirement, staged upload work, and
composite warmup work. Neither run found unconfounded canonical owner growth,
and both passed the unchanged process-residency and performance limits.
The first connected implementation run also proved that exact cache equality
was the wrong leak predicate: visible landblocks and authoritative entities
changed while mesh/GPU/cache owner counts decreased through legitimate
retirement. The corrected contract therefore hard-fails owner *growth* when
the workload is stable, reports named growth warnings when the authoritative
or visible workload changed, and permits shrinking. It does not weaken the
process limits or hide an identified owner leak.

View file

@ -1,14 +1,15 @@
# GameWindow Slice 8 Checkpoint L — campaign closeout
**Status:** Active 2026-07-22.
**Status:** Automated closeout complete 2026-07-22; final user visual matrix
pending.
**Parent:**
[`2026-07-22-gamewindow-slice-8-composition-lifecycle.md`](2026-07-22-gamewindow-slice-8-composition-lifecycle.md),
Checkpoint L.
Checkpoint L.
**Integrated baseline:** `6c5e0604`; Checkpoints AK are implemented.
`GameWindow.cs` is 1,622 raw lines, App Release passes 3,451 tests / 3
intentional skips, and the complete Release suite passes 7,823 tests / 5
intentional skips. Two fresh-process canonical nine-stop soaks pass with
graceful exits and the unchanged residency/performance limits.
graceful exits and the unchanged residency/performance limits.
**Behavior rule:** L proves and records the shipped ownership state. It may
correct documentation, test/gate coverage, or a defect demonstrated by the
audit, but it does not add gameplay, alter retail behavior, loosen a gate, or
@ -124,3 +125,36 @@ spellbook panel; outdoor/building/dungeon/portal/paperdoll/particle/alpha
presentation; graceful close and fresh reconnect. Only that confirmation marks
L and the overall structural campaign complete.
## 5. Automated closeout evidence
- The final host is 1,622 raw lines. Source-boundary inspection finds no AC
algorithm, packet builder, entity scan, render graph, animation-part
composer, or stored `GameWindow` back-reference in an extracted owner.
- All 293 focused Slice 8 ownership, composition, callback, frame, lifetime,
automation, and source-boundary tests pass. App Release passes 3,451 tests / 3
intentional skips; the complete Release suite passes 7,823 / 5. The build's
17 test-project warnings are the unchanged #228 set.
- The connected lifecycle/reconnect gate passed in 314.4 seconds with graceful
capped and uncapped exits. Its uncapped reconnect reached 174.74 FPS / 5.72
ms at the final checkpoint. All six PNG artifacts are valid; the only route
warning is the expected 25 world-edge empty-landblock misses.
- Both Checkpoint-K nine-stop reports passed in about 403 seconds, produced the
exact names/sequences/process identity, and found no unconfounded canonical
owner growth under the unchanged residency/performance limits.
- The six current lifecycle PNGs were compared against artifacts rebuilt from
exact accepted Slice 7 commit `9d7df1bf` in an isolated worktree. The five
deterministic destinations preserve geometry, UI/paperdoll layering,
private viewports, depth/alpha, and world reveal. Facility Hub was nearly
pixel-identical (mean absolute RGB delta 0.91/255); the Aerlinthe captures
were 3.42 and 3.87/255. Holtburg and reconnect differences are live
entities, particles, vitals, and sub-frame camera timing. Capped login used a
different server-saved location and was checked only for complete rendering
and presentation layering.
- Three corrected-diff reviews are clean: behavior/retail boundary,
architecture/ownership, and adversarial lifecycle/failure handling. The
divergence audit found no new runtime behavior in K or L and requires no
register change.
The generated reports, screenshots, and disposable baseline worktree are
untracked evidence. The user's unrelated `TransitionTypes.cs` edit was not
modified or staged.

View file

@ -1,6 +1,7 @@
# GameWindow Slice 8 — composition and lifecycle shell
**Status:** Active 2026-07-22.
**Status:** Automated implementation and closeout complete 2026-07-22; final
user visual matrix pending.
**Parent program:** [`docs/architecture/code-structure.md`](../architecture/code-structure.md), Slice 8.
**Baseline:** `96f8bfcf`; `GameWindow.cs` is 4,666 raw lines, 196 fields, and
70 methods. The Release suite passes 7,341 tests / 5 fixture or environment
@ -35,19 +36,21 @@ audit.
- [x] J — move the exact retryable shutdown manifest to a focused lifetime
owner and prove all partial-load/reentrant/retry paths. Detailed plan:
[`2026-07-22-gamewindow-slice-8-checkpoint-j-lifetime-shutdown.md`](2026-07-22-gamewindow-slice-8-checkpoint-j-lifetime-shutdown.md).
- [ ] K — in a separate #232 commit, add canonical owner snapshots to every soak
- [x] K — in separate #232 commits, add canonical owner snapshots to every soak
checkpoint without weakening the process-memory guard. Detailed plan:
[`2026-07-22-gamewindow-slice-8-checkpoint-k-canonical-soak.md`](2026-07-22-gamewindow-slice-8-checkpoint-k-canonical-soak.md).
- [ ] L — corrected-diff reviews, focused and full Release gates, connected
lifecycle/soak, framebuffer comparison, documentation, memory, and final
visual handoff. Detailed plan:
lifecycle/soak, framebuffer comparison, documentation, and memory are
complete; only the final user visual handoff remains. Detailed plan:
[`2026-07-22-gamewindow-slice-8-checkpoint-l-closeout.md`](2026-07-22-gamewindow-slice-8-checkpoint-l-closeout.md).
Checkpoint J leaves `GameWindow.cs` at 1,625 raw lines. The focused lifetime
owner now holds the typed shutdown roots, exact 18-stage dependency manifest,
Checkpoint K leaves `GameWindow.cs` at 1,622 raw lines. The focused lifetime
owner holds the typed shutdown roots, exact 18-stage dependency manifest,
retry/no-replay state, structured soft-cleanup failures, hard-barrier fallback,
and native-window-last release. App Release passes 3,441 tests / 3 skips and
the complete Release suite passes 7,813 / 5 skips. Checkpoint K is next.
and native-window-last release. Deferred same-frame checkpoint capture and two
fresh-process nine-stop routes close #232 without weakening the residency
guard. App Release passes 3,451 tests / 3 skips and the complete Release suite
passes 7,823 / 5 skips. All automated Checkpoint-L gates are complete.
Each checked checkpoint lands as a bisectable commit. A checkpoint is not done
while a new class delegates a substantial body back into `GameWindow`, stores
@ -704,6 +707,14 @@ complete Release suite passes 7,813 / 5 skips.
residency guard with unchanged thresholds. Require two fresh-process clean
route runs before closing #232.
Result: deferred acknowledged checkpoints now drain after current-frame render
diagnostics, persist the exact frame outcome plus canonical resource owners,
and block the script until both artifacts commit. Seventy-four focused tests,
App Release, the full Release suite, and two 403-second fresh-process routes
pass. Every route produced the exact nine checkpoints, zero pending/staged/
warmup work, no unconfounded canonical owner growth, graceful exit, and the
unchanged process/performance limits. Commits: `bca41487`, `6c5e0604`.
### L — final closeout
- Run three independent corrected-diff reviews: retail conformance,
@ -717,6 +728,14 @@ complete Release suite passes 7,813 / 5 skips.
- Update architecture, milestones, roadmap, issues, AGENTS/CLAUDE, and durable
memory with final metrics and exact gates.
Automated result: 293 focused tests and the 7,823/5 complete Release suite
pass. The 314.4-second capped/reconnect lifecycle route passes with six valid
PNGs and graceful exits. Its current deterministic frames preserve Slice 7
commit `9d7df1bf` geometry, UI/paperdoll layering, private viewports,
depth/alpha, and reveal; live entity/particle/vitals/camera timing account for
the accepted differences. All three final corrected-diff reviews are clean.
The user's connected visual matrix is the sole remaining acceptance item.
## 5. Automated acceptance
- exact window callback attach order, reverse detach, rollback, reentrancy, and