Review: Right-side validation pipeline — /validate-ticket + flow fixes + merge hook
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type — Feature
- [x] Lineage — References companion #161 (closed)
- [x] Repo — forgejo_admin/claude-custom
- [x] User Story — Present, well-formed
- [x] Context — Thorough, includes 5 enumerated gaps
- [x] File Targets — Present with create/modify/not-touch sections
- [x] Acceptance Criteria — 7 ACs + 3 test expectations
- [x] Test Expectations — Manual tests defined
- [x] Constraints — Present, includes migration dependency caveat
- [x] Checklist — Present
- [x] Related — Present with 6 references
Traceability
- [x] story:pm-scope — Board item label present
- [x] arch:hooks, arch:board-api — Board item labels present, both relevant
- [x] Forgejo issue — forgejo_admin/claude-custom#209, open
File Targets
- [x]
~/.claude/hooks/board-item-on-merge.sh— verified: exists, line 132 has{"column": "done"}, line 134 log says "done". Claim accurate. - [x]
~/.claude/skills/review-ticket/SKILL.md— verified: pattern file exists for reference - [x]
~/.claude/skills/validate-ticket/SKILL.md— confirmed does not exist yet (to create). Parent dir~/.claude/skills/exists. - [ ]
skill-validate-ticketpal-e-docs note — ISSUE: Issue says "create" but this note ALREADY EXISTS (id: 841, status: active, project: pal-e-agency). AC 6 is pre-satisfied. File target should say "verify/update" not "create". - [x]
sop-board-workflowblockcode-11— verified stale: showsneeds_approval → donewith novalidation. Column Semantics table correctly includesvalidation. Same SOP, contradictory content, exactly as described. - [x]
agent-workflowblockcode-13— verified stale: showsQA → donewith noneeds_approvalorvalidation - [x]
agent-workflowanchorthe-flow(12-step list, blocklist-21) — verified: steps go Deploy (11) → Update (12) with no Validation step between them - [x]
template-validation— confirmed exists and is complete. Not-touch designation correct.
Repo Placement
OK. Issue filed on
forgejo_admin/claude-custom which owns the hooks and skills directories. Doc updates target pal-e-docs (separate system) but are executed via MCP tools from the same agent context. No repo mismatch.Dependencies
- [x] Companion #161 (left-side scope review pipeline) — CLOSED. No blocker.
- [x]
validationcolumn in board schema — VERIFIED EXISTS. API acceptscolumn=validationfilter and returns empty list (not error). The constraint about alembic migration is already satisfied. - [x]
template-validation— EXISTS and complete. No blocker. - [x]
skill-validate-ticketnote — ALREADY EXISTS (id: 841). Scope inaccuracy in issue (see File Targets). - [ ] Board item #519 (Validation-gate hook — block done without validation proof) — in backlog. Related to gap 4 in Context. Issue mentions gap 4 but does NOT include it in AC or Decomposition. Relationship is unclear — is it in scope or out of scope? Needs explicit statement.
Acceptance Criteria
- AC 1-3 (doc fixes): Verifiable by reading pal-e-docs blocks via MCP after update. Specific block IDs given.
- AC 4 (merge hook): Verifiable by reading line 132 of board-item-on-merge.sh after change.
- AC 5 (validate-ticket skill): Verifiable by checking file existence at
~/.claude/skills/validate-ticket/SKILL.md. - AC 6 (skill-validate-ticket note): PRE-SATISFIED. Note already exists. Needs removal or rephrasing.
- AC 7 (end-to-end): Integration-level test requiring actual merge + board observation. Manual only, not agent-automatable.
Assessment: 6 of 7 ACs are testable. AC 6 is already done and should be updated. AC 7 is manual integration.
Blast Radius
- board-item-on-merge.sh: Changing "done" to "validation" affects ALL merged PRs across ALL boards. Any workflow assuming merge=done will break. Three additional references to "done" in the same file (lines 54, 89, 134 — log/fallback messages) should also be updated for consistency.
- No other hooks move items to "done" on merge. Blast radius is contained to this one hook file.
- check-board-advance.sh: Only enforces left-side gates (backlog→todo, todo→next_up). Does NOT enforce validation→done. Gap 4 is tracked separately as board item #519.
- Settings.json: board-item-on-merge.sh already registered. No settings change needed for the hook fix.
- Rollback: Straightforward — revert the one line in board-item-on-merge.sh.
Decomposition Assessment
NEEDS DECOMPOSITION. 7 AC across 3 systems (pal-e-docs blocks, shell hooks, skill files). Exceeds both the three-thing limit and five-minute rule.
The issue itself includes a well-structured decomposition recommendation for a 3-ticket split:
- Doc fixes (AC 1-3) — 3 pal-e-docs block updates. ~5 min. Independent. Dottie can execute.
- Merge hook fix (AC 4) — 1 shell file, ~4 line changes (line 132 + log/fallback references). ~5 min. Independent.
- Validate-ticket skill (AC 5, 7) — Create SKILL.md routing file. ~10-15 min. Depends on ticket 1 (docs must describe the flow before the skill references them).
Tickets 1 and 2 are independent and can be dispatched in parallel. Ticket 3 depends on ticket 1. Recommend decomposition via
template-board.Recommendation
[BODY]Fix file target:skill-validate-ticketnote should say "verify/update existing note" not "create" — note already exists (id: 841).[BODY]Fix AC 6: Remove or rephrase to "skill-validate-ticket note verified current" — it is pre-satisfied.[BODY]Fix blast radius gap: lines 54, 89, 134 of board-item-on-merge.sh also reference "done" in log/fallback messages — include those in file targets for the merge hook change.[BODY]Clarify gap 4 (validation→done enforcement hook): listed in Context section but absent from AC and Decomposition. It is tracked separately as board item #519 — state this explicitly to prevent agent confusion about whether it is in or out of scope.[DECOMPOSE]7 AC across 3 systems, self-recommends 3-ticket split. Execute decomposition via template-board. Tickets 1+2 parallel, ticket 3 depends on ticket 1.