fix: gate-basin recovery loop — anchor recovery at the destination #221

Merged
sickday merged 1 commit from fix/alkharid-gate-wedge-and-death-skull into main 2026-07-23 20:43:31 +00:00
Owner

Live fleet incident: 174 bots piled at the Al Kharid gate, teleport-looping
to the Al Kharid bank. Log-verified chain: any failure near the border
recovered to the bank nearest the WEDGE POINT (Al Kharid bank), goals then
re-planned from there — re-targeting Al Kharid-adjacent spots across the
gate and marching Draynor/Varrock legs into the wall — wedged again, and
recovered again, forever. Full packs meant the toll top-up had no slot to
land in, so even genuine crossings always failed.

  • Navigation.recover_to_hub/3 takes an anchor: recovery teleports to the
    hub nearest where the bot was HEADED, not where it wedged. GoalRunner's
    failure cascade anchors at the goal's :relocate bank; the gatherer goals
    and Travel anchor their stuck recoveries at the leg's destination.
  • GatePassage fails fast (:gate_cannot_pay) when the bot cannot even hold
    the toll (full pack, no coin stack to merge into), instead of walking to
    the gate and timing out the crossing wait first.
  • The gate machine now ends one step past the wall: goals set
    gate_destination: nil and return to their own travel phase, so the far
    leg runs under normal travel recovery instead of re-running the whole
    crossing (and burning tolls) on every hiccup past the gate.
  • TollGate zone geometry: the x=3268 split extends down through the
    dead-ground alcoves south of the wall (y 3171..3232) — A*-verified
    west-side territory whose :east classing pinned westbound crossers into
    a pay-cross-drift-repay oscillation. Mountain-crest divider now applies
    only south of y 3170 (the al_kharid_south strip stays east).
  • Locations.match_route rejects a canned-route slice whose ends sit across
    the toll gate from the walker/destination: straight-line closeness let
    the Lumbridge->Al Kharid route match a swamp-bound leg and march a
    freshly-crossed bot back through the wall it had just paid to pass.

All verified live on the test world via hot-load: a full-pack broke bot
planted at the gate recovered to Draynor and fished within 90s; an
Al Kharid->swamp fisher paid, crossed, and fished within 119s; the gate
basin drained 174 -> 40 within minutes.

Live fleet incident: 174 bots piled at the Al Kharid gate, teleport-looping to the Al Kharid bank. Log-verified chain: any failure near the border recovered to the bank nearest the WEDGE POINT (Al Kharid bank), goals then re-planned from there — re-targeting Al Kharid-adjacent spots across the gate and marching Draynor/Varrock legs into the wall — wedged again, and recovered again, forever. Full packs meant the toll top-up had no slot to land in, so even genuine crossings always failed. - Navigation.recover_to_hub/3 takes an anchor: recovery teleports to the hub nearest where the bot was HEADED, not where it wedged. GoalRunner's failure cascade anchors at the goal's :relocate bank; the gatherer goals and Travel anchor their stuck recoveries at the leg's destination. - GatePassage fails fast (:gate_cannot_pay) when the bot cannot even hold the toll (full pack, no coin stack to merge into), instead of walking to the gate and timing out the crossing wait first. - The gate machine now ends one step past the wall: goals set gate_destination: nil and return to their own travel phase, so the far leg runs under normal travel recovery instead of re-running the whole crossing (and burning tolls) on every hiccup past the gate. - TollGate zone geometry: the x=3268 split extends down through the dead-ground alcoves south of the wall (y 3171..3232) — A*-verified west-side territory whose :east classing pinned westbound crossers into a pay-cross-drift-repay oscillation. Mountain-crest divider now applies only south of y 3170 (the al_kharid_south strip stays east). - Locations.match_route rejects a canned-route slice whose ends sit across the toll gate from the walker/destination: straight-line closeness let the Lumbridge->Al Kharid route match a swamp-bound leg and march a freshly-crossed bot back through the wall it had just paid to pass. All verified live on the test world via hot-load: a full-pack broke bot planted at the gate recovered to Draynor and fished within 90s; an Al Kharid->swamp fisher paid, crossed, and fished within 119s; the gate basin drained 174 -> 40 within minutes.
fix: gate-basin recovery loop — anchor recovery at the destination
All checks were successful
ci / test (pull_request) Successful in 2m33s
2b9613d609
Live fleet incident: 174 bots piled at the Al Kharid gate, teleport-looping
to the Al Kharid bank. Log-verified chain: any failure near the border
recovered to the bank nearest the WEDGE POINT (Al Kharid bank), goals then
re-planned from there — re-targeting Al Kharid-adjacent spots across the
gate and marching Draynor/Varrock legs into the wall — wedged again, and
recovered again, forever. Full packs meant the toll top-up had no slot to
land in, so even genuine crossings always failed.

- Navigation.recover_to_hub/3 takes an anchor: recovery teleports to the
  hub nearest where the bot was HEADED, not where it wedged. GoalRunner's
  failure cascade anchors at the goal's :relocate bank; the gatherer goals
  and Travel anchor their stuck recoveries at the leg's destination.
- GatePassage fails fast (:gate_cannot_pay) when the bot cannot even hold
  the toll (full pack, no coin stack to merge into), instead of walking to
  the gate and timing out the crossing wait first.
- The gate machine now ends one step past the wall: goals set
  gate_destination: nil and return to their own travel phase, so the far
  leg runs under normal travel recovery instead of re-running the whole
  crossing (and burning tolls) on every hiccup past the gate.
- TollGate zone geometry: the x=3268 split extends down through the
  dead-ground alcoves south of the wall (y 3171..3232) — A*-verified
  west-side territory whose :east classing pinned westbound crossers into
  a pay-cross-drift-repay oscillation. Mountain-crest divider now applies
  only south of y 3170 (the al_kharid_south strip stays east).
- Locations.match_route rejects a canned-route slice whose ends sit across
  the toll gate from the walker/destination: straight-line closeness let
  the Lumbridge->Al Kharid route match a swamp-bound leg and march a
  freshly-crossed bot back through the wall it had just paid to pass.

All verified live on the test world via hot-load: a full-pack broke bot
planted at the gate recovered to Draynor and fished within 90s; an
Al Kharid->swamp fisher paid, crossed, and fished within 119s; the gate
basin drained 174 -> 40 within minutes.
Sign in to join this conversation.
No description provided.