- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
8.5 KiB
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 убрала самый дорогой
проход, тема 34 — самый частый. Второе дало больше, хотя снятый проход был
дешевле каждого отдельного reimpl.
С131. Урожайность прохода не отвечает на вопрос, где ему стоять. Меряющая пара осталась самой ценной и всё равно уехала вверх: ценность оправдывает существование прохода, но не его частоту.
С132. Замена тяжёлого прохода лёгким записывается как сужение, а не как
эквивалент. basics задаёт те же вопросы чтением, и его ответы поэтому слабее
— условия вместо оракулов. Назвать это «покрыли то же дешевле» значит соврать
себе на первом же прогоне.
С133. Ступень, выбираемая по классу изменения, слепа к объёму. Правило, запрещавшее смотреть на размер, защищало от выбора по ощущению важности — и заодно отправляло трёхстрочную правку и переборку пяти узлов в один профиль. Признаков нужно два: класс отвечает за обратимость, объём — за цену разбирательства.