Блог
Введение T27 для агентов — один проверяемый компилятором модуль по двум адресам, с исполняемыми проверками утверждений и явной границей полномочий читателя.

Подписи на изображении — на английском.
Что проект языка программирования должен отдать агенту, который спрашивает, что это за проект? Соблазнительный ответ — очередной manifest: один для поискового робота, второй для реестра, третий для интеграции, которая, возможно, появится позже. Каждая копия выглядит полезной. Но каждая становится ещё одним местом, где можно придумать несуществующую возможность или оставить вчерашние числа.
[доказано] Смерженный PR #1047 в Trinity выбрал другой путь. Публичный документ знакомства — модуль .t27, сгенерированный один раз и доступный под двумя именами: agents.t27 и llms.txt. Второй адрес обозначает тот же документ, а не отдельный перевод. Обычный текст записан в комментариях, поэтому человек и читатель без компилятора всё равно могут понять приглашение.
Исходный аудит сообщил, что семь правдоподобных адресов для агентов возвращали одну и ту же оболочку страницы с ошибкой 404. Заполнить все семь убедительными файлами означало бы решить проблему доставки и одновременно создать проблему сопровождения. Вместо этого реализация разделила адрес, по которому приходит читатель, и место, где поддерживаются факты. Описанием владеет одна спецификация, а генератор выпускает два побайтно одинаковых документа.
Это не означает, что любой внешний протокол примет модуль .t27. Совместимость со всеми потребителями llms.txt тоже не установлена. Это конкретное решение для двух текстовых адресов. Строгим форматам, которые программное обеспечение действительно разбирает, по-прежнему нужно собственное сгенерированное представление. Читаемое приглашение также не становится размещённым MCP-сервером или API записи только потому, что агент способен его обнаружить.
Главная работа находится за документом. Генератор загружает спецификацию через поставляемый компилятор, проверяет обязательную схему констант, исполняет тестовые блоки спецификации и проверяет полученные значения. Корректное по типам утверждение всё ещё может быть ложным. В исходном расследовании утверждение, эквивалентное 1 > 2, показало, почему одного успешного typecheck недостаточно.
[доказано] Готовый документ компилируется повторно до записи. Этот второй проход важен: сгенерированный заголовок становится частью конечного входа, а не внешним украшением. Исходник может компилироваться, пока обёртка ломает файл, полученный читателем. Реализация проверяет имя модуля и отброшенный материал наряду с результатом проверки типов.
[измерено] Первая смерженная версия сообщала о восьми тестовых блоках и 36 утверждениях. Это исторические числа, а не вечные свойства. В изученной ревизии main уже девять блоков и 49 утверждений; website job для PR #1084 печатает этот результат вместе с хешем исходной спецификации. Воспроизводимое описание называет свою ревизию, а не превращает первое число тестов в постоянный лозунг.
Есть и вторая граница: читателем может быть чужой агент. Четыре явных значения говорят, что документ не является инструкцией, требует согласия владельца, не просит учётные данные и не предлагает агенту действовать самостоятельно. Путь знакомства начинается с человека, которому агент помогает. Обнаружить проект — ещё не значит получить разрешение присоединиться к нему.
Эти значения проверяются и в спецификации, и повторно в JavaScript. Дублирование здесь намеренное: изменение флага вместе с ослаблением соседнего утверждения не должно незаметно превращать приглашение в приказ. PR фиксирует отрицательные контроли: меняли флаг, убирали владельца из первого шага и опустошали список неизвестного. Генератор отказывался принимать такие входы. Это узкая проверка публикуемого документа, а не заявление о решении проблемы prompt injection вообще.
Первый PR честно называл слабость: числа корпуса были датированным снимком, который никто не сравнивал с актуальным источником. Последующие изменения добавили это сравнение. Сейчас генератор читает manifest и проверяет количество спецификаций и строк, категории состояния, названия backend и число частичных результатов. Документ не может сохранить успокаивающий старый итог только потому, что его внутренняя арифметика всё ещё сходится.
Такая проверка устанавливает согласованность артефактов одной публикации, но не является независимым доказательством правильности классификации корпуса. Она не измеряет, сколько внешних агентов прочитали документ, понятен ли он каждому потребителю и решил ли читатель внести вклад. Эти неизвестные полезны: они не дают описать входную дверь как целую сеть, существование которой никто не измерял.
Повторяемый результат — процесс публикации, в котором у описания есть источник, у утверждений есть исполняемые проверки, а приглашение останавливается на границе полномочий читателя. Проект может говорить на собственном языке, не предлагая чужим агентам забыть, кому они помогают.
Поработаем вместе
Я аудирую RTL и строю независимые побитово точные модели, затем провожу результат через синтез и, когда это полезно, проверяю на плате Artix-7. Первый модуль проверки — бесплатно.