Skip to content

[pull] main from TryGhost:main - #1442

Merged
pull[bot] merged 25 commits into
code:mainfrom
TryGhost:main
Aug 25, 2026
Merged

pull[bot] merged 25 commits into
code:mainfrom
TryGhost:main

Conversation

@pull

@pull pull Bot commented Aug 25, 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 : )

ErisDS and others added 25 commits August 25, 2026 11:20
Missing documentation, explaining how everything is meant to fit together.
Feature flags are one of the most critical parts of 
how we build and ship new code safely.
…30255)

ref https://linear.app/ghost/issue/HKG-1996/update-mailgun-event-alert-for-background-job-logs

- The `ghost/email-analytics-failing` Elastic rule counted log lines matching
  `[EmailAnalytics] Job complete`. HKG-1990 reworded that string to the shared
  `[Background Job]` format, so the count went to zero and the rule fired
  continuously. Mailgun ingestion was never affected.
- Rewording a human-readable message should not be able to break an alert. This
  emits the completion as structured fields so the rule can key on
  `system.event` and `system.job_type` instead of a message regex.
- Uses the `system: {event, job_type, duration_ms}` shape the jobs service
  already logs completions with (per review), extended with `task` for the
  sub-fetch and `event_count` for the processed events. `system.*` is the
  namespace existing Elastic rules already query, and remote-flags and gifts
  emit `system.event` in production today, so indexing is verifiable up front.
- No behaviour change: same call site, same conditions, same message text.
  `_logJobCompletion` still returns early at zero events, so these documents
  continue to mean "events were actually processed".
- Only this one call site is converted; the other background jobs keep their
  message-only logging for now.
no ref
- lazy-require archiver when site exporter is actually called, instead of on boot
no ref
- x402 adapters dependencies were loaded unconditionally on boot due to configuration defaults, even if machinePayments is not configured or enabled
- adds a enabled flag to x402 config block to only load deps when actually used
no ref

Private-site landing pages bypass ghost_head, so they did not identify
their Ghost version like other frontend pages.
no ref
- enabled is now set to true by default
- lazy-load x402 modules on first payment challenge, mirroring the mppx adapter
ref https://linear.app/ghost/issue/BER-3891/

Free members choose paid plans from their account after signing in, so
the signup gift promotion was never rendered for them. This reuses the
signup promotion beneath the plan picker while preserving its existing
setting, labs flag, and giftable offering gates.
Ref https://linear.app/ghost/issue/BER-3852

The signup gift promotion sat inline after "Already a member?",
separated by a middle dot, which crowded the footer and read as one long
run-on line. It now sits on its own row below.

Portal gift entry points now lead with the same gift icon Admin uses
(Lucide's Gift), tinted with the brand colour to match the link text.
The shared renderer keeps signup and free-member plan selection aligned.

In Admin, the "Display option to purchase gift" toggle moved to the
bottom of the signup options form, grouping it with the other
display-level settings instead of splitting the name and tier controls.
Closes https://linear.app/ghost/issue/BER-3874/hide-gift-card-and-email-preview-graphical-elements-on-mobile

The gift purchase screen stacked its preview panel above the form below 880px. It's now hidden there, with the back and close controls aligned on one row above the form.
no ref

Full conversion of the acceptance specs that predated (or drifted from) the harness conventions — everything routes through screen helpers + the `@tryghost/test-data` selector registry; assertion meaning unchanged (`git diff` adds/removes zero `it(` lines).
no ref

The unit lane carried four copies of the boot payloads and three unrelated MSW idioms. Now: `@tryghost/test-data` is the one fixture source and `serverFixture` the one MSW idiom.
no ref

Co-authored-by: UserExistsError <23325451+UserExistsError@users.noreply.github.com>
no ref

The `appSettings` context (framework `AppProvider`/`AppContext` + the admin wrapper deriving a 5-key object from `useBrowseSettings`) duplicated settings reads at ~35 sites. Named selector hooks on the settings query replace it; both providers are deleted.
no ref

`@tryghost/shade/app` carried analytics and member domain functions plus a Koenig loader in the design-system context. They now live with their domains; the `/app` entry is design-system-only (`ShadeApp`, `ShadeAppProps`, `useFocusContext`).
ref https://linear.app/ghost/issue/GVA-982

This is an experiment. This change adds a AI help chat, powered by
DocsBot, behind a config gate:

```
  "docsbot": {
      "enabled": true,
      "id": "..."
  },
  ```
@pull pull Bot locked and limited conversation to collaborators Aug 25, 2026
@pull pull Bot added the ⤵️ pull label Aug 25, 2026
@pull
pull Bot merged commit 52a82ae into code:main Aug 25, 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.

10 participants