Outlaws original first-launch handoff

Ordinary Left turn verified after settled readiness

20261018-outlaws-settled-turn-observation now verifies ordinary turning. After reviewed Main Game and GOOD mouse selections, the initial three-second town frame was still tinted and was not used as readiness. A fresh paired ready-1.png showed full-color town, health 10 and tint 0. Its checked sample was 8.472 seconds old at the before-input read, within the ten-second gate.

Exactly one Left keydown at 20:15:47.484Z and independent keyup at 20:15:47.984Z produced visible camera rotation: the street gate moved right, the left building and cactus entered view, and the released/three-second idle frames retained that new orientation. This is world-view rotation, not merely animated chickens. left-before.png, left-held.png, left-released.png and left-idle.png were all reviewed. Their paired reads and readiness sample all report health 10 (0x41200000), loss/gain 0, tint 0 and no unknown fields. The state excludes depleted-health or active tint contamination at these observations. Adjacent reads and PNGs are not atomic snapshots, and this does not establish audio, combat, FPS, browser or whole-game qualification. Earlier ordinary forward movement remains verified; the earlier statement that turning was unverified is superseded by this run.

The registered original 30-mount route retained real ticks, scale 1 and calendar 928238400000/UTC without diagnostic counters. Exact module/map remain the fd1613e2…/a6869fe0… hashes recorded below. Physical pin HEAD was 5e449651db0931b39e82c42c9542d55d0f4277c9; postflight HEAD was ffd06bd9bec32eddaee06a7324f811ab5c5916c9, with all 3,149 source/fixture pins and 31 original records unchanged. Child 2421851 and controller 2421843 exited 0 at 20:15:58.947Z, both absent and group empty after 97.815 seconds. Minimum free space was 2,279,104,512 bytes, log 4,585,130 bytes; no guard fired. turn-samples.json, reviewed frames, exact launch, terminal/postflight and result.json preserve the passed turn with broader qualification still partial. No forward input, retry, build, browser or guest write occurred in this run.

Prepared ordinary turn after measured readiness

scratch/runs/20261018-outlaws-settled-turn-prep/PLAN.json prepares one ordinary Left hold, prepared before the completed run above. Registered route, real ticks, time scale 1, pinned calendar/UTC and authentic 30 mounts remain unchanged; diagnostic --count is removed. Main Game and GOOD use reviewed 250-ms mouse holds. A fixed three-second capture is observation, never readiness.

Each requested readiness capture pairs a checked read-only health/tint sample with its PNG. At most six samples spaced at least two seconds are planned. Input requires a reviewed full-color town, matching PNG hash and the actual paired log sample with known positive health, zero tint and age at most ten seconds. Both queue publication and controller execution check the gate. Stale evidence requires another capture/review, never bypass.

The only permitted level input is one Left (37) hold for 500 ms, with an independent keyup timer and early-close release. Before, held, released and three-second idle captures each include fresh health/tint reads. Directional world-view change must persist after release; incidental sprite animation does not qualify. Unknown reads, depleted health or renewed tint make the comparison inconclusive. No forward movement, forced state or retry follows.

Pure tests passed ordinary/early-close mouse and key release, duplicate-turn rejection, dead/unknown/tinted/stale/unreviewed/tampered readiness rejection, wrong-key rejection, read-only pointer translation and invalid/nonfinite state handling, exact clock/no-count flags and missing-grant refusal. The 180/185/210-second limits, input cutoff 175 seconds, 2-GiB plus 128/64-MiB admission/stop margins and 8-MiB log cap remain. Refresh physical pins before the coordinator grants the runtime slot; no build or browser is required.

Settled fade clears with full health (2026-10-18)

The single registered run 20261018-outlaws-fade-discriminator-observation completed the packet below. Reviewed ordinary Main Game and GOOD selections used independently released 250-ms mouse holds; no keyboard input followed.

After GOOD release Frame Callback hits Placement / transition arms Signed countdown Fade last time Tint Health
3 s Loading 0 0 / 0 0 0 0 10
5 s Sepia town 14 1 / 0 356 112509 255 10
8 s Full-color town 31 1 / 0 -3 113237 0 10
12 s Full-color town 31 1 / 0 -3 113237 0 10

All four checked reads were known; health bits were 0x41200000, loss and gain counters both zero. The 5-to-8-second interval has 17 callback hits, 728 ms of fade-time advancement and countdown reduction 359, without rearm. The callback then remains at 31 hits through 12 seconds, consistent with its documented completion return. This run demonstrates fade progress and clear, not an absent callback or persistent rounding stall. The earlier sepia/death inference remains rejected. Forward movement remains separately verified; live turning remains unverified because this run injected no keys.

fade-samples.json preserves host times, guest ticks, batches, raw state and bounded classifications. Samples and PNGs are adjacent commands, not atomic snapshots; scheduled times are relative to GOOD release, not level readiness. Counters alter optimization, so this does not establish normal cadence or individual callback deltas. A future ordinary turning check should wait for a reviewed settled full-color frame and measured positive health, rather than assume a fixed three-second delay identifies gameplay readiness.

Exact module fd1613e22ee7e77300d3f246b91295fb7da513dc5d37b64e6ca022eb89bdfc92 and map a6869fe091c02854ac8f6cc71dd8e37b4f1156be616dd2dbaa0cc012c37bf9fa were unchanged. Physical source pin metadata is 11bda5ee322f3c6e9ad67e48381bb004e721941e; postflight HEAD advanced only through coordinator docs integration to 4f0b239ca3b5fa54db064c68c0fcba87a08eae7f. All 3,149 physical pins and 31 original records verified unchanged. Child 2407515 and controller 2407497 exited 0, both absent with empty owned group; terminal was 20:03:52.412Z after 126.164 seconds. Minimum free space was 2,317,287,424 bytes, log 2,181,939 bytes; no guard fired. The 180/185/210-second, 2-GiB-plus-margins and 8-MiB limits held. Artifacts, reviewed four frames and partial result.json are retained; no retry, build, browser or guest write.

Source-only settled fade packet

scratch/runs/20261018-outlaws-fade-discriminator-prep/PLAN.json is tested was prepared before the single run above. It retains the registered real-time route, module and guards. Four read-only samples with PNGs are scheduled at 3/5/8/12 seconds after GOOD release, with no keyboard input. Each includes checked health/counters/tint, countdown 0x532038, last fade time 0x532034, direction 0x531df0, and passive hit counts. The exact CLI flag is --count=0x4359a0,0x429a34,0x435a62: callback function entry plus the two actual arming block entries (explicit conditional-branch targets).

Interpretation requires measured callback advancement. No advancement with remaining fade is distinct from advancement with countdown progress. If the callback and last-time advance but countdown does not, with direction 1 and unchanged arming counts, the source rounding mechanism is supported; four aggregate snapshots still cannot prove each callback's delta or exclude all intervening writes. Any rearm interval is flagged as confounded, unsupported reads are unknown, and a nonpositive countdown with zero tint records clear. Counters affect interpreter optimization, so this is not a performance run.

Pure tests passed exact four settled sample/capture pairs, independent normal/early-close releases, read-only synthetic memory, invalid pointer and nonfinite handling, exact count/clock flags, missing-grant refusal and six classification cases (absent, progressing, cleared, rounding-supported, rearmed, unknown). Physical pins/originals verified; no runtime/build was started. Source packet/fixtures occupy only small JS/JSON files.

Tint clearing belongs to an original timed transition

Source-only follow-up maps both arming sites, not just the matching color. 0x429620 creates/places a player object; its 0x429a1e path arms tint only with a nonnull placement argument and unless direction 0x531df0 is already nonzero with countdown 0x532038 <= 0. 0x435a50, called at 0x4357be, arms the same transition without that placement argument. The matching color therefore does not uniquely identify which caller executed.

Both sites select color 0x4e8ca8 (or zero when flag 0x5d5a1c & 0x800 is set), set tint 255, initialize countdown 637, record time in 0x532034, set direction 0x531df0=1, and activate task 0x532940 with delay zero. Initialization at 0x4294d8 registers callback 0x4359a0. The callback obtains elapsed game milliseconds through [0x509e28]+0x2c; 0x428aaf initializes that table and 0x42d9eb binds it to 0x405fc0.

For each nonzero delta, 0x4359a0 computes integer trunc(delta * 510000 / 1000000), subtracts from the countdown for direction 1 (adds for direction 0), updates the timestamp, and passes the countdown clamped to 0..255 to the tint setter. Direction 1 completes at countdown <=0 and returns -2; task scheduler 0x49f67a recognizes that as disabled. Until completion, return zero schedules another callback at the current game time. This deliberately keeps full tint while countdown exceeds 255; the first town frame with tint 255 is compatible with an early transition. Other state changes also explicitly clear tint and countdown, for example 0x42aa6a/0x42aa80.

Pure arithmetic checks reproduce a concrete rounding susceptibility: 2,000 successive 1-ms deltas leave countdown 637 because each decrement truncates to zero while the timestamp still advances; 2-ms or 16-ms steps progress. This is original game arithmetic, not a demonstrated runtime defect. Retained samples lack callback counts, countdown and last-time values, so they cannot distinguish an ordinary initial plateau, stopped callbacks or rounding-related delayed clearing. If another discriminator is needed, use bounded read-only health/tint plus these three fade fields and a known function-entry counter at 0x4359a0; do not repeat the four loading-only samples or alter guest timing/state to force the result. Exact excerpts and arithmetic checks are in scratch/runs/20261018-outlaws-tint-fade-source-audit/. No new runtime/build was started. The measured full-health correction below supersedes prior visual death assumptions, while live-turn proof remains open.

Correction: sepia town sampled with full health and explicit game tint

scratch/runs/20261018-outlaws-health-tint-observation/ supplies the missing numeric discriminator. All four read-only samples returned inventory 0x083fdd10, health bits 0x41200000 (10.0), health-lost counter 0, health-gained counter 0 and no unknown reads. The first three frames show loading, with tint amount/color zero. At three seconds the frame shows sepia town with revolver and hearts, while health remains 10.0 and tint changes to amount 255, color 0x004e8ca8 (enable 1 throughout).

Earlier references in this historical log to “sepia/skull/death” were visual interpretations, not measured death. Sepia does not establish depleted health: this run directly demonstrates sepia with full health. Do not promote prior turns to verified live control retroactively: those runs did not sample health, and their postrelease behavior still needs separate evidence. Original forward-motion evidence remains valid.

Target Batch Last guest tick Health Lost/gained Tint amount/color
0.5 s 23607 53186 10 0/0 0 / 0
1 s 23648 53662 10 0/0 0 / 0
2 s 23822 54685 10 0/0 0 / 0
3 s 24065 55681 10 0/0 255 / 0x4e8ca8

Host sample times were 1792352956179/6679/7680/8677 ms. Sample/PNG commands are adjacent, not atomic; last ticks can be stale. Exact samples are in health-tint-samples.json. Source caller 0x429a4c pushes the same color to 0x4984e0, then 0x429a5e sets amount 255 through 0x498450; identifying that caller's mode/state predicate is the next source question, not an established emulator rendering defect. No health/tint state was written.

Pure tests covered checked translation, null/high/unmapped/noncontiguous pointers and nonfinite health becoming unknown, synthetic memory unchanged, four timed samples and early-close balanced release. Runtime used the same real-time registered original route and guards; only Main Game/GOOD mouse holds, no keyboard/forward/retry. Launch HEAD 67a22dd9424b7aa6b7b4eb2dde910b216955ccb9; module fd1613e2…, 3,149 pins and 31 originals unchanged. Child 2392292/controller 2392275 exited zero at 19:49:43.678Z after 80.743 seconds, both absent/group empty. Log 3,780,911 bytes; minimum free disk 2,296,963,072 bytes; no guard fired. Reviewed partial result.json was published last and runtime explicitly released.

Mapped health and palette predicates; retained pixels do not settle death

Bounded source/resource audit now identifies the original health field. Inventory constructor 0x43b8d0 initializes +0x20 to IEEE float 10.0 at 0x43b918; its returned pointer is stored at 0x5d67f8 by 0x42a973. Health gain 0x43f660 adds to that field, clamps at 10.0 and updates the Health Gained counter 0x5d66fc. Damage 0x440240 subtracts from it, clamps at zero, updates Health Lost counter 0x5d66f8 and writes the field at 0x4402e8. The counter names are grounded in original string references, not inferred only from arithmetic. Constructor health is not a measurement of health when the retained town frames were captured.

HUD code 0x465c41 reads this float, converts it to an integer and updates ten heart sprites in pointer array 0x53492c. At 0x465ceb it tests the raw field with signed test/jg: nonpositive selects alternate indicator pointer 0x534954 while withdrawing the normal heart container 0x5348e0; positive does the reverse. 0x468067 constructs ten INTHEART.NWX elements and 0x468118 constructs the alternate element using frame/sequence argument 2. The original LAB directory validates 504 bounded entries, including this resource, INTERFAC.NWX, INTERFLR.NWX and cidjames.itm. The latter names SND_DIE=jadie.wav and DIE_CHOR=21; no retained sound/animation state was sampled. The alternate resource image has not been decoded and matched to the observed skull, so this is a mapped health-dependent indicator, not yet pixel-level proof of the earlier death classification.

Palette tinting is independently implemented: 0x498450 accepts amount 0..255 into 0x51dfc4, 0x4984e0 sets color 0x51dfc8, gated by enable 0x51df9c. Both regenerate a 256-entry palette through 0x498bb0 and the display callback. That transform uses channel-weighted intensity and tint state; it does not read health. Therefore a sepia frame alone cannot prove death. This does not establish a renderer defect or rule out actual damage: the retained observations contain neither health nor tint-state samples.

The concrete next discriminator is a bounded read-only sample of current inventory pointer 0x5d67f8, its checked +0x20 raw bits/float, both health counters and tint enable/amount/color, paired with the existing screenshot. Positive health with sepia would reject the visual-death inference; zero health would support depletion but still require locating when/how it fell from the constructor value. No guest writes or change to original assets is needed. No runtime/build was used for this audit. Original SHA verification, LAB entry bounds and float decoding passed; exact disassembly/resource evidence is retained in scratch/runs/20261018-outlaws-hud-source-audit/. Earlier forward success remains valid; live-turn qualification is unchanged.

Early transition: loading to sepia town with continuous sampled ticks

scratch/runs/20261018-outlaws-early-transition-observation/ completed the distinct four-sample real-time registered run. Ordinary Main Game/GOOD mouse holds were the only guest inputs. Reviewed 0.5/1/2-second frames show level loading; the three-second frame shows sepia/skull town with a visible revolver. This does not capture an alive-to-dead transition, identify numeric health, or resolve whether the visual state reflects an initialization, damage or rendering problem. Prior death classifications remain visual observations rather than a mapped guest death-state variable.

Target after GOOD release Host sample ms Batch Last guest tick ms
500 ms 1792352353478 20961 49625
1000 ms 1792352353980 21000 50124
2000 ms 1792352354979 21170 51109
3000 ms 1792352355977 21409 52123

Startup baseline was 74 and elapsed offset, pause latch and depth were all zero in every sample. Last guest ticks advanced 2,498 ms over a 2,499-ms host sample interval: no jump is visible at these four points. Samples read the last consumed tick, which can be stale; adjacent sample/PNG commands are not atomic and scheduled host times are not exact guest render times. The next blocker is mapping initial health/death or rendering-state semantics, not another identical timing replay. No keyboard, forward, guest write, retry, build or browser action occurred. Core forward evidence is retained and live turning remains unverified.

Launch HEAD 19e0d9aab05a66f1e98113c1880a63a1fff9d136, module fd1613e2…, 3,149 physical pins and 31 original records remained unchanged. Child 2380101/controller 2380083 exited zero at 19:39:33.674Z after 69.888 seconds; both absent, owned group empty. Log 3,146,138 bytes; minimum free disk 2,348,400,640 bytes; no guard fired. Exact samples, reviewed frames and limitations are in clock-samples.json, review.json and the last-published partial result.json. Runtime was explicitly released to the coordinator.

Source-only death/timing boundary audit

The real-time run's host-issued timeline narrows the missing interval: launch 19:22:44.043Z; GOOD down 19:23:34.385Z (batch 20373); up 19:23:34.636Z (20469); released capture 20470 still difficulty; settled capture requested 19:23:37.636Z (21070) already dead. Thus the captured death predates subsequent human review, within the automatic three-second settling interval after release. These are command issue times, not exact guest rendering timestamps; queued delivery/capture work can lag. The menu had consumed about 50 seconds of host time before GOOD, but that is not established as 50 seconds of active gameplay.

Authentic oldemo.exe disassembly identifies the actual time abstraction: 0x437bcd calls timeGetTime and stores the startup baseline at 0x533414; 0x4396f0 returns timeGetTime - [0x533414]. 0x405fc0 returns that elapsed value minus [0x502cd4], or the latched [0x502cd8] - [0x502cd4] when [0x502cdc] is nonzero. 0x405ab0 increments/decrements this pause-depth value, latches time on the first pause, and adds paused duration to the offset on final resume. 0x405b00 rebases the offset to make elapsed time equal its argument. These semantics prevent treating menu wall time as gameplay elapsed time without observing the offset/depth. No health initializer, damage writer or death-state address was reliably identified in this bounded audit; no numeric starting-health claim is supported.

The executed CLI flags select wall ticks, and the imported timeGetTime handler reads host_get_ticks; original imports include GetTickCount and timeGetTime, with no named QPC import in oldemo. Retained generic snapshots do not sample guest tick values: their frozen.tickMs=200 describes the unused batch-clock configuration even under real-ticks. There is no retained clock/health series that can distinguish initialization error, game-time jump, rapid normal damage, or another simulation defect. Earlier verified forward motion remains valid; full turning remains unverified.

A distinct next discriminator, requiring a coordinator runtime slot, is a short passive transition capture after ordinary GOOD: at most four early frames (0.5/1/2/3 seconds after release), with matching read-only samples of exported get_tick_count() (last guest timer read), four bytes at 0x533414, and twelve bytes at 0x502cd4. No timer getter should be invoked to manufacture a guest read. This can reveal an alive-to-dead transition and test elapsed-clock continuity; it cannot identify damage without subsequently mapping health/death semantics. No movement, API polling log, forced pause, state write or identical three-second-only replay is proposed. Original clock import/xref evidence is retained in scratch/runs/20261018-outlaws-death-clock-audit/. No runtime/build was used.

The source-only packet is now prepared at scratch/runs/20261018-outlaws-early-transition-prep/PLAN.json. It retains the real-time registered route and existing guards. After reviewed GOOD's independent 250-ms release, exactly four timers issue a read-only CLI eval sample immediately followed by PNG at 0.5/1/2/3 seconds. Each expression reads the last tick export and the four documented original dwords; it never calls a guest clock getter or writes memory. Keyboard actions are rejected. Sample and frame commands are adjacent, not an atomic guest-state snapshot, and the last consumed guest tick can be stale. Pure tests passed exact four-sample timing, paired captures, unchanged synthetic memory, one last-tick read per sample, independent release, early-close cancellation, keyboard rejection, clock flags, syntax, missing-grant refusal and source/original pin checks. No guest/runtime/build was started. The coordinator controls the runtime slot; the user has already authorized these ordinary diagnostics.

Real-time registered run: dead before planned turn

scratch/runs/20261018-outlaws-realtime-turn-observation/ ran the prepared registered route with --real-ticks --time-scale=1, retained calendar/UTC, and unchanged canonical fd1613e2… module. Main Game and GOOD responded to ordinary 250-ms mouse holds. good-released.png still shows difficulty; the first good-settled.png town frame already shows sepia/skull death. The alive-frame prerequisite therefore failed: no Left or other keyboard input, and no forward input, was sent. The controller quit normally.

Real-time clock selection alone did not avoid this boundary. This does not prove the death's cause, invalidate the earlier observed forward movement, or establish live turning. No retry, respawn, forced state or source fix was attempted. review.json and the last-published partial result.json retain the reviewed frames, actual flags and limits.

Launch HEAD was 653ee12cb0ddbf6ae9eba342cdfa5958e2362692; 3,149 physical pins, 31 original records and the module remained unchanged. Child 2362717 and controller 2362689 exited zero at 19:23:52.662Z after 68.619 seconds; both PIDs were absent and the owned process group empty. Log size was 2,999,249 bytes, minimum free disk 2,395,619,328 bytes. Existing time/disk/log guards did not fire. Runtime was released for independent root postflight.

Source-only clock audit and real-time turn preparation

The registered run used the CLI default 200 guest milliseconds per batch: test/run.js selects that default unless an app has cliTickMsPerBatch, and lib/apps.js gives outlaws_demo no override. Its Left down/up batches 29224/29396 span 172 batches: 34.4 seconds of batch-clock advancement during a 500-ms host hold, before any additional charged sleep time. This is a source-backed timing discrepancy, not proof that accelerated time caused the observed death or that all gameplay advances proportionally to this clock.

Existing --real-ticks --time-scale=1 selects wall elapsed milliseconds in lib/guest-clock.js, with no per-call increment. test/run.js assigns that source to main get_ticks, cooperative-thread ctx.guestNowMs, worker clock publication and renderer input timestamps. It does not throttle execution or guarantee frame pacing. Explicit --wall-clock-ms=928238400000 --tz=UTC retains the prior 1999-06-01T12:00:00Z calendar origin and UTC; real-ticks otherwise changes those defaults too. No guest state is forced and no production code changes are proposed. The generic CLI guidance about short timer-driven 16-bit captures does not establish Outlaws behavior under a wall-time run.

Fresh source-only packet scratch/runs/20261018-outlaws-realtime-turn-prep/ retains the registered route, original files and exact fd1613e2… module. Its controller adds only the four clock flags above. PLAN.json requires reviewed Main Game/GOOD choices, a fresh alive town frame, then Left 500 ms with independent keyup and before/held/released/three-second-settled captures. No forward input is planned. A dead immediate-before or held frame ends the discriminator as contaminated; there is no respawn or retry. Same-life orientation and postrelease idle must be reviewed before claiming turning.

Pure test/test-guest-clock-source.js and test/test-batch-clock.js passed. Preparation syntax, exact clock flags, missing-grant refusal, unchanged 3,149 physical pins/31 original records and normal/early-close mouse releases passed. Existing 180-second guest wall limit, 185-second soft/210-second hard stop, 8-MiB log cap and 2-GiB disk margins remain enforced. No runtime or build was started; a fresh sole-runtime grant and pin verification are required.

Registered route validated; live-turn evidence still contaminated

scratch/runs/20261018-outlaws-registered-turn-observation/ is the first observed --app=outlaws_demo route in this lane. Its registry executable plus 29 companion mappings match the prior 30 authenticated guest names and bytes, cwd C:\OUTDEMO, empty arguments. Ordinary held Main Game/GOOD choices reach the original town. The registered route therefore passes startup/menu/level rendering, but this is not a successful live-turn observation.

No forward input was sent. good-settled.png was reviewed as full-color alive with weapon/health, but live-left-before.png, captured immediately before Left injection, already shows sepia/skull/death. The balanced 500-ms Left hold was acknowledged at batches 29224/29396 and dequeued with correct scan payloads. Later rotation and live-turn-idle.png are death-contaminated, so live turn and release-to-idle control remain unverified. No respawn, retry or forced state followed. The next source-only question is the CLI's default 200-ms guest tick per batch versus real-time pacing during screenshot review; this is a timing hypothesis, not a new runtime authorization or an emulator fix.

Canonical module remains fd1613e22ee7e77300d3f246b91295fb7da513dc5d37b64e6ca022eb89bdfc92. Launch HEAD was 7eb6eff3bc517e2d07a3e77220efbc0c52785669; all 3,149 physical source/fixture pins and all 31 original records remained unchanged. Child 2351815/controller 2351796 exited zero at 19:15:09.646Z after 107.642 seconds; both PIDs were absent, owned group empty. Log size was 4,764,200 bytes; postflight free disk was 2,427,518,976 bytes. Existing 180/185/210-second and disk/log guards remained unchanged and did not fire. review.json and result.json retain the actual registered route and partial outcome.

Forward movement after Peek/Get repair, 2026-10-18

The normal rebuilt module after the reviewed Peek/Get selection repair now shows ordinary player forward movement. The unchanged original direct route reached Main Game, GOOD and the town; an Up hold of exactly 500 ms moved the view from the street entrance, through the street in the held frame, toward the HOTEL in released/settled frames. Fixed world landmarks changed markedly, unlike the retained pre-fix 500-ms no-motion observation. This supports the repair affecting original input, together with its separate API conformance tests; this run alone does not prove every internal causal step.

Evidence is scratch/runs/20261018-outlaws-peek-fix-observation/: good-settled.png, level-up-before.png, level-up-held.png, level-up-released.png, level-up-settled.png and the complete receipts. Live turning remains unverified. The reviewed Up-settled frame was alive, but the immediate level-left-before.png was already sepia with a skull/death indicator. Left was then held/released for 501 ms; subsequent camera motion and level-idle-after-release.png cannot isolate a live-player turn or stopping after release from death behavior. These captures are preserved, with no retry or respawn. Combat, audio, FPS and sustained/full-game qualification remain unestablished. result.json records partial forward-control success and the turn limitation explicitly.

Tested canonical SHA-256: fd1613e22ee7e77300d3f246b91295fb7da513dc5d37b64e6ca022eb89bdfc92. Region mirror is unchanged from below. Launch HEAD: 3c6b9ff695e7cdf060d6357ec95925c68417c2a4; all 3,118 source pins and all 31 original records remained unchanged. No passive counters or API polling logs were enabled. Child 2340686/controller 2340663 exited zero after ordinary host quit at 19:05:21.873Z (124.654 seconds); both PIDs were absent and owned group empty. Coordinator independent postflight passed. Log size was 5,450,526 bytes, postflight free disk 2,458,820,608 bytes; no guard fired. Existing 180/185/210 s, 8-MiB log and 2-GiB margin limits remained in force. No build occurred inside this observation, and no browser, guest patch, forced state or licence answer was used.

A source-only follow-up is prepared at scratch/runs/20261018-outlaws-registered-turn-prep/PLAN.json. Its pure route proof verifies --app=outlaws_demo resolves the same executable, 29 companion mappings, C:\OUTDEMO cwd, empty arguments and original hashes as the prior 30 explicit mounts. Fixture verification passes, and 31 added fixture/manifest pins bring admission to 3,149 physical pins. This is preparation, not registered runtime evidence. After reviewed Main Game/GOOD, review a fresh alive level frame and test Left/release/idle before moving forward into the hostile street. Inspect the immediate before/held frames for death contamination; stop once the boundary is clear. No follow-up runtime is authorized yet.

Original town level reached; controls unverified, 2026-10-18

The ordinary direct route now advances through Main Game and GOOD difficulty to a rendered first-person town with revolver, ammunition/health HUD and chickens. Each visible menu choice used a separately reviewed 250-ms held left mouse press with an independent release timer. Captures three seconds after release establish both transitions. This is partial level-rendering evidence, not player-control or sustained-gameplay qualification. A later Left-arrow hold of 250 ms was acknowledged at host batches 26311/26361, but the before/settled frames show no clear viewpoint change.

Evidence: scratch/runs/20261018-outlaws-held-route-observation/, particularly main-game-held-settled.png (difficulty), good-difficulty-settled.png (town), level-left-turn-settled.png, issued.ndjson, review.json and result.json. The dashboard record uses candidate outlaws-demo, app outlaws_demo, outcome unknown and an explicit partial/not-qualified summary. The actual route was direct oldemo.exe, not a registered-app launch: cwd C:\OUTDEMO, empty args, 30 unique original mounts, unchanged archive and all 31 original records.

Canonical module remains a4a4bc6aef0f50a191d83acdd0857ff390537701adc381d81436845f20b969e3, region mirror a6869fe091c02854ac8f6cc71dd8e37b4f1156be616dd2dbaa0cc012c37bf9fa. Launch HEAD was 6300b350b3006be25482e48abfde911db44718c3; physical source identity is the retained 3,118-file manifest, verified before/after and by the coordinator. The cooperative CLI kept 180/185/210-second guest/soft/hard limits, 8-MiB logs and the existing 2-GiB disk margins. Only input routing was traced; no API polling logs or API-return claims. Host quit ended the run after 95.845 seconds at 18:13:07.644Z. Child 2281006 and controller 2280993 exited zero, both absent with an empty owned process group. Log size was 3,529,709 bytes; postflight free disk was 2,590,367,744 bytes. No guard fired, licence was answered, guest byte was changed, build was made or retry occurred. Audio, combat, FPS and browser/Worker behavior remain unknown.

Keyboard boundary audit after the town capture

The shorter positive-control run, scratch/runs/20261018-outlaws-menu-pump-observation/, resolves the earlier counter uncertainty. On a reviewed menu, one ordinary Up hold lasted exactly 500 ms. Before/settled counts advanced 0x438980 from 458763 to 459237 (+474) and 0x4389d8 from 460052 to 460755 (+703); all four key-path counts remained zero. Correct keydown/up scan payloads were dequeued for focus 0x10001; main queue snapshots before/held/released/settled were all empty. The menu did not change. Neither the polling thread nor final owner delivery is established by those observations. Child 2309360/controller 2309341 exited zero at 18:38:35.598Z after 60.181 seconds; a quit request queued after the 55-second input cutoff was not issued. The guest time limit ended the run. All 3,118 pins/originals remained unchanged, both PIDs absent, group empty, and coordinator postflight passed. Log size was 769,431 bytes, postflight free disk 2,304,499,712 bytes. Launch HEAD was 348febabcb2baef4632f1e30eb2aa9f18b631833, with unchanged module/region hashes above. result.json preserves this partial, unqualified control observation.

Source comparison now identifies a smaller candidate than another original run: handle_PeekMessageA_fetch scans pending NC_FLAGS (WM_NCCALCSIZE/WM_NCPAINT) before hardware input, whereas handle_GetMessageA_fetch reads hardware input before NC_FLAGS. With a pending NC message and an already queued key, an unfiltered PM_NOREMOVE peek can expose 0x85, followed by GetMessage removing 0x100 instead. The original inspects keys before GetMessage, so this ordering asymmetry can bypass its key path even with correct host dequeue and no queued residue. The source ordering is verified; its causal role in Outlaws is still unproven. Foreign-thread theft is not required by this hypothesis. Current foreign-owner routing already forwards input-origin records to the owning shared USER queue and retains input if that queue is full.

Next use a small isolated API conformance case: one plain HWND, one thread, no redraw or events between calls. Establish input-only and NC-only controls, then cross NC bits 1/4 with queued KEYDOWN/KEYUP. Compare exact HWND/message/ wParam/lParam from PeekMessage(PM_NOREMOVE) and immediate GetMessage, host dequeue count and pending flags; also compare Peek(NOREMOVE)/Peek(REMOVE). Require one preserved delivery and consistent selection while state is unchanged. Only if those pass add a foreign polling thread and filtered peeks. The canonical exports nc_post_paint/nc_post_calcsize plus ordinary API thunks can support a test without rebuilding; bootRenderHarness would compile the full tree and needs a separate build grant. Relevant ownership is src/09a5-handlers-window.wat, queue helpers in src/10-helpers.wat, and tests test-nc-flags-message-wake.js, test-peek-message-filter.js, test-message-extra-info.js. Source-only recipe and comparison are retained in scratch/runs/20261018-outlaws-peek-get-source-audit/audit.json. No runtime or production fix was performed during this audit.

The earlier longer counter run is retained at scratch/runs/20261018-outlaws-keyboard-count-observation/. It repeated the ordinary menu/GOOD/town route, then held Up and Left separately for exactly 500 ms each, with independent releases and three-second settled captures. No clear world-landmark movement or turn appeared. Four counters at 0x438a60, 0x438a00, 0x43aaa0, 0x493ab0 remained zero before, during, and after both inputs. They were armed, but no known-executing control site was selected, so this does not establish a lost event or a production defect. Host key acknowledgements were batches 12885/12936 and 15268/15325. Child 2293523/controller 2293504 exited zero at 18:25:40.617Z after 144.053 s; both PIDs were absent, group empty, all 3,118 pins/originals unchanged, and the coordinator independently verified cleanup. Logs were 2,223,518 bytes; postflight free disk was 2,543,853,568 bytes. No guard fired. Module and region hashes remain those above; launch HEAD was 7931dc7486c94a68949e019956ea87a4bd14a60d. The dashboard result remains partial and not qualified; this failed player-control observation is preserved.

Closer review found useful host dequeue evidence already in that log: Up down/up carries lParam 0x01480001/0xc1480001 at lines 11899/11955; Left carries 0x014b0001/0xc14b0001 at lines 14227/14289. Each following check_input_hwnd reports focus 0x10001. The ordinary renderer FIFO was therefore drained with correct scan-bearing payloads. Main and the cooperative helper share this callback, so these records do not identify the polling thread or prove subsequent owner-queue delivery to the game's keyboard path.

Counter audit: src/13-exports.wat compares the configured address with guest EIP at run-loop block boundaries; it does not take an RVA or count every instruction. The executable's original base is 0x400000, and retained main EIP samples agree with these absolute addresses. The key branches are jump targets and the translation/consumer sites are call targets. Totals live in shared memory; cooperative instance creation inherits each set_count and re-arming the same address does not reset totals. The pure inherited-global test passes all 74 setters. Thus an obvious base error or main-only counter explanation is unsupported. Counters enable the debug tier and are not performance evidence. The log records one helper starting at 0x01118890.

The next discriminator can be shorter and menu-first: retain the same four sites and add 0x438980 (pump entry) and 0x4389d8 (message-selection block), both positively sampled in the retained main-thread startup/menu log. After reviewing a fresh menu, take counts, hold ordinary Up 500 ms/release, and capture counts plus existing dump-msgq before/held/settled. The latter reads the main instance's queue without consuming it; an empty queue does not rule out transient consumption or another thread's queue. Stop on that boundary within 60 seconds guest/85 seconds hard rather than repeating level loading. If the positive sites themselves remain zero, fix the measurement before inferring game input behavior. If they advance while key sites do not, retained scan-bearing dequeue and queue records separate ownership/queue availability from original scan translation. A later level-specific run could add 0x4d2ab3, positively sampled during both failed holds, as a rendering control. No runtime is authorized for this proposal. No API polling log, hidden input, forced state, production patch or build is needed. The existing pure keyboard message-ordering test also passes; it cannot establish the live owner path.

The original executable processes keyboard messages before DispatchMessage. At original VA 0x4389bc it calls PeekMessageA with PM_NOREMOVE. Its switch maps WM_KEYDOWN to 0x438a60 and WM_KEYUP/WM_SYSKEYUP to 0x438a00. The down path requires LOWORD(lParam) == 1, extracts the scan code from the upper word, and calls 0x43aaa0; that routine maps the scan-code byte through the table at original VA 0x533418 (with special virtual-key handling). Nonzero results feed 0x493ab0 at 0x438a98 for down and 0x438a35 for up; release sets the internal 0x80 bit. Only afterward does GetMessage remove the message. A matching main-window WM_KEYDOWN can deliberately skip TranslateMessage/DispatchMessage. Therefore absence from dispatch tracing does not establish missing delivery. These are static original addresses, not new guest-state writes or observed execution of those paths.

The four inspected original PE import tables (oldemo.exe, Olkbd.dll, Olmouse.dll, olhook.dll) contain no GetKeyboardState/GetKeyState or DirectInput entry imports. GetAsyncKeyState occurs in the executable's mouse polling path and Olmouse. Olkbd identifies itself as the keyboard configuration DLL; its message/subclass imports alone do not establish gameplay consumption. Dynamic resolution elsewhere is not excluded by this import inspection. The retained live snapshots report focus/main HWND 0x10001, visible Outlaws 640x480; this does not prove every queued key reached the game.

CLI keydown/keyup use renderer.handleKeyDown/Up, updating physical state and queuing scan-bearing ordinary messages. Numeric arrow fallbacks use Set-1 scan codes; the pure keyboard-message regression passes. PeekMessage's source path preserves pending_input_lparam in the returned MSG. No production bug has yet been demonstrated. Disassembly and import evidence are retained at scratch/runs/20261018-outlaws-keyboard-source-audit/.

A next separately granted observation should retain route-only logging and the proven menu holds, then capture a level idle baseline, ordinary Up hold 500 ms/release, settled frame, and separately reviewed Left/Right holds with release and idle frames. Compare stable world landmarks, not animated chickens or weapon pixels, and stop after a clear boundary. Existing passive --count=0x438a60,0x438a00,0x43aaa0,0x493ab0 plus explicit hit-counts requests before/after each action can distinguish arrival in the original key branch from later processing without high-rate API logs. Counters are diagnostic observations, not movement proof; no raw-message injection, DirectInput-state injection, focus override or guest-memory write is proposed. Keep the same time/disk/log guards and independent key release. No runtime was started for this audit; another lane owns execution until the coordinator grants it.

Original main-menu validation, 2026-10-18

The authentic demo now reaches its visible main menu through ordinary C:\OUTDEMO\oldemo.exe, cwd C:\OUTDEMO, empty arguments and all 30 unique original VFS names. No input, installer answer, licence response, replacement DLL or guest patch was used. This establishes startup and menu rendering only; gameplay, navigation, audio and browser/Worker behavior remain untested.

The reviewed captures and complete receipts are retained under /home/user/wine-assembly/scratch/runs/20261018-outlaws-original-fixed-lifecycle-observation/. sample-0.png is black startup, sample-1.png shows the Outlaws title, sample-2.png shows the menu by approximately 30 seconds, and final.png shows the menu at 60 seconds. Main Game, Multiplayer, Historical Missions, Load, Options and Exit are visible. review.json was published after artifacts; there is no dashboard candidate association because Outlaws is not registered.

Tested canonical module SHA-256: a4a4bc6aef0f50a191d83acdd0857ff390537701adc381d81436845f20b969e3. Region mirror: a6869fe091c02854ac8f6cc71dd8e37b4f1156be616dd2dbaa0cc012c37bf9fa. Runtime source is integrated commit 83bbb77fdf7b9823359bdf8c927a02f2e878b34b; later documentation-only HEADs are recorded in the identity receipt. All 3,118 physical pins were verified before and after execution. Original archive SHA-256 remains 501f37aa475b6c27c87ce04e30b5207f91b81603cb376aaa9ffde1647a40e7b3; all 31 original records are unchanged. Exact arguments, pin list and controller are in launch.json, current-pins.json and controller.js in that run.

The existing CLI used cooperative scheduling, 200,000-block batches, a 60-second guest limit, a 65-second host quit and an 85-second process-group kill guard. Logs were capped at 8 MiB. Admission required 2 GiB + 128 MiB; 250-ms disk checks stopped at 2 GiB + 64 MiB. No guard fired. Child PID 2232312 and controller PID 2232304 exited zero; the child terminal receipt is 2026-10-18T17:27:44.499Z. CLI statistics report 23,298 batches in 59.999 seconds. The minimum observed free disk, including postflight, was 3,218,223,104 bytes. Owned-process inventory was empty; the coordinator independently verified source/original identity and process cleanup before releasing the lane.

Earlier failures remain in separate 20261018-outlaws-original-*-observation directories: QT reached unimplemented KERNEL.184 GlobalDOSAlloc; the next module exposed built-in dependency classification; the subsequent run stopped at the deliberate KERNEL.95 nested-load boundary in WDIR62 LibEntry. The final counted fixed-module lifecycle implementation passed these observed boundaries. This does not establish general image-backed nested loading or reverse thunks.

The next ordinary action is Main Game, followed only by choices visible in a fresh capture. The original README documents GOOD as novice difficulty, Up Arrow as forward, Left/Right Arrow as turning, and Escape as the in-game options menu. A level screenshot and balanced movement/turn input with before/after captures are still required before claiming control or gameplay.

The separately granted Main Game attempt is preserved at /home/user/wine-assembly/scratch/runs/20261018-outlaws-main-game-observation/. The reviewed live menu remained visible after a click at (200,205), followed by separately reviewed Enter and Down Arrow holds of 150 ms each. The hand cursor moved, but no difficulty screen or level appeared. issued.ndjson records balanced host keydown/keyup pairs; guest consumption is not proven. The startup trace window ended at batch 500, before these inputs, so later input/control diagnostics are absent. Review ordinary input delivery and its diagnostic coverage before inferring an application defect. final.png and menu-input-boundary.png show the unchanged menu. Host quit ended the run after 139.650 seconds; child 2245472 and controller 2245447 exited zero, with empty owned-process inventory and unchanged 3,118 pins/originals. Minimum observed free disk including postflight was 2,866,331,648 bytes. No guard, licence response, build or retry occurred. Gameplay remains unestablished.

Source-only input audit

Authentic oldemo.exe imports GetCursorPos, GetAsyncKeyState, foreground/focus queries and the normal USER message pump. Its mouse polling routine at original VA 0x00439410 first compares the foreground HWND with its own window, then reads cursor position. At 0x0043945f and 0x00439479–0x004394a1 it polls buttons 4/1/2 and tests AH & 0x80: the currently-down bit, not the low pressed-since-last-query bit. These are static callsites, not observations of the failed interactive run. Olkbd.dll imports message pumping and window subclass APIs; Olmouse.dll additionally imports asynchronous button and cursor queries. olhook.dll installs hook ID 10, so its name alone does not establish a missing keyboard-hook dependency. Import identities and relevant disassembly are retained in scratch/runs/20261018-outlaws-input-source-audit/.

The existing CLI click calls renderer mouse-down and mouse-up in one batch; it explicitly disables the renderer's release-hold floor because scheduled input owns timing. Consequently cursor motion may persist while a frame-based GetAsyncKeyState high-bit poll misses the entire press. This is a concrete hypothesis for the click result, not a demonstrated emulator defect. It does not explain the separate 150-ms keyboard holds. Numeric Enter/arrow inputs do carry scan-code lParams; the pure keyboard-message regression passed, as did all 35 renderer button-hold checks. Neither test proves delivery to Outlaws.

Next bounded observation should omit --trace-from/--trace-to: the CLI wraps console.log with that gate, which hid later control acknowledgements as well as traces. Existing --trace-input reports mouse routing/drop branches; --trace-input-dispatch reports keyboard/mouse messages entering DispatchMessage with HWND, message, wParam and lParam. Add --trace-api=GetAsyncKeyState,GetForegroundWindow,GetFocus --trace-api-paused --trace-api-dedup, then use the existing trace-api control action for only a short window around each reviewed input (at most 750 ms, retaining the 8-MiB log cap). Startup remains untraced; no host-import-wide logging is needed.

The distinguishing ordinary action is mouse-down at the reviewed Main Game location, hold 250 ms, then mouse-up, each through the CLI's existing handlers; record their acknowledgements and before/held/released frames. A high-bit GetAsyncKeyState return during the hold plus matching foreground HWND separates polled delivery from game logic. For Enter/Down, require actual keydown/keyup DispatchMessage records with scan-bearing lParams before attributing rejection to the application. A consumed or misdirected event instead identifies the input ownership/routing path to investigate. Do not inject DirectInput state, raw guest messages, focus overrides, menu commands or guest-memory writes. No runtime, build or production-source fix was made during this audit.

Preparation caught a constraint on that proposed trace combination: --trace-input-dispatch is an API-log consumer and prevents the CLI from starting with API logging paused, despite --trace-api-paused. The first held-mouse discriminator therefore omits the dispatch flag and retains --trace-input plus initially paused selected GetAsyncKeyState/foreground/focus traces. Independent timers release the ordinary mouse button at 250 ms and turn API logging off at 650 ms; pure tests verify both and emergency release. This tests the mouse polling hypothesis without broad startup logging; it does not provide decoded keyboard dispatch evidence. A separate keyboard-focused observation remains necessary if keyboard delivery is still in question.

The granted held-mouse run at scratch/runs/20261018-outlaws-held-mouse-observation/ reached the menu and acknowledged ordinary mouse-down at (200,205), batch 16301. Routing reported candidate/child HWND 0x10001, dispatched=1. Mouse-up was issued exactly 250 ms later. The held capture still shows the menu; the released capture shows black with the hand cursor, so the menu cleared, but no settled next screen was observed. Selected API tracing produced 64,505 GetAsyncKeyState entries and 21,504 GetForegroundWindow entries without return values and hit the 8-MiB log guard after approximately 447 ms. Emergency trace-off/quit were issued; child 2266213 received SIGKILL and controller 2266205 exited 1 at 2026-10-18T17:59:10.311Z. Mouse-up/trace-off acknowledgements were not retained. Owned processes were absent and 3,118 pins/originals were unchanged; minimum observed free disk including postflight was 2,643,148,800 bytes. Preserve this incomplete diagnostic: it does not prove the high-bit return, completed menu activation, difficulty selection or gameplay. No retry or production fix was made. Reduce diagnostic volume before any separately granted observation.

Owner /root/outlaws_original_startup, task NEW-GAME-OUTLAWS-DEMO-20261015. Source preparation only; runtime awaits an explicit coordinator grant after Army Men acquisition releases the sole box.

outlaws-demo-launch-manifest.json maps all 31 verified original records to 30 Windows names. The identical wdirnop.com duplicate is recorded separately and preserved in the original package; the VFS mounts WDIRNOP.COM once. This nonpublic manifest is not a public app registration. Original README requires extraction followed by C:\OUTDEMO\oldemo.exe, empty arguments, cwd C:\OUTDEMO. No registry import, replacement DLL, config patch, installer answer, or guest input is included.

The controller accepts ROOT PAYLOAD NEW_OUTPUT. The proposed payload is /home/user/outlaws-original-acquisition-20261015/payload-js-verified and proposed donor ROOT is /home/user/jedi-knight-checkout on bx_9ef2wdsw. Neither donor suitability nor current runtime state has been checked in this lane. The controller must first physically verify every compiler/source pin and canonical module SHA-256 937466db3545b9d016fb90dfd8a414eb82653b5ebbf7cc2db7c53d8cc87d49eb. The pins identify the exact main reference commit; this does not claim the donor's historical host JavaScript equals current main. Every tracked physical host file is hashed separately, and the index listing and HEAD are retained. A mismatch blocks execution rather than causing a rebuild or donor mutation.

The run uses the existing headless CLI, full-frame PNGs every ten seconds, snapshots, complete stdout/stderr, explicit 120-second guest guard and 150-second final process-group kill watchdog. Snapshot/PNG/host quit commands are observations and shutdown, not guest menu answers. Licence/crash text triggers immediate capture and host quit; screenshots still require human review because image-only licence text may not appear in logs. No initial input means such a prompt cannot be answered accidentally. The fresh output directory contains an exact copied VFS, controller, source/module/fixture identity, command, terminal result and postflight hashes/process inventory. The coordinator must independently inspect active processes before declaring the exclusive slot released. Preserve failures and inspect full-frame images before any further ordinary action.

--no-threads selects cooperative guest-thread scheduling, not the real Worker thread backend; this is explicitly a headless cooperative startup probe. It cannot establish browser or real-thread runtime compatibility. Process inventory records command names only, and postflight rejects survivors in the owned process group without collecting unrelated command arguments.

This source does not establish startup, menus or gameplay. After the first observed boundary, select the next ordinary action from actual output. A licence choice requires the user's decision; a crash requires its actual API or fault diagnosis. Later gameplay proof needs idle, held/released Up and Left/Right, visible attributable motion and full-frame screenshots. WASD is not the documented default. Audio/FPS/combat remain separate unknowns.

Before execution: obtain explicit slot grant, inspect previous owner terminal and clean postflight, take independent process inventory, then verify matching source/module and all originals. No local build/VM/browser is permitted for this lane. Recover compact receipts and screenshots into shared scratch/runs/20261015-outlaws-original-startup; retain the remote original fixtures and full copied VFS separately. Follow ops/README.md for dashboard metadata, and do not attach evidence to an unrelated candidate if Outlaws has not yet been added to the candidate corpus.

Observed original startup failure, 2026-10-15

Coordinator granted the sole runtime slot after Army Men's explicit release. Independent preflight at 14:17:38.933Z read Army Men's 14:15:59.849Z clean postflight, found no active runtime, and physically matched all 142 compile pins and canonical module 937466db…. The frozen controller was commit 61cf2cd835a1c1ee4977aebe73d074e51549f1de, SHA-256 7718d1f8c030bdc504b543028eed63f24a3551d87cdfef830a4af179af6371d1.

Boat controller PID 153370 started 14:18:15.309Z; child PID/process group 153383 loaded the original PE entry 0x004f10d0 and reported working directory c:\outdemo. It immediately hit the real fail-fast boundary:

=== UNIMPLEMENTED API: OemKeyScan ===
EIP: 0x0043a8bb  ESP: 0x074ff9f4  EBP: 0x00000100
[0x074ff9f4] = 0x0043a8f1  <- return address
[0x074ff9f8] = 0x00000000  <- argument
*** CRASH at batch 0: unreachable

The original caller loads ESI from IAT 0x005da450, starts a 256-entry loop (EBP=0x100), pushes its index at 0x0043a8ee, calls ESI at 0x0043a8ef, and would consume EAX at 0x0043a8f1. This is the first observed failure, not proof that later startup APIs work. git grep found no existing OemKeyScan implementation or API-table entry in the pinned source. The next step is a real keyboard-translation API implementation and focused tests, followed by a fresh matching module and separately granted original startup run. Do not substitute a silent-success handler or change guest bytes.

Child exit 1 was recorded at 14:18:15.992Z, controller API exit 1 at 14:18:16.181Z. Crash-text monitoring issued only host capture/quit commands; there were no guest inputs. The failure preceded PNG capture, so no screenshot exists. No menu, licence prompt, gameplay, audio or controls were reached. No retry followed this unexpected failure.

The donor's Git HEAD was 03641536b256ec78527fee514ea2dfa4c31639e4; this is metadata, not its tested tree identity. Its historical indexed checkout and all 6,527 physical tracked files are recorded in run/identity.json and run/source-before.json. Compiler closure matches reference 32a28da07a355a2797efb8643d2fd8d7fa87ee1d; host JavaScript is explicitly the physically hashed historical donor, not claimed equal to current main.

Independent postflight at 14:19:27.170Z rehashed all 6,527 host source files, all 31 original payload records, immutable package and module unchanged. Command-name-only process inventory found no active runtime or owned controller/child process group. The slot was released to the coordinator.

Evidence is recovered at shared scratch/runs/20261015-outlaws-original-startup/: run/output.log, run/{identity,source-before,launch,child,terminal,stop-reason,postflight}.json, run/controller.js, independent-postflight.json, frozen manifests and API receipts. Archive evidence.tar.gz is 578,651 bytes, SHA-256 241f8911ad2071909fcdeb368d9ff91bb98f76e950744d6abf6314ccc01285dc, verified after download. The identical remote archive and full copied VFS remain at /home/user/outlaws-original-startup-20261015; original acquisition payloads remain untouched in their separate directory. No dashboard result.json was published because this lane has no corpus registration; these notes preserve the startup failure without misattributing evidence.

Source checks passed: syntax, whitespace, complete manifest accounting and missing/tampered original rejection. The runtime failed as documented.