Fleet verdicts

Every session in the agent view, one terminal state each, with the evidence that settles it · 2026-08-03 · roster derived from claude agents --json --all (52 records)
38 DONE5 PARKED4 BLOCKED3 ACTIVE2 STUCK

Two decisions you made today are sitting unexecuted. You answered the Camellia Saturday rule at 12:01 and the #5236 reshape at 13:11. Both blocks still read state: open in the ledger, and the Camellia one has not been touched since 02:46 — nine hours before you answered it. Details in the first two cards.

Blocks are per-session: only the owning session can run blocked resolve, because cmd_resolve scans only its own sid. So these cannot be closed by anyone else, including this page.

How each verdict was reached, since the agent view's own text cannot be trusted for this. A row's summary is a claim — “confirm whether X” may have been answered two days ago. status: busy means only that the process said it was in a turn; two sessions below have said busy for 11 days and 21 hours with zero turns behind it. And silence is not a signal — a session that stopped without reporting has usually finished and lost the report, which happened repeatedly today.

So every verdict here rests on an instrument other than the row: the transcript on disk, the block ledger under ~/.claude/jobs/blocked/, the central answer store via bin/docs answers decisions, live PR state via gh, and ps for whether the process exists at all. Where a count appears, the matches were printed — a grep returning zero is evidence about the grep.

Needs you — 11 sessions

Sorted by how directly a human unblocks it. The first three are the expensive ones: two are decisions you already made today that are sitting unexecuted, and one is a session that has been waiting two days for a keystroke.

PARKED saga-consolidate-v2 1da321db

Waiting on you to type /compact — since Aug 1. Nothing else is wrong with it.

Still open — and who owns it

Run /compact in that session. That is the entire ask; it resumes itself.

PARKED tour-saturday-rule 616c7e1f

One production write away from done. It has the write ready, refuses to route around the gate that stops it, and is right to refuse.

Still open — and who owns it

Run the one prod write, or grant the permission. This is no longer a decision — you have made it, the session has verified it in both stores and resolved its block correctly. It is a single gated write that needs a human's hands. Until then Camellia keeps accepting same-day Saturday tours.

PARKED stale-pr-triage fa126b98

You answered this at 13:11 today. Two of its three blocks got executed; this one did not.

Still open — and who owns it

Nothing new is needed from you — this is an execution gap. fa126b98 must resolve its own block and reshape #5236. Worth a nudge, not a decision.

BLOCKED smith-fail-flags-v2 562c7fae

It found production data loss and stopped there. Nobody owns the finding.

Still open — and who owns it

Does anyone own “the agent-smith posts ledger lost 2,143 rows and re-creates itself empty”? No PR, no issue, no session is carrying it.

BLOCKED collections c749a11f

Shipped, then proved itself PARTIAL against prod: $70,100.77 is invisible on the page it built.

Still open — and who owns it

Should /collections show 0–30 day arrears, or say out loud that it is hiding them? A product decision, not a bug fix.

BLOCKED outbound-record-v3 ad8b46c6

Proved its own invariant cannot hold where it was placed. Issue #4911 is open on origin/main.

Still open — and who owns it

Nobody owns moving the ADR-0119 fence from entry points down to the carriers. Until that happens #4911 reopens by construction.

BLOCKED saga-consolidate d1b5d6d3

#4846 met at the layer it was written for, PARTIAL at the layer it was written for the sake of.

Still open — and who owns it

Same root as ad8b46c6 above — the orphan-send class does not close until the fence moves to the carrier layer. These two are one problem with two sessions parked on it.

PARKED primary 8da7e4b4

The fleet ledger it was built to keep. It reconciled, produced three questions for you, and stopped.

Still open — and who owns it

Three questions were raised for you and never made it onto a decision page — #5130 (PII in logs) is the one it flagged as not-a-residual. They are in LEDGER.md, not in the block ledger, so nothing will re-surface them.

PARKED tree a228b87c

Not fleet work — your Austin tree-permit consultation. Three items need you.

Still open — and who owns it

Three photo/paperwork items only you can supply. Listed here because it sits in the same agent view and looks identical to a stalled engineering session — it isn't one.

STUCK propflow-b9 8f1d6d4d

A zombie holding a row for 11 days. It has never run a single turn.

Still open — and who owns it

Nothing to recover — there is no work to lose. kill 47234. It is one of the “3d”-style rows that made the agent view unreadable.

STUCK propflow-docs-25 d1c99950

Zero-turn zombie showing busy for 21 hours. Its task was finished by someone else.

Still open — and who owns it

kill 14970. Nothing is lost. Worth knowing the failure mode: a session can register as busy with no process behind the claim and never start — and this is the second recorded instance on this exact task.

The 16 identical “Completed” rows — one line, not sixteen

All 16 are DONE, and they are the same event. A fan-out delivery test on 2026-08-03 woke every awake session with a decision-page notice that was not theirs. Not one of them belonged to the session that received it.

Every single one checked the block ledger and declined to act. Sixteen sessions, independently, given a plausible instruction attached to a real block id and a real quote from you — and sixteen ran blocked check, found no open blocks, established the block belonged to someone else, and did nothing. Several went further unprompted: they distinguished a probe from an answer (by: probe, not gera@propflowai.co), and one noted that a resolved block with no chosen option is not a decision.

That is the healthy outcome, and it is worth saying out loud rather than burying: the fleet's default on an unverified claim is to verify and stand down, not to act. The wall of identical rows in the agent view is evidence the protocol worked, not evidence of sixteen stalled sessions.

6a7af8d4 decision-page-verification · 700a173a decision-page-verification · 2c1fd367 ledger-verify-block · b7dd0698 decision-page-ledger-verify · 923b728e broadcast ignore protocol · 68d1ffaa blocked-page verify · 5d26a281 block verification fanout · 98096c6c block verification routing · c83c964e block ownership verification · d43a62f1 ledger verification broadcast · 8cfe182b verify decision page change · d165b9f9 verify fan-out decision change · 6ad7c089 block coordination routing · 37f56e19 fan-out decision verification · 28f8dce0 ledger verification fan-out · c337df29 propflow-ee

Running right now — 3 sessions

Not a terminal state. Listed so nothing in the roster is unaccounted for.

ACTIVE god cc4ad587

The coordinator. Mid-turn right now, not terminal.

ACTIVE fleet-verdict-triage d685be6b

This session. It wrote the page you are reading.

ACTIVE docs-surface-strategy 468d7a43

Sibling child, started 14:17 today. Deciding what docs.propflowai.co should be made of, as an ADR.

Done — 22 sessions, individually verified

Each of these was checked against something other than its own summary: a merge timestamp, a CI lane, a query against prod, a commit in the log.

DONE propflowai-a3 db89c29d

Built the tour calendar the team asked for twice. PR #5308 MERGED.

DONE propflowai-29 fe50846f

Stopped paying for the same test run 3–4× per PR. PR #5309 MERGED.

DONE wt-telegram-0f 4825ca3f

Drove PR #5013 to a clean verdict. MERGED 05:46:07Z.

DONE loop-backup-verify cb989158

Its block was answered, it executed within the minute, and #4851 is MERGED.

DONE propflow-a7 97078deb

Fixed the bug that stranded your answers — the reason two decisions sat unread all afternoon.

DONE pr-backlog-triage 441e839c

Seven ownerless PRs, all seven driven to a terminal state. Nothing merged without a human.

DONE fix-5317-exit127 f299cc57

PR #5317 fixed and 🟢 after 8 review rounds. Still OPEN — deliberately.

DONE docs-tagging b6c9b983

Tagged the docs corpus — then found the tagging was already built, and found two real bugs verifying it.

DONE propflowai-45 e34a330c

Built loop-kickoff standalone, and fixed the race that dropped live #5232 from the registry.

DONE loop-kickoff-auto-1 a99f5076

Moved register-work off GraphQL onto REST. One item, announced, finished, independently re-measured.

DONE machine-hygiene-2a 7f7a4471

Executed /tmp/pr55-findings.md, then spent the day correctly declining other sessions' blocks.

DONE propflow-d0 12e4012c

Started as a WhatsApp lookup; ended up producing the diagnosis that 97078deb then shipped a fix for.

DONE propflow-00 e9b4e645

Traced the stranded-answer failure to its end and confirmed the one clean counter-example.

DONE propflow-84 a822f358

Corrected itself twice in public and landed on the right diagnosis: two answer stores.

DONE propflow-df c915717b

Called four sessions dead, then published the correction when two of them came back and did the work.

DONE propflow-96 03b18241

Ran a hypothesis, then killed it on the grounds that its own test could not discriminate.

DONE propflow-88 240764b5

Supplied the control case that narrowed the stranded-decision problem to one session.

DONE loop-kickoff-auto-1 (fork) 5cff2f82

A duplicate coordinator spawned before the fork guard existed. Both its blocks folded, nothing lost.

DONE loop-kickoff-auto-1 (fork) 0ebaeed4

The other duplicate fork. Killed 5 seconds into its first turn.

DONE loop-kickoff-auto-1 (probe) 0f9a9e38

Launcher control test. Asked for the word OK, used no tools, replied OK.

DONE kickoff-spawn-probe 4347620f

Spawn probe. Asked for four characters, produced four characters.

DONE blocked-gate-delivery-test 6be7c64a

The delivery test itself — and it passed. Both “failing” commands were behaving correctly.

What this exposed about the machinery

There were two answer stores, and parked sessions read the stale one. Answers written to the shared decisions page were invisible to blocked check, which read only blocked-<sid>. A session could poll correctly, forever, and never see your answer. Three defects lived in that one line — wrong page, -note:: keys unreadable by construction, and ::<email> bleeding into the value. 97078deb fixed all three and shipped bin/docs answers <slug> --json so callers stop scraping a human-facing table.

Reports were lost in one direction only. god→child delivery worked; child→god was silently dropped with exit 0. That is why several sessions look abandoned and are not — they finished and the report evaporated. Its mirror also bit: fa126b98 proved that no trace of a message is not evidence of non-delivery either.

A decision page that states a count goes stale as fast as the work moves. god's push question was withdrawn and re-asked twice — four commits, then six, then ten — before it was reshaped to ask by category. The categories held.

A resolved block with no reason recorded is not a decision. Four of god's blocks are in exactly that state. The tooling prints RESOLVED WITH NO REASON RECORDED for this case, and it must not be read as an answer.

Every decision page on the live site is currently stale, and the cause is one line of git. propflow-docs' local main is 3 commits behind origin/main and 2 ahead, so git push is rejected as non-fast-forward. Both bin/docs and blocked resolve push to publish — so every page they have tried to update since the divergence has failed to reach the site. That is why blocked-616c7e1f still renders its question as open on docs.propflowai.co when the ledger has it resolved. Fix is git pull --rebase in that checkout before the next publish; it was left undone here deliberately, since another session may hold the tree.

Where the five-state taxonomy strains

Two honest notes on the shape you asked for, rather than silently bending the labels to fit.

Zombies do not fit any of the five. propflow-b9 and propflow-docs-25 are live processes that never ran a turn. They are not stuck in the sense the taxonomy means (a session that tried and hit a wall) — they never started. They are filed as STUCK because that is the state that gets a human to act, and the action is one kill each. But the real category is zombie, and it is worth a sixth label if this keeps happening — it has now happened twice on the same task.

Three sessions are genuinely running, which is not a terminal state at all. They are listed under Running right now rather than forced into one, so that every one of the 52 roster records is accounted for exactly once.

Generated from the roster, not hand-copied: the generator asserts that every sessionId returned by claude agents --json --all appears in this page exactly once, and it fails rather than publishing if one is missing, duplicated, or invented. The verdict counts in the pills at the top are computed from the cards below them.

PropFlow Docs