# email-classification Specification ## MODIFIED Requirements ### Requirement: Классификация каждого нового письма Классификация писем (Qwen3:8b через Ollama) MUST запускаться не только по расписанию (cron `mail-classify-handlers`), но и по событиям из ChangeLog (новое письмо / изменённое письмо), которые генерирует сервис `email-imap-realtime-sync`. Механика классификации (теги info/urgent/task/meeting + `classification`/`classification_reason` в frontmatter) не меняется. #### Scenario: Новое письмо после архивации - **GIVEN** письмо заархивировано (`mail_archive.py`) - **WHEN** `email_classifier.py` обрабатывает письмо - **THEN** в frontmatter появляются `classification` и `classification_reason` #### Scenario: Новое письмо классифицируется сразу - **GIVEN** в ChangeLog появилось событие `added` - **WHEN** анализатор `email-change-analyzer` обрабатывает событие - **THEN** письмо классифицируется (тег + обоснование в frontmatter) без ожидания cron #### Scenario: Событие обработано повторно (идемпотентность) - **GIVEN** письмо уже классифицировано (есть `classification` в frontmatter) - **WHEN** анализатор видит то же событие повторно (например, после рестарта) - **THEN** классификация не выполняется заново (идемпотентно, как сейчас)