diff --git a/.continue-here.md b/.continue-here.md new file mode 100644 index 0000000..0066725 --- /dev/null +++ b/.continue-here.md @@ -0,0 +1,73 @@ +# Continue Here — Telegram Forum Redesign +**Paused:** 2026-04-02 +**Branch:** `feat/telegram-forum` + +--- + +## Где мы + +Реализован forum-first Telegram адаптер. Прошли ревью (`@reviewer`). Фиксим замечания ревьюера. + +**Из замечаний сделан только fix #1** — `message.py` placeholder теперь обновляется при `TelegramBadRequest` (не `thread not found`). Остальное НЕ сделано. + +--- + +## Незакрытые замечания ревьюера + +### КРИТИЧНО +- [x] **#1 message.py** — placeholder обновляется при telegram ошибке ✅ (сделано, не закоммичено) +- [ ] **#2 commands.py** — `/archive`, `/rename`, `/new` не имеют `try/except` на Bot API вызовы. SQLite exceptions всплывают как необработанные → бот молчит + +### ВАЖНО +- [ ] **#3 start.py** — `_check_and_prune_stale_topics` не изолирован: любая non-TelegramBadRequest исключение ронит весь `/start`. Нужен `try/except Exception` вокруг всего вызова +- [ ] **#4 commands.py /new** — не перехватывает лимит Telegram 1000 топиков (`TelegramBadRequest` с "topics limit") +- [ ] **#5 topic_events.py** — ревьюер упомянул уведомление при закрытии, но в спеке этого нет — **пропустить** +- [ ] **#6 bot.py** — нет таймаута на platform calls. Добавить `asyncio.wait_for(..., timeout=30)` вокруг `stream_message` в `message.py` + +### РЕКОМЕНДАЦИИ +- [ ] **#7 db.py** — добавить `CREATE INDEX IF NOT EXISTS idx_chats_user_id ON chats(user_id)` в `init_db()` +- [ ] **#8 settings.py** — проверить что не обращается к старому `chat_id` вместо `thread_id` + +--- + +## Незакрытые тесты + +- [ ] `test_message.py` — нет теста: `stream_message()` бросает исключение → placeholder показывает ошибку +- [ ] `test_commands.py` — нет теста: `/new` при `TelegramBadRequest` (лимит топиков) +- [ ] `test_commands.py` — нет теста: `/archive` в General топике (`thread_id=None`) + +--- + +## Незакоммиченные изменения + +- `adapter/telegram/handlers/message.py` — fix #1 (нужно закоммитить вместе с остальными фиксами) + +--- + +## Что делать дальше + +1. Применить все фиксы из списка выше +2. Добавить недостающие тесты +3. `pytest tests/ -v` — все зелёные +4. `git commit -m "fix(tg): reviewer fixes — error handling, timeouts, db index"` +5. Merge `feat/telegram-forum` → `main` + +--- + +## Контекст + +- **Спека:** `docs/superpowers/specs/2026-04-01-telegram-forum-redesign.md` +- **План:** `docs/superpowers/plans/2026-04-01-telegram-forum-redesign.md` +- **Ревью:** было сделано через `@reviewer` агент, результат выше +- **workflow:** хотфиксы делает Claude Code напрямую (< 20 строк). Новые фичи — через `codex:rescue` + +--- + +## Важные решения сессии + +- Forum-first: `(user_id, thread_id)` PK, без супергруппы +- Закрытие топика через UI → автоархив +- Переименование через UI → sync в БД +- FSM только для settings (soul editing), не для маршрутизации +- Стриминг через `sdk.stream_message()` → прогрессивный `edit_text` +- workspace маппинг — ответственность платформы, адаптер передаёт `thread_id` как `context_id` diff --git a/adapter/telegram/handlers/message.py b/adapter/telegram/handlers/message.py index 3693042..22f8770 100644 --- a/adapter/telegram/handlers/message.py +++ b/adapter/telegram/handlers/message.py @@ -68,6 +68,7 @@ async def handle_topic_message(message: Message, dispatcher: EventDispatcher) -> logger.warning("topic_deleted_during_message", thread_id=thread_id) else: logger.error("telegram_error", error=str(e)) + await _safe_edit(placeholder, "Ошибка отправки, попробуй ещё раз") except Exception: logger.exception("platform_error", user_id=user_id, thread_id=thread_id) await _safe_edit(placeholder, "Сервис временно недоступен, попробуй позже")