The Oracle Lens: три вида истины
В прошлом тексте я сказал, что спецификация заслуживает компилятора — gate, который падает, когда на входе ошибка. Звучит чисто, пока не начнёшь его строить: тут же упираешься в вопрос, который слово «ошибка» прятало. Ошибка — в каком смысле?
Верификация — не одно действие, хотя ощущается именно так. Проверяя спеку, план или кусок сгенерированного кода, ты на самом деле задаёшь до трёх разных вопросов — они кажутся одним и тем же, но одним и тем же не являются. Их смешение — самая частая ошибка, которую я вижу в AI-инструментах для продуктов, включая инструменты в остальном очень хорошие. Поэтому прежде любого gate — линза. Осей три, и они ортогональны.
Truth, Coherence, Intent
Truth — заземлённость в реальности. Так ли это на самом деле? «API возвращает это поле». «В этой таблице есть колонка status». «Консьюмер переживёт лишний параметр». Каждое утверждение истинно или ложно относительно мира, существующего независимо от документа, — кодовой базы, работающей системы, данных. Truth проверяется одним способом — пойти и посмотреть: grep по исходникам, вызов endpoint’а, запрос к базе. У Truth есть внешний референт — именно поэтому из всех трёх осей она механизируется лучше всего.
Coherence — внутренняя согласованность. Не противоречит ли документ сам себе? Нет ли дыр — поведение описано для одних входов и умолчено для других? Не используется ли один термин в двух смыслах? Coherence не нуждается в мире за пределами документа: её проверяют чтением документа против него самого. Это ось, до которой тулинг спецификаций реально добрался. Когда Kiro помечает двусмысленную фразу или два требования, которые не могут выполняться одновременно, или когда чеклист Spec Kit спрашивает, покрыты ли все случаи, — это оракул когерентности. Он действительно полезен, и я не хочу его принижать.
Intent — совпадение с тем, чего на самом деле хотели. Не «согласовано ли» и не «правда ли» — а «то ли это самое». Спека может быть безупречно когерентной, идеально заземлённой в реальности — и описывать фичу, которая никому не нужна. Или не ту фичу. Или ту, но с чуть неверным дефолтом, который распознает как неверный только тот, кто просил. Intent живёт в голове человека. У него нет внешнего референта, по которому можно сделать grep, и нет внутреннего теста, который документ мог бы пройти.
Называть все три стоит потому, что они расходятся, — в этом вся польза линзы.
Они расходятся — и в этом суть
Спека бывает когерентной и ложной. Она прекрасно держится, каждое требование согласовано с каждым — а построена на утверждении о системе, которое не соответствует действительности. Ничто внутреннее её не поймает: документ в мире с самим собой. Поймает только проверка истины, выходящая за пределы документа.
Спека бывает истинной и некогерентной. Каждое отдельное утверждение сходится с кодовой базой, но два требования тихо противоречат друг другу, или половина пространства входов не описана. Grounding проходит утверждение за утверждением; когерентность рвётся на швах.
И спека бывает истинной, когерентной — и не той. Самый тяжёлый случай. Она ни о чём не врёт, ничему не противоречит и описывает нечто иное, чем то, чего хотели. Никакой механический оракул этого не поймает — потому что проверять механически не с чем.
А вот аккуратное доказательство из реального мира, что эти оси действительно разделимы, а не выдуманы философом: посмотри, где остановилась индустрия. Все, кто поднялся до слоя спецификации — Kiro, Spec Kit, — построили оракул когерентности и воткнули флаг. Они скажут тебе, что твоя спека противоречит сама себе. Ни один не скажет, что твоя спека врёт про API, — потому что это совсем другая ось, и ей нужна другая машинерия: та, что выходит из документа и идёт смотреть. Gate когерентности и gate истины — это не один gate разной строгости. Это разные gate. Рынок нечаянно поставил эксперимент и подтвердил линзу.
Живой пример: когерентность без истины
Приведу один случай из работы над этой самой серией — самая чистая иллюстрация, какая у меня есть, и произошла она со мной на прошлой неделе.
Я проверял, не опубликовал ли кто-нибудь уже таксономию оракулов в духе Truth/Coherence/Intent. Один из моих агентов вернулся с идеальным попаданием: статья 2026 года, сообщал он, делит оракулы верификации ровно по этим линиям и объявляет проверку намерения принципиально немеханизируемой — с цитатой. По теме, хорошо сформулировано, и в мой тезис легло так гладко, что я почти это использовал.
Цитата оказалась сфабрикованной. Второй проход, который действительно открыл PDF, обнаружил: слово «intent» встречается в статье дважды, в несвязанных предложениях, а процитированной строки не существует. Саммари было внутренне безупречно — когерентно, гладко, правдоподобно — и ложно в корне. Оно прошло бы любую проверку когерентности, которую читатель мог бы применить к самому саммари. Оно провалило единственную проверку, которая имела значение: пойди и прочитай источник. Coherence — зелёный. Truth — красный. Будь у меня gate когерентности, который я принимал бы за gate истины, эта фальшивка сейчас стояла бы цитатой в этой статье.
Это и есть весь аргумент за линзу в одном анекдоте. Опасные ошибки — не бессвязные: те выглядят неправильно. Опасные ошибки — когерентные-но-ложные, потому что они выглядят правильно, и остановит их только оракул, направленный на мир, а не на документ.
Градиент силы — и ось, которую не механизировать
Три оси различаются не только по сути, но и по тому, насколько они поддаются механизации, — и это упорядочение должно определять, куда вкладывать усилия.
Truth механизируется лучше всех. У неё есть внешний референт, значит проверку можно автоматизировать: grep, компиляция, исполнение, запрос. Строй самый жёсткий, самый автоматический gate здесь — тут компилятор спецификаций отрабатывает свой хлеб, и тут же, как показывает рынок, построено меньше всего.
Coherence механизируется частично. Проверки согласованности и полноты автоматизируются в заметной степени, и LLM неплохо ловят противоречия. Отдача убывает, но задача решаемая. Рынок до этой оси уже дошёл.
Intent механическому оракулу не поддаётся — и притворяться, что это не так, — ловушка. Нет ни внешнего референта, ни внутреннего теста; эталон — это намерение в чьей-то голове, часто недоопределённое даже для самого носителя и меняющееся, когда он видит результат. Его можно приближать: приёмочные тесты кодируют его срез, примеры фиксируют крайние случаи, накопленные человеческие рулинги (об этом отдельный текст — case law) дают слабый дрейфующий прокси. Но приближение — потолок. Честный инженерный ход — не подделывать оракул Intent уверенным LLM-судьёй, а назвать Intent осью, требующей человека, поставить человека ровно туда — и механизировать Truth и Coherence настолько жёстко, чтобы дефицитное внимание человека тратилось только на вопрос, на который не может ответить ни одна машина.
Вот что даёт линза. Не новый gate — а понимание, на какой из трёх вопросов на самом деле отвечает каждый твой gate. Чтобы проверка когерентности больше не караулила дыру, которую способна закрыть только проверка истины, — и чтобы машина не делала вид, будто закрывает тот единственный вопрос, что всегда оставался за человеком.
Дальше в серии — сам gate истины: как заземлять спецификацию против реальности и почему самые интересные провалы не про ложь, а про слои. Об этом — в одном из следующих текстов.