# Design: Анализ хранения писем — ФС vs Maildir ## Обзор Документ `STORAGE_ANALYSIS.md` пишется вручную (это аналитика, не код). Анализ опирается на: - реальные данные архива (структуру, число файлов, размеры) - стандарты Maildir/MBOX/notmuch - мотивацию пользователя (локальная LLM в скриптах) ## Файлы | Файл | Действие | Описание | |-------|----------|----------| | `/opt/hermes/email-assistant/STORAGE_ANALYSIS.md` | создать | Анализ + таблица + рекомендация | | `/opt/hermes/email-assistant/README.md` | изменить | Добавить ссылку в раздел «Оценка альтернатив» | ## Анализ (что будет в документе) ### Текущий формат (`email.md`) - **Плюсы:** человекочитаемый (YAML-frontmatter + Markdown-тело), идеален для LLM (grep/find/obsidian), атомарность записи (новая директория UID), прозрачность бэкапов - **Минусы:** нестандартный (MUA не читают), без флагов на уровне ФС (Seen/Answered в frontmatter, не атрибут), дублирование с SQLite-индексом (mail_index.db), нет жёсткой гарантии целостности (нет fsync-семантики Maildir) ### Maildir - **Плюсы:** стандарт (mutt/neomutt/thunderbird, dovecot), атомарность (tmp→new→cur), флаги в имени файла (`:2,RS`), быстрый инкрементальный скан (число файлов в new/), не требует БД - **Минусы:** тело в raw-MIME (нужен парсинг для LLM — но `mail`/`mhonarc` извлекают), имена файлов нечитаемы, нет человекочитаемых метаданных, сложнее grep по теме (тема в заголовке MIME, не в frontmatter) ### MBOX - **Минусы:** один файл на папку (перезапись всего файла при изменении), блокировки, не для инкрементального чтения LLM — сразу исключается для нашего сценария ### notmuch - **Плюсы:** индексный слой поверх Maildir, быстрый полнотекстовый поиск, тэги (подходят для «назначенных тэгов» из UI), интеграция с MUA - **Минусы:** нужен демон/индекс, не заменяет хранение (всё равно Maildir или own format), ещё один слой сложности ### LLM-сценарий (главный) - LLM в скриптах: `cat email.md | ollama run qwen3:8b` — работает напрямую (frontmatter + тело). Для Maildir нужен `mail`/`munpack`/свой парсер MIME. - Тэги для веб-UI: в текущем формате можно добавить поле `tags: []` в frontmatter. Maildir — тэги как флаги не предусмотрены (только Seen/Answered/ Flagged), для UI-тэгов нужен отдельный индекс (notmuch или SQLite) ## Рекомендация (предварительная) **Остаться на текущем `email.md` + SQLite FTS5**, но с эволюцией: 1. Добавить `tags: []` в frontmatter для UI-тэгов 2. Оставить Maildir-совместимость как опцию экспорта (не миграции) 3. notmuch — опция для поиска, если FTS5 станет тесным **Обоснование:** мотивация пользователя (LLM из скриптов) полностью закрывается текущим форматом; Maildir даёт стандартность, но теряет человекочитаемость, удобство LLM и требует парсинга MIME. Гибрид (email.md + экспорт в Maildir/ notmuch) даёт лучшее из двух миров. Окончательный вывод — после замеров. ## Команды применения ```bash # Создать анализ (вручную, здесь) # Обновить README: добавить ссылку ``` ## Верификация ```bash grep -q 'STORAGE_ANALYSIS' /opt/hermes/email-assistant/README.md test -f /opt/hermes/email-assistant/STORAGE_ANALYSIS.md find /opt/hermes/email -name 'email.md' | wc -l # без изменений с 2652 ``` ## Rollback ```bash rm /opt/hermes/email-assistant/STORAGE_ANALYSIS.md # убрать ссылку из README.md ```