ступень ревью поднимает проход, а не риск
Полный набор гонялся чаще, чем оправдано, и размер задач тут вторая причина, не первая. Первая — триггеры: миграция схемы, публичный контракт и инвариант поднимали ступень, не добавляя ни одного прохода. Миграцию гоняет 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:
@@ -183,10 +183,11 @@ kebab-case.
|
||||
- **Вопросы к проходам** — поимённо, в форме `<имя прохода>: <вопрос>
|
||||
(<провенанс>)`;
|
||||
- **Триггеры профиля** — проектная конкретизация правила выбора профиля ревью:
|
||||
какие пути и контракты означают `wide`, что считается «поведением, видимым
|
||||
снаружи», что в этом проекте считается правилом идентичности, слияния или
|
||||
разбора — оно и поднимает прогон до `deep`. Уточняет умолчания конвейера, а не
|
||||
отменяет их;
|
||||
что в этом проекте считается **новым понятием или структурной единицей** (это
|
||||
поднимает прогон до `wide`) и что — правилом идентичности, слияния или разбора
|
||||
(до `deep`). Уточняет умолчания конвейера, а не отменяет их. Рабочее умолчание
|
||||
— `standard`: миграция схемы и публичный контракт ступень **не** поднимают,
|
||||
их проверяют проходы, которые в `standard` и так есть;
|
||||
- **Недоступно проверке** — два подраздела: «не проверит ни один проход»
|
||||
(принципиальная граница, по факту промаха не пересматривается) и «перестали
|
||||
проверять сознательно» (пересматривается первым).
|
||||
|
||||
@@ -16,8 +16,9 @@ upgrade` идёт по записям снизу вверх от версии п
|
||||
## Версия 3 — 2026-08-04
|
||||
|
||||
Оглавление целей переименовано, у задач появился род работы и раздел
|
||||
«Затрагивает». Раскладка меняется в одном файле, но переименование тянет за
|
||||
собой ссылки, поэтому шаги делаются одним заходом.
|
||||
«Затрагивает», сменилось умолчание профиля ревью. Раскладка меняется в одном
|
||||
файле, но переименование тянет за собой ссылки, поэтому шаги делаются одним
|
||||
заходом.
|
||||
|
||||
**Что добавилось:**
|
||||
|
||||
@@ -29,6 +30,11 @@ upgrade` идёт по записям снизу вверх от версии п
|
||||
2. **Раздел «Затрагивает»** в теле задачи — перечень границ, которых изменение
|
||||
касается (эндпоинт, таблица и миграция, формат на диске, публичный тип). Как
|
||||
и критерии приёмки, требуется к взятию в спринт, а не к заведению.
|
||||
3. **Умолчание профиля ревью сменилось** — это не раскладка, но проектный текст
|
||||
под него уже написан. `standard` стал рабочим умолчанием: миграция схемы,
|
||||
публичный контракт и инвариант ступень больше **не** поднимают, `wide`
|
||||
означает новое понятие или структурную единицу. Подраздел «Триггеры профиля»
|
||||
в `docs/review.md` остаётся на месте, но его содержимое надо перечитать.
|
||||
|
||||
**Что переехало:** `docs/tasks/PLAN.md` → `docs/tasks/ROADMAP.md`. Вместе с
|
||||
файлом переименован ключ конфига `tasks.plan` → `tasks.roadmap` и токены
|
||||
@@ -52,7 +58,12 @@ upgrade` идёт по записям снизу вверх от версии п
|
||||
спринт, остальное по ходу переоценки.
|
||||
5. Дописать раздел «Затрагивает» — тем же порядком и по той же причине: сперва
|
||||
набор спринта, остальное по мере того, как задача попадает в работу.
|
||||
6. `docs/.pm.json`: `"canon": 3`.
|
||||
6. Перечитать «Триггеры профиля» в `docs/review.md`: строки вида «миграция →
|
||||
`deep`» теперь дублируют умолчание с обратным знаком. Оставить там только то,
|
||||
что для этого проекта считается **новым понятием** и **правилом
|
||||
идентичности**, — и убрать остальное, иначе проект возвращает себе прежнюю
|
||||
частоту полного набора уточнением.
|
||||
7. `docs/.pm.json`: `"canon": 3`.
|
||||
|
||||
## Версия 2 — 2026-08-03
|
||||
|
||||
|
||||
@@ -282,10 +282,11 @@
|
||||
|
||||
### Триггеры профиля
|
||||
|
||||
Проектная конкретизация правила выбора профиля: какие пути и контракты означают
|
||||
`wide`, что здесь считается «поведением, видимым снаружи», что здесь считается
|
||||
правилом идентичности, слияния или разбора — оно поднимает прогон до `deep` и
|
||||
запускает независимую реализацию. Уточняет умолчания конвейера, не отменяет их.
|
||||
Проектная конкретизация правила выбора профиля: что здесь считается **новым
|
||||
понятием или структурной единицей** (поднимает прогон до `wide` и запускает
|
||||
архитектурный проход) и что — правилом идентичности, слияния или разбора
|
||||
(до `deep`, запускает независимую реализацию). Уточняет умолчания конвейера, не
|
||||
отменяет их; рабочее умолчание — `standard`.
|
||||
|
||||
### Недоступно проверке
|
||||
|
||||
|
||||
@@ -187,6 +187,13 @@
|
||||
роду работы** — три `fix` и ни одной `feature` под целью развития это
|
||||
разговор про цель, а не про набор, и увидеть его надо до заморозки, а не в
|
||||
докладе по итогам.
|
||||
|
||||
Здесь же последний дешёвый момент заметить **разнородную задачу**: раздел
|
||||
«Затрагивает» показывает границы до того, как заведено предложение об
|
||||
изменении. Строка, которая одна тянет задачу на ступень выше остального
|
||||
перечня, — кандидат на разрез (шов — в `tasks`, `references/split.md`).
|
||||
Замеченная здесь, она стоит одного `edit`; замеченная на ревью — выброшенного
|
||||
предложения.
|
||||
5. Задача, которой для взятия не хватает только критериев приёмки, границ или
|
||||
рода, дописывается здесь же — 2–5 утверждений с оракулами, перечень
|
||||
затрагиваемых границ, `--kind`. Но если для этого нужен ответ человека, это
|
||||
|
||||
@@ -352,6 +352,11 @@ python3 $tk adopt scan --from … | apply --plan … # разовая адап
|
||||
несколько, и у обеих есть проверяемый тест: части должны **мерджиться порознь** и
|
||||
**каждая давать видимую пользу**, а у штурма исход «выкинуть» — полноправный.
|
||||
|
||||
Там же **шов**: где резать, когда допустимых мест несколько. Коротко — по
|
||||
границе, которая одна поднимает ступень ревью выше остальных; и не резать, когда
|
||||
обе половины остаются в одной ступени, потому что несокращаемый костяк проверок
|
||||
платится за каждую задачу отдельно.
|
||||
|
||||
### Гигиена полей
|
||||
|
||||
Правится по ходу любой операции, которая задачи касается (но не «заодно» по
|
||||
|
||||
@@ -19,6 +19,30 @@
|
||||
Не проходит хотя бы одно — **не дроби**. Ложная декомпозиция плодит файлы,
|
||||
которые нельзя взять поодиночке, и переоценка потом склеивает их обратно.
|
||||
|
||||
## Где резать, если резать можно
|
||||
|
||||
Тест выше говорит, **допустим** ли разрез. Где его провести из нескольких
|
||||
допустимых мест — отвечает шов.
|
||||
|
||||
**Шов — там, где падает ступень ревью.** Раздел «Затрагивает» перечисляет
|
||||
границы; если одна строка перечня поднимает ступень выше остальных, эта часть и
|
||||
режется отдельно. Пример: задача вводит новый пакет и заодно добавляет два поля в
|
||||
существующий ответ. Целиком это `wide` — семь проходов по всему диффу. Разрезанная
|
||||
по шву, она даёт `wide` на маленьком новом пакете и `standard` на остатке.
|
||||
|
||||
**Считай костяк, а не файлы.** У каждой задачи есть несокращаемые четыре прохода
|
||||
(гейт, спеки, код, триаж), и они платятся за каждую. Разрез, после которого обе
|
||||
половины остаются в одной ступени, делает ревью **дороже**: тот же объём
|
||||
проверяется тем же составом, но костяк оплачен дважды. Отсюда правило: **резать,
|
||||
когда разрез снимает дорогой проход с большей части диффа**, и не резать, когда
|
||||
он просто делает файлы мельче.
|
||||
|
||||
**Это планирование, а не предписание процесса.** Ступень ревью выбирается по
|
||||
факту изменения — тем, кто его видит, — и в тело задачи не пишется: строка
|
||||
«делать профилем standard» это ровно тот второй дом правила выбора, который
|
||||
гигиена полей снимает. Шов пользуется ступенью как **признаком**, что в задаче
|
||||
две разнородные работы; решение о профиле остаётся за конвейером.
|
||||
|
||||
**Цель наследуется.** Все части несут `goal:` родителя: декомпозиция не меняет
|
||||
того, чему работа служит. Если у части цель другая — это признак, что дробили не
|
||||
по той границе, либо что часть вообще из другой работы.
|
||||
|
||||
Reference in New Issue
Block a user