Review: Upgrade story: label to hard-block + Task type routing
Verdict: NEEDS_REFINEMENT
Template Completeness
Original issue body (Forgejo #167):
- [x] Type (Feature)
- [x] Lineage (standalone -- discovered during kanban dogfooding session 2026-03-26)
- [x] Repo (forgejo_admin/claude-custom)
- [x] User Story
- [x] Context
- [x] File Targets (with specific lines and before/after snippets)
- [x] Acceptance Criteria
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
Scope addition comment (Task type routing):
- [x] Additional File Target specified
- [x] Updated Acceptance Criteria appended
- [ ] Missing: no Constraints section for the scope addition (minor -- inherited from parent)
Template conformance is strong. All required sections present.
File Targets
- [x]
hooks/check-board-item.shlines 48-51 -- VERIFIED. Lines 48-51 contain exactly the warning pattern described:WARNINGS="${WARNINGS:+${WARNINGS} }Consider adding a 'story:' label...". The code at lines 48-51 matches the ticket's "Current" snippet precisely. - [x]
hooks/check-issue-template.shlines 33-38 -- VERIFIED. The case statement at lines 33-37 handles Bug, Spike, Nit-Bundle, and*(default to feature). No Task branch exists. Task falls through totemplate-issue-featureas described. - [x]
template-issue-tasknote exists in pal-e-docs -- VERIFIED. The note exists (id: 721, status: active) with a valid<pre><code>block containing required headings:### Type,### Scope,### Acceptance Criteria,### Related. The template is ready to be consumed by the hook.
Repo Placement
OK. Both file targets live in
forgejo_admin/claude-custom, which matches the Repo field. Single-repo change.Dependencies
- template-issue-task must exist before the hook change ships. Verified: it already exists in pal-e-docs (slug:
template-issue-task, id: 721). No blocker. - Board item #377 (claude-custom #166) is a convention item in
todowitharch:enforcement-- related but not blocking. - Board item #396 (claude-custom #168) "Remove plan/phase hooks from enforcement layer" is in
todowitharch:enforcement-- related cleanup, not blocking. - No items currently in
in_progressthat would conflict with this ticket's file targets.
Acceptance Criteria
Original (check-board-item.sh story: upgrade):
- [x] "create_board_item without story: label is DENIED" -- testable via manual hook invocation
- [x] "Deny message includes explanation and pointer to template-ticket" -- testable by inspecting output
- [x] "create_board_item WITH story: label still succeeds" -- testable
- [x] "Existing board items unaffected" -- true by design (hook only fires on create_board_item)
Scope addition (check-issue-template.sh Task routing):
- [x] "check-issue-template.sh recognizes ### Type: Task" -- testable
- [x] "Task-type issues only require: ### Type, ### Scope, ### Acceptance Criteria, ### Related" -- testable against the template's pre block
- [x] "Feature/Bug/Spike validation unchanged" -- testable as regression check
All criteria are agent-verifiable. No missing criteria detected.
Blast Radius
- WARNING: session-start-context.sh (lines 558-561) lists Bug, Feature, and Spike types but NOT Task. After the hook change ships, agents will still not know they can use
### Type\nTask. This is a downstream documentation gap -- not a blocker for this ticket, but should be tracked as discovered scope. - WARNING: check-board-item.sh comment header (line 8) says "story: label (recommended -- warn, don't block)". This comment must be updated when the code changes from warn to deny. The ticket does not mention updating the comment. Minor, but an agent might miss it.
- WARNING: Existing unlabeled board items. Several items on board-pal-e-agency have null labels or are missing
story:labels (items #65, #63, #342, #347, and others). The hook change only affects new items, so these are not broken -- but they represent tech debt that will confuse audit. Board item #398 (claude-custom #170 "Board hygiene -- label unlabeled items") already tracks this. - No other hooks use the
WARNINGSpattern -- this is the only warn-not-block in the codebase. No sibling bug.
Recommendation
Two items need refinement before READY:
- Add to File Targets: The comment header at line 8 of
check-board-item.shmust be updated from "recommended -- warn, don't block" to reflect the new deny behavior. Add this to the issue's File Targets so the implementing agent does not skip it. - Track discovered scope:
session-start-context.shlines 558-561 need a Task entry added (e.g.- Tasks: mcp__forgejo__create_issue with ### Type\nTask header. See template-issue-task.). This is a separate change (different hook, different concern). File as discovered scope or append to the scope addition comment.
Once item #1 is addressed in the issue body, verdict upgrades to READY. Item #2 is discovered scope, not a blocker.