Xenon 2

Autopilot · write-up

Level 5 diagonal chamber: early stall and local correction

xenondoc/LEVEL5_DIAGONAL_GATE_20261004.MD · 10 KB · updated 2026-10-05

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:

  1. 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.
  2. Acquisition was also being used as a release condition. In a diagnostic candidate that permits the first DOWN input, world Y becomes greater than
  3. choose_diagonal_entry() then abandons the entrance and selects an unrelated seal. This was a separate mission ownership bug, not a map update failure.
  4. 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-c04 and r179-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-c06 before 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.