# Repository split map

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

Этот документ фиксирует целевую карту физического разделения текущего репозитория на:

- `crank-community`
- `crank-enterprise`
- `crank-cloud`

Документ нужен, чтобы:

- не гадать, что именно куда переносится;
- заранее отделить public Community artifacts от private commercial delivery;
- подготовить создание новых репозиториев как управляемый шаг, а не как спонтанный рефакторинг.

## 2. Текущее состояние

Сейчас код и документация еще живут в одном репозитории.

Это допустимо только как переходное состояние, пока:

- не зафиксированы capability boundaries;
- не подготовлены extension seams;
- не собраны отдельные Community delivery artifacts;
- не определен physical split plan.

После завершения этого этапа текущий репозиторий не должен оставаться source of truth сразу для
всех трех редакций.

## 3. Целевой результат

### 3.1. `crank-community`

Public repository.

В нем должны остаться:

- Community runtime;
- Community UI;
- `admin-api`, `mcp-server`, `ui`;
- `crank-core`, `crank-registry`, `crank-runtime`, schema and mapping crates;
- только `REST`-ориентированный Community protocol surface;
- capability model;
- Community auth model:
  - static AI-agent key;
  - only `security_level = standard`;
- `deploy/community/*`;
- optional `Valkey` service definition для Community deployment;
- public CI/CD for Community;
- Community docs, smoke docs и demo flow.

Техническая оговорка:

- `crank-runtime` в Community должен уметь собираться без premium adapter crates;
- `UnsupportedProtocol` и capability model должны оставаться достаточным fallback для disabled protocol families.

В нем не должно остаться:

- private token issuer implementations;
- enterprise auth/governance services;
- cloud control-plane logic;
- private packaging files;
- private operational tooling.

### 3.2. `crank-enterprise`

Private repository.

В нем должны жить:

- self-hosted commercial extensions;
- `GraphQL` и `gRPC unary`, если они окончательно выводятся из Community;
- short-lived token service;
- one-time token service;
- enterprise access/governance:
  - `SSO`
  - `2FA`
  - extended `RBAC`
  - `audit log`
- premium protocol/runtime additions, если они не входят в Community;
- enterprise deployment manifests;
- optional cluster-aware cache integration для self-hosted production;
- private container/release packaging;
- enterprise operator docs.

### 3.3. `crank-cloud`

Private repository.

В нем должны жить:

- cloud control plane;
- metering;
- billing;
- hosted tenant management;
- hosted operational tooling;
- managed shared cache layer defaults and cache operations;
- cloud-only delivery manifests;
- cloud release pipeline;
- hosted support/admin tooling.

## 4. Карта по типам содержимого

### 4.1. Application code

Остается в `crank-community`:

- весь текущий Community runtime и UI
- все public extension seams
- все capability checks
- `REST`-only product surface

Как промежуточный этап до физического переноса:

- `crank-runtime` в общем коде должен иметь feature-gated seams для `GraphQL/gRPC/SOAP/WebSocket`;
- это позволяет потом перенести premium adapters в private repos без полного форка runtime base.

Уходит в `crank-enterprise`:

- `crank-adapter-graphql`
- `crank-adapter-grpc`
- private auth/token/governance services
- enterprise-only runtime additions

Уходит в `crank-cloud`:

- hosted orchestration and control-plane code
- billing/metering integrations

### 4.2. Deployment manifests

Остается в `crank-community`:

- `deploy/community/*`

Уходит в `crank-enterprise`:

- private self-hosted manifests
- private `Helm` charts
- enterprise image references

Уходит в `crank-cloud`:

- hosted deployment manifests
- cloud operational manifests

### 4.3. CI/CD

Остается в `crank-community`:

- public Community `CI`
- public Community `Deploy`

Уходит в `crank-enterprise`:

- private release workflows
- private image publishing

Уходит в `crank-cloud`:

- hosted release workflows
- control-plane rollout workflows

### 4.4. Documentation

Остается в `crank-community`:

- public architecture
- public API/MCP contracts
- Community deployment docs
- Community smoke docs

Уходит в `crank-enterprise`:

- enterprise operator docs
- enterprise packaging docs
- enterprise support runbooks

Уходит в `crank-cloud`:

- hosted operations docs
- tenant control-plane docs
- cloud support runbooks

## 5. Правила переноса

При переносе нужно соблюдать:

1. Сначала переносится Community в `crank-community` как рабочая самостоятельная база.
2. Потом переносится private self-hosted контур в `crank-enterprise`.
3. Потом переносится hosted/control-plane контур в `crank-cloud`.
4. Public contracts должны остаться в Community и не зависеть от private кодовой базы.
5. Private repos не должны требовать обратного копирования логики в Community.

## 6. Что должно произойти перед физическим split

Перед началом physical split нужно выполнить отдельно:

1. Создать репозитории:
   - `crank-community`
   - `crank-enterprise`
   - `crank-cloud`
2. Определить owners и access policy для private repositories.
3. Зафиксировать отдельные package/release names.
4. Подготовить начальные README и baseline workflows для всех трех репозиториев.

Текущий статус:

- `crank-community` уже создан;
- до старта physical split остаются внешние шаги:
  - создать `crank-enterprise`
  - создать `crank-cloud`

Пока эти четыре пункта не выполнены, physical split не начинается.

Техническая заготовка для этого шага уже живет в:

- `templates/repositories/crank-community/*`
- `templates/repositories/crank-enterprise/*`
- `templates/repositories/crank-cloud/*`

## 7. Практический вывод

Следующий управленческий шаг после завершения текущего boundary-трека:

- создать `crank-enterprise`
- создать `crank-cloud`
- создать `crank-enterprise`
- создать `crank-cloud`

После этого уже можно планировать фактическое разнесение кода и delivery files.
