# Hermes: починить тест совместимости, выпустить alpha.12, закрепить владение релизом

## Состояние

- `main` @ `5349533`; защита ветки включена — обязательный PR, обязательные статусы `build-and-test` и `build`, force-push запрещён. Это сделано, дальше всё идёт через PR;
- опубликован по-прежнему только `v0.1.0-alpha.9`;
- теги `v0.1.0-alpha.10` и `v0.1.0-alpha.11` созданы, но релизы по ним **не опубликованы** — `Release pipeline` оба раза упал в job `bootstrap`.

Ветка: `hermes/alpha8-compat-fixture`.

---

## Часть 1 — тест совместимости с alpha.8 · блокирует все релизы

### Диагноз готов, повторять не нужно

`Release pipeline` на теге `v0.1.0-alpha.11`, job `bootstrap`, шаг `Validate bootstrap`:

```
Test 1..4: PASS
Test 5: Real alpha.8 manifest fallback matching (REQUIRES_NETWORK)
FAIL: Alpha.8 real release verification failed
```

Я скачал ассеты `v0.1.0-alpha.8` напрямую. **Файла `server-monitor-manager-manifest.json` в этом релизе нет.** Присутствует только `server-monitor-manager-manifest.sig` размером 96 байт — подпись без подписываемого файла. В alpha.8 лежал `server-monitor-manager-bootstrap-manifest.json`, то есть формат v1; manifest v2 впервые появился в alpha.9.

Значит тест проверяет обратную совместимость с артефактом, которого в том релизе никогда не существовало. **Дефекта в коде нет — недействительна посылка теста.**

### Что сделать

1. Убрать сетевую зависимость из релизного пайплайна. Тест, скачивающий чужой релиз по сети, роняет выпуск версии при любом сетевом сбое или изменении набора ассетов в прошлом. Релизный job не должен зависеть от внешнего состояния.

2. Заменить его **синтетической фикстурой формата v1**: локально сгенерированный набор в том виде, в каком его выпускали до alpha.9 — `server-monitor-manager-bootstrap-manifest.json`, `.sha256` рядом с архивом, без manifest v2 и без подписи. Проверять на ней, что установка проходит по пути `SMM_ALLOW_UNSIGNED=1` и отвергается без него.

   Сценарий реальный и его нельзя терять: Hub владельца стоит на `alpha.7`, и обновляться он будет именно со старого формата на подписанный.

3. Фикстуру положить рядом с `tests/fixtures/control-v0.1.0-alpha.7.db` — там уже принят такой подход для схемы БД.

**Не удалять проверку целиком.** Antigravity в PR #37 уже сделал коммит с её удалением; я потребовал этот коммит из PR убрать. Владение `tests/bootstrap/**` и релизным пайплайном остаётся за вами.

### Заметка, менять ничего не нужно

В релизе alpha.8 лежит осиротевший `manifest.sig` без `manifest.json`. По `docs/release-policy.md` ассеты опубликованного релиза неизменяемы, поэтому трогать нельзя. Стоит одной строкой упомянуть это в release-policy как известную аномалию, чтобы следующий человек не искал причину.

---

## Часть 2 — выпустить `v0.1.0-alpha.12`

`alpha.10` и `alpha.11` сожжены: теги существуют, релизов по ним нет, переиспользовать по собственной политике нельзя.

1. После части 1 прогнать `Release pipeline` через `workflow_dispatch` на своей ветке — убедиться, что job `bootstrap` проходит **до** тегирования. Два сожжённых тега подряд получились именно потому, что этого шага не делали.
2. Создать `v0.1.0-alpha.12`, запушить тегом.
3. Проверить полноту набора: bootstrap и `.sha256`, оба `tar.gz` и `.sha256`, три SBOM, MSIX, `smm-setup.sh` и `.sha256`, `server-monitor-manager-manifest.json` и `.sig`.
4. В `docs/release-policy.md` зафиксировать судьбу `alpha.10` и `alpha.11`: теги существуют, релизы не публиковались, номера не переиспользуются. Пустые теги без объяснения — источник будущей путаницы.

---

## Часть 3 — единоличное владение версией и релизными файлами

Сейчас версию бампят двое. `main` содержит ваш `Bump version to v0.1.0-alpha.11`, а в PR #37 Antigravity бампит до alpha.12 и правит `deploy/smm-setup.sh`, README и все 12 переводов. Два сожжённых тега — прямое следствие.

Закрепить в `docs/release-policy.md`: версию в исходниках, `deploy/**`, релизные workflow и переводы README меняет только владелец релиза. Остальным — через запрос в отчёте.

---

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

- job `bootstrap` проходит; сетевых зависимостей в релизном пайплайне нет;
- совместимость со старым форматом покрыта синтетической фикстурой, сценарий `SMM_ALLOW_UNSIGNED` проверяется в обе стороны;
- `workflow_dispatch`-прогон выполнен **до** тегирования, ссылка в отчёте;
- `v0.1.0-alpha.12` опубликован с полным набором ассетов;
- судьба alpha.10, alpha.11 и аномалия alpha.8 записаны в release-policy;
- владение релизными файлами закреплено документально;
- всё через PR.

## Отчёт

Раздельно: локально, в CI со ссылками, не запускалось и почему.
