{
  "protocol_version": 1,
  "article_slug": "agentmail-saas-duplicate-sends-recovery",
  "reviewed_on": "2026-10-08",
  "evidence_status": "proposed_protocol_not_executed",
  "not_a_vendor_sdk_schema": true,
  "sources": [
    "https://www.agentmail.to/docs/multi-tenancy",
    "https://www.agentmail.to/docs/idempotency",
    "https://www.agentmail.to/docs/webhook-verification"
  ],
  "locales": {
    "en": {
      "title": "AgentMail for SaaS: Tenant Isolation and Duplicate-Send Recovery",
      "cases": [
        {
          "Injected failure": "Two workers claim one intent",
          "Required observation": "One wins; one provider message"
        },
        {
          "Injected failure": "Response lost after provider accepts",
          "Required observation": "Same intent reconciled, no new key"
        },
        {
          "Injected failure": "Duplicate webhook",
          "Required observation": "One ledger update, no new send"
        },
        {
          "Injected failure": "Retry after more than 24 hours",
          "Required observation": "Durable ledger stops blind replay"
        },
        {
          "Injected failure": "Recipient or body edited after approval",
          "Required observation": "Fresh approval required"
        },
        {
          "Injected failure": "Tenant A supplies tenant B's inbox ID",
          "Required observation": "Denied before provider call"
        },
        {
          "Injected failure": "Actor permission revoked before execution",
          "Required observation": "Intent blocked"
        }
      ],
      "steps": []
    },
    "de": {
      "title": "AgentMail im SaaS: Mandantentrennung und doppelte E-Mails",
      "cases": [
        {
          "Eingebrachter Fehler": "Zwei Worker reservieren denselben Intent",
          "Erforderliche Beobachtung": "Einer gewinnt, eine Anbieter-Nachricht"
        },
        {
          "Eingebrachter Fehler": "Antwort nach Annahme durch Anbieter verloren",
          "Erforderliche Beobachtung": "Derselbe Intent wird geklärt, kein neuer Schlüssel"
        },
        {
          "Eingebrachter Fehler": "Doppelter Webhook",
          "Erforderliche Beobachtung": "Eine Journalaktualisierung, kein neuer Versand"
        },
        {
          "Eingebrachter Fehler": "Wiederholung nach mehr als 24 Stunden",
          "Erforderliche Beobachtung": "Dauerhaftes Journal verhindert blinden Neuversand"
        },
        {
          "Eingebrachter Fehler": "Empfänger oder Inhalt nach Freigabe geändert",
          "Erforderliche Beobachtung": "Neue Freigabe nötig"
        },
        {
          "Eingebrachter Fehler": "Mandant A übergibt Postfach-ID von B",
          "Erforderliche Beobachtung": "Ablehnung vor Anbieteraufruf"
        },
        {
          "Eingebrachter Fehler": "Berechtigung vor Ausführung widerrufen",
          "Erforderliche Beobachtung": "Intent gesperrt"
        }
      ],
      "steps": []
    },
    "es": {
      "title": "AgentMail para SaaS: Aislamiento y recuperación de envíos duplicados",
      "cases": [
        {
          "Fallo introducido": "Dos workers reservan una intención",
          "Observación exigida": "Solo uno gana; un mensaje del proveedor"
        },
        {
          "Fallo introducido": "Respuesta perdida después de aceptar",
          "Observación exigida": "Se reconcilia la misma intención, sin clave nueva"
        },
        {
          "Fallo introducido": "Webhook duplicado",
          "Observación exigida": "Una actualización, ningún envío nuevo"
        },
        {
          "Fallo introducido": "Reintento después de más de 24 horas",
          "Observación exigida": "El registro persistente impide repetir a ciegas"
        },
        {
          "Fallo introducido": "Destinatario o cuerpo cambiado tras aprobar",
          "Observación exigida": "Nueva aprobación obligatoria"
        },
        {
          "Fallo introducido": "Cliente A aporta el buzón de B",
          "Observación exigida": "Rechazo antes de llamar al proveedor"
        },
        {
          "Fallo introducido": "Permiso revocado antes de ejecutar",
          "Observación exigida": "Intención bloqueada"
        }
      ],
      "steps": []
    },
    "zh": {
      "title": "SaaS 集成 AgentMail：租户隔离与重复邮件恢复",
      "cases": [
        {
          "注入故障": "两个工作进程领取同一意图",
          "必须观察到的结果": "只有一个成功，供应商只生成一封邮件"
        },
        {
          "注入故障": "供应商接受后响应丢失",
          "必须观察到的结果": "核对同一意图，不创建新密钥"
        },
        {
          "注入故障": "webhook 重复",
          "必须观察到的结果": "只更新一次，不触发新发送"
        },
        {
          "注入故障": "超过24小时后重试",
          "必须观察到的结果": "持久记录阻止盲目重发"
        },
        {
          "注入故障": "批准后改变正文或收件人",
          "必须观察到的结果": "必须重新批准"
        },
        {
          "注入故障": "租户 A 提供租户 B 的邮箱 ID",
          "必须观察到的结果": "调用供应商前拒绝"
        },
        {
          "注入故障": "执行前撤销执行人权限",
          "必须观察到的结果": "阻止该意图"
        }
      ],
      "steps": []
    }
  },
  "run_configuration": {
    "product_versions": null,
    "model": null,
    "fixture_revision": null,
    "permissions": null,
    "time_budget_seconds": null,
    "cost_budget": null
  },
  "trial_results": [],
  "report_fields": [
    "attempt_id",
    "case_id",
    "observed_final_state",
    "acceptance_passed",
    "independent_evidence",
    "duration_seconds",
    "total_cost",
    "human_review_minutes",
    "unresolved_effects"
  ]
}
