diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md new file mode 100644 index 0000000..a8043bd --- /dev/null +++ b/.planning/PROJECT.md @@ -0,0 +1,70 @@ +# Lambda Lab 3.0 — Surfaces + +## What This Is + +Telegram и Matrix боты для взаимодействия пользователя с AI-агентом Lambda. Каждый бот — тонкий адаптер поверх общего ядра (`core/`), изолирующего бизнес-логику от транспорта. Платформа подключается через `sdk/interface.py` Protocol; сейчас используется `MockPlatformClient`. + +## Core Value + +Пользователь может вести диалог с Lambda-агентом через любой из поддерживаемых мессенджеров без изменения ядра системы. + +## Requirements + +### Validated + +- ✓ core/ — унифицированный протокол событий, EventDispatcher, StateStore, ChatManager, AuthManager, SettingsManager — existing +- ✓ adapter/telegram/ — forum-first адаптер (Threaded Mode), `/start`, `/new`, `/archive`, `/rename`, `/settings`, стриминг ответов — existing, QA passed +- ✓ adapter/matrix/ — DM-first адаптер, invite flow, `!new`, `!skills`, `!soul`, `!safety`, room-per-chat — existing +- ✓ sdk/mock.py — MockPlatformClient: `stream_message`, `get_or_create_user`, `get_settings`, `update_settings` — existing + +### Active + +- [ ] Matrix QA — ручное тестирование Matrix адаптера, фиксация багов +- [ ] SDK integration — заменить MockPlatformClient реальным Lambda SDK (когда платформа готова) +- [ ] Production hardening — конфиг для деплоя, логирование, мониторинг + +### Out of Scope + +- E2EE для Matrix (python-olm не собирается на macOS/ARM) — инфраструктурная задача, отдельный трек +- Supergroup forum mode для Telegram — заменён Threaded Mode как основным режимом +- Telegram DM-first режим — заменён forum-first (Threaded Mode) + +## Context + +- Python 3.11+, aiogram 3.4+, matrix-nio 0.21+, SQLite, pytest-asyncio +- Threaded Mode — Bot API 9.3, Mac клиент имеет известные баги (новые топики не сразу видны в сайдбаре) +- Lambda platform SDK ещё не готов, всё работает через MockPlatformClient +- Архитектура: Hexagonal / Ports-and-Adapters; `core/` не зависит от транспорта + +## Constraints + +- **Tech stack**: aiogram 3.x для Telegram, matrix-nio для Matrix — не менять без обсуждения +- **Platform**: SDK подключается только через `sdk/interface.py` Protocol — core/ и adapters не трогаются при смене реализации +- **Telegram**: Threaded Mode — единственный поддерживаемый режим; `closeForumTopic`/`deleteForumTopic` не работают в personal chat forums +- **E2EE**: python-olm не собирается на текущей среде — Matrix работает только без шифрования + +## Key Decisions + +| Decision | Rationale | Outcome | +|----------|-----------|---------| +| Forum-first (Threaded Mode) для Telegram | Bot API 9.3 позволяет личный чат как форум — чище, без суперпруппы | ✓ Good | +| (user_id, thread_id) как PK в chats | Изоляция контекстов по топику | ✓ Good | +| MockPlatformClient через sdk/interface.py | Не ждать SDK, разрабатывать независимо | ✓ Good | +| DM-first для Matrix (не Space-first) | Space lifecycle слишком сложен для первого этапа | ✓ Good | +| Отказ от E2EE в Matrix | python-olm не собирается на macOS/ARM | — Pending | + +## Evolution + +**After each phase transition:** +1. Requirements invalidated? → Move to Out of Scope with reason +2. Requirements validated? → Move to Validated with phase reference +3. New requirements emerged? → Add to Active +4. Decisions to log? → Add to Key Decisions + +**After each milestone:** +1. Full review of all sections +2. Core Value check — still the right priority? +3. Update Context with current state + +--- +*Last updated: 2026-04-02 after initialization* diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md new file mode 100644 index 0000000..f90a331 --- /dev/null +++ b/.planning/ROADMAP.md @@ -0,0 +1,43 @@ +# Roadmap — v1.0 + +## Milestone: v1.0 — Production-ready surfaces + +### Phase 1: Matrix QA & Polish + +**Goal:** Проверить Matrix адаптер в ручном режиме, зафиксировать и устранить все найденные баги — до уровня "приемлемо работает" как у Telegram. + +**Depends on:** Telegram QA complete ✓ + +**Deliverables:** +- Ручной QA Matrix бота (invite flow, !new, !skills, !soul, !safety, room-per-chat) +- Все критические баги исправлены +- 96+ тестов зелёные + +--- + +### Phase 2: SDK Integration + +**Goal:** Заменить MockPlatformClient реальным Lambda SDK — бот начинает работать с настоящим AI-агентом. + +**Depends on:** Phase 1, Lambda platform SDK готов + +**Deliverables:** +- `sdk/real.py` — реализация PlatformClient через реальный SDK +- `bot.py` для обоих адаптеров переключается на реальный клиент через env var +- `stream_message` работает с реальным стримингом +- Интеграционные тесты с реальным SDK (или staging) + +--- + +### Phase 3: Production Hardening + +**Goal:** Подготовить боты к реальному деплою — конфиг, логирование, мониторинг, обработка ошибок. + +**Depends on:** Phase 2 + +**Deliverables:** +- Docker / systemd конфиг для деплоя +- Структурированное логирование в production формате +- Health-check endpoint (если нужен) +- Rate limiting и защита от спама +- Graceful shutdown diff --git a/.planning/STATE.md b/.planning/STATE.md new file mode 100644 index 0000000..d22fb12 --- /dev/null +++ b/.planning/STATE.md @@ -0,0 +1,20 @@ +# State + +## Project Reference + +See: .planning/PROJECT.md (updated 2026-04-02) + +**Core value:** Пользователь ведёт диалог с Lambda через любой мессенджер без изменения ядра +**Current focus:** Phase 1 — Matrix QA & Polish + +## Current Phase + +**Phase 1** of 3: Matrix QA & Polish + +## Decisions + +- Продолжаем с Threaded Mode несмотря на баги Mac клиента (2026-04-02) + +## Blockers + +- Lambda platform SDK не готов — Phase 2 заблокирована до готовности платформы diff --git a/.planning/config.json b/.planning/config.json new file mode 100644 index 0000000..b1c95a9 --- /dev/null +++ b/.planning/config.json @@ -0,0 +1,36 @@ +{ + "model_profile": "balanced", + "commit_docs": true, + "parallelization": true, + "search_gitignored": false, + "brave_search": false, + "firecrawl": false, + "exa_search": false, + "git": { + "branching_strategy": "none", + "phase_branch_template": "gsd/phase-{phase}-{slug}", + "milestone_branch_template": "gsd/{milestone}-{slug}", + "quick_branch_template": null + }, + "workflow": { + "research": true, + "plan_check": true, + "verifier": true, + "nyquist_validation": true, + "auto_advance": true, + "node_repair": true, + "node_repair_budget": 2, + "ui_phase": true, + "ui_safety_gate": true, + "text_mode": false, + "research_before_questions": false, + "discuss_mode": "discuss", + "skip_discuss": false + }, + "hooks": { + "context_warnings": true + }, + "agent_skills": {}, + "mode": "yolo", + "granularity": "coarse" +} \ No newline at end of file