Skip to content

[pull] main from TryGhost:main#1252

Merged
pull[bot] merged 12 commits into
code:mainfrom
TryGhost:main
Jun 18, 2026
Merged

[pull] main from TryGhost:main#1252
pull[bot] merged 12 commits into
code:mainfrom
TryGhost:main

Conversation

@pull

@pull pull Bot commented Jun 18, 2026

Copy link
Copy Markdown

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 : )

vershwal and others added 12 commits June 18, 2026 15:46
ref https://linear.app/ghost/issue/HKG-1818
ref https://linear.app/ghost/issue/HKG-1819
ref https://linear.app/ghost/issue/HKG-1820

- before trusting the lazy UrlService in production we need to confirm it returns
  the same answers as the eager service on real traffic; this adds a "compare"
  mode that runs both side by side, always returns eager to callers, and reports
  any divergence
- reused the existing unused lazyRouting flag as the on/off switch, unset by
  default, so prod and self-hosters are unchanged and the lazy backend isn't even
  constructed unless the flag is set
- eager stays authoritative throughout: hasFinished tracks eager, misses are
  compared too, and lazy errors are always swallowed so a lazy bug can never
  break a request
- forward comparisons (getUrlForResource/ownsResource) are deferred with
  setImmediate and resolveUrl is teed fire-and-forget, so the comparison adds no
  request latency
- divergences and lazy throws are reported to logs with stable codes
  (LAZY_URL_PARITY_MISMATCH/LAZY_URL_COMPARE_ERROR) plus the site domain and
  resource/path context, so they can be filtered and alerted on in Elastic
- registered routers on both backends and reset lazy on reload so the two stay in
  lockstep across routes.yaml uploads
ref https://linear.app/ghost/issue/PLA-156

## What
Switches the DB-backed Vitest suites (integration / e2e) from the serial
basis (`pool:'threads'`, one worker, `isolate:false`) to
**`pool:'forks'`** so files shard across N child processes in parallel.

Each fork is its own process, so `vitest-setup-db.ts`'s per-process
DB+port derivation gives it a **collision-free database for free** — the
same isolation each Mocha process had. The derivation now appends the
per-process `sessionId` even to a CI-pinned *base* (the sqlite leg
exports one `database__connection__filename` for the whole job), so
forks never share a file.
…ge (#28485)

ref https://linear.app/ghost/issue/PLA-86
fixes #28369

When a member starts a paid signup or upgrade from a page other than the
homepage, Portal returned them to the **site root** after a successful
Stripe Checkout (e.g. `https://example.com/?stripe=success`) instead of
the page where checkout began. Cancelling checkout already returned to
the originating page, so the behaviour was inconsistent — and especially
disruptive for paywall flows, where a member who just paid to unlock an
article was bounced to the homepage instead of back to the article.
towards https://linear.app/ghost/issue/NY-1314
ref 5381098
ref #1801

This change should have no user impact.

We coerce values to booleans when parsing database rows. But if the
field is a nullable boolean, we'd coerce `null` to `false`, which is
incorrect. This fixes that.

This wasn't a problem until recently (in
5381098), when we added Ghost's first
nullable boolean.
no ref
- Updated admin support package dev targets to depend on finite builds
instead of inherited continuous dev tasks.
- Added an explicit finite framework build prerequisite for
ghost-admin:dev.
- Kept the top-level @tryghost/admin dev target responsible for starting
Ember, Vite, and support package watches together.

This should help with `pnpm dev` failing to provide a functional Admin.
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| python | stage | minor | `3.13-slim` → `3.14-slim` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the [Dependency
Dashboard](../issues/28155) for more information.

---

### Configuration

📅 **Schedule**: (in timezone Etc/UTC)

- Branch creation
  - Only on Sunday and Saturday (`* * * * 0,6`)
- Between 11:00 PM and 11:59 PM, Monday through Friday (`* 23 * * 1-5`)
- Between 12:00 AM and 04:59 AM, Monday through Saturday (`* 0-4 * *
1-6`)
- Automerge
  - Only on Sunday and Saturday (`* * * * 0,6`)
- Between 11:00 PM and 11:59 PM, Monday through Friday (`* 23 * * 1-5`)
- Between 12:00 AM and 04:59 AM, Monday through Saturday (`* 0-4 * *
1-6`)

🚦 **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 has been generated by [Mend
Renovate](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjkuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyOS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: tryghost-renovate[bot] <269725441+tryghost-renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [react-hook-form](https://react-hook-form.com)
([source](https://redirect.github.com/react-hook-form/react-hook-form))
| [`7.78.0` →
`7.79.0`](https://renovatebot.com/diffs/npm/react-hook-form/7.78.0/7.79.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/react-hook-form/7.79.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-hook-form/7.78.0/7.79.0?slim=true)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the [Dependency
Dashboard](../issues/28155) for more information.

---

### Release Notes

<details>
<summary>react-hook-form/react-hook-form (react-hook-form)</summary>

###
[`v7.79.0`](https://redirect.github.com/react-hook-form/react-hook-form/blob/HEAD/CHANGELOG.md#7790---2026-06-13)

[Compare
Source](https://redirect.github.com/react-hook-form/react-hook-form/compare/v7.78.0...v7.79.0)

##### Added

- `disabled` option to `useFieldArray`

##### Fixed

- `Controller` `onChange` promise return type
- `deepEqual` false positives with shared object references
- `shouldUseNativeValidation` behavior for radio groups
- `createFormControl` stability with fast refresh in dev mode
- `StrictMode` value preservation during remount
- `formState.errors` reactivity with React compiler

</details>

---

### Configuration

📅 **Schedule**: (in timezone Etc/UTC)

- Branch creation
  - Only on Sunday and Saturday (`* * * * 0,6`)
- Between 11:00 PM and 11:59 PM, Monday through Friday (`* 23 * * 1-5`)
- Between 12:00 AM and 04:59 AM, Monday through Saturday (`* 0-4 * *
1-6`)
- Automerge
  - Only on Sunday and Saturday (`* * * * 0,6`)
- Between 11:00 PM and 11:59 PM, Monday through Friday (`* 23 * * 1-5`)
- Between 12:00 AM and 04:59 AM, Monday through Saturday (`* 0-4 * *
1-6`)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 has been generated by [Mend
Renovate](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjcuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyNy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: tryghost-renovate[bot] <269725441+tryghost-renovate[bot]@users.noreply.github.com>
)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| tinybirdco/tinybird-local | service | digest | `8d70854` → `974885a` |
| tinybirdco/tinybird-local |  | digest | `8d70854` → `974885a` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the [Dependency
Dashboard](../issues/28155) for more information.

---

### Configuration

📅 **Schedule**: (in timezone Etc/UTC)

- Branch creation
  - Only on Sunday and Saturday (`* * * * 0,6`)
- Between 11:00 PM and 11:59 PM, Monday through Friday (`* 23 * * 1-5`)
- Between 12:00 AM and 04:59 AM, Monday through Saturday (`* 0-4 * *
1-6`)
- Automerge
  - Only on Sunday and Saturday (`* * * * 0,6`)
- Between 11:00 PM and 11:59 PM, Monday through Friday (`* 23 * * 1-5`)
- Between 12:00 AM and 04:59 AM, Monday through Saturday (`* 0-4 * *
1-6`)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

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

---

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

---

This PR has been generated by [Mend
Renovate](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIyOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: tryghost-renovate[bot] <269725441+tryghost-renovate[bot]@users.noreply.github.com>
Renovate keeps opening minor/patch Node bumps (most recently #28696:
`22.18.0` → `22.22.3`), which only churn CI. The Node runtime is
something we upgrade deliberately as one coordinated change — the
`engines` range in the root and `ghost/core` `package.json`, the
`NODE_VERSION` ARG behind the `node` base image in
`Dockerfile.production` and `docker/ghost-dev/Dockerfile`, and the
`@types/node` version cap all have to move together and be deployed/QA'd
as a unit.

This adds a `packageRule` disabling Renovate updates for the `node`
package:

```json5
{
    "description": "Pin Node.js — bump the runtime manually, not via Renovate",
    "matchPackageNames": ["node"],
    "enabled": false
}
```

`matchPackageNames: ["node"]` is exact, so it disables both the
`node-version` (engines) and `docker` (base image) updates that produced
#28696, without affecting `@types/node`, `nodemailer`, `nodemon`, etc.
Once this lands, #28696 can be closed (Renovate will stop recreating
it).
ref https://linear.app/ghost/issue/NY-1284

This is a test-only change, made commit-by-commit.

`NON_EMPTY_EMAIL_LEXICAL` and `EMPTY_EMAIL_LEXICAL` were defined in
multiple places. Let's define them once.
@pull pull Bot locked and limited conversation to collaborators Jun 18, 2026
@pull pull Bot added the ⤵️ pull label Jun 18, 2026
@pull pull Bot merged commit 60f6749 into code:main Jun 18, 2026
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