diff --git a/AGENTS.md b/AGENTS.md index d6028aa0..7db6efbd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -364,14 +364,19 @@ Release suite passes 8,728/5 skips. K2 completed at `7e8acb74` plus local-player frame sequence, complete generation-gated bot commands, and ordered lifecycle/entity/inventory/chat/movement/portal/combat/command event stream pass 411 Runtime tests, 31 Headless tests, 3,732 App tests / 3 skips, -and 8,744 complete Release tests / 5 skips. K3's automated checkpoint landed -across `12b500d3`, `9569dadb`, and `b6547ff3`: exact process content leases, +and 8,744 complete Release tests / 5 skips. K3 completed across `12b500d3`, +`9569dadb`, `b6547ff3`, and `3f340125`: exact process content leases, immutable magic/terrain/bounded collision sharing, presentation-free local-player/collision hydration, 1/5/10-session same-GUID/portal/reconnect isolation, and policy-fault quarantine pass 412 Runtime, 42 Headless, 3,722 App -tests / 3 skips, and 8,758 complete Release tests / 5 skips. The -visible-terminal Windows and Linux/WSL production gates remain before K3 -closes. +tests / 3 skips, and 8,758 complete Release tests / 5 skips. The connected +closeout adds direct single-session CLI launch, four-stop portal routing, +external teleport handling, retail-correct normal Position versus +ForcePosition projection, explicit-only collision diagnostics, visible Windows +and native Linux production runs, user-accepted smooth retail-observer +movement, and ACE-confirmed graceful logout. Final gates pass 412 Runtime, 47 +Headless, 3,722 App / 3 skips, and 8,764 complete Release tests / 5 skips. +K4 1/5/10/30-session resource-ceiling and stress work is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is @@ -435,6 +440,9 @@ K1's rollback is K2's rollback is, newest first, `git revert 38e83640d907ee3e0819f3b38ca117ca60914d6b` then `git revert 7e8acb74dd20931d5ba88430fd100cd074a32e4d`. +K3's connected-closeout rollback is +`git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06`; its earlier automated +checkpoint rollbacks remain recorded in the Slice K plan. Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate passes. Slice I is closed in diff --git a/CLAUDE.md b/CLAUDE.md index 292a2b8d..2bc2e102 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -362,14 +362,19 @@ Release suite passes 8,728/5 skips. K2 completed at `7e8acb74` plus local-player frame sequence, complete generation-gated bot commands, and ordered lifecycle/entity/inventory/chat/movement/portal/combat/command event stream pass 411 Runtime tests, 31 Headless tests, 3,732 App tests / 3 skips, -and 8,744 complete Release tests / 5 skips. K3's automated checkpoint landed -across `12b500d3`, `9569dadb`, and `b6547ff3`: exact process content leases, +and 8,744 complete Release tests / 5 skips. K3 completed across `12b500d3`, +`9569dadb`, `b6547ff3`, and `3f340125`: exact process content leases, immutable magic/terrain/bounded collision sharing, presentation-free local-player/collision hydration, 1/5/10-session same-GUID/portal/reconnect isolation, and policy-fault quarantine pass 412 Runtime, 42 Headless, 3,722 App -tests / 3 skips, and 8,758 complete Release tests / 5 skips. The -visible-terminal Windows and Linux/WSL production gates remain before K3 -closes. +tests / 3 skips, and 8,758 complete Release tests / 5 skips. The connected +closeout adds direct single-session CLI launch, four-stop portal routing, +external teleport handling, retail-correct normal Position versus +ForcePosition projection, explicit-only collision diagnostics, visible Windows +and native Linux production runs, user-accepted smooth retail-observer +movement, and ACE-confirmed graceful logout. Final gates pass 412 Runtime, 47 +Headless, 3,722 App / 3 skips, and 8,764 complete Release tests / 5 skips. +K4 1/5/10/30-session resource-ceiling and stress work is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is @@ -433,6 +438,9 @@ K1's rollback is K2's rollback is, newest first, `git revert 38e83640d907ee3e0819f3b38ca117ca60914d6b` then `git revert 7e8acb74dd20931d5ba88430fd100cd074a32e4d`. +K3's connected-closeout rollback is +`git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06`; its earlier automated +checkpoint rollbacks remain recorded in the Slice K plan. Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate passes. Slice I is closed in diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index e41da2d3..9ca8f387 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-27. **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 closed at `a6860d55` plus `acb845d8`; J6.3 exact F751/Position destination correlation is closed at `6a063a27`; J6.4 exact graphical-host acknowledgement and owner cleanup is closed at `18d17d8b`. J7's one graphical `GameRuntime` root is closed at `ce41efb9`, including the user's 2026-07-27 exact post-cutover visual acceptance. J8 closed Slice J at `a9a822f2` with one shared graphical/no-window root and generation-reset transaction. Slice K Linux headless/multi-session work is active; K0's tested no-presentation Windows/Linux boundary closed at `aada8a37`, K1's real portable single-session host closed at `f8cb840f`, and K2's deterministic scheduler plus complete shared bot command/event path closed at `7e8acb74` plus `38e83640`. K3's shared-content, collision-hydration, 1/5/10-session isolation, and fault-quarantine automated checkpoint landed at `12b500d3`, `9569dadb`, and `b6547ff3`; its visible-terminal Windows and Linux/WSL production gates remain. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate. +**Status:** Living document. Updated 2026-07-27. **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 closed at `a6860d55` plus `acb845d8`; J6.3 exact F751/Position destination correlation is closed at `6a063a27`; J6.4 exact graphical-host acknowledgement and owner cleanup is closed at `18d17d8b`. J7's one graphical `GameRuntime` root is closed at `ce41efb9`, including the user's 2026-07-27 exact post-cutover visual acceptance. J8 closed Slice J at `a9a822f2` with one shared graphical/no-window root and generation-reset transaction. Slice K Linux headless/multi-session work is active; K0's tested no-presentation Windows/Linux boundary closed at `aada8a37`, K1's real portable single-session host closed at `f8cb840f`, and K2's deterministic scheduler plus complete shared bot command/event path closed at `7e8acb74` plus `38e83640`. K3 closed at `3f340125` after the shared-content/collision/isolation checkpoint, visible-terminal Windows and native Linux production runs, four-stop portal route, external-teleport handling, and user-accepted retail-observer movement. K4 30-session resource and stability work 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. --- @@ -1805,10 +1805,10 @@ port in any phase — no separate listing here. > single-session Windows/Linux host closed at `f8cb840f` after both platforms > completed the same real ACE connect, portal, graceful reconnect, and terminal > teardown gate. K2's absolute-deadline scheduler and full typed bot-command/ -> event parity closed at `7e8acb74` plus `38e83640`; K3's automated -> shared-content/collision/isolation checkpoint landed at `12b500d3`, -> `9569dadb`, and `b6547ff3`. Its visible-terminal Windows and Linux/WSL -> production gates remain. +> event parity closed at `7e8acb74` plus `38e83640`; K3 closed at +> `3f340125` after the shared-content/collision/isolation checkpoint, visible +> Windows and native Linux production runs, exact portal routing, graceful +> teardown, and user-accepted retail-observer movement. K4 is active. > The historical exact cutover > rollback remains > `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete: @@ -1854,8 +1854,8 @@ hitch and follows. > **PROMOTED TO ACTIVE MODERN RUNTIME SLICES K/L.** Slice K now executes the > no-window Linux host and approximately 30-session target from > [`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.md); -> Slice L executes the graphical Linux/platform work. K0-K2 are complete and -> K3 is active. The historical LH rows below remain the stable outcome map. +> Slice L executes the graphical Linux/platform work. K0-K3 are complete and +> K4 is active. The historical LH rows below remain the stable outcome map. The governing architectural rule is that a game session must not be a hidden `GameWindow`. Authentication, networking, world state, movement, inventory, diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 904632c6..25cda837 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -294,14 +294,17 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I absolute-deadline scheduler, the shared Runtime local-player frame sequence, complete generation-gated bot commands, and lifecycle/entity/inventory/chat/ movement/portal/combat/command events pass 411 Runtime, 31 Headless, 3,732 - App / 3 skips, and 8,744 complete Release tests / 5 skips. K3's automated - checkpoint landed across `12b500d3`, `9569dadb`, and `b6547ff3`: exact + App / 3 skips, and 8,744 complete Release tests / 5 skips. K3 completed + across `12b500d3`, `9569dadb`, `b6547ff3`, and `3f340125`: exact process content leases, immutable magic/terrain/bounded collision sharing, presentation-free local-player/collision hydration, 1/5/10-session - same-GUID/portal/reconnect isolation, and policy-fault quarantine pass 412 - Runtime, 42 Headless, 3,722 App / 3 skips, and 8,758 complete Release tests - / 5 skips. The visible-terminal Windows and Linux/WSL production gates - remain before K3 closes. + same-GUID/portal/reconnect isolation, and policy-fault quarantine are joined + by the visible-terminal Windows and native Linux/WSL production gates. + Direct launch, four-stop portal routing, external `teleallto`, retail-client + observer movement, graceful logout, and the corrected normal-position versus + ForcePosition routing pass. Final gates report 412 Runtime, 47 Headless, + 3,722 App / 3 skips, and 8,764 complete Release tests / 5 skips. K4 + 1/5/10/30-session resource-ceiling and stress work is active. Slice-I closeout evidence is [`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md). Slice-J2 closeout evidence is diff --git a/docs/plans/2026-07-26-modern-runtime-slice-k.md b/docs/plans/2026-07-26-modern-runtime-slice-k.md index 8a26578e..88d7fcd5 100644 --- a/docs/plans/2026-07-26-modern-runtime-slice-k.md +++ b/docs/plans/2026-07-26-modern-runtime-slice-k.md @@ -1,6 +1,6 @@ # Modern runtime Slice K — Linux headless and multi-session host -**Status:** K0–K2 COMPLETE; K3 AUTOMATED CHECKPOINT COMPLETE, CONNECTED GATE ACTIVE 2026-07-27 +**Status:** K0–K3 COMPLETE; K4 ACTIVE 2026-07-27 **Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice K **Authorization:** the user approved Slices F–L on 2026-07-24 **Purpose:** run efficient automated clients on Linux without a display, GPU, @@ -171,11 +171,14 @@ Support non-interactive providers suitable for local automation: - standard-input secret stream; - credential file with an explicit user-only-permission check on Linux. -Do not accept a plaintext password directly on the command line because process -lists expose it. `ToString`, validation errors, logs, checkpoints, crash -reports, and metrics contain only redacted credential IDs. Secrets are cleared -from retained buffers when the session is disposed where the BCL representation -allows it. +The user additionally requires an explicit `-user`/`-password` (and long-form +alias) launch override for local single-session automation. It is accepted only +for `run` with exactly one configured session and intentionally carries the +ordinary process-list exposure of command-line arguments. Configuration-based +multi-session production continues to use the providers above. `ToString`, +validation errors, logs, checkpoints, crash reports, and metrics never echo the +password, and the session wraps the value in the same disposable credential +owner used by provider-based launch. ## 6. Bot surface @@ -293,7 +296,7 @@ not busy-loop. ### K3 — shared immutable content and isolation -**Automated checkpoint complete at `12b500d3`, `9569dadb`, and `b6547ff3`.** +**Complete at `12b500d3`, `9569dadb`, `b6547ff3`, and `3f340125`.** The process opens the exact DAT/pak/magic/terrain sources once, shares a bounded immutable flat-collision cache, and gives each session its own Runtime/physics/cache/movement/collision-neighborhood graph. The direct @@ -301,8 +304,26 @@ accepted-state route now hydrates local-player movement and terrain, EnvCell, building, stab, and procedural-scenery collision without loading presentation. The 1/5/10-session same-GUID/portal/reconnect gate and policy-fault quarantine pass. Runtime passes 412 tests, Headless 42, App 3,722/3 skips, and the complete -Release solution 8,758/5 skips. The remaining K3 work is the visible-terminal -Windows connected gate plus the matching Linux/WSL production gate. Evidence: +Release solution 8,758/5 skips. + +The connected closeout adds explicit portal-route and long-lived observer +policies as consumers of the same `IGameRuntimeView` / +`IGameRuntimeCommands` seam used by graphical automation. It also aligns the +direct host with retail position routing: ordinary accepted position echoes no +longer re-run teleport placement or stop local motion, `ForcePosition` uses +`BlipPlayer` semantics plus an immediate position acknowledgement, and a real +teleport performs exactly one destination placement. High-volume collision +snap diagnostics are now explicitly opt-in. + +The visible Windows production terminal passed connect, collision hydration, +lifestone recall, graceful reconnect, second-generation materialization, and +terminal teardown. The native Linux/WSL executable then passed direct CLI +launch, exact Aerlinthe/Caul/Rynthid/lifestone routing, external `teleallto` +portal generations, and a retail-client observer gate. The user saw the +headless character turn and run smoothly without rubberbanding; three accepted +external portal generations completed before ACE confirmed graceful logout. +The final Release gate passes 412 Runtime tests, 47 Headless tests, 3,722 App +tests / 3 skips, and 8,764 complete-solution tests / 5 skips. Evidence: `docs/research/2026-07-27-slice-k3-shared-content-isolation-checkpoint.md`. - Introduce a process content owner with leases and exact last-user disposal. @@ -402,9 +423,10 @@ git revert 38e83640d907ee3e0819f3b38ca117ca60914d6b git revert 7e8acb74dd20931d5ba88430fd100cd074a32e4d ``` -K3 automated-checkpoint rollback, newest first: +K3 rollback, newest first: ```text +git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06 git revert b6547ff38c375328417855200f41c8af6436f246 git revert 9569dadb578b299b24e30aec85eee86ec0c2b3fb git revert 12b500d38362e8aae0a23a4f9712b86367006f76 diff --git a/docs/research/2026-07-27-slice-k3-shared-content-isolation-checkpoint.md b/docs/research/2026-07-27-slice-k3-shared-content-isolation-checkpoint.md index 01344677..29273a93 100644 --- a/docs/research/2026-07-27-slice-k3-shared-content-isolation-checkpoint.md +++ b/docs/research/2026-07-27-slice-k3-shared-content-isolation-checkpoint.md @@ -1,8 +1,8 @@ -# Slice K3 shared-content and isolation checkpoint +# Slice K3 shared-content and isolation closeout **Date:** 2026-07-27 -**Status:** Automated checkpoint complete; connected Windows/Linux gate remains -**Commits:** `12b500d3`, `9569dadb`, `b6547ff3` +**Status:** Complete +**Commits:** `12b500d3`, `9569dadb`, `b6547ff3`, `3f340125` ## Outcome @@ -43,21 +43,52 @@ attributed safely across sessions. array, and bounded collision source are shared; mutable physics/cache/ movement owners are not. -## Remaining K3 gate +## Connected production evidence -1. Run the production Release executable against local ACE in a visible - terminal with no window, renderer, audio, or UI assemblies. -2. Observe initial collision hydration, lifestone recall, reconnect, and exact - final content-lease disposal. -3. Repeat the production gate on Linux/WSL. -4. Add the connected resource evidence and close K3 before deriving K4's - numeric 1/5/10/30-session ceilings. +The Windows visible-terminal Release host connected to local ACE without a +window, renderer, audio, or UI assembly. It hydrated collision, completed a +lifestone recall, performed the absolute-deadline graceful reconnect, entered +the second generation, and converged through ACE-confirmed graceful logout. + +The native Linux/WSL Release host then connected through the same production +composition using direct single-session `-user`/`-password` launch. The fixed +portal-route policy completed Aerlinthe, Caul, Rynthid, and lifestone stops. +The long-lived observer policy entered Rynthid, accepted two further external +`teleallto` destinations, and continued to issue typed turn/run intents. +A retail client observed the same server-visible character and the user +accepted its smooth movement without rubberbanding. + +The live run exposed two connected-only defects and corrected them at their +owner boundaries: + +- zero-delta collision snap tracing wrote every frame; production now leaves + the explicit diagnostic sink unset; +- every ordinary local Position echo re-ran full teleport synchronization, + stopping motion and snapping the headless controller. Direct projection now + ignores normal Apply echoes, blips only `ForcePosition`, acknowledges the + force immediately, and retains one full placement for real teleports. + +The accepted Linux run completed three external portal generations and then +produced `graceful logout requested`, `graceful logout confirmed`, stopped, +and disposed records. The bot policies contain no private movement or world +model: they consume `IGameRuntimeView`, `IGameRuntimeCommands`, and the same +Runtime local-player frame and outbound serializers as the graphical host. + +Final automated evidence after the corrections: + +- Release build: zero warnings and zero errors. +- Runtime: 412 passed. +- Headless: 47 passed. +- App: 3,722 passed / 3 skipped. +- Complete solution: 8,764 passed / 5 skipped. +- Native Ubuntu .NET 10 Release build: zero warnings and zero errors. ## Exact rollback Newest first: ```text +git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06 git revert b6547ff38c375328417855200f41c8af6436f246 git revert 9569dadb578b299b24e30aec85eee86ec0c2b3fb git revert 12b500d38362e8aae0a23a4f9712b86367006f76 diff --git a/memory/project_modern_runtime_headless.md b/memory/project_modern_runtime_headless.md new file mode 100644 index 00000000..671f259e --- /dev/null +++ b/memory/project_modern_runtime_headless.md @@ -0,0 +1,67 @@ +# Modern Runtime headless continuation + +## Current checkpoint + +Slice J is closed. Slice K0-K3 are closed; K4 is active. + +K3's production closeout commit is `3f340125`. Its automated predecessors are +`12b500d3`, `9569dadb`, and `b6547ff3`. + +The Windows visible-terminal host and native Linux/WSL host both connected to +local ACE without loading presentation assemblies. Linux completed the +Aerlinthe/Caul/Rynthid/lifestone route, accepted external `teleallto` +destinations, remained visible to a retail observer, turned and ran smoothly, +and shut down through ACE-confirmed graceful logout. The user accepted the +observer movement gate on 2026-07-27. + +## Important connected correction + +`RuntimeLiveEntitySessionController` passes the exact accepted +`PositionTimestampDisposition` to the direct world projection. + +- Normal `Apply` echoes update canonical state but do not reset the local + headless movement controller. +- `ForcePosition` uses `BlipPosition`, preserves active movement semantics, and + sends an immediate autonomous-position acknowledgement. +- A real teleport performs one full synchronization from + `PrepareDestination`. + +Do not reintroduce full local-player synchronization for every accepted +Position packet; it stops movement and causes retail observers to see repeated +run/snap-back rubberbanding. + +Collision `[snap]` output is high volume and must remain behind the explicit +`PhysicsEngine.DiagnosticLog` sink. + +## Automation seam + +Graphical automation and headless policies use `IGameRuntimeView`, +`IGameRuntimeCommands`, `IRuntimeEventSource`, and the same +`RuntimeLocalPlayerFrameController`/outbound serializers. The route and +observer policies are diagnostic consumers, not a second bot world or +movement implementation. + +The user requires optional direct single-session CLI launch with +`-user`/`-password` or the long-form aliases. Multi-session configuration +continues to use credential providers. + +## Next work + +Execute K4 from `docs/plans/2026-07-26-modern-runtime-slice-k.md`: + +1. capture reproducible 1/5/10-session warm resource baselines; +2. derive and commit numeric per-session/process ceilings; +3. build the 30-session connected stress configuration and workload; +4. run the two-hour Linux soak with recurring movement, use, combat/cast, + chat, portal, cancellation, and reconnect; +5. prove stable final-hour plateaus and exact teardown convergence; +6. close Slice K, then start Slice L Linux graphical/platform work. + +Final K3 automated counts: Runtime 412, Headless 47, App 3,722 / 3 skips, +complete Release 8,764 / 5 skips. + +K3 connected-closeout rollback: + +```text +git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06 +```