Files
transcriber/tasks/items/telegram-account-link.md
T
av 8739b18a9f tasks: очередь расставлена от базы к деталям
- порядок беклога и роадмапа назначен слоями: проверки, которым можно
  верить → долги входа → владелец записи и контракт API → конвейер под
  тестами → приложение и возможности поверх; у каждого движения записана
  причина;
- заведены восемь задач под пункты «Завершения», которых не закрывала ни
  одна запись, — цель any-audio-source была без задач вовсе;
- у четырёх задач сняты критерии, требовавшие того, что делает задача ниже
  по очереди; исправлены ссылки на несуществующий repo/sqlite и на
  отменённую разведку об очереди.
2026-08-12 20:48:53 +03:00

44 lines
3.2 KiB
Markdown

# ✨ Сопоставить пользователя Telegram с учётной записью
- **Тип:** feature
- **Категория:** Очередь — Связывать чат с учётной записью не с чем, пока у записи нет владельца.
- **Зачем:** Белый список сверяется с именем пользователя Telegram, которое владелец меняет в любой момент, а записи из бота ни с кем не связаны.
- **Теги:** goal:multi-user
Двигает пункты 4 и 5 «Завершения» цели: записи из бота видны тому же человеку в
приложении, а белый список перестаёт быть отдельным механизмом — право писать
боту выводится из учётной записи.
Берётся после `record-ownership`: связывать не с чем, пока у записи нет
владельца.
## Затрагивает
- связь учётной записи с чатом Telegram: таблица и её миграция;
- команда бота для привязки и способ её подтвердить;
- `internal/controller/tg`, проверка отправителя — сегодня `slices.Contains` по
строке автора;
- ключ конфигурации `[server] users_while_list` — он уходит;
- `config.dist.toml`, `internal/config`;
- `docs/security.md`, раздел «Что разграничивает доступ»;
- инвариант «Бот отвечает только тем, кто в белом списке» в `CLAUDE.md`.
## Критерии приёмки
- Сообщение от непривязанного чата обрабатывать не начинаем и файл не скачиваем.
Оракул — тест: обновление от неизвестного чата не заводит задачу и не ходит в
сеть.
- Привязка идёт по идентификатору чата, а не по имени пользователя: смена имени
в Telegram доступа не меняет. Оракул — тест: то же обновление с изменённым
`From.UserName` по-прежнему принимается.
- Запись, пришедшая ботом, видна тому же человеку в приложении. Оракул — тест:
задача из привязанного чата читается сессией связанной учётной записи и не
читается чужой.
- Ключ `users_while_list` из конфига и из документов убран. Оракул — `task
gate`, шаг `docs.py check`, и `grep users_while_list` по репозиторию пуст.
## Рамки
Одна учётная запись — один чат: нескольких чатов на человека не заводим.
Инвариант в `CLAUDE.md` переписывается этой же задачей, а не остаётся врать.