Skip to content

Conversation

@madewithlove-machine-user

Syncing fork to upstream release v6.6.1.

yovko and others added 30 commits October 26, 2025 17:09
no issue

- dead code from a very old file-upload component rendering workaround that was needed with an early version of theme management UI
ref https://linear.app/ghost/issue/BER-2913/port-sidebar

- As part of creating the React app shell we needed to rebuild the app
sidebar. This PR contains a basic implementation that allows navigation
within the app and is structured properly. It lacks functions so that
the PR is easier to reason about.

**Missing features**

- Search button is non-functional
- New post button is non-functional
- Post list views are limited to the built-in static ones (Drafts,
Scheduled, Public)
- Dark mode toggle is completely missing
- Toggle sidebar function is missing
- User menu is very basic and lacks all existing links
- Member count is static (hardcoded to 1,000)
- Ghost(Pro) "Upgrade" button is missing
- Details like hover states, animations etc. are missing
- Avatar profile image and initials are hardcoded

---------

Co-authored-by: Jonatan Svennberg <jonatan.svennberg@gmail.com>
…st#25270)

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

- We retired the dashboard route in favor of analytics, but it was
missed in a few places
- This PR updates it in the design modal that shows up during site
setup, as well as for users with permissions below admin
- Now when those modals are closed they'll be redirected to /analytics
instead of /dashboard (in the case of low-permission users, it actually
falls back to something other than /analytics. For contributors, for
example, it falls back to /posts. But that's elsewhere in the code)
- Not user visible since /dashboard was redirecting to /analytics
anyway, but more correct
- in DesignModal, also switches from `window.location.hash` to
`updateRoute`
- Considered creating a constant for routes, but that seems like a
larger lift than this ticket was meant for
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| ghost/traffic-analytics | patch | `1.0.19` -> `1.0.20` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - Only on Sunday and Saturday ( * * * * 0,6 ), Between 12:00
AM and 12:59 PM, only on Monday ( * 0-12 * * 1 ) in timezone Etc/UTC.

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTYuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE1Ni4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
no issue

In Ghost 6.0 the old Ember-powered dashboard was replaced with a React version but the dead code wasn't cleaned up.

- updated `dashboard` route to redirect to the `stats-x` route without creating an unnecessary history entry
- removed dashboard template and all of the unused components
- removed dashboard-mocks service as that was only possible to enable via the old dashboard
- removed usage of dashboard-mocks service from the dashboard-stats service
no_ref
- Previously, `PRESERVE_ENV=true` would skip removing containers after each individual test, causing port allocation errors when running tests again. 
- Now it only preserves the final state after all tests complete, which is the intended debugging behavior.
ref https://linear.app/ghost/issue/BER-2933/fix-button-regressions

- During to React port work we introduced a few regressions to buttons:
`icon` buttons and icons sizing became off and borders got lost on
outline buttons.
…#25266)

* Renamed methods and variables for clarity
* Reorganized code structure 
* Reduced redundant comments to make the test infrastructure easier to read and understand.
Ref https://linear.app/ghost/issue/BER-2916/remove-router-basepaths

Removing the base path and updating all links and urls within the app to
include the base path directly makes links and URLs work the same
regardless of if the app is mounted in Ember or as a sub-routes in the
new React admin shell.
TryGhost#25277)

ref
https://linear.app/ghost/issue/NY-712/improve-performance-of-verificationtrigger-queries

For sites that are already verified for sending email, the `VerificationTrigger` is still
running the `getSignupEvents` queries for every `MemberCreatedEvent`.
These queries are unnecessary and expensive for larger sites, so this
change removes the event handler entirely for sites that are already
verified.
ref https://linear.app/ghost/issue/BER-2913/port-sidebar

- General improvements on the React sidebars to match design standards
and add missing functions.
- Added missing menu items in user menu
- Refined icons and colors
…d codebase, applied import sort linter (TryGhost#25284)

- Moved i18n test to new e2e suite
- Removed legacy page objects that are no longer needed
- Simplified settings page by decoupling it in sections
- Applied import sort linter on new e2e
- This is the part of the cleanup effort to remove old E2E test infrastructure and use new one for the e2e tests. As we go through it, other parts of the suite are polished too.
…ryGhost#25289)

ref
https://linear.app/ghost/issue/BER-2937/improve-notification-grouping-by-adding-date-criteria

- Grouped same-type notifications only when they occur within a short
timeframe
-   Prevented unrelated notifications from being merged hours apart
-   Made grouped notifications feel timely and relevant
…host#25291)

no_ref
- Moved managers (Ghost, MySQL, Portal, Tinybird) into service-managers/subfolder for better code organization
- It aligns better with Docker Compose terminology, and separates cleaner environment manager, compose from service managers
…ryGhost#25292)

ref https://linear.app/ghost/issue/BER-2929

- we want to make these state syncing methods available to our in-development React admin shell which means we won't be able to pass them through as component props
- added new `state-bridge` service and moved the methods there to make them easier to expose later on
  - this is a straight code shuffle, no functional changes have been made
ref https://linear.app/ghost/issue/NY-721/
- updated `emailAnalytics` config and defaults to have more tunability
around alerts/logs
- added new metric for tracking email analytics throughput (behind
config)
- added new console warning for delays in the open job (behind config)
- updated logging to be more concise and specific

This is laying the groundwork for better observability in our logs for
monitoring the email analytics job. The new metric allows us to monitor
the events/s throughput for sites in question - namely, for very large
sites where they need to ingest 10ks of events, possibly within a few
minutes. Previously we couldn't do this without a lot of manual math and
searching in Elastic.

NOTE: The lagging warning for email opens is a flawed measure. We
currently only update the job timestamp _if we process events_ so if
there was a legitimate period where there were no Mailgun events, this
would be a false positive. As such, this is going to issue a warning for
sites that have 1) low activity or 2) experience any kind of outage in
the site/Mailgun. As such, it may be worth removing and skipping this,
though we can try it out.
closes https://linear.app/ghost/issue/NY-707

- adds a labs flag to be used for features related to welcome emails
Ref https://linear.app/ghost/issue/BER-2916/remove-router-basepaths

Moving the base path to a wrapping route and updating all links and urls
within the app to use either relative paths or a base-path aware
navigation hook makes links and URLs work the same regardless of if the
app is mounted by itself within Ember or as a sub-routes in the new
React admin shell.

This also makes it easier for us to eventually update the base path from
/activitypub to /network.
ref https://linear.app/ghost/issue/BER-2913/port-sidebar

- Some of the functions in the current (Ember) sidebar had some
discoverability problems (e.g. Help being too hidden in the user menu),
while others were way too in your face (e.g. dark mode switch).
- The user menu was lacking design details such as menu item icons and
proper sizing/spacing.
- Header and footer components were built inside the main component
which made code readability harder. Now they have their own components.
- `kbd` component for keyboard shortcuts were missing from Shade
ref https://linear.app/ghost/issue/BER-2943/topical-feed

-    Updated Discover to show "Top" plus selectable topic feeds
-    Kept global feed as "Top" and added topic tabs for exploration
- Updated endpoints from `/feed/global` to `/feed/discover/top` and
`/feed/discover/[topic]`
no issue

- added `#ember-modal-wormhole` element outside of the `#ember-app` element so it doesn't get hidden when on React routes
- updated Ember application template to render modals into the new `#ember-modal-wormhole` when it exists
  - if it doesn't exist, render into the app's `rootElement` to match previous behaviour and not break tests by rendering outside of the test root
ref https://linear.app/ghost/issue/BER-2943/discovery-feeds-by-topic

- as we don't have data source for this topic, removing it from the list
for now
…5301)

Fixes https://linear.app/ghost/issue/BER-2944/support-local-development-with-a-custom-domain

This adds a Vite plugin that dynamically resolves the Ghost site URL
from the backend API, enabling local development to work when Ghost is
configured with a custom domain. Previously, proxy was hard coded to
localhost:2368.
ref https://linear.app/ghost/issue/BER-2913/port-sidebar

- We didn't have an indication of the appearance mode in the current
implementation. This PR adds a switch component to Shade and uses it in
the new user menu for the dark mode button.
jonatansberg and others added 12 commits October 30, 2025 16:44
ref https://linear.app/ghost/issue/BER-2946

The recent basepath changes broke Header's page detection logic. 

This PR adds a `useCurrentPage` hook that uses `useMatches` to extract
the current page segment from the route hierarchy, handling both
`/activitypub` and empty basepaths.

Similarly, the sidebar active states were broken because links used
relative paths that didn't match the value of `location.pathname`. This
was addressed by changing the `to` prop to absolute paths and updating
`SidebarMenuLink` to prepend the correct base path.
Per discussion over in TryGhost#25282, I'm reformatting the concat unit tests to
use 'shouldCompileToExpected'.

But 'shouldCompileToExpected' doesn't take globals
as an argument, and I need them for some tests.

So... I added shouldCompileToExpectedWithGlobals, in handlebars.js. I
opted to make it a separate helper, but it could have been an update to 
shouldCompileToExpected to give it an optional 4th argument.  May revisit later.
ref https://linear.app/ghost/issue/BER-2913/port-sidebar

- The Network icon was using a default Globe icon instead of the
Fediverse/SocialWeb icon
- The chevron icon was not animating when opening the posts view submenu
…Ghost#25310)

ref https://linear.app/ghost/issue/BER-2929/

- added Ember instance initializer that makes our `state-bridge` service instance available on `window.EmberBridge.state`
- updated the react shell's framework setup to use `window.EmberBridge.state.{onUpdate,onInvalidate,onDelete}` in the same way as apps mounted inside Ember via `AdminXComponent`
ref https://linear.app/ghost/issue/BER-2929/

- the sync methods that were moved from `AdminXComponent` to `state-bridge` were never individually tested, this adds some unit tests to verify the methods do what we expect and give us a place to add further side-effect tests as we need them
…5260)

ref TryGhost#23361

---------

Co-authored-by: Cathy Sarisky <42299862+cathysarisky@users.noreply.github.com>
ref TryGhost#23361

---------

Co-authored-by: Cathy Sarisky <42299862+cathysarisky@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
no issue

- `tokenProvider.verifyOTC` has an internal dependency on the `otcRef`
being correct meaning we'd never reach the `INVALID_OTC_REF` condition
- nothing changes for user-visible behaviour but this re-order does mean
that logging can be more explicit about the type of error that has
occurred

-----

Co-authored-by: Steve Larson <9larsons@gmail.com>
ref https://linear.app/ghost/issue/BER-2977/

- during a refactor of `SingleUseTokenProvider` the
time-since-first-usage check was extracted to a method but in doing so
the pre-condition check for the token having been used was lost meaning
all magic links had an effective lifetime of `validityAfterFirstUsage`
(10 minutes)
- restored pre-condition check and added missing test that would have
caught this during the refactor
@andreascreten andreascreten merged commit e6c9455 into main Nov 19, 2025
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.