# Границу с eve решает опыт человека

Решение владельца 29.09.2026. Заменяет раздел 4 `docs/philosophy.md` в прежней редакции
(«что принадлежит eve upstream»).
Частично заменён ADR-0023 (10.10.2026): форк eve больше не отвергнут, issue в upstream не
обязателен, правку eve делаем сами вместо ожидания.

Мерило любого решения — опыт человека: владельца Ивы, того, кто её ставит и обслуживает,
разработчика и модели за работой. Если eve ломает этот опыт, мешает разработке или решает
задачу иначе, чем нужно нашим людям, Ива делает своё решение. Ждать, пока eve придёт к
нашему решению, можно, но не обязательно.

Своё решение подчиняется четырём условиям. Оно одно на всех провайдеров и живёт в одном
месте. Его держит тест на границе с eve, и тест называет поведение eve, из-за которого
решение появилось. О расхождении уходит issue в upstream с воспроизведением. Рядом с
решением записано условие, при котором оно снимается.

Обоснование. 28.09.2026 аудит показал: два пустых ответа модели подряд, текст субагента
вместо результата по схеме и повторный номер вызова роняют ход на всех провайдерах, и
поведение eve 0.67.2 то же, что у 0.51.1. Прежняя редакция запрещала свои повторы вызова
модели и оставляла человеку «Ход упал» до решения upstream.

Пример (владелец и лид, 07.10.2026). Обрыв связи с моделью. eve 0.51.1 просит вызов
модели ещё раз только до открытия потока, а поток CLI Claude открыт с первой миллисекунды: на
c1 обрыв потока после девяти вызовов инструментов дал владельцу «Ход упал» без единого
повтора. Своё решение живёт в `eve/` (runModelCallWithRetries): вызов, оборвавшийся
в любой момент до конца ответа, просится ещё раз, до трёх запросов. Повтор ничего не
дублирует: во время потока владельцу ничего не уходит (канал шлёт только финальный текст),
частичный ответ в историю не попадает, а вызов инструмента наша копия eve придерживает до конца ответа.
Так же поступают Hermes (частичный ответ выбрасывается) и Claude Code (повторяет оборванный
поток). Повтора нет, только если что-то ушло из рук eve: инструмент, выполненный самим
провайдером. После трёх обрывов посреди ответа владелец решает сам кнопкой «Повторить»;
сообщение цитирует вопрос, а мост по нажатию отдаёт модели вопрос целиком: если оборвался
первый запрос хода, в сессии вопроса нет. Сообщение о сбое говорит, что случилось и что
делать, без текста ошибки и Error id. Держит `scripts/eve-model-retry.test.ts`; снимается,
когда upstream пройдёт этот тест без наших изменений (vercel/eve#3984, #2320).

Цена. Своё решение рядом с механизмом eve может разойтись с ним при обновлении eve: каждое
обновление требует прогона тестов границы и пересмотра своих решений. Часть решений
возможна только правкой кода eve (`eve/`), её приходится переносить на новую версию руками.

Отвергнутые альтернативы. Только feature request в upstream и ожидание — человек остаётся
с дефектом на неизвестный срок. Форк eve — все обновления движка пришлось бы вести самим.
