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
Replace the current kennel status per-repo block with the layout below. The Doing: line is removed entirely.
Layout
Each repo emits exactly these lines, in this order:
Worker summary — <repo>: fido <state> — <compact stats>. If nobody is currently talking to claude for this repo, claude stats (pid, uptime, session-alive) attach inline to this line.
Issue: #N — <title> (elapsed Xm)
PR: #N — <title> (when a PR exists)
Worker thread details — the worker thread's own state (idle / in-session / waiting on approval / waiting on CI / waiting on threads). If the worker thread is the one talking to claude, claude pid/stats attach to this line.
Webhook threads — indented list, up to 5 entries, plus +N more summary line when there are more than 5. Each line: description + elapsed. If a webhook thread is the one talking to claude, its line sorts to the top of the webhook section and claude pid/stats attach to it.
At most one thread per repo may be talking to claude at any moment. Concurrent registration raises ClaudeLeakError → os._exit(3). So the display only ever has to show claude stats on one line per repo. If we ever want to show two, that's a bug — halt loud.
Changes this ticket owns
Remove the Doing: line from _format_repo_body entirely
kind=webhook → that webhook's line, sorted to top of the webhook list
none → inline on the worker summary line
Cap webhook list at 5 with +N more overflow
Fix the pgrep-vs-persistent-session mismatch by using the kennel-tracked pid (expose via /status payload, drop the pgrep lookup)
Separate worker-thread worker_what from webhook-thread activity — the two had been multiplexing through the same field, causing the old Doing: handling webhook action noise
Out of scope
Actually routing webhook handlers through the persistent session (so register_talker webhook-kind entries go away) — that's separate follow-up work. This ticket only makes the display honest about what's already happening.
Replace the current
kennel statusper-repo block with the layout below. TheDoing:line is removed entirely.Layout
Each repo emits exactly these lines, in this order:
<repo>: fido <state> — <compact stats>. If nobody is currently talking to claude for this repo, claude stats (pid, uptime, session-alive) attach inline to this line.Issue: #N — <title> (elapsed Xm)PR: #N — <title>(when a PR exists)+N moresummary line when there are more than 5. Each line: description + elapsed. If a webhook thread is the one talking to claude, its line sorts to the top of the webhook section and claude pid/stats attach to it.Exclusivity invariant (already landed in #475)
At most one thread per repo may be talking to claude at any moment. Concurrent registration raises
ClaudeLeakError→os._exit(3). So the display only ever has to show claude stats on one line per repo. If we ever want to show two, that's a bug — halt loud.Changes this ticket owns
Doing:line from_format_repo_bodyentirelyClaudeTalker(already exposed in /status since ClaudeTalker registry + session_alive + halt on leak (closes #473) #475) and route claude stats to the correct line:kind=worker→ worker thread details linekind=webhook→ that webhook's line, sorted to top of the webhook list+N moreoverflowworker_whatfrom webhook-thread activity — the two had been multiplexing through the same field, causing the oldDoing: handling webhook actionnoiseOut of scope
Actually routing webhook handlers through the persistent session (so
register_talkerwebhook-kind entries go away) — that's separate follow-up work. This ticket only makes the display honest about what's already happening.