профили ревью: тяжёлые проходы в верхнюю ступень, на умолчании — один базовый

Тема 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:
av
2026-08-06 19:29:07 +03:00
co-authored by Claude Opus 5
parent ea84a4fbb3
commit 21b840a8e4
17 changed files with 553 additions and 141 deletions
+84
View File
@@ -2328,3 +2328,87 @@ JJJ): у профиля обязан быть один правильный от
стоимости, тест выбора верхней ступени и проектный перечень мест держались
только на `reimpl`. Оставшись, они выглядели бы работающими правилами и
тратили бы внимание на каждом прогоне.
## 34. Пропускная способность против глубины: тяжёлые проходы уехали в верхнюю ступень (2026-08-06)
Тема 33 сняла самую большую разовую статью расхода, но не тронула главную —
**частоту**. Меряющая пара стояла в `standard`, то есть на большинстве задач, и
именно она делала прогон долгим: два прохода держат машину, идут цепочкой и
доказывают находки запуском. Разбор шёл от цели, названной прямо: **лучше
поправить в следующей задаче, чем держать одну два часа.**
**ААББСС. `adversary` и `ops` переехали в `wide`, и это решение по цене, а не по
ценности.** Стадия осталась самой урожайной за всю историю замеров — пять из семи
выживших находок дозапуска и единственная находка про молчаливый старт отката. Но
её ценность оплачивается на **каждой** задаче, а получается на немногих: оракул
добывается запуском, запуск — это машина, цепочка и часы. Ступень, которая раньше
была умолчанием, стала исключением на 5–10% задач.
**ААББТТ. Заведён `review-basics` — мелкая осадка двух тяжёлых проходов, без
единого запуска.** Он стоит только в `standard` и берёт ту половину вопросов, на
которые отвечают **чтением**: таймаут и отказ соседа, идемпотентность и
одновременная запись, остановка на середине, частичный откат при двух версиях,
наблюдаемость и тишина, очевидный рост объёма — плюс два вопроса архитектурного:
второй способ мимо единой точки (грепом, не картой) и что отсюда удалить. Потолок
4 находки, машину не держит, ничего не меряет.
Отдельная его обязанность — **вопрос 4, частичный откат**. Без него правило
«миграция схемы не поднимает ступень» рассыпалось бы: раньше миграцию разбирал
`ops`, а он теперь в `wide`. Проход заведён не «до кучи», а затем, чтобы у
`standard` остался хоть один взгляд на ось времени.
Модель у него верхняя, `opus`, и это не противоречит слову «средний»: усилие
режется **входом и потолком**, а не моделью. Дешёвая модель на опиниативном
проходе платит триажем — это записанный замер, и отменять его без нового замера
нельзя.
**ААББУУ. Объём и незнакомость изменения вошли в правило выбора ступени.** Раньше
ступень выбиралась только по классу («вводит ли новое понятие»), и правило прямо
запрещало смотреть на размер. Теперь вопросов два: крупное или незнакомое (трогает
несколько узлов, переносит ответственность, форму решения нащупывают по ходу) →
`wide`; мелкое (один узел, форма очевидна заранее, откат — обратная правка) →
`quick`; всё остальное → `standard`. Причина смены: цена разбирательства растёт
именно с объёмом и неизвестностью, а не с классом правила.
Отрицательный тест `quick` сохранил прежнюю мудрость в новой рамке: **что после
мерджа не откатывается обратной правкой — не `quick`, каким бы маленьким ни был
дифф.** Три строки миграции идут в `standard`.
**ААББФФ. Спорный случай решается вниз, и асимметрия объяснена ценой.** Между
`standard` и `wide` — в пользу `standard`: ошибка сюда стоит находки на следующей
задаче, ошибка обратно стоит трёх тяжёлых проходов на каждой задаче, выбранной
неверно. Между `quick` и `standard` — тоже в пользу `standard`, но по другой
причине: там разница в один дешёвый проход, зато единственный, кто на нижних
ступенях смотрит на отказы.
Доля `wide` 5–10% записана как **проверка правила, а не пожелание**: если ступень
уходит каждой третьей задаче, её выбирают по ощущению важности.
**ААББХХ. Сделка записана вместе с механизмом обратной связи, иначе это тихая
потеря качества.** На `quick` и `standard` не проверяется ничего, что требует
запуска: построенный путь, эксперимент против драйвера, любое число. Это самая
крупная граница покрытия конвейера, и она обязана идти строкой в каждом таком
прогоне поимённо. Обратная связь — журнал дефектов `docs/review.md`: класс,
который ловят только меряющие проходы, начал всплывать после мерджа — значит
ступень выбирают слишком низко. Плюс сам `basics` обязан сигналить строкой, если
видит, что ступень занижена: он единственный, кто смотрит на дифф целиком на
нижних ступенях.
### Что из этого следует
130. **Стоимость прохода — это его цена, умноженная на частоту, и вторая
переменная важнее.** Тема 33 убрала самый дорогой проход, тема 34 —
самый частый. Второе дало больше, хотя снятый проход был дешевле каждого
отдельного `reimpl`.
131. **Урожайность прохода не отвечает на вопрос, где ему стоять.** Меряющая пара
осталась самой ценной и всё равно уехала вверх: ценность оправдывает
существование прохода, но не его частоту.
132. **Замена тяжёлого прохода лёгким записывается как сужение, а не как
эквивалент.** `basics` задаёт те же вопросы чтением, и его ответы поэтому
слабее — условия вместо оракулов. Назвать это «покрыли то же дешевле» значит
соврать себе на первом же прогоне.
133. **Ступень, выбираемая по классу изменения, слепа к объёму.** Правило,
запрещавшее смотреть на размер, защищало от выбора по ощущению важности — и
заодно отправляло трёхстрочную правку и переборку пяти узлов в один профиль.
Признаков нужно два: класс отвечает за обратимость, объём — за цену
разбирательства.