верхняя ступень ревью задана тестом, а не списком
«Идентичность, слияние, разбор» пришли из одного проекта, и в общем виде формулировка не читалась: вопрос «как применить это к моему проекту» не имел ответа в тексте. Теперь класс задан тремя условиями, не зависящими ни от домена, ни от языка: вариантов несколько и оба защитимы; спека между ними не выбирает; неверный выбор не падает, а даёт правдоподобный результат и молча меняет смысл данных. Отрицательный тест сильнее трёх положительных: то, что красит гейт, роняет запрос или ломает тест, в класс не входит — это ловят проходы дешевле. Отсюда же и причина, по которой класс достался самому дорогому проходу: независимая реализация выберет другой вариант, и дифф между вариантами и есть находка; там, где вариант один, она совпадёт с существующей. Три слова остались как три места, где такие правила водятся — граница, где данные входят или встречаются: состав ключа и нормализация перед сравнением; победитель конфликта и тай-брейк при равенстве; границы токенов и неоднозначный вход. Проект перечисляет свои места в docs/review.md, и перечень производен от теста, а не заменяет его. Две оговорки, без которых правило вырождается: - триггер — новое или изменённое по существу правило, а не код рядом с ним; иначе проект, чей домен и состоит из таких правил, всегда в deep; - проект, где такого класса нет вовсе, deep не запускает никогда, и это законное состояние, а не недонастройка. review-reimpl получил тот же тест и право сказать первой строкой, что позвали не на его класс, — строкой в границы покрытия, а не отказом работать. DECISIONS 18, XXX и следствия 76–77. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,11 +38,32 @@ color: yellow
|
||||
твоя версия проще, потому что не знает, чего проект боится.
|
||||
|
||||
**Тебя запускают только в верхнем профиле, `deep`, а не всегда.** Он выбирается
|
||||
ровно тогда, когда изменение вводит **новое правило идентичности, слияния или
|
||||
разбора** (проектная формулировка — в разделе
|
||||
`docs/review.md`, если он там записан); ты — единственное, чем `deep` отличается
|
||||
от соседней ступени `wide`. Вне этого случая твой счёт — самый большой в
|
||||
конвейере (он
|
||||
ровно тогда, когда вводится или меняется по существу **правило идентичности,
|
||||
слияния или разбора**; ты — единственное, чем `deep` отличается от соседней
|
||||
ступени `wide`.
|
||||
|
||||
Класс задан тестом, а не списком, и тест не зависит ни от домена, ни от языка.
|
||||
Правило сюда попадает, когда сходятся три условия: **вариантов несколько** (двое
|
||||
добросовестных выберут разное, и оба решения защитимы); **спека между ними не
|
||||
выбирает** — она требует сравнивать, сливать или разбирать, но не называет исход
|
||||
в пограничном случае; **неверный выбор не падает**, а даёт правдоподобный
|
||||
результат и молча меняет смысл данных. Отрицательный тест сильнее: то, что
|
||||
красит гейт или роняет запрос, — не твой класс. Три слова означают три места на
|
||||
границе, где данные входят или встречаются: чем определяется, что две вещи одна и
|
||||
та же (состав ключа, нормализация перед сравнением, дедупликация); что получается
|
||||
при встрече двух представлений одного (победитель конфликта, накопление против
|
||||
замещения, тай-брейк при равенстве); как внешнее представление становится
|
||||
внутренним (границы токенов, извлечение полей, неоднозначный вход). Проектный
|
||||
перечень мест — в `docs/review.md`, если он там записан; он производен от теста,
|
||||
а не расширяет его.
|
||||
|
||||
**Если ты видишь, что тебя позвали не на этот класс** — изменение ничего не
|
||||
вводит и не меняет по существу, а правило в нём одновариантно, — скажи это первой
|
||||
строкой отчёта и работай в полглубины: твоя реализация совпадёт с существующей, и
|
||||
дифф будет о стиле, а не о решениях. Это строка в границы покрытия, а не отказ
|
||||
работать.
|
||||
|
||||
Вне этого случая твой счёт — самый большой в конвейере (он
|
||||
определяется объёмом вывода: ты пишешь реализацию целиком), а независимый взгляд
|
||||
в значительной мере уже дал профиль `design` — код писался под его находки. Если
|
||||
тебя позвали, значит случай тот самый: работай в полную глубину и не экономь на
|
||||
|
||||
Reference in New Issue
Block a user