Files
crank/docs/repository-split-map.md
T
2026-05-10 16:46:50 +00:00

213 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Repository split map
## 1. Назначение документа
Этот документ фиксирует целевую карту физического разделения текущего репозитория на:
- `crank-community`
- `crank-enterprise`
- `crank-cloud`
Документ нужен, чтобы:
- не гадать, что именно куда переносится;
- заранее отделить public Community artifacts от private commercial delivery;
- подготовить создание новых репозиториев как управляемый шаг, а не как спонтанный рефакторинг.
## 2. Текущее состояние
Разделение уже выполнено на уровне репозиториев:
- `crank-community` — public base;
- `crank-enterprise` — private self-hosted delta;
- `crank-cloud` — private hosted delta.
Дальнейшая задача не в создании split, а в его дисциплинированном поддержании:
- общее улучшение идет сначала в `crank-community`;
- затем переносится в `crank-enterprise` и `crank-cloud`;
- cleanup Community делается только в `crank-community`.
## 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 после разделения
После разделения действуют такие правила:
1. `crank-community` остается базой для общей открытой логики.
2. `crank-enterprise` и `crank-cloud` не должны независимо переизобретать общий Community код.
3. Общие исправления и улучшения сначала делаются в `crank-community`, затем переносятся в private repositories.
4. Удаление или ограничение Community functionality делается только в `crank-community`.
5. Private repositories должны хранить только свой product delta, а не полную независимую копию всей эволюции продукта.
## 7. Практический вывод
Для текущего этапа это означает:
- `crank-community` нужно дочистить до окончательного public состояния;
- затем использовать его как source base для общих улучшений;
- коммерческие возможности продолжать развивать только в `crank-enterprise` и `crank-cloud`.