refactor(input): own gameplay action routing

Move the sole semantic action-priority graph, combat and diagnostic commands, and retained-root item-drop lifetime behind focused typed owners. Preserve retail toggle behavior, explicit auto-wield cancellation, shutdown quiescence, and symmetric callback cleanup.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-22 12:43:05 +02:00
parent 8b8afeefa3
commit 4eae9b4f5a
25 changed files with 2608 additions and 418 deletions

View file

@ -115,7 +115,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,477 tests pass / 5 skip.
Release builds; 7,524 tests pass / 5 skip.
**Active prerequisite before new M4 subsystem work:** continue the
behavior-preserving `GameWindow` decomposition reconciled on 2026-07-21.
@ -127,7 +127,7 @@ 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 AE are also complete: dead host residue is removed,
Slice 8 checkpoints AF 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
@ -136,11 +136,14 @@ sky/day group, weather, synchronization, and AdminEnvirons state.
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,
physical callback removal. `GameplayInputActionRouter` now owns the sole
semantic action-priority
graph; typed owners route combat, diagnostics, and remaining commands, and the
retained-root item-drop edge is reversible. `GameWindow` is 4,057 raw lines /
198 fields / 54 methods, down 11,666 lines (74.2%) from the 15,723-line campaign
baseline. The 7,524-test Release suite, 315.6-second lifecycle/reconnect gate,
and 395.2-second synchronized nine-stop soak pass. Slice 8 checkpoints GL—
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
`docs/architecture/code-structure.md`. **Carried:** #232, #153,