Record the shared graphical/no-window reset architecture, deterministic lifecycle evidence, exact rollback point, and synchronized project guidance before beginning the Linux headless host. Co-authored-by: Codex <noreply@openai.com>
3.7 KiB
Slice J8 no-window integration and Slice J closeout
Outcome
Slice J closed at a9a822f206cc6021bc099988144488f3bd7c397b.
The graphical client and direct no-window host now construct and borrow the
same GameRuntime, canonical gameplay owners, generation token, and retryable
generation-reset transaction. No gameplay model or GUID map was duplicated.
Exact rollback:
git revert a9a822f206cc6021bc099988144488f3bd7c397b
Canonical reset ownership
RuntimeGenerationReset owns the exact-generation reset order for transit,
commands, containers, actions, movement, object tables, character, item mana,
social state, entity retirement, host-projection acknowledgement, canonical
entity completion, chat identity, snapshots, and player identity.
The reset is a retained-cursor transaction:
- completed stages never replay after a callback failure;
- entity retirement uses exact
RuntimeEntityKeyincarnations; - canonical identity clears only after Runtime and host projections converge;
- duplicate completed reset is inert;
- re-entry or host replacement for an active generation is rejected.
The graphical reset manifest invokes this transaction once and retains only
App presentation cleanup. NoWindowGameRuntimeHost invokes the same Runtime
transaction without loading App or a presentation backend.
Direct-host proof
The deterministic no-window scenario covers:
- connect, character selection, enter world, and outbound activation;
- entity/object/inventory/chat/vital/environment/movement state;
- movement, use, attack, cast, projectile, and portal operations;
- portal host acknowledgement;
- graceful stop, reconnect, stale-route rejection, and GUID reuse;
- reset retry/no-replay and portal cancellation before/after readiness;
- observer-failure containment;
- two simultaneous roots with isolated credentials, clocks, GUIDs, items, chat, spells, projectiles, portals, and teardown;
- credential-safe traces with no password text;
- terminal zero ownership and backlog convergence.
The direct test process loads no App, UI, renderer, audio, Silk.NET, OpenAL, Arch, or ImGui assembly.
Retail chat-history decision
The integrated reconnect trace retains the bounded chat transcript while clearing active command targets and character identity. This matches the named retail ownership:
CPlayerSystem::OnEndCharacterSessionat0x00562870ends and begins the character session.ClientUISystem::OnEndCharacterSessionat0x00564AD0callsClientUISystem::CleanUpGameUIat0x005648A0.- That cleanup clears trade, vendor, ground-container, and selection state; it does not clear the chat buffer.
- Explicit
ClientCommunicationSystem::DoClearat0x0056E600owns the clear-chat-buffer notice.
No reconnect-time chat purge was added.
Acceptance evidence
- Runtime tests: 395/395.
- App tests: 3,731 pass / 3 intentional skips.
- Complete Release solution: 8,696 pass / 5 intentional skips.
- Connected lifecycle/reconnect:
logs/connected-world-gate-20260727-004418/report.json. - Canonical nine-stop:
logs/connected-r6-soak-20260727-004942.report.json. - J7's exact graphical visual matrix was accepted by the user on 2026-07-27.
The connected routes exited gracefully with zero failures and no pending publication, retirement, upload, warmup, or ownership backlog. Population- sensitive object/particle counts and missing-DAT VFX diagnostics were recorded but did not violate the route invariants.
Audits
- Dependency closure: pass.
- Presentation/backend assembly isolation: pass.
- Duplicate canonical constructors/maps: none.
- Mutable process-wide session state: none introduced.
- Teardown ledger convergence: pass.
- Retail divergence register: no new behavioral divergence.