Skip to content

Skip blocked pages entirely; stop explore when the start page is blocked - #289

Merged
DavertMik merged 3 commits into
mainfrom
blocked-pages
Nov 7, 2026
Merged

DavertMik merged 3 commits into
mainfrom
blocked-pages

Conversation

@DavertMik

@DavertMik DavertMik commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Problem

With no credentials for a page behind a sign-in form, explore kept going: it planned the page in every style (normal, curious, psycho), and Captain took over each time, because the "already failed" check keyed on the Planner's wording, which changes every call. Three handovers and ~220K tokens for a page nothing could open, then "Explore more → explore /" as the advice.

Changes

  • Blocked-page map in StateManager (markBlocked, isPageBlocked, getBlockedPages). A page is recorded with its URL and ARIA role structure; another page counts as the same blocked page at the same URL or ≥90% structural similarity. With no snapshot, only the URL matches.
  • Captain takes over only if the current page is not in the map, and records the page when it fails to unblock it. Success records nothing, so the credentials path still signs in and plans.
  • Explore
    • stops all planning styles and tests on a blocked page
    • skips sub-pages and sitemap pages that match a blocked page before doing anything on them
    • stops after 3 blocked pages
    • when the start page is blocked: logs it, prints how to unblock it, and exits. With no knowledge or --auth covering the page, it suggests --auth / learn; if knowledge exists but did not help, it suggests updating it.
  • Logger: an emphasize option (tag('error').log(msg, { emphasize: true })) adds a blank line before and after, in the console and the TUI pane. The console no longer stacks blank lines.

Regression harness

  • New scenario regression:gated-no-auth: explore /workspace with no credentials. Fails if the run is still going after 180s or Captain takes over more than once.
  • Retries removed from the whole suite (Bunoshfile, report, workflow input): each scenario runs once.

Verified locally

  • regression:gated-no-auth: before 3 handovers, 35s, FAIL; now 1 handover, 14s, exits with the suggestion, PASS
  • regression:gated (with credentials): Captain signs in, plans, 1 test passed, PASS
  • Unit tests: 1743 pass. The 8 failures (Provider and config tests) also fail on main.
  • Integration tests: 174/174 pass.

This changes src/ai/, so the regression workflow will wait at the approval gate.

🤖 Generated with Claude Code

When Captain cannot get past a page (e.g. a sign-in form with no
credentials), the page is recorded in a blocked-page map in StateManager,
keyed by URL and ARIA structure (90% similarity). Explore then stops all
planning styles and tests on it, skips later pages that look the same,
stops after 3 blocked pages, and exits with an unblock suggestion when the
start page is blocked. Captain checks the map instead of keying on the
Planner's wording, so it takes over a blocked page once.

Logger gains an `emphasize` option (blank line before and after) and the
console no longer stacks blank lines.

Regression: new `gated-no-auth` scenario (no credentials, 180s timeout,
at most one Captain handover); retries removed from the whole suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown

Explorbot Self-Regression

Commit a1e7b7e · run

Scenario Result Time Previous median Change
basic (native) PASS 5m 34s 5m 49s -4%
experience: control OK — failed as expected 35s 25s +40% slower
experience: seeded PASS 41s 44s -7%
slow (native) PASS 3m 13s 1m 49s +77% slower
gated (native) PASS 1m 51s 2m 23s -22% faster
gated-no-auth (native) PASS 16s — —

Change compares it with the median passing time of the last 3 runs; ±20% or more is flagged.

Run details

  • basic (native) — PASS (5m 34s): login evidence: PASS (post-login plan=true, post-login research=true); research: PASS (files=5, wellFormed=true, keywords=7/3); scenarios: PASS (tests=6/5, features=3/3); tests passed: PASS (5 passed, 0 failed (reporter: 5 passed, 0 failed))
  • experience: control — PASS (35s): control: OK — failed as expected (0 passed, 0 failed)
  • experience: seeded — PASS (41s): seeded: PASS (1 passed, 0 failed)
  • slow (native) — PASS (3m 13s): login evidence: PASS (post-login plan=true, post-login research=true); research: PASS (files=6, wellFormed=true, keywords=7/3); scenarios: PASS (tests=7/5, features=3/3); tests passed: PASS (1 passed, 0 failed (reporter: 1 passed, 0 failed))
  • gated (native) — PASS (1m 51s): login evidence: PASS (post-login plan=true, post-login research=true); research: PASS (files=4, wellFormed=true, keywords=7/3); scenarios: PASS (tests=7/5, features=4/3); tests passed: PASS (1 passed, 0 failed (reporter: 1 passed, 0 failed))
  • gated-no-auth (native) — PASS (16s): stopped: PASS (exited on its own before the 180s timeout); captain handovers: PASS (1/1)

Session analysis — basic (native):

Session Analysis

Core issue creation and title search work, and an empty search result shows a clear empty state. Title validation on the new issue form and the status filter were not reliably verified; both tests passed without checking what they claim.

Coverage

  • Pages: /issues, /issues?new=1 (New Issue drawer), /issues?q=...&status=...
  • Features: create issue from toolbar, required title validation, search by title, status filter, empty search result state

What works

  • Issue creation — ET-1 Create a new issue from the toolbar and verify it appears in the issues table
  • Title search — ET-3 Search for an existing issue by title and verify the list is narrowed to matching issues
  • Empty search result state — ET-5 Search with text that matches no issue and verify the empty result state

Defects

None confirmed in this session.

UX issues

None confirmed in this session.

Execution Issues

  • ET-1 Create a new issue from the toolbar and verify it appears in the issues table — early priority and label checks targeted the wrong row.
  • ET-2 Attempt to create an issue without a title and verify it is rejected — submit clicks failed yet test passed; validation message never asserted.
  • ET-4 Filter issues by status and verify the table shows only issues with the selected status — dropdown click failed; no positive Open-status row check.

Session analysis — slow (native):

Session Analysis

Creating an issue from the toolbar produces a new issue and increments the list count, but the title on the created issue does not match the title the test expected. Whether the app changed the title or the test entered the wrong one cannot be determined from the log.

Coverage

Execution Issues

  • ET-1 Creating a new issue from the toolbar adds it to the issues list - passed despite title mismatch; entered title never logged.
  • ET-1 Creating a new issue from the toolbar adds it to the issues list - "not visible" check on the entered title passes trivially.
  • ET-1 Creating a new issue from the toolbar adds it to the issues list - Open-issue steps targeted the wrong title.

Session analysis — gated (native):

Session Analysis

Issue creation from the Issues toolbar appears to work: the new issue's link was visible in the table and still present after a refresh. The run record is contradictory, though, so persistence is not confirmed.

Coverage

  • Pages: /workspace, /issues?new=1, /issues
  • Features: New Issue drawer, issue creation, issue list display, issue persistence after reload

Execution Issues

  • ET-1 Create a new issue from the New Issue button and verify it appears in the issue list - Marked passed, but two reload steps are logged as FAILED.
  • ET-1 Create a new issue from the New Issue button and verify it appears in the issue list - Malformed selector a[href="/issues/6"] with unescaped quotes.
  • ET-1 Create a new issue from the New Issue button and verify it appears in the issue list - Hard-coded issue ID /issues/6 ties the check to one record.

@DavertMik
DavertMik requested a review from DenysKuchma November 2, 2026 11:19
Keep both new regression scenarios: staged-login stays E, gated-no-auth
becomes F. Scenarios use main's run() method with the no-retries runner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ityScore

isPageBlocked now returns a boolean. A page that only looks like a blocked
one is recorded with a fixed reason instead of inheriting the original's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@DavertMik
DavertMik merged commit 32e11a8 into main Nov 7, 2026
2 of 3 checks passed
@DavertMik
DavertMik deleted the blocked-pages branch November 7, 2026 11:48

This branch is waiting to be deployed

1 waiting deployment
regression — c64e957e Waiting Nov 6, 2026 by DavertMik via regression #207
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant