Files
transcriber/docs/adr/ADR-2026-08-15-telegram-intake-removed-temporarily.md
T
av 8f7c3a057a удалён вход Telegram, владелец записи стал обязателен в схеме
- убраны клиент бота, транспорт обновлений, отправитель сообщений, сборка
  входа при старте, секция настроек и зависимость go-telegram-bot-api; из
  конвейера ушла доставка ответа отправителю — исход виден опросом готовности.
  Колонки адресата и значение источника остались в схеме: применённые шаги не
  переписываются
- шаг 202608140003 запрещает пустого владельца у аудиозаписи и у файла;
  существующие строки он не проверяет, и это принято сознательно — искать их
  надо запросом до выкладки
- ревью нашло два пред-существующих дефекта, оба закрыты: пустой второй ответ
  распознавателя стирал сохранённую расшифровку, а пустая расшифровка перестала
  быть заметной вместе с убранной доставкой. Попутно поднят golang.org/x/image
  до v0.45.0 — красный шаг vulns, воспроизводился и на чистом master
2026-08-15 07:24:35 +03:00

5.1 KiB
Raw Blame History

Вход Telegram убран целиком, а не выключен признаком

  • Дата: 2026-08-15
  • Источник: openspec/changes/archive/2026-08-15-remove-telegram-intake/design.md, разделы «Context» и «Формы решения, между которыми выбирали»

Решение

Вход Telegram убран из сервиса целиком: клиент, транспорт обновлений, отправитель сообщений, сборка входа при старте, список допущенных людей, секция настроек и зависимость. Убран временно — возврат заводится новым изменением вместе со связью чата с учётной записью.

Хранилище при этом не тронуто: колонки tg_chat_id, tg_reply_message_id и значение telegram перечня источников остаются в схеме вместе с записями, которые их заполнили.

Почему

Цитата источника:

Сервис принимает записи двумя входами, и входы расходятся в главном: у записи, пришедшей из приложения, есть владелец, а у записи, пришедшей от бота, владельца нет и быть не может — связи чата с учётной записью сервис не ведёт. Пока такие записи заводятся, правило «каждая запись принадлежит человеку» действует наполовину.

Отвергнуты две формы решения, обе с названной ценой:

Выключить вход признаком, код оставить. Признак telegram.enabled заведён 2026-08-13 и обязателен, а приём по HTTP владельца уже требует: одна правка ключа в боевом файле даёт «новых записей без владельца не заводится» ценой ноля строк кода и мгновенным возвратом. Отвергнуто по причине из раздела «Why»: двойная модель остаётся в коде, и оговорку про бота продолжает платить каждая следующая задача.

Сузить бота до исходящего канала. Приём убрать, отправку оставить с одним адресатом — чатом владельца строкой настроек. Отвергнуто потому, что заводит понятие «канал уведомления владельца», которое тут же переделает задача ntfy-delivery.

Решениями, которые это изменение отменяет, были ADR-2026-08-13-telegram-intent-declared-not-inferred и ADR-2026-08-13-telegram-outage-does-not-block-startup: оба нормировали подъём входа, которого больше нет. Доводы их при этом устояли и понадобятся возврату — оба продолжают отвечать на вопрос «что делать с входом, чей внешний собеседник недоступен».

Последствия

  • + модель одна: оговорка про запись без владельца ушла из спек приёма, доступа, конвейера и хранилища.
  • + зависимость go-telegram-bot-api ушла из манифеста вместе с двумя путями утечки токена, которые проект закрывал двумя задачами.
  • у сервиса не осталось входа, которым человек может воспользоваться: приложения нет, личных ключей для программ нет, и до этих задач запись кладут собранным руками запросом с сессией из браузера. Владелец окно принял.
  • записи, застрявшие в конвейере на минуту выкладки, доходят до текста, и ответа в чат по ним не уходит. Смягчения нет: чат и есть убираемый вход.
  • бот у Telegram остаётся зарегистрированным и на вид живым, а ключ доступа — в настройках выкладки под возврат входа (решение владельца от 2026-08-14). Отправитель голосового не получит ни ответа, ни отказа.