Коротко
Astral включила 413 правил линтера по умолчанию вместо 59 — незакреплённые зависимости сломали CI у всех. Но теперь ошибки можно массово починить AI-агентом за один проход.
Astral выпустила Ruff v0.16.0, и первое, что заметили разработчики с незакреплённой версией ruff в dev-зависимостях — упавший CI. Количество правил по умолчанию выросло с 59 до 413. Многие из них ловят серьёзные проблемы: синтаксические ошибки, runtime-ошибки, небезопасные паттерны — то, что раньше приходилось включать вручную, теперь работает из коробки без какой-либо конфигурации.
Саймон Уиллисон прогнал новый Ruff против трёх своих крупных проектов — Datasette, sqlite-utils и LLM. Команда uvx ruff@latest check . --fix --unsafe-fixes на sqlite-utils нашла 1618 ошибок, автоматически исправила 1538, оставила 80 на ручной разбор.
Оставшиеся ошибки показывают, какого рода вещи попадают под новые правила. datetime.datetime.now() без tz — правило DTZ005. Ловля голого Exception без указания типа — BLE001. Бесполезный доступ к атрибуту, результат которого ничему не присваивается — B018. Каждое срабатывание сопровождается понятным объяснением и ссылкой на документацию.
Самое интересное — не сами правила, а то, как Саймон с ними справился. Он поручил апгрейд LLM и sqlite-utils агенту Codex (GPT-5.6 Sol high), а Datasette — Claude Code с Opus 5. Формат вывода Ruff — номер правила, файл, строка, колонка, объяснение — оказался идеальным входом для кодинг-агента. Не нужно объяснять контекст, не нужно копировать куски кода в чат: агент читает вывод линтера и правит файлы.
Учитывая, что Astral теперь принадлежит OpenAI, это не кажется случайностью. Инструменты, чей вывод удобен для машинного потребления, становятся всё ценнее — не потому что люди не могут прочитать ошибку, а потому что агент может её исправить без посредника.
Практический вывод: если у вас в проекте ruff не закреплён версией, сейчас самое время это сделать — иначе следующий релиз снова сломает CI. А если хотите попробовать новые правила на существующем коде, одна команда даёт картину целиком: uvx ruff@latest check .. Оставшиеся после --fix ошибки — хороший материал, чтобы скормить их агенту и посмотреть, насколько автономно он справится.
Источник: Simon Willison's Weblog