tdd
Implement a feature or fix using strict red-green-refactor TDD with vertical tracer-bullet slices. Use when asked to "write tests first", "use TDD", "red-green-refactor", "test-driven", or to build features/fix bugs test-first.
What this skill does
# Test-Driven Development
Implement using strict TDD. Red → Green → Refactor.
**Your first code output is always a test. Never implementation first.**
If the user passed a description or file as an argument, use it to write the first test.
## Philosophy
**Core principle:** tests verify behavior through public interfaces, not implementation details. Code
can change entirely; tests shouldn't.
**Good tests** are integration-style: they exercise real code paths through public APIs and read like a
specification ("user can checkout with valid cart"). They survive refactors. See [tests.md](./tests.md).
**Bad tests** are coupled to implementation — they mock internal collaborators, test private methods, or
verify through external means. The warning sign: the test breaks when you refactor but behavior hasn't
changed. See [mocking.md](./mocking.md) for what to mock (system boundaries only — and note `vi.mock` is
banned in this repo; use constructor dependency injection).
## Anti-pattern: horizontal slices
**DO NOT write all tests first, then all implementation.** Tests written in bulk test _imagined_
behavior — the _shape_ of things rather than user-facing behavior — and go insensitive to real changes.
```
WRONG (horizontal): RED: test1..test5 then GREEN: impl1..impl5
RIGHT (vertical): RED→GREEN: test1→impl1, then test2→impl2, ...
```
Each test responds to what you learned from the previous cycle.
## Process
### 1. Planning
When exploring, use the project's domain glossary (`CONTEXT.md`) so test names and interface vocabulary
match the project's language, and respect decision issues in the area you're touching.
Before writing code:
- [ ] Confirm what interface changes are needed
- [ ] Confirm which behaviors to test (prioritize — you can't test everything)
- [ ] Identify opportunities for [deep modules](./deep-modules.md) (small interface, deep implementation)
- [ ] Design interfaces for [testability](./interface-design.md)
- [ ] List the behaviors to test (not implementation steps)
Only ask clarifying questions when you truly cannot write any meaningful test. For refactoring, always
write characterization tests for existing behavior BEFORE changing code — non-negotiable.
### 2. Red phase — confirm failure
- Write ONE test describing expected behavior. This is the ONLY code in this phase.
- Run it. Confirm it fails. Say: "Running the test to confirm it fails (Red phase)".
- Outline the plan (do NOT write implementation yet): "Next: Green — minimum code to pass; then
Refactor — clean up, run all tests, commit." Test progression: happy path → edge cases → error
handling → integration.
- STOP. Implementation comes in the next interaction.
A test that passes immediately is wrong — the test must fail before implementation.
### 3. Green phase — minimum code to pass
- Write the minimum code to pass. Run it. Confirm it passes. Say: "Running the test to confirm it passes
(Green phase)".
### 4. Refactor phase
- Clean up with no behavior change. Look for [refactor candidates](./refactoring.md): extract
duplication, deepen modules, move complexity behind simple interfaces.
- Run all tests — confirm nothing broke. **Never refactor while Red.**
- Commit. Each commit = one red-green-refactor cycle.
### 5. Repeat
Order: happy path → edge cases → error handling → integration points. One test at a time; only enough
code to pass the current test; don't anticipate future tests.
### 6. Final check
Run the full suite, `bun typecheck`, `bun run lint`. Commit.
## Checklist per cycle
```
[ ] Test describes behavior, not implementation
[ ] Test uses public interface only
[ ] Test would survive an internal refactor
[ ] Code is minimal for this test
[ ] No speculative features added
```
Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.