# TASKS ## Current ### `feat/community-finalization` Status: done Goal: - довести `crank-community` до окончательного самостоятельного состояния как открытой `REST-only` редакции; - убрать transitional split-логику, legacy premium ballast и скрытые assumptions из эпохи общего репозитория. Main code areas: - `TASKS.md` - `docs/community-source-whitelist.md` - `docs/implementation-plan.md` - `docs/repository-split-map.md` - `docs/community-release-checklist.md` - `docs/commercial-boundaries.md` - workspace manifests - Community backend/UI tests and fixtures - Community UI copy and localization Implementation slices: 1. привести документацию и backlog к реальному состоянию `crank-community`; 2. убрать premium зависимости из Community workspace manifests; 3. очистить Community test boundary и убрать зависимость от `test = false` как способа скрывать legacy tests; 4. удалить premium backend ballast, который больше не относится к Community; 5. дочистить UI, локализацию и e2e fixtures до честного Community surface; 6. пройти финальную верификацию Community release path. DoD: - `crank-community` описывает себя как самостоятельный public repository, а не как промежуточный этап split; - Community manifests и workspace dependencies соответствуют `REST-only` product boundary; - Community tests и fixtures проверяют только Community functionality; - UI и docs не содержат рабочих premium flows и misleading copy; - Community release path воспроизводим и проверяем без ссылок на transitional import procedure. Verification: - docs consistency pass; - `cargo metadata --no-deps`; - `just fmt` - `just check` - `just test` - UI build and Community-targeted smoke/e2e pass. Progress: - done: - `deploy/community/*` already acts as the canonical Community delivery contour - Community capability model is already constrained to: - `REST` - static agent key - `security_level = standard` - public wizard HTML surface is already reduced to the Community `REST` flow - transitional docs and backlog now describe `crank-community` as the current source of truth instead of a future split artifact - premium protocol toolchain dependencies have been removed from the Community workspace manifest while keeping the `REST-only` workspace green under `cargo check` - Community backend crates no longer rely on `test = false`; `just test` now runs against a real Community-only test surface on the isolated local test database - premium protocol and streaming ballast has been removed from Community backend test/dev paths, and Community demo expectations now match the actual `REST-only` demo seed - dormant premium UI modules, fixtures, and translation strings have been removed, while the remaining Community wizard and admin pages stay green under local Playwright smoke - final Community verification pass completed: - `cargo metadata --no-deps` - `just fmt` - `just check` - `just test` - `apps/ui` build - Community-targeted Playwright smoke ## Next ### `feat/community-release-hardening` Status: done Goal: - закрепить воспроизводимый Community release path и release checklist без скрытых переходных допущений. Main code areas: - `.github/workflows/ci.yml` - `.github/workflows/deploy.yml` - `deploy/community/*` - `docs/community-release-checklist.md` - `docs/deploy-and-staging-smoke.md` - `docs/authenticated-staging-pass.md` - `docs/public-smoke-targets.md` - `docs/staging-regression-notes.md` - `scripts/staging-smoke.sh` - `scripts/authenticated-staging-smoke.sh` - `scripts/staging-note-block.sh` Implementation slices: 1. проверить соответствие CI Community manifests; 2. зафиксировать Community-only smoke baseline; 3. обновить release checklist после финальной cleanup-фазы. DoD: - Community release path не зависит от private repositories; - checklist соответствует реальному Community deploy surface; - пост-деплойная проверка повторяема. Verification: - `python3` YAML parse for `.github/workflows/ci.yml` - `docker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example config -q` - `docker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example --profile cache config -q` - `just check` - `apps/ui` build - Community-targeted Playwright smoke including `staging-authenticated.spec.js` Progress: - done: - `UI Checks` in `CI` now run real `npm ci` and `npm run build` before the container image build - Community release docs and helper scripts now describe only the real `REST-only` deploy smoke baseline - staging templates and regression notes no longer require `GraphQL`, `gRPC`, `WebSocket`, `SOAP`, or streaming scenarios in Community - Community public smoke targets are reduced to the canonical `REST -> Open-Meteo` path - obsolete split-helper artifact `scripts/export-community.sh` and stale premium smoke payloads have been removed from the public repo ### `feat/common-public-improvements` Status: in_progress Goal: - вносить общие улучшения в публичную базу, которые потом синхронно переносятся в `enterprise` и `cloud`. - начать Wave 1 modularization из `modular_decomposition.xml` без изменения поведения Community runtime. Main code areas: - общий Community runtime/UI/API surface - `crates/crank-core` - `apps/mcp-server` - `/home/github-ops/crank/docs/modular_decomposition.xml` Implementation slices: 1. выполнять общие изменения сначала в `crank-community`; 2. брать архитектурные slices из `modular_decomposition.xml`, а не из legacy cleanup backlog; 3. после стабилизации базовой границы подтягивать ее в private repos по зафиксированной sync model. DoD: - общий функционал не расходится между тремя редакциями без необходимости; - Community остается source base для общей open-core логики. Verification: - `cargo check --workspace` - таргетные compile/test checks для затронутого бинаря или crate Progress: - done: - Phase 0 / task `0.1`: создан `crank-core::ext` module skeleton - Phase 0 / task `0.2`: `MachineCredentialVerifier` и связанные типы вынесены из `apps/mcp-server` в public seam `crank_core::ext::auth` - Phase 0 / task `0.3`: введены `MachineTokenIssuer`, `NoMachineTokenIssuer`, `TokenIssuerActor` и `TokenIssuerError` в public seam `crank_core::ext::auth` - Phase 0 / task `0.4`: введены `IdentityProvider`, `IdentityProviderKind`, `IdentityError`, `LoginPayload`, `LoginOutcome` и public forwarder type `AuthenticatedIdentity` в `crank_core::ext::auth` - Phase 0 / task `0.5`: введены `PolicyEngine`, `SessionActor`, `PolicyAction`, `PolicyScope`, `PolicyDecision` и default `OwnerOnlyPolicyEngine` в public seam `crank_core::ext::access` - Phase 0 / task `0.6`: введены `AuditSink`, `NoopAuditSink`, `AuditEventId` и базовые audit-типы в public seam `crank_core::ext::audit` - Phase 0 / task `0.7`: введены `CapabilityProfile` и `CommunityCapabilityProfile`, а `admin-api` capability payload теперь собирается через public seam вместо локального literal - Phase 0 / task `0.8`: введены `ProtocolAdapter`, `ProtocolAdapterError`, `AdapterRegistry` и базовые transport-типы (`PreparedRequest`, `AdapterResponse`, `WindowExecutionResult`, `RuntimeRequestContext`) в `crank_core::ext::protocol` - Phase 0 / task `0.9`: `crank-adapter-rest::RestAdapter` реализует новый `ProtocolAdapter` contract, а seam дополнен явным `Target` и window parameters для реального adapter wiring - Phase 0 / task `0.10`: `RuntimeExecutor` переведен с hardcoded adapter fields на `AdapterRegistry`, `crank-runtime` больше не держит protocol feature flags, а общий `PreparedRequest` seam дополнен `timeout_ms` для корректного runtime dispatch - Phase 0 / task `0.11`: добавлены `RuntimeExecutorBuilder` и `community_default()`, а default community runtime wiring вынесен из `RuntimeExecutor` в отдельный builder layer - Phase 0 / task `0.12`: `apps/admin-api` и `apps/mcp-server` переведены на `community_default().with_limits(...).with_response_cache(...).build()` вместо прямой сборки runtime через `RuntimeExecutor::with_limits(...)` - Phase 0 / task `0.13`: введены `RegistryExtension`, `ExtensionMigration` и `apply_extension_migrations(...)` в `crank-registry` как отдельный public seam для additive private migrations - Phase 0 / task `0.14`: добавлены `AdminServiceBuilder`, seam slots (`identity_provider`, `policy_engine`, `audit_sink`, `token_issuer`, `capability_profile`) и community defaults для них; `apps/admin-api/src/main.rs` переведен на builder - Phase 0 / task `0.15`: начат route delegation pass — `capabilities` route идет через `capability_profile`, а write handlers в `routes/access.rs` проверяют `policy_engine` и пишут generic audit events через `audit_sink`; `machine_auth` часть остается pending до actor-aware auth wiring - backward-compatible alias `CommunityMachineCredentialVerifier` сохранен, поведение Community не изменено