## Why Сегодня пустой токен бота означает сразу две разные вещи: «вход Telegram выключен намеренно» и «ключа доступа нет». Владелец не может сказать сервису «бот мне нужен» отдельно от «вот ключ», а сервис не может отличить осознанный отказ от входа от криво отрендеренного файла настроек — и в обоих случаях поднимается без бота. Цена расхождения падает на выкладку: файл настроек собирает Ansible, и потерянный при сборке ключ выглядит для сервиса ровно так же, как решение владельца обойтись одним входом. Бот молча перестаёт отвечать своим отправителям, а узнать об этом неоткуда. ## What Changes - В настройках входа Telegram появляется отдельный признак включения. Он и объявляет намерение: нужен ли сервису этот вход вообще. - Ключ доступа перестаёт нести второе значение. Он читается и проверяется **только** при включённом входе, а при выключенном не смотрится вовсе. - Включённый вход без ключа доступа становится ошибкой настройки: сервис говорит, какого ключа не хватает, и не поднимается. Прежде такой файл давал тихий подъём без бота. - Выключенный вход перестаёт быть поводом для предупреждения в журнале: решение владельца сообщается обычной записью, а предупреждение остаётся за тем, чего владелец не выбирал, — недоступностью Telegram. - Отказ разбора файла настроек перестаёт пересказывать библиотеку разбора и говорит своими словами: где сломалось и на каком ключе, но не что там написано. Прежде поломанная строка секретного ключа уезжала в журнал вместе со своим значением. - **BREAKING** для файла настроек: у секции Telegram появляется новый **обязательный** ключ. Умолчания у него нет: файл без признака негоден, и сервис выходит с ошибкой настройки. Решение владельца от 2026-08-13 — намерение объявляют, а не угадывают по умолчанию, и файл, где его забыли объявить, не должен работать «как-нибудь». Прежние правила подъёма при включённом входе сохраняются целиком: Telegram отвечает «такого бота нет» — старт кончается отказом; Telegram недоступен или молчит дольше срока — сервис поднимается одним входом и говорит об этом предупреждением. Признак поднятости входа наблюдателю виден во всех случаях. ## Capabilities ### New Capabilities Новых нет: речь о том, с какими входами сервис вправе подняться, а это уже нормировано. ### Modified Capabilities - `intake`: требование «Недоступный или незаданный вход Telegram не мешает подъёму» перестаёт выводить намерение из ключа доступа. Оно начинает опираться на объявленный признак включения, получает два новых отказа старта — признака в настройках нет и вход включён без ключа — и разводит уровни записей журнала по тому, выбрал ли владелец это состояние. ## Impact - Настройки: секция `[telegram]` в `config.toml` и в образце `config.dist.toml`; структура настроек и умолчания в `internal/config`. - Подъём: разбор случая при сборке входа Telegram (`telegram_build.go`) и вызов проверки настроек в `main.go`. - Выкладка: шаблон настроек в `pet-project-server` обязан получить признак включения **до** накатки нового образа, иначе сервис не поднимется. Правит его человек, здесь только называем. - Документы: запрет на боевой токен в `CLAUDE.md`, конвенция настроек `docs/conventions/config.md`, таблица отказов в `docs/architecture.md`. - Приём записи из Telegram, белый список и доставка ответов не затрагиваются.