You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(pm): archive the open board before the closed history, and move the snapshot cron off the patrol's hour (#17442)
The first scheduled run of the archiver walked `state=all` oldest-first: 800
requests bought 137 closed issues and 268 closed pull requests from February
and zero open cards. The records an account suspension destroys are the OPEN
board, so that half was being archived last.
A first walk now runs two phases in one order. The open phase asks the
`/issues` listing for `state=open` (it carries pull requests too) and walks it
to a short page; only when it is complete does the closed-history walk start
from its own cursor. The two cursors are kept apart, so a run that runs out of
budget inside the open set resumes inside it and the history cursor waits
untouched. `walk_phase` and `walk.open_set` in the manifest separate "open set
complete, history resuming" from "still inside the open set". An archive
written before this order existed re-walks the open board first and keeps its
history cursor rather than discarding it.
The count check's pending predicate moves with it: its arithmetic needs only
the open set, so the run that finishes the open phase has a reading even while
the history is still resuming, and a later history run does not — that
enumeration is from an earlier run. Every pending verdict now carries the
reason it is pending.
Also fixed, in the same file and required by the negative control: the nested
`board.read_at` stamp escaped `materialManifest`, so a steady-state run whose
whole job is to write nothing would move it and commit a manifest-only diff on
every scheduled run.
The cron moves from `37 1,7,13,19` — the half-state patrol's cron to the
minute — to `7 2,8,14,20`. Both are scheduled board readers spending one
per-repository `GITHUB_TOKEN` hour of 1,000 requests. The header now names that
pool, the other standing spenders, and why the cap is 800.
Claude-Session: https://claude.ai/code/session_01YKEjmbYNvYWJvWGSWx26zK
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments