- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
88 lines
8.5 KiB
Markdown
88 lines
8.5 KiB
Markdown
# 34. Пропускная способность против глубины: тяжёлые проходы уехали в верхнюю ступень (2026-08-06)
|
||
|
||
Тема 33 сняла самую большую разовую статью расхода, но не тронула главную —
|
||
**частоту**. Меряющая пара стояла в `standard`, то есть на большинстве задач, и
|
||
именно она делала прогон долгим: два прохода держат машину, идут цепочкой и
|
||
доказывают находки запуском. Разбор шёл от цели, названной прямо: **лучше
|
||
поправить в следующей задаче, чем держать одну два часа.**
|
||
|
||
**Р137. `adversary` и `ops` переехали в `wide`, и это решение по цене, а не по
|
||
ценности.** Стадия осталась самой урожайной за всю историю замеров — пять из
|
||
семи выживших находок дозапуска и единственная находка про молчаливый старт
|
||
отката. Но её ценность оплачивается на **каждой** задаче, а получается на
|
||
немногих: оракул добывается запуском, запуск — это машина, цепочка и часы.
|
||
Ступень, которая раньше была умолчанием, стала исключением на 5–10% задач.
|
||
|
||
**Р138. Заведён `review-basics` — мелкая осадка двух тяжёлых проходов, без
|
||
единого запуска.** Он стоит только в `standard` и берёт ту половину вопросов, на
|
||
которые отвечают **чтением**: таймаут и отказ соседа, идемпотентность и
|
||
одновременная запись, остановка на середине, частичный откат при двух версиях,
|
||
наблюдаемость и тишина, очевидный рост объёма — плюс два вопроса архитектурного:
|
||
второй способ мимо единой точки (грепом, не картой) и что отсюда удалить.
|
||
Потолок 4 находки, машину не держит, ничего не меряет.
|
||
|
||
Отдельная его обязанность — **вопрос 4, частичный откат**. Без него правило
|
||
«миграция схемы не поднимает ступень» рассыпалось бы: раньше миграцию разбирал
|
||
`ops`, а он теперь в `wide`. Проход заведён не «до кучи», а затем, чтобы у
|
||
`standard` остался хоть один взгляд на ось времени.
|
||
|
||
Модель у него верхняя, `opus`, и это не противоречит слову «средний»: усилие
|
||
режется **входом и потолком**, а не моделью. Дешёвая модель на проходе
|
||
с мнением платит триажем — это записанный замер, и отменять его без нового замера
|
||
нельзя.
|
||
|
||
**Р139. Объём и незнакомость изменения вошли в правило выбора ступени.** Раньше
|
||
ступень выбиралась только по классу («вводит ли новое понятие»), и правило прямо
|
||
запрещало смотреть на размер. Теперь вопросов два: крупное или незнакомое
|
||
(трогает несколько узлов, переносит ответственность, форму решения нащупывают по
|
||
ходу) → `wide`; мелкое (один узел, форма очевидна заранее, откат — обратная
|
||
правка) → `quick`; всё остальное → `standard`. Причина смены: цена
|
||
разбирательства растёт именно с объёмом и неизвестностью, а не с классом
|
||
правила.
|
||
|
||
Отрицательный тест `quick` сохранил прежнюю мудрость в новой рамке: **что после
|
||
мерджа не откатывается обратной правкой — не `quick`, каким бы маленьким ни был
|
||
дифф.** Три строки миграции идут в `standard`.
|
||
|
||
**Р140. Спорный случай решается вниз, и асимметрия объяснена ценой.** Между
|
||
`standard` и `wide` — в пользу `standard`: ошибка сюда стоит находки на
|
||
следующей задаче, ошибка обратно стоит трёх тяжёлых проходов на каждой задаче,
|
||
выбранной неверно. Между `quick` и `standard` — тоже в пользу `standard`, но по
|
||
другой причине: там разница в один дешёвый проход, зато единственный, кто на
|
||
нижних ступенях смотрит на отказы.
|
||
|
||
Доля `wide` 5–10% записана как **проверка правила, а не пожелание**: если ступень
|
||
уходит каждой третьей задаче, её выбирают по ощущению важности.
|
||
|
||
**Р141. Сделка записана вместе с механизмом обратной связи, иначе это тихая
|
||
потеря качества.** На `quick` и `standard` не проверяется ничего, что требует
|
||
запуска: построенный путь, эксперимент против драйвера, любое число. Это самая
|
||
крупная граница покрытия конвейера, и она обязана идти строкой в каждом таком
|
||
прогоне поимённо. Обратная связь — журнал дефектов `docs/review.md`: класс,
|
||
который ловят только меряющие проходы, начал всплывать после мерджа — значит
|
||
ступень выбирают слишком низко. Плюс сам `basics` обязан сигналить строкой, если
|
||
видит, что ступень занижена: он единственный, кто смотрит на дифф целиком на
|
||
нижних ступенях.
|
||
|
||
## Что из этого следует
|
||
|
||
**С130. Стоимость прохода — это его цена, умноженная на частоту, и вторая
|
||
переменная важнее.** [Тема 33](33-review-cost-cut.md) убрала самый дорогой
|
||
проход, тема 34 — самый частый. Второе дало больше, хотя снятый проход был
|
||
дешевле каждого отдельного `reimpl`.
|
||
|
||
**С131. Урожайность прохода не отвечает на вопрос, где ему стоять.** Меряющая
|
||
пара осталась самой ценной и всё равно уехала вверх: ценность оправдывает
|
||
существование прохода, но не его частоту.
|
||
|
||
**С132. Замена тяжёлого прохода лёгким записывается как сужение, а не как
|
||
эквивалент.** `basics` задаёт те же вопросы чтением, и его ответы поэтому слабее
|
||
— условия вместо оракулов. Назвать это «покрыли то же дешевле» значит соврать
|
||
себе на первом же прогоне.
|
||
|
||
**С133. Ступень, выбираемая по классу изменения, слепа к объёму.** Правило,
|
||
запрещавшее смотреть на размер, защищало от выбора по ощущению важности — и
|
||
заодно отправляло трёхстрочную правку и переборку пяти узлов в один профиль.
|
||
Признаков нужно два: класс отвечает за обратимость, объём — за цену
|
||
разбирательства.
|