Skip to content
Development
Skill

/openspec-plus-tdd

MANDATORY skill that activates whenever code is written to implement an OpenSpec change task. Triggers: openspec-plus-apply is active, /opsx-apply is running, the user is implementing tasks from an OpenSpec change, an implementer subagent dispatched by openspec-plus-apply is

BOOST
From plugin
openspec-plus
2156 skills
Install
$ npx -y skills add sudokar/openspec-plus --skill openspec-plus-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/openspec-plus-tdd

Context preview

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

MANDATORY skill that activates whenever code is written to implement an OpenSpec change task. Triggers: openspec-plus-apply is active, /opsx-apply is running, the user is implementing tasks from an OpenSpec change, an implementer subagent dispatched by openspec-plus-apply is

SKILL.md

openspec-plus-tdd.SKILL.md
name: openspec-plus-tdd
description: "MANDATORY skill that activates whenever code is written to implement an OpenSpec change task. Triggers: openspec-plus-apply is active, /opsx-apply is running, the user is implementing tasks from an OpenSpec change, an implementer subagent dispatched by openspec-plus-apply is starting work, or the user invokes phrases like 'TDD for the change', 'implementing change tasks', or 'writing tests for spec scenarios'. Load before any production code is written for an OpenSpec change. Enforces strict RED-GREEN-REFACTOR per test (any test — acceptance, unit, edge case, helper). Iron Law: NO PRODUCTION CODE WITHOUT A FAILING TEST. Gherkin scenarios in spec.md are the canonical source for acceptance tests (every scenario MUST become at least one test); additional unit, edge-case, and helper tests are encouraged and follow the same per-test cycle."
metadata:
  version: 1.6.1
  priority: high
  disable-user-invocation: true

OpenSpec Plus TDD

Mission

Strict RED-GREEN-REFACTOR per test for OpenSpec change implementation. Every test — whether derived from a Gherkin scenario relevant to the slice in `spec.md`, written for a unit, edge case, helper, or error path — goes through its own atomic cycle before the next test begins. Production code exists only to make a previously-failing test pass. Surgical changes, simplicity first, no speculative abstractions, every changed line traces to a slice task.

Gherkin scenarios in `spec.md` are the **canonical source for acceptance tests**: every scenario relevant to the slice MUST become at least one test. The implementer is encouraged to add additional tests — unit tests for individual functions, edge-case tests, helper tests, error-path tests — when fast-feedback granularity is valuable. Every test follows the same cycle.

Loaded by `openspec-plus-apply` (subagent prompt + inline mode) before any code is written.

---

> **RIGID. NEVER write production code before a test fails for the right reason. NEVER write tests for multiple cases before the first one is GREEN. NEVER skip the REFACTOR assessment. NEVER mark a task `[x]` while a relevant test is failing or skipped. NEVER add comments for non-complex logic. NEVER refactor code outside the slice. NEVER write any code (test or production) before reading the project's referenced coding/testing standards. NEVER ship without covering every Gherkin scenario in spec.md with at least one test. Letter and spirit are the same.**

**Red flags — STOP, you are about to violate this skill:**

  • "I'll write the test after, it's faster"
  • "Too simple to need a test"
  • "Manually verified, that's enough"
  • "Gherkin scenario is vague, generic test is fine"
  • "Skip this failing test, circle back later"
  • "Mark `.skip` to unblock the slice"
  • "While I'm here, clean up the adjacent code"
  • "Add an interface in case we swap implementations"
  • "Short comment explains the obvious"
  • "Error handling for cases that can't happen"
  • "Test passed first run, must be right"
  • "Let me write tests for all the cases first, then implement"
  • "Test 1 done — I have a clear picture, let me write all the rest at once"
  • "I have a clear picture of all 5 cases — let me write them all"
  • "Writing one test at a time is slower"
  • "These cases are related, I'll batch them"
  • "The code I'm about to write covers test 2 anyway, no need to write its test separately first"
  • "Acceptance tests cover the happy path — skip the unit/edge tests"
  • "Scenarios covered, no need to add granular tests even though the helper has edge cases"
  • "Nothing to refactor, skip the assessment"
  • "I know the project conventions, no need to re-read AGENTS.md"
  • "AGENTS.md has many rules — I'll apply the ones that feel relevant"

None justify production code without a red test, ignored failures, speculative abstractions, comments on obvious code, or scope expansion.

---

The Iron Law

NO PRODUCTION CODE WITHOUT A FAILING TEST

Every test — acceptance, unit, edge case, helper, error path — must be observed to fail for the right reason before the production code that makes it pass is written. Test not observed to fail = test proves nothing. Code written first = delete it, start over. No exceptions without explicit user permission.

Mandatory Acceptance Coverage

Every Gherkin scenario relevant to the slice in `spec.md` MUST become at least one test. The scenario IS the acceptance contract; the test IS the verification. A slice cannot ship with an uncovered scenario, even if all other tests pass.

Encouraged Granular Coverage

Beyond acceptance tests, add unit/edge/helper/error tests when valuable (non-trivial branches, null/empty inputs, boundary values, error paths). Same RED-GREEN-REFACTOR cycle — no special handling regardless of test origin.

---

Inputs

  • Slice tasks (`tasks.md`)
  • Slice spec requirements + Gherkin scenarios (`spec.md`)
  • Slice design decisions (`design.md`)
  • Project standards (`AGENTS.md` / `CLAUDE.md` / `GEMINI.md` if in context)
  • Existing code in slice's affected files

NEVER read source outside the slice's affected files.

---

Workflow

Phase 0: Pre-RED — read project's coding/testing conventions; follow strictly

Phase 1+: Plan the test set for the slice:
  Mandatory:  one test per Gherkin scenario relevant to the slice in spec.md
  Encouraged: additional unit / edge-case / helper / error-path tests
              when fast-feedback granularity is valuable

Phase 2+: For each test, ONE AT A TIME (any test, in any order):
  Follow the Per-Test State Machine (digraph below) atomically.
  Do NOT begin the next test until the current one terminates at
  "Test Complete".

After all tests complete AND every Gherkin scenario relevant to the slice is covered, run
the slice's pre-mark gate.

Per-Test State Machine (MANDATORY)

Every test traverses this cycle end-to-end before work begins on the next. Atomic per test — no shortcuts, no batching, no skipping nodes. Applies

Read more
Ships withopenspec-plus

OpenSpec Plus — Agentic skills that enhance OpenSpec's Spec-Driven Development through better discovery, requirements, design decisions, execution planning and execution. Works with Claude Code, OpenCode, Github Copilot and any other AI coding agents

Get the whole plugin

Other skills on openspec-plus.