shinpr/recipe-prepare-implementation
Verifies the work plan is implementable end-to-end and resolves verification-lane / fixture / E2E-environment gaps before the build phase begins. Use when "implement-ready/verification readiness/lane setup/E2E environment missing" is mentioned, or before any build phase begins on a work plan whose readiness has not been preflight-checked.
npx skills add https://github.com/shinpr/claude-code-workflows --skill recipe-prepare-implementation
Execute Skill: llm-friendly-context before writing Agent prompts, handoffs, or generated artifacts.
Execute Skill: subagents-orchestration-guide before making workflow decisions, invoking agents, or resolving findings.
Context: Optional readiness phase between work-plan approval and recipe-*-build. Confirms the implementation will be observable from Phase 1 onward and resolves any gaps before build execution. Exits no-op when the readiness criteria already pass, so the recipe is safe to invoke unconditionally.
Core Identity: "I am an orchestrator." (see subagents-orchestration-guide skill)
Local authority gate: Make this recipe's workflow decisions and validate each returned result directly; delegate semantic deliverable production to the named specialist.
Execution Protocol:
Work plan: $ARGUMENTS
Run before any recipe-*-build invocation when ANY of the following hold:
When none of the above hold, the readiness scan in Step 2 will find zero failing criteria and the recipe exits no-op (see Context at the top of this skill).
Each criterion is a measurable check producing pass, fail, or not_applicable with cited evidence.
| ID | Criterion | Pass evidence |
|----|-----------|---------------|
| R1 | Verification Strategy references resolve | Every command, file path, function, endpoint, and test referenced in the work plan's Verification Strategy section either exists in the codebase (verified via Glob/Grep) or is the deliverable of a task already in this plan |
| R2 | E2E preconditions addressed | When E2E skeletons exist: every precondition mentioned in skeleton comments (seed data, auth fixture, env var, external mock) is present in the codebase or covered by a Phase 0 task in this plan |
| R3 | Phase 1 observability | The first implementation phase contains at least one task whose Operation Verification Methods can execute at task completion using only artifacts that exist before the task starts (existing code, prior Phase 0 task deliverables, or the task's own outputs) |
| R4 | UI rendering surface | When the plan implements UI components: a fixture entry, dev route, Storybook story, or equivalent rendering surface exists for the impacted components, OR a Phase 0 task adds one |
| R5 | Local lane procedure | The work plan or a referenced doc records the commands needed to start the system locally for manual verification (start commands, default ports, seed steps) |
R4 and R5 are evaluated only when their triggering signals appear in the work plan; otherwise mark not_applicable.
# Verify the work plan exists
! ls -la docs/plans/*.md | grep -v template | tail -5
State check:
Read the work plan path passed in $ARGUMENTS. Extract:
For each criterion R1–R5:
pass / fail / not_applicablepass, the unresolved reference for fail, the missing trigger signal for not_applicableBuild the Readiness Report (see Output Format) regardless of outcome.
When every applicable criterion is pass (zero fail):
outcome: ready, gaps_resolved: 0When one or more criteria are fail → proceed to Step 4.
For each fail criterion:
/api/, /server/, /services/, /backend/, /handlers/, /repositories//components/, /pages/, /web/, /frontend/, /*.tsx, /*.jsxdocs/, scripts/, root-level configs, fixture data files outside the markers above) → escalate to user; ask the user to either (a) decide which layer's executor / quality-fixer should run the item, or (b) update the markers if the project uses different pathsApply the rules in the order above. The first matching rule wins; "unrecognized" is the final fallback rather than a catch-all that defaults to backend.
Present the proposed resolution item list to the user with AskUserQuestion. Proceed only after explicit approval — this is the single human gate inside this recipe.
For each approved resolution item, run execute → branch → quality-fix → commit:
backend → subagent_type: "dev-workflows-fullstack:task-executor"frontend → subagent_type: "dev-workflows-fullstack:task-executor-frontend"backend → "dev-workflows-fullstack:quality-fixer"frontend → "dev-workflows-fullstack:quality-fixer-frontend"filesModified and mutationEvidence.approvedAppend the Scope Boundary block (below) to every subagent prompt.
| Re-scan result | Action |
|----------------|--------|
| All applicable criteria pass | Exit with outcome: ready, gaps_resolved: N and final Readiness Report |
| One or more fail remain | Exit with outcome: escalated — present remaining failures to the user with the next-action recommendation. Treat the re-scan as the terminal evaluation; further resolution requires the user to re-invoke this recipe with updated inputs. |
Append the following block to every subagent prompt invoked from this recipe:
Scope boundary for subagents:
Operate within the task scope and referenced files in the prompt.
Use loaded skills to execute that scope.
Escalate when the required fix or investigation falls outside that scope.
Final report presented to the user at exit:
## Implementation Readiness Report
Work plan: [path]
Outcome: ready | escalated
Gaps resolved: [N]
### Readiness Criteria
| ID | Result | Evidence |
|----|--------|----------|
| R1 | pass / fail / not_applicable | [file:line OR "missing: <unresolved reference>"] |
| R2 | ... | ... |
| R3 | ... | ... |
| R4 | ... | ... |
| R5 | ... | ... |
### Resolution Items Executed (when gaps_resolved > 0)
- [criterion ID] — [one-line summary] — committed
- ...
### Remaining Gaps (when outcome is escalated)
- [criterion ID]: [unresolved reference] — Next action: [recommendation]
pass, OR resolution items planned, approved, and executed via the 4-step cycleTake shinpr/recipe-prepare-implementation from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.