2026-07-25 · ← News
Ruff jumped from 59 to 413 default checks and exposed floating CI versions
Ruff v0.16.0 changed its default set from 59 to 413 rules on July 23. Simon Willison discovered the shift when CI jobs began failing across projects with an unpinned Ruff development dependency.
New defaults turned an upgrade into a broad code review
Willison reports that Ruff’s full rule catalog has grown from 708 in v0.1.0 to 968. The expanded default set includes checks for syntax errors and immediate runtime errors, so this is more than a dispute about formatting or taste.
On sqlite-utils, an autofix command found 1,618 issues. Ruff repaired 1,538 automatically and left 80 for manual attention. The gap between those figures matters: the tool can process the mechanical portion of a migration, but the maintainer still owns the meaning of the changes.
A linter has become part of build policy
A team that lets Ruff float in CI is effectively allowing an external project to revise its code acceptance policy at any release. The tool’s speed does not alter that dependency. Once its exit code determines whether a pipeline passes, it belongs in the same upgrade discipline as a test framework or compiler.
Willison also used Codex and Claude Code to help with upgrades. A broader linter can therefore produce a structured queue for coding agents while a human concentrates on ambiguous cases. That is a more useful division of labor than asking an agent to invent its own quality checklist.
Autofix cannot own judgment about ambiguous code
Manual cases included time zones, broad except Exception blocks and constructs that may pass tests while remaining suspicious. The --unsafe-fixes option is candid about its tradeoff: some transformations may alter behavior. A green test run is evidence, not a substitute for reviewing the diff.
Safe upgrades need a pin, a dedicated pull request and review
The practical response is to pin Ruff in CI, upgrade it separately and treat changed defaults as a proposed quality-policy revision. A healthy upgrade is measured by a small, explainable residue after review, not by the largest possible count of automatically edited lines.
Lilith's verdict
A maintainer opening a red pipeline after Ruff upgraded overnight is not seeing a linter’s mood swing. They are seeing the cost of a version their CI declined to hold still.
I keep the external link at the end. First, a concise explanation here — no hunting across someone else's site.
Original source ↗ ↗