Skip to content

Only a merged or closed pull request is landed; unread and idle are visited once on change, awaiting again on age (#1707) - #1710

Merged
suleimansh merged 2 commits into
mainfrom
claude/landed-open-unread-1707
Aug 26, 2026
Merged

Only a merged or closed pull request is landed; unread and idle are visited once on change, awaiting again on age (#1707)#1710
suleimansh merged 2 commits into
mainfrom
claude/landed-open-unread-1707

Conversation

@suleimansh

Copy link
Copy Markdown
Contributor

Implements items 1 and 3 of #1707 as decided in #1707 (comment).

Item 1 — content.js. A row showing only a pull request is landed only for #N · Merged / #N · Closed; #N · Open is idle. A status word on the row still wins. Any other pull-request wording stays unknown with the label carried, as before for labels the bridge does not know.

Item 3 — driver-plan.js. PARKED + one REVISIT_MS becomes two sets: ON_CHANGE = {awaiting, unread, idle} (visited when never seen or when the list's word changed) and ON_AGE = {awaiting} (also visited again after five minutes unchanged). A queued answer still forces a visit whatever the status. running, landed, missing are never visited on their own.

Note on idle: the decision says an open-PR session "is visited on change, never on age". On main the planner never visits idle at all, so honouring that puts idle — the list's own "Idle" rows included — in the on-change set. Cost: one visit per session when it turns idle, and on a fresh worker (empty seen) idle sessions join the first cycles' backlog, four visits a beat. If you'd rather keep idle unvisited, drop it from ON_CHANGE and item 1 becomes a report-only change (idle instead of landed on the dashboard).

check.mjs — three cases, each red on main before the fix and each verified to go red again when its rule is reverted:

  • an open pull request alone reads as idle, a merged or closed one as landed
  • awaiting/unread/idle are visited when never seen or on a status change; running/landed/missing are left alone
  • after five minutes unchanged only awaiting is visited again; unread and idle are not

Specs: content.SPEC.md, driver-plan.SPEC.md (glossary "parked" → "stopped", now including idle), check.SPEC.md, the extension SPEC.md, FEATURES-SPEC.md:170.

Nothing in dist/ changes — the daemon needs no rebuild; the extension needs a reload.

🤖 automated · Fable 5, effort high

…isited once on change, awaiting again on age (#1707)
@suleimansh

Copy link
Copy Markdown
Contributor Author

Dogfood on the live Driver, 2026-08-26 00:28–01:15Z (daemon pid 74851 on d3ce73a6, extension reloaded twice). Evidence = onBridgeStatus polled every 3 s (lastContact route + the page's hello with its session id) and the live list's aria-labels read from a second claude.ai tab.

Driver keeps cycling on the new script/_bridge/statuses every 30 s, page reload every ~90 s, questions 0, version 0.12.0.

Item 1 — one bug found, fixed in 29684d3a. To get a real not-landed row I reopened draft PR #1706 (session session_01TU8F5…, inside the 12-hour window). claude.ai's row read #1706 · Draft — a state the first commit did not cover (only Open → idle), so the session came back unknown and was never visited. Now Merged/Closed → landed and every other pull-request state → idle, exactly the decision's wording; check.mjs carries a Draft case that is red on the Open-only rule. After the reload the worker's first cycle visited it once as idle (01:02:58), together with the list's Idle session (01:03:01). Closed #1706 again → row #1706 · Closed → no visit across the next 7 cycles.

Item 3 — no age revisit. Neither idle session was visited a second time across 16 cycles (7½ min, the revisit is 5). The awaiting half — revisited on age — was not exercised: no session is awaiting right now; the check.mjs case covers it.

Side observation, not this PR's: claude.ai refreshes a row's pull-request state lazily — the row said Closed for six minutes after the reopen until the session page was opened. A landed session is never visited, so a pull request reopened later flips on the list only when claude.ai refreshes it on its own.

🤖 automated · Fable 5, effort high

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