# Режимы публичного доступа (сайт + MCP)

Краткий runbook для оператора. Настройка: **admin → «Режим сайта и MCP»** или env.

## Режимы сайта (`VERITHINK_PUBLIC_SITE_MODE`)

| Значение | Гости (люди) | Боты | Оператор (admin token/cookie) |
|----------|--------------|------|-------------------------------|
| `live` | Полный сайт | Индексация по robots/sitemap | Полный доступ |
| `coming_soon` | Страница «Скоро»; **публичные гайды** `/docs/public/*` и allowlist | 503, без контента | Полный доступ |
| `maintenance` | Страница техработ (503) | 503 | Полный доступ |

## Режимы MCP (`VERITHINK_PUBLIC_MCP_MODE`)

| Значение | Hosted MCP + прямой `/v1/*` API |
|----------|----------------------------------|
| `mirror_site` | Заблокирован, когда сайт не `live` |
| `live` | Всегда включён (бета-тестеры при закрытом сайте) |
| `blocked` | Всегда выключен |

**Prod по умолчанию:** `coming_soon` + `mirror_site` (см. `.env.prod.example`).

## Что всегда открыто

- `/healthz` — мониторинг и hosted MCP probe
- `/coming-soon.html`, `/maintenance.html`
- `/v1/admin/*` — операторские API (с авторизацией)

## Откат

1. Admin → сайт **live**, MCP **mirror_site** (или **live** для MCP-only беты).
2. Или env: `VERITHINK_PUBLIC_SITE_MODE=live` + restart ReasonService.
3. Hosted MCP подхватит режим через `/healthz` за ~10 с (3 с если заблокирован).

## Диагностика

Заголовки ответа gate: `X-Public-Site-Mode`, `X-Public-Gate-Decision` (`coming_soon`, `mcp_blocked`, `docs_allowed`, `bot_blocked`, …).

```bash
curl -sI https://YOUR_DOMAIN/ | grep -i x-public
curl -s https://YOUR_DOMAIN/healthz | jq .publicSiteMode,.publicMcpBlocked
```

## Аналогии (индустрия)

- **Stripe / status page:** API fail-closed, status/docs часто отдельно — у нас `/healthz` + allowlist docs при `coming_soon`.
- **GitHub maintenance:** HTML maintenance, API 503 — у нас `maintenance` блокирует и сайт, и `/v1/*`.
- **Public beta:** лендинг закрыт, доки для разработчиков открыты — режим `coming_soon` + гайды MCP.
