aceternity-ui
100+ animated React components (Aceternity UI) for Next.js with Tailwind. Use for hero sections, parallax, 3D effects, or…
Validate test effectiveness with mutation testing using Stryker (TypeScript/JavaScript with Vitest or bun test via @hughescr/stryker-bun-runner) and mutmut (Python). Find weak tests that pass despite code mutations. Use to improve test quality.
Claude Code
$ npx -y skills add secondsky/claude-skills --skill mutation-testing --agent claude-code
Codex
$ npx skills add secondsky/claude-skills --skill mutation-testing -a codex -y
Cursor
$ npx skills add secondsky/claude-skills --skill mutation-testing -a cursor -y
Gemini CLI
$ npx skills add secondsky/claude-skills --skill mutation-testing -a gemini-cli -y
GitHub Copilot
$ npx skills add secondsky/claude-skills --skill mutation-testing -a github-copilot -y
OpenCode
$ npx skills add secondsky/claude-skills --skill mutation-testing -a opencode -y
Windsurf
$ npx skills add secondsky/claude-skills --skill mutation-testing -a windsurf -y
name: mutation-testing description: Validate test effectiveness with mutation testing using Stryker (TypeScript/JavaScript with Vitest or bun test via @hughescr/stryker-bun-runner) and mutmut (Python). Find weak tests that pass despite code mutations. Use to improve test quality. allowed-tools: Bash, Read, Edit, Write, Grep, Glob, TodoWrite license: MIT
Expert knowledge for mutation testing - validating that your tests actually catch bugs by introducing deliberate code mutations.
# Using Bun bun add -d @stryker-mutator/core @stryker-mutator/vitest-runner # Using npm npm install -D @stryker-mutator/core @stryker-mutator/vitest-runner
// stryker.config.mjs
export default {
packageManager: 'bun',
reporters: ['html', 'clear-text', 'progress'],
testRunner: 'vitest',
coverageAnalysis: 'perTest',
mutate: ['src/**/*.ts', '!src/**/*.test.ts'],
thresholds: { high: 80, low: 60, break: 60 },
incremental: true,
}Use when projects use `bun test` directly (not Vitest).
bun add -D @hughescr/stryker-bun-runner @stryker-mutator/core
// stryker.conf.mjs
export default {
testRunner: 'bun',
coverageAnalysis: 'perTest',
mutate: ['src/**/*.ts', '!src/**/*.test.ts'],
thresholds: { high: 80, low: 60, break: 60 },
incremental: true,
bun: {
inspectorTimeout: 5000, // WebSocket Inspector connection timeout (ms)
// bunPath: '/path/to/bun', // only if custom Bun install
// timeout: 30000, // test timeout (ms)
// env: { DEBUG: 'true' },
// bunArgs: ['--bail'],
},
}# Run mutation testing bunx stryker run # Incremental mode (only changed files) bunx stryker run --incremental # Specific files bunx stryker run --mutate "src/utils/**/*.ts" # Open HTML report open reports/mutation/html/index.html
// Source code
function calculateDiscount(price: number, percentage: number): number {
return price - (price * percentage / 100)
}
// ❌ WEAK: Test passes even if we mutate calculation
test('applies discount', () => {
expect(calculateDiscount(100, 10)).toBeDefined() // Too weak!
})
// ✅ STRONG: Test catches mutation
test('applies discount correctly', () => {
expect(calculateDiscount(100, 10)).toBe(90)
expect(calculateDiscount(100, 20)).toBe(80)
expect(calculateDiscount(50, 10)).toBe(45)
})uv add --dev mutmut
# Run mutation testing uv run mutmut run # Show results uv run mutmut results # Show specific mutant uv run mutmut show 1 # Generate HTML report uv run mutmut html open html/index.html
// Arithmetic Operator // Original: a + b → a - b, a * b, a / b // Relational Operator // Original: a > b → a >= b, a < b, a <= b // Logical Operator // Original: a && b → a || b // Boolean Literal // Original: true → false
| Score | Quality | Action | |-------|---------|--------| | 90%+ | Excellent | Maintain quality | | 80-89% | Good | Small improvements | | 70-79% | Acceptable | Focus on weak areas | | < 60% | Poor | Major improvements needed |
// Before: Mutation survives
test('calculates sum', () => {
expect(sum([1, 2, 3])).toBeGreaterThan(0) // Weak!
})
// After: Mutation killed
test('calculates sum correctly', () => {
expect(sum([1, 2, 3])).toBe(6)
expect(sum([0, 0, 0])).toBe(0)
expect(sum([])).toBe(0)
})// After: Tests boundaries
test('validates age boundaries', () => {
expect(isValidAge(18)).toBe(true) // Min valid
expect(isValidAge(17)).toBe(false) // Just below
expect(isValidAge(100)).toBe(true) // Max valid
expect(isValidAge(101)).toBe(false) // Just above
})# 1. Ensure good coverage first bun test --coverage # Target: 80%+ coverage # 2. Run mutation testing bunx stryker run # 3. Check report open reports/mutation/html/index.html # 4. Fix survived mutants # 5. Re-run incrementally bunx stryker run --incremental # or: npx stryker run --incremental
145 production-ready skills for Claude Code CLI 🔌 Platform / Harness Support These plugins ship as Claude Code marketplace plugins (.claude-plugin/ manifests) and Codex CLI plugins (.codex-plugin/ manifests).
100+ animated React components (Aceternity UI) for Next.js with Tailwind. Use for hero sections, parallax, 3D effects, or…
Secure API authentication with JWT, OAuth 2.0, API keys. Use for authentication systems, third-party integrations,…
Creates comprehensive API changelogs documenting breaking changes, deprecations, and migration strategies for API consumers. Use…
Verifies API contracts between services using consumer-driven contracts, schema validation, and tools like Pact. Use when testing…
Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use…
Implements standardized API error responses with proper status codes, logging, and user-friendly messages. Use when building…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.