# I2PChat: backlog задач **Версия roadmap:** `1.3.0` — см. [`ROADMAP_RU.md`](ROADMAP_RU.md) и [`VERSION`](../VERSION). Этот документ содержит backlog уровня issue, согласованный с [`ROADMAP.md`](ROADMAP.md) и русской версией roadmap: [`ROADMAP_RU.md`](ROADMAP_RU.md). Текст каждого пункта подготовлен так, чтобы его можно было почти без правок переносить в GitHub Issue. ## Milestone: 0.6.5 - UX polish ### 1. Черновики сообщений по контактам **Описание** Хранить отдельный черновик сообщения для каждого контакта/адреса и восстанавливать его при возврате к диалогу. **Критерии приёмки** - При переключении между диалогами текст в поле ввода не теряется. - У каждого контакта есть собственное независимое состояние черновика. - Черновики по возможности переживают reconnect-сценарии. - После отправки очищается только черновик активного диалога. **Рекомендуемые labels** `enhancement`, `ux`, `desktop` ### 2. Непрочитанные сообщения и индикаторы **Описание** Добавить состояние непрочитанных сообщений по диалогам и общий индикатор для главного окна и/или системного трея. **Критерии приёмки** - Каждый диалог хранит счётчик непрочитанных. - Новые сообщения в неактивном диалоге увеличивают этот счётчик. - При открытии диалога счётчик сбрасывается. - В приложении есть заметный глобальный индикатор непрочитанных. **Рекомендуемые labels** `enhancement`, `ux`, `notifications` ### 3. Упрощённые статусы соединения и доставки **Описание** Показывать состояние соединения и доставки в пользовательских терминах, а не только через внутренние технические статусы. **Критерии приёмки** - В основном UI есть понятные состояния вроде `Online`, `Sending`, `Will deliver later`, `Disconnected`. - Более технические детали доступны отдельно и не перегружают основной экран. - Переходы между статусами остаются стабильными и предсказуемыми при reconnect. **Рекомендуемые labels** `enhancement`, `ux` ### 4. Контекстные действия над сообщениями **Описание** Добавить контекстное меню или аналог быстрых действий для типовых операций над сообщениями. **Критерии приёмки** - Для текстовых сообщений доступно `Copy text`. - Для сообщений доступно `Reply`. - Для вложений доступны уместные действия вроде `Open` или `Copy path`, где это возможно. - Поведение согласовано для входящих и исходящих сообщений там, где это применимо. **Рекомендуемые labels** `enhancement`, `ux` ### 5. Настройки уведомлений **Описание** Добавить настройки уведомлений, улучшающие и приватность, и ежедневный комфорт использования. **Критерии приёмки** - Пользователь может включать и отключать звук уведомлений. - Пользователь может скрывать текст сообщения в уведомлении. - Есть тихий режим. - Поведение уведомлений предсказуемо как при фокусе на окне, так и без него. **Рекомендуемые labels** `enhancement`, `notifications`, `privacy` ### 6. Улучшение UX отправки вложений **Описание** Сделать прогресс и ошибки отправки файлов и изображений заметнее и понятнее. **Критерии приёмки** - Во время отправки вложений пользователь видит понятный прогресс или статус. - Ошибки отправки вложений отображаются явно и понятным языком. - При неудачной отправке не возникает ощущения, что файл просто исчез. **Рекомендуемые labels** `enhancement`, `ux`, `attachments` ## Milestone: 0.7.0 - Contacts and conversations *Состояние: пункты 7–12 закрыты в релизе **v0.7.0** (см. [`docs/releases/RELEASE_0.7.0.md`](releases/RELEASE_0.7.0.md)).* *Уточнение реализации (после v0.7.0): в списке **Saved peers** добавлено контекстное меню (ПКМ): **Edit name & note…**, **Contact details…** (адрес, TOFU, снятие pin), **Remove from saved peers…** с опциями удаления истории, pin, lock и файла BlindBox; в ядре — `clear_locked_peer()`, в `contact_book` — `remove_peer()`.* ### 7. Боковая панель контактов **Описание** Добавить в главное окно отдельный список контактов/диалогов. **Критерии приёмки** - Пользователь видит сохранённые диалоги в боковой панели. - Активный диалог визуально выделен. - Пользователь может переключаться между диалогами прямо из списка. - Пустое состояние остаётся понятным и не ломает UX. **Рекомендуемые labels** `feature`, `ux`, `desktop` ### 8. Локальные профили контактов **Описание** Позволить пользователю задавать локальные имена и короткие заметки для контактов, не скрывая при этом реальный I2P-адрес. **Критерии приёмки** - Для контакта можно сохранить понятное отображаемое имя. - Имя сохраняется между перезапусками. - Можно хранить короткую заметку или тег. - Реальный адрес остаётся доступным в интерфейсе контакта. **Рекомендуемые labels** `feature`, `contacts` ### 9. Восстановление последнего активного диалога **Описание** Восстанавливать последний активный диалог при запуске приложения, когда это безопасно и уместно. **Критерии приёмки** - Последний активный диалог открывается после перезапуска, когда это возможно. - При ошибке приложение корректно возвращается в безопасное состояние. - Черновики и непрочитанные остаются согласованными после восстановления. **Рекомендуемые labels** `enhancement`, `ux`, `contacts` ### 10. Превью диалогов в списке **Описание** Показывать в списке диалогов превью последнего сообщения и время последней активности. **Критерии приёмки** - В строке диалога отображается короткое превью последнего сообщения. - Видно время последней активности. - В строке заметно отображается состояние непрочитанного. - Для вложений и нетекстового контента строка деградирует корректно. **Рекомендуемые labels** `enhancement`, `ux`, `contacts` ### 11. Поиск в текущем диалоге **Описание** Добавить локальный поиск по истории текущего диалога. **Критерии приёмки** - Пользователь может искать текст в текущем диалоге. - Поиск возвращает список совпадений. - Выбор результата переводит к нужному сообщению. - Поиск не ломает обычную загрузку истории. **Рекомендуемые labels** `feature`, `history`, `search` ### 12. Карточка контакта / trust card MVP **Описание** Сделать базовую карточку контакта с полями идентичности и доверия. **Критерии приёмки** - Пользователь может открыть карточку контакта. - Карточка показывает адрес, fingerprint и состояние pinned/unpinned. - Информация остаётся понятной, не скрывая при этом техническую правду. - Карточка не мешает обычному сценарию общения. **Рекомендуемые labels** `feature`, `security`, `contacts` ## Milestone: 0.8.0 - Trust, delivery, offline clarity ### 13. UI очереди исходящих сообщений **Описание** Показать пользователю очередь исходящих и жизненный цикл сообщения, чтобы офлайн-доставка воспринималась как понятное поведение, а не как “магия” или сбой. **Критерии приёмки** - У исходящих сообщений может быть видимое состояние очереди. - Пользователь понимает разницу между локальным принятием сообщения и реальной доставкой. - Временные ошибки не приводят к незаметному исчезновению очереди. - Формулировки в UI не создают ложного ощущения доставки, если было только локальное queueing. **Рекомендуемые labels** `feature`, `delivery`, `ux` ### 14. Статусы доставки на каждом сообщении **Описание** Показывать статус доставки прямо на bubble исходящих сообщений. **Критерии приёмки** - У исходящих сообщений есть заметный индикатор статуса доставки. - Минимальный набор состояний покрывает `sending`, `queued`, `delivered`, `failed`. - Дополнительные детали доступны через tooltip или вторичный UI. - Смена статусов обновляется без визуальных артефактов. **Рекомендуемые labels** `feature`, `delivery`, `desktop` ### 15. Сценарий предупреждения о смене ключа **Описание** Сделать явный UX-сценарий для случая, когда доверенный ключ контакта изменился. **Критерии приёмки** - Пользователь получает понятное предупреждение о смене ключа пира. - В интерфейсе ясно видно, какого контакта это касается. - Пользователь может явно доверить новый ключ или отклонить изменение. - Приложение не продолжает молча работу так, будто ничего не произошло. **Рекомендуемые labels** `feature`, `security`, `trust` ### 16. Улучшение UX доверия и lock-to-peer **Описание** Сделать pinning и lock-to-peer более понятными в пользовательском интерфейсе. **Критерии приёмки** - Пользователь видит, закреплён ли контакт/ключ. - Значение lock-to-peer объясняется понятным языком. - Сброс или удаление pinned key остаётся доступным. - Состояние trust не спрятано слишком глубоко в меню. **Рекомендуемые labels** `enhancement`, `security`, `trust`, `ux` ### 17. Экран диагностики BlindBox **Описание** Добавить диагностический экран, объясняющий доступность офлайн-доставки и типовые причины сбоев. **Критерии приёмки** - Пользователь видит, доступна ли офлайн-доставка сейчас. - Причины ошибок описаны человеческим языком. - Первая версия может быть только read-only. - Диагностика по умолчанию не перегружает пользователя лишним техшумом. **Рекомендуемые labels** `feature`, `blindbox`, `diagnostics` ### 18. Повторная отправка неудачных сообщений **Описание** Добавить понятный и управляемый retry для сообщений, отправка которых завершилась ошибкой. **Критерии приёмки** - Для неуспешных сообщений доступно действие retry. - Retry не создаёт запутывающих дублей без намерения пользователя. - После retry статус сообщения обновляется корректно. - Поведение остаётся согласованным для live и offline сценариев, где это возможно. **Рекомендуемые labels** `feature`, `delivery`, `ux` ## Milestone: 0.9.0 - Portability, privacy, hardening *Состояние: пункты **19–26** входят в блок **v0.9.0** и стабильную линию **v1.0.0** ([`releases/RELEASE_0.9.0.md`](releases/RELEASE_0.9.0.md), [`releases/RELEASE_1.0.0.md`](releases/RELEASE_1.0.0.md)).* ### 19. Зашифрованный экспорт профиля **Описание** Позволить экспортировать профиль пользователя в переносимый и защищённый формат для миграции и резервного копирования. **Критерии приёмки** - Профиль можно экспортировать в переносимом формате. - Экспорт защищён шифрованием или эквивалентной безопасной схемой. - Пользователь предупреждён о рисках хранения и переноса. - Критически важные данные профиля не теряются “тихо”. **Рекомендуемые labels** `feature`, `security`, `backup` ### 20. Импорт профиля и сценарий восстановления **Описание** Добавить импорт ранее экспортированного профиля. **Критерии приёмки** - Экспортированный профиль можно корректно импортировать обратно. - Конфликты с уже существующим профилем обрабатываются явно. - Ошибки импорта показываются понятным образом. - Импортированный профиль готов к использованию без скрытых дополнительных шагов. **Рекомендуемые labels** `feature`, `security`, `backup` ### 21. Зашифрованный экспорт/импорт истории **Описание** Позволить экспортировать и восстанавливать локальную историю чата в защищённом формате. **Критерии приёмки** - Историю можно экспортировать отдельно от профиля. - Экспорт поддерживает проверку целостности. - Импорт не перезаписывает существующую историю без подтверждения. - Пользователь понимает, что именно экспортируется и в каком виде хранится. **Рекомендуемые labels** `feature`, `history`, `backup`, `security` ### 22. Настройки retention для истории **Описание** Дать пользователю прямой контроль над политикой хранения локальной истории. **Критерии приёмки** - Пользователь может задать практичные ограничения хранения по возрасту, объёму или количеству. - Поведение retention остаётся предсказуемым. - Разрушающие операции требуют явного подтверждения. - Очистка истории не расшатывает остальной UI. **Рекомендуемые labels** `enhancement`, `history`, `privacy` ### 23. Privacy mode **Описание** Добавить локальный privacy mode для защиты содержимого на устройстве. **Критерии приёмки** - Можно скрыть содержимое уведомлений. - Есть быстрый переключатель privacy mode. - При реализации локального lock/unlock flow он работает согласованно. - Privacy mode чисто интегрируется в обычное использование. **Рекомендуемые labels** `feature`, `privacy`, `security` ### 24. Drag-and-drop вложений **Описание** Добавить поддержку drag-and-drop для файлов и изображений в окне чата. **Критерии приёмки** - Файлы можно перетаскивать в окно чата для отправки. - Изображения можно перетаскивать в окно чата для отправки. - Для неподдерживаемого содержимого есть понятная ошибка. - Поведение согласовано с уже существующими действиями отправки вложений. **Рекомендуемые labels** `feature`, `attachments`, `ux` ### 25. Retry transfer и улучшение UX файлов/медиа **Описание** Улучшить retry и пользовательскую обратную связь для файловых и медиа transfer сценариев. **Критерии приёмки** - Неудачную отправку файла можно повторить. - Ошибки transfer отображаются понятным языком. - Для обычных медиа-отправок прогресс и preview остаются ясными. - Transfer-состояния не застревают в сбивающих с толку промежуточных статусах. **Рекомендуемые labels** `enhancement`, `attachments`, `delivery` ### 26. Укрепление протокола и transfer-сценариев **Описание** Усилить покрытие тестами, логированием и диагностикой для протокола и transfer логики перед `1.0.0`. **Критерии приёмки** - Дополнительные тесты покрывают framing, повреждённые данные и transfer error cases. - Логи и диагностика улучшены для сложных сетевых сценариев. - CI отражает те версии окружения, которые проект реально собирается поддерживать. - Покрытие по надёжности заметно лучше текущего baseline. **Рекомендуемые labels** `tech-debt`, `testing`, `reliability` ## Рекомендуемый порядок зависимостей - По возможности завершить пункты 1-4 до более глубокой работы над списком диалогов. - Пункт 7 лучше делать до пунктов 10 и 11. - Пункт 12 желательно завершить до пунктов 15 и 16. - Пункт 13 лучше реализовать до пунктов 14 и 18. - Пункт 19 должен предшествовать пункту 20.