# Planner Anti-Patterns and Specificity Examples > Reference file for gsd-planner agent. Loaded on-demand via `@` reference. > For sub-200K context windows, this content is stripped from the agent prompt and available here for on-demand loading. ## Checkpoint Anti-Patterns ### Bad — Asking human to automate ```xml Deploy to Vercel Visit vercel.com, import repo, click deploy... ``` **Why bad:** Vercel has a CLI. Claude should run `vercel --yes`. Never ask the user to do what Claude can automate via CLI/API. ### Bad — Too many checkpoints ```xml Create schema Check schema Create API Check API ``` **Why bad:** Verification fatigue. Users should not be asked to verify every small step. Combine into one checkpoint at the end of meaningful work. ### Good — Single verification checkpoint ```xml Create schema Create API Create UI Complete auth flow (schema + API + UI) Test full flow: register, login, access protected page ``` ### Bad — Mixing checkpoints with implementation A plan should not interleave multiple checkpoint types with implementation tasks. Checkpoints belong at natural verification boundaries, not scattered throughout. ## Specificity Examples | TOO VAGUE | JUST RIGHT | |-----------|------------| | "Add authentication" | "Add JWT auth with refresh rotation using jose library, store in httpOnly cookie, 15min access / 7day refresh" | | "Create the API" | "Create POST /api/projects endpoint accepting {name, description}, validates name length 3-50 chars, returns 201 with project object" | | "Style the dashboard" | "Add Tailwind classes to Dashboard.tsx: grid layout (3 cols on lg, 1 on mobile), card shadows, hover states on action buttons" | | "Handle errors" | "Wrap API calls in try/catch, return {error: string} on 4xx/5xx, show toast via sonner on client" | | "Set up the database" | "Add User and Project models to schema.prisma with UUID ids, email unique constraint, createdAt/updatedAt timestamps, run prisma db push" | **Specificity test:** Could a different Claude instance execute the task without asking clarifying questions? If not, add more detail. ## Context Section Anti-Patterns ### Bad — Reflexive SUMMARY chaining ```markdown @.planning/phases/01-foundation/01-01-SUMMARY.md @.planning/phases/01-foundation/01-02-SUMMARY.md @.planning/phases/01-foundation/01-03-SUMMARY.md ``` **Why bad:** Plans are often independent. Reflexive chaining (02 refs 01, 03 refs 02...) wastes context. Only reference prior SUMMARY files when the plan genuinely uses types/exports from that prior plan or a decision from it affects the current plan. ### Good — Selective context ```markdown @.planning/PROJECT.md @.planning/STATE.md @.planning/phases/01-foundation/01-01-SUMMARY.md ``` ## Scope Reduction Anti-Patterns **Prohibited language in task actions:** - "v1", "v2", "simplified version", "static for now", "hardcoded for now" - "future enhancement", "placeholder", "basic version", "minimal implementation" - "will be wired later", "dynamic in future phase", "skip for now" If a decision from CONTEXT.md says "display cost calculated from billing table in impulses", the plan must deliver exactly that. Not "static label /min" as a "v1". If the phase is too complex, recommend a phase split instead of silently reducing scope. ## Comment-Text Discipline (HARD GATE) > Enforced at plan-write time by `verify.plan-structure` (the `validate_plan` step). Issue #429. When an `` or `` block uses a **negative grep** — `grep -c 'LITERAL' file == 0`, meaning "this literal must NOT appear in the file" — that same `LITERAL` must not appear verbatim anywhere in an `` body. Verbatim code blocks, JSDoc samples, head-comment references, and "what NOT to do" illustrations get echoed into the file the executor writes, so the executor's commit-time gate fails on the *comment text*, not on a real code regression. The work is correct; the gate output is semantically wrong; the executor wastes cycles and learns to distrust the gate. **The gate:** plan creation FAILS (error, `valid: false`) when a confidently-extracted (quoted) negative-grep literal also appears in an `` block. When the grep literal is unquoted and cannot be extracted unambiguously, the gate WARNS instead of failing (so you still get the plan, with the risk surfaced). ### Bad — JSDoc sample echoes the forbidden literal ```xml Add a `?from=` query param to the share link. Do NOT reintroduce the old `?from=` referrer hack the JSDoc warned about. grep -c '?from=' src/animal-detail.tsx == 0 ``` ### Good — rephrase the comment by concept ```xml Add the share-link query param. Do NOT reintroduce the legacy referrer hack. grep -c '?from=' src/animal-detail.tsx == 0 ``` ### Allowlist escape hatch When the literal MUST appear in the plan body verbatim — e.g. the plan documents the test file that exercises the gate itself, or the literal is part of the verification command's own grep regex — add a marker on its own line so the gate skips that literal: ``` ``` One marker per literal. The marker exempts only the exact literal it names.