docs(runtime): record world environment ownership

This commit is contained in:
Erik 2026-07-26 16:52:43 +02:00
parent 902076c0a4
commit 4ab98b080e
7 changed files with 119 additions and 9 deletions

View file

@ -319,7 +319,13 @@ presentation/backend assemblies. Runtime tests pass 323/323, App tests pass
3,717/3 skips, the complete Release suite passes 8,596/5 skips, and the exact
lifecycle/reconnect plus canonical nine-stop gates match binary/source,
converge every backlog, and exit gracefully with zero failures. J6
world/portal/environment and projection-handshake ownership is active.
world/portal/environment and projection-handshake ownership is active. J6.1
landed at `902076c0`: Runtime owns the instance-scoped Dereth calendar,
server-synchronized clock, weather, day-group selection, and AdminEnvirons
state while App only projects immutable DAT sky definitions into rendering.
Its 332 Runtime tests, 3,718 App tests / 3 skips, 8,611 complete Release tests
/ 5 skips, and exact-binary lifecycle/reconnect route pass. J6.2 canonical
reveal generation and typed destination readiness is active.
J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
J1's rollback is

View file

@ -317,7 +317,13 @@ presentation/backend assemblies. Runtime tests pass 323/323, App tests pass
3,717/3 skips, the complete Release suite passes 8,596/5 skips, and the exact
lifecycle/reconnect plus canonical nine-stop gates match binary/source,
converge every backlog, and exit gracefully with zero failures. J6
world/portal/environment and projection-handshake ownership is active.
world/portal/environment and projection-handshake ownership is active. J6.1
landed at `902076c0`: Runtime owns the instance-scoped Dereth calendar,
server-synchronized clock, weather, day-group selection, and AdminEnvirons
state while App only projects immutable DAT sky definitions into rendering.
Its 332 Runtime tests, 3,718 App tests / 3 skips, 8,611 complete Release tests
/ 5 skips, and exact-binary lifecycle/reconnect route pass. J6.2 canonical
reveal generation and typed destination readiness is active.
J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
J1's rollback is

View file

@ -1,6 +1,6 @@
# acdream — strategic roadmap
**Status:** Living document. Updated 2026-07-26. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions at `f5f7b417`, J5.3 combat/magic intent at `20df9d15`, J5.4 local movement/outbound cadence at `aa3f4a60`, J5.5 per-session physics/remote simulation at `7e6033d0`, J5.6 projectile simulation at `2aee3356`, and J5.7 combined simulation closeout at `cdee7a4b`. J6 world/portal/environment and projection-handshake ownership is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
**Status:** Living document. Updated 2026-07-26. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions at `f5f7b417`, J5.3 combat/magic intent at `20df9d15`, J5.4 local movement/outbound cadence at `aa3f4a60`, J5.5 per-session physics/remote simulation at `7e6033d0`, J5.6 projectile simulation at `2aee3356`, and J5.7 combined simulation closeout at `cdee7a4b`. J6.1 world-environment ownership is closed at `902076c0`; J6.2 canonical reveal generation and typed destination readiness is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
**Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file.
---
@ -1777,7 +1777,11 @@ port in any phase — no separate listing here.
> Its Runtime-only movement/use/combat/cast/projectile fixture, 323 Runtime
> tests, 3,717 App tests / 3 skips, 8,596-test / 5-skip complete Release suite,
> exact-binary lifecycle/reconnect gate, and canonical nine-stop route pass.
> J6 world/portal/environment and projection-handshake ownership is active.
> J6.1 completed at `902076c0`: Runtime owns the instance-scoped calendar,
> synchronized world clock, weather, selected day group, and AdminEnvirons
> state; its 332 Runtime tests, 3,718 App tests / 3 skips, 8,611-test / 5-skip
> complete Release suite, and exact-binary lifecycle/reconnect route pass.
> J6.2 canonical reveal generation and typed destination readiness is active.
> The historical exact cutover
> rollback remains
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:

View file

@ -251,8 +251,12 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
combat, casting, and projectiles without presentation dependencies. Its 323
Runtime tests, 3,717 App tests / 3 skips, 8,596 full Release tests / 5
skips, exact-binary lifecycle/reconnect route, and canonical nine-stop route
pass. J6 world/portal/environment and projection-handshake ownership is
active under
pass. J6.1 completed at `902076c0`: Runtime owns one instance-scoped
calendar, synchronized world clock, weather state, selected day group, and
AdminEnvirons state; App projects immutable DAT-backed sky presentation.
Its 332 Runtime tests, 3,718 App tests / 3 skips, 8,611 complete Release
tests / 5 skips, and exact-binary lifecycle/reconnect route pass. J6.2
canonical reveal generation and typed destination readiness is active under
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
Slice-I closeout evidence is
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md).

View file

@ -354,8 +354,11 @@ graphical feel gates remain unchanged.
### J6 — world, portal, environment, and projection handshake
**J6.0 active 2026-07-26.** Detailed owner inventory, retail ordering,
host-acknowledgement contract, execution ledger, and adversarial matrix:
**J6.0J6.1 complete; J6.2 active 2026-07-26.** The instance-scoped Runtime
environment owner landed at `902076c0`; exact day-group, Release, full-suite,
and connected lifecycle/reconnect gates pass. Detailed owner inventory, retail
ordering, host-acknowledgement contract, execution ledger, adversarial matrix,
and current evidence:
[`2026-07-26-modern-runtime-slice-j6.md`](2026-07-26-modern-runtime-slice-j6.md).
- Move authoritative teleport/session cell identity, world clock, weather

View file

@ -1,6 +1,6 @@
# Modern runtime Slice J6 — world, transit, and host handshake
**Status:** J6.0 ACTIVE
**Status:** J6.0J6.1 COMPLETE; J6.2 ACTIVE
**Parent:** `2026-07-25-modern-runtime-slice-j.md`, J6
**Authorization:** the user approved Slices FL, including gameplay-owner
moves, on 2026-07-24
@ -194,6 +194,8 @@ planned owner and no accepted presentation edge changes.
### J6.1 — instance-scoped environment owner
**Complete 2026-07-26 at `902076c0`.**
- Add `DerethCalendar` and make `WorldTimeService` consume its exact instance.
- Add `RuntimeWorldEnvironmentState` and immutable environment definitions.
- Reduce App's `WorldEnvironmentController` to DAT conversion plus
@ -207,6 +209,16 @@ planned owner and no accepted presentation edge changes.
Gate: Core/Runtime/App focused tests, Release build, full tests, exact
day-group fixtures, and no Runtime dependency violation.
Result: Runtime now owns the one instance-scoped calendar, synchronized world
clock, weather state, selected day group, AdminEnvirons state, and debug
overrides. App only translates immutable DAT sky definitions and projects the
selected Runtime state into the renderer. The 332 Runtime tests, 3,718 App
tests / 3 skips, 8,611 complete Release tests / 5 skips, and exact-binary
connected lifecycle/reconnect route pass. Both connected clients used
`902076c0a42079596a8a273e9be402776cabf4b0`, completed all seven checkpoints,
and exited gracefully with code zero. Evidence:
[`../research/2026-07-26-slice-j6-1-environment-ownership.md`](../research/2026-07-26-slice-j6-1-environment-ownership.md).
### J6.2 — canonical reveal generation and typed readiness
- Add `RuntimeWorldTransitState`, immutable readiness acknowledgement, and
@ -306,6 +318,12 @@ Release, full-suite, dependency, and teardown gates. The exact production
commit and matching `git revert <sha>` are recorded here, in the parent plan,
the closeout evidence, architecture, and durable memory before moving on.
J6.1 exact rollback:
```text
git revert 902076c0a42079596a8a273e9be402776cabf4b0
```
Documentation-only research/plan commits are not behavior rollback points.
No workaround, timer, forced-ready path, duplicated owner, or alternate
headless behavior is permitted.

View 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.