diff --git a/.changeset/admin-panel-surfaces.md b/.changeset/admin-panel-surfaces.md
deleted file mode 100644
index 2f5d039b5..000000000
--- a/.changeset/admin-panel-surfaces.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes admin lists, tables and info cards rendering as transparent against the page background. Card containers in the content list, content type list, content type editor, media library, comments, users and device authorization views now have an explicit `bg-kumo-base` surface so they're visually distinct from the body.
-
-Also fixes column header labels in content list tables ("Title", "Status", etc.) rendering pale because of an undefined Tailwind class (`text-kumo-fg`) -- they now use the default text color and rely on the sort indicator icon to signal active state.
diff --git a/.changeset/better-cameras-smoke.md b/.changeset/better-cameras-smoke.md
deleted file mode 100644
index ecf4e6ccf..000000000
--- a/.changeset/better-cameras-smoke.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Replaces 20 raw ` ` elements across the admin UI with Kumo's `Switch` and `Checkbox` components. Single-boolean toggles (SEO, Enable comments, Required, etc.) become `Switch`; multi-select / list-context checkboxes (collection multi-select, term tree nodes) become `Checkbox`. Drops manual styling and label markup that duplicated what the Kumo components provide built-in.
diff --git a/.changeset/changeset-rs256-support.md b/.changeset/changeset-rs256-support.md
deleted file mode 100644
index ce7de8ebb..000000000
--- a/.changeset/changeset-rs256-support.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-"@emdash-cms/auth": patch
-"emdash": patch
----
-
-Enhances Passkey authentication with polymorphic algorithm support. Adds support for RS256 (RSA) alongside the existing ES256 (ECDSA) implementation, ensuring full compatibility with Windows Hello, hardware security keys, and FIDO2 standards. Includes a database migration to track and persist credential algorithms for future-proof authentication.
-
-Note for standalone `@emdash-cms/auth` consumers: If your `credentials` table already exists, you must manually run `ALTER TABLE credentials ADD COLUMN algorithm INTEGER NOT NULL DEFAULT -7` to support this update. The `DEFAULT -7` value ensures that existing rows (which are all ES256) continue to work seamlessly without requiring any data backfill.
diff --git a/.changeset/cli-bundle-size-caps.md b/.changeset/cli-bundle-size-caps.md
deleted file mode 100644
index d231de2cb..000000000
--- a/.changeset/cli-bundle-size-caps.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-"@emdash-cms/registry-cli": minor
-"emdash": minor
----
-
-Enforces the sandboxed plugin bundle size caps from RFC 0001 §"Bundle size limits" in both the `bundle` and `publish` CLI flows: total decompressed ≤ 256 KB, per-file decompressed ≤ 128 KB, and at most 20 files per bundle. The previous bundle command capped only the total at 5 MB; the publish command now also re-validates the decompressed tarball before signing the release record so a publisher hits the same cap locally that aggregators enforce at ingest. Bundles between 256 KB and the old 5 MB ceiling will now be rejected — usually a sign the plugin is bundling host-provided dependencies or assets that belong in a CDN rather than the plugin payload.
diff --git a/.changeset/comment-moderation-checkboxes.md b/.changeset/comment-moderation-checkboxes.md
deleted file mode 100644
index 0927b8b43..000000000
--- a/.changeset/comment-moderation-checkboxes.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes broken checkboxes on the comments moderation page (`/_emdash/admin/comments`). Selecting a comment threw a JavaScript error and did not select the row.
diff --git a/.changeset/forms-embed-definition-envelope.md b/.changeset/forms-embed-definition-envelope.md
deleted file mode 100644
index 55cc72f64..000000000
--- a/.changeset/forms-embed-definition-envelope.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/plugin-forms": patch
----
-
-Fix embedded forms so public rendering accepts the API response envelope returned by the form definition route.
diff --git a/.changeset/idempotent-016-api-tokens.md b/.changeset/idempotent-016-api-tokens.md
deleted file mode 100644
index cedaef636..000000000
--- a/.changeset/idempotent-016-api-tokens.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes migration `016_api_tokens` failing with `table "_emdash_api_tokens" already exists` after a partially-applied previous attempt. If `up()` crashed mid-way (D1 subrequest limit, isolate cancellation, transient connection error), the migration record never got recorded and Kysely re-ran the migration from the top on the next request, blocking every subsequent boot. `up()` now uses `IF NOT EXISTS` on every CREATE so a retry skips already-applied steps and finishes the remainder. Resolves the "table already exists" error reported on fresh Cloudflare Workers + D1 deploys.
diff --git a/.changeset/legal-doodles-move.md b/.changeset/legal-doodles-move.md
deleted file mode 100644
index 5c4f23069..000000000
--- a/.changeset/legal-doodles-move.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes button and link inconsistencies across the admin UI. Standardises on Kumo's `Button` `icon` prop and `LinkButton` (with `external` for new-tab links) instead of manual icon spacing and raw anchor styling, removes a `` invalid HTML nesting in the plugin manager, and translates two stray English strings in the user list empty state.
diff --git a/.changeset/mcp-menu-locale-awareness.md b/.changeset/mcp-menu-locale-awareness.md
deleted file mode 100644
index ada10853c..000000000
--- a/.changeset/mcp-menu-locale-awareness.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-"emdash": patch
----
-
-Make the MCP menu write tools locale-aware by exposing `locale` on `menu_create`,
-`menu_update`, `menu_delete`, and `menu_set_items`, exposing `translationOf` on
-`menu_create`, and teaching `handleMenuSetItems()` to target the requested locale
-and tag inserted menu items with that menu's locale.
-
-All seven menu-name lookups (`handleMenuUpdate`, `handleMenuDelete`,
-`handleMenuSetItems`, `handleMenuItemCreate`, `handleMenuItemUpdate`,
-`handleMenuItemDelete`, `handleMenuItemReorder`) now fail loud with the new
-`AMBIGUOUS_LOCALE` error code (HTTP 400) when called with a `name` that exists
-in multiple locales and no `locale` is provided. Previously the lookup silently
-picked an arbitrary translation, which could rewrite or delete the wrong
-locale's menu on multi-locale installs. The error message lists the available
-locales so callers can recover. Single-locale installs and callers that already
-pass `locale` are unaffected.
-
-The `translationOf` → `locale` requirement is now enforced inside
-`handleMenuCreate` (returns `VALIDATION_ERROR`), so REST/SDK callers get the
-same guard the MCP boundary already provided.
diff --git a/.changeset/media-allowed-types.md b/.changeset/media-allowed-types.md
deleted file mode 100644
index da7967dc6..000000000
--- a/.changeset/media-allowed-types.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-"emdash": minor
-"@emdash-cms/admin": minor
----
-
-Adds per-field allowed MIME types for `file` and `image` fields. Field-level `allowedTypes` is now honored end-to-end: it filters the media picker, widens upload acceptance for that field (so e.g. a zip-only field can accept zip uploads even though the global allowlist excludes them), and validates referenced media against the destination field on content save. The schema editor in admin gains an "Allowed types" control with curated presets and freeform entry.
-
-Behavior change: the `image` builder's `allowedTypes` option was previously accepted but read by nothing. It is now load-bearing — a code-first schema that already passed `allowedTypes` (e.g. `["image/png"]`) will now actually narrow the picker and gate uploads. Most users will see no change; if you set this option intending the old (silent) behavior, drop it.
-
-Behavior change: updating a field via the admin schema editor now explicitly clears its validation when the form contains no validation settings, instead of leaving an existing `validation` value intact. This only affects fields with pre-existing validation that is not expressible in the editor UI.
diff --git a/.changeset/modern-maps-remain.md b/.changeset/modern-maps-remain.md
deleted file mode 100644
index 49b5c3b70..000000000
--- a/.changeset/modern-maps-remain.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes invalid `` HTML produced by `... ` patterns across the admin UI. Introduces a `RouterLinkButton` component that wraps TanStack Router's ` ` with Kumo button styling (`variant`, `size`, `shape`, `icon` props), and migrates all existing ` ` usages to use it. Extracts the duplicated "Back to settings" header link into a shared `BackToSettingsLink` component.
diff --git a/.changeset/plugin-types-extract.md b/.changeset/plugin-types-extract.md
deleted file mode 100644
index 918b5b707..000000000
--- a/.changeset/plugin-types-extract.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Refactors the plugin manifest types to re-export from `@emdash-cms/plugin-types`. The capability vocabulary (`PluginCapability`, `CAPABILITY_RENAMES`, `normalizeCapability`, `isDeprecatedCapability`) and manifest shape (`ManifestHookEntry`, `ManifestRouteEntry`, `PluginStorageConfig`, `StorageCollectionConfig`) now live in the shared package so the registry CLI can write the same types core reads. Existing imports from `emdash`'s plugin types module continue to work unchanged.
diff --git a/.changeset/plugin-types-package.md b/.changeset/plugin-types-package.md
deleted file mode 100644
index af69effb4..000000000
--- a/.changeset/plugin-types-package.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/plugin-types": patch
----
-
-Adds `@emdash-cms/plugin-types`: shared TypeScript types for the EmDash plugin manifest contract — capability vocabulary (`PluginCapability`, `CAPABILITY_RENAMES`, `isDeprecatedCapability`, `normalizeCapability`), manifest shape (`PluginManifest`, `ManifestHookEntry`, `ManifestRouteEntry`, `PluginAdminConfig`, `PluginStorageConfig`). Consumed by both `emdash` (manifest reader at install/runtime) and `@emdash-cms/registry-cli` (manifest writer at bundle/publish time). After the registry phase 1 cutover removes the legacy bundling code from core, both sides will continue depending on this single source of truth.
diff --git a/.changeset/public-women-behave.md b/.changeset/public-women-behave.md
deleted file mode 100644
index d8888928b..000000000
--- a/.changeset/public-women-behave.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes the long tail of untranslated English strings in the admin UI: settings panels, marketplace, sandboxed-plugin host, auth flows, taxonomy/menu management, and lib/api fallback messages. After this PR, EmDash admin UI is fully localizable across all known surfaces.
diff --git a/.changeset/registry-cli-exit-hang.md b/.changeset/registry-cli-exit-hang.md
deleted file mode 100644
index 980d9a87f..000000000
--- a/.changeset/registry-cli-exit-hang.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-cli": patch
----
-
-Fixes the CLI hanging indefinitely after a successful `login` or `logout`. `run()` was returning correctly, but something in the OAuth path left a ref'd handle alive that prevented Node's event loop from draining. Workaround: force-exit at the top level once `runMain` resolves. The underlying handle leak is unidentified.
diff --git a/.changeset/registry-cli-granular-scopes.md b/.changeset/registry-cli-granular-scopes.md
deleted file mode 100644
index 6ba26f75f..000000000
--- a/.changeset/registry-cli-granular-scopes.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-cli": patch
----
-
-Switches the login flow to request granular OAuth scopes derived from the `@emdash-cms/registry-lexicons` lexicon set instead of the broad `transition:generic`: `repo:` for every record-shaped lexicon (package profile, package release, publisher profile, publisher verification) and `rpc:?aud=*` for every aggregator query (`getLatestRelease`, `getPackage`, `listReleases`, `resolvePackage`, `searchPackages`). Display name resolution no longer goes through `com.atproto.server.getSession`; the handle is read from the DID document via `LocalActorResolver` so the CLI doesn't need an `rpc:com.atproto.*` scope and isn't affected by PDS-side DPoP/Bearer compatibility quirks. If the PDS rejects the granular scopes with `invalid_scope`, login automatically retries once with `transition:generic` and prints a notice. Existing sessions continue working with their original scope until they're revoked or re-issued.
diff --git a/.changeset/registry-cli-login-error.md b/.changeset/registry-cli-login-error.md
deleted file mode 100644
index ee5727970..000000000
--- a/.changeset/registry-cli-login-error.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-cli": patch
----
-
-Improves `login` error reporting for OAuth response failures. Previously, transient PDS errors surfaced as a bare `unknown_error` with a stack trace; the CLI now prints the HTTP status, endpoint, OAuth error code/description, a body snippet when the response wasn't OAuth-shaped JSON, and a hint to retry on 5xx responses.
diff --git a/.changeset/registry-cli-package.md b/.changeset/registry-cli-package.md
deleted file mode 100644
index 39928c057..000000000
--- a/.changeset/registry-cli-package.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-cli": patch
----
-
-Adds `@emdash-cms/registry-cli`: standalone CLI for the experimental plugin registry. Subcommands for `login`, `logout`, `whoami`, `switch`, `search`, `info`, `bundle`, and `publish`. Atproto OAuth via loopback callback server. The `publish` flow fetches the tarball from the URL, verifies a sha256 multihash, extracts and validates `manifest.json`, locally validates each lexicon record, and atomically writes profile + release records (with the EmDash declaredAccess trust extension) via a single atproto `applyWrites`. Distributes via `npx @emdash-cms/registry-cli` to keep atproto deps out of the core CMS install.
diff --git a/.changeset/registry-client-package.md b/.changeset/registry-client-package.md
deleted file mode 100644
index 2a8e87bab..000000000
--- a/.changeset/registry-client-package.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-client": patch
----
-
-Adds `@emdash-cms/registry-client`: atproto-aware client for the EmDash plugin registry. Three independent layers — credential storage (filesystem / env-vars / in-memory), publisher repo operations, and discovery against an aggregator. EXPERIMENTAL — pin to an exact version while RFC 0001 is in flight.
diff --git a/.changeset/registry-lexicons-nsid-lists.md b/.changeset/registry-lexicons-nsid-lists.md
deleted file mode 100644
index 2f159d4e5..000000000
--- a/.changeset/registry-lexicons-nsid-lists.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-lexicons": minor
----
-
-Adds `RECORD_NSIDS` and `QUERY_NSIDS` const arrays alongside the existing `NSID` map. They enumerate the record-shaped and query-shaped lexicons in this package so consumers (e.g. tooling that builds OAuth `repo:` / `rpc:` scopes) can derive their list from the lexicon set instead of hand-rolling one that drifts.
diff --git a/.changeset/registry-lexicons-package.md b/.changeset/registry-lexicons-package.md
deleted file mode 100644
index b28ebb9ea..000000000
--- a/.changeset/registry-lexicons-package.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/registry-lexicons": patch
----
-
-Adds `@emdash-cms/registry-lexicons`: generated TypeScript types and runtime validation schemas for the EmDash plugin registry lexicons (`com.emdashcms.experimental.*`). EXPERIMENTAL — NSIDs and shapes will change while RFC 0001 is in flight; pin to an exact version.
diff --git a/.changeset/seed-menu-item-i18n.md b/.changeset/seed-menu-item-i18n.md
deleted file mode 100644
index 987914c2e..000000000
--- a/.changeset/seed-menu-item-i18n.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes seed menu items losing their `translation_group` across export/apply by adding optional `id`, `locale`, and `translationOf` fields to `SeedMenuItem`. The export emits stable seed IDs and `translationOf` references; the apply resolves them to the anchor's `translation_group`, matching the existing pattern for content entries, taxonomies, and terms.
diff --git a/.changeset/seo-og-image-in-panel.md b/.changeset/seo-og-image-in-panel.md
deleted file mode 100644
index 69e5951e3..000000000
--- a/.changeset/seo-og-image-in-panel.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes the OG image picker in the content editor only appearing for collections with a field literally named `featured_image`. The OG image control now lives in the SEO sidebar panel alongside the other SEO fields, so any collection with `seo` enabled can set a social preview image regardless of whether it has a featured image field.
diff --git a/.changeset/server-timing-metrics.md b/.changeset/server-timing-metrics.md
deleted file mode 100644
index 601d83130..000000000
--- a/.changeset/server-timing-metrics.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Adds always-on `db.*` and `cache.*` Server-Timing fields so render-phase performance is diagnosable in production. Each request now emits `db.total` (cumulative DB ms), `db.count` (query count), `db.first` / `db.last` (first/last query offset from request start), and `cache.hit` / `cache.miss` (request-scoped cache stats). The Kysely log hook is now always installed so counters work without setting `EMDASH_QUERY_LOG`.
diff --git a/.changeset/sixty-wombats-itch.md b/.changeset/sixty-wombats-itch.md
deleted file mode 100644
index 0069157c1..000000000
--- a/.changeset/sixty-wombats-itch.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Removes the sticky editor header from content / content-type / section / settings pages. The sticky implementation had transparency artifacts (backdrop-blur over varied content), layout fragility (negative margins canceling parent padding), z-index conflicts with the app bar, and ~85px of permanent vertical chrome. Each editor now renders a Save button at the bottom of the form so users can save without scrolling back to the top header. The distraction-free hover-overlay header in the content editor is preserved.
diff --git a/.changeset/sweet-toys-matter.md b/.changeset/sweet-toys-matter.md
deleted file mode 100644
index 6a03eec20..000000000
--- a/.changeset/sweet-toys-matter.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"emdash": patch
----
-
-Fixes Postgres rate-limit queries by quoting the reserved `window` column name.
diff --git a/.changeset/swift-turtles-yell.md b/.changeset/swift-turtles-yell.md
deleted file mode 100644
index 92f7a297e..000000000
--- a/.changeset/swift-turtles-yell.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-i18n(id): complete Indonesian translation (320 strings)
diff --git a/.changeset/table-support.md b/.changeset/table-support.md
deleted file mode 100644
index a9297bf59..000000000
--- a/.changeset/table-support.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": minor
----
-
-Adds table support to the PortableText editor. Users can now insert and edit tables via the slash command menu (/table) or toolbar button. Tables support header rows, column/row insertion and deletion, and include a bubble menu for quick editing.
diff --git a/.changeset/tall-flies-vanish.md b/.changeset/tall-flies-vanish.md
deleted file mode 100644
index 971b9a380..000000000
--- a/.changeset/tall-flies-vanish.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Fixes ~250 untranslated English strings in the admin UI's most-used screens (router toasts, content type editor, widgets, byline and user routes, invite-accept flow, portable text editor toolbar, image and embed editor nodes, user list). All `title=`, `aria-label=`, `placeholder=`, and toast messages in these areas now flow through Lingui.
diff --git a/.changeset/tall-oranges-appear.md b/.changeset/tall-oranges-appear.md
deleted file mode 100644
index 494547b42..000000000
--- a/.changeset/tall-oranges-appear.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Replaces raw `` and ` ` elements across the admin UI with Kumo's `Select` and `Input` components. This gives consistent styling, proper focus rings, accessibility (label association via the Field wrapper), and dark-mode handling for free instead of relying on hand-rolled Tailwind classes that bypassed the design system.
diff --git a/.changeset/young-beans-notice.md b/.changeset/young-beans-notice.md
deleted file mode 100644
index 62a2847b8..000000000
--- a/.changeset/young-beans-notice.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@emdash-cms/admin": patch
----
-
-Translates the remaining untranslated string in the Indonesian locale, bringing it to 100% coverage.
diff --git a/fixtures/perf-site/CHANGELOG.md b/fixtures/perf-site/CHANGELOG.md
index ad96cabdb..92e4e45a3 100644
--- a/fixtures/perf-site/CHANGELOG.md
+++ b/fixtures/perf-site/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/fixture-perf-site
+## 0.0.6
+
+### Patch Changes
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - emdash@0.11.0
+ - @emdash-cms/cloudflare@0.11.0
+
## 0.0.5
### Patch Changes
diff --git a/fixtures/perf-site/package.json b/fixtures/perf-site/package.json
index 34b8b0d46..aafa02744 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.5",
+ "version": "0.0.6",
"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 1aae2883b..9d37634d5 100644
--- a/infra/blog-demo/CHANGELOG.md
+++ b/infra/blog-demo/CHANGELOG.md
@@ -1,5 +1,14 @@
# @emdash-cms/perf-demo-site
+## 0.0.6
+
+### Patch Changes
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`06d5f3f`](https://github.com/emdash-cms/emdash/commit/06d5f3f016aee44e0b6f44de5d6fc067b3a7b751), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - emdash@0.11.0
+ - @emdash-cms/plugin-forms@0.2.2
+ - @emdash-cms/cloudflare@0.11.0
+
## 0.0.5
### Patch Changes
diff --git a/infra/blog-demo/package.json b/infra/blog-demo/package.json
index e777c56b0..0bc9d4a40 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.5",
+ "version": "0.0.6",
"private": true,
"type": "module",
"scripts": {
diff --git a/infra/cache-demo/CHANGELOG.md b/infra/cache-demo/CHANGELOG.md
index 5e653198f..20074ab53 100644
--- a/infra/cache-demo/CHANGELOG.md
+++ b/infra/cache-demo/CHANGELOG.md
@@ -1,5 +1,14 @@
# @emdash-cms/cache-demo-site
+## 0.0.6
+
+### Patch Changes
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`06d5f3f`](https://github.com/emdash-cms/emdash/commit/06d5f3f016aee44e0b6f44de5d6fc067b3a7b751), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - emdash@0.11.0
+ - @emdash-cms/plugin-forms@0.2.2
+ - @emdash-cms/cloudflare@0.11.0
+
## 0.0.5
### Patch Changes
diff --git a/infra/cache-demo/package.json b/infra/cache-demo/package.json
index 6203bed0e..141d8ed1a 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.5",
+ "version": "0.0.6",
"private": true,
"type": "module",
"scripts": {
diff --git a/packages/admin/CHANGELOG.md b/packages/admin/CHANGELOG.md
index 67e3420f1..646e149a6 100644
--- a/packages/admin/CHANGELOG.md
+++ b/packages/admin/CHANGELOG.md
@@ -1,5 +1,48 @@
# @emdash-cms/admin
+## 0.11.0
+
+### Minor Changes
+
+- [#942](https://github.com/emdash-cms/emdash/pull/942) [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8) Thanks [@MA2153](https://github.com/MA2153)! - Adds per-field allowed MIME types for `file` and `image` fields. Field-level `allowedTypes` is now honored end-to-end: it filters the media picker, widens upload acceptance for that field (so e.g. a zip-only field can accept zip uploads even though the global allowlist excludes them), and validates referenced media against the destination field on content save. The schema editor in admin gains an "Allowed types" control with curated presets and freeform entry.
+
+ Behavior change: the `image` builder's `allowedTypes` option was previously accepted but read by nothing. It is now load-bearing — a code-first schema that already passed `allowedTypes` (e.g. `["image/png"]`) will now actually narrow the picker and gate uploads. Most users will see no change; if you set this option intending the old (silent) behavior, drop it.
+
+ Behavior change: updating a field via the admin schema editor now explicitly clears its validation when the form contains no validation settings, instead of leaving an existing `validation` value intact. This only affects fields with pre-existing validation that is not expressible in the editor UI.
+
+- [#921](https://github.com/emdash-cms/emdash/pull/921) [`530b013`](https://github.com/emdash-cms/emdash/commit/530b013000e0547bc01f252113cff77c1e26e485) Thanks [@jcheese1](https://github.com/jcheese1)! - Adds table support to the PortableText editor. Users can now insert and edit tables via the slash command menu (/table) or toolbar button. Tables support header rows, column/row insertion and deletion, and include a bubble menu for quick editing.
+
+### Patch Changes
+
+- [#958](https://github.com/emdash-cms/emdash/pull/958) [`7f6b6ea`](https://github.com/emdash-cms/emdash/commit/7f6b6ead417f3b495843a4da5653531cf735aae4) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes admin lists, tables and info cards rendering as transparent against the page background. Card containers in the content list, content type list, content type editor, media library, comments, users and device authorization views now have an explicit `bg-kumo-base` surface so they're visually distinct from the body.
+
+ Also fixes column header labels in content list tables ("Title", "Status", etc.) rendering pale because of an undefined Tailwind class (`text-kumo-fg`) -- they now use the default text color and rely on the sort indicator icon to signal active state.
+
+- [#952](https://github.com/emdash-cms/emdash/pull/952) [`131bea6`](https://github.com/emdash-cms/emdash/commit/131bea68b7f580e353716a1a1934f2a6fec3b3e7) Thanks [@ascorbic](https://github.com/ascorbic)! - Replaces 20 raw ` ` elements across the admin UI with Kumo's `Switch` and `Checkbox` components. Single-boolean toggles (SEO, Enable comments, Required, etc.) become `Switch`; multi-select / list-context checkboxes (collection multi-select, term tree nodes) become `Checkbox`. Drops manual styling and label markup that duplicated what the Kumo components provide built-in.
+
+- [#956](https://github.com/emdash-cms/emdash/pull/956) [`54b5aa1`](https://github.com/emdash-cms/emdash/commit/54b5aa1c189d7ebd8d34e02a9b3c3a560b5f263f) Thanks [@CacheMeOwside](https://github.com/CacheMeOwside)! - Fixes broken checkboxes on the comments moderation page (`/_emdash/admin/comments`). Selecting a comment threw a JavaScript error and did not select the row.
+
+- [#934](https://github.com/emdash-cms/emdash/pull/934) [`c630e31`](https://github.com/emdash-cms/emdash/commit/c630e31d1362a275c95324f4bbc1e92d0a4646cf) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes button and link inconsistencies across the admin UI. Standardises on Kumo's `Button` `icon` prop and `LinkButton` (with `external` for new-tab links) instead of manual icon spacing and raw anchor styling, removes a `` invalid HTML nesting in the plugin manager, and translates two stray English strings in the user list empty state.
+
+- [#949](https://github.com/emdash-cms/emdash/pull/949) [`7aa1897`](https://github.com/emdash-cms/emdash/commit/7aa189782946bb99397ea909cac50fc1109b27b9) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes invalid `` HTML produced by `... ` patterns across the admin UI. Introduces a `RouterLinkButton` component that wraps TanStack Router's ` ` with Kumo button styling (`variant`, `size`, `shape`, `icon` props), and migrates all existing ` ` usages to use it. Extracts the duplicated "Back to settings" header link into a shared `BackToSettingsLink` component.
+
+- [#940](https://github.com/emdash-cms/emdash/pull/940) [`0b8a319`](https://github.com/emdash-cms/emdash/commit/0b8a319e7afb247b1ebacd60aeb6052bec5560d5) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes the long tail of untranslated English strings in the admin UI: settings panels, marketplace, sandboxed-plugin host, auth flows, taxonomy/menu management, and lib/api fallback messages. After this PR, EmDash admin UI is fully localizable across all known surfaces.
+
+- [#957](https://github.com/emdash-cms/emdash/pull/957) [`13ff061`](https://github.com/emdash-cms/emdash/commit/13ff061517ede4b29608de0120283914b43e6b76) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes the OG image picker in the content editor only appearing for collections with a field literally named `featured_image`. The OG image control now lives in the SEO sidebar panel alongside the other SEO fields, so any collection with `seo` enabled can set a social preview image regardless of whether it has a featured image field.
+
+- [#955](https://github.com/emdash-cms/emdash/pull/955) [`49b66d9`](https://github.com/emdash-cms/emdash/commit/49b66d910c80b87b2632ad34e923695c9a302a05) Thanks [@ascorbic](https://github.com/ascorbic)! - Removes the sticky editor header from content / content-type / section / settings pages. The sticky implementation had transparency artifacts (backdrop-blur over varied content), layout fragility (negative margins canceling parent padding), z-index conflicts with the app bar, and ~85px of permanent vertical chrome. Each editor now renders a Save button at the bottom of the form so users can save without scrolling back to the top header. The distraction-free hover-overlay header in the content editor is preserved.
+
+- [#966](https://github.com/emdash-cms/emdash/pull/966) [`1b2fa77`](https://github.com/emdash-cms/emdash/commit/1b2fa77d0c1455f9478908234f45e9d91847e044) Thanks [@ahliweb](https://github.com/ahliweb)! - i18n(id): complete Indonesian translation (320 strings)
+
+- [#937](https://github.com/emdash-cms/emdash/pull/937) [`af15975`](https://github.com/emdash-cms/emdash/commit/af15975b1c8daf6bdef216ac56693568d448a112) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes ~250 untranslated English strings in the admin UI's most-used screens (router toasts, content type editor, widgets, byline and user routes, invite-accept flow, portable text editor toolbar, image and embed editor nodes, user list). All `title=`, `aria-label=`, `placeholder=`, and toast messages in these areas now flow through Lingui.
+
+- [#950](https://github.com/emdash-cms/emdash/pull/950) [`a4968c1`](https://github.com/emdash-cms/emdash/commit/a4968c105741ca008035d1f33e55851b52a7d2d6) Thanks [@ascorbic](https://github.com/ascorbic)! - Replaces raw `` and ` ` elements across the admin UI with Kumo's `Select` and `Input` components. This gives consistent styling, proper focus rings, accessibility (label association via the Field wrapper), and dark-mode handling for free instead of relying on hand-rolled Tailwind classes that bypassed the design system.
+
+- [#973](https://github.com/emdash-cms/emdash/pull/973) [`f80fb58`](https://github.com/emdash-cms/emdash/commit/f80fb58ca5906d65e7f1a38d91267ce511d2bef2) Thanks [@ahliweb](https://github.com/ahliweb)! - Translates the remaining untranslated string in the Indonesian locale, bringing it to 100% coverage.
+
+- Updated dependencies []:
+ - @emdash-cms/blocks@0.11.0
+
## 0.10.0
### Patch Changes
diff --git a/packages/admin/package.json b/packages/admin/package.json
index 5ee628f71..b886cbc4d 100644
--- a/packages/admin/package.json
+++ b/packages/admin/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/admin",
- "version": "0.10.0",
+ "version": "0.11.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 545f4a761..212a766d9 100644
--- a/packages/auth-atproto/CHANGELOG.md
+++ b/packages/auth-atproto/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/auth-atproto
+## 0.2.3
+
+### Patch Changes
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - @emdash-cms/auth@0.11.0
+ - emdash@0.11.0
+
## 0.2.2
### Patch Changes
diff --git a/packages/auth-atproto/package.json b/packages/auth-atproto/package.json
index 0e939fe88..04445c49f 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.2",
+ "version": "0.2.3",
"description": "AT Protocol / Atmosphere authentication provider for EmDash CMS",
"type": "module",
"main": "src/auth.ts",
@@ -26,7 +26,7 @@
"license": "MIT",
"peerDependencies": {
"astro": ">=5",
- "emdash": "workspace:>=0.10.0",
+ "emdash": "workspace:>=0.11.0",
"react": ">=18"
},
"devDependencies": {
diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md
index 7a5440ebe..724900163 100644
--- a/packages/auth/CHANGELOG.md
+++ b/packages/auth/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/auth
+## 0.11.0
+
+### Patch Changes
+
+- [#893](https://github.com/emdash-cms/emdash/pull/893) [`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161) Thanks [@j-liszt](https://github.com/j-liszt)! - Enhances Passkey authentication with polymorphic algorithm support. Adds support for RS256 (RSA) alongside the existing ES256 (ECDSA) implementation, ensuring full compatibility with Windows Hello, hardware security keys, and FIDO2 standards. Includes a database migration to track and persist credential algorithms for future-proof authentication.
+
+ Note for standalone `@emdash-cms/auth` consumers: If your `credentials` table already exists, you must manually run `ALTER TABLE credentials ADD COLUMN algorithm INTEGER NOT NULL DEFAULT -7` to support this update. The `DEFAULT -7` value ensures that existing rows (which are all ES256) continue to work seamlessly without requiring any data backfill.
+
## 0.10.0
### Patch Changes
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 7578ba754..35d668446 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/auth",
- "version": "0.10.0",
+ "version": "0.11.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 6f1dabe0c..f98b48f18 100644
--- a/packages/blocks/CHANGELOG.md
+++ b/packages/blocks/CHANGELOG.md
@@ -1,5 +1,7 @@
# @emdash-cms/blocks
+## 0.11.0
+
## 0.10.0
### Minor Changes
diff --git a/packages/blocks/package.json b/packages/blocks/package.json
index 009bc2e89..dcaffcbf0 100644
--- a/packages/blocks/package.json
+++ b/packages/blocks/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/blocks",
- "version": "0.10.0",
+ "version": "0.11.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 22344a197..df2230bd2 100644
--- a/packages/cloudflare/CHANGELOG.md
+++ b/packages/cloudflare/CHANGELOG.md
@@ -1,5 +1,12 @@
# @emdash-cms/cloudflare
+## 0.11.0
+
+### Patch Changes
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - emdash@0.11.0
+
## 0.10.0
### Patch Changes
diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json
index 7df9cb01d..1272c748f 100644
--- a/packages/cloudflare/package.json
+++ b/packages/cloudflare/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/cloudflare",
- "version": "0.10.0",
+ "version": "0.11.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 0dac55894..ff8c7dda3 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,59 @@
# emdash
+## 0.11.0
+
+### Minor Changes
+
+- [#978](https://github.com/emdash-cms/emdash/pull/978) [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681) Thanks [@ascorbic](https://github.com/ascorbic)! - Enforces the sandboxed plugin bundle size caps from RFC 0001 §"Bundle size limits" in both the `bundle` and `publish` CLI flows: total decompressed ≤ 256 KB, per-file decompressed ≤ 128 KB, and at most 20 files per bundle. The previous bundle command capped only the total at 5 MB; the publish command now also re-validates the decompressed tarball before signing the release record so a publisher hits the same cap locally that aggregators enforce at ingest. Bundles between 256 KB and the old 5 MB ceiling will now be rejected — usually a sign the plugin is bundling host-provided dependencies or assets that belong in a CDN rather than the plugin payload.
+
+- [#942](https://github.com/emdash-cms/emdash/pull/942) [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8) Thanks [@MA2153](https://github.com/MA2153)! - Adds per-field allowed MIME types for `file` and `image` fields. Field-level `allowedTypes` is now honored end-to-end: it filters the media picker, widens upload acceptance for that field (so e.g. a zip-only field can accept zip uploads even though the global allowlist excludes them), and validates referenced media against the destination field on content save. The schema editor in admin gains an "Allowed types" control with curated presets and freeform entry.
+
+ Behavior change: the `image` builder's `allowedTypes` option was previously accepted but read by nothing. It is now load-bearing — a code-first schema that already passed `allowedTypes` (e.g. `["image/png"]`) will now actually narrow the picker and gate uploads. Most users will see no change; if you set this option intending the old (silent) behavior, drop it.
+
+ Behavior change: updating a field via the admin schema editor now explicitly clears its validation when the form contains no validation settings, instead of leaving an existing `validation` value intact. This only affects fields with pre-existing validation that is not expressible in the editor UI.
+
+### Patch Changes
+
+- [#893](https://github.com/emdash-cms/emdash/pull/893) [`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161) Thanks [@j-liszt](https://github.com/j-liszt)! - Enhances Passkey authentication with polymorphic algorithm support. Adds support for RS256 (RSA) alongside the existing ES256 (ECDSA) implementation, ensuring full compatibility with Windows Hello, hardware security keys, and FIDO2 standards. Includes a database migration to track and persist credential algorithms for future-proof authentication.
+
+ Note for standalone `@emdash-cms/auth` consumers: If your `credentials` table already exists, you must manually run `ALTER TABLE credentials ADD COLUMN algorithm INTEGER NOT NULL DEFAULT -7` to support this update. The `DEFAULT -7` value ensures that existing rows (which are all ES256) continue to work seamlessly without requiring any data backfill.
+
+- [#976](https://github.com/emdash-cms/emdash/pull/976) [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168) Thanks [@ask-bonk](https://github.com/apps/ask-bonk)! - Fixes migration `016_api_tokens` failing with `table "_emdash_api_tokens" already exists` after a partially-applied previous attempt. If `up()` crashed mid-way (D1 subrequest limit, isolate cancellation, transient connection error), the migration record never got recorded and Kysely re-ran the migration from the top on the next request, blocking every subsequent boot. `up()` now uses `IF NOT EXISTS` on every CREATE so a retry skips already-applied steps and finishes the remainder. Resolves the "table already exists" error reported on fresh Cloudflare Workers + D1 deploys.
+
+- [#939](https://github.com/emdash-cms/emdash/pull/939) [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c) Thanks [@schiste](https://github.com/schiste)! - Make the MCP menu write tools locale-aware by exposing `locale` on `menu_create`,
+ `menu_update`, `menu_delete`, and `menu_set_items`, exposing `translationOf` on
+ `menu_create`, and teaching `handleMenuSetItems()` to target the requested locale
+ and tag inserted menu items with that menu's locale.
+
+ All seven menu-name lookups (`handleMenuUpdate`, `handleMenuDelete`,
+ `handleMenuSetItems`, `handleMenuItemCreate`, `handleMenuItemUpdate`,
+ `handleMenuItemDelete`, `handleMenuItemReorder`) now fail loud with the new
+ `AMBIGUOUS_LOCALE` error code (HTTP 400) when called with a `name` that exists
+ in multiple locales and no `locale` is provided. Previously the lookup silently
+ picked an arbitrary translation, which could rewrite or delete the wrong
+ locale's menu on multi-locale installs. The error message lists the available
+ locales so callers can recover. Single-locale installs and callers that already
+ pass `locale` are unaffected.
+
+ The `translationOf` → `locale` requirement is now enforced inside
+ `handleMenuCreate` (returns `VALIDATION_ERROR`), so REST/SDK callers get the
+ same guard the MCP boundary already provided.
+
+- [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03) Thanks [@ascorbic](https://github.com/ascorbic)! - Refactors the plugin manifest types to re-export from `@emdash-cms/plugin-types`. The capability vocabulary (`PluginCapability`, `CAPABILITY_RENAMES`, `normalizeCapability`, `isDeprecatedCapability`) and manifest shape (`ManifestHookEntry`, `ManifestRouteEntry`, `PluginStorageConfig`, `StorageCollectionConfig`) now live in the shared package so the registry CLI can write the same types core reads. Existing imports from `emdash`'s plugin types module continue to work unchanged.
+
+- [#943](https://github.com/emdash-cms/emdash/pull/943) [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49) Thanks [@Rimander](https://github.com/Rimander)! - Fixes seed menu items losing their `translation_group` across export/apply by adding optional `id`, `locale`, and `translationOf` fields to `SeedMenuItem`. The export emits stable seed IDs and `translationOf` references; the apply resolves them to the anchor's `translation_group`, matching the existing pattern for content entries, taxonomies, and terms.
+
+- [#948](https://github.com/emdash-cms/emdash/pull/948) [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090) Thanks [@ascorbic](https://github.com/ascorbic)! - Adds always-on `db.*` and `cache.*` Server-Timing fields so render-phase performance is diagnosable in production. Each request now emits `db.total` (cumulative DB ms), `db.count` (query count), `db.first` / `db.last` (first/last query offset from request start), and `cache.hit` / `cache.miss` (request-scoped cache stats). The Kysely log hook is now always installed so counters work without setting `EMDASH_QUERY_LOG`.
+
+- [#946](https://github.com/emdash-cms/emdash/pull/946) [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68) Thanks [@LeanderG](https://github.com/LeanderG)! - Fixes Postgres rate-limit queries by quoting the reserved `window` column name.
+
+- Updated dependencies [[`7f6b6ea`](https://github.com/emdash-cms/emdash/commit/7f6b6ead417f3b495843a4da5653531cf735aae4), [`131bea6`](https://github.com/emdash-cms/emdash/commit/131bea68b7f580e353716a1a1934f2a6fec3b3e7), [`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`54b5aa1`](https://github.com/emdash-cms/emdash/commit/54b5aa1c189d7ebd8d34e02a9b3c3a560b5f263f), [`c630e31`](https://github.com/emdash-cms/emdash/commit/c630e31d1362a275c95324f4bbc1e92d0a4646cf), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`7aa1897`](https://github.com/emdash-cms/emdash/commit/7aa189782946bb99397ea909cac50fc1109b27b9), [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31), [`0b8a319`](https://github.com/emdash-cms/emdash/commit/0b8a319e7afb247b1ebacd60aeb6052bec5560d5), [`13ff061`](https://github.com/emdash-cms/emdash/commit/13ff061517ede4b29608de0120283914b43e6b76), [`49b66d9`](https://github.com/emdash-cms/emdash/commit/49b66d910c80b87b2632ad34e923695c9a302a05), [`1b2fa77`](https://github.com/emdash-cms/emdash/commit/1b2fa77d0c1455f9478908234f45e9d91847e044), [`530b013`](https://github.com/emdash-cms/emdash/commit/530b013000e0547bc01f252113cff77c1e26e485), [`af15975`](https://github.com/emdash-cms/emdash/commit/af15975b1c8daf6bdef216ac56693568d448a112), [`a4968c1`](https://github.com/emdash-cms/emdash/commit/a4968c105741ca008035d1f33e55851b52a7d2d6), [`f80fb58`](https://github.com/emdash-cms/emdash/commit/f80fb58ca5906d65e7f1a38d91267ce511d2bef2)]:
+ - @emdash-cms/admin@0.11.0
+ - @emdash-cms/auth@0.11.0
+ - @emdash-cms/plugin-types@0.0.1
+ - @emdash-cms/auth-atproto@0.2.3
+ - @emdash-cms/gutenberg-to-portable-text@0.11.0
+
## 0.10.0
### Minor Changes
diff --git a/packages/core/package.json b/packages/core/package.json
index 0ed34d309..a20d3f209 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "emdash",
- "version": "0.10.0",
+ "version": "0.11.0",
"description": "Astro-native CMS with WordPress migration support",
"type": "module",
"main": "dist/index.mjs",
@@ -215,7 +215,7 @@
},
"peerDependencies": {
"@astrojs/react": ">=5.0.0-beta.0",
- "@emdash-cms/auth-atproto": "workspace:>=0.2.2",
+ "@emdash-cms/auth-atproto": "workspace:>=0.2.3",
"astro": ">=6.0.0-beta.0",
"react": ">=18.0.0",
"react-dom": ">=18.0.0"
diff --git a/packages/create-emdash/CHANGELOG.md b/packages/create-emdash/CHANGELOG.md
index 768e99c26..6a44c6b86 100644
--- a/packages/create-emdash/CHANGELOG.md
+++ b/packages/create-emdash/CHANGELOG.md
@@ -1,5 +1,7 @@
# create-emdash
+## 0.11.0
+
## 0.10.0
### Patch Changes
diff --git a/packages/create-emdash/package.json b/packages/create-emdash/package.json
index 767d83380..808a32d3e 100644
--- a/packages/create-emdash/package.json
+++ b/packages/create-emdash/package.json
@@ -1,6 +1,6 @@
{
"name": "create-emdash",
- "version": "0.10.0",
+ "version": "0.11.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 e6b336603..8d21cadf8 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.11.0
+
## 0.10.0
## 0.9.0
diff --git a/packages/gutenberg-to-portable-text/package.json b/packages/gutenberg-to-portable-text/package.json
index ed66f3909..bdd85a94c 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.10.0",
+ "version": "0.11.0",
"description": "Convert WordPress Gutenberg blocks to Portable Text",
"type": "module",
"main": "dist/index.mjs",
diff --git a/packages/plugin-types/CHANGELOG.md b/packages/plugin-types/CHANGELOG.md
new file mode 100644
index 000000000..5c907cd50
--- /dev/null
+++ b/packages/plugin-types/CHANGELOG.md
@@ -0,0 +1,7 @@
+# @emdash-cms/plugin-types
+
+## 0.0.1
+
+### Patch Changes
+
+- [#923](https://github.com/emdash-cms/emdash/pull/923) [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31) Thanks [@ascorbic](https://github.com/ascorbic)! - Adds `@emdash-cms/plugin-types`: shared TypeScript types for the EmDash plugin manifest contract — capability vocabulary (`PluginCapability`, `CAPABILITY_RENAMES`, `isDeprecatedCapability`, `normalizeCapability`), manifest shape (`PluginManifest`, `ManifestHookEntry`, `ManifestRouteEntry`, `PluginAdminConfig`, `PluginStorageConfig`). Consumed by both `emdash` (manifest reader at install/runtime) and `@emdash-cms/registry-cli` (manifest writer at bundle/publish time). After the registry phase 1 cutover removes the legacy bundling code from core, both sides will continue depending on this single source of truth.
diff --git a/packages/plugin-types/package.json b/packages/plugin-types/package.json
index ab73404c4..131f0c306 100644
--- a/packages/plugin-types/package.json
+++ b/packages/plugin-types/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/plugin-types",
- "version": "0.0.0",
+ "version": "0.0.1",
"description": "Shared TypeScript types for the EmDash plugin manifest contract: capability vocabulary, manifest shape, hook/route entry types. Consumed by core (manifest reader at install/runtime) and registry-cli (manifest writer at bundle/publish time).",
"type": "module",
"main": "dist/index.js",
diff --git a/packages/plugins/api-test/package.json b/packages/plugins/api-test/package.json
index cbecce809..844f839f0 100644
--- a/packages/plugins/api-test/package.json
+++ b/packages/plugins/api-test/package.json
@@ -22,7 +22,7 @@
"author": "Matt Kane",
"license": "MIT",
"peerDependencies": {
- "emdash": "workspace:>=0.10.0",
+ "emdash": "workspace:>=0.11.0",
"react": "^18.0.0 || ^19.0.0",
"@phosphor-icons/react": "^2.1.10"
},
diff --git a/packages/plugins/embeds/CHANGELOG.md b/packages/plugins/embeds/CHANGELOG.md
index 3c57e5198..b76e39541 100644
--- a/packages/plugins/embeds/CHANGELOG.md
+++ b/packages/plugins/embeds/CHANGELOG.md
@@ -1,5 +1,13 @@
# @emdash-cms/plugin-embeds
+## 0.1.11
+
+### Patch Changes
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - emdash@0.11.0
+ - @emdash-cms/blocks@0.11.0
+
## 0.1.10
### Patch Changes
diff --git a/packages/plugins/embeds/package.json b/packages/plugins/embeds/package.json
index 55dd402e9..e7cb1bd61 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.10",
+ "version": "0.1.11",
"description": "Embed blocks for EmDash CMS - YouTube, Vimeo, Twitter, Bluesky, Mastodon, and more",
"type": "module",
"main": "src/index.ts",
@@ -25,7 +25,7 @@
"license": "MIT",
"peerDependencies": {
"astro": ">=6.0.0-beta.0",
- "emdash": "workspace:>=0.10.0"
+ "emdash": "workspace:>=0.11.0"
},
"dependencies": {
"@emdash-cms/blocks": "workspace:*",
diff --git a/packages/plugins/forms/CHANGELOG.md b/packages/plugins/forms/CHANGELOG.md
index d25f88e5a..3d3d3436f 100644
--- a/packages/plugins/forms/CHANGELOG.md
+++ b/packages/plugins/forms/CHANGELOG.md
@@ -1,5 +1,14 @@
# @emdash-cms/plugin-forms
+## 0.2.2
+
+### Patch Changes
+
+- [#983](https://github.com/emdash-cms/emdash/pull/983) [`06d5f3f`](https://github.com/emdash-cms/emdash/commit/06d5f3f016aee44e0b6f44de5d6fc067b3a7b751) Thanks [@ppppangu](https://github.com/ppppangu)! - Fix embedded forms so public rendering accepts the API response envelope returned by the form definition route.
+
+- Updated dependencies [[`f8ee1ed`](https://github.com/emdash-cms/emdash/commit/f8ee1ed5e7b02b8905ebec82fb703e3061fe8161), [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681), [`4c11017`](https://github.com/emdash-cms/emdash/commit/4c11017b833e4c009562b6063fd1fe281639f168), [`f1d4c0b`](https://github.com/emdash-cms/emdash/commit/f1d4c0bfc475ef947f0f4f00d171ab226f89dc6c), [`7c536e5`](https://github.com/emdash-cms/emdash/commit/7c536e59b005a79925dd0ecab46404d9d34196b8), [`d273e9a`](https://github.com/emdash-cms/emdash/commit/d273e9a3d3dff6e356bc17dd3e22d294e9635b03), [`514d32d`](https://github.com/emdash-cms/emdash/commit/514d32d97c11a56cd501f4a45a33524b31badd49), [`8116949`](https://github.com/emdash-cms/emdash/commit/8116949935d7b713ebcb3858435c29e45c00c090), [`c4ee7ad`](https://github.com/emdash-cms/emdash/commit/c4ee7ad838c5fcbc7939fe8102cd87d5d6856e68)]:
+ - emdash@0.11.0
+
## 0.2.1
### Patch Changes
diff --git a/packages/plugins/forms/package.json b/packages/plugins/forms/package.json
index d275a942f..bb7e2d40a 100644
--- a/packages/plugins/forms/package.json
+++ b/packages/plugins/forms/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/plugin-forms",
- "version": "0.2.1",
+ "version": "0.2.2",
"description": "Forms plugin for EmDash CMS - build forms, collect submissions, send notifications",
"type": "module",
"main": "src/index.ts",
@@ -26,7 +26,7 @@
"license": "MIT",
"peerDependencies": {
"astro": ">=6.0.0-beta.0",
- "emdash": "workspace:>=0.10.0",
+ "emdash": "workspace:>=0.11.0",
"react": "^18.0.0 || ^19.0.0",
"@phosphor-icons/react": "^2.1.10",
"@cloudflare/kumo": "^1.0.0"
diff --git a/packages/registry-cli/CHANGELOG.md b/packages/registry-cli/CHANGELOG.md
new file mode 100644
index 000000000..768c51182
--- /dev/null
+++ b/packages/registry-cli/CHANGELOG.md
@@ -0,0 +1,22 @@
+# @emdash-cms/registry-cli
+
+## 0.1.0
+
+### Minor Changes
+
+- [#978](https://github.com/emdash-cms/emdash/pull/978) [`27e6d58`](https://github.com/emdash-cms/emdash/commit/27e6d58ec1ba547ece4736ac0a87309812a95681) Thanks [@ascorbic](https://github.com/ascorbic)! - Enforces the sandboxed plugin bundle size caps from RFC 0001 §"Bundle size limits" in both the `bundle` and `publish` CLI flows: total decompressed ≤ 256 KB, per-file decompressed ≤ 128 KB, and at most 20 files per bundle. The previous bundle command capped only the total at 5 MB; the publish command now also re-validates the decompressed tarball before signing the release record so a publisher hits the same cap locally that aggregators enforce at ingest. Bundles between 256 KB and the old 5 MB ceiling will now be rejected — usually a sign the plugin is bundling host-provided dependencies or assets that belong in a CDN rather than the plugin payload.
+
+### Patch Changes
+
+- [#929](https://github.com/emdash-cms/emdash/pull/929) [`5464b55`](https://github.com/emdash-cms/emdash/commit/5464b551f0100d33fe9adbdd74d3444d37321209) Thanks [@ascorbic](https://github.com/ascorbic)! - Fixes the CLI hanging indefinitely after a successful `login` or `logout`. `run()` was returning correctly, but something in the OAuth path left a ref'd handle alive that prevented Node's event loop from draining. Workaround: force-exit at the top level once `runMain` resolves. The underlying handle leak is unidentified.
+
+- [#929](https://github.com/emdash-cms/emdash/pull/929) [`5464b55`](https://github.com/emdash-cms/emdash/commit/5464b551f0100d33fe9adbdd74d3444d37321209) Thanks [@ascorbic](https://github.com/ascorbic)! - Switches the login flow to request granular OAuth scopes derived from the `@emdash-cms/registry-lexicons` lexicon set instead of the broad `transition:generic`: `repo:` for every record-shaped lexicon (package profile, package release, publisher profile, publisher verification) and `rpc:?aud=*` for every aggregator query (`getLatestRelease`, `getPackage`, `listReleases`, `resolvePackage`, `searchPackages`). Display name resolution no longer goes through `com.atproto.server.getSession`; the handle is read from the DID document via `LocalActorResolver` so the CLI doesn't need an `rpc:com.atproto.*` scope and isn't affected by PDS-side DPoP/Bearer compatibility quirks. If the PDS rejects the granular scopes with `invalid_scope`, login automatically retries once with `transition:generic` and prints a notice. Existing sessions continue working with their original scope until they're revoked or re-issued.
+
+- [#929](https://github.com/emdash-cms/emdash/pull/929) [`5464b55`](https://github.com/emdash-cms/emdash/commit/5464b551f0100d33fe9adbdd74d3444d37321209) Thanks [@ascorbic](https://github.com/ascorbic)! - Improves `login` error reporting for OAuth response failures. Previously, transient PDS errors surfaced as a bare `unknown_error` with a stack trace; the CLI now prints the HTTP status, endpoint, OAuth error code/description, a body snippet when the response wasn't OAuth-shaped JSON, and a hint to retry on 5xx responses.
+
+- [#923](https://github.com/emdash-cms/emdash/pull/923) [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31) Thanks [@ascorbic](https://github.com/ascorbic)! - Adds `@emdash-cms/registry-cli`: standalone CLI for the experimental plugin registry. Subcommands for `login`, `logout`, `whoami`, `switch`, `search`, `info`, `bundle`, and `publish`. Atproto OAuth via loopback callback server. The `publish` flow fetches the tarball from the URL, verifies a sha256 multihash, extracts and validates `manifest.json`, locally validates each lexicon record, and atomically writes profile + release records (with the EmDash declaredAccess trust extension) via a single atproto `applyWrites`. Distributes via `npx @emdash-cms/registry-cli` to keep atproto deps out of the core CMS install.
+
+- Updated dependencies [[`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31), [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31), [`5464b55`](https://github.com/emdash-cms/emdash/commit/5464b551f0100d33fe9adbdd74d3444d37321209), [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31)]:
+ - @emdash-cms/plugin-types@0.0.1
+ - @emdash-cms/registry-client@0.0.1
+ - @emdash-cms/registry-lexicons@0.1.0
diff --git a/packages/registry-cli/package.json b/packages/registry-cli/package.json
index 0dd17ef6d..b0c0f9ab1 100644
--- a/packages/registry-cli/package.json
+++ b/packages/registry-cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/registry-cli",
- "version": "0.0.0",
+ "version": "0.1.0",
"description": "CLI for publishing plugins to the EmDash plugin registry, and searching it from the terminal. Atproto OAuth, FAIR-shaped records, sandboxed-plugin-only.",
"type": "module",
"main": "dist/api.mjs",
diff --git a/packages/registry-client/CHANGELOG.md b/packages/registry-client/CHANGELOG.md
new file mode 100644
index 000000000..9c543e96d
--- /dev/null
+++ b/packages/registry-client/CHANGELOG.md
@@ -0,0 +1,10 @@
+# @emdash-cms/registry-client
+
+## 0.0.1
+
+### Patch Changes
+
+- [#923](https://github.com/emdash-cms/emdash/pull/923) [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31) Thanks [@ascorbic](https://github.com/ascorbic)! - Adds `@emdash-cms/registry-client`: atproto-aware client for the EmDash plugin registry. Three independent layers — credential storage (filesystem / env-vars / in-memory), publisher repo operations, and discovery against an aggregator. EXPERIMENTAL — pin to an exact version while RFC 0001 is in flight.
+
+- Updated dependencies [[`5464b55`](https://github.com/emdash-cms/emdash/commit/5464b551f0100d33fe9adbdd74d3444d37321209), [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31)]:
+ - @emdash-cms/registry-lexicons@0.1.0
diff --git a/packages/registry-client/package.json b/packages/registry-client/package.json
index d95fe4394..c7cf9b795 100644
--- a/packages/registry-client/package.json
+++ b/packages/registry-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/registry-client",
- "version": "0.0.0",
+ "version": "0.0.1",
"description": "Atproto-aware client for the EmDash plugin registry: credential storage, publisher repo operations, and discovery against an aggregator.",
"type": "module",
"main": "dist/index.js",
diff --git a/packages/registry-lexicons/CHANGELOG.md b/packages/registry-lexicons/CHANGELOG.md
new file mode 100644
index 000000000..3bc8ba6af
--- /dev/null
+++ b/packages/registry-lexicons/CHANGELOG.md
@@ -0,0 +1,11 @@
+# @emdash-cms/registry-lexicons
+
+## 0.1.0
+
+### Minor Changes
+
+- [#929](https://github.com/emdash-cms/emdash/pull/929) [`5464b55`](https://github.com/emdash-cms/emdash/commit/5464b551f0100d33fe9adbdd74d3444d37321209) Thanks [@ascorbic](https://github.com/ascorbic)! - Adds `RECORD_NSIDS` and `QUERY_NSIDS` const arrays alongside the existing `NSID` map. They enumerate the record-shaped and query-shaped lexicons in this package so consumers (e.g. tooling that builds OAuth `repo:` / `rpc:` scopes) can derive their list from the lexicon set instead of hand-rolling one that drifts.
+
+### Patch Changes
+
+- [#923](https://github.com/emdash-cms/emdash/pull/923) [`943df46`](https://github.com/emdash-cms/emdash/commit/943df46d62043df386eef4664fbba4710be16c31) Thanks [@ascorbic](https://github.com/ascorbic)! - Adds `@emdash-cms/registry-lexicons`: generated TypeScript types and runtime validation schemas for the EmDash plugin registry lexicons (`com.emdashcms.experimental.*`). EXPERIMENTAL — NSIDs and shapes will change while RFC 0001 is in flight; pin to an exact version.
diff --git a/packages/registry-lexicons/package.json b/packages/registry-lexicons/package.json
index 25f63f335..6e77c6f21 100644
--- a/packages/registry-lexicons/package.json
+++ b/packages/registry-lexicons/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/registry-lexicons",
- "version": "0.0.0",
+ "version": "0.1.0",
"description": "Generated TypeScript types for EmDash plugin registry lexicons (com.emdashcms.experimental.*). EXPERIMENTAL: NSIDs and shapes will change.",
"type": "module",
"main": "dist/index.js",
diff --git a/packages/x402/CHANGELOG.md b/packages/x402/CHANGELOG.md
index cd0bdeb6a..17ec1e8c1 100644
--- a/packages/x402/CHANGELOG.md
+++ b/packages/x402/CHANGELOG.md
@@ -1,5 +1,7 @@
# @emdash-cms/x402
+## 0.11.0
+
## 0.10.0
## 0.9.0
diff --git a/packages/x402/package.json b/packages/x402/package.json
index d2d4e8d07..a191ee59a 100644
--- a/packages/x402/package.json
+++ b/packages/x402/package.json
@@ -1,6 +1,6 @@
{
"name": "@emdash-cms/x402",
- "version": "0.10.0",
+ "version": "0.11.0",
"description": "x402 payment protocol integration for Astro sites",
"license": "MIT",
"repository": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a23e8ed72..ccd9fe930 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1111,7 +1111,7 @@ importers:
specifier: '>=5'
version: 6.1.3(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
emdash:
- specifier: workspace:>=0.10.0
+ specifier: workspace:>=0.11.0
version: link:../core
kysely:
specifier: ^0.27.6
@@ -1308,7 +1308,7 @@ importers:
specifier: workspace:*
version: link:../auth
'@emdash-cms/auth-atproto':
- specifier: workspace:>=0.2.2
+ specifier: workspace:>=0.2.3
version: link:../auth-atproto
'@emdash-cms/gutenberg-to-portable-text':
specifier: workspace:*
@@ -1620,7 +1620,7 @@ importers:
specifier: ^2.1.10
version: 2.1.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
emdash:
- specifier: workspace:>=0.10.0
+ specifier: workspace:>=0.11.0
version: link:../../core
react:
specifier: ^18.0.0 || ^19.0.0
@@ -1677,7 +1677,7 @@ importers:
specifier: ^0.12.0
version: 0.12.0(astro@6.0.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))
emdash:
- specifier: workspace:>=0.10.0
+ specifier: workspace:>=0.11.0
version: link:../../core
packages/plugins/field-kit:
@@ -1729,7 +1729,7 @@ importers:
specifier: '>=6.0.0-beta.0'
version: 6.0.0-beta.20(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.55.2)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)
emdash:
- specifier: workspace:>=0.10.0
+ specifier: workspace:>=0.11.0
version: link:../../core
react:
specifier: ^18.0.0 || ^19.0.0