Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 19 additions & 12 deletions docs/delivery/CURRENT_STATUS.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
# Текущее состояние по репозиториям

Дата среза: 26 сентября 2026 года. Этот файл обновляется после проверенного локального этапа или мержа,
Дата среза: 4 октября 2026 года. Этот файл обновляется после проверенного локального этапа или мержа,
а не после незавершённого эксперимента.

| Репа | Что меняем или добавляем | Ожидаемый результат | Фактический результат | Следующий шаг |
|---|---|---|---|---|
| `.github` | Общие workflows и правила | Одинаковый CI/CD для всех сервисов | Java, Python, Node, docs, security и container workflows работают; чистый Trivy runner исправлен | Подключать правила к каждой новой репе |
| `contracts` | Версионируемые внешние и внутренние API | Один проверяемый источник сетевых DTO | Release `2.5.0` опубликован с checksum и provenance; общий MessageContext устраняет циклические OpenAPI-ссылки | Использовать release во всех новых адаптерах |
| `action-service` | Подтверждение и надёжное выполнение | `AWAITING_APPROVAL → APPROVED → EXECUTING → SUCCEEDED/FAILED` | jOOQ, outbox, Temporal worker и вызов MCP Gateway работают; решение приходит через Channel Gateway | Оставить источником истины для решения и статуса |
| `calendar-mcp` | `create_event` | Идемпотентное создание fake-события | Fake Calendar, OIDC и защита от дублей работают в общем сценарии | Добавить Google provider после trusted execution context и Connection Service |
| `contracts` | Версионируемые внешние и внутренние API | Один проверяемый источник сетевых DTO | Release `3.0.0` опубликован; в контракт добавлены trusted execution context, Connection API и Google Calendar connector | Проверять совместимость следующих составных планов |
| `action-service` | Подтверждение и надёжное выполнение | `AWAITING_APPROVAL → APPROVED → EXECUTING → SUCCEEDED/FAILED` | jOOQ, outbox и Temporal работают; workflow имеет типизированные input/output, Search Attributes и стратегию вызова по `ActionKind` | Оставить источником истины для решения и статуса; подготовить границу составного плана |
| `calendar-mcp` | `create_event` | Один MCP-контракт для fake и Google | Fake и Google providers, trusted owner, OIDC и защита от дублей реализованы | Провести ручной Google sandbox N2N |
| `mcp-gateway` | OIDC, allowlist и MCP client | Безопасный stateless-маршрутизатор | Foundation смержен и проверен вызовом Calendar MCP | Добавлять коннекторы только по контракту |
| `deploy` | Приложения в локальном Compose | Одна команда поднимает вертикальный backend-срез | Реальный Telegram и opt-in Ollama/Qwen профиль работают отдельными командами | Подключить Connection Service и Google stub |
| `test-lab` | Календарный acceptance-тест | Один JWT и один контракт на всём пути | Fake E2E проверяет 19 условий; opt-in AI E2E понимает обычную русскую фразу | Добавить Google OAuth и Calendar API stub |
| `agent-runtime` | Текст в предложение действия | Типизированное предложение встречи без скрытого выполнения | `IntentModel`, demo и OpenAI-compatible provider работают; Qwen 7B проверена локально | Добавить уточнение при неполных данных |
| `connection-service` | Подключения внешних аккаунтов | OAuth и токены не принадлежат каналу или MCP | Google OAuth, зашифрованные подключения, public API и internal token API реализованы | Проверить обновление токена в ручном Google sandbox N2N |
| `deploy` | Приложения в локальном Compose | Одна команда поднимает вертикальный backend-срез | Все девять pin'ов совпадают с актуальными `main`; real Telegram, opt-in Qwen, Connection Service и observability profile подключены | Выполнить локальный reset старой Temporal history и ручной Google N2N |
| `test-lab` | Календарный acceptance-тест | Один JWT и один контракт на всём пути | Fake E2E и opt-in AI E2E работают; 4 октября полный `Agent → Calendar` acceptance прошёл на актуальных pin'ах | Добавить отдельный Google API stub и сценарий обновления токена |
| `agent-runtime` | Текст в предложение действия | Типизированное предложение встречи без скрытого выполнения | `IntentModel`, demo и OpenAI-compatible provider работают; runtime выбирает `google-calendar`, когда он доступен, и fake как fallback | Добавить уточнение при неполных данных и затем составной план |
| `channel-gateway` | Общий вход каналов | Web и Telegram используют один контракт | Сообщение идёт через Conversation; решение канала — через Gateway в Action | Проверить Telegram в общем Compose-сценарии |
| `conversation-service` | Состояние диалога и прикладная оркестрация | Повтор сообщения не создаёт второе действие | PostgreSQL, lease, Agent → Action, карточка и сохранение offset проверены общим E2E | Оставить владельцем диалога при подключении адаптера |
| `widget-sdk` | Карточка подтверждения | Один UI-контракт для разных каналов | Renderer-neutral core создаёт проверенную decision command; Telegram использует тот же сетевой контракт | Добавить готовые helpers для следующих UI-каналов |
| `telegram-adapter` | Telegram как сменный канал | Telegram identity привязывается только после входа через Keycloak | Настоящий бот и webhook проверены; Device Flow завершает привязку, refresh token зашифрован | Проверить естественную фразу и реальный календарь |
| `telegram-adapter` | Telegram как сменный канал | Telegram identity привязывается только после входа через Keycloak | Настоящий бот и webhook проверены; Device Flow завершает привязку, сообщение объясняет автоматическую подстановку кода | Проверить естественную фразу с реальным Google Calendar |

## Что уже проверено

Expand All @@ -33,8 +34,11 @@
```

Проверка запускает реальные контейнеры отдельных репозиториев по закреплённым commit SHA. Последний
GitHub acceptance для `deploy` прошёл 25 сентября 2026 года после явного checkout Conversation Service.
Telegram Adapter отдельно проверен unit-, contract- и PostgreSQL integration-тестами и production build.
GitHub acceptance для `deploy` прошёл 4 октября 2026 года. Он использовал актуальные `main` всех девяти
сервисов и Test Lab. Автономный CI намеренно остаётся на fake-провайдере и не требует внешнего аккаунта.

Отдельно реализованы Google OAuth, выдача короткоживущего access token и Google provider в Calendar MCP.
Их общий ручной sandbox N2N после обновления Temporal history ещё должен быть повторно проверен.

## Текущий порядок

Expand Down Expand Up @@ -62,8 +66,11 @@ Telegram Adapter отдельно проверен unit-, contract- и PostgreSQ
-> [готово] настоящий Telegram bot, webhook и Device Flow
-> [готово] естественный язык через OpenAI-compatible provider и локальную Qwen
-> [решено] Google OAuth принадлежит Connection Service, а не каналу или MCP
-> [следом] trusted execution context и каркас Connection Service
-> [затем] Google Calendar provider и OAuth stub
-> [готово] trusted execution context и Connection Service
-> [готово] Google Calendar provider и выбор provider в Agent Runtime
-> [готово] типизированный Action Workflow и понятные поля в Temporal UI
-> [следом] ручной Telegram → Google Calendar sandbox N2N
-> [затем] RFC составного плана: несколько последовательных действий из одного сообщения
-> [после real N2N] trace в Tempo и связанные логи в Loki/Grafana
```

Expand Down
23 changes: 21 additions & 2 deletions docs/delivery/MVP_ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
Правила первого сценария подтверждены. Начинаем с `fake-calendar`; обязательны название, начало, конец
и часовой пояс; создание всегда требует явного подтверждения. Описание и участники необязательны.
Fake-сценарий и настоящий Telegram уже доказали транспортный путь. Естественная русская фраза проверена
через локальную Qwen с typed structured output. Следующий продуктовый этап — Connection Service и
настоящий Google Calendar. Speech-to-text остаётся следующим адаптером того же текстового сценария.
через локальную Qwen с typed structured output. Connection Service, Google OAuth и Google Calendar
provider реализованы. Следующий проверяемый рубеж — повторный ручной sandbox N2N на актуальной Temporal
history. После него проектируется составной план нескольких действий. Speech-to-text остаётся следующим
адаптером того же текстового сценария.

Переводы денег не входят в MVP. До отдельного threat model они доступны только как будущие
`read-only` или `simulation` сценарии.
Expand Down Expand Up @@ -68,6 +70,8 @@ Fake-сценарий и настоящий Telegram уже доказали т

### 1. Естественный язык вместо технического формата

Состояние: основной полный запрос работает; уточняющий диалог при неполных данных остаётся задачей.

- принять фразы вроде «Поставь завтра в 19:00 созвон с Колей на полчаса»;
- учитывать часовой пояс пользователя, относительные даты и длительность;
- задавать короткий уточняющий вопрос при неоднозначности или нехватке данных;
Expand All @@ -80,6 +84,9 @@ Fake-сценарий и настоящий Telegram уже доказали т

### 2. Настоящий календарь

Состояние: код и контракты готовы; автономный fake acceptance зелёный; ручной Google sandbox N2N нужно
повторить на актуальных версиях.

- сохранить единый `calendar-mcp`, а провайдеры выбирать через стратегию `fake`/`google`;
- добавить Google OAuth connection flow и хранить refresh token только в зашифрованном виде;
- использовать тот же `calendar.create_event`, `requestKey` и защиту от дублей, что и у fake-провайдера;
Expand All @@ -93,6 +100,18 @@ Connection Service, а Calendar MCP получает только коротко
Результат: подтверждённая команда из Telegram создаёт реальное событие Google Calendar, а тесты не требуют
внешнего аккаунта.

### 2.1 Составной план действий

- принять одно сообщение с несколькими намерениями;
- вернуть из Agent Runtime упорядоченный типизированный план;
- хранить отдельные input, output и статус каждого шага;
- передавать output предыдущего шага только по явному mapping-контракту;
- определить остановку, повтор и компенсацию до добавления второго реального коннектора;
- проверить первый сценарий `Google Calendar → Notion` сначала на fake-провайдерах.

Результат: одно подтверждение запускает понятную последовательность, а Temporal UI показывает каждый шаг
и его параметры без чтения внутренних логов.

### 3. Сквозная наблюдаемость после real N2N

- передавать W3C `traceparent` через Telegram Adapter, Gateway, Conversation, Agent, Action, Temporal и MCP;
Expand Down
28 changes: 22 additions & 6 deletions docs/delivery/WORK_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,9 @@

### 5.1 Платформа разработки

Состояние: локальный Compose и первый сквозной smoke готовы. Preview-окружения, полная наблюдаемость и
проверки отказов остаются следующими инженерными пакетами.
Состояние: локальный Compose, общий Helm chart, preview-каркас и сквозной smoke готовы. Все версии
сервисов закреплены полными Git SHA. Полная наблюдаемость и проверки отказов остаются следующими
инженерными пакетами.

- локальные зависимости через Compose без секретов в Git;
- общий Helm chart и GitOps-каталог окружений;
Expand All @@ -88,12 +89,27 @@

### 6. Первый продуктовый срез

Состояние: backend-срез, общий текстовый вход и renderer-neutral Widget SDK готовы. Conversation
Service, адаптер и реальный календарь ещё не реализованы.
Состояние: backend-срез, Conversation Service, Telegram Adapter, renderer-neutral Widget SDK,
Connection Service и Google Calendar provider реализованы. Автоматический acceptance на fake-провайдере
проходит на актуальных версиях всех сервисов. Ручной Google sandbox N2N требуется повторить после
обновления локальной Temporal history.

Выбран сценарий создания события календаря с явным подтверждением. Обязательны название, начало,
конец и часовой пояс. Сначала пишется сквозной acceptance-тест с `fake-calendar`, и только затем
добавляется настоящая интеграция.
конец и часовой пояс. `fake-calendar` остаётся обязательным автономным CI-провайдером. Google использует
тот же контракт и выбирается только при доступном подключении пользователя.

### 7. Следующий продуктовый срез

Состояние: требуется RFC до изменения контрактов.

- одно пользовательское сообщение может содержать несколько действий;
- Agent Runtime возвращает типизированный упорядоченный план, а не выполняет его;
- каждое действие сохраняет собственные input, output, статус и идемпотентный ключ;
- Temporal показывает понятное имя плана и результаты каждого шага;
- политика остановки, повтора и компенсации согласуется отдельно;
- первый пример: событие Google Calendar, затем запись в Notion.

До RFC не создаётся Notion MCP и не расширяется Action API случайными полями.

## Что смотреть на ревью

Expand Down
Loading
Loading