# Community source whitelist

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

Этот документ фиксирует, что именно допустимо в публичном репозитории `crank-community`, а что должно оставаться вне него.

Документ нужен для трех задач:

- держать `crank-community` в рамках честной открытой редакции;
- не допускать обратного затекания premium surface после split;
- использовать explicit whitelist как правило для дальнейших изменений и синхронизации с private repositories.

## 2. Текущий статус

`crank-community` уже является самостоятельным public repository и должен рассматриваться как source base для открытой редакции.

Следствие:

- этот репозиторий описывается как действующая открытая кодовая база, а не как временная заготовка;
- cleanup выполняется прямо в `crank-community`, а не как подготовка к будущему импорту;
- любые общие улучшения сначала оформляются здесь, а затем переносятся в `crank-enterprise` и `crank-cloud`.

## 3. Разрешенный состав `crank-community`

### 3.1. Верхнеуровневые файлы

Разрешены:

- `AGENTS.md`
- `Cargo.toml`
- `Cargo.lock`
- `LICENSE`
- `README.md`
- `TASKS.md`
- `justfile`
- `rust-toolchain.toml`
- `.dockerignore`
- `.env.example`
- `.gitignore`
- `.sqlx/*`

С оговоркой:

- `Cargo.toml` и `Cargo.lock` должны оставаться Community-specific;
- `TASKS.md` должен описывать backlog именно для `crank-community`.

### 3.2. Backend и core crates

Разрешены:

- `apps/admin-api`
- `apps/mcp-server`
- `crates/crank-core`
- `crates/crank-schema`
- `crates/crank-mapping`
- `crates/crank-registry`
- `crates/crank-runtime`
- `crates/crank-adapter-rest`

С оговоркой:

- `crank-runtime` должен собираться как `REST-only` база;
- Community workspace не должен зависеть от `GraphQL`, `gRPC`, `SOAP`, `WebSocket` adapter crates;
- server-side capability enforcement должен оставаться честным и не позволять premium protocol paths.

### 3.3. UI

Разрешены:

- Community UI pages;
- Community wizard для `REST`;
- capability-gated copy, который честно описывает границы Community;
- Community demo and staging flows.

Допустимо сохранять:

- public capability model;
- честные тексты про существование `Enterprise` и `Cloud`, если они не превращаются в рабочий premium UX.

### 3.4. Deployment и scripts

Разрешены:

- `deploy/community/*`
- public GitHub workflows для Community
- Community release docs
- public smoke scripts

### 3.5. Documentation

Разрешены:

- public architecture docs;
- public API/MCP contracts;
- `product-editions`, `commercial-boundaries`, `repository-split-map`;
- Community deployment and smoke docs;
- Community release checklist.

## 4. Явный blacklist для `crank-community`

В публичный репозиторий не должны попадать:

- `crates/crank-adapter-graphql`
- `crates/crank-adapter-grpc`
- `crates/crank-adapter-soap`
- `crates/crank-adapter-websocket`
- private token issuer implementations
- enterprise governance implementations
- metering / billing implementations
- hosted control-plane code
- private delivery manifests
- private release workflows
- private operator tooling

Также в Community не должны оставаться рабочие premium-only flows:

- `GraphQL` wizard path
- `gRPC` wizard path
- `SOAP` wizard path
- `WebSocket` wizard path
- Community streaming execution UI
- Community demo data для premium protocols
- premium protocol examples

## 5. Текущие cleanup-задачи

На данный момент `crank-community` уже отделен как репозиторий, но еще требует final cleanup.

Основные хвосты:

1. workspace manifests все еще содержат часть premium protocol toolchain dependencies;
2. Community test/dev wiring еще не полностью очищен от legacy streaming и premium protocol references;
3. `workspace-setup`, `settings`, `catalog`, `usage`, `agents` и `i18n` все еще содержат отдельные premium strings и dormant UI modules;
4. часть docs все еще описывает переходный split-state вместо текущего Community repository.

## 6. Правило на будущее

Для `crank-community` действует whitelist-first правило:

- сначала определяется, допустима ли возможность в Community;
- потом код и документация приводятся к этой границе;
- и только после этого изменение попадает в `main`.

Запрещено:

- возвращать premium functionality в Community как dormant или half-wired path;
- хранить в Community “на будущее” private operator/runtime flows без прямой необходимости для общей базы;
- вести backlog так, будто `crank-community` все еще лишь промежуточная стадия split.
