5.2 KB · updated 2026-07-31 · md

v0.28.3.ru.md

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

Tesserae v0.28.3 — лимит в один ход у экстрактора и то, во что он молча обошёлся

<!-- translations:start -->

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

<!-- translations:end -->

Released 2026-07-31 · PyPI · GitHub release · pip install --upgrade tesserae==0.28.3

Один флаг. Он жил в Claude-экстракторе с самого первого коммита конвейера и на машине с настроенными MCP-серверами полностью лишал LLM-извлечение работоспособности — при этом не роняя компиляцию.

--max-turns 1 никогда не был решением

Обе точки вызова Claude CLI запускали:

claude -p --output-format text --max-turns 1

--max-turns считает вызовы инструментов, а не ответы. Если в конфигурационном каталоге CLI есть MCP-серверы или хуки, первым действием модели может стать вызов инструмента — и единственный ход на этом заканчивается. CLI завершается с кодом 1 и сообщением Reached max turns (1), не выдав ни байта JSON.

Tesserae перехватывает это и откатывается к детерминированному извлечению: сбой провайдера не должен прерывать компиляцию. В итоге компиляция «удавалась», граф выглядел правдоподобно, а LLM не вносила в него ничего.

Флаг никто не выбирал. Он появился вместе с первым коммитом конвейера, а три месяца спустя ClaudeCLIJsonClient скопировал его дословно — потому что в его docstring сказано, что он «повторяет паттерн run_claude_cli». Ни одно сообщение коммита его не упоминает.

Одноразовый вызов на самом деле означает --strict-mcp-config

Смысл лимита был в том, чтобы «ответить один раз и не запускать агентный цикл». Правильное выражение этого — не загружать MCP-серверы вовсе, тогда не останется инструмента, на который можно потратить ход:

claude -p --output-format text --strict-mcp-config

Первый ответ модели и есть результат, а настроенный MCP-сервер больше не может «заморить» вызов. Исправлены обе точки вызова, а регрессионный тест утверждает, что лимит ходов не вернётся ни в одну из них.

Проверьте, не стоил ли этот баг графа вам

Сбой невидим в итоговой сводке компиляции — он живёт только в логе:

grep -c 'Reached max turns' <ваш лог компиляции>

Любое значение больше нуля означает, что эти файлы были извлечены детерминированно; повторная компиляция на этой версии их восстановит. На собственном графе проекта возврат настоящего LLM-извлечения поднял число узлов с 5 155 до 13 182 — детерминированный откат стоил примерно 60% графа.

То, что компиляция рапортует об успехе, потеряв LLM-извлечение на большинстве файлов, — отдельный дефект: он отслеживается в #92 и здесь не исправлен. Этот релиз убирает одну причину молчаливого отката, но не саму молчаливость.

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

Прямая замена. Изменений в API, схеме и конфигурации нет. Если ваши прошлые компиляции пострадали, перекомпилируйте и заберите недостающее извлечение — кэшированные ответы LLM в ~/.tesserae/llm_cache переиспользуются, так что платить придётся только за файлы, которые тогда откатились.