docs(headless): record K4 telemetry checkpoint

This commit is contained in:
Erik 2026-07-27 10:50:19 +02:00
parent cb512fd091
commit 93c6c54220
7 changed files with 197 additions and 14 deletions

View file

@ -376,7 +376,17 @@ 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.
K4 1/5/10/30-session resource-ceiling and stress work is active. Its
`cb512fd0` checkpoint adds one process-scheduler observation deadline,
structured CPU/private/resident/managed/GC/thread/handle/Linux-descriptor/
socket/session/content/ownership/wakeup/lateness metrics, and exact
post-disposal convergence without per-session workers or timers. The first
native Linux two-account run exposed and corrected pre-connect deadline arming
and a sub-millisecond `Task.Delay` busy loop. Windows and native Ubuntu
Headless tests pass 56/56; the complete Release suite passes 8,773 / 5 skips.
The user requested that the current two-client observer process remain
running; exact-fixed-binary resource ceilings and automated 5/10/30-root
endurance remain.
J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
J1's rollback is
@ -443,6 +453,8 @@ K2's rollback is, newest first,
K3's connected-closeout rollback is
`git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06`; its earlier automated
checkpoint rollbacks remain recorded in the Slice K plan.
K4's resource-telemetry/CPU rollback is
`git revert cb512fd0916fbf49285c9b64df1630c5a69a0d20`.
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
@ -475,7 +487,8 @@ closeout is
`docs/research/2026-07-27-slice-k0-portability-boundary.md`; K1 closeout is
`docs/research/2026-07-27-slice-k1-single-session-headless.md`; K2 closeout is
`docs/research/2026-07-27-slice-k2-deterministic-bot-parity.md`; Slice K executes
from `docs/plans/2026-07-26-modern-runtime-slice-k.md`. The exact G4 visual
from `docs/plans/2026-07-26-modern-runtime-slice-k.md`; K4 telemetry evidence is
`docs/research/2026-07-27-slice-k4-resource-telemetry-checkpoint.md`. The exact G4 visual
rollback
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
the portal-warmup corrections. Evidence:

View file

@ -374,7 +374,17 @@ 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.
K4 1/5/10/30-session resource-ceiling and stress work is active. Its
`cb512fd0` checkpoint adds one process-scheduler observation deadline,
structured CPU/private/resident/managed/GC/thread/handle/Linux-descriptor/
socket/session/content/ownership/wakeup/lateness metrics, and exact
post-disposal convergence without per-session workers or timers. The first
native Linux two-account run exposed and corrected pre-connect deadline arming
and a sub-millisecond `Task.Delay` busy loop. Windows and native Ubuntu
Headless tests pass 56/56; the complete Release suite passes 8,773 / 5 skips.
The user requested that the current two-client observer process remain
running; exact-fixed-binary resource ceilings and automated 5/10/30-root
endurance remain.
J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
J1's rollback is
@ -441,6 +451,8 @@ K2's rollback is, newest first,
K3's connected-closeout rollback is
`git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06`; its earlier automated
checkpoint rollbacks remain recorded in the Slice K plan.
K4's resource-telemetry/CPU rollback is
`git revert cb512fd0916fbf49285c9b64df1630c5a69a0d20`.
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
@ -473,7 +485,8 @@ closeout is
`docs/research/2026-07-27-slice-k0-portability-boundary.md`; K1 closeout is
`docs/research/2026-07-27-slice-k1-single-session-headless.md`; K2 closeout is
`docs/research/2026-07-27-slice-k2-deterministic-bot-parity.md`; Slice K executes
from `docs/plans/2026-07-26-modern-runtime-slice-k.md`. The exact G4 visual
from `docs/plans/2026-07-26-modern-runtime-slice-k.md`; K4 telemetry evidence is
`docs/research/2026-07-27-slice-k4-resource-telemetry-checkpoint.md`. The exact G4 visual
rollback
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
the portal-warmup corrections. Evidence:

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 30-session resource and stability work is active. 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 resource and stability work is active; `cb512fd0` adds process-level CPU/memory/GC/descriptor/ownership/scheduler telemetry and corrects both pre-connect deadline arming and the Linux sub-millisecond scheduler busy loop. 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.
---
@ -1808,7 +1808,12 @@ port in any phase — no separate listing here.
> 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.
> teardown, and user-accepted retail-observer movement. K4 is active;
> `cb512fd0` adds one process-level resource/ownership sampling deadline,
> exact scheduler lateness/wakeup accounting, terminal convergence reporting,
> post-connect deadline rebasing, and the Linux sub-millisecond busy-wait
> correction. Windows/native-Ubuntu Headless tests pass 56/56 and the complete
> Release suite passes 8,773 / 5 skips.
> The historical exact cutover
> rollback remains
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:
@ -1855,7 +1860,9 @@ hitch and follows.
> 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 active. The historical LH rows below remain the stable outcome map.
> K4 is active. Its telemetry/CPU checkpoint is `cb512fd0`; exact fixed-binary
> connected baselines and automated 5/10/30-root endurance gates remain. 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,

View file

@ -304,7 +304,15 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
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.
1/5/10/30-session resource-ceiling and stress work is active. Its
`cb512fd0` telemetry checkpoint adds one process-level sampling deadline,
structured CPU/memory/GC/thread/descriptor/socket/ownership/content/
scheduler metrics, exact terminal convergence, post-connect deadline
rebasing, and the Linux sub-millisecond busy-wait correction without adding
per-session workers or timers. Windows and native Ubuntu Headless tests pass
56/56 and the complete Release suite passes 8,773 tests / 5 skips. The
exact-fixed-binary one/two-account baseline and automated 5/10/30-root
endurance gates remain.
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

@ -341,6 +341,18 @@ disposes only after the final host acknowledgement.
### K4 — 30-session stress and closeout
K4 telemetry checkpoint `cb512fd0` is complete. One process-level
absolute-deadline sampler now reports CPU, private/resident/managed memory,
GC, threads, handles, Linux descriptors/sockets, session/ownership debt,
shared-content leases, scheduler wakeups, and deadline lateness without adding
per-session workers or timers. The first native Linux two-account run exposed
and corrected both pre-connect deadline arming and a sub-millisecond
`Task.Delay` busy loop. Windows and native Ubuntu Headless tests pass 56/56;
the complete Release suite passes 8,773 tests / 5 skips. The user requested
that the active two-client observer process remain running, so the exact fixed-
binary connected baseline and numeric ceilings remain next. Evidence:
`docs/research/2026-07-27-slice-k4-resource-telemetry-checkpoint.md`.
- Measure a 1-session warm baseline, then 5, 10, and 30 sessions.
- Before the final run, commit numeric ceilings derived from K3 evidence for:
- incremental private bytes per established session;

View file

@ -0,0 +1,115 @@
# Slice K4 resource telemetry checkpoint
**Date:** 2026-07-27
**Status:** Instrumentation and CPU-wakeup correction complete; fixed-binary
connected baselines remain active
**Production commit:** `cb512fd0`
## Outcome
The Linux headless process now emits one structured resource sample at
startup, every 30 seconds, before scheduler stop, and after terminal disposal.
Sampling is driven by the existing process scheduler's absolute deadline. It
does not add a worker, timer, or callback per session.
Each sample reports:
- working set, private bytes, virtual bytes, total CPU time, interval CPU as
both core-equivalent and machine-normalized percentages;
- managed live, heap, fragmentation, committed and allocated bytes, memory
load, GC pause percentage, and generation counts;
- process thread/handle counts and Linux file/socket descriptors;
- configured, in-world, faulted, reconnecting, and converged Runtime roots,
entity/inventory totals, and exact host-lease count;
- scheduler waits, turns, catch-up collapses, late-deadline count, mean and
maximum lateness;
- shared-content lease count, mapped virtual bytes, disposal state, and final
convergence.
No account password or credential reference is included in this schema.
## Two-account connected evidence
One native Linux process connected the two locally available accounts:
- `testaccount` / `+Acdream`
- `testaccount2` / `+Horan`
Both entered Rynthid and maintained independent Runtime roots and movement.
The user asked that this process stay running for the retail-observer gate.
The first process sample after both world entries reported:
| Metric | Value |
|---|---:|
| private bytes | 207,966,208 |
| working set | 191,553,536 |
| managed live bytes | 71,108,368 |
| threads | 16 |
| handles | 115 |
| Linux descriptors | 114 |
| socket descriptors | 3 |
| shared content leases | 2 |
| mapped package virtual bytes | 29,908,271,024 |
The roughly 29.9 GB mapped-package value is address space, not resident or
private memory. The mmap remains shared and demand-paged.
After movement and additional portal/density activity, the latest recorded
sample before this checkpoint reported 305,393,664 private bytes, 332,742,656
working-set bytes, 139,609,360 managed live bytes, 418 entities, 16 threads,
117 handles, and the same three socket descriptors. Entity count changed from
187 to 418 during that interval, so the memory delta is not treated as a
same-workload per-session ceiling.
## Scheduler finding and correction
The connected samples exposed two distinct scheduler problems:
1. scheduler deadlines began during host construction, before sequential
account connects completed, producing a false initial catch-up and a
roughly 615 ms maximum-lateness sample;
2. the final positive sub-millisecond `Task.Delay` remainder rounded down to
zero on Linux, causing millions of wait-loop turns between actual 15 ms
simulation deadlines.
The correction:
- rebases every session and observation deadline exactly once after all
configured sessions enter the world;
- refuses to rebase a scheduler that has already dispatched;
- rounds only positive sub-millisecond timer waits up to one millisecond;
- retains the 15 ms absolute simulation cadence and bounded catch-up rules.
The process still under user observation was intentionally not restarted, so
its high wait counter belongs to the pre-correction artifact. The committed
correction is protected by deterministic rebase/lateness tests and a real
system-timer test that fails if the scheduler busy-loops between turns.
## Automated gates
- Windows Headless Release: 56 passed.
- Native Ubuntu Headless Release: 56 passed.
- Complete Windows Release suite: 8,773 passed / 5 skipped.
- Windows and native Ubuntu Release builds complete.
- Diagnostics assert two configured sessions, no password text, and exact
two-runtime terminal convergence.
## Remaining K4 gate
The next connected restart must use exact binary `cb512fd0` or a documented
descendant and prove the wait counter remains cadence-bounded, initial
catch-up remains zero, CPU falls accordingly, and terminal resource samples
converge. Available credentials support a two-account connected scale gate.
The 5/10/30-session isolation and endurance dimensions therefore remain
automated in-process gates unless additional local ACE accounts are
provisioned.
Numeric ceilings are not yet committed: they will be derived only from the
fixed binary under matched 1- and 2-session workloads.
## Rollback
```text
git revert cb512fd0
```

View file

@ -7,6 +7,13 @@ 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`.
K4's resource-telemetry/CPU checkpoint is `cb512fd0`. It adds one
process-scheduler observation deadline, structured process/managed/session/
content/scheduler metrics, exact post-disposal convergence reporting, startup
deadline rebasing, and the Linux sub-millisecond busy-wait correction. It does
not add per-session timers or workers. Windows and native Ubuntu Headless
tests pass 56/56; the complete Release suite passes 8,773 / 5 skips.
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`
@ -49,12 +56,14 @@ continues to use credential providers.
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;
1. after the user finishes observing the current two clients, restart on exact
`cb512fd0` or a documented descendant;
2. prove cadence-bounded wait count, zero startup catch-up, reduced CPU, and
exact teardown convergence under matched one- and two-account workloads;
3. derive and commit numeric per-session/process ceilings;
4. run automated 5/10/30-root stress and endurance gates; the connected scale
gate is presently limited to the two available local ACE accounts;
5. prove stable 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,
@ -65,3 +74,9 @@ K3 connected-closeout rollback:
```text
git revert 3f3401257c83bdd9f557eb577ba08cf2e5ec9a06
```
K4 telemetry/CPU rollback:
```text
git revert cb512fd0
```