| name | validate |
| description | Verify that an implementation plan was correctly executed by running each phase's success criteria against the working tree and producing a validation report. Use after the implement skill completes, when the user asks to "validate the plan", wants a post-implementation audit, or needs to confirm a feature is fully shipped per its plan. |
| argument-hint | [plan-path] [--goal <path>] [--baseline <path>] [--scope <path>] [--acceptance <path>] |
| allowed-tools | Read, Bash(git *), Bash(make *), Glob, Grep |
| shell-timeout | 10 |
| disable-model-invocation | true |
| contract | {"produces":{"kind":"produces","meta":{"artifactKind":"validation"},"data":{"type":"object","required":"[Truncated]","properties":"[Truncated]"}},"consumes":{"reads":{"plans":"[Truncated]"},"meta":{"world":"working-tree"}}} |
Validate
You are tasked with validating that an implementation plan was correctly executed, verifying all success criteria and identifying any deviations or issues.
Input
User input (raw): $ARGUMENTS
Expected shape: an optional plan path (usually under .rpiv/artifacts/plans/), optionally followed by --goal <path> (the user's original brief, captured verbatim at run start), --baseline <path> (the run-start snapshot of paths that were ALREADY dirty before the run touched anything — a JSON file with a paths array), --scope <path> (the workflow scope floor's verdict JSON — { verdict, findings: [{ detail, where }] } — recording writes outside the plan's declared write-set for you to adjudicate), and/or --acceptance <path> (the goal-derived acceptance inventory — items: frontmatter, ids a1…, each with a runnable evidence command or a manual procedure — frozen before planning; you EXECUTE it in Step 2.10). Peel the --goal, --baseline, --scope, and --acceptance flags first; what remains is the plan path. Only if the user input above is empty, or no plan path remains after peeling, branch on the recent-plans list in the Metadata block.
Metadata
node "${SKILL_DIR}/../_shared/now.mjs"
echo
node "${SKILL_DIR}/../_shared/git-context.mjs"
echo
echo "### recent (read only in case of empty user input)"
echo "recent plans:"
node "${SKILL_DIR}/../_shared/list-recent.mjs" .rpiv/artifacts/plans 10
Steps
Step 1: Input Handling and Context Discovery
When invoked:
-
Determine context — fresh or existing conversation?
- If existing: review what was implemented in this session, then proceed to Step 2.
- If fresh: continue with the substeps below.
-
Locate the plan:
- If plan path provided, use it.
- Otherwise, branch on the
recent plans: listing in the Metadata block:
- Empty — no plans under
.rpiv/artifacts/plans/; ask the user for a path in prose.
- Exactly one entry — confirm with
ask_user_question: "Validate this plan?" with options "Validate (Recommended)" and "Pick a different path".