Выявляйте неожиданные упрощения, которые агенты применяют до того, как работа попадает к вам.
Тест пропущен, чтобы получить зелёный статус, ошибка скрыта, заглушка оставлена, проверка типов подавлена. Anti-slop проверяет каждое изменение, сделанное агентом, и отправляет его обратно агенту-разработчику вместе с замечаниями.
- Тест пропущенsrc/checkout/coupon.test.ts:88
it.skip('rejects an expired coupon', …) - Ошибка игнорируетсяsrc/checkout/apply-coupon.ts:41
} catch {}
- ИсправленоТест пропущенAnti-slop
- ИсправленоОшибка игнорируетсяAnti-slop
Вид задачи — это воссоздание портала Coroid. Задача, файлы и найденные проблемы приведены для примера.
- Правила
- 106
- Группы
- 13
- Правила, блокирующие изменения по умолчанию
- 44
- Существующие нарушения, блокирующие изменение
- 0
На что именно обращается внимание
Правила объединены в группы. Каждое правило либо блокирует изменение, либо даёт рекомендацию, либо лишь фиксирует факт; владелец может изменить эти параметры для всей организации или отдельного проекта.
- Тесты
- Неправильно сфокусированные или пропущенные тесты, удалённые тесты, ослабленные или удалённые утверждения, тесты, которые не могут завершиться ошибкой, а также повторные запуски, скрывающие нестабильные тесты.
.only.skipexpect(true).toBe(true)
- Отключения
- Новые директивы отключения линтеров, игнорируемые ошибки типов, приведения к типу any и код, исключённый из покрытия тестами.
@ts-ignoreas anyeslint-disable
- Сборка и CI
- Удалённые или разрешённые к сбою шаги тестирования, заниженные пороги покрытия тестами, запуски тестов без тестов, пропущенные хуки коммитов и сохранённые результаты сборки.
continue-on-error: true--passWithNoTests
- Доказательства выполнения тестов
- Запуск тестов, в котором не было выполнено ни одного теста, меньшее число тестов по сравнению с предыдущим успешным запуском, частичный запуск, представленный как полный, а также кэшированные результаты, выдаваемые за новый запуск.
Tests: 0 total--onlyChanged
- Продуктивный код
- Заглушки, отладочный код, пометки вроде «в реальной реализации», инструкции для человека, фиктивные данные, а также продуктивный код, импортирующий тестовый код.
throw new Error('Not implemented')debugger;
- Обработка ошибок
- Ошибки, скрытые за значением по умолчанию, проверки прав доступа, позволяющие доступ при их сбое, а также повторные попытки без ограничений.
except: pass.catch(() => {})
- Безопасность
- Жестко закодированные секретные данные, отключенная проверка TLS, удаленные механизмы аутентификации, поддержка wildcard-правил CORS с учетными данными и формирование SQL-запросов из строк.
rejectUnauthorized: falseverify=False
- Архитектура
- Новые циклы импортов, импорты через границы, установленные вами, дублирующиеся блоки кода, код, оставшийся неиспользованным после изменения, а также новые копии шаблонов, которые вы уже вывели из употребления.
- Зависимости
- Изменение манифеста без обновления lockfile, вторая библиотека для задачи, которую уже выполняет другая, незафиксированные версии и обновления, не предусмотренные спецификацией.
"latest"
- Кэширование
- Ключи кэша без указания арендатора, кэши в оперативной памяти с неограниченным сроком хранения, а также значения, определённые при сборке, которые должны считываться во время выполнения кода.
- Комментарии
- Комментарии, которые повторяют следующую строку, описывают правку, содержат оговорки или противоречат коду рядом с ними.
// Updated to// should work
- Область изменений
- Файлы, не затронутые спецификацией, изменения только форматирования и переименования, не предусмотренные задачей.
- Ход агента
- Что делал агент по пути: удалял тест, который не проходил, или менял ожидаемое значение на то, что выдавал сбойный запуск.
Блокируются только те изменения, которые были внесены в ходе текущей правки
В большинстве репозиториев уже есть такие шаблоны. Anti-slop сортирует каждое найденное нарушение по источнику, чтобы существующий технический долг не задерживал нерелевантную работу.
- Новое
- Появилось в этом изменении. Нарушение правила блокировки отправляет изменение обратно агенту-разработчику.
- Затронутое
- Уже существует в строке или функции, которую изменяет данная правка. Оно фиксируется и исправляется, когда ваша дисциплина изменений этого потребует.
- Существующее
- Находится в другом месте репозитория. Оно фиксируется как технический долг в Factory, где можно создать задачу для исправления найденных по данному правилу нарушений.
Перемещение кода не считается его появлением. Копирование — да.
Именно вы определяете допустимые границы влияния каждого изменения
Дисциплина изменений указывает агенту-разработчику, что он может исправить во время работы.
- ТочечноеТолько то, что требуется по спецификации. Прочие проблемы лишь отмечаются, но не исправляются.
- СбалансированноеПо умолчаниюТакже исправляет небольшие проблемы в строках, которые всё равно затрагиваются изменением.
- ВосстанавливающееТакже устраняет найденные нарушения внутри функций, которые редактируются данной правкой.
Агент-разработчик действует в соответствии с теми же правилами
Anti-slop — это не только итоговый вердикт. Агент получает правила во время написания изменения и не может их игнорировать.
- Агент исходит из вашей дисциплины изменений и шаблонов, которые вы выделили, каждый со своей заменой.
- Она отслеживает правила быстрой проверки после каждого изменения и получает один шанс исправить блокирующие находки до запуска этапа QA.
- Агенты не могут принимать собственные находки. Если агент заявляет, что тест дал ошибочный результат, и вносит соответствующие изменения, рецензент должен одобрить такую правку.
- В файле репозитория
.coroid/anti-slop.ymlможно добавлять правила и исключать сгенерированные пути. Этот файл считывается на уровне базовой версии изменения, поэтому изменение не может ослабить собственные правила.
Заставьте уже используемых вами агентов соблюдать те же правила
Инженеры, работающие со своими собственными кодирующими агентами, также могут использовать правила вашей организации.
- AGENTS.md snippet
- Скачайте раздел с инструкциями для ваших агентов: дисциплина изменений проекта, выделенные шаблоны и самые важные правила.
- Coroid MCP server
anti_slop_rulesописывает опубликованную вами политику, аanti_slop_scanсканирует ветку синхронизированного проекта. Оба элемента доступны только для чтения.- Coroid Check в pull-запросах
- При включенных проверках pull request такая же проверка выполняется в pull-запросах GitHub, открытых вашими разработчиками, и помечает каждую найденную проблему прямо в строке кода.
Сначала протестировано на собственном коде Coroid
Coroid создана одним человеком и сотней агентов, поэтому функция anti-slop сначала протестирована в репозитории самой Coroid, прежде чем применяться к чужим проектам.
Сканирование каждого исходного файла
Мы просканировали все исходные файлы 11 536 в репозитории Coroid, имитируя действия агента. В ходе сканирования были обнаружены 6 шаблона, которые правила ошибочно пометили как проблемные. После их исправления количество блокирующих находок снизилось с 5 366 до 2 253.
То, что всё ещё блокирует изменения — это именно то, что должны выявлять правила: например, примечание в коде уведомлений: «В реальной реализации следует получать токен FCM пользователя».
Правила, по которым оценивается модель
Два правила заставляют модель анализировать по одной строке за раз: проверка на наличие элементов, которые уже исключены кодом, и выявление комментариев, противоречащих соседнему коду. Эти правила лишь дают рекомендации. Из 600 строк-кандидатов из реальных объединённых изменений они выявили нет ошибочно, причём их стоимость не превышает 0,0015 $ за один скан.
Включите этот механизм в разделе контроля качества
Владельцы и администраторы могут включить anti-slop по умолчанию для всей организации или для отдельного проекта. При следующем запуске проекта эта функция будет применена.
- Откройте раздел контроля качества и выберите организационный стандарт или проект.
- Включите anti-slop. Это добавит в политику пять требований.
- Выберите правила проверки изменений и группы, которые их блокируют. Отключение этой функции сохранит эти настройки для следующего использования.
Пять устанавливаемых требований
- Тесты по-прежнему подтверждают корректность изменений
- В продакшен не попадает ничего незавершённого или предназначенного только для тестов
- Не возникает нового структурного технического долга
- Изменение остаётся в рамках заданной области и соответствует стилю данного кода
- Новые зависимости являются реальными и надёжными.
- Стандарт организации3 проекта используют эти настройки.2 из 5
- Интернет-магазинСобственная настройка4 из 5
- Сайт документацииИспользует стандартные настройки2 из 5
- Проверка API для биллингаИспользует стандартные настройки2 из 5
- Мобильное приложениеИспользует стандартные настройки2 из 5
- Anti-slopСистема отправляет изменение обратно, если оно приводит к ухудшению результатов тестов, скрытию ошибок, отправке плейсхолдеров или созданию технического долга.
- Модульные тестыПри каждом изменении система находит и запускает модульные тесты, предусмотренные в репозитории.
- Тесты в браузере2 из 3отличается от стандартных настроекСистема выполняет браузерные тесты для проверки корректности работы с изменениями.
- Переводыотличается от стандартных настроекПроверяется соответствие переведённых строк, а также правильность использования плейсхолдеров и форм множественного числа.
- Проверки репозиторияСистема выполняет собственные команды, включая форматирование кода, проверку размера файлов, миграции, интеграционные тесты и сканирование на предмет уязвимостей.
- Тщательная QA-проверкаТщательная проверкаРежим тщательного контроля качества собирает актуальные доказательства и скриншоты в соответствии со спецификацией. При его отключении применяется стандартный режим проверки качества.