RUGitHubInstall

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

View original Markdown ↗