закрыта задача local-run-without-telegram-token
This commit is contained in:
@@ -1,54 +0,0 @@
|
||||
# ✨ Поднимать сервис без токена бота, работая одним входом
|
||||
|
||||
- **Тип:** feature
|
||||
- **Категория:** Очередь — Поднято к долгам входа: живой прогон нужен именно им, а сегодня его нет ни у одной задачи.
|
||||
- **Зачем:** Адаптер Telegram проверяет токен обращением к Telegram и роняет старт, а боевым токеном запускаться запрещено: проверить поведение живым прогоном не может ни одна задача.
|
||||
|
||||
Замечено при попытке проверить вход вживую в задаче `oidc-login` 2026-08-12;
|
||||
подтверждено прогоном: с выдуманным токеном старт кончается отказом создания
|
||||
отправителя раньше, чем поднимается HTTP-сервер.
|
||||
|
||||
Отсюда следствие, которое стоит дороже самого неудобства: **поведенческая
|
||||
верификация живым запуском недоступна проекту вовсе**. Всякая задача, меняющая
|
||||
наблюдаемое поведение, проверяется только тестами, а «поднять и посмотреть»
|
||||
остаётся человеку с боевым конфигом.
|
||||
|
||||
Запрет запускаться боевым токеном снимать не надо: второй процесс с тем же
|
||||
токеном перехватывает обновления у работающего.
|
||||
|
||||
Разбор 2026-08-13 нашёл вторую половину работы, из-за которой запись сменила тип
|
||||
с обслуживания на функцию. Отправитель ответов сегодня существует всегда, и
|
||||
конвейер зовёт его без проверки. Уберите его — и задача, пришедшая из Telegram и
|
||||
лежащая в базе с прошлого запуска, дойдёт до ответа и уронит процесс. Что с ней
|
||||
происходит без бота, надо решить и записать нормой: молчаливая потеря принятой
|
||||
записи запрещена инвариантом.
|
||||
|
||||
## Затрагивает
|
||||
|
||||
- создание отправителя Telegram при старте в `main.go`;
|
||||
- ответ отправителю в конвейере расшифровки: задача из Telegram, дошедшая до
|
||||
ответа при отсутствующем боте;
|
||||
- секция `[telegram]` конфига и её образец;
|
||||
- раздел «Запреты» в `CLAUDE.md` — строка про боевой токен остаётся, но рядом
|
||||
появляется способ поднять сервис без него;
|
||||
- `docs/review.md`, подраздел «Недоступно проверке»: строка про недоступность
|
||||
живого прогона снимается или сужается.
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- Сервис поднимается с пустым токеном бота: HTTP отвечает, воркеры идут, бот не
|
||||
создан. Оракул — запуск с конфигом без токена и запрос `GET /health`: код 200.
|
||||
- Отсутствие бота названо в журнале один раз при старте, а не молчанием. Оракул —
|
||||
тот же запуск: в выводе есть строка о том, что бот не поднят и почему.
|
||||
- Поведение с настоящим токеном не изменилось. Оракул — тест на создание
|
||||
отправителя с непустым токеном: прежний путь сохранён.
|
||||
- Задача из Telegram, дошедшая до ответа при отсутствующем боте, не роняет
|
||||
процесс и не теряется молча. Оракул — тест конвейера с заведённой задачей
|
||||
источника Telegram и без отправителя: процесс жив, задача осталась в
|
||||
достигнутом состоянии, в повтор не ушла и в `failed` не переведена, а
|
||||
недоставка видна записью журнала с идентификатором задачи.
|
||||
|
||||
Правка критерия 2026-08-13, решение владельца на чекпоинте: прежняя редакция
|
||||
требовала повтора либо `failed`, и оба исхода отвергнуты дизайном с ценой —
|
||||
пометка отказа на удавшейся работе врёт панели и метрике, а повтор не помогает,
|
||||
потому что бот от ожидания не появится.
|
||||
Reference in New Issue
Block a user