Files
transcriber/tasks/items/local-run-without-telegram-token.md
T
av 863ba3b42e tasks: local-run-without-telegram-token переведена в feature
- Тип сменён с chore: подъём без токена бота меняет наблюдаемое поведение и
  требует нормы, которой в openspec/specs нет.
- В тело записан второй предмет работы — судьба задачи из Telegram, дошедшей до
  ответа при отсутствующем боте; он же стал четвёртым критерием приёмки.
2026-08-13 16:59:44 +03:00

4.5 KiB

Поднимать сервис без токена бота, работая одним входом

  • Тип: 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, и об этом есть строка журнала.