ci: release#1871
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-playground | 2b93c02 | Jul 10 2026, 03:29 PM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-cache | 2b93c02 | Jul 10 2026, 03:30 PM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-do | 2b93c02 | Jul 10 2026, 03:29 PM |
Scope checkThis PR touches 33 files. PRs with a broad scope are harder to review. Please confirm the scope hasn't drifted beyond the intended change. If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs. See CONTRIBUTING.md for contribution guidelines. |
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
1048260 to
a8acd11
Compare
335a9e9 to
db4c458
Compare
deaca60 to
e67b9e0
Compare
86d208e to
7f741e6
Compare
Overlapping PRsThis PR modifies files that are also changed by other open PRs:
This may cause merge conflicts or duplicated work. A maintainer will coordinate. |
d6b25a7 to
b8e5407
Compare
2298bfa to
5472d1f
Compare
33b856d to
0a64494
Compare
70e3b95 to
ebe6ce4
Compare
ebe6ce4 to
2b93c02
Compare
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@emdash-cms/admin@0.29.0
Minor Changes
d237e96Thanks @swissky! - Adds bulk actions to the content list. Select multiple entries with checkboxes (or the header "select all" box) and publish, set to draft, or move them to trash in one step.Patch Changes
#1865
582ea2cThanks @khoinguyenpham04! - Fixes the admin dashboard scheduled-content summary so it counts entries with pending schedules instead of inferring the count from other statuses.#1865
582ea2cThanks @khoinguyenpham04! - Updates the admin dashboard and header with more consistent Kumo card styling, aligned loading and error states, and collection quick actions that open new entries directly.#1866
d2f5ddcThanks @khoinguyenpham04! - Updates admin UI status colors to use Kumo semantic tokens instead of hard-coded palette classes, so email settings, role and comment badges, content type indicators, the dashboard, and other status displays now theme consistently in both light and dark mode. Also fixes warning highlights in the marketplace audit badge and the plugin capability consent dialog, which previously referenced a nonexistent color token and rendered unstyled.#1720
9792226Thanks @segmentationfaulter! - Fixes OAuth provider login buttons (Google, GitHub) generating broken URLs on the admin login page. Non-admin/_emdash/paths are no longer routed through TanStack Router, which was incorrectly prepending the admin basepath and causing 404s.#1719
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.#1886
60811c0Thanks @swissky! - Adds atoolbarconfig option for reliable editor-toolbar delivery behind shared caches.toolbar: "client"keeps public HTML identical for every visitor and shows a client-side "Edit" pill for logged-in editors that opens a fresh, uncached editor render via an_editquery param;toolbar: falsedisables the toolbar entirely. The toolbar can now also be dismissed in the browser via its × button. The default ("server") is unchanged.Updated dependencies [
7c5de08]:@emdash-cms/cloudflare@0.29.0
Minor Changes
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.Patch Changes
#1875
b116525Thanks @ascorbic! - Fixes a database stampede on Postgres when a pending migration fails at runtime: requests no longer pile up waiting on the migration lock, failed migrations are retried with a backoff instead of on every request, and failed attempts no longer leak idle database connections.Updated dependencies [
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:emdash@0.29.0
Minor Changes
#1535
0360900Thanks @MA2153! - Adds an HTTP API for content references: relation-definition CRUD under/_emdash/api/relations(editor-readable, admin-writable) and directed reference edges on content entries under/_emdash/api/content/:collection/:id/references/:relation/{children,parents}(ownership-aware). References are stored only in the references table — no collection column. The edge reads are cursor-paginated (?cursor/?limit, default 50, max 100) and returnnextCursor; each resolved entry carries thelocaleof the variant returned.#1874
1526f96Thanks @Vallhalen! - MCPcontent_createandcontent_updatenow accept ataxonomiesfield(
{ [taxonomyName]: [termSlug, ...] }) that assigns taxonomy terms in thesame transaction as the content write. Term slugs are resolved in the entry's
locale via the same code path as the
/terms/{taxonomy}REST route, so thetwo entry points can't drift. Also exposed on the REST
POSTandPUTcontent endpoints for parity. Fixes #953.
#1719
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.#1578
58f594bThanks @marcusbellamyshaw-cell! - Implements pagination forsearch()andsearchCollection()search()advertised keyset pagination through its types (options.cursor,SearchResponse.nextCursor) but never read the cursor or returned one, so results were silently capped atlimitwith no way to load a second page.Both
search()andsearchCollection()now honourcursorand return anextCursorwhenever more matches exist. Pass the previousnextCursorback ascursorto walk subsequent pages; it becomesundefinedon the last page. The/_emdash/api/searchendpoint accepts acursorquery parameter and returnsnextCursorin its response (a malformed cursor returns a 400INVALID_CURSOR).#1867
c57b12bThanks @khoinguyenpham04! - Adds an admin REST endpoint andEmDashClient.mediaRepairUsage()client method for repairing content media usage indexes by collection or across all collections.#1886
60811c0Thanks @swissky! - Adds atoolbarconfig option for reliable editor-toolbar delivery behind shared caches.toolbar: "client"keeps public HTML identical for every visitor and shows a client-side "Edit" pill for logged-in editors that opens a fresh, uncached editor render via an_editquery param;toolbar: falsedisables the toolbar entirely. The toolbar can now also be dismissed in the browser via its × button. The default ("server") is unchanged.Patch Changes
#1865
582ea2cThanks @khoinguyenpham04! - Fixes the admin dashboard scheduled-content summary so it counts entries with pending schedules instead of inferring the count from other statuses.#1857
77e8968Thanks @swissky! - Speeds up the admin content-list search on collections with full-text search enabled: the filter is now served from the FTS5 index (token-prefix matching plus slug-prefix lookup) instead of scanning every row. Collections without search enabled, and PostgreSQL databases, keep the previous substring matching.#1905
e12f393Thanks @swissky! - Fixes multi-paragraph blockquotes splitting into separate quotes: consecutive quote paragraphs now render as a single blockquote on the site and load as one quote block in the editor, so merging them no longer reverts on reload.#1854
e4e76f5Thanks @swissky! - Fixes comment submissions bypassing Turnstile: when theEMDASH_TURNSTILE_SECRET_KEY(orTURNSTILE_SECRET_KEY) environment variable is set, the public comment endpoint now verifies the submitted Turnstile token server-side and rejects submissions without a valid one. Sites without a configured secret key are unaffected.#1550
cbc7d6bThanks @marcusbellamyshaw-cell! - Fixes search across all collections failing withD1_ERROR: no such column: c.titlewhen any search-enabled collection has notitlefield (#1178).titleis an optional field, not a guaranteed column, so callingsearch(or the MCPsearchtool) without acollectionsfilter could error instead of searching everything. Cross-collection search now works regardless of which collections define a title; results from a collection without one simply omit the title, and autocomplete suggestions skip such collections rather than erroring.#1907
15f4057Thanks @swissky! - Adds hreflang alternate links to the page head for translated content.<EmDashHead>now emits a<link rel="alternate" hreflang="...">per published translation (plusx-default) automatically, and a newgetHreflangAlternates()helper resolves the same set for hand-rolled heads.#1875
b116525Thanks @ascorbic! - Fixes a database stampede on Postgres when a pending migration fails at runtime: requests no longer pile up waiting on the migration lock, failed migrations are retried with a backoff instead of on every request, and failed attempts no longer leak idle database connections.#1855
450ea81Thanks @swissky! - Fixes preview and editor-toolbar responses being stored in the shared edge cache when route caching is enabled: requests with a_previewtoken and toolbar-injected editor pages now opt out of the route cache, so draft content is no longer served from the cache without token verification and toolbar markup no longer leaks to anonymous visitors.#1892
9c0733fThanks @ascorbic! - Fixes taxonomy term counts (Categories/Tags widgets, term pages, and the admin term list) so they only include content that is publicly visible: published or scheduled-and-due entries that have not been trashed. Counts are now also scoped to the taxonomy's declared collections.Updated dependencies [
582ea2c,582ea2c,d2f5ddc,d237e96,9792226,7c5de08,60811c0]:@emdash-cms/plugin-cli@0.7.0
Minor Changes
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.Patch Changes
7c5de08]:@emdash-cms/plugin-types@0.2.0
Minor Changes
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.@emdash-cms/registry-lexicons@0.2.0
Minor Changes
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.@emdash-cms/sandbox-workerd@0.2.0
Minor Changes
7c5de08Thanks @swissky! - Adds ataxonomies:readplugin capability with read-only taxonomy access: plugins that declare it getctx.taxonomiesto list taxonomy definitions (getAll()), fetch the terms of a taxonomy (getTerms()), and read the terms assigned to a content entry (getEntryTerms()) — in-process and in both sandbox runners.Patch Changes
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:@emdash-cms/auth-atproto@0.2.28
Patch Changes
@emdash-cms/plugin-embeds@0.1.36
Patch Changes
@emdash-cms/registry-client@0.3.3
Patch Changes
7c5de08]:@emdash-cms/auth@0.29.0
@emdash-cms/blocks@0.29.0
create-emdash@0.29.0
@emdash-cms/gutenberg-to-portable-text@0.29.0
@emdash-cms/x402@0.29.0
@emdash-cms/fixture-perf-site@0.0.31
Patch Changes
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:@emdash-cms/perf-demo-site@0.0.31
Patch Changes
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:@emdash-cms/cache-demo-site@0.0.31
Patch Changes
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:@emdash-cms/do-demo-site@0.0.31
Patch Changes
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:@emdash-cms/do-solo-demo-site@0.0.31
Patch Changes
582ea2c,77e8968,e12f393,e4e76f5,0360900,cbc7d6b,15f4057,1526f96,b116525,7c5de08,450ea81,58f594b,c57b12b,9c0733f,60811c0]:Try this PR
Open a fresh playground →
A full working EmDash site, deployed from this branch. Each visit gets its own session-scoped sandbox: no login needed and no shared state. Try the admin, edit content, hit the public site.
Tracks
changeset-release/main. Updated automatically when the playground redeploys.