skills/implementing-features/SKILL.md
Implements a feature, bug fix, or refactor from a clear specification. Use when: the task has clear acceptance criteria, a bug is diagnosed and the fix is understood, or code needs refactoring with a clear goal. Do not use when: the spec is unclear, an architecture decision still needs to be made, or the task needs to be broken into multiple steps first.
npx skillsauth add maestria-co/ai-playbook implementing-featuresInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Write the minimum correct code that satisfies the spec and matches existing patterns. Read before you write. Implement minimally. Verify before declaring done.
Do not invoke this pattern if the spec is unclear or acceptance criteria are missing.
Use planning-tasks to define the task first, or ask one clarifying question.
Check 1 — Confirm the spec is complete
Read the task specification. Verify it includes:
What to build (feature/fix/refactor description)
Acceptance criteria (testable conditions that define "done")
Output location (which files to create or modify)
If any of these is missing → ask one focused question to resolve the most critical gap. Do not start implementation until you can verify completion.
If spec is complete → proceed.
Check 2 — Read before writing
Read in this order before writing a single line of code:
.context/decisions/ ADRs relevant to this areaWrite out each acceptance criterion before touching code. This is your "definition of done." You will check each criterion explicitly before completing this pattern.
Determine exactly which files will change. List them before starting.
If you find that implementing the spec requires changing code significantly outside your listed scope → stop. Surface this as a scope change before proceeding.
Write the smallest change that satisfies the spec:
writing-testsFor bugs: fix the root cause, not just the symptom. State what the root cause was.
Run the build. Confirm it compiles and passes lint.
Read your own diff as if you were reviewing someone else's work. Check:
If any check fails → fix it before completing.
Implemented: [Task name]
Files changed:
- [path] — [what changed and why, if non-obvious]
Acceptance criteria:
- [x] [criterion — verified]
- [x] [criterion — verified]
Key decisions:
- [Any non-obvious choice made and why]
- [ADR followed: ADR-NNN if applicable]
Suggested next: writing-tests (verify implementation with tests)
Files changed:
Acceptance criteria:
Key decisions:
Suggested next: writing-tests </output> </example>
<example> <scenario>Fixing a bug with a known root cause</scenario> <input> <task>Fix: User login fails silently when email has uppercase letters.</task> <context> - Bug reported in src/services/auth.js line 47 - Root cause: email comparison is case-sensitive; DB stores lowercase, input is not normalized - Acceptance criteria: login succeeds for mixed-case email; all existing login tests still pass </context> </input> <output> Implemented: Fix case-sensitive email comparison in loginFiles changed:
Root cause: email input was not normalized before lookup. DB stores emails lowercase (enforced at registration) but login did not normalize input.
Acceptance criteria:
Suggested next: writing-tests (add regression test for mixed-case email) </output> </example>
<example> <scenario>Spec is ambiguous — pattern asks for clarification before starting</scenario> <input> <task>Update the user profile endpoint to support partial updates.</task> <context> - Endpoint: PATCH /users/:id - No acceptance criteria provided </context> </input> <output> Before proceeding, one question: should missing fields in the PATCH body be ignored (partial update) or treated as explicit nulls (clearing the field)?Example: PATCH /users/1 with body { "name": "Alice" } — should "email" remain unchanged or be set to null?
(If you want me to make an assumption and move forward, say "proceed" and I'll go with: missing fields are ignored, only provided fields are updated.) </output> </example>
</examples>designing-systems.context/decisions/development
Writes and runs a test suite for a piece of code, covering happy path, edge cases, error cases, and security cases. Use when: implementation is complete and needs test coverage, a bug needs a reproduction test and fix validation, or code needs coverage before a refactor. Do not use when: the code under test is not yet implemented, or the spec is still unclear.
testing
Use when creating a new skill, editing an existing skill, or helping a user author a skill for this system. Covers structure, discoverability, quality, and discipline hardening.
development
Evidence-based verification process to run before marking any task complete. Use this skill every time you're about to report that work is done — for features, bug fixes, refactoring, or any code change. This catches the most common failure mode: declaring "done" without proof. If you're finishing up and about to tell the user the task is complete, run this checklist first.
development
Teaches agents how to discover, select, and invoke skills from the skill library. Use this skill whenever you're uncertain which skill applies to a task, when composing multiple skills for complex work, or when you need to understand what skills are available. This is your go-to when facing an ambiguous task and need to figure out the right approach before diving into implementation.