Files

85 lines
4.9 KiB
Markdown
Raw Permalink 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.
# 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
```