npx claudepluginhub tta-lab/ttal-cli --plugin ttalThis skill uses the workspace's default tool permissions.
Test plans are reasoning documents, not exhaustive coverage lists. Two halves: constructive (happy paths, edge cases, invariants) and adversarial (find what is already broken). The constructive half is well-trodden work. The adversarial half earns the keep — it surfaces bugs that exist in the current implementation, not the ones you would add later.
Generates a structured testing plan prioritized by risk, covering unit, integration, e2e tests, edge cases, and negative scenarios. Analyzes impact, probability, and visibility to focus on critical areas.
Manages QA: creates test plans, designs test cases, performs exploratory testing, writes bug reports, verifies fixes, defines coverage, signs off releases.
Interactively stress-test an implementation plan by grilling the user on decisions, edge cases, and assumptions to find issues, inconsistencies, and gaps before implementation begins.
Share bugs, ideas, or general feedback.
Test plans are reasoning documents, not exhaustive coverage lists. Two halves: constructive (happy paths, edge cases, invariants) and adversarial (find what is already broken). The constructive half is well-trodden work. The adversarial half earns the keep — it surfaces bugs that exist in the current implementation, not the ones you would add later.
Assume the worker is a skilled test writer, but knows almost nothing about the domain. Document every file they need to test, every prior bug class they should check, every seam that could break.
Announce at start: "I am using sp-write-test-plan to author the integration test plan."
First action: Run ttal project list to identify the target project before writing anything.
Use this skill when you are about to write integration tests and any of these are true:
Do NOT use this skill for unit-level TDD loops (use sp-tdd for RED-GREEN-REFACTOR). Do NOT use this skill as a post-hoc code review (sp-review-against-plan covers that).
Rule: 1 task to 1 plan to 1 project or repo.
Before writing any test plan, confirm the target project:
ttal project list — see all available projectsttal project get <alias> to confirm the pathHard rule: Do NOT proceed past this gate without a confirmed single target repo.
If the task touches multiple repos, stop and flag it: a single test plan must cover a single project. Split the task into per-repo test plans.
BEFORE writing any test plan, understand what exists. Do not design tests in the abstract — read the implementation.
task <uuid> tree — understand what steps the implementation went through, what decisions were made.flicknote find <keywords> — search for orientation docs, design docs, research notes related to this domain.task +bugfix project:<alias> status:completed export — extract descriptions of every past bug in this project.After Phase 1, talk through what you found before designing the test plan. Do not go silent and start writing — discuss first.
Conversational checkpoint:
STOP here. End your message after presenting your findings and question. Do not begin Phase 2 or write the test plan until the human responds and confirms alignment.
Author the constructive section of the test plan. Group by area: per command, per service, per data flow.
For each major usage scenario:
For each entry point and data path:
Document what must always be true before and after each operation:
Three sequenced passes, executed in order. Each pass produces a table. Do NOT skip pass gamma — the empirical anchor is the most valuable pass.
task +bugfix project:<alias> status:completed export| Bug class | Source task | Current vulnerability | Test to write |
|---|
Walk a fixed checklist of common-painful seams against the implementation. For each seam, assess vulnerability and design a test.
| Seam | What to check | Vulnerability (yes or no or dont know) | Test to write |
|---|---|---|---|
| Concurrency | Shared mutable state, goroutine races, mutex hot spots, channel deadlocks | ||
| Retries | Retry-able operations, backoff strategy, max-retries, jitter, circuit breaker | ||
| Partial failures | What breaks when one of N dependencies fails? CRDT or compensation? | ||
| Idempotency | Double-apply of same event or command, dedup key stability, exactly-once vs at-least-once | ||
| Timeouts | Deadline propagation, context cancellation, default timeout values, client-server timeout mismatch | ||
| Data corruption | Encoding or decoding mismatches, stale reads after write, concurrent write-write conflict, serialization version drift | ||
| Edge dates and numbers | Timezone handling, DST transitions, unix epoch boundaries, float precision, overflow on accumulation | ||
| Hostile inputs | SQL injection, path traversal, oversized payloads, unicode normalization, content-type confusion |
Put on the adversary hat. "You want to break this implementation."
| Hypothesis | Falsifying test | Status |
|---|
Write the test plan as a single flicknote with two sections (Constructive and Adversarial).
# Test Plan: <feature or component>
**Project:** <ttal alias>
**Implementation under test:** <files and relevant task UUIDs>
**Adversarial findings filed separately:** <flicknote hex if applicable, or "None">
## Constructive
### Happy paths
- ...
### Edge cases
- ...
### Invariants and preconditions
- ...
## Adversarial
### Pass gamma — Prior-bug classes
| Bug class | Source task | Current vulnerability | Test to write |
|-----------|-------------|----------------------|---------------|
### Pass beta — Seam walk
| Seam | Vulnerability | Test to write |
|------|---------------|---------------|
### Pass alpha — Red team hypotheses
| Hypothesis | Falsifying test | Status |
|------------|-----------------|--------|
# Primary: test plan flicknote
cat <<'PLANEOF' | flicknote add --project testplans
# Test Plan: ...
...
PLANEOF
# Annotate the parent task with the hex ID
task <parent-uuid> annotate "testplan: flicknote <hex>"
If pass gamma or beta found confirmed-broken (not just "could break"), write a separate bug or test report flicknote:
cat <<'BUGEOF' | flicknote add --project testplans
# Bug or Test Report: <feature or component>
**Confirmed-broken issues found during adversarial pass.**
**Source:** Test plan flicknote <hex>
## Issue 1: <title>
**Pass:** gamma or beta (which pass found it)
**Evidence:** <what in the code proves this would fail>
**Recommended test:** <test that would catch this>
...
BUGEOF
task <parent-uuid> annotate "bugreport: flicknote <hex>"
Do NOT auto-file +bugfix tasks. The skill writes evidence; humans decide whether to file.
Before declaring the test plan done:
No synthetic subagent tests for this skill. Per the team brainstorm verdict, the FSE sub plus neuron consume first-use IS the test. Friction observed during the first invocation feeds skill revision via flicknote-edit on this skill itself.
Chain into the completion phase for self-review, open questions, summary, and review handoff:
skill get sp-complete-design
Follow every step in that skill. Do not duplicate its logic here.