What
review-dispatch.sh (and land-dispatch.sh, which shares the preflight) normalizes lingering finished ticket owners before binding: a claude-species implement worker has no self-finalizer, so its registry meta lingers at status=working after its turn ends, and board-bind protects it as a stable ACTIVE owner — blocking the incoming reviewer's bind. The preflight runs daemon-finalize.sh on every meta bound to the ticket so finalize settles the truth (a genuinely live owner stays live and bind still refuses, correctly).
The gap
The fix has live validation only — it is the remedy for the three retired reviewers in the 2026-07-18 ida-solution shakedown, and the ExecPlan (docs/doperpowers/execplans/2026-07-18-unattended-sweep-dispatch.md) discloses that no dedicated hermetic case exists. tests/reviewing-prs/test-review-dispatch.sh exercises the surrounding dispatch path but never seeds a stale owner.
Follow-up
Add hermetic cases to tests/reviewing-prs/test-review-dispatch.sh:
- Seed a stale
status=working meta bound to the target ticket in a fake DAEMON_HOME; run dispatch; assert the meta was finalized and the reviewer's bind succeeded.
- Counter-case: a genuinely live owner (finalize keeps it live) → assert bind refuses and the reviewer is retired cleanly.
Noted as non-blocking in the PR #23 pre-merge review; filed instead of blocking the merge.
What
review-dispatch.sh(andland-dispatch.sh, which shares the preflight) normalizes lingering finished ticket owners before binding: a claude-species implement worker has no self-finalizer, so its registry meta lingers atstatus=workingafter its turn ends, and board-bind protects it as a stable ACTIVE owner — blocking the incoming reviewer's bind. The preflight runsdaemon-finalize.shon every meta bound to the ticket so finalize settles the truth (a genuinely live owner stays live and bind still refuses, correctly).The gap
The fix has live validation only — it is the remedy for the three retired reviewers in the 2026-07-18 ida-solution shakedown, and the ExecPlan (
docs/doperpowers/execplans/2026-07-18-unattended-sweep-dispatch.md) discloses that no dedicated hermetic case exists.tests/reviewing-prs/test-review-dispatch.shexercises the surrounding dispatch path but never seeds a stale owner.Follow-up
Add hermetic cases to
tests/reviewing-prs/test-review-dispatch.sh:status=workingmeta bound to the target ticket in a fakeDAEMON_HOME; run dispatch; assert the meta was finalized and the reviewer's bind succeeded.Noted as non-blocking in the PR #23 pre-merge review; filed instead of blocking the merge.