Skip to content

Release 26.07.04-01

Choose a tag to compare

@dotCMS-Machine-User dotCMS-Machine-User released this 04 Jul 00:27

Release: v26.06.30-01 → v26.07.04-01

Caution

Rollback Warning: This release contains irrevertable changes that are non-trivial to roll back from.

  • Story Block: Server-side conversion of Markdown to ProseMirror JSON changes how Story Block values are persisted on the shared save path, so downgrading may misread newly stored content. (#36253)
  • Search: Routing /api/es/raw and /api/es/search through the phase-aware SearchAPI alters the read/response path and cannot be cleanly reverted once traffic flows through it. (#36398)

Features & Enhancements

  • Story Block: Markdown supplied to Story Block fields is now converted to ProseMirror JSON server-side, so headless imports and AI agents no longer need a human to re-save the contentlet. (#36253)
  • dotAI: Added OpenRouter as a chat/streaming provider, giving access to hundreds of models behind a single OpenAI-compatible API key. (#36136)
  • dotAI: Added Google AI (Gemini) as a provider with full chat, streaming, embeddings, and image generation support via an AI Studio API key. (#36137)
  • dotAI: Added Anthropic as a direct chat/streaming provider using the Anthropic Messages API. (#36138)
  • Image Editor: Wired the new Angular image editor's Save to the temp-file flow and completed focal-point persistence for the new Edit Content experience. (#36350)
  • Search: /api/es/raw and /api/es/search now route through the phase-aware SearchAPI, so both endpoints follow the active OpenSearch migration phase and survive Elasticsearch decommissioning. (#36398)
  • UVE: Contentlet toolbar buttons now reposition dynamically to stay visible within the iframe as the contentlet is scrolled. (#36402)
  • Relationships: Saving heavily related content now uses bulk tree persistence, lean hydration, and delta-only reindexing, cutting Save/Publish times from minutes to seconds. (#36149)
  • Developer Tooling: Added a lts-backport Claude Code skill that automates backporting LTS patches from linked, merged PRs. (#36393)
  • Developer Tooling: The /gh-issue-troubleshoot command now performs a candidate-diff self-review with critical-change alerts and a configurable verbosity flag. (#36397)

Fixes and Known Issues

  • Edit Content: Date, Date/Time, and Time pickers now use a fixed width and stay open until click-outside, so users can finish selecting the time portion. (#36365)
  • Content Drive: The Upload button is now hidden when items are selected, avoiding uploads that landed in the wrong folder. (#36371)
  • Block Editor: Applying a link to a selected image now wraps the image instead of replacing it with a text link, with a Remove-link action and layout-jump fixes. (#36368)
  • Story Block: The legacy content editor now decodes the $ entity on reopen, so values like $50 display correctly instead of $50. (#36408)
  • Edit Content: Refined the Relationship field UI — Locales chips, aligned status chips, footer-placed hints, and an empty-state link — to match Content Drive. (#36377)
  • OpenSearch: A malformed OS_ENDPOINTS value now falls back to Elasticsearch instead of crashing startup, thanks to lazy client construction. (#36359)
  • Content API: Guarded against a null ContentType in the Story Block refresh path, fixing a silent NPE that returned empty results during push-publish cache invalidation. (#36378)
  • Push Publishing: Bundles containing archived multi-language HTML pages no longer fail, as template propagation is now skipped for archived pages. (#36380)
  • SDK Client: page.get() now always returns errors as an array (empty when none) instead of undefined, keeping responses serializable for Next.js Pages Router. Consumers should check errors.length rather than truthiness. (#36373)
  • UVE: Legacy portlet iframes now reload on site switch regardless of WebSocket state, so switching sites updates content even when the socket is down. (#36403)
  • UVE: Restored hover, selection, and drag on Zone.js traditional pages after in-editor navigation by re-binding listeners to nodes that survive the iframe rewrite. (#36333)

Infrastructure & Security

  • Block Editor: The new Block Editor is now enabled by default. (#36257)
  • Content Types: Refactored the field editing experience into a dedicated DotEditFieldDialogComponent opened via DialogService, with dead-code and dependency cleanup. (#36341)
  • Frontend Build: Migrated several monorepo projects from legacy .eslintrc.json to ESLint flat config for Nx 23 / ESLint 9. (#36390)
  • Search: Added deferred integration and unit coverage for the phase-aware SearchAPI — phase routing, ES fallback, and permission filtering — with no production code changes. (#36395)