Anti-Slop: жёсткий линтер против AI-мусора в TypeScript
Qwen уколол Claude: веса не меняются, а линтер чинит код в рантайме
Статья посвящена AI slop — коду, который выглядит рабочим, но ухудшает архитектуру проекта. Автор ссылается на данные GitClear: в проектах с генеративным ИИ дублирование блоков растёт в 4–8 раз, а рефакторинг снижается на 60%. Мягкие инструкции вроде Claude.md ненадёжны, потому что агенты могут их игнорировать. Решение — линтер Anti-Slop на базе Oxlint. Он жёстко отклоняет any, вложенные утверждения типов и широкие параметры объектов, даёт конкретные подсказки и заставляет агента исправлять код. Это снижает технический долг в TypeScript-проектах и не допускает AI-мусор в production.
Материал Stork.AI разбирает проблему так называемого AI slop — кода, который генерируют ИИ-агенты и который выглядит рабочим и проходит базовые проверки, но на уровне архитектуры оказывается вредным. Автор подчёркивает: внешне такой код часто кажется нормальным, поэтому человеческая проверка легко пропускает его. При этом в проекте постепенно накапливаются дублированные паттерны, растёт сложность, а будущим командам приходится разбирать хаос, который не должен был попадать в production. Приводятся данные GitClear по 211 миллионам строк: в проектах с активным использованием ИИ количество дублированных блоков увеличивается в 4–8 раз, объём рефакторинга снижается на 60%, а churn-показатели резко растут. По мнению автора, это не просто небольшие неэффективности, а системное ухудшение кодовой базы. Далее в статье объясняется, почему привычные мягкие ограничения не работают. Файлы-инструкции вроде Claude.md создаются для того, чтобы направлять ИИ-агентов к качественному коду и предотвращать появление AI slop. Но агенты способны игнорировать такие рекомендации, особенно когда не видят другого решения при генерации сложного кода. Это приводит к нестабильному качеству: агент может внезапно добавить дублирование или широко использовать any и не следовать собственным промптам. Автор называет это не ленью инженеров, а системным провалом инструментов. Основное решение, которое описывается в статье, — это Anti-Slop. Проект представляет собой набор строгих, opinionated правил линтинга для TypeScript. Правила направлены против типичных паттернов, характерных для ИИ-генерации: повсеместных any-типизаций, вложенных утверждений типов и слишком широких типов параметров объектов. Вместо мягких инструкций Anti-Slop генерирует жёсткие ошибки линтера, которые нельзя просто проигнорировать. Если агент выдаёт проблемный код, он получает конкретное детерминированное сообщение о том, что исправить. Это создаёт итерационный цикл: агент вынужден возвращаться и переделывать код до тех пор, пока он не станет безопаснее для кодовой базы. Важная техническая деталь — Anti-Slop построен на Oxlint, Rust-линтере, который работает в 50–100 раз быстрее ESLint. Такая скорость важна для агентных рабочих процессов, потому что мгновенная обратная связь позволяет проверять код и управлять итерациями без замедления разработки. Анти-slop использует vendored-подход: команды копируют правила прямо в свой репозиторий, а не подключают внешний пакет. Это даёт возможность настраивать правила под стандарты конкретного проекта. В статье также коротко поясняется философия проекта: типизация должна быть не украшением, а доказательством. Анти-slop отклоняет вложенные утверждения типов, моканье модулей и широкие объектные параметры, требуя явного анализа границ и понятных комментариев безопасности для неконстантных утверждений типов. Таким образом, для разработчиков, уже использующих ИИ-генерацию кода, Anti-Slop может стать практическим quality gate, который снижает риск незаметного роста технического долга.