From 4db82cfcd683f4407e3f9560b3611f1e4570a200 Mon Sep 17 00:00:00 2001 From: alexpolo1 Date: Wed, 26 Aug 2026 20:58:58 +0200 Subject: [PATCH] fix(pindle): don't hard-fail the portal retry when no town marker is visible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The retry path I added treated detect_current_act() returning None as "we are not in act 5" and aborted the run. None only means no TOWN_MARKERS template is on screen, which happens routinely by the red portal in Harrogath's NE corner — the same blind spot that makes on_init bail there. All 6 occurrences in the 2026-08-26 19:0x session were "detected None"; not one was an actual wrong act. Five of them landed consecutively, tripped the 5-strike circuit breaker, disabled run_pindle and stopped an otherwise healthy 31-game session (level 32 -> 43, 526k gold stashed, 26/31 runs successful). Fix: None now falls back to `loc`, the act-5 location already confirmed by go_to_act(5) at the top of the same approach() call — a failed portal click cannot move the character between acts. A genuinely different detected act still travels to act 5 as before, so the Bug 9 desync protection is unchanged. Co-Authored-By: Claude Opus 5 --- src/run/pindle.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/run/pindle.py b/src/run/pindle.py index 30a64e0..e73610f 100644 --- a/src/run/pindle.py +++ b/src/run/pindle.py @@ -82,9 +82,18 @@ class Pindle: # A5_TOWN_START start walked it into the Harrogath wall — and onto the # waypoint, whose panel the health manager then read as a chicken. retry_loc = self._town_manager.detect_current_act() - if retry_loc != Location.A5_TOWN_START: + if retry_loc is None: + # No town marker in view. That is NOT evidence we left the act — it happens + # routinely by the portal in Harrogath's NE corner, where none of the + # TOWN_MARKERS render. `loc` was confirmed to be act 5 at the top of this + # run and a failed portal click cannot move us between acts, so reuse it. + # Treating None as "wrong act" hard-failed 6 runs and burned the 5-strike + # circuit breaker, ending an otherwise healthy 31-game session. + Logger.debug("Pindle approach: no town marker in view — reusing the act-5 location confirmed at run start") + retry_loc = loc + elif retry_loc != Location.A5_TOWN_START: Logger.warning(f"Pindle approach: not confirmed in A5 (detected {retry_loc}) — traveling to act 5") - retry_loc = self._town_manager.go_to_act(5, retry_loc) if retry_loc else False + retry_loc = self._town_manager.go_to_act(5, retry_loc) if not retry_loc: self.approach_fail_step = "retry_traverse_to_portal" Logger.error("Pindle approach: could not confirm A5 town position for retry")