- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
5.9 KiB
45. Корректор метки, доля small и корпус оценки (2026-08-07)
Три правки по следам тем 41–44, и все три закрывают дыры, которые эти решения и открыли.
Р182. Сигнал о заниженной метке переехал в review-code. Он жил в
review-basics — единственном месте. А basics с меткой small не
запускается, если у проекта нет своих тем: значит на типичном проекте задача с
меткой small шла без рантайм-проверки того, что метка верна. Дыра
появилась ровно вместе с удешевлением small и попала в самую вероятную точку
ошибки: занижают туда, где дешевле, а цена занижения там же и выросла — три темы
ядра смотрятся только против инвариантов.
code подходит по построению: он идёт при любой метке, видит дифф целиком, а
на small уже читает инварианты — то есть держит в руках весь материал, из
которого сигнал выводится. У basics сигнал остаётся вторым, подтверждающим: он
смотрит оптикой тем и видит то, чего не видно из кода как кода, — что вопросов,
отложенных до large, накопилось слишком много. Триаж теперь обязан сказать и
когда сигнала нет: «корректор отработал, возражений нет» и «корректор не
запускался» по молчанию неразличимы.
Р183. У small появилась доля, и она сформулирована сравнением, а не
числом. small не должен обгонять medium; ориентир — до трети задач.
Проверка нужна именно теперь: пока quick и standard совпадали составом,
дрейф между ними не стоил ничего, и её не было. Сейчас он стоит трёх тем ядра. У
дрейфа вниз есть стимул, и он назван: метку выбирает не автор, но по описанию,
написанному автором, — занижённое описание даёт занижённую метку без чьего-либо
умысла.
Р184. Размер оценивается по корпусу из пяти источников, а не по
дельта-спекам. Разметчик читал proposal.md и tasks.md, но design.md не
открывал вовсе, а метод был описан одной фразой «размер считается по
дельта-спекам». Дельты описывают заказанное поведение и молчат об объёме
работы: шесть шагов в двух узлах видны в tasks.md, а факт, что форму решения
выбирали из нескольких, — только в design.md. Каждый источник получил свою
строку по каждой оси, и каждая цифра в обосновании обязана быть привязана к
источнику поимённо.
Отсюда два правила, которых раньше не было. Расхождение источников по объёму
разрешается в пользу большего — и это не «спорное решается вниз»: то правило
разрешает ничью при равных данных, а здесь один источник просто видел больше.
Само расхождение — довод за незнакомое: если о задаче написано так, что
источники не сходятся в объёме, форму решения по ней не знают. Отсутствие
design.md у нетривиальной задачи читается так же — «форму знали заранее» ничем
не подтверждено.
Что из этого следует
С161. Корректор обязан идти чаще, чем корректируемое. Проверяющий, который запускается реже проверяемого, оставляет дыру именно там, где выбор был самым дешёвым, — то есть там, где ошибаются.
С162. Отсутствие сигнала — тоже сигнал, и его надо печатать. Молчание корректора неотличимо от его отсутствия, а решения по ним разные.
С163. Проверка доли формулируется сравнением, а не порогом. «Меньше, чем
medium» считается по любому журналу и не требует спорить о числе; порог «не
больше 30%» спорен ровно настолько, насколько несопоставимы задачи.
С164. Оценка по одному источнику — оценка по остатку. Источники о задаче отвечают на разные вопросы; пропущенный не ухудшает точность понемногу, а оставляет ось без данных.