Add transactional gift delivery emails - #29850
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
812591e to
bd6b9e6
Compare
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 812591e832
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const subject = buyerName | ||
| ? this.t('{buyerName} sent you a gift', {buyerName}) | ||
| : this.t('You\'ve received a gift'); |
There was a problem hiding this comment.
Preserve literal characters in delivery email text
When the buyer, recipient, tier, or site name contains characters such as &, ', or <, the Ghost i18n namespace HTML-escapes interpolated values by default, so this subject becomes e.g. Sam & Alex sent you a gift; the new plain-text renderer likewise omits interpolation: {escapeValue: false} from all dynamic t() calls. The existing reminder and purchase-confirmation text renderers explicitly disable escaping, so apply the same option to the delivery subject and plain-text translations.
Useful? React with 👍 / 👎.
|
| Command | Status | Duration | Result |
|---|---|---|---|
nx run ghost:test:ci:integration |
✅ Succeeded | 2m 58s | View ↗ |
nx run @tryghost/admin:test:acceptance |
✅ Succeeded | 6m 39s | View ↗ |
nx run ghost:test:integration |
✅ Succeeded | 3m 1s | View ↗ |
nx run-many -t test:unit -p ghost,@tryghost/com... |
✅ Succeeded | 28s | View ↗ |
nx run ghost:test:legacy |
✅ Succeeded | 3m | View ↗ |
nx run ghost-monorepo:lint:boundaries |
✅ Succeeded | 20s | View ↗ |
nx run ghost:test:e2e |
✅ Succeeded | 2m 35s | View ↗ |
nx run-many -t lint -p ghost,@tryghost/i18n,@tr... |
✅ Succeeded | 1m 43s | View ↗ |
Additional runs (4) |
✅ Succeeded | ... | View ↗ |
💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗
☁️ Nx Cloud last updated this comment at 2026-08-11 16:55:54 UTC
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## agent/ber-3851-delivery-persistence #29850 +/- ##
=======================================================================
- Coverage 75.38% 75.32% -0.07%
=======================================================================
Files 1610 1611 +1
Lines 140938 141142 +204
Branches 17455 17464 +9
=======================================================================
+ Hits 106247 106311 +64
- Misses 33613 33753 +140
Partials 1078 1078
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
bd6b9e6 to
16d56cd
Compare
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
16d56cd to
89ea0ba
Compare
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
89ea0ba to
539e35f
Compare
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
539e35f to
00e1023
Compare
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.
ref https://linear.app/ghost/issue/BER-3851/establish-immediate-email-delivery-for-gift-subscriptions Delivery needs a reusable, tracking-free transport boundary and localized recipient content before any scheduler or checkout path can call it.
00e1023 to
a020f7a
Compare
There was a problem hiding this comment.
🌐 Automated translation review
Verdict: ⏭️ Skipped — PR is too large for automated review
Reviewed 0 translations across 61 files.
This PR touches 61 translation files, which is beyond the automated reviewer's per-PR limit (max 15 files / 500 lines). A maintainer should review the translations manually.
Advisory review by i18n-review-bot. Non-blocking — a maintainer still owns the merge decision, and the bot cannot approve PRs on its own. Translator expertise wins where there is doubt.

Summary
Stack
3 of 6. Stacked on #29849; the delivery lifecycle and scheduler PR is next.
Issue: https://linear.app/ghost/issue/BER-3851/establish-immediate-email-delivery-for-gift-subscriptions