agentsclimarketplace

Tdd red green

Skill manastalukdar/ai-devstudio/skills/tdd-red-green

Professional development studio for Claude Code CLI

Install
npx -y skills add manastalukdar/ai-devstudio --skill tdd-red-green

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Enforce true RED/GREEN TDD workflow with fail-first testing methodology

SKILL.md

9.4 KB, as published. Nobody here has run it

TDD Red-Green Workflow

I'll guide you through true Test-Driven Development with strict RED → GREEN → REFACTOR cycle enforcement.

TDD Philosophy (Based on obra/superpowers):

  • Write failing test FIRST (RED)
  • Write minimum code to pass (GREEN)
  • Refactor while keeping tests green
  • YAGNI: You Aren't Gonna Need It
  • DRY: Don't Repeat Yourself

Phase 1: Verify TDD Prerequisites

First, let me check your test setup:

# Check for cached framework detection (70% savings on cache hit)
CACHE_FILE=".claude/cache/test/framework-config.json"
CACHE_VALIDITY=86400  # 24 hours

if [ -f "$CACHE_FILE" ]; then
    LAST_MODIFIED=$(stat -c %Y "$CACHE_FILE" 2>/dev/null || stat -f %m "$CACHE_FILE" 2>/dev/null)
    CURRENT_TIME=$(date +%s)
    AGE=$((CURRENT_TIME - LAST_MODIFIED))

    if [ $AGE -lt $CACHE_VALIDITY ]; then
        FRAMEWORK=$(jq -r '.framework' "$CACHE_FILE" 2>/dev/null)
        if [ -n "$FRAMEWORK" ] && [ "$FRAMEWORK" != "null" ]; then
            echo "✓ Using cached framework: $FRAMEWORK"
            # Skip expensive detection, saves 70% tokens
        fi
    fi
fi

# Detect test framework (token-efficient with Grep)
detect_test_framework() {
    if [ -f "package.json" ]; then
        if grep -q "\"jest\"" package.json; then
            echo "jest"
        elif grep -q "\"vitest\"" package.json; then
            echo "vitest"
        elif grep -q "\"mocha\"" package.json; then
            echo "mocha"
        fi
    elif [ -f "requirements.txt" ] || [ -f "setup.py" ]; then
        if grep -q "pytest" requirements.txt setup.py 2>/dev/null; then
            echo "pytest"
        elif grep -q "unittest" requirements.txt setup.py 2>/dev/null; then
            echo "unittest"
        fi
    elif [ -f "go.mod" ]; then
        echo "go test"
    fi
}

FRAMEWORK=$(detect_test_framework)

if [ -z "$FRAMEWORK" ]; then
    echo "❌ No test framework detected"
    echo "Please install a test framework:"
    echo "  JavaScript/TypeScript: npm install --save-dev jest"
    echo "  Python: pip install pytest"
    echo "  Go: Native 'go test' support"
    exit 1
fi

echo "✓ Test framework detected: $FRAMEWORK"

Phase 2: TDD Workflow Guidance

I'll guide you through the RED-GREEN-REFACTOR cycle:

Step 1: RED - Write Failing Test First

Your task: Write a test that describes what you want to build.

echo "=== STEP 1: RED (Write Failing Test) ==="
echo ""
echo "Before writing any implementation code, you must:"
echo "1. Write a test that describes the desired behavior"
echo "2. Run the test to confirm it FAILS"
echo "3. Understand WHY it fails (no implementation exists)"
echo ""
echo "Example test structure:"

case $FRAMEWORK in
    jest|vitest)
        cat << 'EOF'

describe('UserAuth', () => {
  test('should authenticate valid user credentials', () => {
    const auth = new UserAuth();
    const result = auth.login('[email protected]', 'password123');
    expect(result.success).toBe(true);
    expect(result.token).toBeDefined();
  });
});

EOF
        ;;
    pytest)
        cat << 'EOF'

def test_user_authentication():
    auth = UserAuth()
    result = auth.login('[email protected]', 'password123')
    assert result['success'] is True
    assert 'token' in result

EOF
        ;;
esac

echo "After writing your test, run it to see it FAIL:"
case $FRAMEWORK in
    jest) echo "  npm test" ;;
    vitest) echo "  npm run test" ;;
    pytest) echo "  pytest" ;;
    "go test") echo "  go test ./..." ;;
esac

Step 2: Verify RED State

echo ""
echo "=== Verification Checkpoint ==="
read -p "Did your test FAIL as expected? (yes/no): " test_failed

if [ "$test_failed" != "yes" ]; then
    echo ""
    echo "⚠️ TDD Violation: Test should FAIL first!"
    echo ""
    echo "Common mistakes:"
    echo "  - Test passes immediately (implementation already exists)"
    echo "  - Test has syntax errors (doesn't run at all)"
    echo "  - Test doesn't actually test the behavior"
    echo ""
    echo "Fix: Ensure test runs and fails for the right reason"
    exit 1
fi

echo "✓ RED phase complete: Test is failing"

Step 3: GREEN - Write Minimum Code

echo ""
echo "=== STEP 2: GREEN (Make Test Pass) ==="
echo ""
echo "Now write the MINIMUM code to make the test pass:"
echo "  - Don't over-engineer"
echo "  - Don't add extra features"
echo "  - Don't optimize prematurely"
echo "  - Just make the test green"
echo ""
echo "YAGNI Principle: You Aren't Gonna Need It"
echo "  - No 'what if' code"
echo "  - No 'future-proofing'"
echo "  - Only what's needed NOW"

Step 4: Verify GREEN State

echo ""
read -p "Have you written the implementation? (yes/no): " impl_written

if [ "$impl_written" = "yes" ]; then
    echo ""
    echo "Run tests to verify GREEN state:"

    # Run tests based on framework
    case $FRAMEWORK in
        jest|vitest)
            npm test
            TEST_RESULT=$?
            ;;
        pytest)
            pytest
            TEST_RESULT=$?
            ;;
        "go test")
            go test ./...
            TEST_RESULT=$?
            ;;
    esac

    if [ $TEST_RESULT -eq 0 ]; then
        echo ""
        echo "✅ GREEN phase complete: Test is passing!"
    else
        echo ""
        echo "❌ Tests still failing. Continue implementing until green."
        exit 1
    fi
fi

Step 5: REFACTOR - Clean Up

echo ""
echo "=== STEP 3: REFACTOR (Clean Code) ==="
echo ""
echo "Now that tests are green, you can refactor:"
echo "  - Extract functions/methods"
echo "  - Remove duplication (DRY)"
echo "  - Improve naming"
echo "  - Simplify logic"
echo ""
echo "⚠️ CRITICAL: Run tests after each refactoring step!"
echo ""
echo "Safe refactoring loop:"
echo "  1. Refactor one small thing"
echo "  2. Run tests (should stay green)"
echo "  3. If green, commit"
echo "  4. Repeat"

Phase 3: TDD Cycle Monitoring

I'll help verify you're following true TDD:

# Check for common TDD violations
check_tdd_violations() {
    echo ""
    echo "=== TDD Health Check ==="

    # Check if tests exist for recent code
    RECENT_SOURCE_FILES=$(git log --name-only --pretty=format: --since="1 day ago" | grep -E '\.(ts|js|py|go)$' | grep -v test | sort -u)

    if [ ! -z "$RECENT_SOURCE_FILES" ]; then
        echo ""
        echo "Recent source files modified:"
        echo "$RECENT_SOURCE_FILES" | sed 's/^/  /'

        echo ""
        echo "Checking for corresponding tests..."

        for source_file in $RECENT_SOURCE_FILES; do
            # Look for test file
            test_file=$(echo "$source_file" | sed 's/\.\([^.]*\)$/.test.\1/')

            if [ ! -f "$test_file" ]; then
                echo "  ⚠️ No test found for: $source_file"
            else
                echo "  ✓ Test exists: $test_file"
            fi
        done
    fi

    # Check test-to-code ratio
    SOURCE_LINES=$(find . -name "*.ts" -o -name "*.js" -o -name "*.py" | grep -v test | xargs wc -l 2>/dev/null | tail -1 | awk '{print $1}')
    TEST_LINES=$(find . -name "*.test.*" -o -name "*_test.*" | xargs wc -l 2>/dev/null | tail -1 | awk '{print $1}')

    if [ ! -z "$SOURCE_LINES" ] && [ "$SOURCE_LINES" -gt 0 ]; then
        RATIO=$((TEST_LINES * 100 / SOURCE_LINES))
        echo ""
        echo "Test coverage ratio: ${RATIO}%"

        if [ $RATIO -lt 50 ]; then
            echo "  ⚠️ Low test coverage (target: 80%+)"
        elif [ $RATIO -lt 80 ]; then
            echo "  ⚙️ Moderate test coverage (target: 80%+)"
        else
            echo "  ✅ Good test coverage!"
        fi
    fi
}

check_tdd_violations

TDD Best Practices

Anti-Patterns to Avoid:

  • Writing implementation before test
  • Writing comprehensive tests after code is done
  • Skipping the RED phase
  • Testing implementation details instead of behavior
  • Writing tests that always pass

TDD Benefits:

  • Confidence in refactoring
  • Better design through testability
  • Living documentation
  • Fewer bugs in production
  • Faster debugging

Integration Points

This skill works well with:

  • /test - Run your TDD tests
  • /refactor - Safe refactoring with test coverage
  • /commit - Commit after each successful cycle

Next Steps

echo ""
echo "=== TDD Workflow Summary ==="
echo ""
echo "1. 🔴 RED:     Write failing test"
echo "2. ✅ GREEN:   Make test pass (minimum code)"
echo "3. 🔧 REFACTOR: Clean up while keeping tests green"
echo ""
echo "Repeat this cycle for each new feature or change!"
echo ""
echo "Suggested workflow:"
echo "  1. Start: /tdd-red-green (this skill)"
echo "  2. Develop: Follow RED-GREEN-REFACTOR"
echo "  3. Test: /test"
echo "  4. Commit: /commit"

Important: This skill enforces methodology, not automation. True TDD requires discipline and practice. Use this skill as a guide and checklist for each development cycle.

Credits: TDD methodology based on obra/superpowers RED/GREEN/REFACTOR workflow and YAGNI/DRY principles.

Token Optimization

Expected range: 800–2,000 tokens (initial), 100 tokens (no test framework)

Caching: Caches test framework config in .claude/cache/test/framework-config.json for 7 days. Invalidated when package.json changes.

Early exit: Returns immediately if no test framework is found in the project.

Patterns used: Grep-before-Read, early exit, git diff scope default, caching

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.