# 24/7 автономный workflow

Картина: **твой Mac/iPhone даёт команду → Claude работает → всё запускается в облаке независимо от твоего устройства**.

```
        ┌──────────────┐        ┌──────────────┐
        │   Mac / iPhone │        │  Твой Proxmox │
        │ (даёшь команду)│        │  VM (будущее) │
        └───────┬──────┘        └───────┬──────┘
                │                       │
                │  Claude Code          │  Claude Code 24/7
                │  (когда открыт)       │  (когда поднимем VM)
                ▼                       ▼
        ┌──────────────────────────────────────┐
        │            GitHub (main branch)       │
        └──────┬──────────────────────────┬────┘
               │ push                     │
               ▼                          ▼
        ┌──────────────┐          ┌──────────────┐
        │ CI workflow  │          │Docker workflow│
        │ (backend+web │          │(api+web images│
        │ +POS builds) │          │ на ghcr.io)   │
        └──────┬──────┘          └──────┬──────┘
               │                         │
               │ artifacts:              │ images pulled by
               │ web-dist, POS .exe      │ stage / prod compose
               ▼                         ▼
        ┌──────────────┐          ┌──────────────┐
        │ GitHub        │          │ Proxmox-VM    │
        │ Releases      │          │ stage/prod    │
        │ (.exe, APK)   │          │ (docker-compose)│
        └──────────────┘          └──────────────┘
```

## Что где живёт

| Компонент | Где | Когда работает | Зависит от Mac? |
|---|---|---|---|
| Claude Code (текущая сессия) | твой Mac | пока открыта app + Mac не спит | **Да** |
| Claude Code (будущее 24/7) | Proxmox VM | всегда | Нет |
| GitHub (код) | github.com | всегда | Нет |
| GitHub Actions CI | github.com | срабатывает на push / cron | **Нет** |
| Docker images | ghcr.io | всегда | Нет |
| Тестовый стенд (stage) | Proxmox VM | всегда | Нет |
| DB бэкапы | Proxmox VM → локальный диск + S3 (опц.) | cron nightly | Нет |

## Сценарии

### Ты заказал фичу → уснул

1. (Днём) запустил Claude, дал команду «сделай X», Claude работает
2. Перед сном Claude коммитит и пушит то что успел
3. GitHub Actions автоматически собирает backend+web+POS, прогоняет тесты
4. Docker-образы уходят в ghcr.io
5. (Если stage настроен) — stage автопулит образ → перезапускается → готов к тесту
6. Telegram-бот шлёт тебе «готово, проверь stage.food-market.xxx»
7. Утром ты смотришь, ревьюишь, делаешь merge/revert

### Ты дал команду с iPhone

1. Открыл Claude на iPhone, сказал «обнови UI страницы X»
2. Claude работает, пушит
3. GitHub Actions → ghcr.io → stage → Telegram → ты проверяешь прямо с iPhone

### Что-то пошло не так

- Каждый коммит = одна точка отката. `git revert <sha>` за 10 секунд.
- БД: ежедневный pg_dump `.sql.gz`, 30 дней ротации, скрипт `deploy/backup.sh`.
- Критические операции (миграции с удалением данных, force-push на main) — всегда спрошу тебя.

## GitHub Actions бюджет (free: 2000 мин/мес на приватный репо)

| Job | Runner | Мин/запуск | Множитель | Биллинговых мин | Когда |
|---|---|---|---|---|---|
| backend | Linux | 3 | 1× | 3 | каждый push/PR |
| web | Linux | 2 | 1× | 2 | каждый push/PR |
| pos | Windows | 5 | 2× | 10 | **только на теги `v*` + ручной запуск** |
| docker-api | Linux | 3 | 1× | 3 | только push в main (с изм. кода) |
| docker-web | Linux | 3 | 1× | 3 | только push в main (с изм. кода) |

**Оценка:** ~11 бил.мин на обычный коммит. Лимит 2000 мин ≈ 180 коммитов в месяц или 6 в день. На теге релиза +10 за POS.

**Когда упрёмся (ориентир: 200+ коммитов/мес):** поднимем self-hosted runner на Proxmox-VM (Ubuntu, 2 CPU/2 GB). В workflow: `runs-on: [self-hosted, linux]` вместо `ubuntu-latest`. Безлимит по времени.

## Что нужно для полноценного 24/7 (ещё не сделано)

- [x] GitHub Actions для CI (backend/web/POS) — готов `.github/workflows/ci.yml`
- [x] Docker workflow — готов `.github/workflows/docker.yml`
- [x] docker-compose для стенда — готов `deploy/docker-compose.yml`
- [x] DB backup скрипт — готов `deploy/backup.sh`
- [ ] Proxmox-VM `food-market-stage` — ждёт кредов от тебя
- [ ] Proxmox-VM `claude-runner` (чтобы я не жил на твоём Mac) — ждёт кредов
- [ ] SSH-ключ для деплоя в GitHub Secrets
- [ ] Telegram bot + chat_id в GitHub Secrets
- [ ] FTP для APK (если нужен) в GitHub Secrets
- [ ] Домен + SSL для stage (опц., Cloudflare)

## Секреты: безопасно передать мне

Пока твой Mac — единственное место, куда Claude Code имеет доступ. Безопасный путь:

1. Создай папку: `mkdir -p ~/.food-market-secrets && chmod 700 ~/.food-market-secrets`
2. Положи туда файлы (я буду читать только по твоей команде и не буду вставлять значения в чат):
   - `~/.food-market-secrets/proxmox.env` — ssh creds для Proxmox API/VM
   - `~/.food-market-secrets/ftp.env` — FTP для APK
   - `~/.food-market-secrets/telegram.env` — `BOT_TOKEN=...` + `CHAT_ID=...`
3. Пришли в чат: "Секреты в ~/.food-market-secrets/"
4. Я прочитаю, прокину в GitHub Secrets через `gh secret set`, больше нигде не сохраню.

## Настройка Mac чтобы не засыпал ночью (временно, пока нет remote runner)

```bash
# Заблокировать sleep на время работы Claude (Ctrl+C чтобы отменить)
caffeinate -i -d
```

Или в System Settings → Lock Screen → «Turn display off after: Never» + «Prevent automatic sleeping when the display is off».

После того как поднимем `claude-runner` VM — этот обход больше не нужен.
