feat(growth): attribute campaign sends per template with a bounded Resend tag - #1020
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
blove
enabled auto-merge (squash)
September 5, 2026 21:44
blove
force-pushed
the
blove/eloquent-chebyshev-59c2a5
branch
from
September 5, 2026 21:44
b7dbf94 to
3286250
Compare
Contributor
…send tag Every send_step now carries a campaign_template tag alongside campaign_version and campaign_step, so replies, bookings, and unsubscribes can be attributed to the exact template that rendered the message rather than only its step. - draftFor returns the chosen template id (immediate, day-3, day-8, or the cited evidence angle) and prepareCampaignMessage exposes it. - RecipientEmailInput accepts campaignTemplate; resend.ts validates it against a closed allowlist, requires it for send_step, and rejects it on any other job kind. The value is a fixed id, never contact data. - The webhook receiver's canonical-send check counted send_step tags exactly, which would have downgraded every new send's early webhook from retryable to dropped. It now accepts the legacy 4-tag shape for in-flight sends and the 5-tag shape when the template is allowlisted. Internal analytics stays step-only by decision; the Resend dashboard is the v1 surface for per-template numbers. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
blove
force-pushed
the
blove/eloquent-chebyshev-59c2a5
branch
from
September 5, 2026 22:45
3286250 to
b951bdd
Compare
Contributor
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.
Summary
campaign_templateResend tag (immediate, day-3, day-8, streaming_foundation, debugging_layers, event_state_boundary) to every send_step so replies, bookings, and unsubscribes can be attributed per template, not just per step.draftForthroughPreparedCampaignMessageandRecipientEmailInput;resend.tsvalidates it against a closed allowlist, requires it for send_step, and rejects it on any other job kind. Never contact data.retryable_unmatched_jobinto a droppedunmatched_job. It now accepts both the legacy 4-tag and the new 5-tag shape.Internal analytics stays step-only by decision; the Resend dashboard is the v1 surface for per-template numbers.
Test plan
npx vitest run --config apps/lifecycle/vitest.config.ts(399 passed)npx vitest run --config libs/growth/vite.config.mts(471 passed)npx nx run lifecycle:checknpx nx run growth:build🤖 Generated with Claude Code