Block a user
#324: read task.turnId once in finishAsyncTask; analysis of the wider unlocked-ask asymmetry
fleetd#323: close the reload-classifier drift with a reflection coverage test
#316: re-check worktree dirtiness after the pane stops, before removing it
#318: release() no longer strands a delivery that lands while it is running
Shape check (msg/, one line each, not fixed)
Ran a read-only sweep over src/main/java/dev/ltms/fleet/msg/ for the exact shape this ticket fixed: two halves of one invariant guarded by…
#318: release() no longer strands a delivery that lands while it is running
#317: refuse an unresolved caller instead of promoting it to primary
#315: FixedPlacementPolicy now honors the retry loop's unreachable set
Shape check (report-only, per the issue's request)
I ran a delegated audit of placement/ and member/CompositePeerLauncher.java for the same shape as the bug this PR fixes: a caller/javadoc…