Repository navigation
Conversation
Silthus
force-pushed
the
sbx-api/sa2-fallback
branch
from
October 31, 2026 19:09
2929fc1 to
a302e37
Compare
Silthus
force-pushed
the
sbx-api/sa2-fallback
branch
from
October 31, 2026 19:47
96c19c6 to
fe91d20
Compare
…sender A code send that names no from, in a project with no verified sender of its own, now goes out through the sandbox sender. A named sandbox from and a reply_to are refused. The pipeline's sandbox refusals reach the caller, and the usage and first-send events carry the delivery mode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A code send provisions the sandbox integration with the endpoint's checks, not its event, and a blocked organization gets sender_not_verified before the CDP API runs. The CDP API and the worker find a new integration the replica lacks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed sender A sender with no address is the default one, so the caller's address no longer needs to travel beside it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Silthus
force-pushed
the
sbx-api/sa2-fallback
branch
from
November 1, 2026 14:01
fe91d20 to
baeb60d
Compare
This was referenced Nov 1, 2026
#585 reports a project's first code send through one operation; the merge keeps that operation and passes it this part's delivery_mode property. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of map #461 (sandbox sender for API sends, slice SA2). Stacked on SA1 (#636, #637, #638, split from #632) through
sbx-api/integration-django, a merge of #585, #586 and #638.Problem
fromanswers400 sender_not_verified.Merge Danger
Warning
🔴 Merge risk: high · two-way door: a revert brings back
sender_not_verifiedfor these sendsworkflows-email-from-codeandworkflows-sandbox-sender. A project with its own verified sender sees no change.Changes
A code send with no
fromgains a fallback to the sandbox sender:flowchart LR A[code send without from]:::y --> B{default sender verified?} B -- yes --> C[own sender]:::b B -- no --> D[400 sender_not_verified]:::r classDef b fill:#1d4aff,stroke:#1d4aff,color:#fff; classDef r fill:#f54e00,stroke:#f54e00,color:#fff; classDef y fill:#f9bd2b,stroke:#f9bd2b,color:#000;flowchart LR A[code send without from]:::y --> B{default sender verified?} B -- yes --> C[own sender]:::b B -- no --> E{any own verified sender?} E -- yes --> D[400 sender_not_verified]:::r E -- no --> F[sandbox sender]:::b classDef b fill:#1d4aff,stroke:#1d4aff,color:#fff; classDef r fill:#f54e00,stroke:#f54e00,color:#fff; classDef y fill:#f9bd2b,stroke:#f9bd2b,color:#000;fromon the sandbox address or its domain answers400 sender_not_verifiedonfrom. Areply_toanswers400 invalid_requestonreply_to.503 sandbox_check_failedbecomes503 delivery_unavailable, saying nothing was sent.delivery_mode. The response doesn't.How did you test this code?
Test seams: the
send/email/route through the DRF client with cdp-api mocked (TestTransactionalEmailThroughTheSandboxSender).Test rationale: the fallback, the verified sender without a default, the flag off, each refused
fromandreply_to, each forwarded refusal, and the mode on a first send and a replay.Proofs (saved with
fleet proof):fromandreply_toget 400, and a replay claims nothing.delivery_modeanswer.CI: this PR sits on an integration base until the sandbox stack (through #587) and the send stacks (through #584 and #585) reach master.
Release status
Docs update
docs/internal/workflows-email-sending-tiers.mdgains "Sandbox sends from code".🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: Claude Code, Claude Opus 5.5 (claude-opus-5-5)
Skills:
/tdd,/writing-tests,/improving-drf-endpoints,/writing-user-facing-copy,/qa-swarm,/pr-description,/writing-pr-descriptionsfrom, and only when the project has no verified sender of its ownfrom?sender_not_verifiedonfrom, replacing the plannedsender_not_allowed, which this base doesn't have503 delivery_unavailable, saying nothing was sentsender_not_verified, as before the sandbox existed, so the answer doesn't reveal the blockInvolvement: one design pass, a 7-lens security swarm, a 5-lens fix round and one clean final read (GPT-6.1 Sol and Claude Opus 5.5), and a clean GPT-6.1 Sol read of each later base merge; live run, two cross-version runs and a shadow diff captured.
More context for AI agents
sbx-apiof map Map: send code-managed email templates with one PostHog call #461, Claude Code.frompath is the only way in.reply_toinstead of refusing it; a sandbox suspension'ssending_suspendedtext points at the Reputation tab; the worker'scaptureBlockedcalls, from the sandbox stack, still wait with no deadline.code_send_senderintransactional_email_workflows.py, and_accepted_sendintransactional_email.py.🤖 Generated with Claude Code