refactor(input): own pointer and callback lifetime

Move camera pointer, framebuffer resize, and retained/devtools input edges behind focused reversible owners. Preserve input priority while making shutdown deactivate callbacks before live-session retirement and retry physical detach without stranding transport teardown.
This commit is contained in:
Erik 2026-07-22 11:59:33 +02:00
parent d09e246d3a
commit 8b8afeefa3
42 changed files with 4029 additions and 461 deletions

View file

@ -113,7 +113,7 @@ and the final two-client portal-out/materialization observer flow are
user-gated. Deterministic world-lifecycle automation protects fresh login,
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
Release builds; 7,341 tests pass / 5 skip.
Release builds; 7,477 tests pass / 5 skip.
**Active prerequisite before new M4 subsystem work:** continue the
behavior-preserving `GameWindow` decomposition reconciled on 2026-07-21.
@ -125,15 +125,19 @@ second GUID dictionary. Slices 57 are complete: landblock presentation,
update-frame orchestration, and render-frame orchestration all have typed
owners. `GameWindow.OnUpdate` and `GameWindow.OnRender` are one-handoff methods;
the frame owners have no direct window or anonymous callback-bag ownership.
Slice 8 checkpoints AD are also complete: dead host residue is removed,
Slice 8 checkpoints AE are also complete: dead host residue is removed,
native-window callback intake has reversible lifetime ownership, and
`LiveSessionHost` owns reset/binding composition over the sole canonical
session controller. `WorldEnvironmentController` solely owns the clock, DAT
sky/day group, weather, synchronization, and AdminEnvirons state. `GameWindow`
is 4,330 raw lines / 192 fields / 67 methods, down 11,393 lines (72.5%) from
the 15,723-line campaign baseline. The 7,419-test
Release suite, 315.6-second lifecycle/reconnect gate, and 395.2-second
synchronized nine-stop soak pass. Slice 8 checkpoints EL—input/resize, action
sky/day group, weather, synchronization, and AdminEnvirons state.
`CameraPointerInputController` and `FramebufferResizeController` now own raw
camera input/focus/scroll and physical framebuffer publication. Silk,
dispatcher, retained-UI, and devtools device edges are reversible,
transactional, and terminal after disposal; live-session retirement precedes
physical callback removal. `GameWindow` is 4,266 raw lines / 194 fields / 65
methods, down 11,457 lines (72.9%) from the 15,723-line campaign baseline. The
7,477-test Release suite, 315.6-second lifecycle/reconnect gate, and
395.2-second synchronized nine-stop soak pass. Slice 8 checkpoints FL—action
routing, settings, resource ownership, ordered composition,
retryable shutdown, soak snapshots, and final connected gates—remain active.
See `docs/plans/2026-07-22-gamewindow-slice-8-composition-lifecycle.md` and