5.8 KB · updated 2026-07-06 · md

v0.7.2.ru.md

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

Tesserae v0.7.2 — обнаружение сессий и компиляция больше не зависают

<!-- translations:start -->

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

<!-- translations:end -->

Дата релиза 2026-06-12 · PyPI · GitHub release · pip install --upgrade tesserae==0.7.2

Релиз с исправлениями ошибок, устраняющий три способа, которыми Tesserae мог застрять на машинах с большой историей агентских сессий: обнаружение сессий, которое никогда не возвращалось; подпроцессы CLI-агентов, навсегда зависавшие по таймауту; и параллельные компиляции, наслаивавшиеся на одно и то же состояние проекта.

1. tesserae sessions discover возвращается — даже с десятками ГБ истории

Раньше обнаружение полностью разбирало JSON каждой расшифровки каждого проекта под каждым корнем аккаунта до фильтрации. На машине с ~57 ГБ истории Claude Code / Codex команда фактически никогда не возвращалась.

Три исправления, умножающие друг друга:

  • Предварительный фильтр по маркеру — расшифровка может принадлежать текущему проекту только если путь проекта встречается в файле буквально, поэтому чужие расшифровки теперь отсеиваются сырым байтовым сканированием (~в 50 раз быстрее разбора) до любой работы с JSON.
  • Дедупликация корней-симлинков~/.claude, указывающий на ~/.claude-personal1, больше не приводит к двойному сканированию каждой расшифровки.
  • Кэш сканирования по mtime — результаты проверки сохраняются в ~/.cache/tesserae/discovery_scan.sqlite (переопределяется через TESSERAE_DISCOVERY_CACHE), поэтому повторные запуски перечитывают только новые или изменённые расшифровки.

Замеры на проблемной машине: никогда не возвращается → 3 мин 16 с на холодную → 1 мин 26 с на тёплую, найдено 4 048 сессий. tesserae refresh и импорт сессий используют тот же путь и ускоряются так же.

2. Таймауты CLI-агентов больше не подвешивают компиляцию

Вызовы codex exec / claude -p использовали subprocess.run(capture_output=True, timeout=...), который по таймауту убивает только непосредственного потомка, а затем вычитывает выходные каналы без таймаута. CLI-агенты порождают собственных потомков, наследующих эти каналы, поэтому таймаут мог оставить компиляцию заблокированной на 0% CPU неограниченно долго (наблюдалось: ~2 дня) за осиротевшими внуками.

Теперь вызовы LLM CLI выполняются в собственной группе процессов, и таймаут убивает всю группу с ограниченным по времени вычитыванием — таймаут всегда означает «мертво», и никогда — «зависло».

3. Одна компиляция на проект одновременно

ProjectWiki.compile теперь держит эксклюзивную блокировку на .tesserae/compile.lock. Refresh, запущенный хуком во время уже идущей компиляции, быстро завершается с понятным сообщением, называющим pid держателя, вместо тихого наслаивания на то же состояние .tesserae. Установите TESSERAE_COMPILE_LOCK_WAIT=<секунды>, чтобы вместо этого подождать блокировку. Блокировка основана на flock(2), поэтому упавшая компиляция никогда не оставляет устаревшую блокировку.

4. tesserae --version

Корневая справка теперь начинается с установленной версии, а tesserae --version (также -V / version) печатает её напрямую.

Обновление с v0.7.1

Прямая замена. Изменений конфигурации нет. Первый sessions discover / refresh после обновления выполняет одноразовый проход проверки для заполнения кэша сканирования; последующие запуски быстрые.