twenty/v2.25.0
twentyhq/twentytwenty/v2.25.0Jul 29, 2026by prastoin
AI Summary
Enhances record page widgets with new views (Kanban, Calendar, Table), improves email settings and composer, and auto-enriches company data during onboarding.
Key Highlights
- Relation field widgets can now display as Kanban board, calendar, or grouped table
- Email settings now support display names and unsubscriber list management
- Email composer moves to its own page with auto-save drafts
- Company data is auto-enriched from People Data Labs during workspace setup
New Features
- Kanban, Calendar, and Grouped Table widgets for relations
- Email composer page with draft auto-save
- Display names for outgoing emails
- Company data enrichment via People Data Labs
- Skeleton loading placeholders for front components
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