Skip to content

[pull] main from TryGhost:main#1045

Merged
pull[bot] merged 7 commits into
code:mainfrom
TryGhost:main
Apr 9, 2026
Merged

[pull] main from TryGhost:main#1045
pull[bot] merged 7 commits into
code:mainfrom
TryGhost:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 9, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

EvanHahn and others added 7 commits April 9, 2026 11:24
ref 25e1433

I found that my agent wouldn't use these utility functions by default. I
tweaked the instructions to better highlight that.
ref https://linear.app/ghost/issue/BER-3523

Added gift subscription notification columns to the `users` table so a
user can configure if they want to receive notifications for gift
subscription related actions (purchase, redemption)
…7268)

closes https://linear.app/ghost/issue/NY-1214/

This wires up the welcome email renderer to conditionally include the
site's publication icon in the header. If the publication icon exists,
and the `show_header_icon` email design setting is enabled, it will
render the publication icon in the welcome emails.

This PR originally focused on updates to the renderer; for easier shipping, another PR was merged into it to add the toggle to the customize modal.
closes https://linear.app/ghost/issue/NY-1210/

- enabling design customization at GA would otherwise add publication
title and icon to existing welcome emails without user action
- limiting the data backfill to sites that already have welcome email
automations preserves current output for existing installs
- leaving new and not-yet-enabled sites on the default values keeps the
intended first-run behavior intact
)

closes https://linear.app/ghost/issue/NY-1218/

## What this changes

- fixed the welcome email customization modal so `Escape` no longer
bypasses the dirty-state flow
- kept Escape handling local to the welcome email UI instead of changing
shared Shade overlay behavior globally
- fixed nested color picker popovers so the first `Escape` closes the
picker without also opening the unsaved-changes dialog
- fixed nested font select menus so the first `Escape` closes the menu
without also opening the unsaved-changes dialog
- kept the confirmation dialog scoped so its own `Escape` handling does
not cascade back into the parent modal

## Why

The original bug was not limited to the top-level customize modal. The
same Escape propagation issue also showed up in nested portalled
controls inside the modal, which could still skip straight to the save
warning flow. This PR now covers the full interaction stack so `Escape`
always closes the topmost UI first.

## Testing

- added E2E coverage for the customize modal dirty-state Escape flow
- added E2E coverage for the color picker Escape flow
- added E2E coverage for the font select Escape flow
- ran `PLAYWRIGHT_HTML_OPEN=never yarn workspace @tryghost/e2e test
e2e/tests/admin/settings/member-welcome-emails.test.ts`
- ran `PLAYWRIGHT_HTML_OPEN=never yarn workspace @tryghost/e2e
test:single "Escape closes welcome email"`
closes https://linear.app/ghost/issue/ONC-1623/

When deep-linking to an admin route (e.g. `/ghost/#/tags`) while logged
out, the page rendered blank instead of showing the signin screen. This
was caused by the `react-fallback` catch-all route lacking the
authentication check that was previously on the now-removed Ember route
files.

- Added `react-fallback` route extending `AuthenticatedRoute` to enforce
signin for all React-rendered routes
- Persisted intended URL in `sessionStorage` before the auth redirect so
the user is returned to their original destination after signing in
(works for both React and Ember routes)
- Made `LoginPage.logout()` wait for the signin page to fully load
before resolving to avoid race conditions with subsequent navigations in
e2e tests
- Added e2e tests covering signin redirect for both React (`/tags`) and
Ember (`/posts`) routes
…27319)

When running e2e tests locally, the test report server runs
automatically if there were any failures instead of exiting cleanly.
This is especially annoying when agents run the e2e tests themselves, as
they will hang indefinitely on the command, not realizing that the tests
have already run.

This disables this behavior, so the e2e tests will exit cleanly even if
tests fail. The html report is still generated and can be opened
manually.
@pull pull Bot locked and limited conversation to collaborators Apr 9, 2026
@pull pull Bot added the ⤵️ pull label Apr 9, 2026
@pull pull Bot merged commit 6813bd4 into code:main Apr 9, 2026
2 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants