Skip to content

test gap: hermetic case for the normalize-owners-before-bind preflight #24

Description

@SSFSKIM

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:

  1. 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.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    tech-debtnon-blocking follow-ups tracked under the tech-debt parent

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions