Задания, отчёты и патчи, лежавшие в 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>
5.8 KiB
Antigravity: подписанная поставка, очередь B
Приёмка очереди A
Queue A принята. В релизе v0.1.0-alpha.8 присутствуют server-monitor-manager-manifest.json и server-monitor-manager-manifest.sig, Linux-артефакты и SBOM собираются, пайплайн после трёх починок отрабатывает целиком. Manifest v2 с подписью — это ровно то, чего не хватало для закрытия Горизонта 0 по поставке.
Ветка: antigravity/signed-delivery-queue-b.
Часть 1 — проверка подписи на стороне Desktop · начинать сразу
Desktop свободен, ни Hermes, ни вы его сейчас не трогаете.
Сегодня Desktop скачивает и ставит обновления, не проверяя, что артефакт подписан тем, кем должен. Manifest и подпись уже публикуются — осталось их использовать.
- Вшить в Desktop константой ожидаемую identity подписи: при keyless-режиме cosign это issuer и subject (репозиторий и workflow), при
minisign— публичный ключ. Не скачивать её вместе с релизом: подпись, проверяемая ключом из того же релиза, ничего не доказывает. - Перед предложением обновления: скачать manifest и
.sig, проверить подпись, сверить хэш артефакта с manifest, и только потом показывать пользователю кнопку обновления. - Несовпадение подписи или хэша — отказ с внятным текстом и записью в диагностику. Не предупреждение, не «продолжить всё равно».
- Отсутствие manifest или подписи в релизе — тоже отказ; путь «старый релиз без подписи» допускается только под явным флагом разработчика, как
SMM_ALLOW_UNSIGNEDв bootstrap.
Тесты: валидная подпись принимается; подписанный чужой identity manifest отклоняется; manifest с подменённым хэшем отклоняется; отсутствующая подпись отклоняется.
Часть 2 — проверка в bootstrap · после merge задания Hermes
Hermes сейчас правит deploy/ochenstarik-server-monitor-manager.sh — исправляет формат снимка Monitor. Не заходить в этот файл, пока его PR не смержен. Момент согласовать.
После merge:
verify_archiveсверяет хэш архива с manifest, а не с соседним.sha256. Старый путь остаётся только под явнымSMM_ALLOW_UNSIGNED=1с громким предупреждением.- Новое действие
verify-manifest MANIFEST SIGNATURE. - Публичный ключ или OIDC-identity вшиты константой в bootstrap.
- Отсутствие инструмента проверки подписи — отказ, а не предупреждение.
- Отказ
update-controlиupdate-agentпри несовместимой паре версий Control ↔ Agent ↔ helper. Требованиеdocs/installer-contract.md§6, невыполненное с самого начала; manifest v2 уже содержит нужные версии.
Чего опасаться
Release-workflow не запускаются на pull request — они триггерятся тегом и workflow_dispatch. Зелёный PR про них ничего не доказывает. Вы уже дважды на этом обожглись: permissions в #14 всплыли только при первом настоящем релизе, locked-mode в #15 — тоже.
Поэтому обязательно: actionlint на всех workflow с выводом в отчёт, и прогон через workflow_dispatch на своей ветке.
Отдельно: если для части 2 понадобится правка workflow — не вносить самостоятельно, описать в REPORT.md. Release-пайплайн сейчас ведёт Hermes, и три починки подряд за один день были ровно из-за того, что в него правили с двух сторон.
Критерий приёмки
- Desktop отказывается ставить обновление с неверной, чужой или отсутствующей подписью; четыре теста зелёные;
- identity подписи вшита в Desktop, а не берётся из релиза;
verify_archiveработает от manifest,verify-manifestсуществует;- несовместимые версии блокируют
update-*; deploy/ochenstarik-server-monitor-manager.shне тронут до merge PR Hermes — проверяется историей коммитов;.github/workflows/**не изменены;actionlintчист, вывод приложен;- CI зелёный, PR не смержены.
Отчёт
Раздельно: локально, в CI со ссылками, не запускалось и почему. Описание PR заполнять после завершения CI.