# Hermes: выпустить alpha.11, починить bootstrap-job релиза, включить защиту ветки

## Состояние

- `main` @ `5349533` «Bump version to v0.1.0-alpha.11»;
- открытых PR нет;
- последний **опубликованный** релиз — `v0.1.0-alpha.9`;
- тег `v0.1.0-alpha.10` создан на `e8f771b`, но **релиз не опубликован**: `Release pipeline` упал в job `bootstrap`;
- Antigravity параллельно доделывает свою часть.

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

---

## Часть 1 — починить job `bootstrap` в `Release pipeline` · блокирующее

Прогон по тегу `v0.1.0-alpha.10` (`31420461877`):

```
bootstrap:                    failure
publish-linux (linux-x64):    success
publish-linux (linux-arm64):  success
package-windows:              success
manifest:                     skipped
```

В логе видно `PASS: Missing signature rejected`, затем `Process completed with exit code 1`. То есть негативные проверки подписи отработали частично, после чего шаг упал без внятного сообщения.

Следствие: `manifest` пропущен, релиз не создан, тег остался пустым.

Сделать:

1. Найти и исправить причину падения. Молчаливый `exit 1` без диагностики — сам по себе дефект: каждая проверка обязана печатать, что именно не сошлось.
2. Прогнать `Release pipeline` через `workflow_dispatch` на своей ветке до тегирования, чтобы убедиться, что job `bootstrap` проходит.

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

Тег `v0.1.0-alpha.10` использовать повторно нельзя: `docs/release-policy.md` запрещает переиспользование и пересоздание опубликованных тегов, а тег создан и виден. Версия в исходниках уже поднята до alpha.11 — это правильный выход.

1. После части 1 создать `v0.1.0-alpha.11` и запушить тегом.
2. Убедиться, что в релизе присутствует полный набор: bootstrap и `.sha256`, оба `tar.gz` и `.sha256`, три SBOM, MSIX, `smm-setup.sh` и `.sha256`, `server-monitor-manager-manifest.json` и `.sig`.
3. В `docs/release-policy.md` добавить строку о судьбе `v0.1.0-alpha.10`: тег существует, релиз по нему не публиковался, номер не переиспользуется. Пустой тег без объяснения — источник будущей путаницы.

## Часть 3 — включить защиту ветки `main` · системная причина

`main` не защищён: `GET /branches/main/protection` возвращает 404.

С 10 августа шесть коммитов легли в `main` **напрямую, минуя PR**:

```
5349533  Bump version to v0.1.0-alpha.11
48d096a  fix(ci): update release contract, remove backward compat test
e04037a  docs: add Debian VM reboot constraint section
bb672a2  docs: sync translations and roadmap
e8f771b  Merge branch 'hermes/release-alpha10'
7b322a6  Add release-verification workflow to main
```

До этого всё шло через PR — #32, #33, #35, #36. Результат отхода от правила: два коммита оставили `main` красным на сутки (падал `tests/bootstrap/test-release-contract.sh`), и это заметил не CI-гейт, а внешняя проверка.

Включить на `main`:

- обязательный pull request перед слиянием;
- обязательные проверки статуса: `build-and-test` (Linux) и `build` (Windows) как минимум;
- запрет force-push и удаления ветки;
- обязательная актуальность ветки относительно `main` перед слиянием.

Правило «один PR — одна тема, слияние после зелёного CI» существует с самого начала, но держалось на дисциплине. Оно должно держаться на настройке.

Записать это в `docs/release-policy.md` рядом с правилом неизменяемости тега.

## Часть 4 — проверка предыдущих частей задания

Из прошлого задания подтвердить в отчёте:

- roadmap: подпись manifest отмечена выполненной, физический acceptance остаётся открытым — **проверено, сделано**;
- Debian VM reboot: ограничение записано в документации — **проверено, сделано**;
- слитые ветки удалены — **проверено, осталось 7 из 15, все неслитые**;
- переводы README: в чём именно выражена синхронизация, какие файлы изменены.

---

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

- job `bootstrap` в `Release pipeline` проходит; каждая проверка при отказе печатает причину;
- `v0.1.0-alpha.11` опубликован с полным набором ассетов;
- судьба `v0.1.0-alpha.10` зафиксирована в `docs/release-policy.md`;
- `main` защищён: PR обязателен, статусы обязательны, force-push запрещён;
- правило записано в документации;
- `main` зелёный;
- всё, кроме настройки защиты ветки, проходит через PR.

## Отчёт

Раздельно: локально, в CI со ссылками, не запускалось и почему. Для части 3 приложить вывод `gh api repos/.../branches/main/protection` после включения.
