diff --git a/.changeset/content-schedule-hooks.md b/.changeset/content-schedule-hooks.md
deleted file mode 100644
index 9ae9a0791..000000000
--- a/.changeset/content-schedule-hooks.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": minor
----
-
-Adds content scheduling hooks for plugins to react when entries are scheduled or unscheduled.
diff --git a/.changeset/contentlist-hook-order.md b/.changeset/contentlist-hook-order.md
deleted file mode 100644
index 3d1b453e1..000000000
--- a/.changeset/contentlist-hook-order.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes a crash on the content list when an action that refetches (changing the sort, fast navigation) coincides with a load error. Closes #1415.
diff --git a/.changeset/editor-footer-cjk-metrics.md b/.changeset/editor-footer-cjk-metrics.md
deleted file mode 100644
index e759d7d10..000000000
--- a/.changeset/editor-footer-cjk-metrics.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-The editor footer now counts CJK (Chinese, Japanese, Korean) characters in its word count and reading-time estimate. Because these scripts have no spaces between words, the footer previously counted a whole paragraph as a single word and showed "1 min read" for long CJK drafts, even though the published page reported the correct reading time. The footer now matches the published reading time for CJK content; English and other space-delimited text is unchanged.
diff --git a/.changeset/fix-1368-datetime-accept-naive.md b/.changeset/fix-1368-datetime-accept-naive.md
deleted file mode 100644
index 0e43556cd..000000000
--- a/.changeset/fix-1368-datetime-accept-naive.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes datetime fields becoming unsavable through the admin editor (#1368). A `datetime-local` input (or a seed) produces a naive value such as `2026-06-04T18:30:00` with no `Z` suffix or timezone offset, which the field validator rejected — and because the editor re-sends every field on autosave, an entry holding such a value could no longer be saved. Datetime fields now accept naive values (with or without seconds), values with a `Z` suffix or an explicit offset, and date-only values, while still rejecting non-dates.
diff --git a/.changeset/fix-1416-plugins-missing-entrypoint.md b/.changeset/fix-1416-plugins-missing-entrypoint.md
deleted file mode 100644
index 5125bf21a..000000000
--- a/.changeset/fix-1416-plugins-missing-entrypoint.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes a cryptic build failure when a configured plugin has no resolvable entrypoint (#1416). Passing an inline `definePlugin({...})` result directly to `plugins: []` previously failed deep in the bundler with an unhelpful "failed to resolve import" error. The build now fails fast with a clear message that names the offending plugin and explains that `plugins: []` entries must resolve to a file or package entrypoint — move the plugin into its own module and reference it from there.
diff --git a/.changeset/fix-codeblock-language-picker-focus.md b/.changeset/fix-codeblock-language-picker-focus.md
deleted file mode 100644
index 7a3d0f551..000000000
--- a/.changeset/fix-codeblock-language-picker-focus.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes the code block language picker losing focus and closing as soon as you type in it. You can now type to filter and choose a language.
diff --git a/.changeset/fix-d1-result-set-column-limit.md b/.changeset/fix-d1-result-set-column-limit.md
deleted file mode 100644
index b7e551baf..000000000
--- a/.changeset/fix-d1-result-set-column-limit.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes silent `null` entries on wide-schema collections under Cloudflare D1. The content loader's single-query `LEFT JOIN _emdash_seo` added 5 alias columns to every result set, which pushed collections with ~95+ flat user fields past D1's per-query column limit (~100). The query failed with `D1_ERROR: too many columns in result set`, the error was wrapped as a generic `Failed to load entry`, and the call site surfaced `null`. SEO is now folded into a single aggregated JSON column (mirroring how byline and taxonomy hydration already work), keeping the result-set width bounded regardless of how wide the collection schema gets while preserving the single round trip.
diff --git a/.changeset/fix-define-plugin-tdz.md b/.changeset/fix-define-plugin-tdz.md
deleted file mode 100644
index 919b5ea4d..000000000
--- a/.changeset/fix-define-plugin-tdz.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes a crash that returned HTTP 500 on every route on Cloudflare Workers when native plugins are registered with `definePlugin` (`Cannot access 'SIMPLE_ID' before initialization`). Plugin registration is now safe regardless of bundle ordering.
diff --git a/.changeset/fix-emdash-head-jsonld-csp.md b/.changeset/fix-emdash-head-jsonld-csp.md
deleted file mode 100644
index cf1adc9ff..000000000
--- a/.changeset/fix-emdash-head-jsonld-csp.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-"emdash": minor
----
-
-Updates EmDashHead JSON-LD rendering for Astro CSP compatibility.
-
-Sites using `` do not need to change anything. JSON-LD structured data is still rendered automatically, but EmDash now registers the generated script hashes with Astro's CSP runtime API so strict CSP can allow them.
-
-This also adds `renderPageMetadata(metadata, { includeJsonLd: false })` for advanced integrations that render metadata manually and want to handle JSON-LD script tags themselves. The default remains unchanged: calling `renderPageMetadata(metadata)` still includes JSON-LD script tags in the returned HTML string.
diff --git a/.changeset/fix-loader-taxonomy-filter-locale.md b/.changeset/fix-loader-taxonomy-filter-locale.md
deleted file mode 100644
index faa96c83a..000000000
--- a/.changeset/fix-loader-taxonomy-filter-locale.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes collection `where` taxonomy filters matching nothing when filtering a non-default locale by its localized term slug. Term slugs now resolve in the active query locale (#1480).
diff --git a/.changeset/media-usage-index-foundation.md b/.changeset/media-usage-index-foundation.md
deleted file mode 100644
index e9ebfc999..000000000
--- a/.changeset/media-usage-index-foundation.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Adds the internal media usage index foundation for upcoming usage-aware media workflows. This creates the usage index schema during migrations but does not change Media Library behavior yet.
diff --git a/.changeset/perf-taxonomy-defs-isolate-cache.md b/.changeset/perf-taxonomy-defs-isolate-cache.md
deleted file mode 100644
index f212d27f2..000000000
--- a/.changeset/perf-taxonomy-defs-isolate-cache.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-"emdash": patch
----
-
-Cut per-render D1 round trips on public pages by caching taxonomy definitions across the worker isolate, and harden the runtime/DB singletons against bundler module duplication.
-
-Every public render that hydrates entry terms read `SELECT * FROM _emdash_taxonomy_defs` (via `getTaxonomyDefs` → `getCollectionTaxonomyNames`), which only had per-request caching. On Cloudflare D1, where the worker colo is often far from the database primary, each query is a ~40ms cross-region round trip, so this fired on every warm request for no benefit — taxonomy _definitions_ change extremely rarely (created via the admin API or a seed; there is no edit/delete-def path). They're now cached per-isolate behind a `globalThis` Symbol holder (the same two-tier pattern as `settings/index.ts` and the byline field-defs cache), keyed by resolved locale and invalidated in-memory by every def write (`handleTaxonomyCreate`, seed application). Invalidation is in-memory rather than a persisted version probe on purpose: a per-request version read would merely replace the query being removed, yielding no net saving on warm isolates. Isolated databases (playground / DO preview) bypass the cache.
-
-Separately, the cached runtime instance, the DB-instance cache, and the in-flight DB-init promise (`astro/middleware.ts`, `emdash-runtime.ts`) were plain module-scoped variables. Under Vite SSR chunk duplication those can become multiple independent copies, letting cold-start migrations and bootstrap reads re-run on requests that should have hit the warm cache. They now live on `globalThis` behind Symbol keys, matching the existing `SETUP_VERIFIED_KEY` / request-context / request-cache singletons.
-
-No schema changes, no public API changes, fully backwards compatible.
diff --git a/.changeset/restore-taxonomy-parent-index.md b/.changeset/restore-taxonomy-parent-index.md
deleted file mode 100644
index 72d5a7a54..000000000
--- a/.changeset/restore-taxonomy-parent-index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Restores the missing `idx_taxonomies_parent` index on `taxonomies(parent_id)`, which was silently dropped by the i18n table rebuild in an earlier version. Installs upgrade automatically; hierarchical (parent/child) taxonomy lookups are indexed again.
diff --git a/.changeset/sitemap-hreflang-solo-entries.md b/.changeset/sitemap-hreflang-solo-entries.md
deleted file mode 100644
index f16ebda3e..000000000
--- a/.changeset/sitemap-hreflang-solo-entries.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes i18n collection sitemaps so untranslated entries include self hreflang and x-default alternates.
diff --git a/fixtures/perf-site/CHANGELOG.md b/fixtures/perf-site/CHANGELOG.md
index 5e49e593d..831cbad56 100644
--- a/fixtures/perf-site/CHANGELOG.md
+++ b/fixtures/perf-site/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/fixture-perf-site
+## 0.0.27
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+ - @emdash-cms/cloudflare@0.26.0
+
## 0.0.26
### Patch Changes
diff --git a/fixtures/perf-site/package.json b/fixtures/perf-site/package.json
index 884fc2d6d..edcc383a7 100644
--- a/fixtures/perf-site/package.json
+++ b/fixtures/perf-site/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/fixture-perf-site",
- "version": "0.0.26",
+ "version": "0.0.27",
"private": true,
"type": "module",
"description": "Fixture site for query-count perf snapshots. Runs under sqlite+node or d1+cloudflare based on EMDASH_FIXTURE_TARGET.",
diff --git a/infra/blog-demo/CHANGELOG.md b/infra/blog-demo/CHANGELOG.md
index dbc717bc5..4d5725478 100644
--- a/infra/blog-demo/CHANGELOG.md
+++ b/infra/blog-demo/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/perf-demo-site
+## 0.0.27
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+ - @emdash-cms/cloudflare@0.26.0
+
## 0.0.26
### Patch Changes
diff --git a/infra/blog-demo/package.json b/infra/blog-demo/package.json
index 23b279c68..f81e01d9f 100644
--- a/infra/blog-demo/package.json
+++ b/infra/blog-demo/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/perf-demo-site",
- "version": "0.0.26",
+ "version": "0.0.27",
"private": true,
"type": "module",
"scripts": {
diff --git a/infra/cache-demo/CHANGELOG.md b/infra/cache-demo/CHANGELOG.md
index 3fe91a092..cfd081f44 100644
--- a/infra/cache-demo/CHANGELOG.md
+++ b/infra/cache-demo/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/cache-demo-site
+## 0.0.27
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+ - @emdash-cms/cloudflare@0.26.0
+
## 0.0.26
### Patch Changes
diff --git a/infra/cache-demo/package.json b/infra/cache-demo/package.json
index 6a0d22a2f..b433b3f40 100644
--- a/infra/cache-demo/package.json
+++ b/infra/cache-demo/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/cache-demo-site",
- "version": "0.0.26",
+ "version": "0.0.27",
"private": true,
"type": "module",
"scripts": {
diff --git a/infra/do-demo/CHANGELOG.md b/infra/do-demo/CHANGELOG.md
index 070fa5c27..4e7b9f852 100644
--- a/infra/do-demo/CHANGELOG.md
+++ b/infra/do-demo/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/do-demo-site
+## 0.0.27
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+ - @emdash-cms/cloudflare@0.26.0
+
## 0.0.26
### Patch Changes
diff --git a/infra/do-demo/package.json b/infra/do-demo/package.json
index cde31a2c0..9d5ce4e34 100644
--- a/infra/do-demo/package.json
+++ b/infra/do-demo/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/do-demo-site",
- "version": "0.0.26",
+ "version": "0.0.27",
"private": true,
"type": "module",
"scripts": {
diff --git a/infra/do-solo-demo/CHANGELOG.md b/infra/do-solo-demo/CHANGELOG.md
index 26f2897d5..e58abdd43 100644
--- a/infra/do-solo-demo/CHANGELOG.md
+++ b/infra/do-solo-demo/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/do-solo-demo-site
+## 0.0.27
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+ - @emdash-cms/cloudflare@0.26.0
+
## 0.0.26
### Patch Changes
diff --git a/infra/do-solo-demo/package.json b/infra/do-solo-demo/package.json
index c8a46ad48..372c8b961 100644
--- a/infra/do-solo-demo/package.json
+++ b/infra/do-solo-demo/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/do-solo-demo-site",
- "version": "0.0.26",
+ "version": "0.0.27",
"private": true,
"type": "module",
"scripts": {
diff --git a/packages/admin/CHANGELOG.md b/packages/admin/CHANGELOG.md
index 9931edf65..90335c3d6 100644
--- a/packages/admin/CHANGELOG.md
+++ b/packages/admin/CHANGELOG.md
@@ -1,5 +1,16 @@
# @emdash-cms/admin
+## 0.26.0
+
+### Patch Changes
+
+- [#1570](https://github.com/emdash-cms/emdash/pull/1570) [`dc32673`](https://github.com/emdash-cms/emdash/commit/dc32673b013f3ef5fcf7c23159b774d5ed1b8c60) Thanks [@marcusbellamyshaw-cell](https://github.com/marcusbellamyshaw-cell)! - Fixes a crash on the content list when an action that refetches (changing the sort, fast navigation) coincides with a load error. Closes [#1415](https://github.com/emdash-cms/emdash/issues/1415).
+
+- [#1673](https://github.com/emdash-cms/emdash/pull/1673) [`fe832ce`](https://github.com/emdash-cms/emdash/commit/fe832ce224b55ea5d83cb5652cc38a8035a574db) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes the code block language picker losing focus and closing as soon as you type in it. You can now type to filter and choose a language.
+
+- Updated dependencies []:
+ - @emdash-cms/blocks@0.26.0
+
## 0.25.1
### Patch Changes
diff --git a/packages/admin/package.json b/packages/admin/package.json
index 1ad24bd70..77857754a 100644
--- a/packages/admin/package.json
+++ b/packages/admin/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/admin",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Admin UI for EmDash CMS",
"type": "module",
"main": "dist/index.js",
diff --git a/packages/auth-atproto/CHANGELOG.md b/packages/auth-atproto/CHANGELOG.md
index d68e0a7d6..b23df1226 100644
--- a/packages/auth-atproto/CHANGELOG.md
+++ b/packages/auth-atproto/CHANGELOG.md
@@ -1,5 +1,12 @@
# @emdash-cms/auth-atproto
+## 0.2.24
+
+### Patch Changes
+
+- Updated dependencies []:
+ - @emdash-cms/auth@0.26.0
+
## 0.2.23
### Patch Changes
diff --git a/packages/auth-atproto/package.json b/packages/auth-atproto/package.json
index 06164721f..71b394009 100644
--- a/packages/auth-atproto/package.json
+++ b/packages/auth-atproto/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/auth-atproto",
- "version": "0.2.23",
+ "version": "0.2.24",
"description": "AT Protocol / Atmosphere authentication provider for EmDash CMS",
"type": "module",
"main": "src/auth.ts",
diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md
index 1abcf2309..822cd71a3 100644
--- a/packages/auth/CHANGELOG.md
+++ b/packages/auth/CHANGELOG.md
@@ -1,5 +1,7 @@
# @emdash-cms/auth
+## 0.26.0
+
## 0.25.1
## 0.25.0
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 3330df433..b8a01cefa 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/auth",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Passkey-first authentication for EmDash",
"type": "module",
"main": "dist/index.mjs",
diff --git a/packages/blocks/CHANGELOG.md b/packages/blocks/CHANGELOG.md
index d3b0e1a5f..03c1f0bf9 100644
--- a/packages/blocks/CHANGELOG.md
+++ b/packages/blocks/CHANGELOG.md
@@ -1,5 +1,7 @@
# @emdash-cms/blocks
+## 0.26.0
+
## 0.25.1
## 0.25.0
diff --git a/packages/blocks/package.json b/packages/blocks/package.json
index aa2bb80fd..4ddf60f13 100644
--- a/packages/blocks/package.json
+++ b/packages/blocks/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/blocks",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Declarative plugin UI blocks for EmDash CMS",
"type": "module",
"main": "dist/index.js",
diff --git a/packages/cloudflare/CHANGELOG.md b/packages/cloudflare/CHANGELOG.md
index 369c92ff9..0f3f7ac2e 100644
--- a/packages/cloudflare/CHANGELOG.md
+++ b/packages/cloudflare/CHANGELOG.md
@@ -1,5 +1,12 @@
# @emdash-cms/cloudflare
+## 0.26.0
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+
## 0.25.1
### Patch Changes
diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json
index 8c39360ea..3e64ef2d9 100644
--- a/packages/cloudflare/package.json
+++ b/packages/cloudflare/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/cloudflare",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Cloudflare adapters for EmDash - D1, R2, Access, and Worker Loader sandbox",
"type": "module",
"main": "dist/index.mjs",
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index c43daa7b2..db54dc0ee 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,50 @@
# emdash
+## 0.26.0
+
+### Minor Changes
+
+- [#1659](https://github.com/emdash-cms/emdash/pull/1659) [`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63) Thanks [@ttmx](https://github.com/ttmx)! - Adds content scheduling hooks for plugins to react when entries are scheduled or unscheduled.
+
+- [#1695](https://github.com/emdash-cms/emdash/pull/1695) [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d) Thanks [@ascorbic](https://github.com/ascorbic)! - Updates EmDashHead JSON-LD rendering for Astro CSP compatibility.
+
+ Sites using `` do not need to change anything. JSON-LD structured data is still rendered automatically, but EmDash now registers the generated script hashes with Astro's CSP runtime API so strict CSP can allow them.
+
+ This also adds `renderPageMetadata(metadata, { includeJsonLd: false })` for advanced integrations that render metadata manually and want to handle JSON-LD script tags themselves. The default remains unchanged: calling `renderPageMetadata(metadata)` still includes JSON-LD script tags in the returned HTML string.
+
+### Patch Changes
+
+- [#1661](https://github.com/emdash-cms/emdash/pull/1661) [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c) Thanks [@greymoth-jp](https://github.com/greymoth-jp)! - The editor footer now counts CJK (Chinese, Japanese, Korean) characters in its word count and reading-time estimate. Because these scripts have no spaces between words, the footer previously counted a whole paragraph as a single word and showed "1 min read" for long CJK drafts, even though the published page reported the correct reading time. The footer now matches the published reading time for CJK content; English and other space-delimited text is unchanged.
+
+- [#1561](https://github.com/emdash-cms/emdash/pull/1561) [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a) Thanks [@marcusbellamyshaw-cell](https://github.com/marcusbellamyshaw-cell)! - Fixes datetime fields becoming unsavable through the admin editor ([#1368](https://github.com/emdash-cms/emdash/issues/1368)). A `datetime-local` input (or a seed) produces a naive value such as `2026-06-04T18:30:00` with no `Z` suffix or timezone offset, which the field validator rejected — and because the editor re-sends every field on autosave, an entry holding such a value could no longer be saved. Datetime fields now accept naive values (with or without seconds), values with a `Z` suffix or an explicit offset, and date-only values, while still rejecting non-dates.
+
+- [#1560](https://github.com/emdash-cms/emdash/pull/1560) [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d) Thanks [@marcusbellamyshaw-cell](https://github.com/marcusbellamyshaw-cell)! - Fixes a cryptic build failure when a configured plugin has no resolvable entrypoint ([#1416](https://github.com/emdash-cms/emdash/issues/1416)). Passing an inline `definePlugin({...})` result directly to `plugins: []` previously failed deep in the bundler with an unhelpful "failed to resolve import" error. The build now fails fast with a clear message that names the offending plugin and explains that `plugins: []` entries must resolve to a file or package entrypoint — move the plugin into its own module and reference it from there.
+
+- [#1603](https://github.com/emdash-cms/emdash/pull/1603) [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227) Thanks [@Vallhalen](https://github.com/Vallhalen)! - Fixes silent `null` entries on wide-schema collections under Cloudflare D1. The content loader's single-query `LEFT JOIN _emdash_seo` added 5 alias columns to every result set, which pushed collections with ~95+ flat user fields past D1's per-query column limit (~100). The query failed with `D1_ERROR: too many columns in result set`, the error was wrapped as a generic `Failed to load entry`, and the call site surfaced `null`. SEO is now folded into a single aggregated JSON column (mirroring how byline and taxonomy hydration already work), keeping the result-set width bounded regardless of how wide the collection schema gets while preserving the single round trip.
+
+- [#1542](https://github.com/emdash-cms/emdash/pull/1542) [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777) Thanks [@marcusbellamyshaw-cell](https://github.com/marcusbellamyshaw-cell)! - Fixes a crash that returned HTTP 500 on every route on Cloudflare Workers when native plugins are registered with `definePlugin` (`Cannot access 'SIMPLE_ID' before initialization`). Plugin registration is now safe regardless of bundle ordering.
+
+- [#1554](https://github.com/emdash-cms/emdash/pull/1554) [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4) Thanks [@marcusbellamyshaw-cell](https://github.com/marcusbellamyshaw-cell)! - Fixes collection `where` taxonomy filters matching nothing when filtering a non-default locale by its localized term slug. Term slugs now resolve in the active query locale ([#1480](https://github.com/emdash-cms/emdash/issues/1480)).
+
+- [#1674](https://github.com/emdash-cms/emdash/pull/1674) [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6) Thanks [@khoinguyenpham04](https://github.com/khoinguyenpham04)! - Adds the internal media usage index foundation for upcoming usage-aware media workflows. This creates the usage index schema during migrations but does not change Media Library behavior yet.
+
+- [#1399](https://github.com/emdash-cms/emdash/pull/1399) [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6) Thanks [@scottbuscemi](https://github.com/scottbuscemi)! - Cut per-render D1 round trips on public pages by caching taxonomy definitions across the worker isolate, and harden the runtime/DB singletons against bundler module duplication.
+
+ Every public render that hydrates entry terms read `SELECT * FROM _emdash_taxonomy_defs` (via `getTaxonomyDefs` → `getCollectionTaxonomyNames`), which only had per-request caching. On Cloudflare D1, where the worker colo is often far from the database primary, each query is a ~40ms cross-region round trip, so this fired on every warm request for no benefit — taxonomy _definitions_ change extremely rarely (created via the admin API or a seed; there is no edit/delete-def path). They're now cached per-isolate behind a `globalThis` Symbol holder (the same two-tier pattern as `settings/index.ts` and the byline field-defs cache), keyed by resolved locale and invalidated in-memory by every def write (`handleTaxonomyCreate`, seed application). Invalidation is in-memory rather than a persisted version probe on purpose: a per-request version read would merely replace the query being removed, yielding no net saving on warm isolates. Isolated databases (playground / DO preview) bypass the cache.
+
+ Separately, the cached runtime instance, the DB-instance cache, and the in-flight DB-init promise (`astro/middleware.ts`, `emdash-runtime.ts`) were plain module-scoped variables. Under Vite SSR chunk duplication those can become multiple independent copies, letting cold-start migrations and bootstrap reads re-run on requests that should have hit the warm cache. They now live on `globalThis` behind Symbol keys, matching the existing `SETUP_VERIFIED_KEY` / request-context / request-cache singletons.
+
+ No schema changes, no public API changes, fully backwards compatible.
+
+- [#1692](https://github.com/emdash-cms/emdash/pull/1692) [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6) Thanks [@MA2153](https://github.com/MA2153)! - Restores the missing `idx_taxonomies_parent` index on `taxonomies(parent_id)`, which was silently dropped by the i18n table rebuild in an earlier version. Installs upgrade automatically; hierarchical (parent/child) taxonomy lookups are indexed again.
+
+- [#1696](https://github.com/emdash-cms/emdash/pull/1696) [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes i18n collection sitemaps so untranslated entries include self hreflang and x-default alternates.
+
+- Updated dependencies [[`dc32673`](https://github.com/emdash-cms/emdash/commit/dc32673b013f3ef5fcf7c23159b774d5ed1b8c60), [`fe832ce`](https://github.com/emdash-cms/emdash/commit/fe832ce224b55ea5d83cb5652cc38a8035a574db)]:
+ - @emdash-cms/admin@0.26.0
+ - @emdash-cms/auth@0.26.0
+ - @emdash-cms/gutenberg-to-portable-text@0.26.0
+
## 0.25.1
### Patch Changes
diff --git a/packages/core/package.json b/packages/core/package.json
index cfe2f1d2a..da62c0f4b 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "emdash",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Astro-native CMS with WordPress migration support",
"type": "module",
"main": "dist/index.mjs",
diff --git a/packages/create-emdash/CHANGELOG.md b/packages/create-emdash/CHANGELOG.md
index c246cd850..46e0c85e2 100644
--- a/packages/create-emdash/CHANGELOG.md
+++ b/packages/create-emdash/CHANGELOG.md
@@ -1,5 +1,7 @@
# create-emdash
+## 0.26.0
+
## 0.25.1
## 0.25.0
diff --git a/packages/create-emdash/package.json b/packages/create-emdash/package.json
index 6ff1d1175..17b031780 100644
--- a/packages/create-emdash/package.json
+++ b/packages/create-emdash/package.json
@@ -1,6 +1,6 @@
{
"name": "create-emdash",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Create a new EmDash CMS project",
"type": "module",
"bin": "./dist/index.mjs",
diff --git a/packages/gutenberg-to-portable-text/CHANGELOG.md b/packages/gutenberg-to-portable-text/CHANGELOG.md
index 634e038f9..070095e32 100644
--- a/packages/gutenberg-to-portable-text/CHANGELOG.md
+++ b/packages/gutenberg-to-portable-text/CHANGELOG.md
@@ -1,5 +1,7 @@
# @emdash-cms/gutenberg-to-portable-text
+## 0.26.0
+
## 0.25.1
## 0.25.0
diff --git a/packages/gutenberg-to-portable-text/package.json b/packages/gutenberg-to-portable-text/package.json
index ada0584ca..8e8366bc1 100644
--- a/packages/gutenberg-to-portable-text/package.json
+++ b/packages/gutenberg-to-portable-text/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/gutenberg-to-portable-text",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Convert WordPress Gutenberg blocks to Portable Text",
"type": "module",
"main": "dist/index.mjs",
diff --git a/packages/plugins/embeds/CHANGELOG.md b/packages/plugins/embeds/CHANGELOG.md
index e1888a8b4..84c67ac62 100644
--- a/packages/plugins/embeds/CHANGELOG.md
+++ b/packages/plugins/embeds/CHANGELOG.md
@@ -1,5 +1,12 @@
# @emdash-cms/plugin-embeds
+## 0.1.32
+
+### Patch Changes
+
+- Updated dependencies []:
+ - @emdash-cms/blocks@0.26.0
+
## 0.1.31
### Patch Changes
diff --git a/packages/plugins/embeds/package.json b/packages/plugins/embeds/package.json
index 1232e2d07..2e3095746 100644
--- a/packages/plugins/embeds/package.json
+++ b/packages/plugins/embeds/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/plugin-embeds",
- "version": "0.1.31",
+ "version": "0.1.32",
"description": "Embed blocks for EmDash CMS - YouTube, Vimeo, Twitter, Bluesky, Mastodon, and more",
"type": "module",
"main": "src/index.ts",
diff --git a/packages/workerd/CHANGELOG.md b/packages/workerd/CHANGELOG.md
index a65aa34de..2df00dd08 100644
--- a/packages/workerd/CHANGELOG.md
+++ b/packages/workerd/CHANGELOG.md
@@ -1,5 +1,12 @@
# @emdash-cms/sandbox-workerd
+## 0.1.16
+
+### Patch Changes
+
+- Updated dependencies [[`facdcfc`](https://github.com/emdash-cms/emdash/commit/facdcfc745059a6f183581963fcc29c8b6efec63), [`f44a277`](https://github.com/emdash-cms/emdash/commit/f44a2775c8e87be1398befcb29da6bec28bad01c), [`971c627`](https://github.com/emdash-cms/emdash/commit/971c6271e810a8e12e63303778a132a48eb75f4a), [`e5b95e1`](https://github.com/emdash-cms/emdash/commit/e5b95e195e1307237db9eb26806c54c76cc0f81d), [`13b87b7`](https://github.com/emdash-cms/emdash/commit/13b87b70296443db14bf163cd3b25ff2a5701227), [`8f7604d`](https://github.com/emdash-cms/emdash/commit/8f7604dfd8f274b7a62bcbccd53068930b304777), [`5dea403`](https://github.com/emdash-cms/emdash/commit/5dea4035ec2f15fa2248e1621386a91320d50f6d), [`3d80be5`](https://github.com/emdash-cms/emdash/commit/3d80be5e0f1e91844bcf138dea8e86861bc484b4), [`d1116ae`](https://github.com/emdash-cms/emdash/commit/d1116ae6d02f5c15ea5efb68cce78bb24f13ccb6), [`192741f`](https://github.com/emdash-cms/emdash/commit/192741f9a34ede62e23c3de63e3b2483f0b948b6), [`737da19`](https://github.com/emdash-cms/emdash/commit/737da19f56998a5e7f77eecf9337d5f29a18cea6), [`5299d38`](https://github.com/emdash-cms/emdash/commit/5299d38d9c7e92b9faafbe24820164517fc2360c)]:
+ - emdash@0.26.0
+
## 0.1.15
### Patch Changes
diff --git a/packages/workerd/package.json b/packages/workerd/package.json
index d218b4ada..5695f1902 100644
--- a/packages/workerd/package.json
+++ b/packages/workerd/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/sandbox-workerd",
- "version": "0.1.15",
+ "version": "0.1.16",
"description": "workerd-based plugin sandbox for EmDash on Node.js",
"type": "module",
"main": "dist/index.mjs",
diff --git a/packages/x402/CHANGELOG.md b/packages/x402/CHANGELOG.md
index 93f42f8c7..bbd39a7e7 100644
--- a/packages/x402/CHANGELOG.md
+++ b/packages/x402/CHANGELOG.md
@@ -1,5 +1,7 @@
# @emdash-cms/x402
+## 0.26.0
+
## 0.25.1
## 0.25.0
diff --git a/packages/x402/package.json b/packages/x402/package.json
index 753f79f6a..25e3dfb5d 100644
--- a/packages/x402/package.json
+++ b/packages/x402/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/x402",
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "x402 payment protocol integration for Astro sites",
"license": "MIT",
"repository": {