Skip to content

v0.16.0

Choose a tag to compare

@heliocosta-dev heliocosta-dev released this 17 Oct 21:46
· 118 commits to main since this release
463695c

MillionSend v0.16.0 makes releasing quarantined mail a reviewed decision and puts the same release rules on every channel. Self-hosted instances now bring Postgres and the backup schedule back after a host reboot. No database migrations. (#149, #146, #147, #145)

Releasing held mail (#149)

Dashboard

  • One quiet "Release" button per place a held email shows: its card in the thread, its row in Needs review, and its banner on the Received email page.
  • Every release opens a dialog. It shows:
    • why the email was held: the reason, the risk scores, what screening found, and whether hidden text was removed;
    • what releasing does, for that inbox;
    • the email's text.
  • A tick for the riskiest holds. Prompt injection, phishing, virus and failed authentication holds can be released only after you tick "I've read this email and it's safe for my agent".
  • Trusting the sender is a deliberate choice inside the dialog. It's offered only for a "not on the allowlist" hold from a verified sender, and only to owners and admins, because the allowlist lets that address's later mail skip screening. The separate "Release and trust sender" button is gone.
  • Released mail keeps a "Released by …" badge in the thread.

Rules, on the dashboard, REST and MCP alike

  • Screened at release: mail held before screening could read it (not on the allowlist, sender not verified, failed authentication) is screened when released. A risky one stays held: REST answers 409 held_by_screening.
  • Trusting a sender (trust_sender) is allowed only for a "not on the allowlist" hold from an authenticated sender. Anything else answers 403 trust_not_allowed.
  • MCP clients can't release content holds (403 forbidden). Their other releases go through only on the judge's verdict; when screening can't run, the release answers 503 screening_unavailable with Retry-After. The release_email tool no longer accepts trust_sender. Inbox-scoped keys still can't release.
  • Webhook events for released mail now list the email's attachments.

Console

  • Trust & safety review is one click from any team. Every team in the console's Teams list opens its review page from the row's menu. (#147)

Self-hosting

  • Postgres and the backup schedule come back after a host reboot. Both compose files give them restart: unless-stopped; Postgres used to have no restart policy. An unconfigured backup container now idles instead of exiting, so it doesn't restart-loop. (#146)
  • Docs: changing a webhook's events with PATCH /webhooks/{id} replaces the whole list. The docs now say to send it in full. (#145)

Upgrading a self-hosted instance

  • No database migrations.
  • Copy the two restart: lines from deploy/docker-compose.yml into your compose file (postgres and backup), so they survive reboots. Your next docker compose up -d recreates both containers once, which takes a few seconds.
  • Without an ABUSE_JUDGE, MCP clients can no longer release held mail (503 screening_unavailable). People in the dashboard and full-access keys still can.