Release 26.07.13-01
Release: v26.07.10-01 → v26.07.13-01
Caution
Rollback Warning: This release contains an irrevertable change that is non-trivial to rollback from.
- Viewtools (VTL): This restores the
$json.generate($rawResults.response)aggregations/tookInMillis/suggestcontract; rolling back silently re-breaks any template that navigates those keys (zero-iteration loops, no error or log). (#36512)
Features & Enhancements
- UI: New
dot-content-thumbnailcomponent unifies all admin content thumbnails (image/SVG/PDF/video/icon) into one Angular viewer across all 10 surfaces, with proper SVG vector rendering and static video first-frame previews. (#36424) - SDK: Added a Vue.js SDK (
@dotcms/vue) and rewrote the Vue example app, bringing page rendering and live in-context UVE editing to parity with the React and Angular SDKs. (#36477) - SDK / Examples: Updated the Next.js example to a standalone
nextjs-experimentsdemo (Analytics and Experiments now use separate infrastructures) and bumped references to the20260630starter. (#36490)
Fixes and Known Issues
- Viewtools (VTL):
$json.generate($rawResults.response)again includesaggregations,tookInMillis, andsuggest, fixing templates (e.g.sitemap.vtl) that rendered empty after the OpenSearch migration — navigate aggregations directly asaggregations.<name>.buckets(drop the legacy.get("asMap")hop). (#36512) - Edit Content: History Tab now compares versions in the locale you are viewing and switches the compared version in place instead of exiting compare view, plus assorted loading/skeleton UX fixes. (#36461)
- Block Editor: Content-type and contentlet slash-menu pickers now search server-side on every keystroke, so records past the first 40 are findable, with the sub-menu correctly re-anchoring to the caret. (#36488)
- Edit Content: Relationship field table now right-aligns the last data column positionally, fixing misaligned status chips when
showFieldsreorders columns. (#36542) - OSGi: Plugin uploads on a clustered instance now decide restarts against each node's live framework state under the cluster lock, fixing plugins left permanently unresolved after adding a new exported package. (#36503)
- Indexing:
deactivateIndexno longer orphans the OpenSearch store when the last index is removed, preventing a stale pointer from recreating a deleted index empty on restart. (#36502) - Reindex: Per-entry mapping now runs under a bounded timeout, so a hung filesystem
staton network storage can no longer wedge the single-threadedReindexThreadand halt all indexing. (#36499) - OpenSearch Index: Delete fan-out now exists-checks the shadow leg first and logs expected post-migration misses through the configurable shadow-write policy instead of noisy ERROR stack traces. (#36431)
- Logging: Stack traces now collapse framework/plumbing frames (Tomcat, servlet, GraphQL, executors, reflection) into a
... suppressed NN linesmarker while keepingcom.dotcms/com.dotmarketingframes and cause chains, tunable viaCMS_LOG4J_STACK_FILTER. (#36516)
Infrastructure & Security
- Permissions: "Copy and Edit" and the page
_deepcopyendpoint now enforce instance-level WRITE permission, returning 403 instead of letting View/Read-only users duplicate content. (#36510) - Search: Added integration coverage and documentation for the non-finite
_scoreregression, verifying field-sorted/api/es/searchand/api/es/rawqueries return valid JSON withnullscores. (#36489) - Frontend Testing: Migrated all frontend test files from
@ngneat/spectator/jestto@openng/spectator/jest. (#36481) - Backend Testing:
ImportUtilTestrelationship tests now use unique content-type variables, eliminating cascading failures caused by asynchronous cleanup under dual-write migration phases. (#36518)