# 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.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
  - backward-compatible alias `CommunityMachineCredentialVerifier` сохранен, поведение Community не изменено
