api-pagination
Implement correct, fast API pagination — cursor vs offset trade-offs, opaque cursor encoding, stable sort keys, page-size limits, total-count costs, and…
How to design a test plan — scope and risk-based prioritization, the test pyramid, case-design techniques (equivalence partitioning, boundary values, decision tables), entry/exit criteria, coverage and requirement traceability, test data and environments. Deep reference with a
$ npx -y skills add vanara-agents/skills --skill test-plan-design --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/test-plan-designContext preview
The summary Claude sees to decide when to auto-load this skill.
How to design a test plan — scope and risk-based prioritization, the test pyramid, case-design techniques (equivalence partitioning, boundary values, decision tables), entry/exit criteria, coverage and requirement traceability, test data and environments. Deep reference with a
name: test-plan-design description: How to design a test plan — scope and risk-based prioritization, the test pyramid, case-design techniques (equivalence partitioning, boundary values, decision tables), entry/exit criteria, coverage and requirement traceability, test data and environments. Deep reference with a runnable coverage-gap check. type: skill version: 2.0.0 updated: 2026-06-29
A test plan is a **budget**: finite effort spent where it prevents the most expensive failures. The goal is never "test everything" — that is impossible and economically illiterate. The goal is to make a defensible decision about *what* to test, *at which layer*, *with which cases*, and *when you are done*. This skill is the deep reference for that decision. Heavy detail lives in `references/`; copy-paste material in `examples/`; a runnable traceability check in `scripts/`.
You are allocating scarce attention across a feature. Four questions drive every plan:
| Question | Answer comes from | |---|---| | What matters most? | risk = impact × likelihood (scope & prioritization) | | At which layer do I test it? | the test pyramid (unit / integration / E2E) | | Which concrete cases? | case-design techniques (partitions, boundaries, decision tables) | | When am I done? | exit criteria + coverage traced to requirements |
Skip any one of these and the plan degrades: no risk ranking and you over-test trivia; no case design and you write five tests that all exercise the same path; no traceability and you ship a requirement nobody verified.
Start by listing what the feature must do, then rank each item by **risk = impact × likelihood**.
top-tier; cosmetic glitches are bottom-tier.
requirements raise it; stable, simple, well-understood code lowers it.
Spend the most rigor at the top of the ranked list and explicitly decide to *under*-test the bottom. Writing down "we are not testing X because it is low-risk" is a feature of a good plan, not a gap. The full scoring rubric and a worked heat-map live in [references/risk-prioritization.md](references/risk-prioritization.md).
Each behavior should be tested at the **lowest layer that can meaningfully verify it**. Lower layers are faster, cheaper, and more precise about *where* a defect is.
/\ E2E few — full user journeys, real-ish stack, slow & flaky
/ \ Integration some — module + its collaborators (DB, gateway, queue)
/____\ Unit many — one function/class, no I/O, millisecondstest DB, a client calling a mocked gateway with success/decline/timeout responses.
The classic anti-pattern is the **inverted pyramid** (an "ice-cream cone"): many slow E2E tests and few units. It is slow, flaky, and tells you *that* something broke but not *where*. Layer-selection heuristics and the integration/contract-test distinction are in [references/test-pyramid.md](references/test-pyramid.md).
For each unit under test, do not invent cases ad hoc — derive them. Three techniques cover the vast majority of input-space reasoning:
test *one* representative per class. If ages 18–65 are all "standard", you need one value from that band, not forty.
`64, 65, 66` — just-below, on, and just-above each boundary. Off-by-one errors live here.
no rule is missed.
Discount rules (decision table) Member? | Cart ≥ $100 | Coupon valid | → Discount no | no | no | 0% no | yes | no | 5% yes | no | no | 10% yes | yes | yes | 25% ← interaction case, easy to miss
A worked example combining all three on one function is in [references/case-design.md](references/case-design.md), and a ready-to-fill case template is in `examples/test-case-template.md`.
Make "ready to test" and "ready to ship" explicit so the plan ends on data, not vibes.
seed data available, dependencies/stubs deployed.
passing test; coverage target met (e.g. 80% line on changed code); zero open Sev-1/Sev-2 defects; known issues triaged and accepted by the owner.
Exit criteria are the contract that prevents both premature shipping and endless gold-plating.
Coverage has two distinct meanings — track both:
1. **Code coverage** (line/branch): a *necessary* signal, not a *sufficient* one. 100% line coverage with zero assertions proves nothing. 2. **Requirement coverage**: every requirement maps to at least one test that verifies it. This is the one that catches "we built it but nobody tested it."
Maintain a traceability matrix (requirement ↔ test case). The runnable check `scripts/coverage-gaps.mjs` takes your requirements and test cases as JSON and lists any requirement with **no** c
🐒 Free agents, skills & packs for Claude Code One subscription. An army of Claude Code agents. 30 production-grade agents, skills, and packs for Claude Code — free, Apache-2.0, install with one command.
Repo: vanara-agents/skills
Implement correct, fast API pagination — cursor vs offset trade-offs, opaque cursor encoding, stable sort keys, page-size limits, total-count costs, and…
Deep reference for caching — what to cache, cache-aside vs read/write-through/write-behind, TTLs with jitter, eviction (LRU/LFU/FIFO), invalidation, and…
Write Conventional Commits — the type(scope)!: subject + body + footer spec — so history is readable and changelogs and SemVer bumps can be derived…
How to write safe, reversible, zero-downtime database schema migrations — additive-first changes, the expand/migrate/contract pattern, batched backfills,…
How to handle errors explicitly and consistently across an app — validate at boundaries, classify operational vs programmer errors, add context while…
Run git collaboration that scales — trunk-based vs git-flow decided by deploy cadence, branch protection and required checks, PR sizing and review etiquette,…