acdream/docs/research/2026-07-26-slice-j6-1-environment-ownership.md

2.6 KiB

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.