diff --git a/TASKS.md b/TASKS.md index 7bde379..8709b8d 100644 --- a/TASKS.md +++ b/TASKS.md @@ -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 diff --git a/docs/commercial-boundaries.md b/docs/commercial-boundaries.md index 344004e..97acf43 100644 --- a/docs/commercial-boundaries.md +++ b/docs/commercial-boundaries.md @@ -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. Техническая стратегия разделения diff --git a/docs/community-release-checklist.md b/docs/community-release-checklist.md index d459f84..e6044b7 100644 --- a/docs/community-release-checklist.md +++ b/docs/community-release-checklist.md @@ -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 нужно подтвердить: diff --git a/docs/community-source-whitelist.md b/docs/community-source-whitelist.md new file mode 100644 index 0000000..961286b --- /dev/null +++ b/docs/community-source-whitelist.md @@ -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, потом удалять лишнее” запрещен. diff --git a/docs/implementation-plan.md b/docs/implementation-plan.md index ff44148..c578ca8 100644 --- a/docs/implementation-plan.md +++ b/docs/implementation-plan.md @@ -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 для этого шага уже должны быть подготовлены заранее в текущем репозитории: diff --git a/docs/repository-split-map.md b/docs/repository-split-map.md index 72ad62b..77c7d0d 100644 --- a/docs/repository-split-map.md +++ b/docs/repository-split-map.md @@ -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` diff --git a/scripts/README.md b/scripts/README.md index 65843a7..a0ef13e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -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: