Autopilot · write-up
Level 4 full validation, September 27, 2026
Follow-up identification and fixes are documented in LEVEL4_SHIELD_AND_HANDOVER_FIX.MD.
The uninterrupted run did not complete Level 4: it stalled at the first boss after destroying all five satellite heads. A separate continuation from the previously successful first-boss shop checkpoint defeated the final boss and reached Level 5. No life was lost in either recording. Gameplay code was not changed during this validation.
Both runs used visible Hatari resident C control, both AVI streams, Level 4
tracing, and checkpoints every 150 frames. The official hatari_dev.ps1 build
wrapper refreshed Hatari and the native inspection DLL before the first run.
Python observed gameplay and audited recordings; it did not control the ship.
Recordings and coverage
| Run | Event recording | Coverage and result |
|---|---|---|
| A | E:/xenon_runs/level4-full-20260927-r67.validation/level4-full-20260927-r67.x2events |
62580–70805; starts before Level 4 from the Level 3 shop; stopped gracefully after confirming the first-boss stall. |
| B | E:/xenon_runs/level4-second-half-20260927-r68.validation/level4-second-half-20260927-r68.x2events |
71126–77037; separate continuation from r66's first-boss shop checkpoint; Level 5 starts at 77036. |
Run A restores xenon_tools/run_logs/native-level3-visible-20260914/end.sav.
Run B restores
E:/xenon_runs/level4-first-swing-20260927-r66.validation/level4-first-swing-20260927-r66.sav.
This is not a continuation of A's stalled state and does not establish a
successful uninterrupted full-level playthrough.
Each run directory contains its manifest, working-tree patch, incident log,
pickup audit, shop report, checkpoints and both AVI files. Traces are
E:/xenon_runs/level4-full-20260927-r67-trace.log and
E:/xenon_runs/level4-second-half-20260927-r68-trace.log.
Gameplay incidents
| Recording | Frame(s) | Problem |
|---|---|---|
level4-full-20260927-r67.x2events |
63865–63928; closest approach 63873 | Temporary shield #560602, code $005C, appeared at screen (115,64), remained over 81px from the ship at its closest approach, and expired below the screen; its type was verified with ReVa in the follow-up investigation. |
level4-full-20260927-r67.x2events |
63933 | Directional projectile #560806 ($4180) hit the ship near the left bottom edge, reducing shields 39→35. |
level4-full-20260927-r67.x2events |
64409 | Directional projectile #562126 ($4180) hit the ship near the left bottom edge, reducing shields 35→31. |
level4-full-20260927-r67.x2events |
67213–70796 | After the fifth satellite died, the ship continued moving near the upper-right station without hitting main head #568323; its health remained 175 and score stopped changing after 67232. |
level4-second-half-20260927-r68.x2events |
74372 | Directional projectile #597134 ($4180) hit the ship during the final encounter, reducing shields 39→35. |
There were no recorded chain-body hits or lost lives. A health pickup restored A's shields to 39 at 65254; that recovery does not erase its eight points of earlier damage. B finished with 35 shields and one life, unchanged in count.
First-boss stall evidence
A's fixed heads died at 66771, 66808, 66938 and 67108; the secondary head died at 67213. The main head was never damaged in this recording: health 175 from its first capture at 66315 until recording ended. The trace continued reporting target #568323, weapon 4 and goal approximately X=[264,272], Y=[2267,2269], while the ship repeatedly moved around X=264 near the upper clamp.
At 70732 the ship was at screen (264,16), world Y=2285, with scroll 2269. The primary anchor and main head were at world Y=2535, below the viewport. The unchanged goal did not return the ship to a firing height. This is a mission/route progress failure, rather than an observed curved-chain hit. The generic stall monitor missed it because the ship kept moving; unchanged target health and score exposed the attack stall. Investigate camera progression and route handover after the secondary head before further boss tuning.
Original-AVI evidence frames are saved in A's directory as
original-f63873.png, original-f63933.png, original-f64409.png and
original-f70600.png; B contains original-f74372.png. Extraction uses the
recorded VBL plus the original renderer's two-VBL latency.
Pickups and cash
The existing pickup audit infers collection from retirement beside the ship; the capture does not provide explicit collection events for every item.
| Run | Equipment/health observations | Cash observations |
|---|---|---|
| A | One missed $005C upgrade; Health Power 1 #564628 collected at 65254; Side Shot #568591 collected at 66418. |
17 likely collected, 27 missed. |
| B | Rear Shot #588035 expired at 72217 and #588267 at 72245, both intentional skips; Zapper #590701 collected at 72799. | 57 likely collected, 13 missed. |
All 20 final-boss cash drops in B were inferred collected, with no missed or
unresolved boss cash drops. No new Rear Shot was collected. A's historical
starting snapshot already contained Rear Shot, later replaced by Side Shot.
The per-pickup identities, closest approaches and expiry frames are in each
directory's pickup-audit.json; the appendix below lists all missed cash.
Shops
The source snapshot's Level 3 shop was already leaving: A records no purchase.
B's middle Level 4 shop spent 2000, upgrading Side Shot power 0→1 at 71674,
leaving 50 cash. The final shop entered with 7200 and left with 200:
Laser bought in slot 3 at 76143, Side Shot upgraded 1→2 at 76234, and the new
Laser upgraded 0→1 at 76335. Complete starting/ending loadouts are in shops.md
in the respective recording directories.
Prediction checks
The first-boss checker passes on A: 341 forecasts, 47,054 exact chain positions, 151,916 hull coverage checks, zero exact-position error and zero uncovered extent. Its 700 anticipated bullet comparisons have only the bounded two-pixel birth-camera difference.
The final-boss tongue position checker flags a discrepancy at 75453, immediately before the main head disappears at 75454 and during allocation of its death effects and cash. The tail differs by up to 11px, including in a 16-frame forecast seeded at 75439. There is no player hit at 75453. The checker compares the original motion even across this combat-triggered transition; further review is needed before attributing the discrepancy to ordinary live movement. Do not describe this tongue check as passing.
AVI recording caveat
All four files have matching RIFF lengths, can be indexed by HatariAvi, and
their final images can be decoded. B's pair covers the complete continuation
and its validator reports no cleanup error. A reports an AVI-finalization
timeout: its sprite AVI ends near game frame 70265 (VBL 215915), earlier than
its original AVI (last VBL 218077). Use A's original AVI and event capture for
the later stall, and align video through VBL tags rather than frame indices.
Reproduce
$env:XAP_LEVEL4_TRACE_FILE='E:/xenon_runs/level4-full-trace.log'
python xenon_tools/validate_campaign.py native-run level4-full-check `
--output-root E:/xenon_runs `
--resume xenon_tools/run_logs/native-level3-visible-20260914/end.sav `
--build-directory out/build/codex-validate --build --port 6903 `
--frames 30000 --checkpoint-interval 150 --stop-at-level 5
Only observational reporting documents were changed for this request. The first-boss handover stall remains the highest-priority progression problem.
Missed cash appendix
| Recording | Pickup identity | First frame | Closest frame | Expiry frame |
|---|---|---|---|---|
| level4-full-20260927-r67.x2events | 558433 | 63199 | 63223 | 63271 |
| level4-full-20260927-r67.x2events | 558707 | 63287 | 63303 | 63336 |
| level4-full-20260927-r67.x2events | 558717 | 63290 | 63354 | 63357 |
| level4-full-20260927-r67.x2events | 558743 | 63295 | 63359 | 63366 |
| level4-full-20260927-r67.x2events | 558987 | 63366 | 63400 | 63440 |
| level4-full-20260927-r67.x2events | 559101 | 63400 | 63457 | 63462 |
| level4-full-20260927-r67.x2events | 559259 | 63446 | 63470 | 63512 |
| level4-full-20260927-r67.x2events | 559360 | 63478 | 63478 | 63559 |
| level4-full-20260927-r67.x2events | 559379 | 63484 | 63496 | 63550 |
| level4-full-20260927-r67.x2events | 560018 | 63685 | 63704 | 63746 |
| level4-full-20260927-r67.x2events | 560544 | 63846 | 63884 | 63920 |
| level4-full-20260927-r67.x2events | 564223 | 65086 | 65088 | 65141 |
| level4-full-20260927-r67.x2events | 564406 | 65139 | 65223 | 65230 |
| level4-full-20260927-r67.x2events | 564745 | 65255 | 65325 | 65327 |
| level4-full-20260927-r67.x2events | 565223 | 65398 | 65456 | 65465 |
| level4-full-20260927-r67.x2events | 565233 | 65400 | 65456 | 65466 |
| level4-full-20260927-r67.x2events | 565778 | 65557 | 65606 | 65615 |
| level4-full-20260927-r67.x2events | 565830 | 65572 | 65634 | 65637 |
| level4-full-20260927-r67.x2events | 566050 | 65637 | 65701 | 65703 |
| level4-full-20260927-r67.x2events | 566096 | 65649 | 65703 | 65707 |
| level4-full-20260927-r67.x2events | 566433 | 65748 | 65748 | 65806 |
| level4-full-20260927-r67.x2events | 566438 | 65749 | 65813 | 65815 |
| level4-full-20260927-r67.x2events | 566808 | 65853 | 65863 | 65915 |
| level4-full-20260927-r67.x2events | 566833 | 65861 | 65949 | 65952 |
| level4-full-20260927-r67.x2events | 567036 | 65915 | 65965 | 65983 |
| level4-full-20260927-r67.x2events | 567084 | 65929 | 66017 | 66022 |
| level4-full-20260927-r67.x2events | 567642 | 66098 | 66121 | 66181 |
| level4-second-half-20260927-r68.x2events | 588830 | 72322 | 72326 | 72378 |
| level4-second-half-20260927-r68.x2events | 588882 | 72333 | 72342 | 72403 |
| level4-second-half-20260927-r68.x2events | 589326 | 72431 | 72464 | 72507 |
| level4-second-half-20260927-r68.x2events | 589772 | 72542 | 72609 | 72619 |
| level4-second-half-20260927-r68.x2events | 590100 | 72617 | 72631 | 72676 |
| level4-second-half-20260927-r68.x2events | 590258 | 72654 | 72715 | 72721 |
| level4-second-half-20260927-r68.x2events | 590323 | 72670 | 72749 | 72760 |
| level4-second-half-20260927-r68.x2events | 590397 | 72687 | 72744 | 72751 |
| level4-second-half-20260927-r68.x2events | 591008 | 72825 | 72834 | 72882 |
| level4-second-half-20260927-r68.x2events | 591276 | 72889 | 72939 | 72946 |
| level4-second-half-20260927-r68.x2events | 591519 | 72945 | 72970 | 73024 |
| level4-second-half-20260927-r68.x2events | 591584 | 72958 | 72958 | 73029 |
| level4-second-half-20260927-r68.x2events | 591598 | 72962 | 73016 | 73021 |