Repository navigation
Stop a test through recovery errors; one stall counter in Tester - #288
Conversation
- Explorer: a missing page that can't be restored throws BrowserRecoveryError, so the loop's catch hook stops the test; recoverOrRestart re-watches the test page after every recovery - Tester: drop the per-iteration recover() check, merge the two stall tails into shouldStopAfterStall, remove the always-true progress check and the empty-results stop, base isStruggling on the stall counter Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Explorbot Self-RegressionCommit
Time is the passing attempt (the last attempt if none passed). Change compares it with the median passing time of the last 2 runs; ±20% or more is flagged. Attempt details
Session analysis — basic (native): Session AnalysisEmpty-result search on the Issues page behaves correctly. Issue creation, validation, title search, and status filtering ran, but their checks have gaps or automation failures, so they cannot be confirmed. Coverage
What works
UX issuesNone confirmed. Execution Issues
Session analysis — slow (native): Session AnalysisCreating an issue from the Issues page works: the new issue saves with its entered title and appears in the list alongside the existing issues. Only this one flow was explored, so editing, filtering, and other issue actions are unverified. Coverage
What works
Session analysis — gated (native): Session AnalysisIssue creation from the toolbar works end to end: a new issue appears in the issues table with its entered title, status, and priority, alongside the existing issues. No product defects were observed in this flow. Coverage
What works
Execution Issues
|
Summary
Browser recovery goes through the loop's
catch, not a check on every iterationExplorer.runWithRecovery()throwsBrowserRecoveryErrorwhen the page is missing and can't be restored. It used to throw a plainError, whichrecover(error)treated as non-fatal, so the test kept running against a dead browser.recoverOrRestart()callswatchActiveTestPage()after any successful recovery. Pages restored insiderunWithRecoverynow keep reporting console errors and dialogs. The duplicate calls inrecover()andrecoverFromExecutionError()are gone.explorer.recover()at the start of every iteration.One definition of "no progress" in Tester
shouldStopAfterStall(task, note).hasNoBrowserProgresscheck, which was always true where it ran.isStrugglingnow reads the stall counter, sointeract,visualClickandexitIframecount as progress there too. Tester no longer readsconsecutiveFailuresorconsecutiveEmptyResults. Captain and Driller still use them, soTaskAgentis unchanged.Behaviour change: Pilot's "struggling" review now starts after two iterations in a row with no progress, one before the stall stop. Before, three failed clicks in a single iteration could trigger it right away.
Test plan
bun test tests/unit/tester*.test.ts tests/unit/explorer*.test.tspassesbun test tests/integrationpasses (one Prima aimock test was flaky and passed on rerun)provider.test.tsandapibot-config.test.ts, in files that import neithertesternorexplorer🤖 Generated with Claude Code