docs(runtime): record world environment ownership
This commit is contained in:
parent
902076c0a4
commit
4ab98b080e
7 changed files with 119 additions and 9 deletions
69
docs/research/2026-07-26-slice-j6-1-environment-ownership.md
Normal file
69
docs/research/2026-07-26-slice-j6-1-environment-ownership.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# Slice J6.1 — canonical world-environment ownership
|
||||
|
||||
**Date:** 2026-07-26
|
||||
**Production commit:** `902076c0a42079596a8a273e9be402776cabf4b0`
|
||||
**Exact rollback:** `git revert 902076c0a42079596a8a273e9be402776cabf4b0`
|
||||
|
||||
## Outcome
|
||||
|
||||
`AcDream.Runtime` now owns one world-environment lifetime per client session:
|
||||
|
||||
- an instance-scoped `DerethCalendar`;
|
||||
- the server-synchronized world clock;
|
||||
- weather progression and active weather state;
|
||||
- retail day-group selection;
|
||||
- AdminEnvirons state;
|
||||
- typed debug time and weather overrides.
|
||||
|
||||
`AcDream.App` remains the graphical host. It converts immutable DAT sky
|
||||
definitions into the Runtime definition and maps Runtime's selected day-group
|
||||
index, clock, and weather snapshot into sky rendering. It does not own a
|
||||
second clock or weather state.
|
||||
|
||||
The production path no longer mutates a process-global Region calendar origin.
|
||||
Two Runtime instances may therefore use different Region origins and server
|
||||
times without contaminating each other. Startup environment variables enter
|
||||
once through `RuntimeOptions`.
|
||||
|
||||
## Retail mechanism
|
||||
|
||||
- `SkyDesc::CalcPresentDayGroup @ 0x00500E10`
|
||||
- `CPlayerSystem::Handle_Admin__Environs @ 0x0055DE20`
|
||||
|
||||
`SkyDayGroupSelector` preserves the named-retail ordered selection algorithm
|
||||
and its `0x6A42FDB2` pseudo-random multiplier. `DerethCalendar` preserves the
|
||||
existing retail epoch conversion while moving the mutable Region origin into
|
||||
the owning Runtime instance.
|
||||
|
||||
No new retail divergence was introduced.
|
||||
|
||||
## Automated evidence
|
||||
|
||||
- Runtime: 332 passed.
|
||||
- App: 3,718 passed / 3 skipped.
|
||||
- Complete solution: 8,611 passed / 5 skipped.
|
||||
- Release build: 0 errors, 0 warnings.
|
||||
- Runtime dependency/source guards: passed.
|
||||
- Two-instance calendar, TimeSync, rollover/day-group, AdminEnvirons, debug
|
||||
override, reset, and projection fixtures: passed.
|
||||
|
||||
## Connected evidence
|
||||
|
||||
Report:
|
||||
`logs/connected-world-gate-20260726-164602/report.json`
|
||||
|
||||
The report records source and embedded binary commit
|
||||
`902076c0a42079596a8a273e9be402776cabf4b0`.
|
||||
|
||||
- Capped process: 244.907 seconds, six checkpoints, graceful code-zero exit.
|
||||
- Uncapped fresh-process reconnect: 61.46 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.
|
||||
- Expected warning: 25 instrumented world-edge landblock misses.
|
||||
- Reveal invariant failures: zero.
|
||||
|
||||
This proves the new environment owner preserves connected login, outdoor,
|
||||
world-edge, dungeon, revisit, disconnect, and reconnect behavior before J6.2
|
||||
moves the independent portal/reveal lifetime.
|
||||
Loading…
Add table
Add a link
Reference in a new issue