tr
TryGhost
GitHub
Ghost
Workspace
GitHub
CI Pipeline Executions
Filtered
Runs
Demo
Insights
Compare tasks
Analytics
Sign in
Toggle sidebar
Overview
⌘K
Ghost
Loading workspace stats
Loading workspace insights...
Statistics interval
7 days
30 days
Latest CI Pipeline Executions
Status
Fix filter
Filter
Fuzzy
Filter range
Sort by
Sort by
Start time
Sort ascending
Sort descending
Succeeded
add-ghost-pro-to-search
b0e944d9 Merge ef7197022e5f8d3268529c76118fb290c41b4456 into d4f794ae0eab65e11d0cc7799a408fe5f8d025b2
by Sag
S
Failed
29645
ef719702 Fixed billing search deep-link dead-ends and stale iframe routes Review findings on the configurable billing search entries: - Entering the billing root never synced the iframe — browser Back from /pro/domain, or selecting an item with path '/', left the iframe on the old sub-page under the /pro URL. A new pro/index route forwards '/' the same way pro-sub forwards child routes, which also stops a deep-link destination baked into a hidden in-flight load from hijacking a later plain /pro open. - Opening with a pending sub route always reloaded the iframe, discarding a healthy in-flight load whose URL already targeted that route; repeat selections while the spinner showed restarted the load (and its failure monitor) every click. The load's destination is now tracked so a covered pending route rides the existing load instead of restarting it. - The trailing-hash location generates trailing-slash URLs and star segments keep the slash, so canonical /pro/domain/ deep links forwarded '/domain/' — off the slash-free contract the billing app expects. - Host config could name the billing group 'Posts' (double-navigating selections and cross-matching groups) or use paths with query strings (forwarded inconsistently between the transition and postMessage paths). configure() now rejects reserved names and non-plain paths. - The /pro route guard kept its own access predicate without the billing.enabled check, so a disabled site could still activate the route with no modal to show. It now shares billing.canAccessBilling, which treats force-upgrade as a full bypass so that flow is unchanged. - Messages to the billing iframe went through three divergent senders, one still posting with a wildcard target origin. They now share one origin-targeted helper. - Searchables are resolved once per session instead of on every keystroke, flexsearch indexes are only allocated for configured groups, keyword matching honours the searchable's index declaration, and the Koenig link filter drops non-linkable results by missing url instead of a billing-specific group check.
by Sag
S
Succeeded
29645
f97b1833 Fixed billing search deep-link dead-ends and stale iframe routes Review findings on the configurable billing search entries: - Entering the billing root never synced the iframe — browser Back from /pro/domain, or selecting an item with path '/', left the iframe on the old sub-page under the /pro URL. A new pro/index route forwards '/' the same way pro-sub forwards child routes, which also stops a deep-link destination baked into a hidden in-flight load from hijacking a later plain /pro open. - Opening with a pending sub route always reloaded the iframe, discarding a healthy in-flight load whose URL already targeted that route; repeat selections while the spinner showed restarted the load (and its failure monitor) every click. The load's destination is now tracked so a covered pending route rides the existing load instead of restarting it. - The trailing-hash location generates trailing-slash URLs and star segments keep the slash, so canonical /pro/domain/ deep links forwarded '/domain/' — off the slash-free contract the billing app expects. - Host config could name the billing group 'Posts' (double-navigating selections and cross-matching groups) or use paths with query strings (forwarded inconsistently between the transition and postMessage paths). configure() now rejects reserved names and non-plain paths. - The /pro route guard kept its own access predicate without the billing.enabled check, so a disabled site could still activate the route with no modal to show. It now shares billing.canAccessBilling, which treats force-upgrade as a full bypass so that flow is unchanged. - Messages to the billing iframe went through three divergent senders, one still posting with a wildcard target origin. They now share one origin-targeted helper. - Searchables are resolved once per session instead of on every keystroke, flexsearch indexes are only allocated for configured groups, keyword matching honours the searchable's index declaration, and the Koenig link filter drops non-linkable results by missing url instead of a billing-specific group check.
by Sag
S
Succeeded
29645
d637e98b Removed redundant inline comments
by Sag
S
Succeeded
29645
61cefdf9 Fixed billing deep-link edge cases found in code review ref https://linear.app/ghost/issue/GVA-861 The Ghost(Pro) deep-link mechanism kept its pending sub route alive past its useful life, which let a stale destination hijack a later plain /pro open: nothing cleared it when the overlay closed, a search selection armed it even when the transition was subsequently aborted (eg. unsaved changes), and a selection made while the overlay was already open fell back to a post-ready postMessage that can lose a race with the billing app's own boot redirects. - Closing the billing window now abandons any queued deep link - Search selection transitions first and lets the pro-sub route forward the destination, so an aborted transition leaves the billing app untouched and the double routeUpdate send is gone; the direct send survives only for the no-op transition case - A route queued while the overlay is already visible and the app is still loading now reloads the iframe with the destination baked into the URL instead of racing the app's initial redirects - The checkout action delegates to navigateToSubRoute, gaining origin pinning and ready-queueing instead of a '*'-targeted message that was dropped (with the intent cleared) when the app wasn't ready - Hash-to-billing-route parsing is anchored and owned by a single billing service helper, so unrelated hashes like #/products can't leak into the iframe URL and force-upgrade no longer re-implements the parsing - The billing access rule and the editor link-search filter each live in one shared place instead of duplicated copies
by Sag
S
Succeeded
add-ghost-pro-to-search
3e76b99a Merge 00e410ae4f2f7970929a72e346123fa89c54df88 into 4338eee01a75c50408df92b7cd999a5915e8f224
by Sag
S
Succeeded
29645
13b91b0c Simplified code comments in Ghost(Pro) search changes no ref Removed comments that narrate what the adjacent code already shows and trimmed the remaining ones down to the constraints they exist to record (preload timing, redirect race, deliberate keyword omissions).
by Sag
S
Succeeded
29645
6a4c7268 Simplified code comments in Ghost(Pro) search changes no ref Removed comments that narrate what the adjacent code already shows and trimmed the remaining ones down to the constraints they exist to record (preload timing, redirect race, deliberate keyword omissions).
by Sag
S
Succeeded
29645
6a4c7268 Simplified code comments in Ghost(Pro) search changes no ref Removed comments that narrate what the adjacent code already shows and trimmed the remaining ones down to the constraints they exist to record (preload timing, redirect race, deliberate keyword omissions).
by Sag
S
Succeeded
29645
6a4c7268 Simplified code comments in Ghost(Pro) search changes no ref Removed comments that narrate what the adjacent code already shows and trimmed the remaining ones down to the constraints they exist to record (preload timing, redirect race, deliberate keyword omissions).
by Sag
S
Succeeded
29645
85824844 Removed result title prefix and normalised Ghost(Pro) naming in search no ref Search results now show the plain action ('Change plan') instead of repeating the group label in every row, and the group header uses Ghost(Pro) — the spelling used everywhere else in Admin. So that searching the product name still lists the whole group, every entry shares ghost/pro/ghost(pro) keywords instead of relying on the title prefix.
by Sag
S
Succeeded
29645
ccf3f49d ✨ Added Ghost (Pro) actions to the admin search palette no ref Ghost (Pro) publishers had no way to find billing actions — changing plan, setting up a custom domain, requesting a backup, contacting support — from the cmd+K search; they had to know these lived behind the Ghost (Pro) tab. Search now surfaces them as a "Ghost (Pro)" group, shown above content results so they aren't buried under posts. - Entries are a static client-side list indexed by both search providers (title + keywords, eg. "dns", "invoice", "renewal"), so no new API endpoint is needed. The group only appears when the site has billing enabled and the user can access the billing app (owner, or anyone in a force-upgrade state), mirroring the /pro route rules. - Selecting a result deep-links into the billing app. That exposed a bug in sub-route forwarding: the billing iframe is preloaded, so in-app navigation to /pro/* left it on its boot route, and the app's own trial redirect to /plans raced (and beat) any post-load route message. The billing service now boots the iframe directly on the destination route when opening, and sends a routeUpdate postMessage when the app is already loaded. - 'export' is deliberately not a backup keyword to avoid colliding with content export in settings, and Ghost (Pro) results are excluded from the editor's link search since they aren't linkable site content.
by Sag
S
Succeeded
29645
ccf3f49d ✨ Added Ghost (Pro) actions to the admin search palette no ref Ghost (Pro) publishers had no way to find billing actions — changing plan, setting up a custom domain, requesting a backup, contacting support — from the cmd+K search; they had to know these lived behind the Ghost (Pro) tab. Search now surfaces them as a "Ghost (Pro)" group, shown above content results so they aren't buried under posts. - Entries are a static client-side list indexed by both search providers (title + keywords, eg. "dns", "invoice", "renewal"), so no new API endpoint is needed. The group only appears when the site has billing enabled and the user can access the billing app (owner, or anyone in a force-upgrade state), mirroring the /pro route rules. - Selecting a result deep-links into the billing app. That exposed a bug in sub-route forwarding: the billing iframe is preloaded, so in-app navigation to /pro/* left it on its boot route, and the app's own trial redirect to /plans raced (and beat) any post-load route message. The billing service now boots the iframe directly on the destination route when opening, and sends a routeUpdate postMessage when the app is already loaded. - 'export' is deliberately not a backup keyword to avoid colliding with content export in settings, and Ghost (Pro) results are excluded from the editor's link search since they aren't linkable site content.
by Sag
S
Succeeded
29645
e5395a8b ✨ Added Ghost (Pro) actions to the admin search palette no ref Ghost (Pro) publishers had no way to find billing actions — changing plan, setting up a custom domain, requesting a backup, contacting support — from the cmd+K search; they had to know these lived behind the Ghost (Pro) tab. Search now surfaces them as a "Ghost (Pro)" group, shown above content results so they aren't buried under posts. - Entries are a static client-side list indexed by both search providers (title + keywords, eg. "dns", "invoice", "renewal"), so no new API endpoint is needed. The group only appears when the site has billing enabled and the user can access the billing app (owner, or anyone in a force-upgrade state), mirroring the /pro route rules. - Selecting a result deep-links into the billing app. That exposed a bug in sub-route forwarding: the billing iframe is preloaded, so in-app navigation to /pro/* left it on its boot route, and the app's own trial redirect to /plans raced (and beat) any post-load route message. The billing service now boots the iframe directly on the destination route when opening, and sends a routeUpdate postMessage when the app is already loaded. - 'export' is deliberately not a backup keyword to avoid colliding with content export in settings, and Ghost (Pro) results are excluded from the editor's link search since they aren't linkable site content.
by Sag
S
Previous page
Previous
Next
Next page