# eve правим сами и не ждём upstream

Решение владельца 10.10.2026. Частично заменяет ADR-0019 и пересматривает строку ADR-0008
«своего рантайма плагинов Ива не пишет: он принадлежит eve upstream».

Слова владельца: если eve нам мешает, мы её переписываем; обновлений upstream не ждём,
они медленные, и eve расходится с нами по философии; eve пользуемся, но переписываем
её так, как нам нужно.

## Что решено

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

- Правки живут обычными коммитами в собственной копии `eve/` вместе с кодом Ивы.
  Переезд выполнен по [порядку сборки eve](../eve.md): он задевает сборку, установку и обновлятор.
- Новую версию eve берём, когда она нам что-то даёт. Обновление — наше решение, а не долг:
  каждое означает перенос наших правок и прогон тестов границы.
- Issue в upstream заводим, если это дёшево и полезно другим. Ответа не ждём, и работа от него
  не зависит.

Остаётся в силе из ADR-0019: мерило — опыт человека; то, что eve уже делает хорошо, берём как
есть и проверяем запуском; своё решение — один механизм в одном месте для всех провайдеров;
каждую нашу правку eve держит тест, который называет изменённое поведение; если новая версия
eve сама пришла к нашему решению, своё снимаем.

## Что заменяется

Принятое исключение из правила «ошибка модели возвращается модели, ход не падает»
(H3, 20.10.2026): от одного до трёх пустых ответов подряд восстанавливаются
ограниченными повторами; четвёртый пустой ответ завершает ход eve событием
`turn.failed`. Фоновые ходы Ивы сохраняют понятный исход для владельца через свои
обычные пути доставки (#338): напоминание сохраняет исходный текст и ошибку,
Brief и Insight сообщают о несобранном обзоре, помощник возвращает причину в основной
разговор, Watch сохраняет тишину и пишет причину в журнал. Чатовый ход паркуется
с возможностью повтора владельцем. Предел повторов завершает и случай, когда
модель всегда отвечает пусто.

- ADR-0019, «Отвергнутые альтернативы»: форк eve больше не отвергнут. Цена «все обновления
  движка придётся вести самим» принята.
- ADR-0019 и `docs/philosophy.md` §4: «О расхождении сообщи upstream» — больше не обязательный
  шаг.
- ADR-0008 и `docs/philosophy.md` §3: «Своего рантайма плагинов Ива не пишет: контейнер, хуки и
  жизненный цикл принадлежат eve upstream». Становится: код плагина живёт в eve Extension или в
  MCP-сервере; чего плагинам не хватает в eve (решающие хуки, экраны без хода модели),
  дописываем сами — в eve или рядом с ней.

## Обоснование

10.10.2026 два запроса упёрлись в старое правило: #274 (свой экран плагина в Telegram без хода
модели) и #285 (хуки, которые решают, а не наблюдают). В eve 0.51.1 обработчик хука возвращает
`void` и только наблюдает. При старом правиле плагин мог менять поведение Ивы только ходом модели
или правкой Authored tree, которую стирает следующий `iva update`, а это противоречит правилу
владельца: всё пользовательское живёт в плагинах. Обновление eve 0.51.1 → 0.67.2 владелец отложил
28.09.2026; решающих хуков нет и там. Ожидание upstream оставляло людей без функции на
неизвестный срок.

## Цена

Каждая наша правка eve — код, который ведём мы. Чем больше правок, тем дороже перенос на новую
версию eve; при своей копии новые версии upstream приходят к нам только переносом. Поэтому каждая
правка держится тестом на границе и описана рядом с кодом: что поменяли и почему.

## Отвергнутые альтернативы

- Ждать upstream и заводить feature request — человек остаётся без функции на неизвестный срок.
- Обходить eve снаружи (читать её внутренности, второй механизм рядом) — ломается на каждом
  обновлении и даёт два механизма на одно поведение.
