69 lines
2.6 KiB
Markdown
69 lines
2.6 KiB
Markdown
# 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.
|