Repository navigation
v6.9.0
Highlights
@byline/host-tanstack-start,@byline/i18n: Copy and download a document's JSON from the API view. The collection editor's API view now has Copy JSON and Download JSON buttons beside the locale and depth controls. Both export the complete loaded payload as formatted JSON, including branches collapsed in the tree, for the currently selected content locale and population depth; they do not fetch other locales or additional related documents. The downloaded file is named after the collection, document, locale and any depth above zero (for exampledocs-<id>-fr-depth2.json). If the browser refuses clipboard access, an error message suggests the download instead. The JSON tree still opens only the first two levels, so large documents stay fast to render.@byline/host-tanstack-start: Document view menu reorganised. The row of controls beside a document's heading now has two groups. The data group holds Copy JSON and Download JSON, then the locale and depth controls; the navigation group holds preview, history, Edit and API. On narrow screens the row wraps between the groups, never inside one. Every icon button, including preview and history, now has a tooltip in the same style as the admin sidebar, and the history button has an accessible name it previously lacked. The same applies to singletons.
Bug Fixes
-
@byline/core,@byline/client,@byline/db-postgres,@byline/db-mysql,@byline/admin,@byline/host-tanstack-start: Removing a block type from a schema no longer loses content silently or makes documents unsaveable. Previously, if you removed a block type from a collection'sblocksfield, stored instances of it disappeared from reconstructed documents with no warning. The next save dropped them if they came last in the field, and failed withCannot destructure property '_id'if they came first or in the middle. Different serializers also disagreed about what the document contained. Now reads report what was left out, and public pages keep rendering the surviving blocks.- Admin editor: shows a warning banner and a placeholder card at each unavailable block's original position, explaining that saving will remove the content.
- SDK reads:
ClientDocumentexposes a new_unavailableBlocksfield (field path, original position, block type and id) on both strict and lenient reads. It is metadata for editors and agents; do not show it to public visitors. - Server log: the server logs each affected document version once per process.
Content writes now drop unavailable blocks consistently, while keeping the other locales' content for the surviving blocks. This applies to updates, version restore, duplicate, copy-to-locale, delete-locale and singleton updates. Earlier versions keep the removed blocks' rows, so a definition removed by mistake can be recovered: declare it again, then restore the last version that contained the blocks. See Collection versioning → Removed block types.
-
@byline/core: Duplicating a document that contains blocks no longer fails. Duplication used to strip each block's_typealong with its_id, so writing the copy failed withinvalid block type. Duplicates now keep the block types and receive fresh identities. -
@byline/search-postgres,@byline/search-mysql: Clearer analyzer-fingerprint mismatch guidance.SEARCH_INDEX_REINDEX_REQUIREDused to tell any mismatched process to rebuild the index. When run from a workstation or import script on a different Node.js/ICU version, that rebuild locked the serving application out of its own index. The message and documentation now say to align the process's Node.js/ICU version and analyzer configuration with the serving application first. They also say to rebuild only from the serving environment, and only for an intentional analyzer change or an index with no recorded fingerprint. Exact fingerprint enforcement, the error code and its structured fields are unchanged. -
@byline/host-tanstack-start: Restored the'use client'directive in two admin modules (the app bar and the scheduled-publications list), where it had been moved below the imports and so had no effect.
Chores
@byline/ui: Added Storybook to the UI package and fixed arootDiroverride that broke knip's mapping from build output to source.- monorepo: Updated the planning records under
specs/to reflect which work has shipped, refreshed the MCP server plan, and revised the documentation for passkeys and the architecture section order.
Breaking Changes
@byline/core:CollectionAdminConfig.slugandSingletonAdminConfig.slugare renamed topath. The property always held the collection'spath, and the mismatched name had already caused a lookup bug. Calls todefineAdmin()anddefineSingletonAdmin()are unchanged, because both derive the value from the schema. Code that reads.slugfrom an admin config, or builds one as an object literal, must usepathinstead. There is no alias.getCollectionAdminConfig()andgetSingletonAdminConfig()take the same argument, now namedpath. This ships in a minor release because no known application reads or builds the property directly; breaking only for code that does.
All other @byline/* packages bumped to 6.9.0 in lockstep with no behavioural changes this cycle.