โ ๏ธ Breaking Change
Impact Score: 7/10
Twenty twenty/v2.51.0 โ Release Notes & Engineering Impact
Source available โ automated, not human-reviewed
Component: twenty ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-10-31.
Breaking-change evidence from the source
โ ๏ธ Breaking changes - Run `upgrade:2-51:migrate-rich-text-to-tiptap` after upgrading to convert existing rich text records to TipTap format. ([#28486](https://github.com/twentyhq/twenty/pull/28486)) by @neo773
โก Executive Summary (TL;DR)
Twenty twenty/v2.51.0. Source highlight: Run `upgrade:2-51:migrate-rich-text-to-tiptap` after upgrading to convert existing rich text records to TipTap format. (#28486)
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โ ๏ธ Breaking Changes & Deprecations (1)
- โ ๏ธ Breaking changes - Run `upgrade:2-51:migrate-rich-text-to-tiptap` after upgrading to convert existing rich text records to TipTap format. ([#28486](https://github.com/twentyhq/twenty/pull/28486)) by @neo773
โจ New Features & Capabilities (6)
- The logs console is now on for every member with the Security permission โ no feature flag needed. (#28481)
- Record filters can now compare a date or number field directly against another field on the same record. (#28237)
- Server admins can now export a complete workspace โ including suspended ones โ as a zip of CSVs from the admin panel. (#28480)
- The logs console is now on for every member with the Security permission; the feature flag is gone. (#28481)
- The server now stores rich text in TipTap format, replacing BlockNote as the canonical document format. (#28485)
- Notes, tasks, and rich text fields now use the TipTap editor; BlockNote and its packages are removed from the app. (#28487)
โก Performance & Enhancements (6)
- Exports of 200 records or fewer download straight to the browser; larger exports still use the background queue. (#26673)
- Autocomplete and Select dropdowns in front components now scroll to reveal the highlighted option. (#27895)
- Dashboards with charts that reference a deactivated field can now be saved without errors. (#28082)
- Agent threads started via the Slack app are now owned by the linked workspace member and appear in the inbox correctly. (#28193)
- Custom roles now require the CUSTOM_ROLES billing entitlement; existing role assignments are not affected. (#28218)
- XCG (Caribbean guilder) is now available as a currency option. (#28430)
๐ง Bug Fixes & Patches (6)
- Front components and direct file uploads now work behind cookie-authenticating proxies like Google Cloud IAP and Cloudflare Access. (#28375)
- Add rule group in a workflow Search Records step now creates the group as expected. (#28396)
- Records with long relation table names are no longer incorrectly denied access due to Postgres' 63-byte identifier limit. (#28411)
- View-derived filters now go through the same validation as other filters, so invalid operators are rejected consistently. (#28414)
- Calendar events with no channel association now return masked titles and descriptions instead of real content. (#28415)
- The AI assistant no longer describes menus from other CRMs when answering how-to questions about Twenty. (#28478)
๐ View Raw Release Notes (Original Developer Log)
<!-- generated-release-notes v1 -->
## โ ๏ธ Breaking changes
- Run `upgrade:2-51:migrate-rich-text-to-tiptap` after upgrading to convert existing rich text records to TipTap format. ([#28486](https://github.com/twentyhq/twenty/pull/28486)) by @neo773
- The `blocknote` sub-field on rich text in the GraphQL and REST APIs is now deprecated; switch to `markdown` or `tiptap` before it is removed. ([#28488](https://github.com/twentyhq/twenty/pull/28488)) by @neo773
- Billing plan configuration now lives in the `BILLING_PLANS` environment variable; update your server config. ([#28552](https://github.com/twentyhq/twenty/pull/28552)) by @etiennejouan
## ๐ Highlights
- Notes, tasks, and rich text fields now use the TipTap editor โ one unified experience shared with emails and workflow forms. ([#28487](https://github.com/twentyhq/twenty/pull/28487))
- Run upgrade:2-51:migrate-rich-text-to-tiptap after upgrading to convert existing rich text content to the new format. ([#28486](https://github.com/twentyhq/twenty/pull/28486))
- Exports of 200 records or fewer now download straight to the browser with no background job. ([#26673](https://github.com/twentyhq/twenty/pull/26673))
- Records with a related company now have a Link button on the Emails and Calendar widgets to manually file threads and events. ([#28551](https://github.com/twentyhq/twenty/pull/28551))
- A workflow iterator that fails safely inside a loop no longer re-enters the loop and runs indefinitely. ([#28524](https://github.com/twentyhq/twenty/pull/28524))
- The logs console is now on for every member with the Security permission โ no feature flag needed. ([#28481](https://github.com/twentyhq/twenty/pull/28481))
## โจ New features
- Record filters can now compare a date or number field directly against another field on the same record. ([#28237](https://github.com/twentyhq/twenty/pull/28237)) by @FelixMalfait
- Server admins can now export a complete workspace โ including suspended ones โ as a zip of CSVs from the admin panel. ([#28480](https://github.com/twentyhq/twenty/pull/28480)) by @charlesBochet
- The logs console is now on for every member with the Security permission; the feature flag is gone. ([#28481](https://github.com/twentyhq/twenty/pull/28481)) by @martmull
- The server now stores rich text in TipTap format, replacing BlockNote as the canonical document format. ([#28485](https://github.com/twentyhq/twenty/pull/28485)) by @neo773
- Notes, tasks, and rich text fields now use the TipTap editor; BlockNote and its packages are removed from the app. ([#28487](https://github.com/twentyhq/twenty/pull/28487)) by @neo773
- AI chat threads with an unsent draft now show a Draft label in the inbox list. ([#28503](https://github.com/twentyhq/twenty/pull/28503)) by @FelixMalfait
- Percentage and boolean fields now have dedicated inputs in record create and bulk-update forms. ([#28510](https://github.com/twentyhq/twenty/pull/28510)) by @charlesBochet
- Records with a related company now have a Link button on the Emails and Calendar widgets to manually file threads and events. ([#28551](https://github.com/twentyhq/twenty/pull/28551)) by @FelixMalfait
- The Microsoft Teams settings page now shows a warning banner when the Teams connection is missing or needs reconnection. ([#28568](https://github.com/twentyhq/twenty/pull/28568)) by @ehconitin
- Sending a campaign to a list larger than the day's remaining email quota is now refused upfront with a clear message. ([#28685](https://github.com/twentyhq/twenty/pull/28685)) by @neo773
## ๐
Improvements & UX
- Exports of 200 records or fewer download straight to the browser; larger exports still use the background queue. ([#26673](https://github.com/twentyhq/twenty/pull/26673)) by @Weiko
- Autocomplete and Select dropdowns in front components now scroll to reveal the highlighted option. ([#27895](https://github.com/twentyhq/twenty/pull/27895)) by @bosiraphael
- Dashboards with charts that reference a deactivated field can now be saved without errors. ([#28082](https://github.com/twentyhq/twenty/pull/28082)) by @FelixMalfait
- Agent threads started via the Slack app are now owned by the linked workspace member and appear in the inbox correctly. ([#28193](https://github.com/twentyhq/twenty/pull/28193)) by @abdulrahmancodes
- Custom roles now require the CUSTOM_ROLES billing entitlement; existing role assignments are not affected. ([#28218](https://github.com/twentyhq/twenty/pull/28218)) by @etiennejouan
- XCG (Caribbean guilder) is now available as a currency option. ([#28430](https://github.com/twentyhq/twenty/pull/28430)) by @BOHEUS
- The Companion panel now uses Twenty's shared UI components for consistent styling. ([#28439](https://github.com/twentyhq/twenty/pull/28439)) by @bosiraphael
- Front-end controls, tooltips, and typography now use shared Twenty UI components throughout the app. ([#28441](https://github.com/twentyhq/twenty/pull/28441)) by @bosiraphael
- Call recording and participant widgets now show a slim single-row skeleton while loading, matching Twenty's style. ([#28442](https://github.com/twentyhq/twenty/pull/28442)) by @ehconitin
- Select all in the command menu now correctly passes the full filter to side panel front components. ([#28447](https://github.com/twentyhq/twenty/pull/28447)) by @charlesBochet
- Hover backgrounds behind chip close buttons are removed. ([#28449](https://github.com/twentyhq/twenty/pull/28449)) by @bosiraphael
- Credits in app stats are now truncated: 10 or more show whole numbers, under 10 show two decimal places. ([#28452](https://github.com/twentyhq/twenty/pull/28452)) by @martmull
- App registration statistics now use a two-column grid: installs on the left, credits on the right. ([#28456](https://github.com/twentyhq/twenty/pull/28456)) by @martmull
- Naming a CRM during AI chat setup now restarts the conversation fresh instead of ending at a plain-text dead end. ([#28459](https://github.com/twentyhq/twenty/pull/28459)) by @etiennejouan
- The workflow step editor now saves on a debounce, eliminating the lock-timeout flood that fired on every keystroke. ([#28461](https://github.com/twentyhq/twenty/pull/28461)) by @charlesBochet
- Dropdown menus retain their search text and draft content for the full duration of one open session. ([#28474](https://github.com/twentyhq/twenty/pull/28474)) by @bosiraphael
- Whether a conversation is waiting is now determined in one place in the agent engine, fixing inconsistencies across callers. ([#28499](https://github.com/twentyhq/twenty/pull/28499)) by @FelixMalfait
- Multiple agent runs waiting on a busy conversation now queue in order and run one at a time instead of racing. ([#28506](https://github.com/twentyhq/twenty/pull/28506)) by @FelixMalfait
- PDL enrichment now costs $0.15 per person match and $0.075 per company match. ([#28516](https://github.com/twentyhq/twenty/pull/28516)) by @bosiraphael
- Icons inside flex layouts, including buttons, now keep their requested width and no longer shrink. ([#28523](https://github.com/twentyhq/twenty/pull/28523)) by @bosiraphael
- Banners now support a labeled dismiss button; the Companion notice uses this shared component. ([#28525](https://github.com/twentyhq/twenty/pull/28525)) by @bosiraphael
- Gmail/Calendar, Outlook, and IMAP account apps each have their own cover image on the settings page. ([#28530](https://github.com/twentyhq/twenty/pull/28530)) by @ehconitin
- Calendar event fields restricted by channel sharing now show "Not shared" instead of a raw internal marker. ([#28542](https://github.com/twentyhq/twenty/pull/28542)) by @charlesBochet
- The system filter on Workflows and Agents pages is now a regular filter rule in the filters side panel. ([#28544](https://github.com/twentyhq/twenty/pull/28544)) by @FelixMalfait
- Chart settings dropdowns now use the shared Dropdown components. ([#28545](https://github.com/twentyhq/twenty/pull/28545)) by @bosiraphael
- The AI chat welcome screen, suggested prompts, and composer are now centered in the inbox. ([#28546](https://github.com/twentyhq/twenty/pull/28546)) by @bosiraphael
- The empty Billing Limits tab now explains the available limit types instead of redirecting to the new-limit form. ([#28550](https://github.com/twentyhq/twenty/pull/28550)) by @FelixMalfait
- Inbox rows are refreshed with shared List and Text components, with unread and draft indicators. ([#28564](https://github.com/twentyhq/twenty/pull/28564)) by @bosiraphael
- Your own messages in AI chat now align to the right; reactions, questions, and forms use shared UI components. ([#28566](https://github.com/twentyhq/twenty/pull/28566)) by @bosiraphael
- A member's own AI chat is automatically filed when they leave after reading the last agent reply. ([#28583](https://github.com/twentyhq/twenty/pull/28583)) by @FelixMalfait
- On upgrade to 2.51, settled AI chats already in members' inboxes are filed automatically. ([#28584](https://github.com/twentyhq/twenty/pull/28584)) by @FelixMalfait
- In Claim an application, Sync catalog is now icon-only with a tooltip, and Look up sits at the far right. ([#28615](https://github.com/twentyhq/twenty/pull/28615)) by @martmull
- The Credits used column in app stats is hidden when billing is disabled on the server. ([#28616](https://github.com/twentyhq/twenty/pull/28616)) by @martmull
- Widget and tab settings dropdowns now use the shared Dropdown components. ([#28617](https://github.com/twentyhq/twenty/pull/28617)) by @bosiraphael
- The OAuth consent screen now shows the redirect destination host so you can verify where a connection goes. ([#28619](https://github.com/twentyhq/twenty/pull/28619)) by @charlesBochet
- Workspaces on legacy Pro or Enterprise plans now see their own plan column on Billing Plans. ([#28624](https://github.com/twentyhq/twenty/pull/28624)) by @etiennejouan
- Search controls no longer show blue focus rings. ([#28638](https://github.com/twentyhq/twenty/pull/28638)) by @bosiraphael
- The default role picker in Security settings now only lists roles that can be assigned to workspace members. ([#28644](https://github.com/twentyhq/twenty/pull/28644)) by @prastoin
- Row-level permission rules can no longer be created or updated on non-editable roles such as Admin. ([#28645](https://github.com/twentyhq/twenty/pull/28645)) by @prastoin
- The budget field in the partner brief form is now labeled "Implementation/migration budget range". ([#28650](https://github.com/twentyhq/twenty/pull/28650)) by @ijreilly
- Inbox triage actions stay next to the title and preview in compact 65px rows. ([#28656](https://github.com/twentyhq/twenty/pull/28656)) by @bosiraphael
- The Twenty standard application now has Admin set as its explicit default role. ([#28667](https://github.com/twentyhq/twenty/pull/28667)) by @prastoin
- Currency symbol and amount now render in the same text style on opportunity boards. ([#28676](https://github.com/twentyhq/twenty/pull/28676)) by @bosiraphael
## ๐ Bug fixes
- Front components and direct file uploads now work behind cookie-authenticating proxies like Google Cloud IAP and Cloudflare Access. ([#28375](https://github.com/twentyhq/twenty/pull/28375)) by @Prashaxt
- Add rule group in a workflow Search Records step now creates the group as expected. ([#28396](https://github.com/twentyhq/twenty/pull/28396)) by @BOHEUS
- Records with long relation table names are no longer incorrectly denied access due to Postgres' 63-byte identifier limit. ([#28411](https://github.com/twentyhq/twenty/pull/28411)) by @ijreilly
- View-derived filters now go through the same validation as other filters, so invalid operators are rejected consistently. ([#28414](https://github.com/twentyhq/twenty/pull/28414)) by @etiennejouan
- Calendar events with no channel association now return masked titles and descriptions instead of real content. ([#28415](https://github.com/twentyhq/twenty/pull/28415)) by @ehconitin
- The AI assistant no longer describes menus from other CRMs when answering how-to questions about Twenty. ([#28478](https://github.com/twentyhq/twenty/pull/28478)) by @etiennejouan
- Signing up for a new workspace no longer creates an unwanted DPA agreement record. ([#28504](https://github.com/twentyhq/twenty/pull/28504)) by @FelixMalfait
- A workflow iterator that fails safely inside a loop no longer re-enters and runs forever. ([#28524](https://github.com/twentyhq/twenty/pull/28524)) by @charlesBochet
- The web app manifest is now fetched with credentials, fixing PWA install failures behind cookie-based proxies. ([#28531](https://github.com/twentyhq/twenty/pull/28531)) by @prastoin
- Querying applications with their `agents`, `frontComponents`, or `applicationVariables` fields no longer returns a null error. ([#28534](https://github.com/twentyhq/twenty/pull/28534)) by @charlesBochet
- App OAuth reconnect flows now preserve the settings page and tab through errors; reconnecting a broken connection restores it correctly. ([#28548](https://github.com/twentyhq/twenty/pull/28548)) by @ehconitin
- Rich text fields in search result preview cards now show one truncated line instead of wrapping over multiple rows. ([#28581](https://github.com/twentyhq/twenty/pull/28581)) by @FelixMalfait
- Timeline processing no longer causes mass query timeouts when a person receives thousands of linked messages at once. ([#28607](https://github.com/twentyhq/twenty/pull/28607)) by @etiennejouan
- Field icons in timeline field-diff entries are now the correct size and no longer overlap the field label. ([#28625](https://github.com/twentyhq/twenty/pull/28625)) by @FelixMalfait
- Delete and destroy commands are now hidden on objects that reject user-session writes. ([#28641](https://github.com/twentyhq/twenty/pull/28641)) by @martmull
- Currency symbols and amounts stay on one line in record cards and align correctly with their field icons. ([#28657](https://github.com/twentyhq/twenty/pull/28657)) by @bosiraphael
- Neutral outline buttons in onboarding now display in the correct foreground color. ([#28662](https://github.com/twentyhq/twenty/pull/28662)) by @bosiraphael
- Navigation skeleton rows now have correct horizontal padding and stay inside the menu. ([#28663](https://github.com/twentyhq/twenty/pull/28663)) by @bosiraphael
- Restricted calendar event titles now show "Not shared" in the record page breadcrumb. ([#28670](https://github.com/twentyhq/twenty/pull/28670)) by @charlesBochet
- After an app's SDK is regenerated, all its logic functions rebuild with the new SDK, not just the first one to run. ([#28683](https://github.com/twentyhq/twenty/pull/28683)) by @neo773
## โก Performance
- App installs and upgrades now skip storage writes for unchanged files, using a server-side content hash. ([#28213](https://github.com/twentyhq/twenty/pull/28213)) by @neo773
- Lambda function metadata is now cached in Redis for 24 hours, reducing AWS API calls per logic function run. ([#28647](https://github.com/twentyhq/twenty/pull/28647)) by @charlesBochet
## ๐ง Developer & API
- Chat channels (`agentChatChannel`, `agentChatChannelRole`) are now core metadata entities with role-based access. ([#27448](https://github.com/twentyhq/twenty/pull/27448)) by @FelixMalfait
- App log rows now carry the app's registration ID, version, source, and error code for per-app attribution. ([#28283](https://github.com/twentyhq/twenty/pull/28283)) by @martmull
- API rate-limit hits and server route failures are now recorded as app log entries alongside other platform events. ([#28286](https://github.com/twentyhq/twenty/pull/28286)) by @martmull
- App run counts and platform events are now stored in a 90-day metric table that survives workspace log retention. ([#28288](https://github.com/twentyhq/twenty/pull/28288)) by @martmull
- App owners can query run counts, failure rates, and rate-limit totals via `findApplicationRegistrationMonitoring`. ([#28292](https://github.com/twentyhq/twenty/pull/28292)) by @martmull
- Instance admins can query per-workspace monitoring data via `findAdminApplicationRegistrationMonitoring`. ([#28293](https://github.com/twentyhq/twenty/pull/28293)) by @martmull
- App owners now have a Monitoring tab in Settings Developers Apps with health, activity, and function charts. ([#28304](https://github.com/twentyhq/twenty/pull/28304)) by @martmull
- Instance admins now have an app Monitoring page in the admin panel with per-workspace filtering. ([#28316](https://github.com/twentyhq/twenty/pull/28316)) by @martmull
- The workspace log console now shows install, upgrade, uninstall, and rate-limit events in the App logs tab. ([#28318](https://github.com/twentyhq/twenty/pull/28318)) by @martmull
- `@DefineTool` tools now declare their own `requiredPermissionFlags` instead of inheriting them from a provider. ([#28416](https://github.com/twentyhq/twenty/pull/28416)) by @prastoin
- Webhook tools are now `@DefineTool` classes; `WebhookToolWorkspaceService` and `WebhookToolProvider` are deleted. ([#28417](https://github.com/twentyhq/twenty/pull/28417)) by @prastoin
- Frontend component build transforms are now shared between the SDK and server compiler. ([#28465](https://github.com/twentyhq/twenty/pull/28465)) by @Weiko
- The seven role tools are now `@DefineTool` classes. ([#28476](https://github.com/twentyhq/twenty/pull/28476)) by @prastoin
- Navigation menu item tools are now `@DefineTool` classes; discriminated union inputs are now supported in tool schemas. ([#28477](https://github.com/twentyhq/twenty/pull/28477)) by @prastoin
- The App logs tab now shows an App column (logo and name) identifying which app emitted each log line. ([#28482](https://github.com/twentyhq/twenty/pull/28482)) by @martmull
- App monitoring now includes a Credits used chart covering the same period as the other charts. ([#28483](https://github.com/twentyhq/twenty/pull/28483)) by @martmull
- Rate-limit hits are now counted per rejected request and charted separately from errors in app monitoring. ([#28495](https://github.com/twentyhq/twenty/pull/28495)) by @martmull
- Settings Developers now has a CLI tab with copyable commands for connecting, exploring data, and building apps. ([#28498](https://github.com/twentyhq/twenty/pull/28498)) by @FelixMalfait
- `@DefineTool` execute methods now receive a single `{ input, context }` object instead of two positional arguments. ([#28519](https://github.com/twentyhq/twenty/pull/28519)) by @prastoin
- `Text` and `OverflowingTextWithTooltip` in twenty-ui now accept `size`, `weight`, and semantic `color` props. ([#28527](https://github.com/twentyhq/twenty/pull/28527)) by @bosiraphael
- `Card` in twenty-ui now has `Card.Action` and `Card.Control` slots for row activation and independent controls. ([#28528](https://github.com/twentyhq/twenty/pull/28528)) by @bosiraphael
- `Input` and `Textarea` in twenty-ui now have a `plain` variant. ([#28529](https://github.com/twentyhq/twenty/pull/28529)) by @bosiraphael
- The 22 view tools are now `@DefineTool` classes and return `ToolOutput` instead of bare values. ([#28532](https://github.com/twentyhq/twenty/pull/28532)) by @prastoin
- The workspace custom application now has its own default role with full permissions and `isEditable: false`. ([#28538](https://github.com/twentyhq/twenty/pull/28538)) by @prastoin
- The CLI and SDK now share the same frontend component build transforms, including nested CSS and asset bundling. ([#28541](https://github.com/twentyhq/twenty/pull/28541)) by @Weiko
- The Microsoft Teams app is now registered for public marketplace visibility and exempt from execution billing. ([#28543](https://github.com/twentyhq/twenty/pull/28543)) by @ehconitin
- `twenty remote --help` now explains how to create a connection with `auth login`, with examples. ([#28557](https://github.com/twentyhq/twenty/pull/28557)) by @Weiko
- Node.js updated to 24.22.1 (October 2026 security release); Docker base and .nvmrc updated. ([#28559](https://github.com/twentyhq/twenty/pull/28559)) by @prastoin
- `DetailsRow` is now available in twenty-ui for aligned label, icon, value, and action layouts. ([#28570](https://github.com/twentyhq/twenty/pull/28570)) by @bosiraphael
- `ReactionButton` is now available in twenty-ui for emoji reactions with counts. ([#28571](https://github.com/twentyhq/twenty/pull/28571)) by @bosiraphael
- `ListItem` and `ListItemButton` now support multiline rows with descriptions below the label. ([#28572](https://github.com/twentyhq/twenty/pull/28572)) by @bosiraphael
- The Lambda driver now has integration tests running against a Floci emulator via testcontainers. ([#28574](https://github.com/twentyhq/twenty/pull/28574)) by @neo773
- New documentation page on securing self-hosted Twenty instances, covering Tailscale, Cloudflare Tunnel, and Caddy setups. ([#28595](https://github.com/twentyhq/twenty/pull/28595)) by @FelixMalfait
- The email/calendar account field row is now a shared twenty-ui component; callers supply data and permissions. ([#28608](https://github.com/twentyhq/twenty/pull/28608)) by @bosiraphael
- `LabeledSeparator` is now available in twenty-ui with centered or end labels and neutral/danger tones. ([#28610](https://github.com/twentyhq/twenty/pull/28610)) by @bosiraphael
- `@DefineTool` tools can now declare a catalog icon via the `icon` option on `DefineToolOptions`. ([#28612](https://github.com/twentyhq/twenty/pull/28612)) by @prastoin
- `@DefineTool` tools can now require workspace feature flags via `requiredFeatureFlags` on `DefineToolOptions`. ([#28614](https://github.com/twentyhq/twenty/pull/28614)) by @prastoin
- The four agent tools are now `@DefineTool` classes, declaring the `IS_AI_CHAT_INBOX_ENABLED` and `AI_SETTINGS` gates. ([#28630](https://github.com/twentyhq/twenty/pull/28630)) by @prastoin
- Endpoint permission snapshots now record `requiredPermissionFlags` and `requiredFeatureFlags` per endpoint. ([#28633](https://github.com/twentyhq/twenty/pull/28633)) by @prastoin
- The date picker is now a shared twenty-ui component with themed calendar styles; product logic stays in twenty-front. ([#28636](https://github.com/twentyhq/twenty/pull/28636)) by @bosiraphael
- A connection provider's scope is now immutable; changing it requires a new provider with a new `universalIdentifier`. ([#28637](https://github.com/twentyhq/twenty/pull/28637)) by @ehconitin
- Non-editable roles are excluded from application manifests on export and sync. ([#28674](https://github.com/twentyhq/twenty/pull/28674)) by @prastoin
- Ask AI tool context now includes the calling application, correctly scoping workflow and logic function tools. ([#28678](https://github.com/twentyhq/twenty/pull/28678)) by @prastoin
- App developer docs now have an Operations Monitoring page covering the monitoring tab and log sources. ([#28686](https://github.com/twentyhq/twenty/pull/28686)) by @martmull
<details>
<summary>๐๏ธ Internal changes (27)</summary>
- AI tiers: Balanced to gpt-6-luna@max; self-host Anthropic cheap rungs to Haiku 5.5 ([#28390](https://github.com/twentyhq/twenty/pull/28390)) by @twenty-pr-author
- docs: match the filters page and mailbox docs to the product ([#28479](https://github.com/twentyhq/twenty/pull/28479)) by @etiennejouan
- Replace CODEOWNERS with a CI approval check for sensitive paths ([#28497](https://github.com/twentyhq/twenty/pull/28497)) by @FelixMalfait
- Remove the `as any` casts in config-value-converter.service.ts ([#28505](https://github.com/twentyhq/twenty/pull/28505)) by @twenty-pr-author
- Rename 3 server files to the singular suffix in src/engine/core-modules/auth/constants ([#28507](https://github.com/twentyhq/twenty/pull/28507)) by @twenty-pr-author
- AI catalog: move dev/staging Smart to gpt-6.1-sol and Extra Smart to claude-opus-5-5, raise Balanced to luna@max, add gemini-4-argon ([#28512](https://github.com/twentyhq/twenty/pull/28512)) by @twenty-pr-author
- Add a required status check to the merge-queue workflow ([#28514](https://github.com/twentyhq/twenty/pull/28514)) by @prastoin
- Update Twenty UI front component documentation ([#28518](https://github.com/twentyhq/twenty/pull/28518)) by @bosiraphael
- Align Twenty UI documentation ([#28522](https://github.com/twentyhq/twenty/pull/28522)) by @bosiraphael
- Rename local-driver-kernel.const.ts to local-driver-kernel.constant.ts ([#28596](https://github.com/twentyhq/twenty/pull/28596)) by @twenty-pr-author
- Remove unused BILLING_STRIPE_BASE_PLAN_PRODUCT_ID from server CI env ([#28602](https://github.com/twentyhq/twenty/pull/28602)) by @etiennejouan
- Recreate application registration versions skipped on v2.48.0 instances ([#28603](https://github.com/twentyhq/twenty/pull/28603)) by @martmull
- Keep only the npm build and publish executor public ([#28605](https://github.com/twentyhq/twenty/pull/28605)) by @FelixMalfait
- Use the multi-arch Node 24.22.1 Docker base ([#28611](https://github.com/twentyhq/twenty/pull/28611)) by @prastoin
- Fix annotated publishing tags after shallow checkout ([#28620](https://github.com/twentyhq/twenty/pull/28620)) by @FelixMalfait
- Use a single object argument for renderStats test helper ([#28622](https://github.com/twentyhq/twenty/pull/28622)) by @martmull
- Validate npm publishing with native Yarn staging ([#28623](https://github.com/twentyhq/twenty/pull/28623)) by @FelixMalfait
- Upgrade Yarn to 4.18.1 for native staged publishing ([#28627](https://github.com/twentyhq/twenty/pull/28627)) by @FelixMalfait
- Make the Microsoft Teams app README concise ([#28628](https://github.com/twentyhq/twenty/pull/28628)) by @ehconitin
- fix(ci): track standalone CLI in docs and skills drift checks ([#28646](https://github.com/twentyhq/twenty/pull/28646)) by @Weiko
- Allow private CLI staging before SDK publication ([#28651](https://github.com/twentyhq/twenty/pull/28651)) by @FelixMalfait
- Classify mail.instinct.com as a personal email domain ([#28661](https://github.com/twentyhq/twenty/pull/28661)) by @FelixMalfait
- Stabilize renderer popup interactions ([#28665](https://github.com/twentyhq/twenty/pull/28665)) by @bosiraphael
- Rename 6 server files to the singular suffix in src/engine/core-modules/file/utils ([#28666](https://github.com/twentyhq/twenty/pull/28666)) by @twenty-pr-author
- Use the shared separator for inbox unread messages ([#28669](https://github.com/twentyhq/twenty/pull/28669)) by @bosiraphael
- Refresh email campaign doc screenshots for the redesigned UI ([#28681](https://github.com/twentyhq/twenty/pull/28681)) by @neo773
- Remove the role service spec ([#28690](https://github.com/twentyhq/twenty/pull/28690)) by @prastoin
</details>
## ๐ New contributors
- @Prashaxt made their first contribution in https://github.com/twentyhq/twenty/pull/28375
<details>
<summary>Full changelog (163 PRs)</summary>
- feat: keep small CSV exports local and share CSV formatting ([#26673](https://github.com/twentyhq/twenty/pull/26673)) by @Weiko
- Add chat channels to the inbox (server) ([#27448](https://github.com/twentyhq/twenty/pull/27448)) by @FelixMalfait
- Support scrolling inside front component controls ([#27895](https://github.com/twentyhq/twenty/pull/27895)) by @bosiraphael
- Allow chart widgets to reference deactivated fields ([#28082](https://github.com/twentyhq/twenty/pull/28082)) by @FelixMalfait
- feat(ai): make the member a keyed runAgent call acts as the owner of the thread it continues ([#28193](https://github.com/twentyhq/twenty/pull/28193)) by @abdulrahmancodes
- Skip identical file writes using a stored content hash ([#28213](https://github.com/twentyhq/twenty/pull/28213)) by @neo773
- feat(billing): gate custom roles behind the CUSTOM_ROLES entitlement ([#28218](https://github.com/twentyhq/twenty/pull/28218)) by @etiennejouan
- Compare a field with another field in record filters ([#28237](https://github.com/twentyhq/twenty/pull/28237)) by @FelixMalfait
- Attach registration, version, source and error code to app logs ([#28283](https://github.com/twentyhq/twenty/pull/28283)) by @martmull
- Record app rate limits and server route failures as app logs ([#28286](https://github.com/twentyhq/twenty/pull/28286)) by @martmull
- Count app runs and platform events in a 90-day metric table ([#28288](https://github.com/twentyhq/twenty/pull/28288)) by @martmull
- Add app monitoring query for app owners ([#28292](https://github.com/twentyhq/twenty/pull/28292)) by @martmull
- Add app monitoring query for instance admins ([#28293](https://github.com/twentyhq/twenty/pull/28293)) by @martmull
- Add monitoring page for app owners ([#28304](https://github.com/twentyhq/twenty/pull/28304)) by @martmull
- Add app monitoring page to the admin panel ([#28316](https://github.com/twentyhq/twenty/pull/28316)) by @martmull
- Show and filter app platform events in the log console ([#28318](https://github.com/twentyhq/twenty/pull/28318)) by @martmull
- Fix front components and uploads behind cookie-authenticating proxies ([#28375](https://github.com/twentyhq/twenty/pull/28375)) by @Prashaxt
- i18n - translations ([#28385](https://github.com/twentyhq/twenty/pull/28385)) by @github-actions
- AI tiers: Balanced to gpt-6-luna@max; self-host Anthropic cheap rungs to Haiku 5.5 ([#28390](https://github.com/twentyhq/twenty/pull/28390)) by @twenty-pr-author
- Fix add rule group in search node ([#28396](https://github.com/twentyhq/twenty/pull/28396)) by @BOHEUS
- Keep row access aliases within Postgres' 63-byte identifier limit ([#28411](https://github.com/twentyhq/twenty/pull/28411)) by @ijreilly
- fix(server): route view-derived filters through the filter processor ([#28414](https://github.com/twentyhq/twenty/pull/28414)) by @etiennejouan
- Mask calendar events without shared channels instead of a no-op splice ([#28415](https://github.com/twentyhq/twenty/pull/28415)) by @ehconitin
- Gate @DefineTool tools with their own permission flags and serve the catalog from one method ([#28416](https://github.com/twentyhq/twenty/pull/28416)) by @prastoin
- Migrate the remaining webhook tools to @DefineTool ([#28417](https://github.com/twentyhq/twenty/pull/28417)) by @prastoin
- Add XCG currency ([#28430](https://github.com/twentyhq/twenty/pull/28430)) by @BOHEUS
- Use shared components in Companion ([#28439](https://github.com/twentyhq/twenty/pull/28439)) by @bosiraphael
- Use shared UI styles in frontend callers ([#28441](https://github.com/twentyhq/twenty/pull/28441)) by @bosiraphael
- Match the call recorder widget skeletons to Twenty's loader ([#28442](https://github.com/twentyhq/twenty/pull/28442)) by @ehconitin
- Give side panel front components the Select all filter ([#28447](https://github.com/twentyhq/twenty/pull/28447)) by @charlesBochet
- chore: bump version to 2.51.0 ([#28448](https://github.com/twentyhq/twenty/pull/28448)) by @twenty-pr
- Remove chip close button hover backgrounds ([#28449](https://github.com/twentyhq/twenty/pull/28449)) by @bosiraphael
- Truncate application registration credits display ([#28452](https://github.com/twentyhq/twenty/pull/28452)) by @martmull
- i18n - translations ([#28453](https://github.com/twentyhq/twenty/pull/28453)) by @github-actions
- i18n - translations ([#28455](https://github.com/twentyhq/twenty/pull/28455)) by @github-actions
- Show application statistics in a two-column stats grid ([#28456](https://github.com/twentyhq/twenty/pull/28456)) by @martmull
- fix(ai-chat): setup chat CRM pick continues as a fresh start ([#28459](https://github.com/twentyhq/twenty/pull/28459)) by @etiennejouan
- Make the workflow flow the editor's source of truth and save it on a debounce ([#28461](https://github.com/twentyhq/twenty/pull/28461)) by @charlesBochet
- Share frontend component build transforms with the server ([#28465](https://github.com/twentyhq/twenty/pull/28465)) by @Weiko
- Keep Dropdown pages for one open session ([#28474](https://github.com/twentyhq/twenty/pull/28474)) by @bosiraphael
- i18n - translations ([#28475](https://github.com/twentyhq/twenty/pull/28475)) by @github-actions
- Migrate the role tools to @DefineTool ([#28476](https://github.com/twentyhq/twenty/pull/28476)) by @prastoin
- Migrate the navigation menu item tools to @DefineTool ([#28477](https://github.com/twentyhq/twenty/pull/28477)) by @prastoin
- fix(ai): have the agent name only the UI its docs search shows ([#28478](https://github.com/twentyhq/twenty/pull/28478)) by @etiennejouan
- docs: match the filters page and mailbox docs to the product ([#28479](https://github.com/twentyhq/twenty/pull/28479)) by @etiennejouan
- Add whole-workspace data export to the admin panel ([#28480](https://github.com/twentyhq/twenty/pull/28480)) by @charlesBochet
- Remove IS_LOGS_SETTINGS_SECTION_ENABLED feature flag ([#28481](https://github.com/twentyhq/twenty/pull/28481)) by @martmull
- Add an App column to the app logs console table ([#28482](https://github.com/twentyhq/twenty/pull/28482)) by @martmull
- Chart credits used on app monitoring ([#28483](https://github.com/twentyhq/twenty/pull/28483)) by @martmull
- Store rich text as TipTap on the server ([#28485](https://github.com/twentyhq/twenty/pull/28485)) by @neo773
- [BREAKING_CHANGE] Convert existing rich text to TipTap in a 2.51 upgrade command ([#28486](https://github.com/twentyhq/twenty/pull/28486)) by @neo773
- Replace the BlockNote editor with TipTap in the app ([#28487](https://github.com/twentyhq/twenty/pull/28487)) by @neo773
- [BREAKING_CHANGE] Mark the rich text blocknote sub-field as deprecated in the GraphQL and REST schemas ([#28488](https://github.com/twentyhq/twenty/pull/28488)) by @neo773
- Count every rate-limited request and chart rate limits apart from errors ([#28495](https://github.com/twentyhq/twenty/pull/28495)) by @martmull
- chore: sync AI model catalog ([#28496](https://github.com/twentyhq/twenty/pull/28496)) by @github-actions
- Replace CODEOWNERS with a CI approval check for sensitive paths ([#28497](https://github.com/twentyhq/twenty/pull/28497)) by @FelixMalfait
- Add a CLI tab to Developers settings and move app creation to the standalone CLI ([#28498](https://github.com/twentyhq/twenty/pull/28498)) by @FelixMalfait
- Agent engine: read whether a conversation is waiting from one query ([#28499](https://github.com/twentyhq/twenty/pull/28499)) by @FelixMalfait
- Show unsent drafts in the AI chat list ([#28503](https://github.com/twentyhq/twenty/pull/28503)) by @FelixMalfait
- fix(dpa): stop recording a click-through DPA on every signup ([#28504](https://github.com/twentyhq/twenty/pull/28504)) by @FelixMalfait
- Remove the `as any` casts in config-value-converter.service.ts ([#28505](https://github.com/twentyhq/twenty/pull/28505)) by @twenty-pr-author
- Agent engine: runs wait for a busy conversation in one ordered line ([#28506](https://github.com/twentyhq/twenty/pull/28506)) by @FelixMalfait
- Rename 3 server files to the singular suffix in src/engine/core-modules/auth/constants ([#28507](https://github.com/twentyhq/twenty/pull/28507)) by @twenty-pr-author
- Give percentages and booleans their own inputs in record forms ([#28510](https://github.com/twentyhq/twenty/pull/28510)) by @charlesBochet
- AI catalog: move dev/staging Smart to gpt-6.1-sol and Extra Smart to claude-opus-5-5, raise Balanced to luna@max, add gemini-4-argon ([#28512](https://github.com/twentyhq/twenty/pull/28512)) by @twenty-pr-author
- Add a required status check to the merge-queue workflow ([#28514](https://github.com/twentyhq/twenty/pull/28514)) by @prastoin
- i18n - translations ([#28515](https://github.com/twentyhq/twenty/pull/28515)) by @github-actions
- Lower PDL enrichment prices ([#28516](https://github.com/twentyhq/twenty/pull/28516)) by @bosiraphael
- Update Twenty UI front component documentation ([#28518](https://github.com/twentyhq/twenty/pull/28518)) by @bosiraphael
- Pass @DefineTool execute arguments as a single object ([#28519](https://github.com/twentyhq/twenty/pull/28519)) by @prastoin
- Align Twenty UI documentation ([#28522](https://github.com/twentyhq/twenty/pull/28522)) by @bosiraphael
- Keep icon widths in flex layouts ([#28523](https://github.com/twentyhq/twenty/pull/28523)) by @bosiraphael
- Stop a failed iterator from re-entering its loop ([#28524](https://github.com/twentyhq/twenty/pull/28524)) by @charlesBochet
- Add shared Banner dismissal ([#28525](https://github.com/twentyhq/twenty/pull/28525)) by @bosiraphael
- Add shared Text typography props ([#28527](https://github.com/twentyhq/twenty/pull/28527)) by @bosiraphael
- Add shared Card actions and controls ([#28528](https://github.com/twentyhq/twenty/pull/28528)) by @bosiraphael
- Add plain Input and Textarea variants ([#28529](https://github.com/twentyhq/twenty/pull/28529)) by @bosiraphael
- Add cover images for the built-in account apps ([#28530](https://github.com/twentyhq/twenty/pull/28530)) by @ehconitin
- Send cookies with the web app manifest request ([#28531](https://github.com/twentyhq/twenty/pull/28531)) by @prastoin
- Migrate the view tools to @DefineTool ([#28532](https://github.com/twentyhq/twenty/pull/28532)) by @prastoin
- i18n - translations ([#28533](https://github.com/twentyhq/twenty/pull/28533)) by @github-actions
- Load the selected list relations in findManyApplications ([#28534](https://github.com/twentyhq/twenty/pull/28534)) by @charlesBochet
- i18n - translations ([#28537](https://github.com/twentyhq/twenty/pull/28537)) by @github-actions
- Give the workspace custom application its own default role ([#28538](https://github.com/twentyhq/twenty/pull/28538)) by @prastoin
- i18n - translations ([#28539](https://github.com/twentyhq/twenty/pull/28539)) by @github-actions
- Unify CLI and SDK frontend component build transforms ([#28541](https://github.com/twentyhq/twenty/pull/28541)) by @Weiko
- Show "Not shared" for restricted record names ([#28542](https://github.com/twentyhq/twenty/pull/28542)) by @charlesBochet
- Prepare Microsoft Teams v1 marketplace release ([#28543](https://github.com/twentyhq/twenty/pull/28543)) by @ehconitin
- Move the system filter into the core object filters panel ([#28544](https://github.com/twentyhq/twenty/pull/28544)) by @FelixMalfait
- Migrate chart settings dropdowns ([#28545](https://github.com/twentyhq/twenty/pull/28545)) by @bosiraphael
- Update the new chat design ([#28546](https://github.com/twentyhq/twenty/pull/28546)) by @bosiraphael
- Fix app OAuth recovery and return navigation ([#28548](https://github.com/twentyhq/twenty/pull/28548)) by @ehconitin
- Show starter limits on the empty Limits tab instead of redirecting ([#28550](https://github.com/twentyhq/twenty/pull/28550)) by @FelixMalfait
- Link company email threads and calendar events from a record ([#28551](https://github.com/twentyhq/twenty/pull/28551)) by @FelixMalfait
- [BREAKING_CHANGE] feat(billing): move billing plans config to BILLING_PLANS ([#28552](https://github.com/twentyhq/twenty/pull/28552)) by @etiennejouan
- i18n - translations ([#28553](https://github.com/twentyhq/twenty/pull/28553)) by @github-actions
- Explain remote setup in CLI help ([#28557](https://github.com/twentyhq/twenty/pull/28557)) by @Weiko
- Bump Node to 24.22.1 ([#28559](https://github.com/twentyhq/twenty/pull/28559)) by @prastoin
- Update inbox rows and triage controls ([#28564](https://github.com/twentyhq/twenty/pull/28564)) by @bosiraphael
- Align inbox conversation components ([#28566](https://github.com/twentyhq/twenty/pull/28566)) by @bosiraphael
- Add a connection health check to the Microsoft Teams app ([#28568](https://github.com/twentyhq/twenty/pull/28568)) by @ehconitin
- Add a shared details row ([#28570](https://github.com/twentyhq/twenty/pull/28570)) by @bosiraphael
- Add a shared reaction button ([#28571](https://github.com/twentyhq/twenty/pull/28571)) by @bosiraphael
- Add multiline ListItem rows ([#28572](https://github.com/twentyhq/twenty/pull/28572)) by @bosiraphael
- i18n - translations ([#28573](https://github.com/twentyhq/twenty/pull/28573)) by @github-actions
- Add Lambda driver integration tests against Floci ([#28574](https://github.com/twentyhq/twenty/pull/28574)) by @neo773
- Truncate rich text field display to a single line ([#28581](https://github.com/twentyhq/twenty/pull/28581)) by @FelixMalfait
- File a member's own AI chat once they leave it caught up ([#28583](https://github.com/twentyhq/twenty/pull/28583)) by @FelixMalfait
- File the chats left open in members' inboxes on upgrade to 2.51 ([#28584](https://github.com/twentyhq/twenty/pull/28584)) by @FelixMalfait
- i18n - translations ([#28590](https://github.com/twentyhq/twenty/pull/28590)) by @github-actions
- chore: sync AI model catalog ([#28593](https://github.com/twentyhq/twenty/pull/28593)) by @github-actions
- Add a guide to securing self-hosted instances ([#28595](https://github.com/twentyhq/twenty/pull/28595)) by @FelixMalfait
- Rename local-driver-kernel.const.ts to local-driver-kernel.constant.ts ([#28596](https://github.com/twentyhq/twenty/pull/28596)) by @twenty-pr-author
- Remove unused BILLING_STRIPE_BASE_PLAN_PRODUCT_ID from server CI env ([#28602](https://github.com/twentyhq/twenty/pull/28602)) by @etiennejouan
- Recreate application registration versions skipped on v2.48.0 instances ([#28603](https://github.com/twentyhq/twenty/pull/28603)) by @martmull
- Keep only the npm build and publish executor public ([#28605](https://github.com/twentyhq/twenty/pull/28605)) by @FelixMalfait
- Lock and read timeline merges per linked record ([#28607](https://github.com/twentyhq/twenty/pull/28607)) by @etiennejouan
- Extract shared form field row ([#28608](https://github.com/twentyhq/twenty/pull/28608)) by @bosiraphael
- Add a shared labeled separator ([#28610](https://github.com/twentyhq/twenty/pull/28610)) by @bosiraphael
- Use the multi-arch Node 24.22.1 Docker base ([#28611](https://github.com/twentyhq/twenty/pull/28611)) by @prastoin
- Let @DefineTool tools declare a catalog icon ([#28612](https://github.com/twentyhq/twenty/pull/28612)) by @prastoin
- Let @DefineTool tools require workspace feature flags ([#28614](https://github.com/twentyhq/twenty/pull/28614)) by @prastoin
- Claim an application: icon-only sync catalog button, look up on the right ([#28615](https://github.com/twentyhq/twenty/pull/28615)) by @martmull
- Hide credits used column in app stats when billing is disabled ([#28616](https://github.com/twentyhq/twenty/pull/28616)) by @martmull
- Migrate widget settings dropdowns ([#28617](https://github.com/twentyhq/twenty/pull/28617)) by @bosiraphael
- Show the redirect host on the OAuth consent screen ([#28619](https://github.com/twentyhq/twenty/pull/28619)) by @charlesBochet
- Fix annotated publishing tags after shallow checkout ([#28620](https://github.com/twentyhq/twenty/pull/28620)) by @FelixMalfait
- Use a single object argument for renderStats test helper ([#28622](https://github.com/twentyhq/twenty/pull/28622)) by @martmull
- Validate npm publishing with native Yarn staging ([#28623](https://github.com/twentyhq/twenty/pull/28623)) by @FelixMalfait
- feat(billing): show the current legacy plan on the Plans page ([#28624](https://github.com/twentyhq/twenty/pull/28624)) by @etiennejouan
- Fix oversized icons in timeline field diffs ([#28625](https://github.com/twentyhq/twenty/pull/28625)) by @FelixMalfait
- Upgrade Yarn to 4.18.1 for native staged publishing ([#28627](https://github.com/twentyhq/twenty/pull/28627)) by @FelixMalfait
- Make the Microsoft Teams app README concise ([#28628](https://github.com/twentyhq/twenty/pull/28628)) by @ehconitin
- Migrate the agent tools to @DefineTool ([#28630](https://github.com/twentyhq/twenty/pull/28630)) by @prastoin
- Record permission and feature flags in the endpoint permission snapshot ([#28633](https://github.com/twentyhq/twenty/pull/28633)) by @prastoin
- Migrate DatePicker to twenty-ui ([#28636](https://github.com/twentyhq/twenty/pull/28636)) by @bosiraphael
- Make connection provider scope immutable and derive account scope from it ([#28637](https://github.com/twentyhq/twenty/pull/28637)) by @ehconitin
- Remove focus rings from search inputs ([#28638](https://github.com/twentyhq/twenty/pull/28638)) by @bosiraphael
- Hide record write commands on objects not writable from user sessions ([#28641](https://github.com/twentyhq/twenty/pull/28641)) by @martmull
- Only offer user-assignable roles in the workspace default role picker ([#28644](https://github.com/twentyhq/twenty/pull/28644)) by @prastoin
- Refuse row-level permission rule changes on non-editable roles ([#28645](https://github.com/twentyhq/twenty/pull/28645)) by @prastoin
- fix(ci): track standalone CLI in docs and skills drift checks ([#28646](https://github.com/twentyhq/twenty/pull/28646)) by @Weiko
- Cache Lambda GetFunction results per logic function ([#28647](https://github.com/twentyhq/twenty/pull/28647)) by @charlesBochet
- Clarify budget field label in the partner brief form ([#28650](https://github.com/twentyhq/twenty/pull/28650)) by @ijreilly
- Allow private CLI staging before SDK publication ([#28651](https://github.com/twentyhq/twenty/pull/28651)) by @FelixMalfait
- Keep inbox rows compact ([#28656](https://github.com/twentyhq/twenty/pull/28656)) by @bosiraphael
- Fix currency and date display in cards ([#28657](https://github.com/twentyhq/twenty/pull/28657)) by @bosiraphael
- Classify mail.instinct.com as a personal email domain ([#28661](https://github.com/twentyhq/twenty/pull/28661)) by @FelixMalfait
- Restore onboarding button contrast ([#28662](https://github.com/twentyhq/twenty/pull/28662)) by @bosiraphael
- Fix navigation skeleton overflow ([#28663](https://github.com/twentyhq/twenty/pull/28663)) by @bosiraphael
- Stabilize renderer popup interactions ([#28665](https://github.com/twentyhq/twenty/pull/28665)) by @bosiraphael
- Rename 6 server files to the singular suffix in src/engine/core-modules/file/utils ([#28666](https://github.com/twentyhq/twenty/pull/28666)) by @twenty-pr-author
- Set Admin as the Twenty standard application default role ([#28667](https://github.com/twentyhq/twenty/pull/28667)) by @prastoin
- Use the shared separator for inbox unread messages ([#28669](https://github.com/twentyhq/twenty/pull/28669)) by @bosiraphael
- Show "Not shared" in the record page breadcrumb for restricted titles ([#28670](https://github.com/twentyhq/twenty/pull/28670)) by @charlesBochet
- Keep non-editable roles out of application manifests ([#28674](https://github.com/twentyhq/twenty/pull/28674)) by @prastoin
- Match currency values to Figma ([#28676](https://github.com/twentyhq/twenty/pull/28676)) by @bosiraphael
- Give Ask AI the calling application in its tool context ([#28678](https://github.com/twentyhq/twenty/pull/28678)) by @prastoin
- Refresh email campaign doc screenshots for the redesigned UI ([#28681](https://github.com/twentyhq/twenty/pull/28681)) by @neo773
- Fix logic functions staying on the old SDK after it is regenerated ([#28683](https://github.com/twentyhq/twenty/pull/28683)) by @neo773
- Refuse a campaign send upfront when the list is over the daily email limit ([#28685](https://github.com/twentyhq/twenty/pull/28685)) by @neo773
- Document app monitoring for app developers ([#28686](https://github.com/twentyhq/twenty/pull/28686)) by @martmull
- Remove the role service spec ([#28690](https://github.com/twentyhq/twenty/pull/28690)) by @prastoin
</details>
**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.50.0...twenty/v2.51.0