Repository navigation
chore(release): version packages - #125
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
6 times, most recently
from
October 26, 2026 01:43
5715bab to
3426a1f
Compare
5 tasks done
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
October 26, 2026 09:21
689ba4c to
c28801d
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 26, 2026 09:23
c28801d to
2b280ed
Compare
Madraka
enabled auto-merge
October 26, 2026 09:55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish 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
@cloudhal/[email protected]
Patch Changes
@cloudhal/[email protected]
Patch Changes
./testingsubpath now ships. The published packages pointed./testingatdist/src/testing.jsand.d.ts, but the build left those files out, so importing@cloudhal/{storage,analytics,comments,schedules}/testingfailed with ERR_MODULE_NOT_FOUND. The suites run on your own vitest, 3 or later, which is an optional peer dependency.@cloudhal/storage's Miniflare helpers also load your ownminiflare, an optional peer of any version. The ranges are wide on purpose. When a direct dependency's optional peer does not match the copy in your project, npm stops with ERESOLVE, even if nothing imports./testing. No semver range matches the prerelease miniflare that wrangler currently brings in, so with a narrower range npm would install a second miniflare beside it.@cloudhal/[email protected]
Patch Changes
@cloudhal/apidepends on Better Auth 1.7.12 and on exactly the versions it uses itself:@better-auth/coreand@better-auth/api-key1.7.12,@better-auth/utils0.5.0 andbetter-call1.4.4.@cloudhal/cloudflareasks for zod ^4.6.7 (GHSA-mrhx-c7xc-m3w5 is fixed in 4.6.6).@cloudhal/core-tsand@cloudhal/astro-rendereruse marked ^18.1.1.@cloudhal/core-tsand@cloudhal/schedulesuse temporal-polyfill 1.0.6.@cloudhal/astro-rendereruses vite ^8.3.5. The Studio shipped in@cloudhal/cliis built with React 19.3.1, TanStack Router 1.170.46 and TanStack Query 5.104.5. marked 18.1.1 splits a few unusual markdown inputs differently: a blockquote ends before an unquoted line that follows a heading, rule or HTML block, and indented HTML blocks interrupt a paragraph. A stored body like that keeps rendering and shows virtual block ids until its next write.@cloudhal/[email protected]
Patch Changes
@cloudhal/apidepends on Better Auth 1.7.12 and on exactly the versions it uses itself:@better-auth/coreand@better-auth/api-key1.7.12,@better-auth/utils0.5.0 andbetter-call1.4.4.@cloudhal/cloudflareasks for zod ^4.6.7 (GHSA-mrhx-c7xc-m3w5 is fixed in 4.6.6).@cloudhal/core-tsand@cloudhal/astro-rendereruse marked ^18.1.1.@cloudhal/core-tsand@cloudhal/schedulesuse temporal-polyfill 1.0.6.@cloudhal/astro-rendereruses vite ^8.3.5. The Studio shipped in@cloudhal/cliis built with React 19.3.1, TanStack Router 1.170.46 and TanStack Query 5.104.5. marked 18.1.1 splits a few unusual markdown inputs differently: a blockquote ends before an unquoted line that follows a heading, rule or HTML block, and indented HTML blocks interrupt a paragraph. A stored body like that keeps rendering and shows virtual block ids until its next write.@cloudhal/[email protected]
Patch Changes
d91ef8f: Dependency patch updates (deps: patch updates and two audit findings (sharp via miniflare, postcss via starlight) #115).
@cloudhal/apidepends on Better Auth 1.7.12 and on exactly the versions it uses itself:@better-auth/coreand@better-auth/api-key1.7.12,@better-auth/utils0.5.0 andbetter-call1.4.4.@cloudhal/cloudflareasks for zod ^4.6.7 (GHSA-mrhx-c7xc-m3w5 is fixed in 4.6.6).@cloudhal/core-tsand@cloudhal/astro-rendereruse marked ^18.1.1.@cloudhal/core-tsand@cloudhal/schedulesuse temporal-polyfill 1.0.6.@cloudhal/astro-rendereruses vite ^8.3.5. The Studio shipped in@cloudhal/cliis built with React 19.3.1, TanStack Router 1.170.46 and TanStack Query 5.104.5. marked 18.1.1 splits a few unusual markdown inputs differently: a blockquote ends before an unquoted line that follows a heading, rule or HTML block, and indented HTML blocks interrupt a paragraph. A stored body like that keeps rendering and shows virtual block ids until its next write.330b650: New
cloudhal export(RFC-0039, cli: export and import a site as a local bundle file #47) writes one site of the local project to a single.cloudhalfile. The file is a gzipped tar holding the site's content graph (nodes, snapshots and the node bodies they reference, as NDJSON parts), its media files and its takedown ledger, with every file's SHA-256 listed in the manifest. The flags:--out <file>names the file, and replaces a file already there once the new one is complete. By default the file is<site-slug>-<YYYYMMDD>.cloudhalin the current folder, dated by the newest timestamp among the rows it holds (deleting content alone does not move that date; the next edit or snapshot does). A file already at the default name is replaced only by the same archive; any other (a later edit the same day, other flags, a deletion) is left alone and the export asks for--out.--site <id>exports another site listed incloudhal.jsonsites.--site,--no-mediaand--latest-onlyare refused on every other command.--no-mediawrites the graph only.--latest-onlykeeps only the published and the latest snapshot, and only the media they and the current content need. It is refused while a field operation is unfinished (cloudhal fields continue|revert).A damaged or missing local media file stops the export (run
cloudhal media verify); so do Ctrl-C and SIGTERM. Either way no file is written and an existing one is left as it was. Exporting an unchanged site again with the same CLI and Node version gives the same bytes. An archive never contains user accounts, sessions, roles, agent keys, comments, readers, analytics, the audit log, scheduled releases, automations, schedule runs, pending approvals, open edit suggestions, deployment secrets or webhook credentials, and the export prints this list. Its history does name who made each change (the user or agent of each snapshot, upload, block edit, review and takedown).2c18a7c: New
cloudhal import <file> [--dry-run](RFC-0039, cli: export and import a site as a local bundle file #47) reads a.cloudhalfile written bycloudhal exportinto the local project, keeping the site's id.cloudhal pulldoes.cloudhal.json'ssiteIdor listed insites, and the project must not hold it yet or hold exactly its nodes; missing snapshots, node bodies and media are added. A site whose nodes differ is refused;--replacereplaces them (see its own note).--no-mediaimports only when the project already has its media.--dry-runprints the manifest and what the import would add, change or remove (nodes by kind and title, snapshots, media to copy), writes nothing, and exits 1 when the import would be refused.33ae911:
cloudhal import <file> --replace [--dry-run](RFC-0039 rollout step 4, cli: export and import a site as a local bundle file #47) makes the local site's nodes the archive's, its published snapshot included, ascloudhal pull --replacedoes.cloudhal pushstill keeps a deployment's own published snapshot, so a local replace never moves production. Snapshots are only ever added.before import <file>and the result asimport <file>; the summary prints(undo: cloudhal import --revert <id>). A new or unchanged site gets no snapshot; a site the plan found unchanged is checked again just before the write, and refused if another process changed it meanwhile. A run that stopped after the first snapshot reuses it the next time.pull --replace. A Studio tab or agent still holding a node at the rev the archive gives it can save over it without a conflict, so the summary counts those nodes and says to reload open Studio tabs.cloudhal import --revert <snapshot-id> [--dry-run]brings the site back to abefore importsnapshot, its published snapshot included, saving the current graph first asbefore revert import <file>, so a revert can itself be reverted. Its revs only move forward: a node edited since comes back at the rev after its current one, so a stale editor gets a conflict. Studio's rollback only moves the published pointer to an earlier snapshot, which cannot undo a replace.cloudhal.jsondoes not list switches itssiteId, and the old id's place insites, to the archive's, editing only those values in the file (layout and other keys stay as written), once the import has landed. The old site stays in the local store, unlisted and untouched; writing the old id back by hand undoes the switch (--revertrestores nodes only), and the summary namescloudhal site deleteto remove the old site for good. A deployed project is warned that its deployment serves the old site, and that a deployment of the imported site is updated from the project that deployed it.--dry-runreports, for bootstrap imports too), and an archive site idcloudhal.jsoncannot name.--dry-runshows the snapshots it would take, the published-snapshot change and thecloudhal.jsonchange; it exits 0, or 1 when the import would be refused.--cancel-schedulesis now refused by every command butcloudhal push.68cd5a1: Studio shows Ended (collection rule) beside the status of a published entry whose collection's expiry has passed (RFC-0042 §3.3, Studio: show "Ended (collection rule)" on entries past an expiry gate (RFC-0042 §3.3) #113), in the collection list and in the entry editor's header. Until now such an entry looked plainly published while the site had already left it out of lists, or answered "not found". The badge explains itself on hover, from the keyboard and with a tap on touch screens. It names the date field, when the entry ended in the site's time zone, and what the site does: the page keeps its address but leaves lists, feeds, the sitemap and search, or the page answers "not found". Drafts, embargoed entries and entries whose own "Hide after" has passed get no badge (their own dates show in the editor's Schedule card). A translation reads its original's date only while the original is published, as the site does. The badge and its words load only for collections that have an expiry. Translations of the new words are AI drafts awaiting review.
Updated dependencies [7223152]
Updated dependencies [d91ef8f]
Updated dependencies [970c8a1]
Updated dependencies [df8695e]
Updated dependencies [f73d05a]
Updated dependencies [f73d05a]
Updated dependencies [6cb7945]
Updated dependencies [f669266]
Updated dependencies [77fa9e5]
Updated dependencies [786a455]
Updated dependencies [8a30e30]
@cloudhal/[email protected]
Patch Changes
@cloudhal/apidepends on Better Auth 1.7.12 and on exactly the versions it uses itself:@better-auth/coreand@better-auth/api-key1.7.12,@better-auth/utils0.5.0 andbetter-call1.4.4.@cloudhal/cloudflareasks for zod ^4.6.7 (GHSA-mrhx-c7xc-m3w5 is fixed in 4.6.6).@cloudhal/core-tsand@cloudhal/astro-rendereruse marked ^18.1.1.@cloudhal/core-tsand@cloudhal/schedulesuse temporal-polyfill 1.0.6.@cloudhal/astro-rendereruses vite ^8.3.5. The Studio shipped in@cloudhal/cliis built with React 19.3.1, TanStack Router 1.170.46 and TanStack Query 5.104.5. marked 18.1.1 splits a few unusual markdown inputs differently: a blockquote ends before an unquoted line that follows a heading, rule or HTML block, and indented HTML blocks interrupt a paragraph. A stored body like that keeps rendering and shows virtual block ids until its next write.lists.backfillsystem job (every five minutes): a budgetedrebuildListValuesfor listed collections that are new, changed, reset by a race or older than migration 0029, sized to the tick plan. Its declared cost (16 statements on the free plan, 150 on paid) is the run's statement budget, which the backfill enforces on every statement, discovery included, and each run starts at another waiting collection. On the paid plan it also removes rows of collections that list no fields any more, never those of a collection listed while it ran.@cloudhal/[email protected]
Patch Changes
./testingsubpath now ships. The published packages pointed./testingatdist/src/testing.jsand.d.ts, but the build left those files out, so importing@cloudhal/{storage,analytics,comments,schedules}/testingfailed with ERR_MODULE_NOT_FOUND. The suites run on your own vitest, 3 or later, which is an optional peer dependency.@cloudhal/storage's Miniflare helpers also load your ownminiflare, an optional peer of any version. The ranges are wide on purpose. When a direct dependency's optional peer does not match the copy in your project, npm stops with ERESOLVE, even if nothing imports./testing. No semver range matches the prerelease miniflare that wrangler currently brings in, so with a narrower range npm would install a second miniflare beside it.@cloudhal/[email protected]
Patch Changes
7223152:
importSite(behindcloudhal pull, the admin bundle routecloudhal pushuses, andcloudhal import) now checks a bundle's project row before inserting it: it must be the site node's project (projectId), a valid Project, with itsidandrevcolumns matching its body. Before, a bundle could plant any projects row.d91ef8f: Dependency patch updates (deps: patch updates and two audit findings (sharp via miniflare, postcss via starlight) #115).
@cloudhal/apidepends on Better Auth 1.7.12 and on exactly the versions it uses itself:@better-auth/coreand@better-auth/api-key1.7.12,@better-auth/utils0.5.0 andbetter-call1.4.4.@cloudhal/cloudflareasks for zod ^4.6.7 (GHSA-mrhx-c7xc-m3w5 is fixed in 4.6.6).@cloudhal/core-tsand@cloudhal/astro-rendereruse marked ^18.1.1.@cloudhal/core-tsand@cloudhal/schedulesuse temporal-polyfill 1.0.6.@cloudhal/astro-rendereruses vite ^8.3.5. The Studio shipped in@cloudhal/cliis built with React 19.3.1, TanStack Router 1.170.46 and TanStack Query 5.104.5. marked 18.1.1 splits a few unusual markdown inputs differently: a blockquote ends before an unquoted line that follows a heading, rule or HTML block, and indented HTML blocks interrupt a paragraph. A stored body like that keeps rendering and shows virtual block ids until its next write.f73d05a: RFC-0042 §4, perf: index list fields for store/API/MCP listings (entry_list_values) #110:
queryContentEntries(the API'sGET /entries?where=…, Studio's lists, MCPlist_entries) answerswhere,orderBy, status, locale,limitandoffsetin SQL from the newentry_list_valuesside table once a collection is ready, instead of reading and evaluating the whole collection; results are the shared evaluator's, which stays the fallback (term filters, collections not ready, operands SQL cannot compare exactly) and the oracle of a seeded property suite on SQLite, D1 and Durable Object SQLite. On the 10,000-entry benchmark the store path drops from 124 ms CPU / 10,001 rows (SQLite) and 176 ms / 10,003 rows read (D1) to 0.6 ms / 22 rows and 5.3 ms / 5,068 rows read; a page at offset 4,980 costs about the same as the first.The store keeps the table exact. Entry creates, updates, moves and deletes write an entry's rows (its
listFieldsvalues asresolveFieldsreads them) in their own batch, and an original's write rewrites its same-site translations' rows; site writes and field operations that change a collection's list definitions reset its readiness in the same batch, and imports reset the site's. A race never refuses a write: it marks the collection not ready. NewrebuildListValues(sql, options)is the resumable, budgeted backfill (guarded per chunk, safe to run concurrently;budget.statementsbounds every statement it issues,startrotates where a run begins,tidyremoves rows of unlisted collections);updateSite, finished field operations andimportSiterun it for what they reset, andopenLocalStoreruns it on open. A field operation's revert resets every listed collection whose values its restored bodies change.deleteContentEntrybehaves as before.revertTagsToTermsnow leaves an entry that was edited after the migration's before-snapshot (by a concurrent write, or before a resumed run) as it is and reports it inedited, instead of restoring its earlier fields, status or collection.f669266:
importSite, used bycloudhal pull, by the admin bundle routecloudhal pushuses, and bycloudhal import, now runs every check before it writes anything, the bootstrap conflict and the 1000-statement limit included, and plans the media ledger with them. A refused bundle leaves the target as it was; before, node bodies could land ahead of a conflict and snapshots ahead of the size limit. Only a storage failure can stop it between its writes, and importing the bundle again completes it. New checks, each before the first write:reason,legal,by,at).snapshot_blobs) reads the target's own asset bodies, never the bundle's text for a body the target already holds.New
planImport(to, bundle, options)returns what an import would change, without writing:With
report: trueit returns a bootstrap conflict and missing media instead of throwing them. A node body that is not JSON is refused asblob <hash> is not JSONinstead of with the parser's message.786a455: New
restoreBundle(from, snapshot): a site bundle of one snapshot's nodes, rebuilt from the stored node bodies, forimportSite(…, { mode: "replace" }), which checks it like any bundle. The site's working copy and published pointer become that snapshot's again (cloudhal import --revert, RFC-0039). Revs only move forward: a node the site holds at the snapshot's rev or a later one, with other content, comes back at the rev after its current one, so a Studio tab or agent still holding a rev that node had gets a conflict instead of saving over it; a node whose content already is the snapshot's is left as it is. It lists the media those nodes need and carries the store's takedowns among them, so taken-down content stays down; a missing node body, or one that is not the node its snapshot ref names, is refused before anything is written.exportSite's output is unchanged.Updated dependencies [d91ef8f]
Updated dependencies [970c8a1]
Updated dependencies [6cb7945]
Updated dependencies [8a30e30]
[email protected]
Patch Changes
@cloudhal/[email protected]
Patch Changes
list_entrieswithorderByandlimitlets the store page (in SQL once the collection's list values are ready, RFC-0042 §4, perf: index list fields for store/API/MCP listings (entry_list_values) #110) instead of loading every match. Arguments, cursors and output are unchanged; withoutorderBythe list keeps its last-updated order./s/and/s+/instead of/\s/and/\s+/. As a result, long-line counted the letter "s" as blank and every real space and indentation run as text. input-label splitaria-labelledbyon the letter "s" and reported labelled inputs as unlabelled. The check parts are nowString.rawtemplates.@cloudhal/[email protected]
Patch Changes
@cloudhal/apidepends on Better Auth 1.7.12 and on exactly the versions it uses itself:@better-auth/coreand@better-auth/api-key1.7.12,@better-auth/utils0.5.0 andbetter-call1.4.4.@cloudhal/cloudflareasks for zod ^4.6.7 (GHSA-mrhx-c7xc-m3w5 is fixed in 4.6.6).@cloudhal/core-tsand@cloudhal/astro-rendereruse marked ^18.1.1.@cloudhal/core-tsand@cloudhal/schedulesuse temporal-polyfill 1.0.6.@cloudhal/astro-rendereruses vite ^8.3.5. The Studio shipped in@cloudhal/cliis built with React 19.3.1, TanStack Router 1.170.46 and TanStack Query 5.104.5. marked 18.1.1 splits a few unusual markdown inputs differently: a blockquote ends before an unquoted line that follows a heading, rule or HTML block, and indented HTML blocks interrupt a paragraph. A stored body like that keeps rendering and shows virtual block ids until its next write../testingsubpath now ships. The published packages pointed./testingatdist/src/testing.jsand.d.ts, but the build left those files out, so importing@cloudhal/{storage,analytics,comments,schedules}/testingfailed with ERR_MODULE_NOT_FOUND. The suites run on your own vitest, 3 or later, which is an optional peer dependency.@cloudhal/storage's Miniflare helpers also load your ownminiflare, an optional peer of any version. The ranges are wide on purpose. When a direct dependency's optional peer does not match the copy in your project, npm stops with ERESOLVE, even if nothing imports./testing. No semver range matches the prerelease miniflare that wrangler currently brings in, so with a narrower range npm would install a second miniflare beside it.@cloudhal/[email protected]
Patch Changes
0029_entry_list_values(RFC-0042 §4, perf: index list fields for store/API/MCP listings (entry_list_values) #110):entry_list_values, the indexed list-field values of entries (field, presence, number, text, collection-sort key, creation time, node, locale and status) with a query index and a per-node index, andentry_list_state, each listed collection's readiness (definition fingerprint, ready flag, backfill epoch and cursor). DDL only; existing data is untouched../testingsubpath now ships. The published packages pointed./testingatdist/src/testing.jsand.d.ts, but the build left those files out, so importing@cloudhal/{storage,analytics,comments,schedules}/testingfailed with ERR_MODULE_NOT_FOUND. The suites run on your own vitest, 3 or later, which is an optional peer dependency.@cloudhal/storage's Miniflare helpers also load your ownminiflare, an optional peer of any version. The ranges are wide on purpose. When a direct dependency's optional peer does not match the copy in your project, npm stops with ERESOLVE, even if nothing imports./testing. No semver range matches the prerelease miniflare that wrangler currently brings in, so with a narrower range npm would install a second miniflare beside it.@cloudhal/[email protected]
No changes in this release.