Autopilot · write-up
Travel pacing and the Level-1 corridor
Follow-up to AUTOPILOT_SHELL_VALIDATION.MD. The new behavior is confined to the maneuver planner; the legacy controller remains available for comparison. Live validation uses the spans backend.
Diagnosis
The previous recording level1-spans-shell-fix-0905-02 shows screen Y=16 at the
hits on 1409 and 2242. The latter exhausted the shield; the life counter changed
at 2259. A distant world-space route waypoint was treated as an instruction to
keep pressing up. Automatic scrolling already supplies forward progress, but
the continuation ignored the reaction space needed for incoming enemies.
At 1750–1780, the ship instead waited near X=26 in the left branch. That left it between a bottom-left entry and the existing formation around the hits at 1800–1803. The route itself did not require hugging that wall: the resident map's tightest sampled free anchor span is X=16..80 at world Y=3280.
Change
autopilot_v2/pacing.py attaches a screen-space preference to ordinary travel
missions. The default cruise band is Y=112..136 in the 192-pixel playfield.
The mission retains its world-space waypoint, while the feedback continuation
stops pressing up at the cruise band and lets scrolling close the distance. A
ship already near the top steers down toward the band. Explicit firing stations,
boss refuges and navigation retreats retain their existing constraints.
This is a preference, not a new collision boundary. Emergency maneuver prefixes may leave the band. Collision safety and clearance reserve rank before screen position, corridor preference, collection and damage opportunities. The planner penalizes sustained top-edge exposure rather than accepting it solely because it reduces distance to a distant route endpoint.
Within the existing left branch, world Y=3180..3456, the preferred lane is X=68..76, near its right wall. It applies only while that branch is active and the ship is already on the left side of the fork. No instruction sends it through the central wall to the other branch. The exact resident wall mask accepts the proposed lane at every sampled four-pixel row; the live validator still checks terrain and enemies on every predicted frame.
The corridor search includes right-lane stations at screen Y=100, 124 and 148, in addition to horizontal alternatives. This permits yielding vertically to a formation without automatically escaping to the left wall. It may temporarily move lower than the cruise band when the collision-checked plan requires it. The extra alternatives remain inside the existing rollout/transition budgets.
Replay
Decision traces now record screen_band and preferred_lane in the navigation
strategy. The Navigation strategy checkbox draws the recorded cruise band
in purple and labels the preferred X interval when active. The band is a travel
preference; the green line still represents the actual verified maneuver.
Validation
All runs have paired original/sprite AVI, canonical observations, decision
traces, checkpoints and source snapshots under xenon_tools/run_logs.
No shield cheat or fast-forward was enabled.
cruise-spans-0905-01: the initial pacing change avoided the old top-edge behavior but still fell into the left-side formation trap. Five hits at 1869–1876 exhausted the shield; a life was lost at 1893. This failed attempt motivated the vertical alternatives and stronger right-side preference.cruise-spans-0905-02: resumed the preceding run's pre-corridor checkpoint at 1601. Reached the mid-level shop at 2546 with zero damage, zero lives lost, shield 39 and all three lives. The ship held around X=69 while moving lower to let the formation pass. Score gained: 5190; recorded pickups: three.cruise-spans-0905-03: combined retest from the original pre-hit checkpoint at 800, reaching the mid-level shop at 2556. One 8-point hit, zero lives lost, final shield 31 and all three lives. The remaining hit is at 1940, against a swarm enemy, with the ship at X=71, Y=148. It is not a top-border collision. Score gained: 9310; recorded pickups: nine; wall shooters destroyed: eight. The earlier recording through this area had 39 shield damage and one life lost. Changed timing means the encounters are not frame-for-frame identical; the whole section, through its shop, was exercised.
Final replay: cruise-spans-0905-03.x2events. The paired AVIs and decision trace are alongside it. Enable Navigation strategy to see the cruise preference and actual maneuver. Hatari is paused at the shop with automation input released.
The broad regression suite passed 696 tests. After adding the purple replay guide and an explicit firing-station exemption, 70 focused tests passed. The exemption narrows corridor pacing to ordinary route/formation goals; all pacing goal kinds observed in the combined replay remain eligible. The tests cover not rushing toward distant waypoints, recovering from the top edge, allowing emergency departures, branch/area scope, retreat exceptions, actual resident wall geometry, vertical waiting alternatives and safety outranking lane choice. This is affected-section validation, not a repeat of the whole campaign or a phone/WASM performance measurement.