fix: accept READY as passing verdict in check-board-advance hook #221
No reviewers
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/claude-custom!221
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "220-fix-review-vocab-mismatch"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The
check-board-advance.shhook only grepped for "APPROVED" but review agents write "READY" as the passing verdict, causing properly reviewed tickets to be blocked at the todo-to-next_up gate. Updated grep patterns to accept both keywords and added 6 new test cases.Changes
hooks/check-board-advance.sh: Updated grep patterns incheck_review_approved()to match bothAPPROVEDandREADYviagrep -qiE 'APPROVED|READY'. AddedNOT READYexclusion alongside existingNOT APPROVEDexclusion. Updated comments and deny messages to reference both keywords.tests/test_check_board_advance.sh: Added 6 new test cases (Tests 20-25): READY in body (allow), READY in blocks (allow), NOT READY in body (deny), NOT READY in blocks (deny), bulk_move with READY (allow), deny message format.Test Plan
Review Checklist
Related Notes
board-pal-e-agencyitem 638skill-review-ticketpal-e-docs note already documents both READY and APPROVED as valid verdictsPR #221 Review
DOMAIN REVIEW
Tech stack: Bash (shell scripting), jq, grep pipelines, Python mock HTTP server for tests.
Hook logic correctness:
The core change updates two grep pipelines in
check_review_approved()from:to:
This correctly handles all four verdict scenarios:
Both the body check (line 61-63 in diff) and blocks check (line 70-72 in diff) are updated identically. Deny messages in both
update_board_itemandbulk_move_board_itemsroutes updated to reference "APPROVED or READY." Comments updated throughout. All changes are symmetric and consistent.False positive risk (NIT, not a blocker): The word "ready" is common in natural language. The design spec template (
2026-03-18-review-ticket-design.mdline 140) includes the phrase "Specific actions needed before this ticket is READY" in the Recommendation section -- this appears in NEEDS_REFINEMENT verdicts. Since the grep is case-insensitive and line-based, this line would matchREADYand cause a false positive: a NEEDS_REFINEMENT review would be treated as passing.This risk existed conceptually before this PR (any text containing "APPROVED" could false-positive, though that word is far less common in natural prose). The switch to "READY" makes it a tangible risk. However, this is a pre-existing design concern in the review note template, not a flaw introduced by this PR. A future improvement could anchor the grep to
## Verdict: (APPROVED|READY)to eliminate false positives from body text. Tracking as a nit for discovered scope.Test coverage: 5 genuinely new test scenarios (Tests 20-24) plus the renumbered Test 25 (was old Test 20). Coverage matrix:
The missing cell (NOT READY in bulk_move deny) is a minor gap but acceptable -- the
check_review_approved()function is shared, so if NOT READY is blocked for single moves, it is blocked for bulk moves too. The existing Test 15 (bulk deny without review) already validates the bulk deny path.BLOCKERS
None. The change is minimal, focused, and correct.
NITS
False positive risk from "READY" in prose: As noted above, anchoring the grep to the verdict line format (
## Verdict:) would make the pattern more precise. Example:grep -iE '## Verdict:.*(APPROVED|READY)'. This is discovered scope -- file as a follow-up issue.SKILL.md vocabulary drift:
/home/ldraney/claude-custom/skills/review-ticket/SKILL.mdstill references "APPROVED" exclusively (lines 3, 9, 77, 97, 104, 105) while the design spec uses "READY." This PR correctly fixes the hook to accept both, but the skill documentation should also reference both vocabularies. Out of scope for this PR -- file separately.PR body test count: Claims "6 new test cases (Tests 20-25)" and "27 tests (21 existing + 6 new)" but Test 25 is the renumbered old Test 20, not a new test. Actual new tests: 5 (Tests 20-24). Minor documentation inaccuracy.
SOP COMPLIANCE
220-fix-review-vocab-mismatchmatches issue #220PROCESS OBSERVATIONS
VERDICT: APPROVED
3a6b98d68bto8ccedd3ac3