server-monitor-manager/agents/antigravity/inbox/from-smm-deliverables/Старые задачи/smm-antigravity-task-release-verification-2026-08-10.md
Ochenstarik 23eb3f5233 chore(agents): разбор рабочих папок с диска на 2026-08-18
Задания, отчёты и патчи, лежавшие в C:\Users\Ochenstarik\projects и в
домашней папке, перенесены в agents/. Разложено по агентам там, где имя
файла позволяло определить автора; остальное — в _salvage-2026-08-18/
и разбирается вручную.

Патчи в notes/salvage-2026-08-18/ — незакоммиченная работа из брошенных
рабочих копий: она существовала только на диске.

Тяжёлое (релизные архивы, инсталляторы, наборы данных) в репозиторий не
попало: оно лежит рядом, в Agent_projects/_archive и Agent_projects/_data.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:19:54 +07:00

8.2 KiB
Raw Blame History

Antigravity: проверка опубликованного релиза установкой

Состояние

main @ 61471f0. Открытых PR нет. Очередь B подписанной поставки слита (#35), все замечания по ней закрыты.

Задание относится к завершению Горизонта 0 — это проверка того, что уже сделано, а не новая функциональность. Гейт горизонта не нарушается.

Ветка: antigravity/release-verification.


Часть 1 — установка из опубликованного релиза как проверка в CI

Зачем

Вся цепочка поставки собрана: manifest v2, подпись cosign, проверка в bootstrap и в Desktop, воспроизводимые сборки. Но ни один автоматический тест не устанавливает систему из фактически опубликованного релиза.

Цена этого пробела уже известна. При первой живой установке нашлись подряд:

  • alpha.8 был опубликован вообще без Linux-архивов — единственной поддерживаемой серверной платформы;
  • verify_archive искал в manifest ключ ServerMonitorManager-linux-x64.tar.gz, тогда как ассет называется server-monitor-manager-linux-x64.tar.gz, и захардкоженную архитектуру — то есть проверка подписи ломала штатную установку;
  • release-workflow трижды падали на CycloneDX и путях артефактов.

Ни одно из этого не ловилось зелёным CI, потому что CI проверяет сборку из дерева, а не релиз как продукт. Тесты работают с локально собранным архивом; настоящие имена ассетов, настоящий manifest и настоящая подпись в них не участвуют.

Что сделать

Новый workflow, запускаемый после публикации релиза и вручную через workflow_dispatch с параметром тега.

На чистом runner'е, без доступа к дереву исходников кроме самого скрипта установки:

  1. Скачать smm-setup.sh из релиза по тегу и проверить его контрольную сумму по опубликованному .sha256.
  2. Запустить smm-setup.sh hub <локальный-хост> — то есть пройти ровно тот путь, которым пользуется владелец: загрузка bootstrap и архива из релиза, проверка контрольных сумм, проверка подписи manifest, preflight, verify-release, установка Control, mesh-init.
  3. Проверить, что Control активен и /healthz отвечает.
  4. Выпустить код Node через node-code, установить Node на той же машине, дождаться активного ochenstarik-smm-agent.service и выданного сертификата.
  5. Проверить install-monitor: пользователь создан, forced command выдаёт снимок, поля совпадают с tests/contracts/monitor-snapshot-v1.txt.
  6. Снять всё через uninstall-* и убедиться, что следов не осталось.

Требования:

  • скрипт установки берётся из релиза, а не из рабочего дерева — иначе проверяется не то, что получит пользователь;
  • проверка подписи не обходится: SMM_ALLOW_UNSIGNED в этом прогоне не используется;
  • прогон падает, если в релизе отсутствует любой ожидаемый ассет.

Негативные проверки

Отдельными шагами, каждый обязан завершиться отказом установки:

  • архив с изменённым байтом;
  • manifest с подменённым хэшем без переподписи;
  • manifest без файла подписи;
  • подпись, сделанная другой identity.

Первые три уже покрыты юнит-тестами против синтетических данных; здесь они проверяются на настоящем релизе и настоящем cosign.


Часть 2 — проверка того, что релиз полон

Отдельный шаг того же workflow: сверить набор ассетов релиза с ожидаемым списком и упасть при расхождении.

ochenstarik-server-monitor-manager.sh(+.sha256)
server-monitor-manager-linux-x64.tar.gz(+.sha256)
server-monitor-manager-linux-arm64.tar.gz(+.sha256)
server-monitor-manager-linux-x64-sbom.json
server-monitor-manager-linux-arm64-sbom.json
server-monitor-manager-win-x64-sbom.json
ServerMonitorManager-win-x64.msix
ServerMonitorManager-test-signing.cer
SHA256SUMS
smm-setup.sh(+.sha256)
server-monitor-manager-manifest.json
server-monitor-manager-manifest.sig

Ровно этой проверки не хватало, когда alpha.8 вышел без Linux-архивов и это заметил человек, а не CI.


Границы

Hermes параллельно выпускает v0.1.0-alpha.10, правит deploy/smm-setup.sh (значение DEFAULT_RELEASE_TAG), roadmap, переводы README и удаляет слитые ветки. Может также добавить Debian VM в матрицу.

Не трогать: deploy/**, docs/roadmap.md, docs/i18n/**, docs/linux-platform-matrix.md.

Ваша область — новый workflow и вспомогательные скрипты проверки под tests/. Если для задачи потребуется изменить существующий workflow, согласовать: релизный пайплайн ведёт Hermes, и три починки подряд за день случились именно из-за правок с двух сторон.

Чего опасаться

Новый workflow по определению не запускается на pull request — он привязан к публикации релиза. Зелёный PR про него ничего не докажет, ровно как было с permissions и locked-mode.

Поэтому обязательно: actionlint на новом файле с выводом в отчёт и прогон через workflow_dispatch на своей ветке против уже существующего тега v0.1.0-alpha.9. Это заодно ответит на главный вопрос — прошла бы проверка на реальном релизе или нет.

Критерий приёмки

  • новый workflow выполняет полный цикл установки из опубликованного релиза и снимает её;
  • четыре негативные проверки отвергают установку;
  • отсутствие любого ожидаемого ассета роняет прогон;
  • SMM_ALLOW_UNSIGNED в основном прогоне не используется;
  • actionlint чист, вывод приложен;
  • выполнен workflow_dispatch-прогон против v0.1.0-alpha.9, ссылка в отчёте;
  • git diff --name-only main не содержит файлов из списка границ;
  • PR не смержен.

Отчёт

Раздельно: локально, в CI со ссылками, не запускалось и почему. Описание PR заполнять после завершения CI.