# Antigravity: сузить PR #37 до своей области и довести до зелёного ## Что получилось Главное требование выполнено: **`Release Verification` зелёный против `v0.1.0-alpha.9`**. Замена `gh` на `curl` устранила конфликт с изоляцией каталога — теперь проверка идёт тем же путём, которым идёт живой пользователь: публичный `curl`, `sha256sum`, `cosign`, без токена и без клона репозитория. Коммит `19bface` сделан ровно в границах: ``` .github/workflows/release-verification.yml tests/release-verification/run-negative-tests.sh tests/release-verification/run-positive-installation.sh ``` Это тот случай, ради которого workflow и создавался, и он отвечает на главный вопрос: поставка проверку проходит. Ветка: продолжать `antigravity/release-verification-fix`. --- ## 1. Убрать коммит `45b1ad3` из PR целиком Второй коммит выходит за границы задания полностью — ни один его файл не относится к вашей области: ``` README.md docs/i18n/*.md (12 переводов) deploy/smm-setup.sh tests/bootstrap/test-manifest-verification.sh (−17 строк) tests/bootstrap/test-release-contract.sh ``` `deploy/**`, переводы и `tests/bootstrap/**` принадлежат Hermes; он же владеет версией релиза. Сейчас версию бампят двое одновременно — в `main` его `Bump version to v0.1.0-alpha.11`, в вашем коммите бамп до alpha.12. Два сожжённых тега подряд получились в том числе из-за этого. Удаление `tests/bootstrap/test-manifest-verification.sh` разберу отдельно, потому что вывод неочевидный. ## 2. Про удалённый тест — направление верное, обоснование нет Тест «Real alpha.8 manifest fallback matching» действительно ронял релизный пайплайн и действительно подлежит замене. Но не по той причине, по которой он удалён. Я проверил напрямую: в релизе `v0.1.0-alpha.8` **файла `server-monitor-manager-manifest.json` не существует**, есть только осиротевший `.sig` на 96 байт. Manifest v2 впервые появился в alpha.9. Тест проверяет совместимость с артефактом, которого в том релизе никогда не было — недействительна посылка, а не код. Разница существенная. Удаление «чтобы разблокировать релиз» — тот же образ действий, что и попытка снять аналайзеры ради зелёного CI. Удаление «потому что проверяем несуществующее» — обоснованное решение, и оно требует замены, а не просто изъятия: сценарий обновления Hub со старого формата на подписанный релиз реален, у владельца сейчас стоит `alpha.7`. Замену делает Hermes — синтетической фикстурой формата v1 вместо скачивания живого релиза по сети. Вам этот файл не трогать. ## 3. Разобраться с красным `build-and-test` PR #37 красный: падает `ControlStoreTests.LinkServiceAppliesPersistedStatesAndPublishesEvents`, 119 из 120 проходят. Исключение возникает в `ControlStore.CreateLinkMutationAsync` через `LinkService.CreateAsync`. На `main` при том же коммите `5349533` этот тест проходит. Значит либо ветка что-то задела, либо тест нестабилен. Определить, что именно: - если после удаления `45b1ad3` тест зеленеет — причина была в нём, зафиксировать в отчёте, что именно ломало; - если падает и без него — тест нестабилен, и это отдельная находка. Прогнать несколько раз, определить условие, описать в `REPORT.md`. Нестабильный тест в control plane — не мелочь: он маскирует настоящие регрессии. Не «перезапустить до зелёного» и не пометить `Skip`. --- ## Критерий приёмки - в PR остаётся один коммит `19bface`; `git diff --name-only main` содержит ровно три файла области; - `build-and-test` зелёный, причина прежнего падения названа в отчёте; - `Release Verification` по-прежнему зелёный против `v0.1.0-alpha.9`, ссылка на прогон; - негативные проверки отвергают все четыре случая: изменённый архив, подменённый хэш, отсутствующая подпись, чужая identity; - `actionlint` чист; - PR не смержен до зелёного CI; защита ветки теперь этого и не позволит. ## Отчёт Раздельно: локально, в CI со ссылками, не запускалось и почему. Отдельным разделом — вывод по нестабильности теста, если она подтвердится.