# Редакции продукта

## 1. Назначение документа

Этот документ фиксирует продуктовую модель Crank как open-core платформы и определяет, какие возможности входят в открытую редакцию, а какие относятся к коммерческим редакциям.

Документ нужен для трех целей:

- не смешивать в одном репозитории открытый и коммерческий контур без явных границ;
- синхронизировать продуктовые ограничения с архитектурой, API и UI;
- дать реализации четкий ориентир по edition gating и delivery model.

## 2. Базовая модель

Crank развивается как три редакции:

1. `Community` — открытая self-hosted редакция;
2. `Enterprise` — коммерческая self-hosted редакция;
3. `Cloud` — коммерческая vendor-hosted редакция.

Принцип:

- открытая редакция должна быть самодостаточной и полезной сама по себе;
- коммерческие редакции должны расширять продукт, а не ломать открытую основу;
- различия между редакциями должны быть видны в capability model, документации, UI и delivery pipeline.

## 3. Community

### 3.1. Целевая аудитория

`Community` предназначена для:

- индивидуального пользователя;
- AI-энтузиаста;
- небольшой команды, которой нужен один рабочий MCP endpoint без enterprise-функций.

### 3.2. Что входит

- self-hosted развертывание;
- одна рабочая область;
- один пользователь;
- один AI-агент;
- протоколы:
  - `REST / HTTP`
  - `GraphQL`
  - `gRPC unary`
- создание и публикация операций;
- журналы вызовов и метрики использования;
- секреты и профили аутентификации для внешних сервисов;
- статический ключ AI-агента;
- только `security_level = standard`;
- контейнерное развертывание;
- документация, демо-сценарий и базовый CI.

### 3.3. Что не входит

- несколько рабочих областей;
- несколько пользователей;
- `SSO`, `2FA`, развитая `RBAC`, `audit log`;
- короткоживущие и одноразовые машинные токены;
- `WebSocket`, `SOAP`, `gRPC streaming`;
- режимы `window`, `session`, `async_job`;
- биллинг и usage metering для SaaS;
- cloud control plane.

## 4. Enterprise

### 4.1. Целевая аудитория

`Enterprise` предназначена для компаний, которые:

- разворачивают Crank на своей инфраструктуре;
- хотят полный набор протоколов;
- требуют усиленную безопасность, командный доступ и аудит;
- готовы платить за сопровождение и коммерческие расширения.

### 4.2. Что добавляется к Community

- несколько рабочих областей;
- несколько пользователей;
- `SSO`, `2FA`, расширенная `RBAC`, `audit log`;
- короткоживущие машинные токены;
- одноразовые токены для критичных операций;
- `security_level = elevated` и `security_level = strict`;
- `WebSocket`, `SOAP`, `gRPC streaming`;
- streaming execution modes;
- расширенные административные и эксплуатационные функции;
- поставка через приватные образы и `Helm`-чарты.

## 5. Cloud

### 5.1. Целевая аудитория

`Cloud` предназначена для команд, которым нужна:

- готовая размещенная платформа;
- минимизация собственной эксплуатационной нагрузки;
- SaaS-модель с управляемыми обновлениями и платными лимитами.

### 5.2. Что добавляется к Enterprise

- vendor-hosted развертывание;
- usage metering;
- тарифы и лимиты;
- cloud control plane;
- эксплуатационный мониторинг и обновления со стороны поставщика;
- биллинг и tenant-oriented support tooling.

## 6. Матрица возможностей

| Возможность | Community | Enterprise | Cloud |
| --- | --- | --- | --- |
| Hosting | self-hosted | self-hosted | vendor-hosted |
| Workspace count | 1 | many | many |
| User count | 1 | many | many |
| Agent count | 1 | many | many |
| REST / GraphQL / gRPC unary | yes | yes | yes |
| WebSocket / SOAP / gRPC streaming | no | yes | yes |
| Streaming modes | no | yes | yes |
| Static agent key | yes | yes | yes |
| Short-lived MCP token | no | yes | yes |
| One-time MCP token | no | yes | selectively |
| `security_level = standard` | yes | yes | yes |
| `security_level = elevated` | no | yes | yes |
| `security_level = strict` | no | yes | limited by policy |
| Logs and usage | yes | yes | yes |
| SSO / 2FA / RBAC / audit | no | yes | yes |
| Billing / metering | no | no | yes |

## 7. Правила для реализации

### 7.1. Community не должен зависеть от private code

Открытая редакция должна:

- собираться из этого репозитория полностью;
- иметь завершенный сценарий демо и эксплуатации;
- не требовать закрытых сервисов для базового машинного доступа.

### 7.2. Коммерческие возможности должны быть явно отделены

Коммерческие функции не должны появляться в Community как полурабочие заглушки. Для каждой такой функции требуется одно из двух:

- capability flag с честным недоступным состоянием;
- полное отсутствие функции из open-source сборки.

### 7.3. Различия по редакциям должны быть зафиксированы в четырех местах

1. в продуктовой документации;
2. в архитектурной декомпозиции;
3. в административном API и MCP-контрактах;
4. в UI через capability gating и честный copy.

## 8. Правила для машинной аутентификации

Продуктовые редакции различаются и по входящему машинному доступу:

- `Community`:
  - только статический ключ AI-агента;
  - только операции уровня `standard`;
- `Enterprise`:
  - статический ключ AI-агента;
  - короткоживущий токен;
  - одноразовый токен;
- `Cloud`:
  - статический ключ как режим совместимости;
  - короткоживущий токен как основной режим;
  - одноразовый токен — только там, где это поддерживается продуктовой политикой.

Подробная модель описана в `docs/agent-auth-model.md`.

## 9. Правила для UI

Открытый UI не должен:

- обещать недоступные в Community возможности как почти готовые;
- показывать enterprise/cloud controls без capability gating;
- использовать ложные CTA для недоступных функций.

Если функция не входит в текущую редакцию, UI должен делать одно из двух:

- не показывать ее вовсе;
- показывать ее как явно недоступную и документированно требующую другую редакцию.

## 10. Связанные документы

- `docs/architecture.md`
- `docs/module-decomposition.md`
- `docs/agent-auth-model.md`
- `docs/frontend-roadmap.md`
- `docs/refactoring-roadmap.md`
- `docs/implementation-plan.md`
