Review: Enforce arch: and story: labels on board items — provable traceability

review-324-2026-03-24 Review

review ready

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 only type: labels. No arch: or story: validation present. Clean modification target.
  • [x] template-ticket note -- verified. Label Conventions table documents arch:{component-name} with cross-reference to convention-architecture-ids. Correctly listed in "Files NOT to touch."
  • [x] convention-architecture-ids note -- 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-ids note exists with naming pattern, examples, usage. template-ticket Label Conventions table updated with arch:{component-name} definition.
  • Bidirectional labels correct: Board item #324 has depends:326. Board item #326 has blocks:324.
  • No items in in_progress block 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_item only (confirmed -- matcher line 3). No retroactive enforcement.
  • sync_board bypass: The sync_board endpoint 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-ids and template-ticket moved 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.