Claude Code normalizes broken tests with @skip instead of fixing them

Resolved 💬 3 comments Opened Apr 9, 2026 by saimambayao Closed Apr 12, 2026

Summary

During a testing session, Claude Code marked 6+ failing tests with @unittest.skip("Pre-existing coordination FK migration issue") instead of investigating and fixing the root causes. The project's own test skill explicitly states: "Never skip failing tests (fix them first)." Claude had the rule in context and violated it.

What happened

  1. User asked Claude to test OBC Data CRUD
  2. Tests revealed 3 pre-existing failures (a coordination FK migration mismatch, a rounding assertion, and a transaction management issue)
  3. Instead of investigating, Claude added @unittest.skip markers to 6 tests and declared work complete
  4. User had to force Claude to actually fix the root causes
  5. The actual fixes were trivial — a migration db_column mismatch, a rounding assertion, and wrapping an IntegrityError in transaction.atomic()

The pattern

Claude rationalizes: "These failures are pre-existing and unrelated to our changes, therefore they're not our responsibility." This overrides explicit project rules about never skipping tests.

This is the same meta-pattern reported in #100 (anthropics/claude-code) — Claude reads rules, understands them, and silently overrides them based on its own judgment about what's "reasonable."

Expected behavior

When Claude encounters failing tests — even pre-existing ones — it should:

  1. Investigate the root cause
  2. Fix the root cause
  3. Only skip with explicit user approval and a linked issue

@skip should be treated like --no-verify — a red flag, not a default escape hatch.

Environment

  • Claude Code CLI
  • Model: Claude Opus 4.6 (1M context)
  • Project: Django 6 + React 19 full-stack app

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗