Enforce backlog-first column on create_board_item hook #211

Closed
opened 2026-03-28 16:04:47 +00:00 by forgejo_admin · 0 comments
Contributor

Type

Feature

Lineage

  • Board: board-pal-e-agency
  • Story: story:pm-scope
  • Arch: arch:hooks, arch:board-api

Repo

claude-custom

User Story

As the PM, when I create a new board item, the hook should enforce that it lands in backlog (or in_progress for incidents). Currently check-board-item.sh validates labels but does NOT validate the target column — items can be created directly in todo, next_up, or even done, bypassing the review gate.

Context

During the 2026-03-28 validation session, Betty Sue created 3 board items directly in todo, skipping the backlog→todo review gate. Lucas caught it. The SOP (sop-board-workflow) defines backlog as the entry point for new items, but no hook enforces this.

Scope

Add column validation to check-board-item.sh:

  • column: backlog — always allowed (default for new items)
  • column: in_progress — allowed only if type:incident label present
  • Any other column — blocked with clear error message

File Targets

  • hooks/check-board-item.sh — add column validation logic

Constraints

  • Must not break incident workflow (incidents go straight to in_progress)
  • Must provide clear error message explaining why and what to do instead

Acceptance Criteria

  • create_board_item with column: backlog succeeds
  • create_board_item with column: todo is blocked
  • create_board_item with column: in_progress + type:incident label succeeds
  • create_board_item with column: in_progress WITHOUT incident label is blocked

Checklist

  • Update check-board-item.sh with column validation
  • Test all 4 scenarios above
  • Update SOP if needed

Test Expectations

  • Hook returns non-zero exit for invalid column
  • Error message tells user which column is allowed
  • Parent: #210 (validation-gate hook)
  • SOP: sop-board-workflow column semantics
### Type Feature ### Lineage - Board: board-pal-e-agency - Story: story:pm-scope - Arch: arch:hooks, arch:board-api ### Repo claude-custom ### User Story As the PM, when I create a new board item, the hook should enforce that it lands in `backlog` (or `in_progress` for incidents). Currently `check-board-item.sh` validates labels but does NOT validate the target column — items can be created directly in `todo`, `next_up`, or even `done`, bypassing the review gate. ### Context During the 2026-03-28 validation session, Betty Sue created 3 board items directly in `todo`, skipping the backlog→todo review gate. Lucas caught it. The SOP (sop-board-workflow) defines backlog as the entry point for new items, but no hook enforces this. ### Scope Add column validation to `check-board-item.sh`: - `column: backlog` — always allowed (default for new items) - `column: in_progress` — allowed only if `type:incident` label present - Any other column — blocked with clear error message ### File Targets - `hooks/check-board-item.sh` — add column validation logic ### Constraints - Must not break incident workflow (incidents go straight to in_progress) - Must provide clear error message explaining why and what to do instead ### Acceptance Criteria - [ ] `create_board_item` with `column: backlog` succeeds - [ ] `create_board_item` with `column: todo` is blocked - [ ] `create_board_item` with `column: in_progress` + `type:incident` label succeeds - [ ] `create_board_item` with `column: in_progress` WITHOUT incident label is blocked ### Checklist - [ ] Update check-board-item.sh with column validation - [ ] Test all 4 scenarios above - [ ] Update SOP if needed ### Test Expectations - Hook returns non-zero exit for invalid column - Error message tells user which column is allowed ### Related - Parent: #210 (validation-gate hook) - SOP: sop-board-workflow column semantics
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ldraney/claude-custom#211
No description provided.