Review: Enforce arch: and story: labels on board items — provable traceability
Verdict: READY
Final review (2026-03-24). Third pass. Previous verdict was NEEDS_REFINEMENT -- three edits required to the Forgejo issue body. All three have now been applied. Dependency #206 (architecture ID convention) is COMPLETE (closed). Issue body is clean and ready for an executing agent.
Template Completeness
- [x] Type
- [x] Lineage
- [x] Repo -- primary clearly marked as
forgejo_admin/claude-custom - [x] User Story
- [x] Context
- [x] File Targets -- single modification target, exclusions properly listed
- [x] Acceptance Criteria -- two clean hook criteria, no stale AC
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
File Targets
- [x]
~/.claude/hooks/check-board-item.sh-- verified exists (67 lines, inode 4334595, hardlinked to~/claude-custom/hooks/). Currently validates onlytype:labels. Noarch:orstory:validation present. Clean modification target. - [x]
template-ticketnote -- verified. Label Conventions table documentsarch:{component-name}with cross-reference toconvention-architecture-ids. Correctly listed in "Files NOT to touch." - [x]
convention-architecture-idsnote -- verified exists (created by #206). Correctly listed in "Files NOT to touch."
Repo Placement
OK. Repo section now clearly states primary is
forgejo_admin/claude-custom (hook change), with forgejo_admin/pal-e-docs as secondary ("if needed"). An executing agent will know to branch and PR against claude-custom. Issue stays on pal-e-docs for cross-repo tracking, which is acceptable.Dependencies
- Board item #326 (pal-e-docs#206, "Convention: architecture component IDs") -- COMPLETE. Issue #206 closed 2026-03-24. Board item #326 in
done. Deliverables verified:convention-architecture-idsnote exists with naming pattern, examples, usage.template-ticketLabel Conventions table updated witharch:{component-name}definition. - Bidirectional labels correct: Board item #324 has
depends:326. Board item #326 hasblocks:324. - No items in
in_progressblock this ticket. Dependency satisfied. Ready to execute.
Acceptance Criteria
- [x] AC1: "Board item creation without arch: label is denied by hook" -- testable, clear.
- [x] AC2: "Board item creation without story: label gets a warning but is allowed" -- testable, clear.
- Stale AC3/AC4 (template-ticket, convention-architecture-ids) correctly removed from issue body. Only the two hook criteria remain.
Blast Radius
- Existing board items safe. Hook fires on
create_board_itemonly (confirmed -- matcher line 3). No retroactive enforcement. - sync_board bypass: The
sync_boardendpoint creates items via direct API, not through the MCP hook. Synced items will not get arch: validation. This is acceptable -- sync is a bulk import tool, not a governance path. Worth noting for future iteration. - Test Expectations are solid. Three manual test cases cover deny, warn-only, and clean-pass scenarios.
Recommendation
No action needed. All three previous refinement items have been applied to the Forgejo issue body:
- Repo section: Now says
forgejo_admin/claude-custom(primary),forgejo_admin/pal-e-docs(secondary, if needed). RESOLVED. - File Targets: Single modification target (
check-board-item.sh).convention-architecture-idsandtemplate-ticketmoved to "Files NOT to touch." RESOLVED. - Acceptance Criteria: Only two hook criteria remain. Stale AC3/AC4 removed. RESOLVED.
This ticket is READY for execution. Dependency #206 is complete. Scope is clean and unambiguous. An executing agent can pick this up immediately.