acdream/docs/research/2026-07-26-slice-j6-4-host-acknowledgement.md

4.2 KiB

Slice J6.4 closeout — exact graphical-host acknowledgement

Status: COMPLETE Production commit: 18d17d8bb17ed9ff3ed01da8273e2948abe6398b Exact rollback: git revert 18d17d8bb17ed9ff3ed01da8273e2948abe6398b

Result

RuntimeWorldTransitState now owns the complete presentation-independent login/portal lifetime, including the exact work still owed by a graphical or headless host. App no longer infers completion from local booleans. Instead, Runtime issues one RuntimeWorldHostProjectionToken for the exact reveal generation and destination cell and records the remaining typed acknowledgements:

  1. host projection registered;
  2. simulation release projected;
  3. destination reservation released;
  4. terminal completion projected.

Wrong-generation, wrong-cell, duplicate, empty, composite, reordered, and post-terminal acknowledgements are rejected. Cancellation and supersession retain the exact remaining suffix. Session reset refuses to erase an outstanding host obligation.

WorldRevealCoordinator is now a strict graphical adapter. Its local records contain only App resource receipts associated with a Runtime token. The drain is serialized and re-entrancy safe: callback failure leaves the exact suffix retryable, while a callback that starts or cancels another reveal cannot overwrite or leak the prior destination reservation. WorldGenerationQuiescence uses the same edge-before-callback rule and converges audio to the newest desired state after failure or re-entrancy.

Normalized runtime traces and connected checkpoints now expose both canonical ownership ledgers:

  • RuntimeWorldEnvironmentOwnershipSnapshot;
  • RuntimeWorldTransitOwnershipSnapshot, including host projection and pending-host-acknowledgement counts.

The connected gate rejects a stable checkpoint unless the environment owner is initialized with one active day group and all transit/host obligations have converged to zero.

Retail ordering preserved

The ownership change preserves the already accepted retail order documented in 2026-07-15-retail-portal-space-pseudocode.md and 2026-07-16-portal-completion-pseudocode.md:

  • destination identity is accepted before placement;
  • readiness remains latched once accepted;
  • simulation is released only after materialization;
  • the normal viewport is observed before terminal completion;
  • incomplete destinations remain in the authored portal tunnel;
  • presentation resources retire after their final consumer edge.

No portal timer, forced-ready path, alternate animation, additional frame queue, or new retail divergence was introduced.

Automated evidence

  • Focused Runtime host/ownership fixtures: 58 passed.
  • Focused App reveal/quiescence fixtures: 52 passed.
  • AcDream.Runtime.Tests: 365 passed.
  • AcDream.App.Tests: 3,716 passed / 3 skipped.
  • dotnet build AcDream.slnx -c Release: passed, zero errors.
  • Complete Release solution: 8,642 passed / 5 skipped.
  • Dependency/source guards prove the direct Runtime host loads no App/UI/Silk/OpenAL/Arch/ImGui assembly and that App has no replacement transit-authority field.
  • Failure-injection fixtures cover registration, simulation release, reservation release, terminal completion, audio projection, reset, and callback re-entrancy. Every ownership ledger converges to zero.

The direct Runtime-only fixture completes login, portal, cancellation, and reset without constructing GameWindow or loading a graphical/audio backend.

Connected exact-binary evidence

Report: logs/connected-world-gate-20260726-182805/report.json

  • exact commit: 18d17d8bb17ed9ff3ed01da8273e2948abe6398b;
  • capped route: login → Aerlinthe → Rynthid → Facility Hub → Holtburg → Aerlinthe revisit;
  • uncapped route: fresh-process reconnect;
  • seven stable checkpoints;
  • both processes exited gracefully with code zero;
  • zero failures and only the expected world-edge landblock-miss warning;
  • every checkpoint reports DayGroupDefinitionCount = 20, ActiveDayGroupCount = 1, IsSessionIdle = true, HostProjectionCount = 0, and PendingHostAcknowledgementCount = 0.

This closes J6.4 and J6.5. Slice J6 has one Runtime environment owner, one Runtime transit/reveal owner, an exact host acknowledgement protocol, and no remaining App reconstruction of portal authority.