# Выпуски в main, бета в ветке beta

Решение владельца 28.09.2026. Заменяет ADR-0017; из него действуют: выпуск — метка
`vX.Y.Z`, обновление назад не ходит, бета — выбор владельца.

В `main` живут только выпуски. Вся работа после 0.4.8 (0.4.9 и дальше) идёт в ветку `beta`
и попадает в `main` выпуском. Бета-обновления — это Update branch `beta`: решает ветка.
`iva beta` и кнопка «🧪 Обновления» ставят ветку `beta` и, для прежних бета-сборок, флаг
`iva.beta=true`; `iva stable` возвращает ветку `main` и снимает флаг. Не записалась ветка —
команда отказывает и флаг не трогает. Прежний выбор беты (флаг при `main` или без ветки)
обновление переводит на ветку `beta` и переписывает `iva.updateBranch` один раз; своя ветка
(`release/<v>`) остаётся как есть. Обновление ни в одной ветке не уводит установку назад:
цель — предок установленного коммита значит «уже последняя». Активного коммита нет в зеркале — отказ: безопасность перехода не доказать. Ветка `beta` недоступна —
отказ одной строкой, а не HEAD зеркала. Откат только явный: `repair.sh`, `iva rollback`.

`install.sh` с `IVA_BETA=1` всегда ставит ветку `beta` (чужой `BRANCH` — строка
предупреждения), над существующей установкой пишет выбор в зеркало и `.git` до передачи
обновлятору; установка беты: `curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/beta/install.sh | IVA_BETA=1 bash`.
`repair.sh` идёт только за настроенной веткой; на `main` не откатывает установку, чей коммит
есть в любой ветке origin и новее выпуска; origin не ответил — ремонт отменён, ничего не
сброшено. Вся сеть ремонта (головы, ветка, метки) идёт до сброса, сброс один; прежний флаг при `main` ремонт переводит на `beta`, как обновлятор. Установку любой версии, 0.4.8 включительно, переводит на бету `beta.sh`:
`curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/beta/beta.sh | bash`; он
называет прежнюю ветку и проверяет, что активная версия сменилась.

Обоснование. Обновлятор 0.4.8 и старше выбора не знает и ставит вершину своей ветки. Пока
принятые правки ложились в `main`, кнопка «Обновить» у каждой старой установки ставила
непроверенную вершину: выбор ADR-0017 до них не доходил. Когда в `main` только выпуск,
старый обновлятор сам ставит выпуск, а бету получает только тот, кто её выбрал.

Цена. Две ветки: выпуск — это слияние `beta` в `main` с меткой, исправления идут в `beta` и
доходят до `main` следующим выпуском, бэкпортов по-прежнему нет. Установка 0.4.8 не узнает
о бете, пока владелец сам не запустит `beta.sh` или не обновится до выпуска с `iva beta`.

Отвергнутые альтернативы. Одна ветка с метками (ADR-0017) — старый обновлятор ставит
вершину. Принудительный перевод старых установок на выпуск кодом — такого кода у них нет.
