Skip to content
Development
Command

/test-and-fix

Run tests and automatically fix common issues

From plugin
solana-ai-kit
10130 skills15 agents30 commands7 MCP
Install
> /plugin marketplace add solanabr/solana-ai-kit
> /plugin install solana-ai-kit@stbr

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/test-and-fix

Context preview

What this command does when you run it.

Run tests and automatically fix common issues

Command definition

test-and-fix.md
description: "Run tests and automatically fix common issues"

You are running tests and fixing any issues found. This command iteratively tests, diagnoses problems, fixes them, and retests.

Related Skills

  • [testing.md](../skills/ext/solana-dev/skill/references/testing.md) - Testing strategy details
  • [security.md](../skills/ext/solana-dev/skill/references/security.md) - Security fix patterns

Overview

This command follows a **test → diagnose → fix → retest** loop until all tests pass or manual intervention is needed.

Step 1: Initial Test Run

echo "🧪 Running initial tests..."

# Determine project type and run appropriate tests
if [ -f "Anchor.toml" ]; then
    # Anchor project
    anchor build && anchor test --skip-deploy
    TEST_STATUS=$?
elif grep -q "solana-program" Cargo.toml 2>/dev/null; then
    # Native Solana program
    cargo build-sbf && cargo test
    TEST_STATUS=$?
else
    # Standard Rust or backend
    cargo test
    TEST_STATUS=$?
fi

if [ $TEST_STATUS -eq 0 ]; then
    echo "✅ All tests passed!"
    exit 0
fi

echo "❌ Tests failed. Starting diagnosis..."

Step 2: Diagnose Issues

Analyze the test output to categorize failures:

Common Issue Categories

1. **Format Issues**

  • Code not formatted
  • Inconsistent style

2. **Clippy Warnings**

  • Lints not satisfied
  • Potential bugs

3. **Compilation Errors**

  • Syntax errors
  • Type mismatches
  • Missing imports

4. **Test Failures**

  • Failed assertions
  • Logic errors
  • Account validation failures (Solana)

5. **Runtime Errors**

  • Panics
  • Arithmetic overflow
  • Account errors (Solana)

Step 3: Automatic Fixes

Fix Format Issues

# Always start with formatting
echo "📝 Fixing format issues..."
cargo fmt

# For TypeScript tests
if [ -d "tests" ] && ls tests/*.ts >/dev/null 2>&1; then
    npx prettier --write "tests/**/*.ts"
fi

echo "✅ Format fixed"

Fix Clippy Warnings (Auto-fixable)

echo "🔧 Fixing clippy warnings..."

# Apply automatic clippy fixes
cargo clippy --fix --allow-dirty --allow-staged

# Note: Not all clippy warnings are auto-fixable
# Manual fixes may be needed for:
# - Logic issues
# - Unsafe code
# - Complex refactorings

echo "✅ Clippy auto-fixes applied"

Fix Common Solana Issues

Missing Account in Anchor Test

# If test fails with "Missing account: system_program"
# Add to test accounts:
# systemProgram: anchor.web3.SystemProgram.programId,

Account Not Mutable

# If error: "Account not mutable"
# Update account definition to include 'mut':
# #[account(mut)]

Insufficient Compute Units

# If error: "Exceeded CU limit"
# Add compute budget instruction in test:
# .preInstructions([
#   ComputeBudgetProgram.setComputeUnitLimit({ units: 400000 })
# ])

Step 4: Rerun Tests

echo "🔄 Retesting after fixes..."

# Run tests again
if [ -f "Anchor.toml" ]; then
    anchor test --skip-deploy
    TEST_STATUS=$?
elif grep -q "solana-program" Cargo.toml 2>/dev/null; then
    cargo test
    TEST_STATUS=$?
else
    cargo test
    TEST_STATUS=$?
fi

if [ $TEST_STATUS -eq 0 ]; then
    echo "✅ All tests now pass!"
    exit 0
fi

Step 5: Manual Fix Guidance

If automatic fixes didn't resolve all issues, provide guidance:

echo "⚠️  Manual fixes needed. Analyzing failures..."

# Parse test output for specific errors
# This is where AI assistance helps diagnose complex issues

Solana-Specific Manual Fixes

Account Validation Failures

// Error: "A has_one constraint was violated"
// Fix: Ensure account relationships match constraints

#[account(
    mut,
    has_one = authority @ ErrorCode::Unauthorized,  // authority must match
)]
pub vault: Account<'info, Vault>,

PDA Derivation Mismatch

// Error: "Invalid PDA seed"
// Fix: Verify seeds match between program and test

// Program:
seeds = [b"vault", authority.key().as_ref()]

// Test:
const [vaultPda] = PublicKey.findProgramAddressSync(
  [Buffer.from("vault"), authority.publicKey.toBuffer()],
  programId
);

Arithmetic Overflow

// Error: "Arithmetic overflow"
// Fix: Use checked arithmetic

// Bad:
vault.balance = vault.balance + amount;

// Good:
vault.balance = vault
    .balance
    .checked_add(amount)
    .ok_or(ErrorCode::Overflow)?;

Missing Signer

// Error: "Missing required signature"
// Fix: Ensure account is marked as Signer

#[account(mut)]
pub authority: Signer<'info>,  // Must be Signer, not SystemAccount

Backend Service Manual Fixes

Async/Await Issues

// Error: "Cannot call blocking function in async context"
// Fix: Use async version or spawn_blocking

// Bad:
async fn handler() -> Result<String> {
    std::fs::read_to_string("file.txt")?  // Blocking!
}

// Good:
async fn handler() -> Result<String> {
    tokio::fs::read_to_string("file.txt").await?
}

Database Connection Issues

// Error: "Connection pool exhausted"
// Fix: Increase pool size or close connections properly

let pool = PgPoolOptions::new()
    .max_connections(50)  // Increase if needed
    .connect(&database_url)
    .await?;

Step 6: Iterative Fixing

# Maximum fix iterations
MAX_ITERATIONS=5
ITERATION=1

while [ $ITERATION -le $MAX_ITERATIONS ]; do
    echo "🔄 Fix iteration $ITERATION/$MAX_ITERATIONS"

    # Apply automatic fixes
    cargo fmt
    cargo clippy --fix --allow-dirty --allow-staged

    # Run tests
    if [ -f "Anchor.toml" ]; then
        anchor test --skip-deploy
    else
        cargo test
    fi

    if [ $? -eq 0 ]; then
        echo "✅ All tests pass after $ITERATION iteration(s)!"
        exit 0
    fi

    ITERATION=$((ITERATION + 1))

    # If still failing after max iterations, need manual intervention
    if [ $ITERATION -gt $MAX_ITERATIONS ]; then
        echo "⚠️  Maximum iterations reached. Manual fixes required."
        echo "Please review the test ou
Read more
Ships withsolana-ai-kit

Production-ready Claude Code configuration for full-stack Solana development. Combines best practices from multiple sources into an agent-optimized, token-efficient config you can install and adapt to your specific project.

Get the whole plugin

Other commands on solana-ai-kit.