Skip to content

[comp] Production Deploy#2852

Merged
claudfuen merged 5 commits into
releasefrom
main
May 15, 2026
Merged

[comp] Production Deploy#2852
claudfuen merged 5 commits into
releasefrom
main

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot commented May 14, 2026

This is an automated pull request to release the candidate branch into production, which will trigger a deployment.
It was created by the [Production PR] action.


Summary by cubic

Adds a dedicated sender for Trust Portal emails via RESEND_FROM_TRUST_PORTAL and moves FROM resolution into the Trigger.dev send-email task using a channel. The API now passes channel (or honors a from override), so Render no longer reads RESEND_FROM_* for single-email sends.

  • New Features

    • Added trustPortal flag to triggerEmail() to select RESEND_FROM_TRUST_PORTAL (falls back to RESEND_FROM_SYSTEM).
    • Trust Portal flows (NDA signing, access granted/reclaim, request notification) now set trustPortal: true.
    • Added RESEND_FROM_TRUST_PORTAL to .env.example files.
  • Migration

    • Optional: set RESEND_FROM_TRUST_PORTAL in Trigger.dev. Render no longer needs RESEND_FROM_* for the single-email path.

Written for commit d028747. Summary will update on new commits.

github-actions Bot and others added 2 commits May 14, 2026 20:16
…2851)

Add RESEND_FROM_TRUST_PORTAL so Trust Portal access and NDA emails
can ship from a brand-specific sender (e.g., noreply@mail.trust.inc),
distinct from the generic system sender.

triggerEmail() gets a new `trustPortal: true` flag that resolves the
new env var, with graceful fallback to RESEND_FROM_SYSTEM so existing
deploys keep working until the env var is set in Trigger.dev / Render.

TrustEmailService (NDA signing, access granted, access reclaim, access
request notification) now uses `trustPortal: true`.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 14, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
comp-framework-editor (staging) Ready Ready Preview, Comment May 14, 2026 11:50pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
app (staging) Skipped Skipped May 14, 2026 11:50pm
portal (staging) Skipped Skipped May 14, 2026 11:50pm

Request Review

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 4 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Previously triggerEmail() resolved the FROM address on the API host
(Render) by reading RESEND_FROM_* env vars and passing the literal
address to the Trigger.dev task. This forced sender env vars to be
duplicated across Render and Trigger.dev environments.

Move resolution into the send-email task:
- triggerEmail() now passes a channel ('marketing' | 'system' |
  'trustPortal' | 'default') instead of a resolved address
- send-email.ts reads RESEND_FROM_* on Trigger.dev's side and picks
  the right sender via a switch on channel
- params.from is still honored as an explicit override
- Unknown/missing channel falls through to the outer chain, preserving
  prior behavior for direct task callers (e.g., EmailController)

Public API of triggerEmail() is unchanged — callers still pass the
same marketing/system/trustPortal boolean flags. No call sites need
to change.

Net effect: Render no longer needs RESEND_FROM_* vars to be set —
Trigger.dev becomes the single source of truth for email sender
configuration.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Follow-up to the channel refactor — the internal /v1/internal/email/send
endpoint was still reading RESEND_FROM_SYSTEM/RESEND_FROM_DEFAULT on the
API host to compute the from address. With the rest of the pipeline now
resolving on Trigger.dev, this controller is the last Render-side reader
of those env vars in the email flow.

Pass channel ('system' | 'default') based on dto.system instead. The
Trigger.dev task resolves the env var on its side. dto.from is still
honored as an explicit override via params.from.

After this lands, Render genuinely doesn't need any RESEND_FROM_* var
for the single-email path. send-batch-email still reads them on Render
and is out of scope here.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor(email): move FROM resolution into Trigger.dev task

Previously triggerEmail() resolved the FROM address on the API host
(Render) by reading RESEND_FROM_* env vars and passing the literal
address to the Trigger.dev task. This forced sender env vars to be
duplicated across Render and Trigger.dev environments.

Move resolution into the send-email task:
- triggerEmail() now passes a channel ('marketing' | 'system' |
  'trustPortal' | 'default') instead of a resolved address
- send-email.ts reads RESEND_FROM_* on Trigger.dev's side and picks
  the right sender via a switch on channel
- params.from is still honored as an explicit override
- Unknown/missing channel falls through to the outer chain, preserving
  prior behavior for direct task callers (e.g., EmailController)

Public API of triggerEmail() is unchanged — callers still pass the
same marketing/system/trustPortal boolean flags. No call sites need
to change.

Net effect: Render no longer needs RESEND_FROM_* vars to be set —
Trigger.dev becomes the single source of truth for email sender
configuration.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(email): emailcontroller send uses channel not env reads

Follow-up to the channel refactor — the internal /v1/internal/email/send
endpoint was still reading RESEND_FROM_SYSTEM/RESEND_FROM_DEFAULT on the
API host to compute the from address. With the rest of the pipeline now
resolving on Trigger.dev, this controller is the last Render-side reader
of those env vars in the email flow.

Pass channel ('system' | 'default') based on dto.system instead. The
Trigger.dev task resolves the env var on its side. dto.from is still
honored as an explicit override via params.from.

After this lands, Render genuinely doesn't need any RESEND_FROM_* var
for the single-email path. send-batch-email still reads them on Render
and is out of scope here.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claudio Fuentes <claudio@trycomp.ai>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel vercel Bot temporarily deployed to staging – portal May 14, 2026 23:49 Inactive
@vercel vercel Bot temporarily deployed to staging – app May 14, 2026 23:49 Inactive
@claudfuen claudfuen merged commit 9d62875 into release May 15, 2026
13 checks passed
@claudfuen
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.55.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant