Files
ECC/commands/refactor-clean.md
T
Affaan MustafaandClaude Fable 5 0c0dfd839e feat(skills): add anti-slop and roast-me, wire into refactor and tdd surfaces
Adds two curated skills and threads them through existing surfaces:

- skills/anti-slop: slop catalog and removal rules for code, tests, process, prose. Tests must pay rent, review rounds cap at 2 without a confirmed P0/P1, zero-caller exports die on sight, one canonical implementation.
- skills/roast-me: adversarial critique with verdict tiers (FATAL/IMPORTANT/MINOR), six forced questions, and an execution gate. FATAL blocks implementation.
- orch-refine-code: roast pass before Gate 1, anti-slop rules in cleaner delegation.
- tdd-workflow: roast at plan handoff for multi-file plans; tests-pay-rent under coverage.
- refactor-clean + refactor-cleaner agent: one-canonical-implementation and same-PR test deletion rules.
- manifests/package/README: register the two new skills (288).

Concepts adapted from MIT prior art, credited in each skill.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019SDqUUbdK7s8x1JCtpri3c
2026-08-16 22:29:30 -04:00

3.1 KiB

description
description
Safely identify and remove dead code with verification after each change.

Refactor Clean

Safely identify and remove dead code with test verification at every step.

Step 1: Detect Dead Code

Run analysis tools based on project type:

Tool What It Finds Command
knip Unused exports, files, dependencies npx knip
depcheck Unused npm dependencies npx depcheck
ts-prune Unused TypeScript exports npx ts-prune
vulture Unused Python code vulture src/
deadcode Unused Go code deadcode ./...
cargo-udeps Unused Rust dependencies cargo +nightly udeps

If no tool is available, use Grep to find exports with zero imports:

# Find exports, then check if they're imported anywhere

Step 2: Categorize Findings

Sort findings into safety tiers:

Tier Examples Action
SAFE Unused utilities, test helpers, internal functions Delete with confidence
CAUTION Components, API routes, middleware Verify no dynamic imports or external consumers
DANGER Config files, entry points, type definitions Investigate before touching

Step 3: Safe Deletion Loop

For each SAFE item:

  1. Run full test suite — Establish baseline (all green)
  2. Delete the dead code — Use Edit tool for surgical removal
  3. Re-run test suite — Verify nothing broke
  4. If tests fail — Immediately revert with git checkout -- <file> and skip this item
  5. If tests pass — Move to next item

Step 4: Handle CAUTION Items

Before deleting CAUTION items:

  • Search for dynamic imports: import(), require(), __import__
  • Search for string references: route names, component names in configs
  • Check if exported from a public package API
  • Verify no external consumers (check dependents if published)

Step 5: Consolidate Duplicates

After removing dead code, look for:

  • Near-duplicate functions (>80% similar) — merge into one
  • Redundant type definitions — consolidate
  • Wrapper functions that add no value — inline them
  • Parallel systems doing one job — per anti-slop, one canonical implementation: merge or delete, never leave both
  • Tests obsoleted by the deletions — remove them in this same pass; a test asserting deleted behavior through a mock is dead code too
  • Re-exports that serve no purpose — remove indirection

Step 6: Summary

Report results:

Dead Code Cleanup
──────────────────────────────
Deleted:   12 unused functions
           3 unused files
           5 unused dependencies
Skipped:   2 items (tests failed)
Saved:     ~450 lines removed
──────────────────────────────
All tests passing PASS:

Rules

  • Never delete without running tests first
  • One deletion at a time — Atomic changes make rollback easy
  • Skip if uncertain — Better to keep dead code than break production
  • Don't refactor while cleaning — Separate concerns (clean first, refactor later)