docs(runtime): close exact world host ownership

This commit is contained in:
Erik 2026-07-26 18:41:24 +02:00
parent 18d17d8bb1
commit 75f9510e10
13 changed files with 240 additions and 43 deletions

View file

@ -0,0 +1,99 @@
# 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.