Свёртка между ходами занимает чат
Решение владельца 05.10.2026. Заменяет последнюю фразу «Отвергнуто» в ADR-0016 («пока — напоминание „нажмите /new“
при заполненном окне»): подсказки больше нет, /new остаётся ручной командой.
Свёртку истории eve делала только внутри хода, перед шагом модели, и человек ждал пересказа. Порог был долей окна
модели, поэтому у моделей с окном в миллион токенов она не наступала вовсе: к вечеру каждый шаг отправлял модели всю
переписку дня, а Ива просила людей нажимать /new.
Решение. После законченного хода, чей последний шаг дошёл до 60 % окна модели или до 110 000 токенов (что
меньше), Ива на парковке сессии сама просит eve пересказать историю (штатный роут
POST /eve/v1/session/:id/compact). На время пересказа чат занят тем же статусом, что и на время хода, с
признаком compacting. Отсюда три следствия без нового механизма. При порядке «по очереди» мост держит пришедшие
сообщения в своей очереди на диске и отвечает «Сжимаю разговор, скоро отвечу.»; при порядке «сразу» сообщение
обрывает пересказ и получает ответ немедленно. Перезапуск посреди пересказа восстанавливается так же, как перезапуск
посреди хода. Для автосвёртки уведомление об оборванном ходе отсутствует, поскольку она начинается сама. Вторая просьба не уходит,
пока первая держит чат. Канал ждёт ответа eve на просьбу, не выходя из обработчика
парковки: eve ждёт обработчик, поэтому пересказ встаёт в её очередь раньше следующего сообщения. Брошенную
занятость мост закрывает в тот же срок, что брошенный ход. Свёртка внутри хода остаётся
страховкой с порогом на четверть выше. Пересказ, который не увёл разговор под порог, до конца сессии не повторяется.
Дополнение владельца 22.10.2026. Потолок снижен до 110 000 токенов: вход 200+ тыс. замедлял каждый шаг.
/compact использует тот же захват чата и POST eve с ручным условием входа от 30 000 токенов.
Ручная просьба допускается после обработки парковки завершённого хода. До парковки команда получает
просьбу повторить её после ответа. Синхронная отметка начала захвата
защищает от двух одновременных ручных просьб. Завершение подтверждается на session.waiting;
размер «было» берётся из последнего входа, «стало» из первого измеренного входа следующего хода.
При малом или неизвестном входе команда сообщает, что сжимать пока нечего. После рестарта нужен один
ход для нового замера. Ручная просьба и её отчёт о размере живут в памяти процесса: при приёме
команды Ива предупреждает повторить /compact после перезапуска. Восстановление освобождает чат
с отметкой сброса сессии. Групповой адрес выбирается так же, как для /new.
Ручная свёртка eve 0.51.1 не находила модель, которую даёт только резолвер шага; это закрыто хунком в
eve/ по ADR-0019 (тест границы scripts/eve-manual-compaction.test.ts).
Отвергнуто. Не занимать чат и положиться на входной буфер сессии eve: процесс, убитый посреди пересказа, оставляет сессию зависшей — сообщение принято и остаётся без ответа, сброс падает (c1 и проба на настоящем процессе, 05.10.2026), а сообщение из буфера при карантине хранилища пропадает. Отдельный файл-отметка для восстановления: второй источник правды рядом со статусом чата и правка обновлятора. Собственный роут свёртки в канале: дубль штатного роута eve. Перенос харнесса на Pi Durable ради фоновой свёртки: смена движка ради одной паузы, которая на c1 за три месяца случилась четыре раза. Отдельная дешёвая модель пересказа: тихая подмена (philosophy §5).
Цена. Ручная свёртка eve оставляет дословно только последнее сообщение. Если системная часть и пересказ сами
занимают порог, свёртка между ходами выключает себя и до конца сессии работает только страховка. Выключение живёт в памяти
процесса: после перезапуска возможен один лишний пересказ. Перезапуск посреди пересказа теряет историю сессии, как и
перезапуск посреди хода; память в Vault это переживает. Сообщение, которое в момент такого перезапуска лежало
во входе сессии eve, а не в очереди моста (оно принято за миллисекунды до занятия чата), пропадает без строки
«повтори запрос». Если eve ответила на просьбу позже пяти секунд, Ива занимает чат заново в момент, когда eve
объявляет начало пересказа; перезапуск между запоздалым приёмом просьбы и этим моментом всё ещё может повесить
сессию (модель specs/IdleCompaction.tla, свидетели -restart-guarded и -window).
Обновление, заставшее пересказ, оставляет его запись помеченной так же, как запись оборванного хода: если новая
версия не встала и хранилище сессий вернулось, мост сбрасывает эту сессию сам и молчит. Свободной запись
становится только там, где хранилище ушло в карантин окончательно, — на старте сервиса.