docs(app-map): mail.diff.md — diff веб↔натив (итерация 1, mail/081); карта → указатель

This commit is contained in:
b-mob-mail
2026-07-12 22:28:25 +00:00
parent 534dafc2c0
commit af6acdb54a
2 changed files with 56 additions and 41 deletions
+46
View File
@@ -0,0 +1,46 @@
# Diff: Почта (веб forbion ↔ нативный `feature/mail`)
Итерация 1 (по mail/081). Вход — карта `mail.md` (живой forbion, аккаунт `cloude`, read-only) +
код модуля `feature/mail` на 91aaaba. Тип: **Ф** — функционал, **Д** — дизайн/вёрстка.
Приоритет: P1 (болит/ядро), P2 (заметно), P3 (мелочь/косметика).
Статус: `open` — есть в вебе, нет/иначе в нативе; `device?` — требует проверки на устройстве.
> Общий вывод: нативный клиент функционально зрелый — расширенный поиск (все поля),
> подтверждение прочтения, важность/спам/метки/переместить/создать задачу/создать событие/
> запланированная отправка **уже есть и совпадают**. Ниже — только реальные пробелы.
## Функциональные
| # | Элемент / функция | В вебе (forbion) | В нативе (`feature/mail`) | Тип | Приор. | Статус |
|---|---|---|---|---|---|---|
| 1 | Черновики | Папка «Черновики» + композер сохраняет и восстанавливает черновик | Композер **не сохраняет** черновик — набранное теряется (`MailComposeViewModel`) | Ф | **P1** | open |
| 2 | Композер «⋯» → «Текстовые шаблоны» | Вставка шаблона/подписи в тело письма | Текстовые блоки только в настройках (`MailRepository`), в композер не вставляются | Ф | P2 | open |
| 3 | Композер «⋯» → «Умный подборщик» (smart picker) | Есть (вставка ссылок/упоминаний/виджетов) | Нет | Ф | P3 | open |
| 4 | Меню письма → «Ответить встречей» | Создание ответа-приглашения (iMIP) | Нет (есть смежное «Создать событие» `MailComponents.kt:1254`) | Ф | P3 | open |
| 5 | Меню письма → «Скачать письмо» (.eml) | Выгрузка исходника письма | Нет | Ф | P3 | open |
| 6 | Меню письма → «Редактировать как новое сообщение» | Открывает композер с телом письма | Нет | Ф | P3 | open |
| 7 | Действие «Архивировать» над письмом | Отдельная кнопка «в архив» | Нет отдельного пункта; архив только через «Переместить» (`MailComponents.kt:1259`) | Ф | P3 | open |
## Дизайн / вёрстка
| # | Элемент | В вебе (forbion) | В нативе | Тип | Приор. | Статус |
|---|---|---|---|---|---|---|
| 8 | Подписи виртуальных папок | «Непрочитанное», «Избранные» | «Непрочитанные», «Избранное» (`MailRepository.kt:672-673`) | Д | P2 | open |
| 9 | Порядок папок | Приоритетные→Входящие→Непрочитанное→Избранные→Черновики→Отправленные→Спам→Корзина | Входящие→Непрочитанные→Избранное→Отправленные→Черновики→Архив→Корзина→Спам (`MailRepository.kt:671-680`) | Д | P2 | open |
| 10 | Быстрые действия строки списка | Inline-иконки при наведении (✉/🌿/🗑/⋯) | Свайп справа-налево (`f7SwipeFromRightToDismiss`) | Д | P3 | **device?** |
## Требуют device-сверки (карта live не покрыла)
| # | Что | Причина | Статус |
|---|---|---|---|
| A | Экран открытого письма/треда: панель действий (Ответить/Переслать/Архив/Спам/Корзина/Удалить), меты, вложения, HTML-тело | live не проходился — открытие непрочитанного = запись `\Seen`; структура достроена по `MessageView.vue`+макетам | device? |
| B | Модалка «Параметры эл. почты» по подразделам (native — 6 разделов) | JS-модалка, live не раскрыта по пунктам | device? |
| C | Диалоги «Изменить метки» / «Переместить» / «Запланированная отправка» — состав форм | live не раскрывались (пишущие) | device? |
| D | Действия «⋯» по папке и по аккаунту в шторке навигации | live не раскрывались | device? |
| E | Проверить #10: hover-иконки vs свайп — не артефакт ли desktop-web на узком экране | нужен реальный мобильный web/устройство | device? |
## Примечание по методу
- Пункт #10 помечен `device?`: наблюдённые inline-hover-действия могут быть поведением
desktop-web в узком вьюпорте, а не мобильным паттерном — до проверки на реальном мобильном
не тащить в реализацию.
- Метрику ≤2% (mail/081 п.2) считаю по чек-листу «элементы+функции на экран» — жду формулу лида.
+10 -41
View File
@@ -162,44 +162,13 @@ URL: `/apps/mail/box/<id>/thread/<tid>`. Структура по `MessageView.vu
--- ---
## Расхождения с нативным `feature/mail` ## Расхождения с нативным `feature/mail`
Сверка карты (живой forbion) с кодом модуля на 91aaaba. Нативный клиент оказался Полный список расхождений (веб ↔ натив) вынесен в **[`mail.diff.md`](mail.diff.md)** — формат
функционально богат — расширенный поиск, подтверждение прочтения, важность/спам/метки/ итерации сверки по mail/081 (функция/элемент, тип Ф/Д, приоритет, статус). Кратко:
создать задачу/создать событие/запланированная отправка **уже есть** и совпадают. Ниже — нативный клиент функционально зрелый (расширенный поиск, подтверждение прочтения,
только то, где native **отстаёт или отличается** от живого web (это бэклог на добивку). важность/спам/метки/задача/событие/запланированная отправка — совпадают). Пробелы:
- **P1 функц.:** черновики не сохраняются из композера.
### Функциональные (native отстаёт) — бэклог - **P2:** «Текстовые шаблоны» в композере; подписи и порядок виртуальных папок.
1. **Черновики не сохраняются** `[приоритет]`. Live: папка «Черновики» + композер сохраняет/ - **P3:** «Умный подборщик», «Ответить встречей», «Скачать письмо», «Редактировать как новое»,
восстанавливает черновик. Native: `MailComposeViewModel` не пишет и не восстанавливает отдельное «Архивировать»; паттерн быстрых действий строки (hover vs свайп — device?).
черновик — набранное теряется. (Совпадает с долгом №1 представления mail/070; план п.2.) - **device?:** экран открытого письма, модалка настроек, диалоги меток/перемещения — live не
2. **Композер «⋯» → «Текстовые шаблоны»** — вставки в тело нет. Live: пункт есть. Native: проходились (read-only / `\Seen`), см. `mail.diff.md` раздел «Требуют device-сверки».
текстовые блоки только в настройках (`MailRepository`), в композере не вставляются
(`MailComposeScreen.kt` меню «⋯» = только «Отправить позже» + «Запросить подтверждение
прочтения»).
3. **Композер «⋯» → «Умный подборщик»** (NC smart picker) — в native отсутствует.
4. **Меню письма → «Ответить встречей»** — в native нет (есть смежное «Создать событие»
`MailComponents.kt:1254`, но это не invite-reply).
5. **Меню письма → «Скачать письмо» (.eml)** — в native отсутствует.
6. **Меню письма → «Редактировать как новое сообщение»** — в native отсутствует.
7. **Действие «Архивировать» над письмом** — в native нет отдельного пункта (папка «Архив»
и `archiveMailboxId` есть, но архивирование только через «Переместить сообщение»
`MailComponents.kt:1259`).
### Косметические / вёрстка (для попиксельной сверки)
8. **Подписи виртуальных папок.** Live: «Непрочитанное», «Избранные». Native: «Непрочитанные»,
«Избранное» (`MailRepository.kt:672-673`) — число/форма слова расходятся.
9. **Порядок папок.** Live: Приоритетные → Входящие → Непрочитанное → Избранные → Черновики →
Отправленные → Спам → Корзина. Native: Входящие → Непрочитанные → Избранное → Отправленные →
Черновики → Архив → Корзина → Спам (`MailRepository.kt:671-680`). Порядок отличается.
10. **Быстрые действия строки списка.** Live-web (даже в узком вьюпорте): inline-иконки при
наведении (✉ прочитать / 🌿 важность / 🗑 удалить / ⋯). Native: свайп справа-налево
(`f7SwipeFromRightToDismiss`). ⚠️ вероятно артефакт desktop-web на узком экране, а не
мобильный паттерн — **проверить на реальном мобильном web/устройстве** прежде чем считать
расхождением.
## Открытые вопросы (добить при сверке на устройстве)
1. **Экран открытого письма/треда** — пройти live, когда будет прочитанное письмо или write-ОК
на `\Seen`; там же сверить панель действий и расхождения (архив/скачать/редактировать-как-новое).
2. Модалка «Параметры эл. почты» — раскрыть каждый подраздел live (native — 6 разделов).
3. Действия «⋯» по папке и по аккаунту — раскрыть состав live.
4. Диалоги «Изменить метки», «Переместить», «Запланированная отправка» — раскрыть формы live.
5. Проверить п.10 (быстрые действия строки) на реальном мобильном — hover-иконки vs свайп.