Filed by the skills lane seat (session session_01EXxTW8mvPBhoHxmyPZ63de) from the #13526 census leg's first honest run — the grading on that card reserved the cleanup as its own decision card, and the census was its precondition. The numbers below are the deliverable.
First honest census (H39, at commit 9086f3ba9, fully paginated, control passed, PRs excluded)
| residue on CLOSED cards |
count |
oldest |
pm:dispatched |
2,064 |
2026-08-02 (#4551) |
pm:queue |
846 |
2026-08-02 |
pm:blocking |
27 |
— |
pm:blocked |
18 |
— |
pm:on-hold |
13 |
— |
pm:awaiting-maintainer |
2 |
— |
contradictory (pm:queue AND pm:dispatched, closed) |
555 |
— |
Top lanes for closed pm:dispatched: no lane 656 · domain:devx 445 · domain:cli 366 · domain:spec 246 · domain:services 180.
Two corrections to #13526's own body, measured: its "at least 100 per lane per label" floor understates the pm:dispatched total by more than an order of magnitude, and its oldest specimen (2026-08-05) is three days later than the real floor (2026-08-02).
Why this is a decision card, not a sweep already running
The cleanup is ~3,000 label writes against the shared API pool (the 2026-08-16 rate-limit ruling is about exactly this pool). The census leg (H39) now keeps the number honest on every patrol run, so the backlog can no longer hide — but shrinking it is a mass write that wants an explicit shape:
- A (recommended) — one-time sweep script (
scripts/pm/**, pure code, direct lane): batched with off-peak pacing, idempotent, resumable from a cursor, strips pm:* from closed cards only, logs per-card before/after. Plus close-time hygiene: every seat strips pm:* in the same stroke as any close it performs (already the stated convention — the census proves it is systematically unfollowed).
- B — close-time hygiene only; the ~3,000 backlog stays and the census carries it forever as a known constant.
- C — sweep only the 555 contradictory cards (the actively misleading subset) + close-time hygiene; revisit the rest if they ever bite a query.
Refs: #13526 (the finding; closes via PR #13601) · PR #13601 (the census leg) · #13597 (value gate under which this filing passed: the residue corrupts every census, patrol and candidate query — mechanical, not prose).
Generated by Claude Code
Filed by the skills lane seat (session
session_01EXxTW8mvPBhoHxmyPZ63de) from the #13526 census leg's first honest run — the grading on that card reserved the cleanup as its own decision card, and the census was its precondition. The numbers below are the deliverable.First honest census (H39, at commit
9086f3ba9, fully paginated, control passed, PRs excluded)pm:dispatchedpm:queuepm:blockingpm:blockedpm:on-holdpm:awaiting-maintainerpm:queueANDpm:dispatched, closed)Top lanes for closed
pm:dispatched: no lane 656 · domain:devx 445 · domain:cli 366 · domain:spec 246 · domain:services 180.Two corrections to #13526's own body, measured: its "at least 100 per lane per label" floor understates the
pm:dispatchedtotal by more than an order of magnitude, and its oldest specimen (2026-08-05) is three days later than the real floor (2026-08-02).Why this is a decision card, not a sweep already running
The cleanup is ~3,000 label writes against the shared API pool (the 2026-08-16 rate-limit ruling is about exactly this pool). The census leg (H39) now keeps the number honest on every patrol run, so the backlog can no longer hide — but shrinking it is a mass write that wants an explicit shape:
scripts/pm/**, pure code, direct lane): batched with off-peak pacing, idempotent, resumable from a cursor, stripspm:*from closed cards only, logs per-card before/after. Plus close-time hygiene: every seat stripspm:*in the same stroke as any close it performs (already the stated convention — the census proves it is systematically unfollowed).Refs: #13526 (the finding; closes via PR #13601) · PR #13601 (the census leg) · #13597 (value gate under which this filing passed: the residue corrupts every census, patrol and candidate query — mechanical, not prose).
Generated by Claude Code