docs(headless): close modern runtime slice K

This commit is contained in:
Erik 2026-07-27 11:31:19 +02:00
parent b2ab0956f2
commit 1628d9f587
8 changed files with 97 additions and 69 deletions

View file

@ -253,7 +253,10 @@ src/
Hosting/ -> one GameRuntime/session/lease/policy lifetime
Policies/ -> typed Runtime-view/command consumers
-> references Runtime only; no presentation/backend package
-> K0-K2 complete; shared process-content ownership (K3) active
-> Slice K complete: portable single/multi-session production host,
deterministic scheduler/bot API, shared immutable process content,
1/5/10/30-root isolation/endurance, numeric resource envelope, and
exact connected/terminal convergence
AcDream.Plugin.Abstractions/ Layer 5: plugin interfaces
IAcDreamPlugin.cs -> done

View file

@ -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 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 is implemented through `776482da`: resource telemetry/wait correction, 1/5/10/30-root isolation and two-hour simulated endurance, death/randomized cancellation, and a committed diagnostic-only resource/ownership envelope all pass. The exact `776482da` two-account Rynthid soak is active; graceful terminal convergence is the final Slice-K gate. 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 closed. K0's tested no-presentation Windows/Linux boundary closed at `aada8a37`, K1's portable single-session host at `f8cb840f`, K2's deterministic scheduler and shared bot API at `7e8acb74` plus `38e83640`, and K3's shared-content/isolation plus connected observer gate at `3f340125`. K4 closed through `776482da`: 1/5/10/30-root isolation and two-hour simulated endurance, death/randomized cancellation, committed resource ceilings, ten minutes of exact native Linux two-account connected sampling, ACE-confirmed graceful logout, and zero-debt Runtime/content convergence all pass. Slice L Linux graphical/platform 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.
---
@ -1800,7 +1800,7 @@ port in any phase — no separate listing here.
> exact post-cutover visual matrix on 2026-07-27. J8 closed Slice J at
> `a9a822f2`: 395 Runtime tests, 3,731 App tests / 3 skips, 8,696 complete-
> solution tests / 5 skips, lifecycle/reconnect, and canonical nine-stop gates
> pass. Slice K Linux headless/multi-session implementation is active. K0's
> pass. Slice K Linux headless/multi-session implementation is complete. K0's
> portable no-presentation boundary closed at `aada8a37`; K1's production
> single-session Windows/Linux host closed at `f8cb840f` after both platforms
> completed the same real ACE connect, portal, graceful reconnect, and terminal
@ -1814,8 +1814,9 @@ port in any phase — no separate listing here.
> root isolation and two-hour simulated endurance, death/randomized
> cancellation, and a committed numeric envelope. Windows/native-Ubuntu
> Headless tests pass 67/67 and the complete Release suite passes 8,784 / 5
> skips. The exact two-account connected soak is active; graceful terminal
> convergence remains.
> skips. The exact two-account connected soak then passed 20 periodic samples,
> ACE-confirmed graceful logout, and a zero-debt `disposed` record. Slice K is
> closed and Slice L is active.
> The historical exact cutover
> rollback remains
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:
@ -1861,12 +1862,12 @@ 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-K3 are complete and
> K4 is implemented through `776482da`. Its automated 1/5/10/30-root
> Slice L executes the graphical Linux/platform work. K0-K4 and Slice K are
> complete through `776482da`. Its automated 1/5/10/30-root
> isolation, two-hour simulated endurance, death/cancellation, and committed
> resource-envelope gates pass; the exact two-account connected process is
> running inside the envelope and only its graceful terminal convergence
> remains. The historical LH rows below remain the stable outcome map.
> resource-envelope gates pass; the exact two-account connected process added
> ten minutes of passing samples, graceful logout, and complete terminal
> convergence. 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,
@ -1884,11 +1885,14 @@ gameplay implementations.
| LH4 | Multi-session bot host, targeting approximately 30 concurrent clients in one process | Sessions isolate credentials, GUID maps, clocks, queues, plugins/behaviors, and teardown while sharing only immutable/read-only DAT and collision content caches; one-session-per-process remains a diagnostic/isolation option |
| LH5 | Bot automation surface | Actions cover movement, targeting, use, combat, casting, looting, chat, and commands; events cover object/session/portal, inventory, damage, and target lifecycle; deterministic scheduling and server-safe rate limiting are testable |
Track acceptance requires 30 connected Linux headless sessions with no GPU or
display-server dependency, bounded per-session CPU/memory growth, clean
Track acceptance uses 30 production Runtime roots in one Linux process with no
GPU or display-server dependency, bounded per-session CPU/memory growth, clean
connect/disconnect/reconnect teardown, credential-safe diagnostics, and parity
tests proving that GUI and headless hosts drive the same gameplay runtime. LOD
has no role in headless mode because no scene is rendered.
tests proving that GUI and headless hosts drive the same gameplay runtime.
The two locally available ACE accounts provide the connected scale/observer
gate; deterministic production-owner fixtures provide the 5/10/30-root and
two-hour dimensions. LOD has no role in headless mode because no scene is
rendered.
Native macOS graphical support is not committed by this track. The current
mandatory renderer requires modern OpenGL capabilities beyond Apple's native

View file

@ -278,7 +278,7 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
transaction, and one gameplay-owner graph. Its 395 Runtime tests, 3,731 App
tests / 3 skips, 8,696 complete-solution tests / 5 skips, exact-binary
lifecycle/reconnect route, and canonical nine-stop route pass. Slice K is
active under
complete under
[`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.md).
K0 completed at `aada8a37`: `AcDream.Headless` has a hard no-presentation
dependency boundary, strict no-connect validation, and Windows/Ubuntu CI.
@ -311,9 +311,12 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
per-process/per-session ceilings with exact running/terminal ownership
checks (`776482da`). Windows and native Ubuntu Headless tests pass 67/67 and
the complete Release suite passes 8,784 tests / 5 skips. The exact
`776482da` two-account Rynthid soak is active with zero faults and every
sampled resource dimension inside its ceiling; graceful terminal
convergence remains the final Slice-K closeout gate.
`776482da` two-account native Linux process completed ten minutes and 20
consecutive periodic samples with zero faults/reconnect debt and every
dimension inside its ceiling. SIGINT then produced ACE-confirmed graceful
logout for both accounts and a passing `disposed` record with two converged
Runtime roots, zero entities/inventory/host/content leases, and disposed
shared content. K4 and Slice K are closed; Slice L 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

View file

@ -1,7 +1,6 @@
# Modern runtime Slice K — Linux headless and multi-session host
**Status:** K0K3 COMPLETE; K4 IMPLEMENTED, CONNECTED TERMINAL GATE ACTIVE
2026-07-27
**Status:** COMPLETE 2026-07-27
**Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice K
**Authorization:** the user approved Slices FL on 2026-07-24
**Purpose:** run efficient automated clients on Linux without a display, GPU,
@ -368,11 +367,13 @@ teardown.
Windows and native Ubuntu Headless tests pass 67/67; the complete Release
suite passes 8,784 tests / 5 skips. The exact `776482da` native Linux process
has both available accounts in-world at Rynthid, zero faults/reconnect debt,
bounded wakeups and CPU, and every sampled dimension inside the committed
ceiling. The user requested that it remain running for observation; its
graceful `disposed` sample is the sole remaining K4/Slice-K closeout gate.
Evidence:
completed ten minutes with both available accounts, 20 consecutive passing
periodic samples, zero fault/reconnect debt, bounded CPU/wakeups/lateness, and
every resource dimension inside the committed ceiling. SIGINT produced
ACE-confirmed graceful logout for both accounts. The final `disposed` sample
reported two converged Runtime roots, zero entities/inventory/host/content
leases, disposed shared content, and `withinCeilings=true`. K4 and Slice K are
closed. Evidence:
`docs/research/2026-07-27-slice-k4-resource-telemetry-checkpoint.md`.
- Measure a 1-session warm baseline, then 5, 10, and 30 sessions.

View file

@ -1,8 +1,7 @@
# Slice K4 resource telemetry checkpoint
# Slice K4 resource and endurance closeout
**Date:** 2026-07-27
**Status:** Implementation and automated gates complete; exact connected
terminal gate active
**Status:** COMPLETE
**Production commits:** `cb512fd0`, `97c174fb`, `bd236ce5`, `776482da`
## Outcome
@ -145,21 +144,29 @@ observational only.
- Diagnostics assert no credential text and exact 1/5/10/30-root terminal
convergence.
## Remaining K4 gate
## Exact connected terminal gate
The exact `776482da` two-account process is running under the committed
envelope. After the observer window it must receive graceful cancellation and
emit a final `disposed` sample with:
The exact `776482da` native Linux process ran both available accounts for ten
minutes. It emitted 20 consecutive passing periodic samples with zero
fault/reconnect debt and no resource-envelope violation. The final running
sample reported 290,693,120 private bytes, 269,709,312 resident bytes,
117,592,656 managed live bytes, 17 threads, 115 handles, 116 descriptors,
three sockets, 79.1 waits/second, 133.3 turns/second, zero continuing
catch-ups, 3.05 ms mean lateness, and 145.1 ms maximum lateness.
- two converged Runtime roots;
- zero in-world/reconnecting/faulted sessions;
SIGINT entered the normal production teardown path. ACE confirmed graceful
logout for `+Horan` and `+Acdream`. The final `disposed` sample reported:
- `configuredCount=2`, `convergedRuntimeCount=2`;
- zero in-world, faulted, or reconnecting sessions;
- zero entities, inventory objects, and host leases;
- zero shared-content leases with content disposed/converged;
- `withinCeilings=true`.
- zero shared-content leases, content disposed and converged;
- one post-network baseline socket descriptor;
- `withinCeilings=true` with no violations.
Only then does Slice K close. Available credentials support two simultaneous
connected accounts; 5/10/30-session scale and two-hour duration are therefore
proved by the deterministic in-process production-owner fixtures.
Available credentials support two simultaneous connected accounts; 5/10/30
root scale and two-hour duration are proved by the deterministic
production-owner fixtures. K4 and Slice K are closed.
## Rollback