# Зеркалирование main в Gitea-бэкап

GitHub-origin (`CoralMinister/lidpotok`) заблокирован (account suspend), push туда
возвращает 403. Чтобы локальная история `main` (включая свежий коммит регенерации
larastan baseline `317125e3`) имела внешнюю резервную копию, она зеркалируется в
самостоятельный Gitea-сервер бэкапа в Yandex Cloud. Это операция резервного
копирования: прод не затрагивается, рабочее дерево не меняется.

## Цель

Доставить текущий `main` в Gitea-репозиторий бэкапа `liderra/portal`
(`https://111.88.252.149.nip.io`) так, чтобы удалённая ветка `main` указывала на
локальный HEAD. Push — обычный fast-forward (Gitea-main был на более раннем коммите,
локальный — его потомок), без перезаписи истории (`--force` запрещён).

## D1. Контракт зеркалирующего push {#D1}

Команда — одиночный `git push` локального `main` в Gitea по HTTPS. Push обязан быть
fast-forward: если Gitea отвергает как non-fast-forward, операция останавливается без
форсирования (история бэкапа не перезаписывается). Затрагивается только удалённая
ссылка `main` в Gitea; локальные коммиты, рабочее дерево, прод liderra.ru и GitHub-origin
не изменяются. Аутентификация — учётной записью Gitea владельца.

## D2. Критерий приёмки {#D2}

Push завершается успешно: Gitea сообщает обновление ссылки `main` до локального HEAD
(`317125e3` или новее). Отказ по аутентификации или non-fast-forward — это не выполнение
критерия, а сигнал остановиться и показать вывод владельцу.

```verified-context-json
[
  {
    "id": "pricing-anchor",
    "kind": "EXTRACTED",
    "ref": "tools/cost-pricing.mjs",
    "anchor": "export const PRICING = Object.freeze("
  }
]
```
