Skip to content
Back to skills

Implementation Plan Authoring

ASecurity

Use when you write the `plan` section of an analiz report - steps that pin files, signatures, tests and verify commands, nothing more

  • 109 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 19, 2026
ai-agentsgoapibackend

Works with

  • api

Security analysis

A100/100

Scanned October 2, 2026

npx -y skills add makifbaysal/tasktrooper --skill implementation-plan-authoring --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Implementation Plan Authoring?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Implementation Plan Authoring
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/makifbaysal-implementation-plan-authoring/badge)](https://www.skillsdirectory.com/skills/makifbaysal-implementation-plan-authoring)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: implementation-plan-authoring
category: architecture
description: Use when you write the `plan` section of an analiz report - steps that pin files, signatures, tests and verify commands, nothing more
source: obra/superpowers (MIT), adapted
---
# Implementation Plan Authoring

## Overview

From the design sections, write the `plan` section of the ONE analysis report (analiz-html-report) — the same HTML document attached with `add_task_document`, `format: "html"`, titled `analiz: <YYYY-MM-DD> <topic>`. Never a separate `plan: …` document and never a file in the repo (you do not write or commit files during analysis). Write for a skilled developer who knows NOTHING about this codebase or problem domain and has questionable taste: document every file to touch, every interface, every command. DRY. YAGNI. TDD. Frequent commits — those commits are the implementer's, made later against the plan; the plan itself is never committed.

## File Structure First

Before defining tasks, map every file the plan creates or modifies and what each is responsible for — this locks in the decomposition:

- One clear responsibility per file; prefer smaller focused files over catch-alls.
- Files that change together live together; split by responsibility, not technical layer.
- In existing code follow established patterns — don't unilaterally restructure.

## Task Right-Sizing

A task is the smallest unit that carries its own test cycle and an independently testable deliverable. Fold setup/scaffolding into the task whose deliverable needs it. Split only where a reviewer could reject one task while approving its neighbor.

## Plan Header (mandatory)

The `plan` section opens with the goal, architecture and constraints before its first step:

```html
<section id="plan">
  <h2>Implementation plan</h2>
  <p><strong>Goal:</strong> one sentence. <strong>Architecture:</strong> 2–3 sentences. <strong>Tech stack:</strong> key technologies.</p>
  <h3 id="plan-constraints">Global constraints</h3>
  <ul><li>Project-wide rules copied VERBATIM from the design — version floors, locale/copy rules, layer boundaries — one line each. Every step implicitly includes this list.</li></ul>
  <h3 id="plan-review-focus">Review Focus</h3>
  <ul><li>Up to 5 inputs or conditions a real user will hit that no step's test covers — empty list, duplicate submit, a zero/negative amount, missing permission, a timeout — each assigned to the step whose test should cover it.</li></ul>
  <ol class="steps"> … </ol>
</section>
```

**Review Focus** exists because the spec implies inputs the steps don't always test for. List the ones a reviewer should check for explicitly; an empty list here is a claim that every edge case the spec implies is already tested somewhere in the plan.

## Task Structure

Each task is one step — `<li id="step-N">` in `<ol class="steps">` — and lists:
- **Files:** exact paths — Create / Modify (with line ranges when known) / Test.
- **Interfaces:** Consumes (what it uses from earlier tasks — exact signatures) and Produces (what later tasks rely on — exact names, parameter and return types). An implementer sees only their own task; this block is how they learn neighboring names. A reference to another step means "use that step's Interfaces block" — never repeat that step's code here.
- **Steps** as checkboxes, one action each (2–5 min): write the failing test (show the test code) → run it, expect FAIL with the expected message → write minimal implementation → run it, expect PASS → commit (show the command).

## What a Step Contains

A step is **unambiguous, not complete** — the implementer writes exactly one reasonable thing from it, nothing is invented, but it is not a transcript of the program:
- **A test step** gives the test name and its assertions as code — this one is always code, because "write a test" without the assertions is not a test.
- **A code step** gives the exact signature, the file, and any value the spec pins (a constant, a column name, an error type). The body appears only when the signature and the tests do not determine it on their own — an algorithm, a non-obvious ordering, a tricky edge case. A CRUD method whose body is "call the repo and return" does not need its body spelled out; its signature and test do.
- **A verify step** gives the command and what output means pass.

## No Placeholders

These are plan failures — never write them:
- "TBD", "TODO", "implement later", "fill in details"
- "Add appropriate error handling" / "handle edge cases"
- "Write tests for the above" without the actual test code
- "Similar to Task N: repeat the code" — point at that task's Interfaces block instead; tasks may be read out of order
- References to types or functions not defined in any task

## Worked Example (one task, bite-sized)

```html
<li id="step-2">
  <h3>TaskExporter service <span class="tag">backend-api</span></h3>
  <p><strong>Files:</strong> create <code>internal/application/export/service.go</code>; test <code>internal/application/export/service_test.go</code></p>
  <p><strong>Consumes:</strong> <code>TaskRepository.ListByProject(ctx, id) ([]Task, error)</code> (step 1) · <strong>Produces:</strong> <code>Export(ctx, projectID uuid.UUID) ([]byte, error)</code></p>
  <ol>
    <li>Failing test:
<pre><code>func (s *ExportSuite) TestExport_encodesHeaderAndRows() {
    s.repo.EXPECT().ListByProject(mock.Anything, s.pid).Return([]Task{{Title:"A"}}, nil)
    csv, err := s.svc.Export(s.ctx, s.pid)
    s.NoError(err); s.Contains(string(csv), "id,title,status,created_at"); s.Contains(string(csv), "A")
}</code></pre></li>
    <li>Run <code>go test ./internal/application/export/... -run TestExport</code> → FAIL (Export undefined)</li>
    <li>Minimal implementation (constructor + Export encoding header+rows)</li>
    <li>Run → PASS</li>
    <li>Commit: <code>feat: add TaskExporter service</code></li>
  </ol>
</li>
```

The test is code, the signature is exact, and the body is omitted because "encode header + rows" is exactly what the test already pins — nothing left for the implementer to invent.

Contrast the ❌ version of the same step: *"Steps: write tests for TaskExporter; implement it similar to the existing ProjectExporter; add appropriate error handling; run tests."* No test code, no signature, no file, "similar to" points at code the implementer has to go find themselves, and "appropriate error handling" is a guess — four plan failures in one step.

**Verify commands** (the command inside any "Run …" step) come from `list_component_checks` for the repository (the repo's own CI-equivalent local commands) or, failing that, `get_project_brief` — never invented from memory. An invented command is a plan failure the same as a placeholder: the implementer runs it, it doesn't exist, and the step is useless.

## Self-Review (mandatory)

1. **Design coverage** — for each requirement in the design sections, point to the step that implements it; add steps for gaps.
2. **Placeholder scan** — search the plan for the patterns above; fix them.
3. **Type consistency** — names/signatures used in later tasks match their definitions in earlier tasks (`clearLayers()` in Task 3 but `clearFullLayers()` in Task 7 is a bug).
4. **Proportion** — if code blocks make up most of the section, the plan has become a transcript of the program instead of a set of unambiguous steps: cut bodies back to signature + test + verify command wherever the test already determines the body.

Fix issues inline, make the `split` section match the steps, then the report is ready for the human; task-decomposition comes only after approval.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…