twenty/v2.25.0
pola-rs/polarstwenty/v2.25.0Jul 29, 2026by prastoin
AI Summary
Introduces Kanban and Calendar widgets for relation fields, moves the email composer to its own page, and fixes numerous database and permission bugs.
Key Highlights
- Relation field widgets now support Kanban, Calendar, and grouped table views.
- Dashboard charts grouped by relation show record names instead of IDs.
- Records that changed while disconnected reappear automatically on reconnect.
- Email composer is now a dedicated page with auto-save drafts.
- Workspace company is automatically enriched via People Data Labs during onboarding.
New Features
- Full-page record tabs support drag-and-drop widget editing.
- Relation field widgets (Kanban, Calendar, Grouped Table).
- Email settings configuration (display name, unsubscribe list).
- Email composer with auto-save and send-test-email option.
- Company enrichment during workspace setup.
- Logic function executions for Call Recorder apps no longer consume credits.
- Skeleton placeholders for front components while loading.
- 'Me' filters for relation fields in dashboard widgets.
Full Release Notes
## Release notes preview <!-- generated-release-notes v1 --> ## š Highlights - Relation field widgets on record pages can now display related records as a kanban board, calendar, or grouped table. ([#23112](https://github.com/twentyhq/twenty/pull/23112)) - Dashboard charts grouped by a relation field now show the related record's name instead of a raw database ID. ([#23163](https://github.com/twentyhq/twenty/pull/23163)) - Records that changed while disconnected now re-appear automatically on reconnect, without needing a page refresh. ([#23357](https://github.com/twentyhq/twenty/pull/23357)) ## ⨠New features - Full-page record tabs (Timeline, Tasks, Notes, Files, Emails, Calendar) now support drag-and-drop widget editing and behave consistently with the rest of the layout editor. ([#23109](https://github.com/twentyhq/twenty/pull/23109)) by @FelixMalfait - Relation field widgets on a record page can now render as a kanban board, calendar, or grouped table, scoped to that record's related data. ([#23112](https://github.com/twentyhq/twenty/pull/23112)) by @FelixMalfait - Dashboard charts grouped by a relation field now show the related record's display name instead of the raw database ID. ([#23163](https://github.com/twentyhq/twenty/pull/23163)) by @bosiraphael - Email settings now let you configure a display name for outgoing emails and manage your unsubscriber list. ([#23180](https://github.com/twentyhq/twenty/pull/23180)) by @neo773 - The email composer moves to its own page, auto-saves drafts you can return to later, and adds a send-test-email option. ([#23188](https://github.com/twentyhq/twenty/pull/23188)) by @neo773 - During workspace setup, the company is automatically enriched from People Data Labs so the AI assistant knows your company from its first reply. ([#23199](https://github.com/twentyhq/twenty/pull/23199)) by @bosiraphael - Logic function executions triggered by Call Recorder and Last Contact app events no longer consume workspace credits. ([#23255](https://github.com/twentyhq/twenty/pull/23255)) by @martmull - Applications can again expose a custom settings tab in their settings detail page. ([#23256](https://github.com/twentyhq/twenty/pull/23256)) by @martmull - Front components (dashboard widgets, side panel items, settings previews) now show a shimmering skeleton placeholder while loading instead of blank space. ([#23261](https://github.com/twentyhq/twenty/pull/23261)) by @bosiraphael - 'Me' filters now work for relation fields pointing to a workspace member (such as an account-owner field) in dashboard widget filters. ([#23282](https://github.com/twentyhq/twenty/pull/23282)) by @bosiraphael ## š Improvements & UX - The onboarding 'Install your first apps' step only shows marketplace apps that have been vetted. ([#23222](https://github.com/twentyhq/twenty/pull/23222)) by @martmull - Clicking a link in a front component that leads to a different domain now shows a confirmation dialog before navigating away. ([#23270](https://github.com/twentyhq/twenty/pull/23270)) by @bosiraphael - The external-link confirmation dialog for front components has a new design with clearer copy and the destination URL shown as a pill. ([#23404](https://github.com/twentyhq/twenty/pull/23404)) by @bosiraphael - The record page card on mobile no longer has a rounded top-left corner and hairline border carried over from the desktop layout. ([#23414](https://github.com/twentyhq/twenty/pull/23414)) by @FelixMalfait - Folder items in the mobile navigation drawer no longer show grey corners around them. ([#23425](https://github.com/twentyhq/twenty/pull/23425)) by @FelixMalfait ## š Bug fixes - The admin panel no longer displays 'latest' as the latest version when DockerHub tag fetching fails; it now shows no version found. ([#22885](https://github.com/twentyhq/twenty/pull/22885)) by @Rehansanjay - The call recording bot now leaves a meeting when only other recording bots remain, rather than staying for up to 30 minutes. ([#23053](https://github.com/twentyhq/twenty/pull/23053)) by @martmull - Google and Microsoft sign-in no longer puts a long-lived refresh token in the redirect URL, browser history, or server access logs. ([#23061](https://github.com/twentyhq/twenty/pull/23061)) by @bosiraphael - Creating a record in a junction relation picker no longer shows the new record twice until the page is reloaded. ([#23185](https://github.com/twentyhq/twenty/pull/23185)) by @neo773 - Front components no longer render a blank panel in Firefox; the structured-clone error that blocked rendering is now handled correctly. ([#23213](https://github.com/twentyhq/twenty/pull/23213)) by @bosiraphael - Application icons now display correctly after install and sync instead of falling back to initials avatars. ([#23245](https://github.com/twentyhq/twenty/pull/23245)) by @martmull - Agent tools now use the agent's assigned role permissions when reading or writing records, rather than the app's default role. ([#23248](https://github.com/twentyhq/twenty/pull/23248)) by @abdulrahmancodes - The message list member backfill upgrade command now runs correctly during a 2.25 upgrade. ([#23271](https://github.com/twentyhq/twenty/pull/23271)) by @prastoin - Upgrading a self-hosted instance from 2.23 to 2.24 no longer fails on startup with a missing `keyValuePair.applicationId` column error. ([#23272](https://github.com/twentyhq/twenty/pull/23272)) by @prastoin - AI chat threads that became permanently broken due to duplicate tool call IDs now work again on the next turn. ([#23277](https://github.com/twentyhq/twenty/pull/23277)) by @etiennejouan - Roles that explicitly deny access to system objects (messages, calendar events) now enforce that restriction; it was previously silently bypassed. ([#23280](https://github.com/twentyhq/twenty/pull/23280)) by @thomtrp - The agent role foreign-key migration now runs correctly during a 2.25 upgrade. ([#23285](https://github.com/twentyhq/twenty/pull/23285)) by @prastoin - AI chat no longer allows oversized tool outputs into conversation history; they are now capped or spilled to files. ([#23286](https://github.com/twentyhq/twenty/pull/23286)) by @etiennejouan - The navigation drawer collapse/expand button now has an accessible label for screen readers. ([#23287](https://github.com/twentyhq/twenty/pull/23287)) by @djadji-gueye - Workspace cleanup no longer times out; missing database indexes on page-layout foreign keys that caused sequential scans are now added. ([#23289](https://github.com/twentyhq/twenty/pull/23289)) by @etiennejouan - Workflow record-change triggers on morph relations no longer offer a phantom `targetId` output variable that doesn't exist. ([#23290](https://github.com/twentyhq/twenty/pull/23290)) by @thomtrp - Custom sidebar links of type PAGE_LAYOUT now open an edit panel when clicked in edit mode. ([#23293](https://github.com/twentyhq/twenty/pull/23293)) by @eeshsaxena - The core database now respects `PG_POOL_MAX_CONNECTIONS` instead of being capped at the node-postgres default of 10 connections. ([#23322](https://github.com/twentyhq/twenty/pull/23322)) by @Weiko - Transactional emails (workspace invites, password resets, email verifications) now have content again; they were being delivered with an empty body. ([#23323](https://github.com/twentyhq/twenty/pull/23323)) by @guillaume-flambard - Icon-only 'more options' buttons across settings pages now have accessible labels for screen readers. ([#23325](https://github.com/twentyhq/twenty/pull/23325)) by @guillaume-flambard - Opening a password reset link while already logged in no longer returns a FORBIDDEN error. ([#23335](https://github.com/twentyhq/twenty/pull/23335)) by @thomtrp - The layout editor and its entry points are now hidden for users whose role lacks the LAYOUTS permission. ([#23343](https://github.com/twentyhq/twenty/pull/23343)) by @Shinu-Cherian - App HTTP route triggers are now blocked for suspended workspaces instead of continuing to serve traffic. ([#23347](https://github.com/twentyhq/twenty/pull/23347)) by @Weiko - Records that changed while the SSE connection was down are re-fetched on reconnect, so live updates no longer go silent until a page refresh. ([#23357](https://github.com/twentyhq/twenty/pull/23357)) by @thomtrp - The onboarding flow no longer hangs indefinitely when a CSS chunk fails to preload, a regression that affected Mobile Safari. ([#23359](https://github.com/twentyhq/twenty/pull/23359)) by @bosiraphael - Stale-chunk auto-reload is now limited to once per 60 seconds, preventing infinite reload loops after a bad deploy. ([#23362](https://github.com/twentyhq/twenty/pull/23362)) by @bosiraphael - Apps using the runAgent API (such as call recorder) no longer receive a 'you are executing in a workflow' system prompt. ([#23394](https://github.com/twentyhq/twenty/pull/23394)) by @abdulrahmancodes - AI agent nodes scoped to a specific object no longer load CRUD tools for every object in the workspace, cutting prompt size dramatically. ([#23400](https://github.com/twentyhq/twenty/pull/23400)) by @etiennejouan - Token usage reported for AI runs no longer double-counts cache-creation tokens. ([#23405](https://github.com/twentyhq/twenty/pull/23405)) by @etiennejouan - The 'Add option' prompt in multiselect fields is now hidden from users who lack the data-model permission. ([#23410](https://github.com/twentyhq/twenty/pull/23410)) by @thomtrp - Installed application icons now display correctly across the UI instead of falling back to initials. ([#23411](https://github.com/twentyhq/twenty/pull/23411)) by @martmull - Single-widget tabs in the side panel and on mobile now render with correct padding instead of sitting flush against the edge. ([#23412](https://github.com/twentyhq/twenty/pull/23412)) by @FelixMalfait - The call recording bot's REC badge now renders as text in production instead of showing empty placeholder boxes. ([#23415](https://github.com/twentyhq/twenty/pull/23415)) by @ehconitin - The inline 'create option' prompt in multiselect fields now works from record detail pages, not only the record index. ([#23420](https://github.com/twentyhq/twenty/pull/23420)) by @thomtrp - Numeric input values in front components now display correctly; they were previously ignored. ([#23421](https://github.com/twentyhq/twenty/pull/23421)) by @bosiraphael - Changing the object in a Search Records workflow step no longer silently resets the Limit and Offset values you had set. ([#23423](https://github.com/twentyhq/twenty/pull/23423)) by @thomtrp - Expected AI chat interruptions (user abort, stream disconnected) no longer appear as errors in Sentry. ([#23426](https://github.com/twentyhq/twenty/pull/23426)) by @etiennejouan - A 1-pixel gap visible between the view bar and the table header row on scaled displays is fixed. ([#23441](https://github.com/twentyhq/twenty/pull/23441)) by @FelixMalfait ## ā” Performance - PostgreSQL connection pool pressure (total, idle, waiting, and maximum connections) is now instrumented with metrics. ([#23251](https://github.com/twentyhq/twenty/pull/23251)) by @Weiko - Concurrent database queries for nested relations are now capped, reducing peak database load on wide selections. ([#23252](https://github.com/twentyhq/twenty/pull/23252)) by @Weiko - Pageview event writes to ClickHouse are now fire-and-forget, reducing tail latency on the metadata API. ([#23274](https://github.com/twentyhq/twenty/pull/23274)) by @Weiko - Calendar and messaging stale-sync jobs now only queue recovery work for workspaces with stale channels, not every workspace. ([#23321](https://github.com/twentyhq/twenty/pull/23321)) by @Weiko - Live stream count metrics now use a Redis sorted set instead of scanning the entire Redis keyspace. ([#23326](https://github.com/twentyhq/twenty/pull/23326)) by @Weiko - Field metadata is cached during API result post-processing, cutting repeated lookups on large nested result sets. ([#23353](https://github.com/twentyhq/twenty/pull/23353)) by @Weiko - The Google webhook OAuth client is reused across requests instead of re-downloading signing certificates each time. ([#23361](https://github.com/twentyhq/twenty/pull/23361)) by @Weiko - API result handlers for fields of the same type are now deduplicated, preventing the same field from being processed multiple times. ([#23364](https://github.com/twentyhq/twenty/pull/23364)) by @Weiko - Tool permission role checks now use the workspace cache instead of querying PostgreSQL on each catalog build. ([#23366](https://github.com/twentyhq/twenty/pull/23366)) by @Weiko - Webhook reads (REST, GraphQL, webhook listing tool) now use the workspace cache, eliminating per-request database queries. ([#23382](https://github.com/twentyhq/twenty/pull/23382)) by @Weiko - Role validation during user invite and role assignment now uses the workspace cache instead of querying PostgreSQL. ([#23383](https://github.com/twentyhq/twenty/pull/23383)) by @Weiko - View entity lookups in mutation guards now use the workspace cache instead of querying PostgreSQL. ([#23384](https://github.com/twentyhq/twenty/pull/23384)) by @Weiko - Partial B-tree indexes added on webhook subscription external IDs for messaging and calendar channels, removing sequential scans per notification. ([#23386](https://github.com/twentyhq/twenty/pull/23386)) by @Weiko ## š§ Developer & API - Agents can declare `roleUniversalIdentifier` in their manifest to automatically receive a role on install, without post-install hooks. ([#23206](https://github.com/twentyhq/twenty/pull/23206)) by @abdulrahmancodes - New `updateWorkflowVersionTrigger` GraphQL mutation for saving workflow triggers; generic CRUD paths that bypassed draft validation are now closed. ([#23207](https://github.com/twentyhq/twenty/pull/23207)) by @thomtrp - Apps can declare `defineUninstallLogicFunction` to run cleanup logic (such as deleting provider-side resources) before the app is removed. ([#23227](https://github.com/twentyhq/twenty/pull/23227)) by @martmull - Server route resolvers can now return a synchronous response to the caller, enabling webhook verification handshakes like Slack's url_verification. ([#23233](https://github.com/twentyhq/twenty/pull/23233)) by @abdulrahmancodes - The `type` field on `PageLayoutManifest` is now typed as `PageLayoutType` instead of `string`, catching invalid values at compile time. ([#23375](https://github.com/twentyhq/twenty/pull/23375)) by @prastoin - Workspace migration delete payloads now expose universal identifiers only, making migration snapshots portable across workspaces. ([#23377](https://github.com/twentyhq/twenty/pull/23377)) by @prastoin - New `application:install` CLI command installs an app on all workspaces where it is not yet installed. ([#23430](https://github.com/twentyhq/twenty/pull/23430)) by @martmull <details> <summary>šļø Internal changes (47)</summary> - feat(website): live community stats, drop hard-coded fallback ([#23047](https://github.com/twentyhq/twenty/pull/23047)) by @mabdullahabaid - message list member backfill ([#23176](https://github.com/twentyhq/twenty/pull/23176)) by @neo773 - TDD: twenty-ui render coverage in the front-component sandbox ā golden tests cataloging every sandbox gap (fully green) ([#23203](https://github.com/twentyhq/twenty/pull/23203)) by @prastoin - Converge drag and drop on shared dnd-kit primitives, remove @hello-pangea/dnd ([#23211](https://github.com/twentyhq/twenty/pull/23211)) by @FelixMalfait - ci: run upgrade mutation guard in the merge queue against main ([#23216](https://github.com/twentyhq/twenty/pull/23216)) by @prastoin - feat(partners): require Twenty experience on apply, drop Cal success ([#23223](https://github.com/twentyhq/twenty/pull/23223)) by @rashad - v1.4.0 ā Raise partner bar: Twenty experience fields + triage ([#23224](https://github.com/twentyhq/twenty/pull/23224)) by @rashad - Consolidate per-queue worker tuning in one explicit config file ([#23229](https://github.com/twentyhq/twenty/pull/23229)) by @martmull - fix: bump fast-uri to 3.1.4 (Dependabot) ([#23234](https://github.com/twentyhq/twenty/pull/23234)) by @mabdullahabaid - fix: bump immutable to 5.1.8 (Dependabot) ([#23235](https://github.com/twentyhq/twenty/pull/23235)) by @mabdullahabaid - fix: bump linkify-it to 5.0.2 (Dependabot) ([#23236](https://github.com/twentyhq/twenty/pull/23236)) by @mabdullahabaid - fix: bump dompurify to 3.4.12 (Dependabot) ([#23237](https://github.com/twentyhq/twenty/pull/23237)) by @mabdullahabaid - fix: bump svgo to 3.3.4 (Dependabot) ([#23238](https://github.com/twentyhq/twenty/pull/23238)) by @mabdullahabaid - fix: bump body-parser to 1.20.6 / 2.3.0 (Dependabot) ([#23239](https://github.com/twentyhq/twenty/pull/23239)) by @mabdullahabaid - fix: bump brace-expansion 1.x/2.x lines (Dependabot) ([#23240](https://github.com/twentyhq/twenty/pull/23240)) by @mabdullahabaid - feat(workflow): mirror all workflowVersion writes to core in-transaction, drop async create/update dual-write ([#23243](https://github.com/twentyhq/twenty/pull/23243)) by @thomtrp - test: cover uninstall logic function hook execution ([#23249](https://github.com/twentyhq/twenty/pull/23249)) by @martmull - Extract front component host wrapper into hooks ([#23262](https://github.com/twentyhq/twenty/pull/23262)) by @bosiraphael - Unify remote element style declarations ([#23263](https://github.com/twentyhq/twenty/pull/23263)) by @bosiraphael - Documentation update ( Legal FAQ and more ) ([#23266](https://github.com/twentyhq/twenty/pull/23266)) by @BOHEUS - fix: lift axios/tar/brace-expansion/body-parser across app lockfiles (Dependabot) ([#23267](https://github.com/twentyhq/twenty/pull/23267)) by @mabdullahabaid - ci: report required status checks on merge_group so the queue isn't blocked ([#23275](https://github.com/twentyhq/twenty/pull/23275)) by @prastoin - ci: report ci-shared-status-check on merge_group ([#23276](https://github.com/twentyhq/twenty/pull/23276)) by @prastoin - fix(ci): diff upgrade mutation guard against the merged base, not stale PR base ([#23278](https://github.com/twentyhq/twenty/pull/23278)) by @prastoin - chore(self-hosting): upgrade to latest twenty CLI tooling ([#23279](https://github.com/twentyhq/twenty/pull/23279)) by @martmull - fix: lift axios/tar/brace-expansion/body-parser in server fixture lockfiles (Dependabot) ([#23291](https://github.com/twentyhq/twenty/pull/23291)) by @mabdullahabaid - v1.4.0 ā partners: auto-link partner user on workspaceMember.created ([#23295](https://github.com/twentyhq/twenty/pull/23295)) by @rashad - docs: set correct credit cost for workflow steps and app logic functions ([#23297](https://github.com/twentyhq/twenty/pull/23297)) by @martmull - chore: remove twenty-companion dead code ([#23310](https://github.com/twentyhq/twenty/pull/23310)) by @prastoin - fix: bump tar 7.5.20 - 7.5.21 in the root lockfile (Dependabot) ([#23330](https://github.com/twentyhq/twenty/pull/23330)) by @mabdullahabaid - fix: bump shell-quote 1.8.4 - 1.10.0 (Dependabot) ([#23331](https://github.com/twentyhq/twenty/pull/23331)) by @mabdullahabaid - fix: bump tar to 7.5.21 across app lockfiles (Dependabot) ([#23332](https://github.com/twentyhq/twenty/pull/23332)) by @mabdullahabaid - fix: bump tar and brace-expansion in seed-dependencies (Dependabot) ([#23333](https://github.com/twentyhq/twenty/pull/23333)) by @mabdullahabaid - fix: bump postcss to 8.5.22 across app lockfiles (Dependabot) ([#23340](https://github.com/twentyhq/twenty/pull/23340)) by @mabdullahabaid - v1.5.1 ā partners: Discord notification for client briefs + referring-partner attribution ([#23344](https://github.com/twentyhq/twenty/pull/23344)) by @rashad - fix: bump brace-expansion to 5.0.8 in app lockfiles (Dependabot) ([#23346](https://github.com/twentyhq/twenty/pull/23346)) by @mabdullahabaid - Fireflies: upgrade to twenty-sdk 2.23 ([#23349](https://github.com/twentyhq/twenty/pull/23349)) by @ehconitin - feat(website): send the referring partner with a client brief ([#23351](https://github.com/twentyhq/twenty/pull/23351)) by @rashad - feat(workflow): mirror version delete/restore/destroy to core transactionally ([#23356](https://github.com/twentyhq/twenty/pull/23356)) by @thomtrp - feat(workflow): remove async workflowVersion core dual-write listener ([#23374](https://github.com/twentyhq/twenty/pull/23374)) by @thomtrp - Organize public apps properly ([#23376](https://github.com/twentyhq/twenty/pull/23376)) by @martmull - update exa twenty cli tools ([#23379](https://github.com/twentyhq/twenty/pull/23379)) by @martmull - fix: lift root postcss to 8.5.23 (Dependabot) ([#23396](https://github.com/twentyhq/twenty/pull/23396)) by @mabdullahabaid - ci(pr-review): single PR review dispatcher ([#23418](https://github.com/twentyhq/twenty/pull/23418)) by @charlesBochet - use legacy validate build and run for standard metadatas ([#23419](https://github.com/twentyhq/twenty/pull/23419)) by @prastoin - Message campaign backfill search field metadata ([#23428](https://github.com/twentyhq/twenty/pull/23428)) by @prastoin - Message campaign backfill method sort view field ([#23433](https://github.com/twentyhq/twenty/pull/23433)) by @prastoin </details> ## š New contributors - @Rehansanjay made their first contribution in https://github.com/twentyhq/twenty/pull/22885 - @djadji-gueye made their first contribution in https://github.com/twentyhq/twenty/pull/23287 - @eeshsaxena made their first contribution in https://github.com/twentyhq/twenty/pull/23293 - @guillaume-flambard made their first contribution in https://github.com/twentyhq/twenty/pull/23325 - @Shinu-Cherian made their first contribution in https://github.com/twentyhq/twenty/pull/23343 <details> <summary>Full changelog (156 PRs)</summary> - fix(admin): prevent fallback to 'latest' string when dockerhub tags c⦠([#22885](https://github.com/twentyhq/twenty/pull/22885)) by @Rehansanjay - feat(website): live community stats, drop hard-coded fallback ([#23047](https://github.com/twentyhq/twenty/pull/23047)) by @mabdullahabaid - fix(call-recorder): leave call when only recording bots remain ([#23053](https://github.com/twentyhq/twenty/pull/23053)) by @martmull - Stop leaking the refresh token in the social SSO redirect URL ([#23061](https://github.com/twentyhq/twenty/pull/23061)) by @bosiraphael - Make solo tabs first-class: derived presentation, native editing, unified widget header ([#23109](https://github.com/twentyhq/twenty/pull/23109)) by @FelixMalfait - feat: kanban, calendar and grouped-table layouts for relation field widgets ([#23112](https://github.com/twentyhq/twenty/pull/23112)) by @FelixMalfait - Show relation record labels instead of UUIDs in dashboard charts ([#23163](https://github.com/twentyhq/twenty/pull/23163)) by @bosiraphael - message list member backfill ([#23176](https://github.com/twentyhq/twenty/pull/23176)) by @neo773 - Feat/email settings v2 ([#23180](https://github.com/twentyhq/twenty/pull/23180)) by @neo773 - fix(front): duplicate junction chip after Add New in relation picker ([#23185](https://github.com/twentyhq/twenty/pull/23185)) by @neo773 - Feat/email composer improvements ([#23188](https://github.com/twentyhq/twenty/pull/23188)) by @neo773 - i18n - website translations ([#23196](https://github.com/twentyhq/twenty/pull/23196)) by @github-actions - Enrich workspace company via People Data Labs during onboarding ([#23199](https://github.com/twentyhq/twenty/pull/23199)) by @bosiraphael - TDD: twenty-ui render coverage in the front-component sandbox ā golden tests cataloging every sandbox gap (fully green) ([#23203](https://github.com/twentyhq/twenty/pull/23203)) by @prastoin - feat: agent roleUniversalIdentifier for manifest-driven role assignment ([#23206](https://github.com/twentyhq/twenty/pull/23206)) by @abdulrahmancodes - feat(workflow): dedicated updateWorkflowVersionTrigger mutation + close version CRUD holes ([#23207](https://github.com/twentyhq/twenty/pull/23207)) by @thomtrp - Converge drag and drop on shared dnd-kit primitives, remove @hello-pangea/dnd ([#23211](https://github.com/twentyhq/twenty/pull/23211)) by @FelixMalfait - Replace admin app rollout buttons with upgrade-application CLI command ([#23212](https://github.com/twentyhq/twenty/pull/23212)) by @martmull - Fix front components rendering a blank panel in Firefox ([#23213](https://github.com/twentyhq/twenty/pull/23213)) by @bosiraphael - ci: run upgrade mutation guard in the merge queue against main ([#23216](https://github.com/twentyhq/twenty/pull/23216)) by @prastoin - chore: bump version to 2.25.0 ([#23221](https://github.com/twentyhq/twenty/pull/23221)) by @twenty-pr - Only suggest vetted apps in onboarding install step ([#23222](https://github.com/twentyhq/twenty/pull/23222)) by @martmull - feat(partners): require Twenty experience on apply, drop Cal success ([#23223](https://github.com/twentyhq/twenty/pull/23223)) by @rashad - v1.4.0 ā Raise partner bar: Twenty experience fields + triage ([#23224](https://github.com/twentyhq/twenty/pull/23224)) by @rashad - i18n - translations ([#23226](https://github.com/twentyhq/twenty/pull/23226)) by @github-actions - Add defineUninstallLogicFunction hook for applications ([#23227](https://github.com/twentyhq/twenty/pull/23227)) by @martmull - Consolidate per-queue worker tuning in one explicit config file ([#23229](https://github.com/twentyhq/twenty/pull/23229)) by @martmull - i18n - translations ([#23230](https://github.com/twentyhq/twenty/pull/23230)) by @github-actions - Let server route resolvers answer the caller synchronously ([#23233](https://github.com/twentyhq/twenty/pull/23233)) by @abdulrahmancodes - fix: bump fast-uri to 3.1.4 (Dependabot) ([#23234](https://github.com/twentyhq/twenty/pull/23234)) by @mabdullahabaid - fix: bump immutable to 5.1.8 (Dependabot) ([#23235](https://github.com/twentyhq/twenty/pull/23235)) by @mabdullahabaid - fix: bump linkify-it to 5.0.2 (Dependabot) ([#23236](https://github.com/twentyhq/twenty/pull/23236)) by @mabdullahabaid - fix: bump dompurify to 3.4.12 (Dependabot) ([#23237](https://github.com/twentyhq/twenty/pull/23237)) by @mabdullahabaid - fix: bump svgo to 3.3.4 (Dependabot) ([#23238](https://github.com/twentyhq/twenty/pull/23238)) by @mabdullahabaid - fix: bump body-parser to 1.20.6 / 2.3.0 (Dependabot) ([#23239](https://github.com/twentyhq/twenty/pull/23239)) by @mabdullahabaid - fix: bump brace-expansion 1.x/2.x lines (Dependabot) ([#23240](https://github.com/twentyhq/twenty/pull/23240)) by @mabdullahabaid - chore: sync AI model catalog from models.dev ([#23242](https://github.com/twentyhq/twenty/pull/23242)) by @github-actions - feat(workflow): mirror all workflowVersion writes to core in-transaction, drop async create/update dual-write ([#23243](https://github.com/twentyhq/twenty/pull/23243)) by @thomtrp - i18n - docs translations ([#23244](https://github.com/twentyhq/twenty/pull/23244)) by @github-actions - Fix application logos resolving to null on install and sync ([#23245](https://github.com/twentyhq/twenty/pull/23245)) by @martmull - i18n - translations ([#23246](https://github.com/twentyhq/twenty/pull/23246)) by @github-actions - i18n - translations ([#23247](https://github.com/twentyhq/twenty/pull/23247)) by @github-actions - fix: honor agent rolePermissionConfig in record CRUD ([#23248](https://github.com/twentyhq/twenty/pull/23248)) by @abdulrahmancodes - test: cover uninstall logic function hook execution ([#23249](https://github.com/twentyhq/twenty/pull/23249)) by @martmull - i18n - docs translations ([#23250](https://github.com/twentyhq/twenty/pull/23250)) by @github-actions - Add PostgreSQL connection pool pressure metrics ([#23251](https://github.com/twentyhq/twenty/pull/23251)) by @Weiko - Cap nested relation query concurrency ([#23252](https://github.com/twentyhq/twenty/pull/23252)) by @Weiko - i18n - translations ([#23253](https://github.com/twentyhq/twenty/pull/23253)) by @github-actions - feat(billing): make logic function executions free for exempt apps ([#23255](https://github.com/twentyhq/twenty/pull/23255)) by @martmull - feat(applications): restore the application custom settings tab ([#23256](https://github.com/twentyhq/twenty/pull/23256)) by @martmull - i18n - docs translations ([#23258](https://github.com/twentyhq/twenty/pull/23258)) by @github-actions - Add front component skeleton loader ([#23261](https://github.com/twentyhq/twenty/pull/23261)) by @bosiraphael - Extract front component host wrapper into hooks ([#23262](https://github.com/twentyhq/twenty/pull/23262)) by @bosiraphael - Unify remote element style declarations ([#23263](https://github.com/twentyhq/twenty/pull/23263)) by @bosiraphael - Documentation update ( Legal FAQ and more ) ([#23266](https://github.com/twentyhq/twenty/pull/23266)) by @BOHEUS - fix: lift axios/tar/brace-expansion/body-parser across app lockfiles (Dependabot) ([#23267](https://github.com/twentyhq/twenty/pull/23267)) by @mabdullahabaid - i18n - translations ([#23268](https://github.com/twentyhq/twenty/pull/23268)) by @github-actions - i18n - translations ([#23269](https://github.com/twentyhq/twenty/pull/23269)) by @github-actions - Warn users before front components navigate to an external site ([#23270](https://github.com/twentyhq/twenty/pull/23270)) by @bosiraphael - fix: move message list member backfill command to 2.25 ([#23271](https://github.com/twentyhq/twenty/pull/23271)) by @prastoin - fix(server): repair missing keyValuePair.applicationId on 2.23 upgrades ([#23272](https://github.com/twentyhq/twenty/pull/23272)) by @prastoin - Configure async ClickHouse inserts for pageview events ([#23274](https://github.com/twentyhq/twenty/pull/23274)) by @Weiko - ci: report required status checks on merge_group so the queue isn't blocked ([#23275](https://github.com/twentyhq/twenty/pull/23275)) by @prastoin - ci: report ci-shared-status-check on merge_group ([#23276](https://github.com/twentyhq/twenty/pull/23276)) by @prastoin - fix(ai-chat): stop duplicate tool_use ids from bricking threads ([#23277](https://github.com/twentyhq/twenty/pull/23277)) by @etiennejouan - fix(ci): diff upgrade mutation guard against the merged base, not stale PR base ([#23278](https://github.com/twentyhq/twenty/pull/23278)) by @prastoin - chore(self-hosting): upgrade to latest twenty CLI tooling ([#23279](https://github.com/twentyhq/twenty/pull/23279)) by @martmull - Fix system objects bypassing role object permission overrides ([#23280](https://github.com/twentyhq/twenty/pull/23280)) by @thomtrp - i18n - translations ([#23281](https://github.com/twentyhq/twenty/pull/23281)) by @github-actions - Support workspace member Me filter for relation fields in dashboards ([#23282](https://github.com/twentyhq/twenty/pull/23282)) by @bosiraphael - i18n - translations ([#23283](https://github.com/twentyhq/twenty/pull/23283)) by @github-actions - i18n - translations ([#23284](https://github.com/twentyhq/twenty/pull/23284)) by @github-actions - fix: move add-agent-foreign-key-to-role-target instance command to 2.25 ([#23285](https://github.com/twentyhq/twenty/pull/23285)) by @prastoin - fix(ai-chat) fix AI chat tool-output spill leaks: spill learn_tools, cap navigation tools, truncate on spill failure ([#23286](https://github.com/twentyhq/twenty/pull/23286)) by @etiennejouan - fix(a11y): add aria-label to navigation drawer collapse button (WCAG ⦠([#23287](https://github.com/twentyhq/twenty/pull/23287)) by @djadji-gueye - i18n - translations ([#23288](https://github.com/twentyhq/twenty/pull/23288)) by @github-actions - fix(server): index page-layout FKs to fix workspace cleanup timeout ([#23289](https://github.com/twentyhq/twenty/pull/23289)) by @etiennejouan - Fix phantom targetId field in workflow triggers for morph relations ([#23290](https://github.com/twentyhq/twenty/pull/23290)) by @thomtrp - fix: lift axios/tar/brace-expansion/body-parser in server fixture lockfiles (Dependabot) ([#23291](https://github.com/twentyhq/twenty/pull/23291)) by @mabdullahabaid - i18n - docs translations ([#23292](https://github.com/twentyhq/twenty/pull/23292)) by @github-actions - fix(workspace): open edit panel for PAGE_LAYOUT sidebar items ([#23293](https://github.com/twentyhq/twenty/pull/23293)) by @eeshsaxena - v1.4.0 ā partners: auto-link partner user on workspaceMember.created ([#23295](https://github.com/twentyhq/twenty/pull/23295)) by @rashad - docs: set correct credit cost for workflow steps and app logic functions ([#23297](https://github.com/twentyhq/twenty/pull/23297)) by @martmull - chore: sync AI model catalog from models.dev ([#23298](https://github.com/twentyhq/twenty/pull/23298)) by @github-actions - chore: remove twenty-companion dead code ([#23310](https://github.com/twentyhq/twenty/pull/23310)) by @prastoin - i18n - translations ([#23313](https://github.com/twentyhq/twenty/pull/23313)) by @github-actions - i18n - translations ([#23315](https://github.com/twentyhq/twenty/pull/23315)) by @github-actions - Filter stale sync workspaces by active channels ([#23321](https://github.com/twentyhq/twenty/pull/23321)) by @Weiko - fix: apply configured pool size to core database ([#23322](https://github.com/twentyhq/twenty/pull/23322)) by @Weiko - fix(emails): bump @react-email/render to ^2.0.6 to fix empty transactional email bodies ([#23323](https://github.com/twentyhq/twenty/pull/23323)) by @guillaume-flambard - i18n - docs translations ([#23324](https://github.com/twentyhq/twenty/pull/23324)) by @github-actions - fix(front): add accessible labels to icon-only options dropdown triggers ([#23325](https://github.com/twentyhq/twenty/pull/23325)) by @guillaume-flambard - Replace Redis key scanning with sorted-set event stream tracking ([#23326](https://github.com/twentyhq/twenty/pull/23326)) by @Weiko - i18n - translations ([#23328](https://github.com/twentyhq/twenty/pull/23328)) by @github-actions - fix: bump tar 7.5.20 - 7.5.21 in the root lockfile (Dependabot) ([#23330](https://github.com/twentyhq/twenty/pull/23330)) by @mabdullahabaid - fix: bump shell-quote 1.8.4 - 1.10.0 (Dependabot) ([#23331](https://github.com/twentyhq/twenty/pull/23331)) by @mabdullahabaid - fix: bump tar to 7.5.21 across app lockfiles (Dependabot) ([#23332](https://github.com/twentyhq/twenty/pull/23332)) by @mabdullahabaid - fix: bump tar and brace-expansion in seed-dependencies (Dependabot) ([#23333](https://github.com/twentyhq/twenty/pull/23333)) by @mabdullahabaid - Fix: password reset link returns FORBIDDEN for logged-in users (#21248) ([#23335](https://github.com/twentyhq/twenty/pull/23335)) by @thomtrp - i18n - translations ([#23336](https://github.com/twentyhq/twenty/pull/23336)) by @github-actions - i18n - docs translations ([#23338](https://github.com/twentyhq/twenty/pull/23338)) by @github-actions - fix: bump postcss to 8.5.22 across app lockfiles (Dependabot) ([#23340](https://github.com/twentyhq/twenty/pull/23340)) by @mabdullahabaid - fix(twenty-front): hide layout editor UI when SystemPermissionFlag.LAYOUTS is missing (#23303) ([#23343](https://github.com/twentyhq/twenty/pull/23343)) by @Shinu-Cherian - v1.5.1 ā partners: Discord notification for client briefs + referring-partner attribution ([#23344](https://github.com/twentyhq/twenty/pull/23344)) by @rashad - fix: bump brace-expansion to 5.0.8 in app lockfiles (Dependabot) ([#23346](https://github.com/twentyhq/twenty/pull/23346)) by @mabdullahabaid - fix: block route triggers for suspended workspaces ([#23347](https://github.com/twentyhq/twenty/pull/23347)) by @Weiko - i18n - website translations ([#23348](https://github.com/twentyhq/twenty/pull/23348)) by @github-actions - Fireflies: upgrade to twenty-sdk 2.23 ([#23349](https://github.com/twentyhq/twenty/pull/23349)) by @ehconitin - feat(website): send the referring partner with a client brief ([#23351](https://github.com/twentyhq/twenty/pull/23351)) by @rashad - i18n - translations ([#23352](https://github.com/twentyhq/twenty/pull/23352)) by @github-actions - Cache field metadata while processing common query results ([#23353](https://github.com/twentyhq/twenty/pull/23353)) by @Weiko - feat(workflow): mirror version delete/restore/destroy to core transactionally ([#23356](https://github.com/twentyhq/twenty/pull/23356)) by @thomtrp - fix(sse): resync records on reconnect and recover from silent query listener errors ([#23357](https://github.com/twentyhq/twenty/pull/23357)) by @thomtrp - Fix stuck onboarding route on failed chunk preload ([#23359](https://github.com/twentyhq/twenty/pull/23359)) by @bosiraphael - i18n - translations ([#23360](https://github.com/twentyhq/twenty/pull/23360)) by @github-actions - perf: reuse Google webhook OAuth client ([#23361](https://github.com/twentyhq/twenty/pull/23361)) by @Weiko - Guard stale chunk auto-reload against loops ([#23362](https://github.com/twentyhq/twenty/pull/23362)) by @bosiraphael - Dedupe common result handlers ([#23364](https://github.com/twentyhq/twenty/pull/23364)) by @Weiko - perf: deduplicate tool permission role loads ([#23366](https://github.com/twentyhq/twenty/pull/23366)) by @Weiko - i18n - translations ([#23367](https://github.com/twentyhq/twenty/pull/23367)) by @github-actions - feat(workflow): remove async workflowVersion core dual-write listener ([#23374](https://github.com/twentyhq/twenty/pull/23374)) by @thomtrp - Type PageLayout manifest type prop with PageLayoutType ([#23375](https://github.com/twentyhq/twenty/pull/23375)) by @prastoin - Organize public apps properly ([#23376](https://github.com/twentyhq/twenty/pull/23376)) by @martmull - fix(workspace-migration): stop leaking workspace ids in delete action payloads ([#23377](https://github.com/twentyhq/twenty/pull/23377)) by @prastoin - update exa twenty cli tools ([#23379](https://github.com/twentyhq/twenty/pull/23379)) by @martmull - i18n - docs translations ([#23381](https://github.com/twentyhq/twenty/pull/23381)) by @github-actions - perf: use cache for webhook reads ([#23382](https://github.com/twentyhq/twenty/pull/23382)) by @Weiko - perf: use cache for role validation ([#23383](https://github.com/twentyhq/twenty/pull/23383)) by @Weiko - perf: use cache for view entity lookups ([#23384](https://github.com/twentyhq/twenty/pull/23384)) by @Weiko - Add indexes for channel webhook subscription external IDs ([#23386](https://github.com/twentyhq/twenty/pull/23386)) by @Weiko - i18n - docs translations ([#23389](https://github.com/twentyhq/twenty/pull/23389)) by @github-actions - fix(ai-agent): use a non-workflow base system prompt for programmatic agent runs ([#23394](https://github.com/twentyhq/twenty/pull/23394)) by @abdulrahmancodes - fix: lift root postcss to 8.5.23 (Dependabot) ([#23396](https://github.com/twentyhq/twenty/pull/23396)) by @mabdullahabaid - fix(ai-node) - scope AI agent node database tools to explicitly granted objects ([#23400](https://github.com/twentyhq/twenty/pull/23400)) by @etiennejouan - Redesign the external link popup for front components ([#23404](https://github.com/twentyhq/twenty/pull/23404)) by @bosiraphael - fix(ai): stop double-counting cache-creation tokens in reported token totals ([#23405](https://github.com/twentyhq/twenty/pull/23405)) by @etiennejouan - i18n - translations ([#23409](https://github.com/twentyhq/twenty/pull/23409)) by @github-actions - fix: hide add-select-option prompt for users without data model permission ([#23410](https://github.com/twentyhq/twenty/pull/23410)) by @thomtrp - fix(applications): display the installed application icon ([#23411](https://github.com/twentyhq/twenty/pull/23411)) by @martmull - fix(page-layout): let the column surface win over the solo presentation ([#23412](https://github.com/twentyhq/twenty/pull/23412)) by @FelixMalfait - Remove ugly page card top-left rounded corner on mobile ([#23414](https://github.com/twentyhq/twenty/pull/23414)) by @FelixMalfait - Fix call-recorder REC badge rendering as empty boxes ([#23415](https://github.com/twentyhq/twenty/pull/23415)) by @ehconitin - i18n - translations ([#23417](https://github.com/twentyhq/twenty/pull/23417)) by @github-actions - ci(pr-review): single PR review dispatcher ([#23418](https://github.com/twentyhq/twenty/pull/23418)) by @charlesBochet - use legacy validate build and run for standard metadatas ([#23419](https://github.com/twentyhq/twenty/pull/23419)) by @prastoin - fix: make add-select-option work on record detail pages ([#23420](https://github.com/twentyhq/twenty/pull/23420)) by @thomtrp - Fix numeric controlled input values in front components ([#23421](https://github.com/twentyhq/twenty/pull/23421)) by @bosiraphael - fix(workflow): keep Limit and Offset when changing the Search Records object ([#23423](https://github.com/twentyhq/twenty/pull/23423)) by @thomtrp - Remove grey corners around navigation menu items on mobile ([#23425](https://github.com/twentyhq/twenty/pull/23425)) by @FelixMalfait - fix(ai-chat): enrich zero-output stream captures and keep client-error exceptions out of Sentry ([#23426](https://github.com/twentyhq/twenty/pull/23426)) by @etiennejouan - Message campaign backfill search field metadata ([#23428](https://github.com/twentyhq/twenty/pull/23428)) by @prastoin - feat(server): add application:install command ([#23430](https://github.com/twentyhq/twenty/pull/23430)) by @martmull - i18n - translations ([#23432](https://github.com/twentyhq/twenty/pull/23432)) by @github-actions - Message campaign backfill method sort view field ([#23433](https://github.com/twentyhq/twenty/pull/23433)) by @prastoin - Replace the onboarding AI chat feature flag with an environment variable ([#23439](https://github.com/twentyhq/twenty/pull/23439)) by @bosiraphael - Fix 1px gap above the record table header ([#23441](https://github.com/twentyhq/twenty/pull/23441)) by @FelixMalfait </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.24.0...twenty/v2.25.0