профили ревью: тяжёлые проходы в верхнюю ступень, на умолчании — один базовый
Тема 33 сняла самую большую разовую статью расхода, но не тронула главную — частоту. Меряющая пара стояла в standard, то есть на большинстве задач, и именно она делала прогон долгим: два прохода держат машину, идут цепочкой и доказывают находки запуском. Цель разбора названа прямо: лучше поправить в следующей задаче, чем держать одну два часа. adversary и ops переехали в wide. Стадия осталась самой урожайной за всю историю замеров — пять из семи выживших находок дозапуска и единственная находка про молчаливый старт отката, — но её ценность оплачивается на каждой задаче, а получается на немногих. Решение по цене, не по ценности. Заведён review-basics: мелкая осадка двух тяжёлых проходов, без единого запуска. Стоит только в standard. Восемь вопросов, на которые отвечают чтением: таймаут и отказ соседа, идемпотентность и одновременная запись, остановка на середине, частичный откат при двух версиях, наблюдаемость и тишина, очевидный рост объёма, второй способ мимо единой точки (грепом, не картой), что отсюда удалить. Потолок 4 находки, машину не держит, ничего не меряет. Вопрос про частичный откат — не для полноты списка. Без него правило «миграция схемы не поднимает ступень» рассыпалось бы: раньше миграцию разбирал ops, а он теперь наверху. Проход заведён затем, чтобы у standard остался хоть один взгляд на ось времени. Модель у него верхняя, opus, и это не спорит со словом «средний»: усилие режется входом и потолком, а не моделью. Дешёвая модель на опиниативном проходе платит триажем — это записанный замер, отменять его без нового замера нечем. Лестница вышла 4/5/7. Главный выигрыш не в числе проходов, а в том, что из standard ушла цепочка: теперь там гейт, три прохода одним сообщением и триаж — граф плоский, ждать некому. Правило выбора ступени переписано на два вопроса, и объём изменения вошёл в него впервые. Крупное или незнакомое — трогает несколько узлов, переносит ответственность, форму решения нащупывают по ходу — это wide, и он рассчитан на 5-10% задач. Мелкое — один узел, форма очевидна заранее, откат сводится к обратной правке — quick. Всё остальное standard, рабочее умолчание. Раньше ступень выбиралась только по классу изменения и на размер смотреть запрещала; теперь признаков два: класс отвечает за обратимость, объём — за цену разбирательства. Отрицательный тест сохранил прежнюю мудрость в новой рамке: что после мерджа не откатывается обратной правкой — не quick, каким бы маленьким ни был дифф. Три строки миграции идут в standard. Спорный случай решается вниз, и асимметрия объяснена ценой: ошибка в сторону standard стоит находки на следующей задаче, ошибка в обратную — трёх тяжёлых проходов на каждой задаче, выбранной неверно. Сделка записана вместе с обратной связью, иначе это тихая потеря качества. На quick и standard не проверяется ничего, что требует запуска: построенный путь, эксперимент против драйвера, любое число. Это самая крупная граница покрытия конвейера, и она идёт строкой в каждом таком прогоне поимённо. Сигналов о том, что ступень занижена, два: журнал дефектов в docs/review.md и сам basics — он единственный, кто смотрит на дифф целиком на нижних ступенях, и обязан сказать строкой, если задача выглядит крупнее профиля. Побочно: условие профиля design то же самое, так что rubric и architecture на предложении тоже упали до 5-10% задач. Тема 34 в DECISIONS.md, следствия 130-133. Версия канона не поднята; инструкция проекту дописана в пункт 8 записи «Версия 4». Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -232,11 +232,12 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
- **Вопросы к проходам** — поимённо, в форме `<имя прохода>: <вопрос>
|
||||
(<провенанс>)`;
|
||||
- **Триггеры профиля** — проектная конкретизация правила выбора профиля ревью:
|
||||
что в этом проекте считается **новым понятием или структурной единицей** — это
|
||||
поднимает прогон до `wide`, верхней ступени. Перечнем мест, а не вторым
|
||||
определением класса. Уточняет умолчания, а не отменяет их. Рабочее умолчание —
|
||||
`standard`: миграция схемы и публичный контракт ступень **не** поднимают, их
|
||||
проверяют проходы, которые в `standard` и так есть;
|
||||
что в этом проекте считается **крупным или незнакомым** изменением (поднимает
|
||||
прогон до `wide`, верхней ступени, — и она рассчитана на 5–10% задач) и что
|
||||
считается **мелким** (опускает до `quick`). Перечнем мест, узлами или
|
||||
capability, а не вторым определением класса. Уточняет умолчания, а не отменяет
|
||||
их. Рабочее умолчание — `standard`: миграция схемы и публичный контракт ступень
|
||||
**не** поднимают, их проверяют проходы, которые в `standard` и так есть;
|
||||
- **Недоступно проверке** — два подраздела: «не проверит ни один проход»
|
||||
(принципиальная граница, по факту промаха не пересматривается) и «перестали
|
||||
проверять сознательно» (пересматривается первым).
|
||||
|
||||
@@ -127,13 +127,17 @@ upgrade` идёт по записям снизу вверх от версии п
|
||||
человека. **Переименование ADR это перенос ссылок**: слаг стоит в
|
||||
`adr/README.md`, в `architecture.md` и в чужих документах, и делается одним
|
||||
проходом, иначе останутся битые ссылки (их `docs.py` потом и покажет).
|
||||
8. `docs/review.md`, подраздел «Триггеры профиля»: снести перечень мест для
|
||||
`deep` — профиль упразднён вместе с проходом независимой реализации, и
|
||||
перечень стал указателем в пустоту. Перечень для `wide` (новое понятие или
|
||||
структурная единица) остаётся: он и поднимает прогон до верхней ступени. Там
|
||||
же проверить журнал дефектов и «Недоступно проверке» на упоминания
|
||||
независимой реализации: класс «форма решения, где спека выбора не сделала»
|
||||
переезжает в подраздел «перестали проверять сознательно».
|
||||
8. `docs/review.md`, подраздел «Триггеры профиля» — переписать целиком, он
|
||||
отстал дважды. Снести перечень мест для `deep`: профиль упразднён вместе с
|
||||
проходом независимой реализации, и перечень стал указателем в пустоту.
|
||||
Оставшийся перечень перевести на новое правило: `wide` теперь означает не
|
||||
«новое понятие», а **крупное или незнакомое** изменение и рассчитан на 5–10%
|
||||
задач; отдельным списком назвать, что здесь считается **мелким** (это `quick`).
|
||||
Форма подраздела — в [skeletons.md](skeletons.md). Там же проверить журнал
|
||||
дефектов и «Недоступно проверке» на упоминания независимой реализации: класс
|
||||
«форма решения, где спека выбора не сделала» переезжает в подраздел «перестали
|
||||
проверять сознательно», а рядом с ним встаёт вторая честная строка — на
|
||||
`quick` и `standard` не проверяется ничего, что требует запуска.
|
||||
9. `docs/.pm.json`: `"canon": 4`.
|
||||
10. Позвать **обоих судей** — `doc-consistency` и `doc-code-drift`, шагом 6
|
||||
`upgrade`. Пунктов выше десять, половина из них ручная, и именно здесь видно,
|
||||
|
||||
@@ -283,11 +283,19 @@
|
||||
|
||||
### Триггеры профиля
|
||||
|
||||
Проектная конкретизация правила выбора профиля: что здесь считается **новым
|
||||
понятием или структурной единицей** — это поднимает прогон до `wide`, верхней
|
||||
ступени, и запускает архитектурный проход. Перечнем узлов или capability,
|
||||
поимённо. Уточняет умолчания конвейера, не отменяет их; рабочее умолчание —
|
||||
`standard`.
|
||||
Проектная конкретизация правила выбора профиля, двумя списками и поимённо —
|
||||
узлами или capability.
|
||||
|
||||
**Крупное или незнакомое здесь** — поднимает прогон до `wide`, верхней ступени:
|
||||
там идут враждебный, эксплуатационный и архитектурный проходы, и там же
|
||||
единственные замеры. Ступень рассчитана на **5–10% задач**; если сюда попадает
|
||||
каждая третья, список написан слишком широко.
|
||||
|
||||
**Мелкое здесь** — опускает до `quick`. Помни отрицательный тест конвейера: что
|
||||
после мерджа не откатывается обратной правкой (миграция, формат на диске,
|
||||
публичный контракт, имя), — не `quick`, каким бы маленьким ни был дифф.
|
||||
|
||||
Уточняет умолчания конвейера, не отменяет их; рабочее умолчание — `standard`.
|
||||
|
||||
### Недоступно проверке
|
||||
|
||||
|
||||
@@ -27,9 +27,10 @@
|
||||
|
||||
**Шов — там, где падает ступень ревью.** Раздел «Затрагивает» перечисляет
|
||||
границы; если одна строка перечня поднимает ступень выше остальных, эта часть и
|
||||
режется отдельно. Пример: задача вводит новый пакет и заодно добавляет два поля в
|
||||
существующий ответ. Целиком это `wide` — семь проходов по всему диффу. Разрезанная
|
||||
по шву, она даёт `wide` на маленьком новом пакете и `standard` на остатке.
|
||||
режется отдельно. Пример: задача перекладывает несколько узлов разом и заодно
|
||||
добавляет два поля в существующий ответ. Целиком это `wide` — семь проходов по
|
||||
всему диффу, включая два, что держат машину и идут цепочкой. Разрезанная по шву,
|
||||
она даёт `wide` на маленькой переложенной части и `standard` на остатке.
|
||||
|
||||
**Считай костяк, а не файлы.** У каждой задачи есть несокращаемые четыре прохода
|
||||
(гейт, спеки, код, триаж), и они платятся за каждую. Разрез, после которого обе
|
||||
|
||||
Reference in New Issue
Block a user