Почтовые события: ключ операции и конфликт повторного payload
Одинаковое событие не выполняется дважды; измененное вложение с прежним ID дает конфликт, а новая версия — отдельную операцию.
Задача и принятое решение
Повтор события E14 и исправленное письмо выглядят похоже, но требуют разных решений. Слияние по теме теряет редакцию, обработка каждого доставки создает дубликаты.
Я связал ключ события с неизменяемой парой message ID и версии вложения. Повтор возвращает сохраненный исход. При другом payload под прежним ключом обработка останавливается; E15 получает собственную запись.
Почта никуда не отправляется. Проверяется обработчик событий на открытом наборе и сохраненные решения в памяти.
Проверить решение
Измените исходные строки или параметры и пересчитайте результат. Данные остаются в этой странице.
| Событие | Письмо | Версия | Решение |
|---|---|---|---|
| E14 | M7 | v1 | Выполнено |
| E14 | M7 | v1 | Сохраненный результат |
| E14 | M7 | v2 | Конфликт payload |
| E15 | M7 | v2 | Выполнено |
Исходный набор
Авторский набор событий и полные тексты. Все решения выполняются локальным кодом, внешняя модель не вызывается.
Изменить входные строки
Посмотреть исходные строки
| Событие | Письмо | Версия |
|---|---|---|
| E14 | M7 | v1 |
| E14 | M7 | v1 |
| E14 | M7 | v2 |
| E15 | M7 | v2 |
Что получилось
E14/v1 выполнен один раз, одинаковый повтор вернул сохраненный исход. E14/v2 остановлен как конфликт содержимого, E15/v2 выполнен отдельно. Фокус проверки — ключ события и версия вложения; транспортная потеря ответа не моделируется.
Выполненная проверка
| Проверка | Результат |
|---|---|
| Два выполнения, один повтор и один конфликт содержимого | Пройдена |
| Третий одинаковый eventId не запускает обработку повторно | Пройдена |
| Новый message ID под прежним событием отклоняется | Пройдена |
Стенд проверяет ключ и payload последовательно. Распределенное исполнение, SMTP и внешний exactly-once здесь не имитируются.
Скачать материалы и повторить проверку
source.json · source.csv · result.json · result.csv · engine.js · verify.cjs · checks.json · style.css
Локальная проверка: node verify.cjs. Нужен Node.js; сетевые обращения не выполняются.