Задания, отчёты и патчи, лежавшие в 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>
63 lines
5.8 KiB
Markdown
63 lines
5.8 KiB
Markdown
# 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 и подпись уже публикуются — осталось их использовать.
|
||
|
||
1. Вшить в Desktop **константой** ожидаемую identity подписи: при keyless-режиме cosign это issuer и subject (репозиторий и workflow), при `minisign` — публичный ключ. Не скачивать её вместе с релизом: подпись, проверяемая ключом из того же релиза, ничего не доказывает.
|
||
2. Перед предложением обновления: скачать manifest и `.sig`, проверить подпись, сверить хэш артефакта с manifest, и только потом показывать пользователю кнопку обновления.
|
||
3. Несовпадение подписи или хэша — отказ с внятным текстом и записью в диагностику. Не предупреждение, не «продолжить всё равно».
|
||
4. Отсутствие manifest или подписи в релизе — тоже отказ; путь «старый релиз без подписи» допускается только под явным флагом разработчика, как `SMM_ALLOW_UNSIGNED` в bootstrap.
|
||
|
||
Тесты: валидная подпись принимается; подписанный чужой identity manifest отклоняется; manifest с подменённым хэшем отклоняется; отсутствующая подпись отклоняется.
|
||
|
||
---
|
||
|
||
## Часть 2 — проверка в bootstrap · после merge задания Hermes
|
||
|
||
Hermes сейчас правит `deploy/ochenstarik-server-monitor-manager.sh` — исправляет формат снимка Monitor. **Не заходить в этот файл, пока его PR не смержен.** Момент согласовать.
|
||
|
||
После merge:
|
||
|
||
1. `verify_archive` сверяет хэш архива **с manifest**, а не с соседним `.sha256`. Старый путь остаётся только под явным `SMM_ALLOW_UNSIGNED=1` с громким предупреждением.
|
||
2. Новое действие `verify-manifest MANIFEST SIGNATURE`.
|
||
3. Публичный ключ или OIDC-identity вшиты константой в bootstrap.
|
||
4. Отсутствие инструмента проверки подписи — отказ, а не предупреждение.
|
||
5. Отказ `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.
|