diff --git a/AGENTS.md b/AGENTS.md index 27e0ea00..cc04f2f5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 diff --git a/CLAUDE.md b/CLAUDE.md index 47bd7c60..392e535a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index 0c5e8745..80c6662f 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -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: diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index bb71afec..0a8abadf 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -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). diff --git a/docs/plans/2026-07-25-modern-runtime-slice-j.md b/docs/plans/2026-07-25-modern-runtime-slice-j.md index 00238ea3..4c2fb5e2 100644 --- a/docs/plans/2026-07-25-modern-runtime-slice-j.md +++ b/docs/plans/2026-07-25-modern-runtime-slice-j.md @@ -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.0–J6.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 diff --git a/docs/plans/2026-07-26-modern-runtime-slice-j6.md b/docs/plans/2026-07-26-modern-runtime-slice-j6.md index 7f635861..118ca829 100644 --- a/docs/plans/2026-07-26-modern-runtime-slice-j6.md +++ b/docs/plans/2026-07-26-modern-runtime-slice-j6.md @@ -1,6 +1,6 @@ # Modern runtime Slice J6 — world, transit, and host handshake -**Status:** J6.0 ACTIVE +**Status:** J6.0–J6.1 COMPLETE; J6.2 ACTIVE **Parent:** `2026-07-25-modern-runtime-slice-j.md`, J6 **Authorization:** the user approved Slices F–L, 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 ` 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. diff --git a/docs/research/2026-07-26-slice-j6-1-environment-ownership.md b/docs/research/2026-07-26-slice-j6-1-environment-ownership.md new file mode 100644 index 00000000..ff10f948 --- /dev/null +++ b/docs/research/2026-07-26-slice-j6-1-environment-ownership.md @@ -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.