# Сборка и публикация eve

Исходники eve лежат в `eve/`: копия [vercel/eve](https://github.com/vercel/eve)
на коммите `eb5949a622801b35a2a6f78bb58d9eef27273cac` (eve 0.51.1).
В ней пакет eve, зависимость catalog, документация пакета и входы сборки.
Правки Ивы — обычные коммиты в этом каталоге; их держат тесты границы Ивы.
Переход на новый коммит upstream — отдельное решение по ADR-0023.

Правьте `eve/packages/eve/src/`, прогоняйте затронутые тесты upstream и тесты
границы Ивы, затем коммитьте исходники. Мейнтейнер использует Node ≥24 и pnpm
11.25.0. Для нового архива задайте свежий номер `0.51.1-iva.N` в
`scripts/build-eve.sh` и `scripts/eve-release.sh`. Пользователь получает готовый
пакет eve и собирает только агента Ивы.

Из чистого дерева:

```sh
bash scripts/eve-release.sh
```

Команда вызывает `scripts/build-eve.sh`, сохраняет архив в игнорируемый
`.eve-out/release/`, считает SHA-512 SRI и записывает URL, версию и integrity в
`package.json` и `package-lock.json`, а версию и хеши исходников и пакета — в
отслеживаемый `eve.lock.json` вне `eve/`. Повторный запуск использует тот же архив,
сверив хеши исходников и пакета. Новым исходникам нужен новый номер N.
Для сравнения сборок: `bash scripts/build-eve.sh <пустой-каталог>`.

Закоммитьте три файла зависимости локально, затем выполните:

```sh
bash scripts/eve-release.sh --publish
```

Команда проверяет чистое закоммиченное дерево и подготовленный архив, создаёт
и отправляет только метку `eve-0.51.1-iva.N`, создаёт выпуск GitHub и загружает
архив, скачивает его по итоговому URL со сверкой SHA-512 SRI, затем выполняет
`npm ci` во временном чистом дереве с пустым кэшем. Первый сбой останавливает
команду. Финальное сообщение разрешает лиду отправить `beta`; отправка остаётся
отдельным действием после обязательной приёмки. Путь к архиву можно передать
последним аргументом в обоих режимах.

Опубликованные метки `eve-*`, имена вложений и байты архивов постоянны.
Исправление получает новый N: старые версии Ивы используют прежние URL.
Архивы хранятся вне git.

В `node_modules/eve/BUILD.json` лежат коммит upstream, версии пакета и
инструментов, `sourceTreeHash` и `packedTreeHash`. Тест `scripts/eve-copy.test.ts`
сверяет исходники и установленный пакет с `eve.lock.json`, затем метаданные
BUILD и lockfile. Из прав файла хешируется только признак исполнимости:
umask сохраняет хеш. Сборочный `.vendor-stamp.json` исключён из хеша пакета;
его отпечаток использует относительные пути, поэтому байты архива совпадают
при сборке в разных каталогах.

[Apache-2.0](../../eve/LICENSE) и [NOTICE](../../eve/NOTICE) с перечнем изменений
Ивы сохранены в исходниках и включены в архив.
