warmbox/docs/sprints/sprint-2.2.md

25 lines
1,008 B
Markdown

# Sprint 2.2 — Spam rescue hardening
**Status:** Done
## Backend
- **Per-UID matching:** Rescuer fetches each spam UID, matches `message-id` / from+subject, moves only matched messages
- **Folder auto-discovery:** `resolveSpamFolder()` tries presets then IMAP LIST; persists `spamFolderPath` on inbox
- **Auto-pause:** `checkCampaignSpamThresholds()` pauses campaigns when 3 consecutive days exceed 30% spam rate (inbox < 70%)
- **Mailbox metadata:** `lastSpamRescuedAt` updated on successful rescue
## Dashboard
- Paused campaign alert on dashboard and campaign detail
- High spam rate alert strip (inbox < 70% today)
- Placement stacked bar chart on campaign overview
- Activity badges: `rescued_from_spam`, `engaged_no_reply`
- Mailbox detail shows spam folder path and last rescue time
## Verification
1. Simulate spam placement in test logs
2. Run rescuer job from Settings → Jobs
3. Confirm per-log rescue status (not bulk sender match)
4. After 3 high-spam days, campaign auto-pauses