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 из более ранней случайной компиляции, он теперь инертен — но он также большой, и удаление его безопасно, как только вы подтверждите, что ваш реестр и конфигурация живут в другом месте.