Implementation Plan Generator

SkillProductivity

Epic decomposition into trackable, right-sized tasks. Three modes — audit-aware (codebase-audit reports), workflow-audit-aware (handoff.yaml with pre-rated findings), standalone (from scratch). Light convention scanning for projects without CLAUDE.md.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Implementation Plan Generator skill

What this skill tells your AI

The instructions your AI receives, as published by terryc21/workflow-audit in skills/plan/SKILL.md and read by ahel’s review.

Quick Ref: Mode detect → ingest or analyze → interactive input → understand → size → impact → phased plan → risk → test → rollback → write → proceed.

YOU MUST EXECUTE THIS WORKFLOW. Do not just describe it.

Required output: Every task MUST include Size, Urgency, Risk, ROI, Blast Radius, and LOE ratings. Do not omit these ratings.

Rating format: See radar-suite-core.md for column definitions, indicator scale, and table formatting rules.

Pre-flight: Git Safety Check

git status --short

If uncommitted changes exist:

AskUserQuestion with questions:
[
  {
    "question": "You have uncommitted changes. Commit before proceeding?",
    "header": "Git",
    "options": [
      {"label": "Commit first (Recommended)", "description": "Save current work so you can revert if this skill modifies files"},
      {"label": "Continue without committing", "description": "Proceed — I accept the risk"}
    ],
    "multiSelect": false
  }
]

If "Commit first": Ask for a commit message, stage changed files, and commit. Then proceed.


Golden Rule

Plans describe WHAT to change and WHERE — never HOW.

A plan task says: "Add keyboard dismissal to AddItemView.swift:45-80 and EditItemView.swift:32-60. Acceptance: tapping outside any text field dismisses the keyboard."

A plan task does NOT say: "Add .onTapGesture { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder)...) }"

Exception: Include code (≤10 lines) ONLY when referencing an existing pattern in the repo, showing a required API signature, or documenting a known framework gotcha. The two worked examples at the end of this file show the calibration.

Step 1: Mode Detection

Detect which mode to run in: audit-aware, workflow-audit-aware, or standalone.

# Check for codebase audit reports
Glob pattern=".agents/research/*-codebase-audit.md"
Glob pattern=".agents/research/*-tech-reportcard.md"

# Check for workflow audit handoff
Glob pattern=".workflow-audit/handoff.yaml"

Decision logic:

ConditionMode
User passes --workflow-auditWorkflow-audit-aware (error if no handoff found)
User specifies audit modeAudit-aware (error if no report found)
User specifies standalone modeStandalone (ignore all reports)
.workflow-audit/handoff.yaml found AND audit_date <14 daysWorkflow-audit-aware
Codebase audit report found AND <14 days oldAudit-aware
Report found AND ≥14 days oldStandalone (warn: "Stale audit report found — run /codebase-audit for fresh data")
Both workflow-audit and codebase-audit foundWorkflow-audit-aware takes priority (more specific)
No report foundStandalone

Parse the report filename date: YYYY-MM-DD-codebase-audit.md or YYYY-MM-DD-tech-reportcard.md. Parse audit_date from handoff.yaml for workflow-audit mode.

If multiple reports exist, use the most recent one.

Mode summary:

ModeSourceRatings Pre-computed?Convention Scan?
Audit-aware.agents/research/*-codebase-audit.mdNo — extract and rateNo — uses audit context
Workflow-audit-aware.workflow-audit/handoff.yamlYes — use as-isYes — if no CLAUDE.md
StandaloneUser-provided task descriptionNo — rate from scratchYes — if no CLAUDE.md

Output:

## Mode: [Audit-Aware / Workflow-Audit-Aware / Standalone]
Report: [filename or "none"]
Report age: [N days or "n/a"]
Staleness warnings: [count or "none"]

Step 2A: Audit Ingest (audit-aware mode only)

Skip this step in standalone mode — go to Step 2B.

Read the audit report and extract structured data.

Read file_path=".agents/research/[report-filename]"

Parse grades

Look for the GRADES_YAML HTML comment block first:

<!-- GRADES_YAML
categories:
  - name: Architecture
    score: 91
    grade: A-
    ...
-->

If no YAML block, fall back to parsing the grade summary line:

**Overall: B+ (84)** (Arch A- [91] | Security C+ [77] | ...)

Extract Top 10 Issues

Scan the report for the prioritized findings list. Each finding should have:

  • Category
  • Severity (CRITICAL / HIGH / MEDIUM / LOW)
  • Description
  • File:line reference
  • LOE estimate

Detect special conditions

ConditionWhat to extract
Incomplete (I) gradeCategory name + trigger description + file:line
DO NOT SHIP recommendationAll blocker items listed under the recommendation
CRITICAL findingsFull finding details

Produce Report Digest

## Report Digest

| Source | Date | Overall Grade |
|--------|------|---------------|
| [codebase-audit / tech-reportcard] | [date] | [grade] |

### Incomplete Triggers (if any)
| Category | Trigger | File |
|----------|---------|------|
| [category] | [description] | [file:line] |

### Ship Recommendation
[SHIP / CONDITIONAL SHIP / DO NOT SHIP] — [reason]

### Top Issues
| # | Category | Severity | Issue | File | LOE |
|---|----------|----------|-------|------|-----|
| 1 | [cat] | CRITICAL | [desc] | [file:line] | [Xh] |
| 2 | [cat] | HIGH | [desc] | [file:line] | [Xh] |
| ... | | | | | |

Step 2B: Codebase Analysis (standalone mode only)

Skip this step in audit-aware mode — audit already did this work.

Freshness

Base all analysis on current source code only. Do not read or reference files in .agents/, scratch/, or prior audit reports (those are ingested in Step 2A only). Every finding must come from scanning the actual codebase as it exists now.

Scan the codebase for context relevant to the planned work:

# Find files related to the feature area
Glob pattern="**/*FeatureName*.swift"
Grep pattern="FeatureKeyword" glob="**/*.swift" output_mode="files_with_matches"

# Find existing patterns to follow
Grep pattern="class.*ViewModel|struct.*View.*body" glob="**/*.swift" output_mode="files_with_matches"

# Find dependencies that will be affected
Grep pattern="import.*ModuleName|ModuleName\\." glob="**/*.swift" output_mode="files_with_matches"

# Find test files for affected areas
Glob pattern="Tests/**/*FeatureName*Tests.swift"

Produce:

Related Code Table

File/ModuleRelevanceNotes
[path]High/Med/Low[How it relates]

Patterns to Follow Table

PatternExample LocationApply To
[Pattern name][File path][Where to use]

Dependencies Table

This Feature Depends OnType
[Module/file]Required/Optional
This Feature Will AffectImpact
[Module/file]High/Med/Low

Step 2C: Workflow Audit Ingest (workflow-audit-aware mode only)

Skip this step in audit-aware or standalone mode.

Read the workflow audit handoff brief and ingest pre-rated findings.

Read file_path=".workflow-audit/handoff.yaml"

Parse Handoff Brief

Extract:

  • project, audit_date, source_files_scanned
  • summary counts (critical/high/medium/low)
  • All issues[] with their pre-computed ratings

Ratings are pre-computed — do NOT re-rate issues from the handoff brief. The audit skill already applied the rating system. Use the ratings as-is for planning.

Staleness Check

Compare file_timestamps from the handoff against current file modification dates:

# For each file in file_timestamps, check if it changed
stat -f "%Sm" -t "%Y-%m-%dT%H:%M:%SZ" "<file path>"

If files changed since audit:

  • List changed files and affected issue IDs
  • Warn but do NOT block: "These issues may need spot-checking during implementation"
  • Flag affected issues in the plan output

If audit_date >14 days old:

  • Warn: "Workflow audit is stale — consider re-running /workflow-audit for fresh data"

Group Hint Processing

Read group_hint values from issues. Use them as suggestions for task grouping in Step 7:

  • Issues sharing a group_hint are candidates for a single task
  • Respect T-shirt sizing rules — don't create L-sized tasks just to honor hints
  • Hints are suggestions, not mandates

Produce Handoff Digest

## Handoff Digest

| Field | Value |
|-------|-------|
| Project | [name] |
| Audit Date | [date] |
| Files Scanned | [count] |
| Total Issues | [count] |

### Issue Summary (from audit)

| # | Finding | Urgency | Risk: Fix | Risk: No Fix | ROI | Blast Radius | Fix Effort | Group Hint | Stale? |
|---|---------|---------|-----------|--------------|-----|--------------|------------|------------|--------|
| 1 | [finding] | [urgency] | [risk_fix] | [risk_no_fix] | [roi] | [blast] | [effort] | [hint] | [Yes/No] |

### Staleness Warnings (if any)
| File | Audit Date | Current Date | Affected Issues |
|------|------------|--------------|-----------------|
| [path] | [date] | [date] | #1, #4 |

Step 2D: Light Convention Scanning (workflow-audit-aware and standalone modes)

Skip in audit-aware mode (codebase audit provides enough context). Skip if project has a comprehensive CLAUDE.md (>100 lines with code patterns).

Detect project conventions automatically when no CLAUDE.md is available:

# Platform targets
grep -r "#if os(" Sources/ | head -5

# Data framework
grep -rl "@Model" Sources/ | head -3          # SwiftData
grep -rl "NSManagedObject" Sources/ | head -3  # CoreData
grep -rl "GRDB" Sources/ | head -3             # GRDB

# Feedback patterns
grep -rl "HapticManager\|UINotificationFeedbackGenerator" Sources/ | head -3
grep -rl "ToastManager\|toast\|snackbar" Sources/ | head -3

# Confirmation patterns
grep -rl "\.alert.*destructive\|confirmationDialog" Sources/ | head -3

# Navigation pattern
grep -rl "NavigationSplitView\|TabView\|NavigationStack" Sources/ | head -3

Output: Detected Conventions Table

Display before planning begins:

## Detected Conventions

| Convention | Detected | Evidence |
|------------|----------|----------|
| Platforms | iOS + macOS | `#if os(iOS)` in 45 files |
| Data Framework | SwiftData | `@Model` in 12 files |
| Haptic Feedback | Yes | `HapticManager` in 8 files |
| Toast/Notifications | Yes | `ToastManager` in 15 files |
| Confirmation Dialogs | Yes | `.alert` with destructive in 22 files |
| Navigation | NavigationSplitView + TabView | Split view in 3 files, TabView in 1 |

This informs fix planning (e.g., "this project uses HapticManager, so feedback fixes should use it too").


Step 3: Interactive Input

IMPORTANT: Use AskUserQuestion to gather requirements.

Common questions (both modes)

AskUserQuestion with questions:
[
  {
    "question": "What type of work are you planning?",
    "header": "Work Type",
    "options": [
      {"label": "New feature", "description": "Adding new functionality to the app"},
      {"label": "Bug fix / improvement", "description": "Fixing issues or enhancing existing features"},
      {"label": "Refactoring", "description": "Restructuring code without changing behavior"},
      {"label": "Audit remediation", "description": "Fixing findings from a codebase audit or report card"}
    ],
    "multiSelect": false
  },
  {
    "question": "What is your risk tolerance?",
    "header": "Risk",
    "options": [
      {"label": "Conservative", "description": "Minimize risk, smaller incremental changes"},
      {"label": "Balanced", "description": "Reasonable risk for reasonable gains"},
      {"label": "Aggressive", "description": "Accept higher risk for faster delivery"}
    ],
    "multiSelect": false
  },
  {
    "question": "What is your timeline?",
    "header": "Timeline",
    "options": [
      {"label": "Urgent (days)", "description": "Must ship this week"},
      {"label": "Normal (1-2 weeks)", "description": "Standard development cycle"},
      {"label": "Flexible (weeks+)", "description": "No immediate deadline"}
    ],
    "multiSelect": false
  }
]

Scope question (audit-aware and workflow-audit-aware modes)

After the common questions, also ask:

AskUserQuestion with questions:
[
  {
    "question": "What scope should the plan cover?",
    "header": "Scope",
    "options": [
      {"label": "Blockers only", "description": "Incomplete triggers + DO NOT SHIP items only"},
      {"label": "Top 10 issues", "description": "The 10 highest-priority findings from the report"},
      {"label": "All findings", "description": "Comprehensive plan covering every finding"},
      {"label": "Pick specific items", "description": "I'll choose which findings to include"}
    ],
    "multiSelect": false
  }
]

If "Pick specific items" is selected, present the numbered findings list and ask which to include.

In standalone mode, ask for the feature/task description if not already provided via command arguments.


Step 4: Understanding Phase

Standalone mode output

Feature Summary Table
AspectDetails
What[Restate the feature/task in your own words]
Why[User benefit or business value]
Scope[What's included and excluded]
User Stories Table
#As a...I want...So that...
1[user type][capability][benefit]
2[user type][capability][benefit]
Acceptance Criteria Table
#CriterionHow to Verify
1[What must be true][Test or check]
2[What must be true][Test or check]

Audit-aware mode output

Issue Summary Table
#CategoryIssueUrgencyRiskROIBlastLOEBlocker?
1[cat][short description]H/M/LH/M/LH/M/LH/M/L[Xh]Yes/No
2[cat][short description]H/M/LH/M/LH/M/LH/M/L[Xh]Yes/No

Blocker? = Yes if the finding is an Incomplete trigger or DO NOT SHIP item.


Step 5: T-Shirt Sizing

Apply T-shirt sizes to every task before building the phased plan.

Size Definitions

SizeFiles TouchedTypical ScopeTarget
S1-2 filesSingle fix, one-liner, config changeCombine sequential S tasks into one work unit
M3-5 filesFeature area fix, cross-cutting concernIdeal task size — most tasks should be M
L5+ filesArchitectural change, multi-system refactorSplit into 2-3 M tasks

Sizing Rules

  1. Target M — Most tasks should touch 3-5 files. This is the sweet spot for reviewable, testable work units.
  2. Combine S — Two or three sequential S tasks in the same area become one M task.
  3. Split L — Any task touching 5+ files must be split. Find natural boundaries (model vs view vs tests).
  4. Minimize overlap — Tasks in the same phase should not modify the same files. If two tasks both touch ItemListView.swift, combine them or reorder to eliminate conflicts.
  5. Count tests separately — If a task requires test changes, the test file counts toward the file total.

Sizing Output

After sizing, annotate each task:

Task: "Add keyboard dismissal to item entry forms"
Size: M (4 files: AddItemView, EditItemView, AddItemViewModel, EditItemViewModel)

Step 6: Impact Analysis Table

AreaFiles AffectedRisk LevelNotes
Models[list]High/Med/Low[details]
ViewModels[list]High/Med/Low[details]
Views[list]High/Med/Low[details]
Services/Managers[list]High/Med/Low[details]
Tests[list]High/Med/Low[details]

In audit-aware mode, populate this table from the report findings. Group findings by area and aggregate risk levels.


Step 7: Implementation Plan Table

Audit-aware mode

Include Phase A: Blockers as the first phase if there are Incomplete triggers or DO NOT SHIP items.

Phase#TaskSizeFilesUrgencyRiskROIBlastLOEDepends On
A: Blockers1[Incomplete trigger / DO NOT SHIP fix]M[files]CriticalHH[scope][Xh]-
A: Blockers2[Next blocker fix]M[files]CriticalHH[scope][Xh]-
B: High Priority3[HIGH severity fix]M[files]HMH[scope][Xh]Phase A
B: High Priority4[HIGH severity fix]M[files]HMH[scope][Xh]Task 3
C: Medium Priority5[MEDIUM finding]M[files]MMM[scope][Xh]Phase B
D: Low / Polish6[LOW finding / improvement]S[files]LLM[scope][Xh]-

Each task row MUST include:

  • Size: S/M/L (from Step 5)
  • Urgency: How soon this needs to happen (Critical/H/M/L)
  • Risk: What could go wrong (H/M/L)
  • ROI: Value delivered per effort (H/M/L)
  • Blast: How much of the app is affected (H/M/L or specific scope like "ItemList feature")
  • LOE: Estimated hours
  • Depends On: Task # or Phase that must complete first

Standalone mode

Same table structure, but no Phase A: Blockers. Use standard phasing:

Phase#TaskSizeFilesUrgencyRiskROIBlastLOEDepends On
A: Foundation1[Foundation task]M[files]HLH[scope][Xh]-
B: Core Logic2[Core implementation]M[files]HMH[scope][Xh]Phase A
C: UI Integration3[UI work]M[files]MMH[scope][Xh]Phase B
D: Polish4[Polish / edge cases]S[files]LLM[scope][Xh]Phase C

Task traceability

In audit-aware and workflow-audit-aware modes, every task MUST trace back to its source finding(s):

Task 3: "Fix actor isolation in BackgroundSyncManager"
Source: Audit finding #4 (Concurrency, HIGH)
Size: M (3 files: BackgroundSyncManager.swift, SyncService.swift, SyncServiceTests.swift)
Task 2: "Add confirmation dialogs to 5 destructive actions"
Source: Workflow-audit issues #3, #5, #8, #11, #14 (missing_confirmations)
Size: M (5 files)
Stale: No

Group related findings into single M-sized tasks where they share the same files or logical area. Do NOT create one task per finding — combine related findings. In workflow-audit mode, use group_hint as a starting point for grouping.


Step 8: Risk Assessment Table

RiskLikelihoodImpactMitigationPhase
[Risk description]High/Med/LowHigh/Med/Low[How to mitigate][Which phase]

In audit-aware mode, seed this table from cross-domain correlations in the report (e.g., concurrency issues that affect data persistence).


Step 9: Test Plan Table

Test TypeWhat to TestPriorityPhase
Unit[Functionality]High/Med/Low[Phase letter]
Integration[Functionality]High/Med/Low[Phase letter]
UI[Functionality]High/Med/Low[Phase letter]

The Phase column ties each test to its implementation phase — tests for Phase A tasks are written/run during Phase A.


Step 10: Rollback Strategy Table

PhaseScenarioRollback Action
[Phase letter][What could go wrong][How to undo]

Per-phase rollback ensures each phase can be independently reverted if needed.


Step 11: Write Output

Display the full implementation plan inline (mode, digest/analysis, feature spec, sizing, impact, phased plan, risks, test plan, rollback), then write to .agents/research/ for future reference:

Write file_path=".agents/research/YYYY-MM-DD-implementation-plan.md" content="[full plan output]"

Use today's date. Include all tables, the mode header, and the report digest (if audit-aware).


Step 12: Deliverables + Proceed

Deliverables Checklist

DeliverableStatus
Mode detectionDone
Report digest (audit) / Codebase analysis (standalone)Done
Feature spec / Issue summaryDone
T-shirt sizingDone
Impact analysisDone
Phased implementation planDone
Risk assessmentDone
Test planDone
Rollback strategyDone
Written to fileDone

Ready to Proceed?

AskUserQuestion with questions:
[
  {
    "question": "How would you like to proceed?",
    "header": "Action",
    "options": [
      {"label": "Start Phase A", "description": "Begin implementation with the first phase"},
      {"label": "Refine the plan", "description": "Discuss or adjust before starting"},
      {"label": "Save for later", "description": "Plan is saved — pick it up anytime"}
    ],
    "multiSelect": false
  }
]

Worked Example: Standalone Mode (Abbreviated)

User: "/plan add search feature"

Step 1: Mode = Standalone (no audit reports found)
Step 2B: Codebase analysis — found ItemListView, ItemListViewModel, Item model
Step 3: Work type = New feature, Risk = Balanced, Timeline = Normal
Step 4: Feature spec — search bar filtering items by title, category, notes
Step 5: T-shirt sizing — M (4 files: ItemListView, ItemListViewModel, Item+Search, SearchTests)
Step 6: Impact — Views (1 file), ViewModels (1 file), Models (1 extension), Tests (1 file)
Step 7: Plan
  Phase A: Add searchText @State + .searchable to ItemListView (M, 3 files)
  Phase B: Unit tests for filter matching (S, 1 file)
Step 8: Risk — Low (additive change)
Step 9: Tests — Unit: filter matching, empty query, case sensitivity (Phase A)
Step 10: Rollback — Revert .searchable modifier, remove filter computed property
Step 11: Written to .agents/research/2026-02-25-implementation-plan.md
Step 12: Ready to proceed?

Troubleshooting

ProblemSolution
Can't find audit reportCheck .agents/research/ for *-codebase-audit.md or *-tech-reportcard.md
Report is stale (>14 days)Run /codebase-audit or /tech-talk-reportcard first, then re-plan
Too many findings to planUse "Blockers only" or "Top 10 issues" scope to focus
Tasks too large (L-sized)Split along natural boundaries: model/view/test, or by sub-feature
Dependencies between phases unclearDraw the dependency chain from data model → service → viewmodel → view
User unclear on scopeUse standalone mode with AskUserQuestion to clarify iteratively

Worked Example: Audit-Aware Mode (Abbreviated)

User: "/plan --audit" (recent codebase-audit report exists)

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
58
Forks
6
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
plan-terryc21
Source
github.com/terryc21/workflow-audit