diff --git a/TASKS.md b/TASKS.md index 499666c..7bde379 100644 --- a/TASKS.md +++ b/TASKS.md @@ -39,6 +39,15 @@ Verification: Progress: - done: + - `crank-community` now contains the first imported public baseline from the current monorepo + - bootstrap templates have been pushed into: + - `crank-community` + - `crank-enterprise` + - `crank-cloud` + - all `3` target repositories now exist: + - `crank-community` + - `crank-enterprise` + - `crank-cloud` - public target repository `crank-community` now exists and can receive bootstrap templates once the remaining private repositories are created - gate for creating `3` target repositories is already documented before any physical commercial split - canonical Community deployment manifest and env template now live under `deploy/community/*`, and public deploy uses that manifest instead of the root compose file @@ -49,10 +58,8 @@ 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: - - next management gate is to create the remaining private target repositories: - - `crank-enterprise` - - `crank-cloud` - - after all `3` repositories exist, move the prepared bootstrap templates into their roots before physical split starts + - trim `crank-community` from bootstrap baseline to the final public Community source of truth + - 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 9c96123..344004e 100644 --- a/docs/commercial-boundaries.md +++ b/docs/commercial-boundaries.md @@ -79,7 +79,10 @@ - создание `crank-community`, `crank-enterprise` и `crank-cloud` должно быть отдельным осознанным шагом; - до этого момента в текущем репозитории нужно завершить capability model, extension seams и public contracts; - физическое вынесение private code нельзя начинать раньше, чем эти три целевых repositories созданы и для них определены delivery boundaries. -- на текущий момент public repository `crank-community` уже создан; следующий обязательный внешний шаг — создание private repositories `crank-enterprise` и `crank-cloud`. +- все три целевых repositories уже созданы; +- bootstrap templates уже перенесены в целевые repositories; +- `crank-community` уже получил первый импорт public baseline; +- следующий шаг — начать physical split, не оставляя текущий monorepo source of truth для всех трех редакций. ## 6. Техническая стратегия разделения diff --git a/docs/community-release-checklist.md b/docs/community-release-checklist.md index 4627eb9..d459f84 100644 --- a/docs/community-release-checklist.md +++ b/docs/community-release-checklist.md @@ -95,6 +95,10 @@ Community release должен поставлять: нельзя считать physical packaging split завершенным. +Для первичного импорта Community baseline из текущего monorepo используется: + +- `scripts/export-community.sh` + ## 7. Минимальный operator checklist Перед публикацией Community release нужно подтвердить: diff --git a/docs/implementation-plan.md b/docs/implementation-plan.md index 4bb3909..ff44148 100644 --- a/docs/implementation-plan.md +++ b/docs/implementation-plan.md @@ -148,9 +148,13 @@ Текущий статус: - `crank-community` уже создан; -- до начала physical split остаются private repositories: - - `crank-enterprise` - - `crank-cloud` +- `crank-enterprise` уже создан; +- `crank-cloud` уже создан; +- bootstrap templates уже перенесены в новые repositories; +- `crank-community` уже получил первый импорт public baseline; +- следующий шаг уже не организационный, а технический: + - очистить `crank-community` до финального public Community source of truth; + - затем продолжить вынос `enterprise/cloud` delta. Bootstrap templates для этого шага уже должны быть подготовлены заранее в текущем репозитории: diff --git a/docs/repository-split-map.md b/docs/repository-split-map.md index eba1cc3..72ad62b 100644 --- a/docs/repository-split-map.md +++ b/docs/repository-split-map.md @@ -208,9 +208,11 @@ Private repository. Текущий статус: - `crank-community` уже создан; -- до старта physical split остаются внешние шаги: - - создать `crank-enterprise` - - создать `crank-cloud` +- `crank-enterprise` уже создан; +- `crank-cloud` уже создан; +- bootstrap templates уже перенесены в целевые repositories; +- `crank-community` уже получил первый импорт public baseline из текущего monorepo; +- management gate закрыт, следующий шаг — начать physical split. Пока эти четыре пункта не выполнены, physical split не начинается. @@ -224,8 +226,8 @@ Private repository. Следующий управленческий шаг после завершения текущего boundary-трека: -- создать `crank-enterprise` -- создать `crank-cloud` +- начать physical split с `crank-community` +- довести `crank-community` от baseline-import до финального public source of truth - создать `crank-enterprise` - создать `crank-cloud` diff --git a/scripts/README.md b/scripts/README.md index 54e596a..65843a7 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -37,3 +37,14 @@ Usage: ```bash ./scripts/staging-note-block.sh rmcp.itexp.me abc1234 "codex + operator" partial ``` + +## export-community.sh + +Helper that replaces the working tree of the extracted `crank-community` +repository with the tracked Community baseline from this monorepo. + +Usage: + +```bash +./scripts/export-community.sh /path/to/crank-community-working-tree +``` diff --git a/scripts/export-community.sh b/scripts/export-community.sh new file mode 100755 index 0000000..983e099 --- /dev/null +++ b/scripts/export-community.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: + ./scripts/export-community.sh /path/to/crank-community-working-tree + +The target directory must already be a git working tree for crank-community. +EOF +} + +if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then + usage + exit 0 +fi + +if [[ $# -ne 1 ]]; then + usage >&2 + exit 1 +fi + +repo_root="$(git rev-parse --show-toplevel)" +target_dir="$(cd "$1" && pwd)" + +if [[ ! -d "$target_dir/.git" ]]; then + echo "target is not a git working tree: $target_dir" >&2 + exit 1 +fi + +find "$target_dir" -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} + + +git -C "$repo_root" ls-files -z -- . ':(exclude)templates/repositories/**' \ + | rsync -a --delete --from0 --files-from=- "$repo_root/" "$target_dir/"