- mail_archive.py: фикс вложений himalaya --dir → --downloads-dir; attachments/ только при has_attachment; идемпотентно - email_classifier.py: Qwen3:8b (Ollama) → теги info/urgent/task/meeting в frontmatter email.md - email_handlers.py: urgent→Telegram (Bot API+SOCKS5), task→Radicale VTODO, meeting→Radicale VEVENT; handled_* идемпотентность; --dry-run - .gitignore: игнор *.env.bak* - openspec: чейндж email-classification-handlers (в работе) - STATUS/TODO/WALKTHROUGH: прогресс сессии, подводные камни Radicale (http.client, Depth:1, формат дат)
2.9 KiB
Purpose
Скачивание вложений письма в каталог этого письма. Сейчас mail_archive.py
вызывает himalaya attachment download --dir, но правильный флаг в Himalaya —
--downloads-dir, из-за чего команда падает (exit 2), ошибка молча глотается
except: pass, и папка attachments/ всегда пустая. Вложения теряются.
ADDED Requirements
Requirement: Вложения сохраняются в каталог письма
Для каждого письма с вложениями (флаг has_attachment: true в frontmatter)
вложения MUST быть сохранены в подкаталог attachments/ каталога письма
(/opt/hermes/email/<folder>/YYYY/MM/<uid>/attachments/).
Scenario: Письмо с вложением архивировано
- WHEN
mail_archive.pyзаархивировал письмо сhas_attachment: true - THEN файлы вложений лежат в
<msg_dir>/attachments/и совпадают с вложениями на IMAP-сервере
Requirement: Правильный флаг Himalaya
Скачивание вложений MUST использовать флаг --downloads-dir (а не несуществующий
--dir) команды himalaya attachment download, и передавать ему каталог письма.
Scenario: Вызов himalaya с корректным флагом
- WHEN
get_attachments()выполняется для письма - THEN используется
himalaya attachment download --folder <folder> --downloads-dir <msg_dir>/attachments <uid>, exit code 0 при успехе
Requirement: Учёт отсутствия вложений
Если письмо не имеет вложений (has_attachment: false или команда вернула
«нет вложений»), скрипт MUST NOT создавать пустую папку attachments/ и MUST NOT
считать это ошибкой.
Scenario: Письмо без вложений
- WHEN
mail_archive.pyобрабатывает письмо без вложений - THEN каталог
attachments/не создаётся, ошибка не логируется
Requirement: Повторная обработка существующих писем
Повторный запуск mail_archive.py MUST NOT повторно качать уже сохранённые
вложения (проверка по наличию каталога/файлов).
Scenario: Повторный запуск
- WHEN
mail_archive.pyзапущен повторно на письме с уже скачанными вложениями - THEN вложения не скачиваются повторно (идемпотентность)