Skip to content
Agent Orchestration
Skill

/tdd

Test-driven implementation through red-green vertical slices at agreed public seams. Use when the user explicitly asks for TDD, test-first, red-green-refactor, or a feature or bug fix developed from a failing integration test. Do not trigger merely because tests will be added or

BOOST
From plugin
rovai-ai
19812 skills
Install
$ npx -y skills add murray17/rovai-ai --skill tdd --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/tdd

Context preview

The summary Claude sees to decide when to auto-load this skill.

Test-driven implementation through red-green vertical slices at agreed public seams. Use when the user explicitly asks for TDD, test-first, red-green-refactor, or a feature or bug fix developed from a failing integration test. Do not trigger merely because tests will be added or

SKILL.md

tdd.SKILL.md
name: tdd
description: Test-driven implementation through red-green vertical slices at agreed public seams. Use when the user explicitly asks for TDD, test-first, red-green-refactor, or a feature or bug fix developed from a failing integration test. Do not trigger merely because tests will be added or updated after implementation.

Test-Driven Development

TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop. Every section applies on every cycle — consult them before and during the loop, not after.

When exploring the codebase, read `CONTEXT.md` (if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching.

What a good test is

Tests verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't. A good test reads like a specification — "user can checkout with valid cart" tells you exactly what capability exists — and survives refactors because it doesn't care about internal structure.

See [tests.md](tests.md) for examples and [mocking.md](mocking.md) for mocking guidelines.

Seams — where tests go

A **seam** is the public boundary you test at: the interface where you observe behavior without reaching inside. Tests live at seams, never against internals.

**Test only at pre-agreed seams.** Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam. You can't test everything — agreeing the seams up front is how testing effort lands on the critical paths and complex logic instead of every edge case.

Ask: "What's the public interface, and which seams should we test?"

When the shape of that interface is itself in question — how deep the module is, where the seam belongs, what the interface should expose — use the `/codebase-design` skill for the vocabulary. It is the shared source of the module, interface, depth, seam, adapter, leverage and locality terms, and it is a reference to consult, not a session to run.

Anti-patterns

  • **Implementation-coupled** — mocks internal collaborators, tests private methods, or verifies through a side channel (querying the database instead of using the interface). The tell: the test breaks when you refactor but behavior hasn't changed.
  • **Tautological** — the assertion recomputes the expected value the way the code does (`expect(add(a, b)).toBe(a + b)`, a snapshot derived by hand the same way, a constant asserted equal to itself), so it passes by construction and can never disagree with the code. Expected values must come from an independent source of truth — a known-good literal, a worked example, the spec.
  • **Horizontal slicing** — writing all tests first, then all implementation. Bulk tests verify _imagined_ behavior: you test the _shape_ of things rather than user-facing behavior, the tests go insensitive to real changes, and you commit to test structure before understanding the implementation. Work in **vertical slices** instead — one test → one implementation → repeat, each test a **tracer bullet** that responds to what the last cycle taught you.

Rules of the loop

  • **Red before green.** Write the failing test first, then only enough code to pass it. Don't anticipate future tests or add speculative features.
  • **One slice at a time.** One seam, one test, one minimal implementation per cycle.
  • **Refactoring is not part of the loop.** It belongs to the review stage (see the `code-review` skill), not the red → green implementation cycle.
Read more
Ships withrovai-ai

Desktop and web workspace for lasting teams of coding agents, with shared conversations, task delegation, and collaborative memory.

Get the whole plugin

Other skills on rovai-ai.