🇬🇧 English version — каноническая версия.
Память
Ива хранит память в vault из обычного Markdown. Дословные разговоры остаются в daily/, устойчивая правда живёт в типизированных Card, а выжимки сворачиваются от дней к неделям, месяцам и годам. Маленький CORE.md входит в каждый промпт.
Ночь
По умолчанию в 04:00 по локальному времени один TypeScript Schedule запускает scripts/memory/night.ts. Код отвечает за чтение, проверку, файловые правки, коммиты, повторы и пределы. Настроенная модель только возвращает предложения: инструкция шага описывает ответ словами и одним коротким примером, модель отвечает JSON-объектом в тексте, ночь разбирает его мягко — одинаково у всех провайдеров.
Время меняется одной настройкой MEMORY_NIGHT_TIME=HH:mm в .env и сборкой: iva update --force (в чекауте — npm run build и iva restart). Правка .env без сборки не двигает Schedule или догон: /menu → ⏰ показывает действующее время и ожидающую настройки. Ночь по-прежнему исключает текущий локальный день. Откат возвращает время той сборки; старые сборки без настройки работают в 04:00.
Ночь собирает поток текста до проверки ответа, в том числе у подписки ChatGPT, где поток обязателен. Перед следующим вызовом она учитывает итоговый расход; обрыв потока означает отказ шага. Вызов Codex ночью просит низкое усилие рассуждения, не меняя настройку чата.
У ночи четыре шага:
- Извлечь из сырого дня выжимку, ссылки на Card и факты с доказательствами.
- Дописать датированные факты в Card и предложить новый Compiled Truth целиком.
- Записать двусторонние связи, только если существуют оба файла.
- Предложить ограниченные правки
CORE.mdиз собственных цитат владельца.
Большой вход режется по границам реплик. Предел всей ночи: 40 вызовов и 300 000 оценочных входных токенов. Если провайдер не вернул полный числовой usage, следующий вызов запрещён. День готов после общего коммита выжимки и совместимой отметки в сыром дне для путей, разрешённых политикой git владельца. Новые файлы, исключённые через .gitignore, .git/info/exclude или глобальные правила git, остаются на диске и не останавливают ночь; журнал явно перечисляет их как находящиеся вне git-бэкапа. Уже отслеживаемые файлы продолжают коммититься, даже если родительский каталог позже исключили. Если все пути исключены, готовность дня сохраняется локально, без бэкапа этих файлов.
Кэш дня в data/memory/night/ делает перезапуск идемпотентным. При совпавшем префиксе поздний хвост отправляет модели только новые реплики. Если изменилась старая разобранная реплика, ночь ничего не пишет и просит владельца явно удалить кэш перед переразбором.
Ошибка подключения к провайдеру, таймаут заголовков или оборванный поток завершают запуск с ошибкой. Незавершённый день не становится готовым, попытка отказа схемы не расходуется. Следующая ночь продолжает сохранённый шаг: принятые факты остаются в Card, день ждёт завершения. Автоматического транспортного повтора внутри ночного вызова и подмены модели нет. Восстановите настроенного провайдера; прежде чем заявлять потерю данных, проверьте iva jobs, журнал задания, сырой день и его кэш. Сохраните эти файлы: удаление кэша ради таймаута уничтожает прогресс продолжения, а iva jobs ack memory-night только подтверждает прочтение сбоя. Если байты сырого дня или Card действительно пропали, сохраните историю Git и диагностический пакет для разбора.
Для фоновой работы пользователя Watch/Brief уже проверяют сбои пользовательских таймеров и установленных плагинных/MCP-служб. Произвольный отвязанный скрипт или живой зависший процесс вне этих проверок; о сбое сообщается, автоматического перезапуска нет. Прочитайте статус юнита и журнал, сохраните checkpoint и исправьте причину до продолжения. Совпадающие имена входных файлов требуют отдельных временных путей самого задания. Постоянная способность живёт в плагине, регулярная задача — в Routine, а не в дополнительном watchdog ядра Ивы.
Неделя ждёт состояния всех семи дней, включая явное отсутствие данных. Месяц берёт полные недели внутри месяца и только дни месяца из краевых недель. Год ждёт двенадцать месяцев.
Card и CORE
Принятый факт дописывается без перезаписи:
- YYYY-MM-DD: факт · [[daily/YYYY-MM-DD]] HH:MM
Доказательство должно идти из собственной реплики владельца. Модель возвращает новый Compiled Truth целиком; ночь заменяет его, только если файл Card совпадает с хешем, прочитанным для вызова. Вытесненная правда уходит в архив Card; одновременная ручная правка владельца побеждает и оставляет truth_pending. write_card поддерживает явные операции fact, truth и подтверждённый владельцем merge. Обычный write_file не пишет память (daily/, summaries/, выжимки периодов, cards/); остальные пути vault, например library/, пишутся и коммитятся, а CORE.md проходит через отдельный писатель с капом и коммитом.
write_card показывает минимальный JSON-вызов каждой операции до исполнения и повторяет нужный пример, когда обязательные поля операции отсутствуют или неверны. Ошибки проверки схемы тоже содержат форму исправленного вызова, сведения о поле и типе и подсказку исправить аргументы вместо повторения неверного вызова или поиска в исходниках. Подставь данные Card, опускай незаданные optional-поля, а tags и aliases передавай массивами строк. Пример merge показывает форму вызова и не подтверждает согласие владельца. Проверки и существующий предел повторяющихся отказов продолжают действовать.
Brain и поиск
В 05:00 scripts/memory/brain.ts выполняет детерминированное обслуживание на TypeScript: коммитит оставшиеся ручные правки, пересобирает .graph/vault-graph.json, проверяет размер CORE и отправляет vault в remote, если он настроен. Модель не вызывается, Card не переписываются.
memory_search использует FTS5 из SQLite в Node и отдельный файл графа. При настройке hybrid-режим дополнительно объединяет результаты эмбеддингов.
Git и чистка
Vault — отдельный git-репозиторий. Ночные изменения, прямые операции Card, правки CORE и чистка оставляют узкие коммиты. Потоковый чистильщик scripts/vault-cleanup.ts схлопывает повторный рост description и ограничивает раздутые старые описания, не загружая повреждённый vault целиком в память. Один TypeScript-вход используют /menu и обновлятор.
Весь код памяти и промпты лежат в scripts/memory/; в vault находятся только данные. Старые .claude/ и MOC.md можно оставить, но ночь их больше не читает и не обновляет.