Claude Skills
CollectionsCompareWorkflowsNominate
Sign inSign up
© 2026 Curated Agent Skills·Learn more about Agent Skills
Back to repository

theo-calvin-testing

verified

Differential testing with Theodore Calvin's framework (tc). Use when writing tc tests, reasoning about test scenarios, creating input/expected JSON pairs, or debugging test failures.

View on GitHub

Marketplace

my-claude-plugins

a3lem/my-claude-plugins

Plugin

theo-calvin-testing

Repository

a3lem/my-claude-plugins

plugins/theo-calvin-testing/skills/theo-calvin-testing/SKILL.md

Last Verified

February 3, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/a3lem/my-claude-plugins/blob/main/plugins/theo-calvin-testing/skills/theo-calvin-testing/SKILL.md -a claude-code --skill theo-calvin-testing

Installation paths:

Claude
.claude/skills/theo-calvin-testing/
Powered by add-skill CLI

Instructions

# Theodore Calvin's Testing Framework (tc)

> "In the AI age, specifications and tests are permanent while implementations are disposable."

## What is Differential Testing?

**Differential testing** compares actual output against expected output. No assertions, no matchers, no framework magic - just a diff.

## Philosophy

Tests are nothing more than a script that takes `input.json` and produces `output.json`, which is then diffed against `expected.json`. This simple model:

- Makes tests **language-agnostic** - the same test suite validates any implementation
- Separates **what** (the spec) from **how** (the implementation)
- Treats test suites as **specifications**, not just validation

## Core Concept

```
input.json → run → output.json ←→ diff ←→ expected.json
```

1. Your code reads `input.json` from stdin
2. Your code writes JSON to stdout
3. The framework compares output with `expected.json`

## JSON Comparison Rules

- **Objects are order-invariant** - `{"a":1,"b":2}` equals `{"b":2,"a":1}`
- **Arrays maintain order** - `[1,2,3]` does NOT equal `[3,2,1]`
- Comparison is deep and semantic, not string-based

## Directory Structure

```
tests/
└── my-test-suite/
    ├── run                    # Executable (any language)
    └── data/
        └── scenario-name/
            ├── input.json     # Test input
            └── expected.json  # Expected output
```

## The `run` Executable

The `run` file is any executable that:
1. Reads JSON from stdin
2. Writes JSON to stdout
3. Exit code 0 = success, non-zero = error

Example (bash):
```bash
#!/usr/bin/env bash
jq '.value * 2'
```

Example (python):
```python
#!/usr/bin/env python3
import json, sys
data = json.load(sys.stdin)
print(json.dumps({"result": data["value"] * 2}))
```

## Pattern Matching

For dynamic values, use patterns in `expected.json`:

| Pattern | Matches |
|---------|---------|
| `<uuid>` | UUID v4 format |
| `<timestamp>` | ISO 8601 datetime |
| `<number>` | Any number |
| `<string>` | Any string |

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
3356 chars