# Backend Gap Plan

Примечание:

- пункты этого плана, относящиеся к `PlatformApiKey` как основной машинной модели доступа, рассматриваются как переходные;
- актуальная целевая схема машинной аутентификации описана в `docs/agent-auth-model.md`.

## 1. Назначение документа

Этот документ превращает целевой Alpine UI и `docs/as-is-to-be.md` в конкретный backend-план.

Его задача:

- зафиксировать, чего именно не хватает в backend;
- разделить доработки на новые сущности, новые API и изменения существующего ядра;
- определить порядок реализации без расползания scope.

## 2. Принципы

- текущее ядро `Operation + adapters + runtime` сохраняется;
- новая функциональность наращивается слоями сверху;
- сначала вводятся tenant boundary и agent publishing;
- потом access layer и observability;
- UI развивается в `apps/ui` после фиксации backend-контрактов.

## 3. Что сохраняем без переписывания

- `Operation` как базовый интеграционный контракт;
- versioning операций;
- adapters `REST / GraphQL / unary gRPC`;
- schema engine;
- mapping engine;
- YAML import/export для operations;
- test-run flow;
- `Streamable HTTP` transport.

## 4. Что меняется принципиально

### 4.1. Global model -> workspace-scoped model

Нужно добавить `workspace_id` в:

- `operations`
- `auth_profiles`
- published runtime views
- будущие logs и usage

### 4.2. Operation publishing -> agent publishing

Нужно перестроить MCP publishing:

- было: published operation = MCP tool
- будет: published operation = reusable building block
- MCP endpoint публикует published bindings внутри конкретного agent

### 4.3. Upstream auth -> platform access separation

Нужно разделить:

- `AuthProfile` для внешних API;
- `PlatformApiKey` для доступа к Crank.

### 4.4. Application logs -> product observability

Нужно ввести:

- `InvocationLog`
- `UsageRollup`

## 5. Page-by-page backend plan

## 5.1. Operations page

### Уже есть

- `GET /operations`
- `POST /operations`
- `GET /operations/{id}`
- `POST /operations/{id}/versions`
- `POST /operations/{id}/publish`
- `POST /operations/{id}/test-runs`
- import/export

### Не хватает

- `PATCH /operations/{id}`
- `DELETE /operations/{id}`
- `POST /operations/{id}/archive`
- workspace scoping
- summary metrics для карточек
- фильтр/lookup по agent bindings

### Backend changes

- добавить update/delete/archive use case;
- добавить `workspace_id` в operation queries;
- добавить lightweight stats response для operations list.

## 5.2. Wizard page

### Уже есть

- create operation
- create version
- samples
- draft generation
- test run
- gRPC descriptor flow

### Не хватает

- единый update contract для edit mode;
- стабильный draft-save contract;
- workspace-scoped endpoints;
- final DTO shape под новый Alpine wizard.

### Backend changes

- нормализовать create/update/version payload;
- добавить `PATCH /operations/{id}`;
- оставить `POST /versions` как explicit publishable snapshot flow.

## 5.3. Agents page

### Уже есть

- ничего

### Не хватает

- `Agent`
- `AgentVersion`
- `AgentOperationBinding`
- `published_agents`
- MCP metadata per agent

### Backend changes

- CRUD agents;
- publish agent;
- bind/unbind operations;
- list agent operations;
- agent-scoped tool catalog in MCP.

## 5.4. API Keys page

### Уже есть

- upstream `auth_profiles`, но это другая сущность

### Не хватает

- `PlatformApiKey`
- scopes model
- one-time reveal on create
- revoke/delete

### Backend changes

- новая таблица и новый service;
- hash secret вместо хранения в открытом виде;
- endpoint create/list/revoke/delete;
- timestamp `last_used_at`.

## 5.5. Logs page

### Уже есть

- только application logs

### Не хватает

- список invocation logs
- log detail
- фильтры
- live refresh strategy

### Backend changes

- логирование каждого tool call;
- storage для invocation logs;
- list/detail API;
- query params: level, operation, agent, range, search.

## 5.6. Usage page

### Уже есть

- ничего как продуктовый API

### Не хватает

- aggregates
- per-agent breakdown
- per-operation breakdown
- CSV export

### Backend changes

- `UsageRollup`;
- background aggregation или on-write update strategy;
- reporting endpoints;
- CSV export endpoint.

## 5.7. Workspace and Settings

### Уже есть

- ничего

### Не хватает

- `Workspace`
- `User`
- `Membership`
- `Invitation`
- settings model

### Backend changes

- workspace CRUD;
- members list;
- invitations;
- current workspace settings read/update.

## 5.8. Login

### Уже есть

- только внешний `Basic Auth` на `nginx`

### Не хватает

- app-level auth model

### Решение на ближайший этап

- пока не строить full auth subsystem;
- сначала сделать workspace/access model и platform API keys;
- login page оставить как отдельный вопрос после backend foundation.

## 6. Новые доменные сущности

Нужно добавить:

- `Workspace`
- `User`
- `Membership`
- `Invitation`
- `Agent`
- `AgentVersion`
- `AgentOperationBinding`
- `PlatformApiKey`
- `InvocationLog`
- `UsageRollup`

## 7. Новые таблицы

Нужно добавить:

- `workspaces`
- `users`
- `memberships`
- `invitation_tokens`
- `agents`
- `agent_versions`
- `agent_operation_bindings`
- `published_agents`
- `platform_api_keys`
- `invocation_logs`
- `usage_rollups`

Нужно изменить:

- `operations`
- `auth_profiles`
- `published_operations`

## 8. Новые admin-api группы

Нужно добавить группы:

- `workspaces`
- `memberships`
- `invitations`
- `agents`
- `platform-api-keys`
- `logs`
- `usage`

Нужно расширить:

- `operations`
- `auth-profiles`

## 9. MCP-server изменения

Нужно изменить:

- routing model: `/mcp/v1/{workspace_slug}/{agent_slug}`
- runtime catalog source: `published_agents`, а не глобальные operations
- tool resolution через binding
- labels для logs и usage: `workspace`, `agent`, `operation`

## 10. Порядок реализации

### Wave 1. Foundation

- `Workspace`
- workspace scope в operations/auth profiles
- `PATCH/DELETE/ARCHIVE` для operations
- update contracts для wizard

### Wave 2. Agent publishing

- `Agent`
- `AgentVersion`
- bindings
- published agents
- MCP server v2

### Wave 3. Platform access

- `PlatformApiKey`
- memberships
- invitations
- workspace settings

### Wave 4. Observability

- invocation logs
- usage rollups
- logs API
- usage API

### Wave 5. UI integration

- заменить mock data реальными API
- развивать и полировать Alpine UI в `apps/ui`
- пройти e2e сценарии

## 11. Что делаем следующим шагом

Следующий практический шаг:

1. зафиксировать DTO и response shapes для `Operations` и `Wizard`;
2. затем спроектировать `Workspace` и `Agent` storage/API;
3. после этого начинать backend implementation wave 1.
