# Demo Runbook

## 1. Цель документа

Этот документ фиксирует минимальный воспроизводимый сценарий запуска и демонстрации Crank без знания внутренней структуры кода.

## 2. Предусловия

- доступен `PostgreSQL`;
- задан `CRANK_DATABASE_URL`;
- задан `CRANK_STORAGE_ROOT`;
- доступны `CRANK_ADMIN_BIND` и `CRANK_MCP_BIND`;
- для UI установлен `Node.js`;
- для Rust-части установлен toolchain из `rust-toolchain.toml`.

## 3. Быстрый локальный запуск

### Backend

```bash
cargo run -p admin-api
```

Во втором терминале:

```bash
cargo run -p mcp-server
```

### UI

```bash
cd apps/ui
npm install
npm run dev
```

## 4. Контрольные health endpoints

```bash
curl http://127.0.0.1:3001/health
curl http://127.0.0.1:3002/health
```

Ожидаемо:

- `admin-api` возвращает `{"service":"admin-api","status":"ok"}`
- `mcp-server` возвращает `{"service":"mcp-server","status":"ok"}`

## 5. Demo flow

### REST

1. Создать REST operation через UI или `admin-api`.
2. Выполнить `test-run`.
3. Опубликовать operation.
4. Проверить появление tool в MCP через `tools/list`.
5. Выполнить `tools/call`.

### GraphQL

1. Создать GraphQL operation с фиксированным `query` или `mutation`.
2. Выполнить `test-run`.
3. Экспортировать YAML.
4. Импортировать YAML в режиме `upsert`.
5. Опубликовать operation и вызвать ее через MCP.

### gRPC

1. Создать gRPC operation.
2. Загрузить `descriptor set`.
3. Проверить `grpc/services` discovery summary.
4. Выполнить `test-run`.
5. Экспортировать YAML.
6. Импортировать YAML в режиме `upsert`.
7. Опубликовать operation и вызвать ее через MCP.

## 6. Проверка publish/reload flow

После публикации новой операции `mcp-server` не требует restart.

Проверка:

1. Открыть MCP session.
2. Вызвать `tools/list`.
3. Опубликовать новую operation через `admin-api`.
4. Повторно вызвать `tools/list`.
5. Убедиться, что новый tool появился после refresh interval.

## 7. Проверка YAML roundtrip

YAML roundtrip считается успешным, если:

1. operation экспортируется через `/api/admin/operations/{operation_id}/export`;
2. экспортированный YAML импортируется через `/api/admin/operations/import?mode=upsert`;
3. создается новая версия operation;
4. `test-run` новой версии проходит успешно.

## 8. Что считать готовым demo state

- все три протокола проходят сценарий `create -> test-run -> publish -> MCP call`;
- YAML export/import проходит хотя бы для `REST`, `GraphQL` и `gRPC`;
- `mcp-server` подхватывает published changes без restart;
- ошибки `admin-api` и runtime возвращаются в читаемом виде;
- логи позволяют понять, какая операция создавалась, тестировалась, публиковалась или импортировалась.
