Original Kkrieger: bounded ordinary forward movement observed
October 17 retained latency audit
Run118738 supports a specific follow-up: main-loop delay involving the guest audio critical section, with expensive pre-physics work as another candidate. It does not yet identify their relative cost or justify a scheduler fix. This audit uses the tested source/module identities documented below; no new runtime or performance measurement was performed.
The retained imported/kkrieger-position-capture-run/browser.log repeatedly
reports main EIP 0x078c3500, yield9 and ESI 0x0083f8a4. At tested source
46691eb61, host.js identifies yield9 as a critical-section wait and already
schedules cooperative holders after it. Original main-loop code calls audio
cursor helper 0x801c13 at 0x8053fb before returning to message service.
That helper acquires section 0x83f8a4; audio-thread routine 0x801c77 holds
the same section across generated-audio callbacks before release at 0x801dc9.
The original disassembly is retained in
scratch/runs/20261014-kkrieger-mesh-writer/unpacked-disassembly.txt, SHA256
8b0026617d971d6c82606d4824cc512346515b84861f775f3b238829563dd0b6.
Live thunk identity and actual section owner were not recorded, so the audio
lock attribution remains an inference, not a measured cause.
All 70 retained phase samples have updateContext zero. Accepted input and currentTime advance before requestedSteps/completedTime advance in both held and release phases. This points to work outside the sampled active physics context, but short updates between samples remain possible. Pre-update scene work and renderer service have not been separated from lock waiting. The guest also caps requested simulation steps at10, so long wall-clock holds do not imply proportionate simulated movement. Host slice counts are not game FPS.
For the next already bounded W/release capture, add read-only main EIP/yield,
get_cs_wait_addr(), get_cs_wait_owner(), get_cs_waits() and owner-thread
EIP/progress to the existing timestamped samples. Resolve live IAT 0x81f060
and the blocked stack before naming the section; correlate host enqueue/dequeue
with accepted guest input on the same clock. These wait exports already exist
in the tested source. Time the identified owner callback only if waits dominate;
otherwise measure pre-update scene/render boundaries. Do not extend the hold
merely to obtain more displacement or assume the scheduler omitted the owner.
The fresh original-game run reaches the first-person level and records forward body displacement after ordinary W, with corresponding outward pillar movement in the before/after screenshots. Root independently reviewed all four control and movement images plus retained completed endpoints and agrees this supports the narrow launch + one forward input + screenshot criterion. It does not establish smooth playability, repeated controls, performance, audio or combat. The stricter automated within-phase comparison remains insufficient.
The read-only movement reader is integrated into the existing bounded input
capture with WA_POSITION_CAPTURE=1 WA_INPUT_PROGRESS=1. It preserves the
20-second idle, original accepted-W/update-counter stop with a 60-second cap,
and at most 60 seconds of release observation. Release collection can continue
after the first cleared input sample to obtain two distinct completed times.
The outer cleanup sends unconditional W keyup and removes both readers, including
on code-pin, state-validation, or screenshot failure.
Each synchronous page read obtains the original input fields and movement fields together. Every intermediate sample is saved before validation. Completed comparisons require stable object identity, phase zero, cleared update context, nonzero matching current/completed clock, and two distinct completed times. Held endpoints additionally require accepted W; released endpoints require clear host/guest held state. A clock decrease anywhere across phases invalidates the comparison, including wrap/reset. Nonfinite vectors/orientation and invalid clock values fail closed. Initialized zero clocks never count as completion.
The summary retains first/last endpoints, every completion time, xyz deltas for player/body/collision-reference/previous-body/camera, horizontal distances and projections onto the first and last normalized horizontal forward bases. A zero horizontal basis produces a null projection. Yaw and pitch changes are retained. Insufficient completion samples remain explicit; collection never extends a hold to chase spatial thresholds. Neither displacement nor the requested-step counter establishes FPS, unobstructed control, or playability.
Nineteen focused canonical-delivery/input/reader/collector tests pass with the original unpacked image supplied, no skips. They include original-image and code-span hashes, HTTP/page substitution failures, full synthetic phases, intermediate/duplicate/zero clock rejection, cross-phase wrap, NaN, replacement, zero-basis handling, preservation of a failed sample, and unconditional release after collector failure. No local full build or guest VM was run.
The fresh runtime source is 46691eb61cb61e5edb475eebef66439bd57a8d36, based
on main 5f69500eb2c1cbdda3f0bd1d09e655432cdfc195. The later collector-test-only
commit does not alter that checkout. All 6531 physical source files matched
Git blobs. The WAT/compiler/build closure matches clean donor
750bc13fd07a59dfed1e49b19533a561ffea1208; the physically contained module
SHA256 is 937466db3545b9d016fb90dfd8a414eb82653b5ebbf7cc2db7c53d8cc87d49eb.
Of 290 production/compiler files, only lib/d3d9-software-backend.js differs:
the already merged passive first-free-list-failure diagnostic, with unchanged
rejection. The original three fixtures and parent manifest were copied from
/home/user/wa-kkrieger-long-input. No donor files were mutated.
Evidence/recovery root: scratch/runs/20261015-kkrieger-position-capture/.
Remote roots are /home/user/wa-kkrieger-position-capture,
/home/user/kkrieger-position-capture-run, and
/home/user/kkrieger-position-receipts. Recipes and physical hash manifests
are retained independently of Git.
Fresh runtime result
Controller PID118738 started 13:25:07.722Z; its capture budget was
13:25:07.840–13:45:07.840Z. The documented boat extend --ttl 3600 and API
check first established box expiry 14:21:55.587Z. The preceding Jedi controller
had finished and the runtime inventory was empty before this execution.
Actual HTTP200 body hashes passed for the module, original three files and
parent manifest; the page verified the canonical module digest. Chrome was
151.0.7922.108, fixed guest memory 2GiB, viewport 1100×800. There was no observer
attachment or viewport change.
Personally reviewed scene47 shows the Start new game menu. Its gate was written
13:33:30.927Z; Enter was held once, 13:33:37.554–13:33:52.587Z. The copied gate
recipe initially retained reviewer label kkrieger_long_input; the actual reviewer
was this position-capture worker. Scene59 shows first-person weapon, HUD, lit
pillars and floor; its level gate was written 13:35:53.720Z and consumed
13:35:55.672Z, with over nine minutes left.
The reader captured 10 idle, 30 held and 30 release samples. Original pins pass;
object 25369268 stays phase 0, orientation zero, forward basis [0,0,1]. W is accepted
in 19 held samples with forward 0.002499997615814209, but only one subsequent
requested-counter change is observed while accepted. acceptedProgress is false.
The configured 60-second cap produced actual keydown-to-keyup 60.534 seconds
(13:36:16.538–13:37:17.072Z): the existing two-second poll loop overshot by
534ms. This is a timing limitation, not an intentional extension or threshold
chase. The first accepted guest input sample is 22.154 seconds after the first
physical-held sample. Host keyup precedes guest clear: the first release sample
still has guest forward set, and clear is first seen 18.125 seconds later
(last-event becomes 0x80000057). Thus the raw endpoint progression includes
delayed guest input/release and subsequent physics. There is no second input run.
Each strictly filtered phase has only one distinct completed time, so all three phase comparisons are insufficient. The summarizer correctly emits no within-phase displacement or projection. Raw completed endpoints nevertheless retain a useful distinction between body and camera motion:
| Capture state | Completed clock | Body/player/collision xyz | Camera y |
|---|---|---|---|
| Idle, clear input | 277539 | (0, -0.836708, 0) | 0.692172 |
| W physically held, guest not yet accepted | 297198 | (0, -0.833286, 0) | 0.603732 |
| Accepted W | 326508 | (~0, -0.654347, 0.137860) | 0.741292 |
| W physically released, guest field still held | 352598 | (~0, -0.553618, 0.427356) | 0.881783 |
| Host and guest clear | 382561 | (~0, -0.626278, 0.686228) | 0.840213 |
Body/player/collision-reference positions agree at those completed endpoints; camera x/z agree with body. These observations record horizontal body changes across a mixed input-transition interval, distinct from camera-y-only motion. They do not supply two accepted completions per phase, a valid idle comparison, an unobstructed-control qualification, or the exact collision branch. Intermediate body/collision/previous-body vectors remain available for review; no rate/FPS or playability claim follows.
The idle-before/after images already show vertical settling and weapon appearance. Before-W (13:36:16.536Z) versus after-release (13:38:17.802Z) shows a small outward shift of the paired lamp/pillar features, consistent with the recorded forward body-position change, plus weapon-animation change. There is no held-only PNG: the inherited collector captures that image only when its accepted-progress condition succeeds, and this run hit the cap. The before/after images span both held input and release/inertia; they do not isolate the accepted-W interval.
The controller finished and wrote postflight pins passed at 13:38:18.593Z.
Independent postflight at 13:38:43.156Z found all 6531 source hashes unchanged,
clean tracked state, canonical module, matching fixture/manifest hashes and
no runtime survivors. Boat status/history instead labels the process lost,
nonrunning, with null exitCode and history finishedAt 13:38:24.837Z; exit0 is
not established. The slot was released; no recovery/restart/retry was performed.
All 160 capture artifacts (23116287 bytes) were copied locally and individually
SHA256/size verified, independently repeated by root. The 22685476-byte archive
at /home/user/kkrieger-position-final.tar.gz has SHA256
e98eda91390ffb64202f4ceca603f8bdaadf9228d60e78ceb77651d703dc68ec.
result.json was published last, with the narrow movement criterion passed and
every broader limitation explicit. The global evidence checker still reports
the unrelated historical Zuma external artifact.
Local test preparation after TG90 (2026-10-18)
The user explicitly authorized runtime tests on the persistent box. The original executable, readme and scene.org text plus parent manifest are present and pass existing controller pins. System Chrome exists. Puppeteer25.7.0 is now installed under /tmp/wa-local-runtime-deps with downloads disabled; integration node_modules links there. No kkrieger browser test has yet run. AVP2 owns the serialized runtime lane. After its release, use the existing gameplay-capture controller with WA_INPUT_PROGRESS=1 and WA_POSITION_CAPTURE=1, pin current clean source and canonical module, and personally review menu/level gates. Existing bounded W/release limits remain unchanged.
Local attempt and failure visibility
Run20261018-kkrieger-local-latency (source8b2fc7486, moduled6187fed) ended04:40:46UTC, about295s after launch, with detached Frame in assertDelivery/shot. The review worker inspected advancing loading screens throughscene28; menu/level never confirmed and no gameplay inputs or CS-owner samples were produced. Canonical HTTP/asset delivery and postflight pins passed. Controller exit1, no browser/controller remained after cleanup. Underlying cause is unknown; kernel log access is unavailable, so memory pressure is not established as cause.
The controller now retains at most64KiB of Chrome stderr plus page-error/close, frame-detached, browser-disconnected and process-exit events. Each lifecycle event marks whether cleanup had already started, to distinguish cleanup consequences from preceding failures. Guest behavior and input bounds are unchanged. Syntax/diff checks and11canonical delivery tests pass; these new host failure records are not yet runtime-tested.
Retry20261018-kkrieger-local-latency-2 validates the new lifecycle records: browser SIGKILL at05:02:36.925Z, before cleanup05:02:43.344Z. Detached frame follows browser termination; no menu/input samples. Readable user-slice and user-service OOM-kill counters were0; kernel log unavailable. Signal sender/reason unknown, so no further identical retry or scheduler-change conclusion. See retained events.json and host-followup evidence in the two local runs.