rdmsm4x-changelog-20260904-1847-sidebar-cleanup-pr-sweep-rtty-regression
Swept every open PR in the fleet (there was one, and it merged under its owner while under review), archived 115 stale Claude Code sidebar threads reversibly, retitled the untitled live threads, and filed ISSUE-20260904-13 — a confirmed regression that survives the merged RTTy #10.
Window: 2026-09-04 18:34:21 EDT → 18:47:36 EDT · host rdmsm4x · session c8b04c2f (dev-57) · claude@rdmsm4x Request: "auto-fix/auto-merge all open/pending PRs, delegate sub-agents to review all, rename all current threads, archive disconnected threads — I'd rather the sidebar be clean." Rich sent the same prompt to at least two sessions (dev-de got a copy with an extra framing sentence: RTTy release, ReplicantDB, Tyrell, ECS libraries / ecs0lib).
What changed
| Area | Change | Evidence |
|---|---|---|
| Sidebar | 115 stale threads MOVED to
~/.claude/projects-archive/20260904-sidebar-cleanup/ |
moved=115 failed=0, 0 remain in projects/, 115 in archive; live 10/10 present; pinned Claude sessions 0 moved |
| Sidebar | 3 live threads retitled via custom-title records |
dev-57, dev-6d (55b61233), notes-republish (158c9525); byte offsets
in scratchpad undo-offsets.txt |
| Tickets | ISSUE-20260904-13 opened (BUG, high, RTTy), linked
relates-to ISSUE-20260904-12 |
~/dev/issues/open/ISSUE-20260904-13-*.md |
| PRs | none merged by me | the one open PR merged by its owner at 18:37 EDT |
PR sweep — result
Exactly ONE open PR across all 91 remote-backed repos under
~/dev — richhdoty/RTTy#10 (Build 49
flows-banner split). Verified three ways:
gh search prs --owner, --author,
--involves richhdoty. It was a DRAFT whose body said "Not
merging until both are green" with its archive-matrix gate still running
(pid 87523, started 18:21:29). I did not merge under its owner. The
owner's cloud session took it out of draft and merged it at 22:37:24Z
(18:37 EDT) as 2629abc; main is now
fbede7c.
The regression that survives the merge (ISSUE-20260904-13)
Independent read-only review (one Opus subagent, 155K tokens, 59 tool
calls, 8 min) of the full 13-file diff against merge base
e0011cf:
- CONFIRMED HIGH.
ApplicationFlowSampleRunner.swift:68still feedssourceWasPartialfrom ecs0lib's rolled-upNetworkTrafficCoverage.isPartial, which ORs in ecs0lib's own eviction caps (evictedProcessTotals/evictedEndpointTotals, limits 8,192 / 32,768). Those counters are cumulative and reset only at teardown, so one eviction makesisPartialtrue for the life of the subscription →rateBaseline=nilandprevious=nilevery sample → all rates render "—" permanently, orange banner permanent, message blames the kernel. PR #10 removed the ~90 s trigger and left a sticky hours-to-days one. The branch's owndocs/coverage-banner-measurement-20260904.md(lines 149-153, 334-341) identified this before the code was written. No test can see it: all tests injectCoveragedirectly, bypassing the runner mapping. - Confirmed clean: every
isPartialcall site moved (lines 140 and 160 both — a half-move would have computed rates against a stale baseline); generated trust chain verifies 26/26 + 8/8 + 3/3 with zero digest mismatches (no archive-time signing risk); version literals fully propagated; 18 affected tests pass; 800 XCTest methods repo-wide. - Two lesser: 125 pt band comment computes 8×13+7×3=125 with zero
slack while the sibling commit adds a caption into the same VStack
(scrolls, nothing lost, reason recorded is false);
boundingCaptionsays "Showing top 256" above ≤8 rows. - Owner notified (rtty-e9 / 0fbacd80, active) at 18:45 EDT with the fix shape: three coverage buckets, not two. Not fixed by me — RTTy is live-owned.
Sidebar cleanup — selection rule (INCLUSION)
Moved only if ALL held: last real activity
(timestamp inside the transcript) < 2026-08-31; not in
~/.claude/sessions/; not in any resume pin; a real project
thread (subagents/, wf_* untouched). Moved set
spans 2026-08-07 → 2026-08-30, 0.24 GB. mtime was rejected as
the signal: 95 files share one 2026-09-03 21:16
mtime from a bulk copy; only 9 had genuine Sep-3 activity. Result: real
project threads in the sidebar 154 → 39. Undo:
~/.claude/projects-archive/20260904-sidebar-cleanup/RESTORE.sh
(exact manifest, nothing else).
Thread titles
Mechanism: append
{"type":"custom-title","customTitle":…,"sessionId":…} to
the transcript; verified on my own session first. Trap:
grep -c '"type":"custom-title"' over-counts 25:3 because
the string recurs inside recorded tool output — use
jq 'select(.type=="custom-title")'. dev-de retitled six
other live threads at 18:45 EDT in a consistent "rdmsm4x: dev-df has no
transcript to title.
Also measured, not acted on
net/grafanahas 2 unpushed commits owned by live session dev-9e, one of which (d327491, SEC-20260904-01) removes a fleet SSH password frompush_to_host.exp. The commit itself records that the password remains in history on origin/backup/fleet; repo is PRIVATE. Rotation is Rich's action. Not pushed — live-owned, and pushing changes nothing about exposure.- 39 repos show
?? docs/(untracked generated docs) — noise, not work.sites/dev.ecs0.nethas 96 dirty entries (in-flight wiki regeneration, includes this session's ticket HTML export). - Budget:
usage_statusadvice=hold driven solely by OpenAI at 100%; Anthropic 57% 5h / 12% 7d, proceed. One Anthropic subagent spawned; announced here.
Own measurement errors this session (caught before narrating)
find -newermt '-30 minutes' silently matched nothing on
BSD find; ps -p | tail -1 returned tail's exit code;
substring grep inflated the title count 8×; sorting
stat %H:%M without the date. Same class every time — a
check returning a plausible value for a question it did not ask.
How to undo
- Sidebar:
RESTORE.shabove. - Titles: truncate each transcript to the byte offset in
undo-offsets.txt(scratchpad), or append a new custom-title. - Ticket:
ticket resolve ISSUE-20260904-13if the owner disputes it.
Outstanding — Rich
- Rotate the fleet SSH password (SEC-20260904-01). It is in git history on three remotes of a private repo.
- ISSUE-20260904-13 needs a decision on where the split lives (ecs0lib exposing the terms vs RTTy reading the counters).
- The offline Remote Control entries in ListAgents (≈23) are server-side registrations; nothing local removes them.