Перейти к содержимому

← Skills

pin-the-case-that-narrowed-the-rule

Когда проверка срабатывает не на той цели, исправление делает её слабее. Зафиксируйте ложное срабатывание тестом в том же commit, иначе правило разрушится незаметно.

ПаттернПроисхождение: cleanСостояние: activev0.1.0 · Apache-2.0

Присвоено человеком, который прочитал карточку, а не заявлено файлом о самом себе. Карточка, которую агент выводит во время запуска, поглотившего недоверенное содержимое, рождается заражённой и удерживается на разбор, прежде чем её вообще извлекут.

Когда это вспоминается

  • линтер ругается на законный код
  • добавляю исключение
  • ложное срабатывание в CI
  • ослабляю проверку

Ценность обычно лежит в разделах «Избегать» и «Проверить». «Делать» — это раздел, который пишут все.

Текст карточки выше — перевод. Английский оригинал — это то, что импортирует командная строка, что читает агент во время работы и что подтверждает хеш ниже.

Повод

Написанная вами проверка упала на чём-то, что на самом деле в порядке, и вы собираетесь добавить исключение, запись в allowlist или более узкий шаблон.

Это не относится к случаю, когда проверка нашла настоящую проблему, — чините проблему. Не относится это и к подстройке порога до того, как проверка хоть раз поработала всерьёз.

Делать

  1. Запишите одним предложением, почему помеченный случай законен. Если не можете, то, возможно, проверка права, а код неверен.
  2. Добавьте в набор тестов оба случая: законный, который обязан проходить, и синтетическую версию настоящего нарушения, которая обязана по-прежнему падать.
  3. Сужайте правило как можно меньше. Исключайте путь, а не целый каталог; требуйте отрицания рядом, а не выбрасывайте фразу из списка.
  4. Помещайте сужение в отдельный коммит и указывайте в сообщении, какой случай к нему вынудил.

Избегать

Удалять правило, потому что оно однажды помешало. Избегайте и более тихой версии: расширять исключение, пока правило не перестанет покрывать ничего, — allowlist, растущий каждый спринт, это правило, которое выводят из строя по строчке, без чьего-либо решения его вывести.

Не исключайте по файлу, когда настоящее различие — по смыслу. Проверка фразы, запрещающая предложение целиком, запретит и предупреждение, которое его отрицает, и честное лечение — требовать отрицания, а не переставать проверять эту страницу.

Проверить

После сужения запустите набор с вновь внесённым исходным нарушением. Оно обязано по-прежнему падать.

Затем прочтите дифф самого правила и спросите: какой класс проблем теперь может пройти, а раньше не мог? Если ответить не получается, сужение не было понято.

Риск

Это добавляет тест на каждое исключение, а набор, полный тестов на исключения, — набор, который утомительно читать.

Больший риск — считать закреплённый тест доказательством того, что правило по-прежнему сильно. Он доказывает, что один случай всё ещё падает. Правило, суженное пять раз, имеет пять закреплённых случаев и, возможно, большую дыру между ними, и увидеть её можно, только перечитав правило целиком.

Как применить

Карточка — это данные. Склонируйте репозиторий и импортируйте её по пути: всё, что приходит по сети, считается заражённым и удерживается до одобрения — это и есть желаемое поведение, и поэтому здесь нет установщика в одну строку.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/pin-the-case-that-narrowed-the-rule/SKILL.md

Целостность

SHA-256 файла в опубликованном виде. Импортёр может проверить, что полученное совпадает с показанным на этой странице.

9ae6da37eebf345c4dc4df56dd7506b00ea89e8ee74738afa8ffeab7a56bf0ed

Читать карточку в репозитории →