Команда может ответить «проверено», не проверив ничего, — и это хуже отказа
flang check на документе старого формата отвечал так:
{"valid": true, "module": "Продажи", "functions": [], "diagnostics": []}
Файл при этом объявляет утилиту с правилами, свойствами и примерами. Разборщик языка её понимает и раскладывает целиком — в узлы наследия (legacy), — но функцией она не становится: превращал утилиту в функцию мост к ядру старого проекта, а ядро уехало. Проверять оказалось нечего, и команда честно ответила «проверено» о пустом множестве.
Почему это хуже отказа. По красному ответу видно, что случилось. По зелёному с пустым списком — нет: он неотличим от ответа о настоящей программе без функций. Пользователь получает подтверждение, которого не было.
Разница между «нарушений не нашли, искали на N входах» и «не искали» — та же самая, что в checks-that-stopped-comparing, но здесь она вылезла не в проверке, а в самой команде, то есть в том, что видит пользователь.
Как поймано. Не рассуждением. Правя отказ на файлы .fts, я написал проверку с утверждением «файл без расширения отдаётся разбору и отвергается им» — и она покраснела: код возврата 0. Утверждение было неверным, а поведение — хуже, чем я думал.
Как закрыто. Программа, в которой есть утилита наследия и нет ни одной функции языка, отвергается кодом FLANG_FTS_REMOVED, и текст называет число найденных утилит. Обратная сторона проверена отдельно: файл, где есть и утилита, и функция, — законная программа языка и проходит.
Правило на будущее. Команда, отвечающая «проверено», обязана называть, СКОЛЬКО она проверила. Пустое множество — повод отказать или хотя бы сказать вслух, а не повод ответить «да».
Чем подтверждено. Ветка work/bez-fts, коммит «Чтение .fts стало внятным отказом…», 16 августа 2026. Улика снята прогоном на настоящей модели examples/utilities/discount.fts до правки. Проверка — flang/test/fts-ubran.test.mjs, 4 из 4.
Чем ограничено. Про команды, у которых ответ — суждение о входе. К командам, у которых ответ — данные (flang ast), не относится: там пустой список функций и есть верный ответ.
Связано: checks-that-stopped-comparing, a-hand-written-list-outlives-the-tree, proven-is-not-correct