15 KiB
15 KiB
TASKS
Current
feat/community-finalization
Status: done
Goal:
- довести
crank-communityдо окончательного самостоятельного состояния как открытойREST-onlyредакции; - убрать transitional split-логику, legacy premium ballast и скрытые assumptions из эпохи общего репозитория.
Main code areas:
TASKS.mddocs/community-source-whitelist.mddocs/implementation-plan.mddocs/repository-split-map.mddocs/community-release-checklist.mddocs/commercial-boundaries.md- workspace manifests
- Community backend/UI tests and fixtures
- Community UI copy and localization
Implementation slices:
- привести документацию и backlog к реальному состоянию
crank-community; - убрать premium зависимости из Community workspace manifests;
- очистить Community test boundary и убрать зависимость от
test = falseкак способа скрывать legacy tests; - удалить premium backend ballast, который больше не относится к Community;
- дочистить UI, локализацию и e2e fixtures до честного Community surface;
- пройти финальную верификацию Community release path.
DoD:
crank-communityописывает себя как самостоятельный public repository, а не как промежуточный этап split;- Community manifests и workspace dependencies соответствуют
REST-onlyproduct 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 fmtjust checkjust 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
RESTflow - transitional docs and backlog now describe
crank-communityas 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-onlyworkspace green undercargo check - Community backend crates no longer rely on
test = false;just testnow 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-onlydemo 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-depsjust fmtjust checkjust testapps/uibuild- 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.ymldeploy/community/*docs/community-release-checklist.mddocs/deploy-and-staging-smoke.mddocs/authenticated-staging-pass.mddocs/public-smoke-targets.mddocs/staging-regression-notes.mdscripts/staging-smoke.shscripts/authenticated-staging-smoke.shscripts/staging-note-block.sh
Implementation slices:
- проверить соответствие CI Community manifests;
- зафиксировать Community-only smoke baseline;
- обновить release checklist после финальной cleanup-фазы.
DoD:
- Community release path не зависит от private repositories;
- checklist соответствует реальному Community deploy surface;
- пост-деплойная проверка повторяема.
Verification:
python3YAML parse for.github/workflows/ci.ymldocker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example config -qdocker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example --profile cache config -qjust checkapps/uibuild- Community-targeted Playwright smoke including
staging-authenticated.spec.js
Progress:
- done:
UI ChecksinCInow run realnpm ciandnpm run buildbefore the container image build- Community release docs and helper scripts now describe only the real
REST-onlydeploy 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-Meteopath - obsolete split-helper artifact
scripts/export-community.shand 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-coreapps/mcp-serverdocs/modular_decomposition.xml
Implementation slices:
- выполнять общие изменения сначала в
crank-community; - брать архитектурные slices из
modular_decomposition.xml, а не из legacy cleanup backlog; - после стабилизации базовой границы подтягивать ее в 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::extmodule skeleton - Phase 0 / task
0.2:MachineCredentialVerifierи связанные типы вынесены изapps/mcp-serverв public seamcrank_core::ext::auth - Phase 0 / task
0.3: введеныMachineTokenIssuer,NoMachineTokenIssuer,TokenIssuerActorиTokenIssuerErrorв public seamcrank_core::ext::auth - Phase 0 / task
0.4: введеныIdentityProvider,IdentityProviderKind,IdentityError,LoginPayload,LoginOutcomeи public forwarder typeAuthenticatedIdentityвcrank_core::ext::auth - Phase 0 / task
0.5: введеныPolicyEngine,SessionActor,PolicyAction,PolicyScope,PolicyDecisionи defaultOwnerOnlyPolicyEngineв public seamcrank_core::ext::access - Phase 0 / task
0.6: введеныAuditSink,NoopAuditSink,AuditEventIdи базовые audit-типы в public seamcrank_core::ext::audit - Phase 0 / task
0.7: введеныCapabilityProfileиCommunityCapabilityProfile, аadmin-apicapability 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реализует новыйProtocolAdaptercontract, а seam дополнен явнымTargetи window parameters для реального adapter wiring - Phase 0 / task
0.10:RuntimeExecutorпереведен с hardcoded adapter fields наAdapterRegistry,crank-runtimeбольше не держит protocol feature flags, а общийPreparedRequestseam дополнен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 переведен на public seams —capabilitiesroute идет черезcapability_profile, write handlers вroutes/access.rsпроверяютpolicy_engineи пишут generic audit events черезaudit_sink, аmachine_authroute используетtoken_issuerseam и сохраняет текущий Community403contract - Phase 0 / task
0.16: phase verification gate пройден —just fmt,just check,just test, таргетные Community machine-auth tests и MCP initialize smoke (requires_initialized_notification_before_tool_methods) зеленые; runtime regression test обновлен под новыйRuntimeError::ProtocolAdaptercontract - Phase 1 / tasks
1.1–1.3: strict-REST Community cleanup уже был закрыт ранее — non-REST adapters иcrank-protoудалены из workspace, descriptor/premium UI surface убран из Community build, wizard и i18n приведены к REST-only baseline - Phase 1 / task
1.4: создан cratecrank-community-auth; в него вынесены password hashing/session cookie primitives иPasswordIdentityProvider,admin-apiпереключен на этот crate, аlogin()теперь реально делегирует credential check черезIdentityProviderseam - Phase 1 / task
1.5: создан cratecrank-community-mcp; в него вынесеныbuild_app,catalog,jsonrpc,sessionиauthизapps/mcp-server, аapps/mcp-server/src/main.rsстал thin launcher с env parsing и DI wiring - Phase 1 / task
1.6: Community test surface уже приведен к честному baseline —test = falseудален ранее, premium-only tests вычищены,just verifyпроходит на текущем составе workspace - Phase 1 / task
1.7: workspace version bumped to0.2.0; release gate пройден (just verify,npm run build,npm run e2e), release commit и tagv0.2.0подготовлены вcrank-community - Phase 2 dependency slice:
IdentityProviderseam widened to coverSSO/TOTPwith defaultNotSupportedForProvidermethods and shared public DTOs for authorize/callback/two-factor flows; workspace version bumped to0.3.0for downstream enterprise consumption - Phase 2 dependency slice:
apps/admin-apinow exposes a reusable lib target (src/lib.rs), so downstream private repos can depend onbuild_app,AppState,AdminServiceBuilder, and auth/state modules without copying the Community admin app - Phase 3 dependency slice: added public tenancy seam in
crank-core—TenantId,TenantResolutionContext,TenantController,TenancyError, andSingleTenantController— socloudcan build hosted tenant routing without bypassing the shared extension model - Phase 3 dependency slice: added public metering seam in
crank-core—MeteringEvent,MeteringSink,SharedMeteringSink, andNoopMeteringSink— socloudcan add hosted usage capture without introducing private-only contracts - Phase 3 dependency slice: added public billing seam in
crank-core—BillingHook,BillingGate,BillingError,SharedBillingHook, andNoopBillingHook— socloudcan layer billing policy without private-only contracts in the base repo - Phase 3 runtime slice:
RuntimeRequestContextnow carries optional metering context (workspace_id,agent_id,source),RuntimeExecutorBuilderaccepts aMeteringSink, andRuntimeExecutoremitsMeteringEventon invocation completion while Community apps keep using the defaultNoopMeteringSink - Phase 3 dependency slice: added
CacheBackendFactoryincrank-runtimewithBuiltinCacheBackendFactory; unlike the original draft, the seam lives in runtime rather than core to avoid acrank-core -> crank-runtimedependency cycle aroundRuntimeCacheStores - Phase 5 / task
5.1: added Community UI overlay foundation —slot-registry.js,overlay-loader.js, optionalCRANK_UI_OVERLAY_DIRcopy path in the UI build, settings slot mounts, and wizard protocol-card slot mounts; Community build stays noop without any private overlay package - backward-compatible alias
CommunityMachineCredentialVerifierсохранен, поведение Community не изменено
- Phase 0 / task
feat/community-release-pipeline
Status: in_progress
Goal:
- закрыть
Phase 6.1и сделать reproducible tag-release flow дляcrank-community.
Main code areas:
.github/workflows/release.ymlapps/admin-api/Dockerfileapps/mcp-server/Dockerfileapps/ui/Dockerfile
Implementation slices:
- build release binaries and UI dist on
push tag v*; - publish Community images to
GHCR; - attach checksums and SBOM to GitHub Release.
DoD:
crank-communityвыпускается из собственного repo без private inputs;- tag push
v*produces GitHub Release artifacts and container images.
Verification:
python3YAML parse for.github/workflows/release.yml