Help us improve
Share bugs, ideas, or general feedback.
From odd-pipeline
Scans a project's existing test suite for placebo test patterns (vacuous assertions, circular round-trip, unbounded thresholds, synthetic-only data). Produces a migration report to help projects adopt the Outcome-Driven Development (ODD) pipeline. Use when migrating from the old TDD pipeline, auditing test quality, or when the user says "/diagnose-tests", "audit my tests", "find placebo tests", or "how healthy are my tests?".
npx claudepluginhub tonywu20/my-claude-marketplace --plugin odd-pipelineHow this skill is triggered — by the user, by Claude, or both
Slash command
/odd-pipeline:diagnose-testsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audits a project's existing test suite for placebo test patterns. Produces a
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Share bugs, ideas, or general feedback.
Audits a project's existing test suite for placebo test patterns. Produces a migration report listing which tests need to be rewritten under the ODD pipeline's ground-truth anchoring requirements.
/diagnose-tests [path]
Where [path] is optional and defaults to the current repo root. If provided,
scans the test directory at the given path.
Read CONTEXT.md Tooling section and extract **File extensions:** and
**Test file patterns:** for language-specific file discovery.
The skill scans the project's test files for known placebo patterns and compares them against any fixture files that exist on disk. It does NOT modify any files — only produces a report.
Tests that only check general properties, not concrete values:
assert!(x.is_finite()) or equivalent — passes for any real numberassert!(x.is_ok()) or equivalent — checks type, not valueassert!(x > 0.0) or equivalent — passes for any positive (wrong by 10^8 still passes)assert_eq!(x.len(), N) or equivalent — checks shape, not contentTests that construct synthetic data and round-trip through encode/decode:
parse(write(x)) == x or deserialize(serialize(x)) == xNumeric thresholds chosen without reference to ground truth:
max_residual < 10.0 where the real residual is 1e-6Tests that construct hand-crafted data matching the parser's own format assumptions, rather than using real fixture files.
Use the project's configured file extensions and test file patterns:
# Find test files by configured patterns
fd -e {ext1} -e {ext2} '{test_pattern1|test_pattern2}' 2>/dev/null
# Also check for inline test modules in source directories
fd -e {ext1} -e {ext2} 'src/.+\.{ext1}' 2>/dev/null
Where {ext1}, {ext2}, etc. come from CONTEXT.md's **File extensions:** field.
For each test file found, read it and check for:
is_finite(), is_ok() — vacuous (unless combined with a value check)parse(write or deserialize(serialize — circular round-trip# Look for potential fixture directories
fd --no-ignore -t d '(fixtures?|testdata|test-data|golden|references?)' 2>/dev/null
# List files in found fixture directories
fd --no-ignore -t f 'fixtures/' -0 2>/dev/null | xargs -0 ls -la 2>/dev/null
If fixture directories exist, check whether any test file references them (grep for
fixtures in test code). Report fixture files that exist but are not used.
Write notes/test-diagnostics.md with:
# Test Diagnostic Report
**Project**: {project name}
**Date**: {date}
## Summary
- **Total test files**: {N}
- **Tests with placebo patterns**: {N}
- **Fixture files not used**: {N}
- **Overall health**: Healthy / Needs work / Critical
## Placebo Tests Found
### 1. Vacuous assertions
| File | Line | Pattern | Severity |
|------|------|---------|----------|
| `src/foo.py` | 42 | `is_finite()` | HIGH |
### 2. Circular round-trip
| File | Line | Pattern | Severity |
|------|------|---------|----------|
| `src/bar.py` | 85 | `parse(write(x))` | HIGH |
### 3. Unbounded thresholds
| File | Line | Value | Severity |
|------|------|-------|----------|
| `src/baz.py` | 120 | `residual < 10.0` | MEDIUM |
### 4. Synthetic-only data
| File | Line | Description | Severity |
|------|------|-------------|----------|
| `src/qux.py` | 200 | Blank zero-filled buffer | MEDIUM |
## Unused Fixture Files
| Fixture Path | Size | Last Modified |
|-------------|------|---------------|
| `fixtures/sample/input.dat` | 5.2 MB | 2025-01-15 |
## Recommendations
{Concrete guidance: which tests to rewrite, which fixtures to use, what success
criteria to define.}
Report to the user:
"Test diagnostic complete. See
notes/test-diagnostics.md.Found {N} placebo patterns across {M} files. {N} fixture files exist on disk but are not referenced in any test.
Recommended migration path:
- Review the report and fix HIGH severity items first
- Declare fixture files in DECISIONS.md for future
/drive-outcomessessions- Run
/init-projectto set the repo constitution before adopting ODD stages"