Files
email-assistant/TODO.md
T
hermes 39df85b51c fix: архивация/вложения больше не помечают письма прочитанными (Seen)
Причина: himalaya message read и attachment download используют IMAP BODY[],
который по RFC 3501 выставляет \Seen на сервере (Microsoft Exchange).
Пользователь: письма в ящике после скачивания становятся прочитанными.

Фикс:
- чтение тела: himalaya message read --preview (не ставит Seen)
- вложения: fetch_attachments_imaplib() — сырой IMAP stdlib (socket+ssl),
  UID FETCH (BODY.PEEK[]), папки в modified UTF-7, литералы до 1.5МБ,
  MIME-encoded words, фолбэк himalaya + flag remove seen

Проверено живьём: UID 14200 (INBOX, docx 1.1МБ) флаги ()->() — Seen не выставлен.
Openspec: change no-mark-seen-on-archive заархивирован (2026-09-14-no-mark-seen-on-archive), 7/7 validate OK
2026-09-14 08:08:48 +00:00

59 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TODO — Email Assistant
Формат: | дата | задача | статус | закрыта в |
## 2026-07 (Фазы 1–1.5)
| Дата | Задача | Статус | Закрыта в |
|---|---|---|---|
| 2026-07-16 | Фаза 0.5: рефакторинг формата — meta.json+body.md → email.md (YAML-frontmatter) | ✅ закрыта | STATUS.md |
| 2026-07-16 | Фаза 1: локальный архив (INBOX 585, Sent 515, Отправленные 510, Archive 373) | ✅ закрыта | STATUS.md |
| 2026-07-16 | Фаза 1.5: mail_index.py (SQLite FTS5) + sqlite_search.py + digest.py | ✅ закрыта | STATUS.md |
## 2026-07-19
| Дата | Задача | Статус | Закрыта в |
|---|---|---|---|
| 2026-07-19 | Фаза 1.6: Contacts Extractor (LLM-подписи → contacts.json/vcf) | 🔵 в работе | |
| 2026-07-19 | clean_body — вырезание цитируемой переписки (Outlook/forward) | ✅ закрыта | STATUS.md контекст |
| 2026-07-19 | Cron mail-index-incremental | 🔵 открыта | |
| 2026-07-19 | Cron digest-weekly | 🔵 открыта | |
| 2026-07-19 | Push mirror gitea → gitverse.ru | 🔵 открыта | |
## 2026-09-11
| Дата | Задача | Статус | Закрыта в |
|---|---|---|---|
| 2026-09-11 | Фаза 1.7: динамическое обнаружение подпапок INBOX (get_inbox_subfolders, --all, fix run_cmd) | ✅ закрыта | STATUS.md §1.7, git c7430d1 |
| 2026-09-11 | Анализ Nylas CLI → NYLAS_ANALYSIS.md + ссылка из README | ✅ закрыта | git d4bf3ed |
| 2026-09-11 | Задача 4: Анализ ФС vs Maildir → STORAGE_ANALYSIS.md + README | ✅ закрыта | git e31b5f2; openspec change email-storage-analysis (архивирован) |
| 2026-09-11 | Задача 2: Radicale развёрнут (docker :5232, HTTP Basic, PROPFIND 207) | ✅ закрыта | openspec change local-calendar-tasks |
| 2026-09-11 | Задача 2: коллекции Radicale (Личный/Рабочий/Задачи) — MKCOL 403, ждёт решения способа | 🔵 заблокировано | |
| 2026-09-11 | Задача 2: Vikunja (docker :3456, postgres) — ЛИШНЯЯ СУЩНОСТЬ, задачи через Radicale VTODO | ⛔ не нужна | openspec change remove-vikunja-use-radicale-tasks |
| 2026-09-11 | Задача 2: Caddy reverse proxy (cal.nixg.ru, tasks.nixg.ru) — только cal.nixg.ru | 🔵 открыта | |
| 2026-09-11 | Задача 3: Android-синхронизация (DAVx5 → Radicale, задачи VTODO через jtx board) | 🔵 открыта | |
| 2026-09-11 | Задача 1: веб-интерфейс (FastAPI, список писем, перемещение, тэги) | 🔵 открыта | |
| 2026-09-11 | Задача 6: кнопка «Создать задачу» → Radicale VTODO (вместо Vikunja API) | 🔵 открыта | |
| 2026-09-11 | Задача 7: аутентификация веб-интерфейса | 🔵 открыта | |
## 2026-09-13
| Дата | Задача | Статус | Закрыта в |
|---|---|---|---|
| 2026-09-13 | Radicale: смена пароля (пользователь не помнил; apr1-хэш, users.bak.<ts>) | ✅ закрыта | WALKTHROUGH |
| 2026-09-13 | «Обход в Глории» — VEVENT повторяющийся (Рабочий, VTIMEZONE Europe/Moscow) | ✅ закрыта | WALKTHROUGH |
| 2026-09-13 | Диагностика пайплайна: вложения НЕ качаются (баг himalaya `--dir` → `--downloads-dir`) | ✅ закрыта | openspec change email-classification-handlers |
| 2026-09-13 | Чейндж email-classification-handlers (классификация Qwen3:8b + обработчики) — создан, 0/23 задач | 🔵 в работе | openspec change email-classification-handlers |
| 2026-09-13 (вечер) | Вложения: фикс `--dir`→`--downloads-dir`, вложения качаются, идемпотентно | ✅ закрыта | WALKTHROUGH §2026-09-13 (вечер) |
| 2026-09-13 (вечер) | Классификатор `scripts/email_classifier.py` (Qwen3:8b → frontmatter `classification`) | ✅ закрыта | WALKTHROUGH §2026-09-13 (вечер) |
| 2026-09-13 (вечер) | Обработчики `scripts/email_handlers.py` (urgent→TG, task→VTODO, meeting→VEVENT, dry-run ✓) | 🟡 частично: dry-run готов, живой прогон + TG не проверены | WALKTHROUGH §2026-09-13 (вечер) |
| 2026-09-13 (вечер) | Radicale: синхронизация пароля в `radicale/.env` с `data/users` (смена 13.09 не обновила .env) | ✅ закрыта | WALKTHROUGH §2026-09-13 (вечер) |
| 2026-09-13 | Vikunja выведена из эксплуатации: контейнеры/volume/каталог удалены, tasks.nixg.ru закомментирован | ✅ закрыта | openspec change remove-vikunja-use-radicale-tasks (14/14) |
| 2026-09-13 | Тестовый VTODO test-vikunja-removal-2026 в «Задачи» (проверка CalDAV VTODO) | ✅ закрыта | WALKTHROUGH |
| 2026-09-13 | PRD.md создан (отсутствовал) | ✅ закрыта | PRD.md |
| 2026-09-13 | Задача 2: Caddy reverse proxy — cal.nixg.ru работает (207), tasks.nixg.ru закомментирован | 🟡 частично (cal.nixg.ru готов) | STATUS.md |
| 2026-09-13 | Задача 3: Android — контакты синхронизированы (DAVx5), события/задачи ещё не проверены в приложении | 🔵 открыта | |
## 2026-09-14
| Дата | Задача | Статус | Закрыта в |
|---|---|---|---|
| 2026-09-14 | Живой прогон обработчиков (urgent→TG, task→VTODO, meeting→VEVENT) — проверен end-to-end | ✅ закрыта | STATUS.md §Задача 8 |
| 2026-09-14 | Бэкфилл вложений `--attachments-backfill` (докачка для 1697 писем has_attachment с пустыми attachments/) | ✅ закрыта | STATUS.md, openspec specs/email-attachments |
| 2026-09-14 | **СРОЧНЫЙ ПАТЧ: архивация ставила `\Seen` (письма «прочитанными»)** — himalaya BODY[]; фикс: `--preview` + `fetch_attachments_imaplib()` (BODY.PEEK[], сырой IMAP) | ✅ закрыта | openspec change `no-mark-seen-on-archive` |
| 2026-09-14 | Верификация Seen-фикса живьём: UID 14200 (docx 1.1МБ) флаги () → () — Seen не выставлен | ✅ закрыта | tasks.md change no-mark-seen-on-archive |