# Hermes: выпустить alpha.14 и дать установку одной командой

## Состояние

- `main` @ `b0ad40c`, открытых PR нет, на remote одна ветка, CI зелёный;
- `deploy/smm-setup.sh` по умолчанию указывает на `v0.1.0-alpha.14`, **которого не существует** — опубликован `alpha.13`. Установка по документации сейчас упирается в 404;
- `alpha.12` и `alpha.13` содержат подпись без сертификата и потому непроверяемы; по политике неизменяемости дополнить их нельзя.

Ветка: `hermes/release-alpha14-publish`.

---

## Часть 1 — выпустить `v0.1.0-alpha.14` · блокирует владельца

Это первый релиз, где подпись проверяема целиком: `manifest.json`, `manifest.sig` и `manifest.pem` публикуются вместе, `verify_archive` требует все три.

1. **Сначала `workflow_dispatch`-прогон `Release pipeline` на своей ветке**, до тегирования. Два сожжённых тега подряд, alpha.10 и alpha.11, получились ровно потому, что этот шаг пропускали.
2. Создать и запушить тег `v0.1.0-alpha.14`.
3. Проверить набор ассетов — семнадцать позиций, включая `server-monitor-manager-manifest.pem`. Список зафиксирован в `tests/release-verification/verify-assets.sh`, сверяться с ним.
4. Убедиться, что `Release Verification` отработал автоматически по событию `release: published` и **зелёный**. Это главный результат: впервые проверка пройдёт против настоящего подписанного релиза, а не против ветки.

Если `Release Verification` покажет дефект релиза — это успех задачи. Зафиксировать находку и не «чинить» её ослаблением проверки или флагом `SMM_ALLOW_UNSIGNED`.

## Часть 2 — установка одной командой

Сейчас оператор вручную скачивает семь файлов: установщик и его контрольную сумму, архив и его контрольную сумму, manifest, подпись и сертификат. Пропустить любой из трёх файлов подписи — значит получить отказ `verify-release`. Это лишний источник ошибок в самой ответственной операции.

Добавить в `deploy/smm-setup.sh` команду, которая делает это сама:

```
smm-setup.sh install-hub  PUBLIC_HOST [HTTPS_PORT] [WG_PORT]
smm-setup.sh install-node
```

Поведение:

- определить архитектуру и выбрать соответствующий `tar.gz`;
- скачать в рабочий каталог архив, его `.sha256`, manifest, подпись и сертификат;
- сверить контрольную сумму архива;
- выполнить `install-control` и `mesh-init` либо `install-node`;
- при отсутствии любого из трёх файлов подписи — отказ с внятным сообщением, а не тихий переход на `.sha256`.

Существующий сквозной режим (`smm-setup.sh <любая-команда-bootstrap>`) сохранить: он используется в тестах и в приёмке.

После этого обновить `docs/linux-bootstrap.md`: показать короткий путь как основной, длинный оставить как ручной.

## Часть 3 — зафиксировать судьбу непроверяемых релизов

В `docs/release-policy.md` записать: `v0.1.0-alpha.10` и `v0.1.0-alpha.11` — теги без опубликованного релиза, номера не переиспользуются; `v0.1.0-alpha.12` и `v0.1.0-alpha.13` опубликованы с подписью, но без сертификата и потому проверке не поддаются; первым полностью проверяемым релизом является `v0.1.0-alpha.14`.

Это нужно не для порядка, а чтобы через полгода никто не пытался объяснить, почему подпись двух релизов не сходится.

---

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

- `workflow_dispatch`-прогон выполнен до тегирования, ссылка в отчёте;
- `v0.1.0-alpha.14` опубликован, набор ассетов совпадает с `verify-assets.sh`;
- `Release Verification` отработал по событию публикации и зелёный, ссылка в отчёте;
- `install-hub` и `install-node` ставят систему без ручного скачивания файлов подписи;
- отсутствие manifest, подписи или сертификата даёт отказ, а не переход на `.sha256`;
- судьба alpha.10–alpha.13 записана в release-policy;
- всё через PR, CI зелёный.

## Отчёт

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