mirror of
https://gitverse.ru/kpa39l/openspec-lab.git
synced 2026-09-29 09:15:01 +00:00
b047e3a21d
- STORAGE_ANALYSIS.md: сравнение email.md/Maildir/MBOX/notmuch, рекомендация остаться на email.md + tags в frontmatter + опц. экспорт Maildir - 3 REQUIREMENTS в spec email-storage-format, change архивирован - Задача 4 из портфеля веб-UI закрыта
85 lines
4.9 KiB
Markdown
85 lines
4.9 KiB
Markdown
# 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
|
||
``` |