8.4 KB · updated 2026-07-31 · md

v0.28.0.ru.md

docs/i18n/release-notes/v0.28.0.ru.md

Tesserae v0.28.0 — хуки, которые не могут потратить ваши деньги случайно

<!-- translations:start -->

English · 한국어 · 中文 · 日本語 · Español · Français · Deutsch

<!-- translations:end -->

Released 2026-07-27 · PyPI · GitHub release · pip install --upgrade tesserae==0.28.0

Обновитесь из-за первого пункта. Это ошибка расходов, и она была воспроизведена на реальной машине.

Ловушка $HOME

База знаний в ~/.tesserae делает $HOME похожей на корень проекта. Метод resolve_project_root() плагина шёл вверх от рабочей директории к первому найденному .tesserae/ — поэтому любой сеанс, начатый вне зарегистрированного проекта, разрешался в $HOME, и хук PostToolUse запускал в фоне tesserae compile --changed-only по всей домашней директории.

15k файлов, граф размером 795 MB, примерно 10 часов расходов LLM, из процесса setsid, пережившего сеанс, который его запустил. Это срабатывало на каждом Edit/Write.

Резервный вариант сделал это ещё хуже. Когда .tesserae/ не найден, резолвер делал это:

echo "$PWD"
return 0

Он объявлял любую директорию проектом. Вызывающие коды затем тестировали -d "$root/.tesserae" — что срабатывало для любой рабочей директории под $HOME. Этот тест был последней линией защиты, и резервный вариант прошёл сквозь неё.

Две защиты теперь. $HOME никогда не является корнем проекта ни по пути вверх, ни по пути git-root. И неудача соответствия возвращает пусто с ненулевым статусом, поэтому вызывающие коды ничего не делают вместо угадывания.

Хуки, которые тратят деньги, включаются явно. TESSERAE_HOOK_AUTOCOMPILE=1 включает автоматические перекомпиляции; без этого они ничего не делают. Применяется только к двум хукам, которые действительно тратят — posttooluse-edit.sh и session-end.sh. session-start.sh запускает детерминированную code sync, и pretooluse-compile.sh только перехватывает compile, который вы напечатали сами, поэтому ни один из них не ограничивается.

Хук, который запускает работу модели в фоне, должен быть включен явно, а не отключен после того, как придёт счёт.

Команда Python CLI никогда не была уязвима этой ошибке: ProjectWiki.load() использует переданный ей путь и не идёт вверх, поэтому ручная tesserae compile вне проекта завершается чисто. Ловушка была только в shell-хуках.

OKF v0.2

Открытый формат знаний Google v0.2 делает происхождение, доверие, жизненный цикл и аттестацию первоклассными. Tesserae теперь выдаёт v0.2 и всё ещё потребляет v0.1.

Выдаётся: generated: {by, at} из маркеров экстрактора и агента; sources с сигналами доверия (usage_count из подсчётов сеансов, usage_window, last_modified и author только где ровно один authored_by Person существует); status: deprecated и stale_after, полученные из рёбер supersedes.

Не выдаётся: verified, и поэтому нет уровня доверия выше unverified. Tesserae не имеет записанного события проверки *с актором и временем метки. Его четыре класса происхождения — это свойства ребра — как сильно граф лицензирует триплет — в то время как семейство доверия OKF — это проверка на концепцию. Разные оси; отображение одного на другое заинтересованы доверие через спецификацию. Проверено свыше 5,193 реальных концепций: verified выдан 0 раз, generated.by заявляет human: 0 раз.

Три ошибки потребителя исправлены, все найдены путём импорта спецификации Приложение A в точности через реальный CLI, где это было аварийно завершено: неквотированные YAML временные метки разрешают в datetime и сломали сериализацию; резервный вариант v0.1 timestamp молча ничего не делал на этой же неквотированной форме; и §6.1 рекомендуемая ссылка относительно пакета (/tables/customers.md) производила нулевые рёбра, поэтому пакет, следующий спецификации, импортировался как отключённые узлы.

Валидатор, написанный из собственных пунктов спецификации, проходит экспорт из 5,193 концепций без отказов, без потерь и с идемпотентностью к байтам.

Тавтологичные вердикты названы

Примерно 40% вердиктов SUPPORTED в verify_claim были рёбрами evidenced_by, чей цитируемый диапазон является собственной целью ребра — "C evidenced_by S", подтверждено прочтением S. Верно, неинформативно и ранее неотличимо от подлинного вердикта, подтвержденного документом.

Полезная нагрузка теперь говорит, что это такое. Среди всех 15,284 рёбер: каждое evidenced_by помечено SUPPORTED, ничего другого не помечено, и ни один вердикт не изменил истинное значение. Добавочное, поэтому контракт v0.27.0 из семи вердиктов не изменился.

Обновление из v0.27.0

Работает как замена для библиотеки. Переустановите плагин, чтобы получить исправление хука, и если вы хотите автоматические перекомпиляции обратно, установите TESSERAE_HOOK_AUTOCOMPILE=1.

Если странный .tesserae существует в $HOME из более ранней случайной компиляции, он теперь инертен — но он также большой, и удаление его безопасно, как только вы подтверждите, что ваш реестр и конфигурация живут в другом месте.