Autopilot · write-up
Level 5 diagonal chamber: early stall and local correction
What actually failed
The failure begins immediately after the right wall mount disappears, rather than when the stall monitor eventually reports no progress.
Original recording:
E:/xenon_runs/level5-full-render-audit-20261004-r289.validation/level5-full-render-audit-20261004-r289.x2events.
At 41857 the mission still chooses egress from the right mount, group 11,
level5-tile-pair-r177-c18. It climbs into the right pocket. At 41868 it
finally acquires the center seal, group 10, level5-tile-pair-r172-c09, because
player world Y has reached the old acquisition boundary, 2848. The left mount
142619 is still firing across that approach.
The center-seal route is initially real and correctly points downward around the wing:
(303,2847) -> (304,2848) -> (304,2864) -> (296,2884)
-> (216,2880) -> (200,2844) -> (168,2844)
Three conflicts make that route ineffective:
- The crossing is selected too late. The candidate forecast finds a contact-free DOWN retreat, but its minimum clearance is only 4.47 pixels. The ordinary 15-pixel reserve rejects it. Waiting continues camera advance until the lower turn is no longer reachable. A displayed map route does not establish that the movement evaluator will accept its first leg.
- Acquisition was also being used as a release condition. In a diagnostic candidate that permits the first DOWN input, world Y becomes greater than
choose_diagonal_entry()then abandons the entrance and selects an unrelated seal. This was a separate mission ownership bug, not a map update failure.- Tank preparation preempts the unfinished upper chamber. A later restart
reaches scroll 2544 while upper group 7 is still closed. Tank preparation
replaces its firing route with a posture on the opposite side of the seal,
producing another stall near world
(196,2675).
The empty route reported at 42009 is a later consequence. The center seal is still intact there, so this incident is not stale persistent occupancy of an already-destroyed opening. The earlier report in LEVEL5_VALIDATION_20261004.MD describes that late state; the transition above explains how the ship got there.
Comparison with the older successful recording
Older recording:
E:/xenon_runs/level5-whole-fixed-r123.validation/level5-whole-fixed-r123.x2events.
The .sav.x2meta named in the report is its snapshot identity sidecar, not the
event recording. Both AVIs and source snapshots are in the same directory.
The source of truth for this run is its captured
source/native/xenon_autopilot_level5.c, not just manifest commit
e693fefa7ffc914b92099f6644c95064318a5f80: that run included uncommitted changes.
Comparing this snapshot with HEAD before this correction finds no changes in
the diagonal gate functions or embedded map data. The later Level 5 edits are
train tactics and inspection geometry outside this chamber. Other shared C
files have changed, so this is not a claim that the entire pilot is identical.
R123 approaches the entrance centrally: approximately (180,2850) at 76024
and (155,2802) at 76032. The left sources are already absent. R289 instead
enters the right pocket with a live left source. Its loadout and earlier
trajectory also differ: R123 has Forward power 2, two lasers at power 2 and
no Drone; R289 has Double Shot power 1, two lasers at power 1 and Drone power 1.
Both have Cannon and powered Side Shot. The old successful trajectory never
exercises the crowded right-pocket
retreat. There is no evidence that the earlier gate fix was lost in a merge;
the mission failed to cover this different approach.
Implemented correction
Only the Level 5 diagonal chamber mission was changed. The ordinary planner reserve, candidate evaluator and tank combat rules retain their previous code.
- After the right mount opens, acquire the chamber while the lower platform is still reachable: up to entrance tile bottom +160, world Y=2944, rather than waiting for Y=2848. This early acquisition requires the right mount to be open; the original boundary remains otherwise.
- Before crossing the center entrance, attack remaining left mounts at
r179-c04andr179-c02. This removes projectile sources instead of forcing a narrow retreat through their fire. - An acquired center attack/egress remains active while its route temporarily moves back across the acquisition boundary. Crossing is still checked from current position and connectivity, not permanently latched.
- Resolve the diagonal mission before camera-triggered tank preparation.
Clear its upper emplacements at
r164-c12,r162-c12,r164-c06,r162-c06before releasing control to the tank approach. A ship above entrance exit Y=2732 with all four already open releases ownership, including a restart whose graph is temporarily unavailable. - Evaluate this mission once, removing its duplicate call from the generic group selector.
Three targeted mission tests exercise acquisition-boundary retreat, left-source priority after right-mount destruction, and an unfinished chamber at the tank camera trigger. All 61 Level 5 mission, native driver and native session tests pass against the rebuilt DLL.
Visible resident-C validation
Both Hatari and the replay DLL were rebuilt using hatari_dev.ps1. Runs use
validate_campaign.py native-run, visible fast-forward gameplay, memory tracing
off, both AVIs, source/manifest capture, Level 5 trace and 150-frame checkpoints.
They stop gracefully at the first tank combat tactic. They validate the chamber
transition, not a full tank fight or full Level 5 completion.
| Run | Checkpoint | Result | Remaining shield incident |
|---|---|---|---|
| R299 final | R278 f39693-periodic.sav, Level 5 entry |
Clears lower barriers, center opening and upper chamber; reaches tank; no life loss. | 41194: projectile #140276, 4 damage, before this chamber. |
| R300 final | R289 f41820-periodic.sav, right-mount approach |
Clears center and upper chamber; reaches tank without stall or life loss. | 41834: 4 damage before right-mount destruction. |
| R301 final | R123 f75869-periodic.sav, older approach |
Clears center and chamber; reaches tank without stall or life loss. | 76047: projectile #601950, 4 damage. |
| R298 control | Same R123 checkpoint, unchanged HEAD Level 5 mission | Also reaches tank. | Same 76047 four-point hit. |
Recordings:
- R299:
E:/xenon_runs/level5-diagonal-final-20261004-r299.validation/level5-diagonal-final-20261004-r299.x2events - R300:
E:/xenon_runs/level5-diagonal-final-restart-20261004-r300.validation/level5-diagonal-final-restart-20261004-r300.x2events - R301:
E:/xenon_runs/level5-old-checkpoint-final-20261004-r301.validation/level5-old-checkpoint-final-20261004-r301.x2events - R298 control:
E:/xenon_runs/level5-old-checkpoint-baseline-20261004-r298.validation/level5-old-checkpoint-baseline-20261004-r298.x2events
The R298 control rebuild temporarily used unchanged HEAD's Level 5 mission, then restored the final candidate byte-for-byte and rebuilt both native targets. This establishes that the 76047 hit is not introduced by the local gate change; it does not establish parity with every historical shared subsystem.
R299's decisive trace:
41857 player=(284,2913) gate=12 target=142619 weapon=SideLeft applied=LEFT
41932 player=(153,2737) gate=10 egress=1 destination=(164,2732)
41933 player=(162,2731) diagonal_inside=1 gate=9
42156 player=(209,2609) gate=-1 tactic=TankPrepare
The latest entry run records frames 39695–42210, shield 39→35 and three lives throughout. It still misses POWERUP #132972 at 39946; #133137 is collected and the Drone's power increases at 39915. No Rear Shot is taken. The cash audit counts 9/15 ordinary cash items collected, value 700/1200. No boss reward is reached. These remaining issues were not addressed by the local gate repair.
All six final-run AVIs pass chunk/index audits: R299 has 10,006 indexed frames per AVI, R300 2,092, R301 2,331. Captured evidence: R299 audit, R300 audit, R301 audit, and paired AVI audit.
Rejected experiments
Permitting four-pixel clearance and changing progress search allowed the late
right-pocket retreat but led to hits while the left mount kept firing. Those
driver changes were removed. R293 took crossing hits at 41948, 41949 and 42007,
then lost a life at 42399 in the tank fight:
E:/xenon_runs/level5-diagonal-ownership-20261004-r293.validation/level5-diagonal-ownership-20261004-r293.x2events.
An early cold restart at R289 f41647-periodic.sav also selected the left seal
from an unsuitable staging pocket in R290. That exploratory candidate is not
a final-build pass. Final startup coverage here consists of R299, R300 and
R301; arbitrary restarts and the rest of Level 5 still require validation.
Reproduce
From the repository root, choose a fresh name and output directory:
set XAP_LEVEL5_TRACE_FILE=E:\xenon_runs\NEW-L5-GATE.validation\level5-trace.log
python xenon_tools\validate_campaign.py native-run NEW-L5-GATE --output-root E:/xenon_runs --resume E:/xenon_runs/level4-full-after-level3-20261003-r278.validation/checkpoints/f39693-periodic.sav --frames 4500 --checkpoint-interval 150 --build --build-type Release --build-directory out/build/codex-validate --fast-forward --memory-trace off --png-level 3 --port 6932
Use Ctrl+C or the run's stop-request file to finalize both AVIs after the
chamber. The investigation's work/run_l5_gate_check.py passively watches the
C trace and requests that stop when tank combat begins. It supplies no inputs.
The observational audit uses work/audit_level5_validation.py; it reads captured
records without executing a Python pilot. Web replay is authoritative for
inspection; actual trace inputs take precedence over recomputed route overlays.