docs(runtime): record teleport correlation gate

This commit is contained in:
Erik 2026-07-26 18:04:50 +02:00
parent 6a063a27d4
commit 73d0b54e38
10 changed files with 188 additions and 25 deletions

View file

@ -0,0 +1,88 @@
# Slice J6.3 — canonical teleport correlation
**Date:** 2026-07-26
**Production commit:** `6a063a27d4c805cd166d5a487afc290c34c400fd`
**Exact rollback:**
```text
git revert 6a063a27d4c805cd166d5a487afc290c34c400fd
```
## Outcome
`AcDream.Runtime.World.RuntimeWorldTransitState` now owns the complete
authoritative teleport-notification and accepted-destination lifetime:
- wrap-safe F751 freshness and last-notification history;
- the pending and active teleport sequence;
- Position-before-F751 buffering and F751-before-Position matching;
- the first accepted destination for one teleport generation;
- exact generation, sequence, and destination-cell placement validation;
- exact materialization acknowledgement; and
- cancellation and session-reset cleanup without generation reuse.
`RuntimeTeleportDestination` preserves the server GUID, all four relevant
retail sequence channels, and the complete Core `Position`, including its
cell-local frame. The App converts accepted network data once at the wire
boundary, after canonical Runtime physics has accepted and applied the
Position update.
The former App `TeleportTransitCoordinator<T>` and duplicate accepted-
destination state are deleted. `LocalPlayerTeleportController` now borrows
Runtime transit truth and owns only graphical portal activation, render-space
translation/recentering, destination placement callbacks, tunnel presentation,
and retained UI. Login reveal and portal reveal are separate typed operations,
so an ordinary login cannot accidentally satisfy a teleport sequence.
## Retail ordering
- `SmartBox::HandlePlayerTeleport @ 0x00452150`
- `SmartBox::TeleportPlayer @ 0x00453910`
- `SmartBox::UseTime @ 0x00455410`
Retail accepts an equal or wrap-safe-newer F751 sequence, clears the local
position-complete state, and waits for a corresponding accepted Position
without advancing the Position timestamp itself. ACE emits the F751 and
Position with the same teleport sequence but transport order is not assumed.
The Runtime owner therefore supports both packet orders while keeping
canonical physics acceptance independent.
The detailed translation is recorded in
[`2026-07-15-retail-portal-space-pseudocode.md`](2026-07-15-retail-portal-space-pseudocode.md).
## Automated evidence
- Runtime: 360 passed, including 28 focused transit-state tests.
- App focused transit/reveal suite: 34 passed.
- App: 3,710 passed / 3 skipped.
- Complete solution: 8,631 passed / 5 skipped.
- Release build: zero errors; 17 pre-existing test-project warnings tracked by
issue #228.
- Source/ownership guards: the App transit coordinator is absent, graphical
composition borrows the session Runtime transit owner, and no parallel
current-cell or accepted-destination authority remains.
- Adversarial fixtures: Position-before-F751, F751-before-Position,
duplicate/stale/wrapped sequences, supersession, exact placement and
materialization mismatch, mid-transit reset, reconnect, generation reuse,
and two-instance isolation.
## Connected evidence
Accepted report:
`logs/connected-world-gate-20260726-175333/report.json`
The report records exact source and embedded binary commit
`6a063a27d4c805cd166d5a487afc290c34c400fd`.
- Capped process: 244.427 seconds, six checkpoints, graceful code-zero exit.
- Uncapped fresh-process reconnect: 61.414 seconds, one checkpoint, graceful
code-zero exit.
- Route: fresh login, Aerlinthe, Rynthid world edge, Facility Hub dungeon,
Holtburg, Aerlinthe revisit, then fresh-process reconnect.
- Failures: zero.
- Reveal invariant failures: zero.
- Expected warning: 25 instrumented world-edge landblock misses.
No new retail divergence was introduced. The two-order buffer contains only
immutable destination data that canonical Runtime physics already accepted; it
is correlation state, not a second physics or position authority.