docs: define community whitelist boundary

This commit is contained in:
a.tolmachev
2026-05-07 19:27:54 +00:00
parent 7123a3c734
commit a3d8040ccc
7 changed files with 179 additions and 10 deletions
+6 -2
View File
@@ -39,7 +39,8 @@ Verification:
Progress:
- done:
- `crank-community` now contains the first imported public baseline from the current monorepo
- `crank-community` baseline-import was removed from history; the repository is back to bootstrap-only state until a clean whitelist-based import is ready
- the first baseline import was used only as a private split rehearsal and must not be treated as the final public source state
- bootstrap templates have been pushed into:
- `crank-community`
- `crank-enterprise`
@@ -58,7 +59,10 @@ Progress:
- bootstrap templates now exist for `crank-community`, `crank-enterprise`, and `crank-cloud`, including initial README and workflow skeletons
- `crank-runtime` now has protocol feature seams, and the runtime crate compiles with `--no-default-features` as a `REST-only` base
- pending:
- trim `crank-community` from bootstrap baseline to the final public Community source of truth
- implement the whitelist from `docs/community-source-whitelist.md`
- make Community workspace compile and run without premium protocol crates
- make Community UI export stop depending on premium wizard and streaming surfaces
- only after that, perform a clean whitelist-based force-push into `crank-community`
- continue physical split by isolating `enterprise/cloud` delta away from the extracted Community base
## Planned
+2 -2
View File
@@ -81,8 +81,8 @@
- физическое вынесение private code нельзя начинать раньше, чем эти три целевых repositories созданы и для них определены delivery boundaries.
- все три целевых repositories уже созданы;
- bootstrap templates уже перенесены в целевые repositories;
- `crank-community` уже получил первый импорт public baseline;
- следующий шаг — начать physical split, не оставляя текущий monorepo source of truth для всех трех редакций.
- baseline-import в `crank-community` уже откачен и не считается финальным public state;
- следующий шаг — сделать whitelist-based Community import и только после этого продолжать physical split, не оставляя текущий monorepo source of truth для всех трех редакций.
## 6. Техническая стратегия разделения
+4 -1
View File
@@ -95,10 +95,13 @@ Community release должен поставлять:
нельзя считать physical packaging split завершенным.
Для первичного импорта Community baseline из текущего monorepo используется:
Для технического baseline-export внутри private split rehearsal используется:
- `scripts/export-community.sh`
Этот helper не считается финальным public export path.
Финальный импорт в `crank-community` должен выполняться только после приведения кода к whitelist из `docs/community-source-whitelist.md`.
## 7. Минимальный operator checklist
Перед публикацией Community release нужно подтвердить:
+157
View File
@@ -0,0 +1,157 @@
# Community source whitelist
## 1. Назначение документа
Этот документ фиксирует, что именно допустимо в публичном репозитории `crank-community`, а что должно оставаться за его пределами.
Документ нужен по двум причинам:
- исключить повторный baseline-import без фильтрации;
- перевести split в режим explicit whitelist, а не последующего удаления лишнего.
## 2. Текущий статус
Состояние на текущий момент:
- `crank-community` уже создан;
- bootstrap commit в нем сохранен;
- baseline-import был выполнен ошибочно и уже удален из истории force-push;
- текущий `main` в `crank-community` снова указывает на bootstrap-only состояние.
Это означает, что финальный public import еще не выполнен.
## 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 и не включать premium crates;
- `TASKS.md` после split должен описывать backlog уже для `crank-community`, а не для старого transitional monorepo.
### 3.2. Backend и core crates
Разрешены:
- `apps/admin-api`
- `apps/mcp-server`
- `crates/crank-core`
- `crates/crank-schema`
- `crates/crank-mapping`
- `crates/crank-proto`
- `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`.
### 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
Также не должны оставаться public artifacts, которые реально включают premium-only flows как рабочий Community surface:
- `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. Блокеры для чистого public import
Сейчас чистый whitelist export еще нельзя считать готовым, потому что в текущем коде есть смешанные зависимости.
Основные блокеры:
1. Root workspace все еще содержит premium adapter crates.
2. `admin-api` и `mcp-server` test/dev wiring все еще используют premium crates.
3. UI build все еще включает premium wizard modules и premium step templates.
4. `workspace-setup`, `settings`, `catalog`, `usage`, `agents` и `i18n` все еще содержат premium protocol surface.
5. `examples/` и часть docs все еще содержат premium protocol materials.
## 6. Порядок очистки перед public import
Чистый перенос в `crank-community` должен идти только так:
1. Переписать Community workspace так, чтобы он не включал premium crates.
2. Удалить premium protocol dependencies из Community backend wiring.
3. Сделать отдельный Community UI surface без premium wizard/templates/modules.
4. Удалить premium examples и demo fixtures из Community export.
5. Перепроверить docs и release artifacts.
6. Только после этого делать новый force-push чистой истории в `crank-community`.
## 7. Правило на будущее
Для `crank-community` допустим только whitelist-first подход:
- сначала фиксируется разрешенный состав;
- потом код приводится к нему;
- и только потом выполняется push.
Подход “сначала импортировать baseline, потом удалять лишнее” запрещен.
+3 -2
View File
@@ -151,9 +151,10 @@
- `crank-enterprise` уже создан;
- `crank-cloud` уже создан;
- bootstrap templates уже перенесены в новые repositories;
- `crank-community` уже получил первый импорт public baseline;
- baseline-import в `crank-community` уже откачен и не считается финальным public state;
- следующий шаг уже не организационный, а технический:
- очистить `crank-community` до финального public Community source of truth;
- привести код к whitelist из `docs/community-source-whitelist.md`;
- затем выполнить чистый whitelist-based import в `crank-community`;
- затем продолжить вынос `enterprise/cloud` delta.
Bootstrap templates для этого шага уже должны быть подготовлены заранее в текущем репозитории:
+2 -2
View File
@@ -211,7 +211,7 @@ Private repository.
- `crank-enterprise` уже создан;
- `crank-cloud` уже создан;
- bootstrap templates уже перенесены в целевые repositories;
- `crank-community` уже получил первый импорт public baseline из текущего monorepo;
- baseline-import в `crank-community` уже был откачен из истории и не считается финальным public source state;
- management gate закрыт, следующий шаг — начать physical split.
Пока эти четыре пункта не выполнены, physical split не начинается.
@@ -227,7 +227,7 @@ Private repository.
Следующий управленческий шаг после завершения текущего boundary-трека:
- начать physical split с `crank-community`
- довести `crank-community` от baseline-import до финального public source of truth
- сделать whitelist-based import для `crank-community` и только его считать финальным public source of truth
- создать `crank-enterprise`
- создать `crank-cloud`
+5 -1
View File
@@ -41,7 +41,11 @@ Usage:
## export-community.sh
Helper that replaces the working tree of the extracted `crank-community`
repository with the tracked Community baseline from this monorepo.
repository with the tracked monorepo baseline for private split rehearsal.
It is not the final public export mechanism.
Final `crank-community` import must follow
`docs/community-source-whitelist.md`.
Usage: