Repository navigation
ci: release - #3957
ci: release#3957emdashbot[bot] wants to merge 2 commits into
Conversation
There was a problem hiding this comment.
This is a standard Changesets release PR that consumes the .changeset/id-batch-7.md changeset and publishes the resulting version bumps. I checked the diff, the package versions, the CHANGELOG entries, and the .changeset/config.json fixed group.
The approach is correct: the only code change landed in #3954 (Indonesian translations in @emdash-cms/admin), and Changesets is propagating patch bumps through the configured fixed group (emdash, @emdash-cms/admin, @emdash-cms/auth, @emdash-cms/blocks, @emdash-cms/cloudflare, @emdash-cms/gutenberg-to-portable-text, @emdash-cms/x402, create-emdash) and to dependent packages (@emdash-cms/auth-atproto, @emdash-cms/plugin-test, @emdash-cms/plugin-embeds, @emdash-cms/sandbox-workerd).
The CHANGELOG prose for the one real change is adequate for a patch-level translation update: it names the affected locale, the package surface (admin UI), and uses a present-tense verb.
Everything is consistent: the changeset is removed, versions line up across package.json and CHANGELOG.md, the changelog archive markers are preserved, and no source code is modified. pnpm-lock.yaml does not pin workspace package versions, so no lockfile change is required.
Clean release PR — no findings.
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-test
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-loader
@emdash-cms/registry-moderation
@emdash-cms/registry-verification
upgrade-emdash
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
1e1e0e3 to
d040184
Compare
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
docs | efd5f81 | Oct 11 2026, 09:25 PM |
2158af3 to
38986f9
Compare
13d5aba to
886e830
Compare
d259026 to
b678992
Compare
2f15ec5 to
efd5f81
Compare
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@emdash-cms/admin@1.3.0
Minor Changes
01e1f12Thanks @khoinguyenpham04! - Adds menu renaming and CSS classes to the admin's menu editor. The pencil button next to a menu's title renames the locale version you are editing. A CSS classes field sets an item's classes when you add a custom link or edit any item, and the item list shows each item's classes next to its URL.Patch Changes
#4012
e8bd98eThanks @khoinguyenpham04! - Fixes blocks fields overflowing the content editor on phone-width screens. A long block summary made every block card wider than the screen, which pushed the Add block, Duplicate and Delete buttons out of reach and clipped the block's inputs. Cards now fit the screen. A long summary ends with an ellipsis, and a long one-word block type name wraps. A cut-off summary also shows its first words when its text and the admin language read in different directions, such as English content in the Arabic admin.#3967
5c8ab6bThanks @khoinguyenpham04! - Fixes the Bylines page form so it's clear what a new byline needs. The slug now fills in from the display name, Create stays available, and submitting shows an error under each missing or invalid field instead of leaving the button disabled with no explanation. Optional fields, including custom byline fields that aren't required, are marked "(optional)".#3970
983c08cThanks @marcin-misiewicz-pl! - Completes the Polish (pl) admin translation. Polish admins now see localized text across the whole admin, including the publishing calendar, the editor, the Change domain dialog, bylines, relations, site transfer, backups, the plugin registry, and passkey setup. Previously, 2,255 of 3,384 strings fell back to English. Existing Polish strings now use consistent terminology: „witryna” for site, „wersja” for revision, and „klucz dostępu” for passkey, matching the wording Polish users see in Apple, Google, and Windows system prompts. Four strings that displayed a straymsgstrprefix are also fixed.#4006
d4e0af9Thanks @khoinguyenpham04! - Fixes the content editor sliding up under the admin header after you open an entry by clicking a field on the site in edit mode. The editor's top bar was cut off, a blank strip appeared at the bottom, and scrolling could not bring the bar back.#4035
718c1f2Thanks @bimsonz! - Fixes opening an entry in the admin saving a draft when nothing was edited. It happened when the content ended in something other than a paragraph and was stored in a shape the editor writes differently, such as with emptymarkDefsandmarksarrays (whatmarkdownToPortableTextand the MCP content tools write), a block without astyle, or a code block with extra fields. Such entries showed "Pending changes" that nobody made, and opening them could drop fields the editor doesn't map.#4015
302e011Thanks @khoinguyenpham04! - Fixes the Arabic item count shown beside repeater fields and unregistered database tables. Counts such as 0, 1, 2 and 100 crashed the content editor or the Content Types page, and other counts showed raw message text. Also fixes the Turkish field count in the content type editor, which left out the word "alan".#4031
3511069Thanks @emdashbot! - Fixes clearing an existing taxonomy term description in the admin so the saved value is removed instead of preserved.Editing a tag, category, or custom taxonomy term and deleting the optional Description text now sends
description: ""in the update request, so the server clears the stored value. Previously the empty field was converted toundefinedand dropped from the request body, leaving the previous description in place.#3973
75ef2abThanks @CacheMeOwside! - Adds missing Hindi translations for calendar scheduling notices, byline credits, media cropping and uploads, content type and field editing, block editing, table controls, passkey registration, and export/import transfer flows in the admin UI.#3934
58ac71cThanks @tomislavcf! - Adds Croatian (hr) admin translation. Croatian admins now see localized text across all admin UI areas including the editor, media library, publishing calendar, settings, authentication, plugin registry, and capability consent dialogs. Translation covers ~99% of strings (3,291 of ~3,322) with correct ICU plural forms (one,few,other).#3954
15bbfd7Thanks @Zahid09987! - Updates Indonesian (id) translations in the admin UI.#3961
e0363c3Thanks @Zahid09987! - Updates Indonesian (id) translations in the admin UI.#3984
7a3667bThanks @Zahid09987! - Updates Indonesian (id) translations in the admin UI.#3926
0861e24Thanks @danielmlr! - Fixes the error message shown when publishing, unpublishing, scheduling, unscheduling, or discarding changes fails without a server message, so it follows the admin language instead of staying in English. Most other admin requests that fail without a server message also no longer append an English HTTP status text such as "Internal Server Error" to their error message.#3791
dd983cdThanks @DiogoDuart3! - Fixes two problems with number fields in the content editor. Clearing a number field now saves it as empty instead of0, which previously failed a field's minimum (such asmin: 1) or silently stored zero. Decimal values such as4.50no longer block the Save button with the browser's "nearest valid values" message, whileintegerfields keep stepping in whole numbers.#988
0ce875fThanks @masonjames! - Fixes MCP tool names for plugins with scoped IDs such as@acme/calendar: their tools are listed asacme__calendar__<tool>, which MCP clients accept. Update saved calls that use the old scoped names. Plugins with plain IDs keep their names, and the admin plugin list displays the generated names before consent.A plugin tool whose JSON Schema cannot be read no longer stops other tools from loading. Unreadable input schemas accept object inputs for route validation; unreadable output schemas are omitted. Duplicate generated names keep the first tool and log a warning instead of disabling the MCP endpoint.
#3690
bf92be8Thanks @khoinguyenpham04! - Fixes extra quotation marks appearing around blockquotes in the content editor. The editor displays only the quotation marks included in the text, preserving author-entered punctuation and leaving frontend styling unchanged.#4050
db8325aThanks @khoinguyenpham04! - Updates the post editor to create and edit bylines with the same form as the Bylines page. Choosing Create in a post's byline search opens the full form with the name filled in, so editors can add a website, bio, avatar, linked user, and custom fields before the byline is added to the post. Edit name and slug is now Edit byline and edits every field. The Bylines panel also appears on new posts before their first save.Bylines created from the post editor are no longer marked as guests by default. Previously, every byline created there was a guest; it now starts as a regular byline, as on the Bylines page. To credit a guest writer, turn on Guest byline in the form. Sites whose templates read
byline.isGuestshow new bylines from the post editor as regular bylines unless that switch is on. Existing bylines don't change.Custom admins that render
ContentEditornow receive every form field, includingisGuest, inonQuickCreateBylineandonQuickEditByline, not justsluganddisplayName. Existing callbacks keep working; a callback that marked new bylines as guests before spreading the input now gets the form'sisGuestvalue instead.#4026
7659466Thanks @MarioCerulo! - Adds a first Italian (it) admin catalog for the setup wizard and sign-in screens. Italian is not selectable in the language picker yet.#3977
d4efb97Thanks @kegren! - Translates the Swedish admin strings added since 1.1, including the redesigned content editor, video blocks, the publishing calendar, scheduled changes and the domain move flow.#3936
0e8811dThanks @khoinguyenpham04! - Updates/video, and Video in the add-block menu, to open the video picker first, as/imagedoes. The video block is added once you choose a video, and closing the picker adds nothing. A video block saved without a video, such as one left empty by an earlier version, shows as unplayable, with Replace video to choose one and Delete video to remove it. Blocks chosen from a picker opened by the add-block menu also stay where the menu was if an upload finishes while the picker is open.Updated dependencies [
af92bf7]:@emdash-cms/auth-atproto@0.2.48
Patch Changes
@emdash-cms/cloudflare@1.3.0
Patch Changes
#3886
f16f9f7Thanks @emdashbot! - Fixes sandboxed plugins'ctx.media.readBytes()calls failing with "Media storage is not configured" under concurrent requests on Cloudflare Workers with an R2MEDIAbinding. Sites without that binding continue to use the existing storage callback fallback.Updates
createPluginRuntimeTestHost()to store media fixtures and uploads in its local R2 binding, so plugins can read their bytes through the production bridge.#4047
9f7eb22Thanks @khoinguyenpham04! - Fixes the Playground toolbar covering the end of site pages on narrow screens. Site pages now leave room below their last content, so footer links and buttons such as the theme switcher can be scrolled clear of the toolbar and clicked.Updated dependencies [
291e0f8,bf046ca,20b7177,02d57de,57e6507,8e1e849,dd983cd,24d5ea4,0ce875f,2652774,ecbd1ff,9daecce,2ccc645,e0d395d,2b7ad41,b60ec26,57e6507,b358838]:emdash@1.3.0
Patch Changes
#3955
291e0f8Thanks @khoinguyenpham04! - Fixes<CommentForm>making right-to-left pages (<html dir="rtl">) about 10,000 pixels wider, with a horizontal scrollbar. This happened on every such page in Firefox, and in Chrome and Safari when the form or an element around it is positioned, for example withposition: relative. On right-to-left pages,<Comments>now also indents threaded replies from the right, and the separator before a signed-in commenter's email in<CommentForm>no longer touches the email.#3907
bf046caThanks @emdashbot! - ReducesgetComments()to a single database query when the approved comment list fits on one page.Pages rendering comments previously ran a
COUNTquery followed by the list query, even when the result was not truncated.getComments()now fetches the list first and derives the total from the returned rows whenever cursor pagination indicates there are no more pages, falling back toCOUNTonly for posts that exceed the page limit. Cache misses on sites without an object cache benefit most.#4000
20b7177Thanks @emdashbot! - Fixes first-user passkey registration so the newly created Admin is authenticated immediately after registration verification. Clicking "Open the dashboard" now opens the dashboard instead of redirecting to the login page.#3885
02d57deThanks @emdashbot! - Fix plugin storage cursor behavior when the anchor row of an ordered page is deleted.PluginStorageRepository.query()now encodes scalar ordered field values into the cursor and compares subsequent pages against those values, so ascending walks no longer end early and descending walks no longer restart from the top. Cursors for non-scalar values (objects or arrays) or very long strings fall back to the anchor-row lookup used before this fix, keeping those pages working while still surfacing a clear invalid-cursor error when that anchor row has been deleted. Legacy cursors that do not contain the field values still work under the same fallback.#3942
57e6507Thanks @khoinguyenpham04! - Fixes the visual-editing rich text editor adding a revision to the entry's history every time it saves on blur. Its saves now replace the pending draft revision, like the admin editor's autosave.#3982
8e1e849Thanks @emdashbot! - Fixes new and changed redirects being ignored for pages already in the Workers Cache. Saving a redirect for an exact path now clears the cached page at that path.#3791
dd983cdThanks @DiogoDuart3! - Fixes two problems with number fields in the content editor. Clearing a number field now saves it as empty instead of0, which previously failed a field's minimum (such asmin: 1) or silently stored zero. Decimal values such as4.50no longer block the Save button with the browser's "nearest valid values" message, whileintegerfields keep stepping in whole numbers.#3202
24d5ea4Thanks @eisenbruch! - Fixes full-text search so queries containing lowercase words like "and", "or", "not" or "near" are no longer parsed as FTS5 operators. This restores results for searches with possessive apostrophes and keeps prefix matching for those queries.#988
0ce875fThanks @masonjames! - Fixes MCP tool names for plugins with scoped IDs such as@acme/calendar: their tools are listed asacme__calendar__<tool>, which MCP clients accept. Update saved calls that use the old scoped names. Plugins with plain IDs keep their names, and the admin plugin list displays the generated names before consent.A plugin tool whose JSON Schema cannot be read no longer stops other tools from loading. Unreadable input schemas accept object inputs for route validation; unreadable output schemas are omitted. Duplicate generated names keep the first tool and log a warning instead of disabling the MCP endpoint.
#3584
2652774Thanks @swissky! - Removes up to two database round trips from the first request after a cold start on sites with the plugin marketplace or registry enabled.With the sandbox disabled (
sandbox: false), a failure to load the in-process plugin adapter now stops startup with an error instead of silently starting without any marketplace plugins, matching how sandboxed plugins listed in the integration config already behave.#4005
ecbd1ffThanks @saariuslystoned! - Fixes server-rendered pages that inspect public plugin route metadata before dispatching, so logged-out visitors can load plugin data. Public metadata is available throughgetPublicPluginRouteMetafor both visitors and signed-in users. Private route metadata stays on the signed-ingetPluginRouteMetahelper.#2768
9daecceThanks @saariuslystoned! - Fixes scheduled maintenance stopping after the initialization request in Cloudflareastro dev. EmDash now drives its own maintenance through a dev-only workerd route from the long-lived dev server, keeping plugin cron jobs, scheduled publishing, cleanup, and declared plugin storage index creation running between requests without invoking application-wide scheduled jobs. Also works with HTTPS dev servers, including self-signed certificates.#3997
2ccc645Thanks @bimsonz! - Fixes Astro's route cache, such as Workers Cache, storing a page at a redirect's source after the redirect was saved. A Worker isolate that had not yet reloaded its redirect rules could render the old page and the route cache kept it, even after the cached page was purged. Before the route cache stores a response, the redirect middleware now checks that its rules are current and answers with the redirect when they have changed. This costs one database read for each response the route cache stores; other responses are unchanged.#4044
e0d395dThanks @emdashbot! - Fix saving a draft when retired fields remain only in the published content row. A full read-then-write update no longer fails validation for keys the entry already stores in its live data but that are absent from the current draft revision. Genuinely never-stored unknown keys are still rejected.#3921
2b7ad41Thanks @emdashbot! - Fixesemdash seedto avoid leaking duplicate media rows and adds--skip-mediafor storage-less seeds.$mediareferences now deduplicate against existing ready media rows by content hash, so re-runningemdash seed ... --on-conflict=updatereuses the same rows instead of creating new ones each time.--skip-mediaflag resolves$mediareferences to external URLs without downloading files or creating local./uploads, which is useful when seeding a site whose media lives in remote object storage.#4014
b60ec26Thanks @khoinguyenpham04! - Fixes visual editing selecting all of a text field's text when it is clicked, which made the first keystroke replace the whole value. A click now places the caret where it lands, including on a field inside a link, and text selected by dragging stays selected.#3942
57e6507Thanks @khoinguyenpham04! - Fixes visual editing for empty Portable Text fields, such as the body of a new post. Edit mode now renders the inline editor for them, so the field can be written on the page instead of having no editor at all. The empty editor stays blank until it is clicked, then shows a "Type / for commands..." hint. In edit mode, an empty Portable Text field reads as an empty array instead ofnull.#3265
b358838Thanks @eisenbruch! - FixesgetEmDashCollection'swherefilter so an object with none ofgt,gte,ltorlte(such as{ in: [...] }) now logs a warning instead of silently returning unfiltered rows. Long array values no longer fail on Cloudflare D1 with "too many SQL variables": the longest arrays are each bound as one JSON parameter, keeping ordering and paging in the database on SQLite, D1 and PostgreSQL. Values bound that way compare as text.Updated dependencies [
e8bd98e,5c8ab6b,983c08c,d4e0af9,718c1f2,302e011,3511069,af92bf7,75ef2ab,58ac71c,15bbfd7,e0363c3,7a3667b,0861e24,01e1f12,dd983cd,0ce875f,bf92be8,db8325a,7659466,d4efb97,0e8811d]:@emdash-cms/plugin-cli@0.13.4
Patch Changes
af92bf7Thanks @ascorbic! - Adds an optionalreasonMessageto delegated release intents and shows it inemdash-plugin releaseoutput. Failed releases include the intent ID and guidance for resolving the failure, including when to start a fresh workflow dispatch. Clients remain compatible with release services that return only a reason code.af92bf7]:@emdash-cms/plugin-test@0.2.9
Patch Changes
#3886
f16f9f7Thanks @emdashbot! - Fixes sandboxed plugins'ctx.media.readBytes()calls failing with "Media storage is not configured" under concurrent requests on Cloudflare Workers with an R2MEDIAbinding. Sites without that binding continue to use the existing storage callback fallback.Updates
createPluginRuntimeTestHost()to store media fixtures and uploads in its local R2 binding, so plugins can read their bytes through the production bridge.Updated dependencies [
291e0f8,bf046ca,20b7177,f16f9f7,02d57de,af92bf7,57e6507,8e1e849,dd983cd,24d5ea4,9f7eb22,0ce875f,2652774,ecbd1ff,9daecce,2ccc645,e0d395d,2b7ad41,b60ec26,57e6507,b358838]:@emdash-cms/plugin-embeds@0.1.56
Patch Changes
@emdash-cms/plugin-forms@0.2.10
Patch Changes
#3979
65aa1f4Thanks @eisenbruch! - Fixes the daily digest. Creating a form with the digest on, or turning it on for an existing form, failed with an "Invalid task name" error, and a form created that way was saved with the digest on but never sent one. The digest is now scheduled, including for a duplicated form, and is rescheduled or cancelled when the form's digest settings change.#3031
cc40400Thanks @eisenbruch! - Fixes duplicate element IDs when the same form is embedded more than once on a page. Field IDs were built from the form ID and the field name alone, so a form appearing in, say, a sidebar and a pop-up produced several elements sharing an ID: clicking a label focused the first copy rather than the one beside it, and anything resolving an ID —aria-describedby, a password manager, a test selector — reached the wrong instance. Each rendering now suffixes its IDs with a per-instance value, so labels, inputs and the honeypot stay paired within their own copy. Element IDs are not part of the plugin's API and nothing else references them; the client script scopes its lookups to the form element.#3032
b709d72Thanks @eisenbruch! - Fixes embedded forms showing only the browser's validation bubble instead of the plugin's inline field errors. Native validation is turned off by the client script once it loads, so readers without JavaScript keep it.@emdash-cms/registry-client@0.7.1
Patch Changes
af92bf7Thanks @ascorbic! - Adds an optionalreasonMessageto delegated release intents and shows it inemdash-plugin releaseoutput. Failed releases include the intent ID and guidance for resolving the failure, including when to start a fresh workflow dispatch. Clients remain compatible with release services that return only a reason code.@emdash-cms/registry-loader@0.1.3
Patch Changes
af92bf7]:@emdash-cms/sandbox-workerd@0.9.4
Patch Changes
291e0f8,bf046ca,20b7177,02d57de,57e6507,8e1e849,dd983cd,24d5ea4,0ce875f,2652774,ecbd1ff,9daecce,2ccc645,e0d395d,2b7ad41,b60ec26,57e6507,b358838]:@emdash-cms/auth@1.3.0
No changes in this release.
@emdash-cms/blocks@1.3.0
No changes in this release.
create-emdash@1.3.0
No changes in this release.
@emdash-cms/gutenberg-to-portable-text@1.3.0
No changes in this release.
@emdash-cms/x402@1.3.0
No changes in this release.