ступень ревью поднимает проход, а не риск
Полный набор гонялся чаще, чем оправдано, и размер задач тут вторая причина, не первая. Первая — триггеры: миграция схемы, публичный контракт и инвариант поднимали ступень, не добавляя ни одного прохода. Миграцию гоняет gate шагом миграций и разбирает ops, контракт сверяет specs направлением code→spec, инвариант даёт основание для critical любому проходу — все трое уже в standard. На проекте с базой и эндпоинтами верхняя ступень оказывалась не исключением, а умолчанием: правило объявляло исключением то, что происходит всегда. Теперь ступень поднимает то, что даёт работу новому проходу. wide означает ровно одно — изменение вводит новое понятие или структурную единицу; добавить поле в существующий ответ это не концепт. standard стал рабочим умолчанием. Проект, где изменение контракта и правда архитектурное, поднимает его сам в docs/review.md — уточнением, а не возвратом прежнего умолчания. Чекпоинт design получил то же условие: specs идёт всегда, rubric и architecture — только при новом понятии. Он стоит на каждой задаче, поэтому при мелкой нарезке три прохода умножаются на число задач. Со стороны задач — шов нарезки: тест декомпозиции отвечает, допустим ли разрез, шов отвечает, где его провести. Резать по границе, за которой падает ступень; не резать, когда обе половины остаются в одной — костяк из четырёх проходов платится за каждую задачу, и такой разрез делает ревью дороже. Порога в числе границ нет по тому же принципу, что в теме 16: размер не триггер. Дешёвое место заметить разнородную задачу — показ набора спринта, там «Затрагивает» уже написан, а предложение ещё не заведено. Правило выведено из состава проходов, а не из статистики прогонов — замер остаётся за обкаткой. DECISIONS 18, RRR–WWW и следствия 72–75; JJJ темы 17 помечен как пересмотренный. Шаг про «Триггеры профиля» дописан в ещё не выкаченную версию 3 канона, а не отдельной версией. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+79
-1
@@ -1178,7 +1178,9 @@ HTML-комментарии, невидимые в отрендеренном ma
|
||||
способом — `scripts/frontmatter.py`. Он же держит раскладку цветов (HHH) и
|
||||
сверку `name` с именем каталога.
|
||||
|
||||
**JJJ. Между `standard` и `deep` заведена ступень `wide`.** Прыжок стоил самого
|
||||
**JJJ. Между `standard` и `deep` заведена ступень `wide`.** *(содержание
|
||||
триггеров пересмотрено темой 18, TTT: миграция схемы и публичный контракт ступень
|
||||
не поднимают.)* Прыжок стоил самого
|
||||
дорогого прохода конвейера, а платить приходилось за одну архитектурную находку:
|
||||
изменений, которые трогают публичный контракт, но не вводят нового правила
|
||||
слияния, — большинство. `wide` — это `standard` плюс `architecture` (вход шире
|
||||
@@ -1245,3 +1247,79 @@ HTML-комментарии, невидимые в отрендеренном ma
|
||||
71. **Ступеней профиля четыре, и правило выбора читается сверху вниз.** Первое
|
||||
сработавшее условие и есть ответ: правило слияния → `deep`, контракт или
|
||||
схема → `wide`, видимое снаружи поведение → `standard`, иначе `quick`.
|
||||
|
||||
## 18. Ступень поднимает проход, а не риск (2026-08-04)
|
||||
|
||||
### Что было
|
||||
|
||||
Наблюдение с живых проектов: полный набор проходов гоняется чаще, чем оправдано —
|
||||
архитектура и независимая реализация нужны заметно реже, чем запускаются. Развилка
|
||||
названа сразу: крупные задачи с частым полным ревью либо мелкие и средние задачи
|
||||
со средним ревью. Выбран второй путь.
|
||||
|
||||
Разбор показал, что размер задач — только половина причины, и не главная.
|
||||
|
||||
### Решено
|
||||
|
||||
**RRR. Профиль — максимум по поверхности, а не средневзвешенное.** Условия
|
||||
читаются сверху вниз, первое подошедшее отвечает за весь дифф. Значит цена ревью
|
||||
растёт быстрее размера задачи: на крупной задаче верхний профиль оплачивается в
|
||||
том числе за ту её часть, которая сама по себе была бы `quick`. Это и есть
|
||||
механизм, ради которого выбран путь мелких задач.
|
||||
|
||||
**SSS. Ступень поднимает то, что даёт работу новому проходу, а не то, что кажется
|
||||
рискованным.** Правило вывода, по которому спорные случаи решаются без нового
|
||||
списка. Проверка нынешних триггеров этим правилом:
|
||||
|
||||
| Триггер | Кто закрывает | Где этот проход |
|
||||
| --- | --- | --- |
|
||||
| миграция схемы | `gate` (шаг миграций), `ops` (миграция под потоком, откат при двух версиях) | уже в `standard` |
|
||||
| публичный контракт | `specs`, направление `code → spec` | во всех профилях |
|
||||
| инвариант проекта | основание для `critical` у любого прохода | во всех |
|
||||
| новый пакет, новое понятие | `architecture` | только `wide` |
|
||||
| новое правило слияния | `reimpl` | только `deep` |
|
||||
|
||||
Три верхних триггера не добавляли ни одного прохода — они поднимали ступень «на
|
||||
всякий случай». На проекте с базой и эндпоинтами это делало верхнюю ступень
|
||||
умолчанием, то есть правило объявляло исключением то, что происходит всегда.
|
||||
|
||||
**TTT. Миграция схемы, публичный контракт и инвариант уехали в `standard`.**
|
||||
`wide` теперь означает ровно одно: изменение вводит **новое понятие или
|
||||
структурную единицу** — новый пакет или слой, новая точка входа, второй способ
|
||||
делать то, что уже делается, перенос ответственности между узлами. Добавленное
|
||||
поле в существующем ответе концептом не является. Это **отменяет часть JJJ темы
|
||||
17**: ступень `wide` остаётся, её содержание меняется. Проект, где изменение
|
||||
контракта и правда архитектурное (публичный SDK, чужие потребители), поднимает
|
||||
его сам в `docs/review.md` — уточнением, а не возвратом прежнего умолчания.
|
||||
|
||||
**UUU. Чекпоинт `design` получил то же условие.** `review-specs` в режиме «дизайн
|
||||
ДО кода» идёт всегда — это самый дешёвый чекпоинт конвейера. `review-rubric` и
|
||||
`review-architecture` — только при новом понятии. Причина арифметическая: чекпоинт
|
||||
стоит на **каждой** задаче, поэтому при мелкой нарезке три прохода умножаются на
|
||||
число задач и становятся самой большой статьёй. Причина по существу та же, что в
|
||||
SSS: рубрика на узел без нового понятия порождает свойства уже существующего
|
||||
рода, записанные конвенциями и спеками.
|
||||
|
||||
**VVV. Шов нарезки — граница, за которой падает ступень.** Тест декомпозиции
|
||||
отвечает, **допустим** ли разрез; шов отвечает, **где** его провести. Раздел
|
||||
«Затрагивает» перечисляет границы; строка, поднимающая ступень выше остальных, и
|
||||
есть кандидат на отдельную задачу.
|
||||
|
||||
**WWW. Костяк из четырёх проходов платится за каждую задачу.** Гейт, спеки, код,
|
||||
триаж несокращаемы, поэтому разрез, после которого обе половины остаются в одной
|
||||
ступени, делает ревью **дороже**: тот же объём тем же составом, но костяк оплачен
|
||||
дважды. Резать — когда разрез снимает дорогой проход с большей части диффа.
|
||||
|
||||
### Что из этого следует
|
||||
|
||||
72. **Порога в числе границ не заводится.** Тот же принцип, что в теме 16 (CCC):
|
||||
размер не триггер. Шов проходит по скачку ступени, а не по длине перечня.
|
||||
73. **Ступень — признак для планирования, но не запись в задаче.** Строка «делать
|
||||
профилем standard» в теле — тот самый второй дом правила выбора, который
|
||||
снимает гигиена полей. Профиль выбирает тот, кто видит изменение.
|
||||
74. **Дешёвое место заметить разнородную задачу — показ набора спринта.** Там
|
||||
«Затрагивает» уже написан, а предложение об изменении ещё не заведено: разрез
|
||||
стоит одного `edit` вместо выброшенного предложения.
|
||||
75. **Замер остаётся за обкаткой.** Правило выведено из состава проходов, а не из
|
||||
статистики прогонов: считать, какая доля задач попадает в каждую ступень,
|
||||
можно только на спринтах нового процесса (TODO шаг 4).
|
||||
|
||||
Reference in New Issue
Block a user