Re-Review: Upgrade story: label to hard-block + Task type routing

review-395-2026-03-26-v2 Review

review ready

Verdict: READY

Re-Review Context

This is a re-review of board item #395 (Forgejo issue forgejo_admin/claude-custom#167). The original review (review-395-2026-03-26) returned NEEDS_REFINEMENT with two items:
  • Line 8 comment header in check-board-item.sh says "recommended — warn, don't block" but would be stale after the change. Needed to be added to File Targets.
  • session-start-context.sh lines 558-561 list Bug/Feature/Spike but not Task. Flagged as discovered scope (not a blocker).
Comment 3 on the Forgejo issue addresses both: adds line 8 as an explicit file target with before/after text, and acknowledges session-start-context.sh as separate discovered scope.

Template Completeness

Issue body + all 3 comments combined:
  • [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 — 3 targets across body + comments
  • [x] Acceptance Criteria — 7 criteria across body + Comment 1
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related

File Targets

  • [x] hooks/check-board-item.sh lines 48-51 — VERIFIED. Line 49-50 contain WARNINGS="${WARNINGS:+${WARNINGS} }Consider adding a 'story:' label...". Matches ticket's "Current" snippet exactly. Change to ERRORS pattern.
  • [x] hooks/check-board-item.sh line 8 — VERIFIED (added by Comment 3). Currently reads # - labels includes a story: label (recommended — warn, don't block). Comment 3 specifies changing to (required). Previous review's refinement item #1 is resolved.
  • [x] hooks/check-issue-template.sh lines 33-38 — VERIFIED (added by Comment 1). Case statement handles Bug, Spike, Nit-Bundle, and * (default feature). No Task|task) branch. Task falls through to template-issue-feature.
  • [x] template-issue-task note in pal-e-docs — VERIFIED. Exists (active, has required headings ### Type, ### Scope, ### Acceptance Criteria, ### Related). Dependency satisfied.

Repo Placement

OK. All file targets in forgejo_admin/claude-custom. Matches Repo field. Single-repo change.

Dependencies

  • template-issue-task must exist before hook ships — already exists in pal-e-docs. No blocker.
  • Board item #377 (claude-custom #166, arch:enforcement convention) in todo — related, not blocking.
  • Board item #396 (claude-custom #168, "Remove plan/phase hooks") in todo — related cleanup, not blocking.
  • No items in in_progress conflict with this ticket's file targets.

Acceptance Criteria

Original (4 criteria): All agent-verifiable. "DENIED without story:" testable via hook invocation. "Deny message includes explanation" testable by output inspection. "WITH story: succeeds" and "existing items unaffected" both testable.
Scope addition — Comment 1 (3 criteria): All agent-verifiable. "Recognizes Task" testable. "Task-type requires only Type/Scope/Acceptance Criteria/Related" testable against template pre block. "Feature/Bug/Spike unchanged" testable as regression.
No missing criteria detected.

Blast Radius

  • Dead WARNINGS code (nit): After moving story: from WARNINGS to ERRORS, the WARNINGS variable (line 31) and advisory output block (lines 67-76) become dead code — story: was the only WARNINGS producer. Implementing agent should either remove the dead code or add a comment preserving it for future advisory labels. Not a scope gap — a cleanup nit.
  • session-start-context.sh Task gap (discovered scope): Lines 558-561 list Bug, Feature, Spike but not Task. Acknowledged in Comment 3 as separate scope. No Forgejo issue exists for it yet. Not a blocker for this ticket.
  • Existing unlabeled board items: Several board items lack story: labels. Hook only fires on creation, so existing items unaffected. Board item #398 (claude-custom #170 "Board hygiene") already tracks this cleanup.
  • Line 48 inline comment: Line 48 reads # Check labels (recommend story: label). Should be updated to "require" when line 8 is updated. Minor — implementing agent will naturally catch this when modifying lines 48-51.

Recommendation

No action needed. Previous review's two refinement items are resolved:
  • Line 8 comment header — explicitly added as file target in Comment 3 with before/after text.
  • session-start-context.sh Task gap — acknowledged as discovered scope, correctly excluded from this ticket's scope.
Two nits for the implementing agent (not scope blockers):
  • Clean up or comment the dead WARNINGS infrastructure (lines 31, 67-76) after story: moves to ERRORS.
  • Update line 48 inline comment from "recommend" to "require" alongside the line 8 header update.