twenty/v2.40.0

BasedHardware/omitwenty/v2.40.0Sep 15, 2026by twenty-pr[bot]

Upgrading?

AI Summary

This update introduces significant changes to AI model selection and app installation tracking, alongside new features for workflows, search, and call recording integration.

Key Highlights

  • Breaking change: AI model pickers replaced with a five-tier slider
  • New features: Bulk workflow deletion and creation
  • Fathom recording integration improvements
  • Slack assistant failure reply branching

Breaking Changes

  • Track application installs and uninstalls with deterministic queue jobs
  • Replace model pickers with a five-tier model slider

New Features

  • Object search section editing
  • Bulk workflow selection and deletion
  • Fathom bot toggle for all calendar meetings
  • MCP file upload action tools
  • Usage limit quota enforcement over credit allowance periods
  • Workflow creation and deletion through core API
  • AI chat hints for @ and / in composer

Full Release Notes

<!-- generated-release-notes v1 -->

## ⚠️ Breaking changes

- Track application installs and uninstalls with deterministic queue jobs ([#25502](https://github.com/twentyhq/twenty/pull/25502)) by @martmull
- feat(ai): replace model pickers with a five-tier model slider ([#25721](https://github.com/twentyhq/twenty/pull/25721)) by @FelixMalfait

## ✨ New features

- feat(search): expose isSearchable on field metadata and make the object search section editable ([#25166](https://github.com/twentyhq/twenty/pull/25166)) by @prastoin
- feat(record-form): render the record creation form behind a flag ([#25203](https://github.com/twentyhq/twenty/pull/25203)) by @thomtrp
- feat(core): let apps report a connection auth failure with a reason ([#25297](https://github.com/twentyhq/twenty/pull/25297)) by @abdulrahmancodes
- feat(workflow): polish the core workflows index and gate workflow run workspace relations ([#25356](https://github.com/twentyhq/twenty/pull/25356)) by @thomtrp
- feat(workflow): select core workflows and delete them in bulk ([#25415](https://github.com/twentyhq/twenty/pull/25415)) by @thomtrp
- feat(call-recorder): toggle to send the bot to all calendar meetings ([#25431](https://github.com/twentyhq/twenty/pull/25431)) by @ehconitin
- feat(slack): branch the assistant failure reply on the failure kind ([#25484](https://github.com/twentyhq/twenty/pull/25484)) by @abdulrahmancodes
- feat: add create/complete file upload action tools for MCP ([#25503](https://github.com/twentyhq/twenty/pull/25503)) by @Lakshayyy-m
- feat(usage-limit): quota limits over the credit allowance period ([#25526](https://github.com/twentyhq/twenty/pull/25526)) by @etiennejouan
- feat(usage-limit): count quota admits on failure and the credits they let through ([#25546](https://github.com/twentyhq/twenty/pull/25546)) by @etiennejouan
- feat(slack): point the channel welcome at the DM as the private path ([#25585](https://github.com/twentyhq/twenty/pull/25585)) by @abdulrahmancodes
- feat: add audio playback fallback for call recordings ([#25592](https://github.com/twentyhq/twenty/pull/25592)) by @ehconitin
- feat(workflow): create and delete workflows through the core API ([#25626](https://github.com/twentyhq/twenty/pull/25626)) by @thomtrp
- feat(workflow): read the workflow show page through the core API ([#25669](https://github.com/twentyhq/twenty/pull/25669)) by @thomtrp
- feat(usage-limit): cap webhook calls per workspace at enqueue time ([#25673](https://github.com/twentyhq/twenty/pull/25673)) by @etiennejouan
- feat(slack): show the thinking status before the assistant context lookups ([#25676](https://github.com/twentyhq/twenty/pull/25676)) by @abdulrahmancodes
- feat(workflow): add coreWorkflowId to core workflow versions ([#25679](https://github.com/twentyhq/twenty/pull/25679)) by @thomtrp
- feat(slack): defer rate limited message delivery to a delayed job ([#25700](https://github.com/twentyhq/twenty/pull/25700)) by @abdulrahmancodes
- feat(server): run server route dispatch jobs ahead of the trigger fan-out ([#25701](https://github.com/twentyhq/twenty/pull/25701)) by @abdulrahmancodes
- feat(slack): answer the assistant request in the execution that records it ([#25702](https://github.com/twentyhq/twenty/pull/25702)) by @abdulrahmancodes
- feat(ai-chat): hint @ and / in composer placeholder, add / skill suggestions ([#25778](https://github.com/twentyhq/twenty/pull/25778)) by @FelixMalfait
- feat(skills): split agent-only skills from user skills, rewrite the catalog ([#25798](https://github.com/twentyhq/twenty/pull/25798)) by @FelixMalfait

## πŸ’… Improvements & UX

- Alias native worker APIs onto window in front components ([#24190](https://github.com/twentyhq/twenty/pull/24190)) by @bosiraphael
- Support classList in front components ([#24191](https://github.com/twentyhq/twenty/pull/24191)) by @bosiraphael
- Make the Fathom app publishable and rewrite its listing copy ([#25325](https://github.com/twentyhq/twenty/pull/25325)) by @ehconitin
- Fix delayed view deletion feedback ([#25344](https://github.com/twentyhq/twenty/pull/25344)) by @Bonapara
- Add field description tooltips ([#25408](https://github.com/twentyhq/twenty/pull/25408)) by @Bonapara
- Extract email body text without building a DOM ([#25422](https://github.com/twentyhq/twenty/pull/25422)) by @neo773
- Record sharing 2/14: add the recordShare hidden standard object and its service ([#25425](https://github.com/twentyhq/twenty/pull/25425)) by @martmull
- Record sharing 3/14: gate reads and writes on private objects with record share rows ([#25426](https://github.com/twentyhq/twenty/pull/25426)) by @martmull
- Record sharing 4/14: let a create state who may read the record with shareWith ([#25428](https://github.com/twentyhq/twenty/pull/25428)) by @martmull
- Add Fathom media storage foundation ([#25432](https://github.com/twentyhq/twenty/pull/25432)) by @ehconitin
- Import Fathom recording media asynchronously ([#25433](https://github.com/twentyhq/twenty/pull/25433)) by @ehconitin
- Reconcile stale Fathom media imports ([#25434](https://github.com/twentyhq/twenty/pull/25434)) by @ehconitin
- Migrate existing Canvas tabs to vertical lists ([#25511](https://github.com/twentyhq/twenty/pull/25511)) by @Bonapara
- Support explicit widget height behavior ([#25512](https://github.com/twentyhq/twenty/pull/25512)) by @Bonapara
- Simplify page layout manifest authoring ([#25513](https://github.com/twentyhq/twenty/pull/25513)) by @Bonapara
- Use existing component for AI chat warnings ([#25519](https://github.com/twentyhq/twenty/pull/25519)) by @Bonapara
- Delete Fathom webhooks on disconnect ([#25520](https://github.com/twentyhq/twenty/pull/25520)) by @ehconitin
- Fix app CI fixtures and registry upload limit ([#25531](https://github.com/twentyhq/twenty/pull/25531)) by @Bonapara
- Stop pruning published translations when a project has no locales folder ([#25535](https://github.com/twentyhq/twenty/pull/25535)) by @Weiko
- Fix sidebar Link items in folders redirecting to a doubled URL ([#25536](https://github.com/twentyhq/twenty/pull/25536)) by @bosiraphael
- bump call recorder app version to 1.13.0 ([#25538](https://github.com/twentyhq/twenty/pull/25538)) by @ehconitin
- Scaffold a locales folder with an empty source catalog ([#25539](https://github.com/twentyhq/twenty/pull/25539)) by @Weiko
- Add Fathom recording import data model ([#25540](https://github.com/twentyhq/twenty/pull/25540)) by @ehconitin
- Polish AI chat mode design and actions ([#25542](https://github.com/twentyhq/twenty/pull/25542)) by @Bonapara
- Clear a Recording Bot On the call recorder cannot honor ([#25543](https://github.com/twentyhq/twenty/pull/25543)) by @ehconitin
- Offer a DMARC record only when the sending domain has none ([#25547](https://github.com/twentyhq/twenty/pull/25547)) by @neo773
- Run twenty-ui unit tests on vitest and add a component conformance helper ([#25548](https://github.com/twentyhq/twenty/pull/25548)) by @bosiraphael
- Add a color scheme toolbar to twenty-ui Storybook with dark catalog stories for Field and Text ([#25550](https://github.com/twentyhq/twenty/pull/25550)) by @bosiraphael
- Reuse shared status tags and truncate banner messages ([#25554](https://github.com/twentyhq/twenty/pull/25554)) by @Bonapara
- Stream nx task output so a killed task still prints its stack ([#25560](https://github.com/twentyhq/twenty/pull/25560)) by @neo773
- Let marketers schedule a campaign for a later send ([#25563](https://github.com/twentyhq/twenty/pull/25563)) by @neo773
- Stop group email deletion from scanning a cartesian product ([#25565](https://github.com/twentyhq/twenty/pull/25565)) by @neo773
- Export an application's published translations in the manifest ([#25566](https://github.com/twentyhq/twenty/pull/25566)) by @Weiko
- [Apps 2-way sync] Pull write translations ([#25567](https://github.com/twentyhq/twenty/pull/25567)) by @Weiko
- Skip empty built files on upload and report a rejected batch once ([#25568](https://github.com/twentyhq/twenty/pull/25568)) by @Weiko
- Remove an unused import from defineObject ([#25569](https://github.com/twentyhq/twenty/pull/25569)) by @Weiko
- Granola 1/8: Add the Granola application scaffold ([#25570](https://github.com/twentyhq/twenty/pull/25570)) by @ehconitin
- Granola 3/8: Map Granola notes into Call Recordings ([#25572](https://github.com/twentyhq/twenty/pull/25572)) by @ehconitin
- Granola 4/8: Connect Granola webhooks and live synchronization ([#25573](https://github.com/twentyhq/twenty/pull/25573)) by @ehconitin
- Granola 5/8: Import Granola history and recover missed updates ([#25574](https://github.com/twentyhq/twenty/pull/25574)) by @ehconitin
- Granola 6/8: Expose Granola notes to workflows and AI ([#25575](https://github.com/twentyhq/twenty/pull/25575)) by @ehconitin
- Add Input, InputGroup and Textarea to twenty-ui ([#25584](https://github.com/twentyhq/twenty/pull/25584)) by @bosiraphael
- Resolve the side panel context store object from the panel location ([#25586](https://github.com/twentyhq/twenty/pull/25586)) by @bosiraphael
- Bump app version ([#25587](https://github.com/twentyhq/twenty/pull/25587)) by @martmull
- Snapshot the exported manifest and guard the compared properties in the export spec ([#25593](https://github.com/twentyhq/twenty/pull/25593)) by @Weiko
- Fix empty relation card vertical padding ([#25595](https://github.com/twentyhq/twenty/pull/25595)) by @Bonapara
- Add ListItem to twenty-ui ([#25596](https://github.com/twentyhq/twenty/pull/25596)) by @bosiraphael
- Keep the workspace navigation section visible when it has no items ([#25597](https://github.com/twentyhq/twenty/pull/25597)) by @Weiko
- Always create app connections at workspace level ([#25598](https://github.com/twentyhq/twenty/pull/25598)) by @FelixMalfait
- Stop fanning workflowRun.updated events out to webhooks ([#25599](https://github.com/twentyhq/twenty/pull/25599)) by @thomtrp
- Export views and their children from an installed application ([#25600](https://github.com/twentyhq/twenty/pull/25600)) by @Weiko
- Restore workflowRun.updated webhooks for explicit subscriptions ([#25601](https://github.com/twentyhq/twenty/pull/25601)) by @thomtrp
- Write pulled views and standalone view fields as define files ([#25606](https://github.com/twentyhq/twenty/pull/25606)) by @Weiko
- Add Popover to twenty-ui ([#25607](https://github.com/twentyhq/twenty/pull/25607)) by @bosiraphael
- Update website changelog through 2.38.1 ([#25609](https://github.com/twentyhq/twenty/pull/25609)) by @Bonapara
- Add Menu to twenty-ui ([#25610](https://github.com/twentyhq/twenty/pull/25610)) by @bosiraphael
- Add Tabs compound to twenty-ui ([#25612](https://github.com/twentyhq/twenty/pull/25612)) by @bosiraphael
- Open onboarding AI chat beside the workspace homepage ([#25614](https://github.com/twentyhq/twenty/pull/25614)) by @Bonapara
- Move part class-name merging into shared utilities ([#25621](https://github.com/twentyhq/twenty/pull/25621)) by @bosiraphael
- Move twenty-ui component behavior tests into stories ([#25623](https://github.com/twentyhq/twenty/pull/25623)) by @bosiraphael
- Export page layouts, tabs and widgets from an installed application ([#25624](https://github.com/twentyhq/twenty/pull/25624)) by @Weiko
- Add Select compound to twenty-ui ([#25625](https://github.com/twentyhq/twenty/pull/25625)) by @bosiraphael
- Fix Menu imports after class-name helper rename ([#25634](https://github.com/twentyhq/twenty/pull/25634)) by @bosiraphael
- Make the billing catalog ready for plan and price evolution ([#25635](https://github.com/twentyhq/twenty/pull/25635)) by @FelixMalfait
- Add isAuditLogged on field metadata to keep noisy fields off the timeline ([#25641](https://github.com/twentyhq/twenty/pull/25641)) by @FelixMalfait
- Allow automation and AI agents in the terms of service ([#25642](https://github.com/twentyhq/twenty/pull/25642)) by @FelixMalfait
- Revert "Revert "Record sharing 5/14: evaluate record shares in memory for events"" ([#25650](https://github.com/twentyhq/twenty/pull/25650)) by @martmull
- Add a standalone page layout widget slot to the manifest and export widgets placed on existing tabs ([#25651](https://github.com/twentyhq/twenty/pull/25651)) by @Weiko
- Write pulled page layouts and standalone page layout tabs as define files ([#25655](https://github.com/twentyhq/twenty/pull/25655)) by @Weiko
- Serialize a workspace's entitlement transition ([#25660](https://github.com/twentyhq/twenty/pull/25660)) by @FelixMalfait
- Extract frontend snack bar into twenty-ui Toast ([#25663](https://github.com/twentyhq/twenty/pull/25663)) by @bosiraphael
- Add AlertDialog compound to twenty-ui ([#25665](https://github.com/twentyhq/twenty/pull/25665)) by @bosiraphael
- Fix dropdown anchoring at non-default interface scales ([#25667](https://github.com/twentyhq/twenty/pull/25667)) by @Bonapara
- Let a relation field's bookkeeping properties be updated through a sync ([#25668](https://github.com/twentyhq/twenty/pull/25668)) by @Weiko
- Run direct consumer CI on twenty-ui changes and record known radio failures ([#25670](https://github.com/twentyhq/twenty/pull/25670)) by @bosiraphael
- Add benchmarks, data residency and zero data retention to the AI model catalog ([#25675](https://github.com/twentyhq/twenty/pull/25675)) by @FelixMalfait
- Migrate twenty-ui Toggle to Switch ([#25678](https://github.com/twentyhq/twenty/pull/25678)) by @bosiraphael
- Skip workflow status update when the workflow no longer exists ([#25680](https://github.com/twentyhq/twenty/pull/25680)) by @thomtrp
- Fix column resize dragging the widget in layout edit mode ([#25681](https://github.com/twentyhq/twenty/pull/25681)) by @bosiraphael
- Create the inputs-validation fixture fields in one migration instead of twenty-two ([#25684](https://github.com/twentyhq/twenty/pull/25684)) by @Weiko
- Let app-driven agents reach dashboard and workflow tools ([#25685](https://github.com/twentyhq/twenty/pull/25685)) by @abdulrahmancodes
- Export an application's navigation menu items ([#25687](https://github.com/twentyhq/twenty/pull/25687)) by @Weiko
- Fix two matcher defects the first populated benchmark sync exposed ([#25690](https://github.com/twentyhq/twenty/pull/25690)) by @FelixMalfait
- Resolve Slack mention tokens before the assistant prompt is built ([#25694](https://github.com/twentyhq/twenty/pull/25694)) by @abdulrahmancodes
- Acknowledge Slack file attachments in the assistant ([#25695](https://github.com/twentyhq/twenty/pull/25695)) by @abdulrahmancodes
- Deliver the Claude reasoning config and make effort a first-class model parameter ([#25696](https://github.com/twentyhq/twenty/pull/25696)) by @FelixMalfait
- Write pulled navigation menu items as define files ([#25705](https://github.com/twentyhq/twenty/pull/25705)) by @Weiko
- Show workspace-shared app connections to every member ([#25708](https://github.com/twentyhq/twenty/pull/25708)) by @abdulrahmancodes
- Clear logoFileId when the workspace logo is removed ([#25711](https://github.com/twentyhq/twenty/pull/25711)) by @martmull
- Refresh self-hosted Google default to Gemini 3.8 Flash ([#25713](https://github.com/twentyhq/twenty/pull/25713)) by @twenty-pr-author
- Increase logic function concurrency ([#25714](https://github.com/twentyhq/twenty/pull/25714)) by @martmull
- Migrate twenty-ui Radio and RadioGroup ([#25715](https://github.com/twentyhq/twenty/pull/25715)) by @bosiraphael
- Migrate twenty-ui Slider to Base UI ([#25716](https://github.com/twentyhq/twenty/pull/25716)) by @bosiraphael
- Backfill twenty-ui front component renderer stories ([#25719](https://github.com/twentyhq/twenty/pull/25719)) by @bosiraphael
- Fix AWS region validation across partitions ([#25720](https://github.com/twentyhq/twenty/pull/25720)) by @NiklasDah
- Add batch delivery to database-event-triggered logic functions ([#25726](https://github.com/twentyhq/twenty/pull/25726)) by @martmull
- Import CalDAV events from servers that omit getetag ([#25728](https://github.com/twentyhq/twenty/pull/25728)) by @neo773
- Accept CalDAV calendars that do not publish a component set ([#25729](https://github.com/twentyhq/twenty/pull/25729)) by @neo773
- Score effort variants from the benchmark rows taken at their own effort ([#25730](https://github.com/twentyhq/twenty/pull/25730)) by @FelixMalfait
- Compare a record relation to the current member's relation in row-level permissions ([#25732](https://github.com/twentyhq/twenty/pull/25732)) by @Weiko
- Stop pull overwriting a source file that defines no entity ([#25739](https://github.com/twentyhq/twenty/pull/25739)) by @Weiko
- Write pulled standalone page layout widgets as define files ([#25743](https://github.com/twentyhq/twenty/pull/25743)) by @Weiko
- Stop calling a local file unknown to the workspace when the export reported it ([#25746](https://github.com/twentyhq/twenty/pull/25746)) by @Weiko
- Tell pull users their project cannot build what pull just wrote ([#25747](https://github.com/twentyhq/twenty/pull/25747)) by @Weiko
- Keep a stored file's identifier when its content is uploaded again ([#25748](https://github.com/twentyhq/twenty/pull/25748)) by @Weiko
- Refuse to pull an application into a project that already defines another ([#25750](https://github.com/twentyhq/twenty/pull/25750)) by @Weiko
- Never infer deletion for rows a manifest cannot express ([#25752](https://github.com/twentyhq/twenty/pull/25752)) by @Weiko
- Block private-network SSO issuers and replace the safe-mode toggle with an internal host allowlist ([#25756](https://github.com/twentyhq/twenty/pull/25756)) by @FelixMalfait
- Restrict AI and Settings access during layout editing ([#25760](https://github.com/twentyhq/twenty/pull/25760)) by @Bonapara
- Let the e2e local registry accept twenty-ui ([#25765](https://github.com/twentyhq/twenty/pull/25765)) by @Weiko
- Fill the empty Type column in Skills settings with the owning app ([#25766](https://github.com/twentyhq/twenty/pull/25766)) by @FelixMalfait
- Read the deprecated flag from the model config when picking a tier default ([#25769](https://github.com/twentyhq/twenty/pull/25769)) by @Weiko
- Keep only compliance badges on the import-contacts onboarding step ([#25774](https://github.com/twentyhq/twenty/pull/25774)) by @FelixMalfait
- Propagate SMTP send failures so the email job actually retries ([#25776](https://github.com/twentyhq/twenty/pull/25776)) by @neo773
- fix iCal parsing: bare CR (0x0D) line breaks instead of the CRLF that… ([#25782](https://github.com/twentyhq/twenty/pull/25782)) by @mcr-ksh
- Fix CLAUDE.md guard import sources ([#25789](https://github.com/twentyhq/twenty/pull/25789)) by @prastoin
- Complete call recordings whose Recall transcript is empty ([#25793](https://github.com/twentyhq/twenty/pull/25793)) by @ehconitin
- Finish call recordings without a transcript when Recall rejects the transcript request ([#25794](https://github.com/twentyhq/twenty/pull/25794)) by @ehconitin
- Stop re-checking already-warned workspaces every hour in CleanSuspendedWorkspacesJob ([#25800](https://github.com/twentyhq/twenty/pull/25800)) by @etiennejouan
- Give each Sentry cron monitor its own max runtime ([#25801](https://github.com/twentyhq/twenty/pull/25801)) by @etiennejouan
- Point pull users at the apply flag that protects what it could not write ([#25808](https://github.com/twentyhq/twenty/pull/25808)) by @Weiko
- List every kind pull does not export yet ([#25811](https://github.com/twentyhq/twenty/pull/25811)) by @Weiko

## πŸ› Bug fixes

- fix(slack): bound Slack Web API retries to the logic function budget ([#25483](https://github.com/twentyhq/twenty/pull/25483)) by @abdulrahmancodes
- fix(enterprise): keep self-hosted licenses valid while Stripe retries a failed payment ([#25515](https://github.com/twentyhq/twenty/pull/25515)) by @ijreilly
- fix(docker): resolve release tags from the twenty/v* namespace and fail on bad downloads ([#25524](https://github.com/twentyhq/twenty/pull/25524)) by @ijreilly
- fix(front): accept null Actor context.provider (#25532) ([#25537](https://github.com/twentyhq/twenty/pull/25537)) by @grootbro
- fix(front): report the records an interrupted incremental delete already removed ([#25549](https://github.com/twentyhq/twenty/pull/25549)) by @thomtrp
- fix(workflow): stop mirroring soft-deleted workflows into core ([#25553](https://github.com/twentyhq/twenty/pull/25553)) by @thomtrp
- fix(front): persist percentage values that still include a percent sign (#17677) ([#25555](https://github.com/twentyhq/twenty/pull/25555)) by @claxman
- fix(server): stop upgrade-pending columns from breaking repository updates ([#25583](https://github.com/twentyhq/twenty/pull/25583)) by @FelixMalfait
- fix(billing): stop granted credits expiring when a period transition misfires ([#25603](https://github.com/twentyhq/twenty/pull/25603)) by @FelixMalfait
- fix(server): build the install-time SDK layer from the migration's own flat maps ([#25608](https://github.com/twentyhq/twenty/pull/25608)) by @prastoin
- fix(ai-chat): answer a refused message with what actually clears it ([#25622](https://github.com/twentyhq/twenty/pull/25622)) by @etiennejouan
- fix(mcp): list connected accounts from the core schema ([#25658](https://github.com/twentyhq/twenty/pull/25658)) by @Hermi941
- fix(server): bound TimelineActivityRoutingPlanService workspace cache ([#25659](https://github.com/twentyhq/twenty/pull/25659)) by @etiennejouan
- fix(uploads): cap file size for files-field and application file upload mutations ([#25671](https://github.com/twentyhq/twenty/pull/25671)) by @addyCooks
- fix(front): reset confirmation modal input when reopened ([#25674](https://github.com/twentyhq/twenty/pull/25674)) by @mydd7
- fix(slack): keep assistant feedback buttons on long answers ([#25693](https://github.com/twentyhq/twenty/pull/25693)) by @abdulrahmancodes
- fix(admin-panel): stop calling a metered line item's quantity "seats" ([#25698](https://github.com/twentyhq/twenty/pull/25698)) by @FelixMalfait
- fix(billing): stop writing a raw ISO timestamp into a credit grant's reason ([#25699](https://github.com/twentyhq/twenty/pull/25699)) by @FelixMalfait
- fix(workflow): stop email steps sending from another member's account ([#25709](https://github.com/twentyhq/twenty/pull/25709)) by @hktitof
- fix(apps): preserve vetted status during catalog sync ([#25725](https://github.com/twentyhq/twenty/pull/25725)) by @ehconitin
- fix: republish twenty-ui as MIT (1.0.0-alpha.2) to resolve stale AGPL artifacts ([#25738](https://github.com/twentyhq/twenty/pull/25738)) by @MauryaQbit
- fix(messaging): don't delete messages still present in another folder's delta sync ([#25751](https://github.com/twentyhq/twenty/pull/25751)) by @breken-ai
- fix(ai): keep catalog efforts under an AI_PROVIDERS override and fix tier UI findings ([#25753](https://github.com/twentyhq/twenty/pull/25753)) by @FelixMalfait
- fix(storybook): prevent oversized Argos screenshots ([#25779](https://github.com/twentyhq/twenty/pull/25779)) by @bosiraphael
- fix(front): create component instance ids once instead of rewriting them per surface ([#25790](https://github.com/twentyhq/twenty/pull/25790)) by @FelixMalfait
- fix(front): hide connection provider avatar when there is no logo ([#25797](https://github.com/twentyhq/twenty/pull/25797)) by @martmull
- fix(front): open the view picker on the id its dropdown listens to ([#25799](https://github.com/twentyhq/twenty/pull/25799)) by @FelixMalfait

## πŸ”§ Developer & API

- Granola 2/8: Add Granola API access and credential settings ([#25571](https://github.com/twentyhq/twenty/pull/25571)) by @ehconitin
- Stop reporting handled webhook subscription failures to Sentry ([#25591](https://github.com/twentyhq/twenty/pull/25591)) by @neo773
- Debounce calendar webhook syncs instead of throwing when one is running ([#25656](https://github.com/twentyhq/twenty/pull/25656)) by @neo773
- Stop servicing webhook subscriptions for suspended workspaces ([#25657](https://github.com/twentyhq/twenty/pull/25657)) by @neo773
- Upgrade the AI SDK to v7 ([#25704](https://github.com/twentyhq/twenty/pull/25704)) by @FelixMalfait
- Migrate twenty-ui Checkbox to the shared form-control API ([#25712](https://github.com/twentyhq/twenty/pull/25712)) by @bosiraphael
- Register the GraphQL resolver name map cache provider in the worker ([#25717](https://github.com/twentyhq/twenty/pull/25717)) by @prastoin
- Align twenty-ui with SDK package versions ([#25758](https://github.com/twentyhq/twenty/pull/25758)) by @bosiraphael
- Migrate Status to the new twenty-ui API ([#25785](https://github.com/twentyhq/twenty/pull/25785)) by @bosiraphael
- Migrate Tag to the new twenty-ui API ([#25786](https://github.com/twentyhq/twenty/pull/25786)) by @bosiraphael

<details>
<summary>πŸ—οΈ Internal changes (6)</summary>

- docs: add inbound email channel forwarding guides ([#25602](https://github.com/twentyhq/twenty/pull/25602)) by @neo773
- chore(twenty-ui): update Base UI to 1.8.0 ([#25615](https://github.com/twentyhq/twenty/pull/25615)) by @bosiraphael
- refactor(server): warm up prebuilt logic functions after the install migration commits ([#25672](https://github.com/twentyhq/twenty/pull/25672)) by @prastoin
- refactor(server): extract a single LRU eviction primitive ([#25733](https://github.com/twentyhq/twenty/pull/25733)) by @etiennejouan
- refactor: share floating reference scale calculation ([#25762](https://github.com/twentyhq/twenty/pull/25762)) by @Bonapara
- refactor(ai): seed the agent and skill settings forms from the loaded record ([#25764](https://github.com/twentyhq/twenty/pull/25764)) by @FelixMalfait

</details>

## πŸŽ‰ New contributors

- @grootbro made their first contribution in https://github.com/twentyhq/twenty/pull/25537
- @claxman made their first contribution in https://github.com/twentyhq/twenty/pull/25555
- @Hermi941 made their first contribution in https://github.com/twentyhq/twenty/pull/25658
- @addyCooks made their first contribution in https://github.com/twentyhq/twenty/pull/25671
- @twenty-pr-author[bot] made their first contribution in https://github.com/twentyhq/twenty/pull/25713
- @NiklasDah made their first contribution in https://github.com/twentyhq/twenty/pull/25720
- @breken-ai made their first contribution in https://github.com/twentyhq/twenty/pull/25751
- @MauryaQbit made their first contribution in https://github.com/twentyhq/twenty/pull/25738
- @mydd7 made their first contribution in https://github.com/twentyhq/twenty/pull/25674
- @mcr-ksh made their first contribution in https://github.com/twentyhq/twenty/pull/25782

<details>
<summary>Full changelog (201 PRs)</summary>

- Alias native worker APIs onto window in front components ([#24190](https://github.com/twentyhq/twenty/pull/24190)) by @bosiraphael
- Support classList in front components ([#24191](https://github.com/twentyhq/twenty/pull/24191)) by @bosiraphael
- feat(search): expose isSearchable on field metadata and make the object search section editable ([#25166](https://github.com/twentyhq/twenty/pull/25166)) by @prastoin
- feat(record-form): render the record creation form behind a flag ([#25203](https://github.com/twentyhq/twenty/pull/25203)) by @thomtrp
- feat(core): let apps report a connection auth failure with a reason ([#25297](https://github.com/twentyhq/twenty/pull/25297)) by @abdulrahmancodes
- Make the Fathom app publishable and rewrite its listing copy ([#25325](https://github.com/twentyhq/twenty/pull/25325)) by @ehconitin
- Fix delayed view deletion feedback ([#25344](https://github.com/twentyhq/twenty/pull/25344)) by @Bonapara
- feat(workflow): polish the core workflows index and gate workflow run workspace relations ([#25356](https://github.com/twentyhq/twenty/pull/25356)) by @thomtrp
- Add field description tooltips ([#25408](https://github.com/twentyhq/twenty/pull/25408)) by @Bonapara
- feat(workflow): select core workflows and delete them in bulk ([#25415](https://github.com/twentyhq/twenty/pull/25415)) by @thomtrp
- Extract email body text without building a DOM ([#25422](https://github.com/twentyhq/twenty/pull/25422)) by @neo773
- Record sharing 2/14: add the recordShare hidden standard object and its service ([#25425](https://github.com/twentyhq/twenty/pull/25425)) by @martmull
- Record sharing 3/14: gate reads and writes on private objects with record share rows ([#25426](https://github.com/twentyhq/twenty/pull/25426)) by @martmull
- Record sharing 4/14: let a create state who may read the record with shareWith ([#25428](https://github.com/twentyhq/twenty/pull/25428)) by @martmull
- feat(call-recorder): toggle to send the bot to all calendar meetings ([#25431](https://github.com/twentyhq/twenty/pull/25431)) by @ehconitin
- Add Fathom media storage foundation ([#25432](https://github.com/twentyhq/twenty/pull/25432)) by @ehconitin
- Import Fathom recording media asynchronously ([#25433](https://github.com/twentyhq/twenty/pull/25433)) by @ehconitin
- Reconcile stale Fathom media imports ([#25434](https://github.com/twentyhq/twenty/pull/25434)) by @ehconitin
- fix(slack): bound Slack Web API retries to the logic function budget ([#25483](https://github.com/twentyhq/twenty/pull/25483)) by @abdulrahmancodes
- feat(slack): branch the assistant failure reply on the failure kind ([#25484](https://github.com/twentyhq/twenty/pull/25484)) by @abdulrahmancodes
- Track application installs and uninstalls with deterministic queue jobs ([#25502](https://github.com/twentyhq/twenty/pull/25502)) by @martmull
- feat: add create/complete file upload action tools for MCP ([#25503](https://github.com/twentyhq/twenty/pull/25503)) by @Lakshayyy-m
- Migrate existing Canvas tabs to vertical lists ([#25511](https://github.com/twentyhq/twenty/pull/25511)) by @Bonapara
- Support explicit widget height behavior ([#25512](https://github.com/twentyhq/twenty/pull/25512)) by @Bonapara
- Simplify page layout manifest authoring ([#25513](https://github.com/twentyhq/twenty/pull/25513)) by @Bonapara
- fix(enterprise): keep self-hosted licenses valid while Stripe retries a failed payment ([#25515](https://github.com/twentyhq/twenty/pull/25515)) by @ijreilly
- Use existing component for AI chat warnings ([#25519](https://github.com/twentyhq/twenty/pull/25519)) by @Bonapara
- Delete Fathom webhooks on disconnect ([#25520](https://github.com/twentyhq/twenty/pull/25520)) by @ehconitin
- fix(docker): resolve release tags from the twenty/v* namespace and fail on bad downloads ([#25524](https://github.com/twentyhq/twenty/pull/25524)) by @ijreilly
- feat(usage-limit): quota limits over the credit allowance period ([#25526](https://github.com/twentyhq/twenty/pull/25526)) by @etiennejouan
- Fix app CI fixtures and registry upload limit ([#25531](https://github.com/twentyhq/twenty/pull/25531)) by @Bonapara
- chore: bump version to 2.40.0 ([#25534](https://github.com/twentyhq/twenty/pull/25534)) by @twenty-pr
- Stop pruning published translations when a project has no locales folder ([#25535](https://github.com/twentyhq/twenty/pull/25535)) by @Weiko
- Fix sidebar Link items in folders redirecting to a doubled URL ([#25536](https://github.com/twentyhq/twenty/pull/25536)) by @bosiraphael
- fix(front): accept null Actor context.provider (#25532) ([#25537](https://github.com/twentyhq/twenty/pull/25537)) by @grootbro
- bump call recorder app version to 1.13.0 ([#25538](https://github.com/twentyhq/twenty/pull/25538)) by @ehconitin
- Scaffold a locales folder with an empty source catalog ([#25539](https://github.com/twentyhq/twenty/pull/25539)) by @Weiko
- Add Fathom recording import data model ([#25540](https://github.com/twentyhq/twenty/pull/25540)) by @ehconitin
- Polish AI chat mode design and actions ([#25542](https://github.com/twentyhq/twenty/pull/25542)) by @Bonapara
- Clear a Recording Bot On the call recorder cannot honor ([#25543](https://github.com/twentyhq/twenty/pull/25543)) by @ehconitin
- feat(usage-limit): count quota admits on failure and the credits they let through ([#25546](https://github.com/twentyhq/twenty/pull/25546)) by @etiennejouan
- Offer a DMARC record only when the sending domain has none ([#25547](https://github.com/twentyhq/twenty/pull/25547)) by @neo773
- Run twenty-ui unit tests on vitest and add a component conformance helper ([#25548](https://github.com/twentyhq/twenty/pull/25548)) by @bosiraphael
- fix(front): report the records an interrupted incremental delete already removed ([#25549](https://github.com/twentyhq/twenty/pull/25549)) by @thomtrp
- Add a color scheme toolbar to twenty-ui Storybook with dark catalog stories for Field and Text ([#25550](https://github.com/twentyhq/twenty/pull/25550)) by @bosiraphael
- fix(workflow): stop mirroring soft-deleted workflows into core ([#25553](https://github.com/twentyhq/twenty/pull/25553)) by @thomtrp
- Reuse shared status tags and truncate banner messages ([#25554](https://github.com/twentyhq/twenty/pull/25554)) by @Bonapara
- fix(front): persist percentage values that still include a percent sign (#17677) ([#25555](https://github.com/twentyhq/twenty/pull/25555)) by @claxman
- i18n - translations ([#25556](https://github.com/twentyhq/twenty/pull/25556)) by @github-actions
- i18n - translations ([#25557](https://github.com/twentyhq/twenty/pull/25557)) by @github-actions
- i18n - translations ([#25558](https://github.com/twentyhq/twenty/pull/25558)) by @github-actions
- Stream nx task output so a killed task still prints its stack ([#25560](https://github.com/twentyhq/twenty/pull/25560)) by @neo773
- Let marketers schedule a campaign for a later send ([#25563](https://github.com/twentyhq/twenty/pull/25563)) by @neo773
- Stop group email deletion from scanning a cartesian product ([#25565](https://github.com/twentyhq/twenty/pull/25565)) by @neo773
- Export an application's published translations in the manifest ([#25566](https://github.com/twentyhq/twenty/pull/25566)) by @Weiko
- [Apps 2-way sync] Pull write translations ([#25567](https://github.com/twentyhq/twenty/pull/25567)) by @Weiko
- Skip empty built files on upload and report a rejected batch once ([#25568](https://github.com/twentyhq/twenty/pull/25568)) by @Weiko
- Remove an unused import from defineObject ([#25569](https://github.com/twentyhq/twenty/pull/25569)) by @Weiko
- Granola 1/8: Add the Granola application scaffold ([#25570](https://github.com/twentyhq/twenty/pull/25570)) by @ehconitin
- Granola 2/8: Add Granola API access and credential settings ([#25571](https://github.com/twentyhq/twenty/pull/25571)) by @ehconitin
- Granola 3/8: Map Granola notes into Call Recordings ([#25572](https://github.com/twentyhq/twenty/pull/25572)) by @ehconitin
- Granola 4/8: Connect Granola webhooks and live synchronization ([#25573](https://github.com/twentyhq/twenty/pull/25573)) by @ehconitin
- Granola 5/8: Import Granola history and recover missed updates ([#25574](https://github.com/twentyhq/twenty/pull/25574)) by @ehconitin
- Granola 6/8: Expose Granola notes to workflows and AI ([#25575](https://github.com/twentyhq/twenty/pull/25575)) by @ehconitin
- fix(server): stop upgrade-pending columns from breaking repository updates ([#25583](https://github.com/twentyhq/twenty/pull/25583)) by @FelixMalfait
- Add Input, InputGroup and Textarea to twenty-ui ([#25584](https://github.com/twentyhq/twenty/pull/25584)) by @bosiraphael
- feat(slack): point the channel welcome at the DM as the private path ([#25585](https://github.com/twentyhq/twenty/pull/25585)) by @abdulrahmancodes
- Resolve the side panel context store object from the panel location ([#25586](https://github.com/twentyhq/twenty/pull/25586)) by @bosiraphael
- Bump app version ([#25587](https://github.com/twentyhq/twenty/pull/25587)) by @martmull
- Stop reporting handled webhook subscription failures to Sentry ([#25591](https://github.com/twentyhq/twenty/pull/25591)) by @neo773
- feat: add audio playback fallback for call recordings ([#25592](https://github.com/twentyhq/twenty/pull/25592)) by @ehconitin
- Snapshot the exported manifest and guard the compared properties in the export spec ([#25593](https://github.com/twentyhq/twenty/pull/25593)) by @Weiko
- Fix empty relation card vertical padding ([#25595](https://github.com/twentyhq/twenty/pull/25595)) by @Bonapara
- Add ListItem to twenty-ui ([#25596](https://github.com/twentyhq/twenty/pull/25596)) by @bosiraphael
- Keep the workspace navigation section visible when it has no items ([#25597](https://github.com/twentyhq/twenty/pull/25597)) by @Weiko
- Always create app connections at workspace level ([#25598](https://github.com/twentyhq/twenty/pull/25598)) by @FelixMalfait
- Stop fanning workflowRun.updated events out to webhooks ([#25599](https://github.com/twentyhq/twenty/pull/25599)) by @thomtrp
- Export views and their children from an installed application ([#25600](https://github.com/twentyhq/twenty/pull/25600)) by @Weiko
- Restore workflowRun.updated webhooks for explicit subscriptions ([#25601](https://github.com/twentyhq/twenty/pull/25601)) by @thomtrp
- docs: add inbound email channel forwarding guides ([#25602](https://github.com/twentyhq/twenty/pull/25602)) by @neo773
- fix(billing): stop granted credits expiring when a period transition misfires ([#25603](https://github.com/twentyhq/twenty/pull/25603)) by @FelixMalfait
- Write pulled views and standalone view fields as define files ([#25606](https://github.com/twentyhq/twenty/pull/25606)) by @Weiko
- Add Popover to twenty-ui ([#25607](https://github.com/twentyhq/twenty/pull/25607)) by @bosiraphael
- fix(server): build the install-time SDK layer from the migration's own flat maps ([#25608](https://github.com/twentyhq/twenty/pull/25608)) by @prastoin
- Update website changelog through 2.38.1 ([#25609](https://github.com/twentyhq/twenty/pull/25609)) by @Bonapara
- Add Menu to twenty-ui ([#25610](https://github.com/twentyhq/twenty/pull/25610)) by @bosiraphael
- Add Tabs compound to twenty-ui ([#25612](https://github.com/twentyhq/twenty/pull/25612)) by @bosiraphael
- Open onboarding AI chat beside the workspace homepage ([#25614](https://github.com/twentyhq/twenty/pull/25614)) by @Bonapara
- chore(twenty-ui): update Base UI to 1.8.0 ([#25615](https://github.com/twentyhq/twenty/pull/25615)) by @bosiraphael
- i18n - website translations ([#25619](https://github.com/twentyhq/twenty/pull/25619)) by @github-actions
- Move part class-name merging into shared utilities ([#25621](https://github.com/twentyhq/twenty/pull/25621)) by @bosiraphael
- fix(ai-chat): answer a refused message with what actually clears it ([#25622](https://github.com/twentyhq/twenty/pull/25622)) by @etiennejouan
- Move twenty-ui component behavior tests into stories ([#25623](https://github.com/twentyhq/twenty/pull/25623)) by @bosiraphael
- Export page layouts, tabs and widgets from an installed application ([#25624](https://github.com/twentyhq/twenty/pull/25624)) by @Weiko
- Add Select compound to twenty-ui ([#25625](https://github.com/twentyhq/twenty/pull/25625)) by @bosiraphael
- feat(workflow): create and delete workflows through the core API ([#25626](https://github.com/twentyhq/twenty/pull/25626)) by @thomtrp
- i18n - website translations ([#25627](https://github.com/twentyhq/twenty/pull/25627)) by @github-actions
- Fix Menu imports after class-name helper rename ([#25634](https://github.com/twentyhq/twenty/pull/25634)) by @bosiraphael
- Make the billing catalog ready for plan and price evolution ([#25635](https://github.com/twentyhq/twenty/pull/25635)) by @FelixMalfait
- Add isAuditLogged on field metadata to keep noisy fields off the timeline ([#25641](https://github.com/twentyhq/twenty/pull/25641)) by @FelixMalfait
- Allow automation and AI agents in the terms of service ([#25642](https://github.com/twentyhq/twenty/pull/25642)) by @FelixMalfait
- Revert "Revert "Record sharing 5/14: evaluate record shares in memory for events"" ([#25650](https://github.com/twentyhq/twenty/pull/25650)) by @martmull
- Add a standalone page layout widget slot to the manifest and export widgets placed on existing tabs ([#25651](https://github.com/twentyhq/twenty/pull/25651)) by @Weiko
- Write pulled page layouts and standalone page layout tabs as define files ([#25655](https://github.com/twentyhq/twenty/pull/25655)) by @Weiko
- Debounce calendar webhook syncs instead of throwing when one is running ([#25656](https://github.com/twentyhq/twenty/pull/25656)) by @neo773
- Stop servicing webhook subscriptions for suspended workspaces ([#25657](https://github.com/twentyhq/twenty/pull/25657)) by @neo773
- fix(mcp): list connected accounts from the core schema ([#25658](https://github.com/twentyhq/twenty/pull/25658)) by @Hermi941
- fix(server): bound TimelineActivityRoutingPlanService workspace cache ([#25659](https://github.com/twentyhq/twenty/pull/25659)) by @etiennejouan
- Serialize a workspace's entitlement transition ([#25660](https://github.com/twentyhq/twenty/pull/25660)) by @FelixMalfait
- Extract frontend snack bar into twenty-ui Toast ([#25663](https://github.com/twentyhq/twenty/pull/25663)) by @bosiraphael
- Add AlertDialog compound to twenty-ui ([#25665](https://github.com/twentyhq/twenty/pull/25665)) by @bosiraphael
- Fix dropdown anchoring at non-default interface scales ([#25667](https://github.com/twentyhq/twenty/pull/25667)) by @Bonapara
- Let a relation field's bookkeeping properties be updated through a sync ([#25668](https://github.com/twentyhq/twenty/pull/25668)) by @Weiko
- feat(workflow): read the workflow show page through the core API ([#25669](https://github.com/twentyhq/twenty/pull/25669)) by @thomtrp
- Run direct consumer CI on twenty-ui changes and record known radio failures ([#25670](https://github.com/twentyhq/twenty/pull/25670)) by @bosiraphael
- fix(uploads): cap file size for files-field and application file upload mutations ([#25671](https://github.com/twentyhq/twenty/pull/25671)) by @addyCooks
- refactor(server): warm up prebuilt logic functions after the install migration commits ([#25672](https://github.com/twentyhq/twenty/pull/25672)) by @prastoin
- feat(usage-limit): cap webhook calls per workspace at enqueue time ([#25673](https://github.com/twentyhq/twenty/pull/25673)) by @etiennejouan
- fix(front): reset confirmation modal input when reopened ([#25674](https://github.com/twentyhq/twenty/pull/25674)) by @mydd7
- Add benchmarks, data residency and zero data retention to the AI model catalog ([#25675](https://github.com/twentyhq/twenty/pull/25675)) by @FelixMalfait
- feat(slack): show the thinking status before the assistant context lookups ([#25676](https://github.com/twentyhq/twenty/pull/25676)) by @abdulrahmancodes
- Migrate twenty-ui Toggle to Switch ([#25678](https://github.com/twentyhq/twenty/pull/25678)) by @bosiraphael
- feat(workflow): add coreWorkflowId to core workflow versions ([#25679](https://github.com/twentyhq/twenty/pull/25679)) by @thomtrp
- Skip workflow status update when the workflow no longer exists ([#25680](https://github.com/twentyhq/twenty/pull/25680)) by @thomtrp
- Fix column resize dragging the widget in layout edit mode ([#25681](https://github.com/twentyhq/twenty/pull/25681)) by @bosiraphael
- Create the inputs-validation fixture fields in one migration instead of twenty-two ([#25684](https://github.com/twentyhq/twenty/pull/25684)) by @Weiko
- Let app-driven agents reach dashboard and workflow tools ([#25685](https://github.com/twentyhq/twenty/pull/25685)) by @abdulrahmancodes
- Export an application's navigation menu items ([#25687](https://github.com/twentyhq/twenty/pull/25687)) by @Weiko
- chore: sync AI model catalog ([#25689](https://github.com/twentyhq/twenty/pull/25689)) by @github-actions
- Fix two matcher defects the first populated benchmark sync exposed ([#25690](https://github.com/twentyhq/twenty/pull/25690)) by @FelixMalfait
- chore: sync AI model catalog ([#25691](https://github.com/twentyhq/twenty/pull/25691)) by @github-actions
- fix(slack): keep assistant feedback buttons on long answers ([#25693](https://github.com/twentyhq/twenty/pull/25693)) by @abdulrahmancodes
- Resolve Slack mention tokens before the assistant prompt is built ([#25694](https://github.com/twentyhq/twenty/pull/25694)) by @abdulrahmancodes
- Acknowledge Slack file attachments in the assistant ([#25695](https://github.com/twentyhq/twenty/pull/25695)) by @abdulrahmancodes
- Deliver the Claude reasoning config and make effort a first-class model parameter ([#25696](https://github.com/twentyhq/twenty/pull/25696)) by @FelixMalfait
- fix(admin-panel): stop calling a metered line item's quantity "seats" ([#25698](https://github.com/twentyhq/twenty/pull/25698)) by @FelixMalfait
- fix(billing): stop writing a raw ISO timestamp into a credit grant's reason ([#25699](https://github.com/twentyhq/twenty/pull/25699)) by @FelixMalfait
- feat(slack): defer rate limited message delivery to a delayed job ([#25700](https://github.com/twentyhq/twenty/pull/25700)) by @abdulrahmancodes
- feat(server): run server route dispatch jobs ahead of the trigger fan-out ([#25701](https://github.com/twentyhq/twenty/pull/25701)) by @abdulrahmancodes
- feat(slack): answer the assistant request in the execution that records it ([#25702](https://github.com/twentyhq/twenty/pull/25702)) by @abdulrahmancodes
- Upgrade the AI SDK to v7 ([#25704](https://github.com/twentyhq/twenty/pull/25704)) by @FelixMalfait
- Write pulled navigation menu items as define files ([#25705](https://github.com/twentyhq/twenty/pull/25705)) by @Weiko
- Show workspace-shared app connections to every member ([#25708](https://github.com/twentyhq/twenty/pull/25708)) by @abdulrahmancodes
- fix(workflow): stop email steps sending from another member's account ([#25709](https://github.com/twentyhq/twenty/pull/25709)) by @hktitof
- chore: sync AI model catalog ([#25710](https://github.com/twentyhq/twenty/pull/25710)) by @github-actions
- Clear logoFileId when the workspace logo is removed ([#25711](https://github.com/twentyhq/twenty/pull/25711)) by @martmull
- Migrate twenty-ui Checkbox to the shared form-control API ([#25712](https://github.com/twentyhq/twenty/pull/25712)) by @bosiraphael
- Refresh self-hosted Google default to Gemini 3.8 Flash ([#25713](https://github.com/twentyhq/twenty/pull/25713)) by @twenty-pr-author
- Increase logic function concurrency ([#25714](https://github.com/twentyhq/twenty/pull/25714)) by @martmull
- Migrate twenty-ui Radio and RadioGroup ([#25715](https://github.com/twentyhq/twenty/pull/25715)) by @bosiraphael
- Migrate twenty-ui Slider to Base UI ([#25716](https://github.com/twentyhq/twenty/pull/25716)) by @bosiraphael
- Register the GraphQL resolver name map cache provider in the worker ([#25717](https://github.com/twentyhq/twenty/pull/25717)) by @prastoin
- Backfill twenty-ui front component renderer stories ([#25719](https://github.com/twentyhq/twenty/pull/25719)) by @bosiraphael
- Fix AWS region validation across partitions ([#25720](https://github.com/twentyhq/twenty/pull/25720)) by @NiklasDah
- feat(ai): replace model pickers with a five-tier model slider ([#25721](https://github.com/twentyhq/twenty/pull/25721)) by @FelixMalfait
- fix(apps): preserve vetted status during catalog sync ([#25725](https://github.com/twentyhq/twenty/pull/25725)) by @ehconitin
- Add batch delivery to database-event-triggered logic functions ([#25726](https://github.com/twentyhq/twenty/pull/25726)) by @martmull
- Import CalDAV events from servers that omit getetag ([#25728](https://github.com/twentyhq/twenty/pull/25728)) by @neo773
- Accept CalDAV calendars that do not publish a component set ([#25729](https://github.com/twentyhq/twenty/pull/25729)) by @neo773
- Score effort variants from the benchmark rows taken at their own effort ([#25730](https://github.com/twentyhq/twenty/pull/25730)) by @FelixMalfait
- chore: sync AI model catalog ([#25731](https://github.com/twentyhq/twenty/pull/25731)) by @github-actions
- Compare a record relation to the current member's relation in row-level permissions ([#25732](https://github.com/twentyhq/twenty/pull/25732)) by @Weiko
- refactor(server): extract a single LRU eviction primitive ([#25733](https://github.com/twentyhq/twenty/pull/25733)) by @etiennejouan
- fix: republish twenty-ui as MIT (1.0.0-alpha.2) to resolve stale AGPL artifacts ([#25738](https://github.com/twentyhq/twenty/pull/25738)) by @MauryaQbit
- Stop pull overwriting a source file that defines no entity ([#25739](https://github.com/twentyhq/twenty/pull/25739)) by @Weiko
- Write pulled standalone page layout widgets as define files ([#25743](https://github.com/twentyhq/twenty/pull/25743)) by @Weiko
- chore: sync AI model catalog ([#25745](https://github.com/twentyhq/twenty/pull/25745)) by @github-actions
- Stop calling a local file unknown to the workspace when the export reported it ([#25746](https://github.com/twentyhq/twenty/pull/25746)) by @Weiko
- Tell pull users their project cannot build what pull just wrote ([#25747](https://github.com/twentyhq/twenty/pull/25747)) by @Weiko
- Keep a stored file's identifier when its content is uploaded again ([#25748](https://github.com/twentyhq/twenty/pull/25748)) by @Weiko
- Refuse to pull an application into a project that already defines another ([#25750](https://github.com/twentyhq/twenty/pull/25750)) by @Weiko
- fix(messaging): don't delete messages still present in another folder's delta sync ([#25751](https://github.com/twentyhq/twenty/pull/25751)) by @breken-ai
- Never infer deletion for rows a manifest cannot express ([#25752](https://github.com/twentyhq/twenty/pull/25752)) by @Weiko
- fix(ai): keep catalog efforts under an AI_PROVIDERS override and fix tier UI findings ([#25753](https://github.com/twentyhq/twenty/pull/25753)) by @FelixMalfait
- Block private-network SSO issuers and replace the safe-mode toggle with an internal host allowlist ([#25756](https://github.com/twentyhq/twenty/pull/25756)) by @FelixMalfait
- Align twenty-ui with SDK package versions ([#25758](https://github.com/twentyhq/twenty/pull/25758)) by @bosiraphael
- Restrict AI and Settings access during layout editing ([#25760](https://github.com/twentyhq/twenty/pull/25760)) by @Bonapara
- refactor: share floating reference scale calculation ([#25762](https://github.com/twentyhq/twenty/pull/25762)) by @Bonapara
- refactor(ai): seed the agent and skill settings forms from the loaded record ([#25764](https://github.com/twentyhq/twenty/pull/25764)) by @FelixMalfait
- Let the e2e local registry accept twenty-ui ([#25765](https://github.com/twentyhq/twenty/pull/25765)) by @Weiko
- Fill the empty Type column in Skills settings with the owning app ([#25766](https://github.com/twentyhq/twenty/pull/25766)) by @FelixMalfait
- Read the deprecated flag from the model config when picking a tier default ([#25769](https://github.com/twentyhq/twenty/pull/25769)) by @Weiko
- Keep only compliance badges on the import-contacts onboarding step ([#25774](https://github.com/twentyhq/twenty/pull/25774)) by @FelixMalfait
- chore: sync AI model catalog ([#25775](https://github.com/twentyhq/twenty/pull/25775)) by @github-actions
- Propagate SMTP send failures so the email job actually retries ([#25776](https://github.com/twentyhq/twenty/pull/25776)) by @neo773
- feat(ai-chat): hint @ and / in composer placeholder, add / skill suggestions ([#25778](https://github.com/twentyhq/twenty/pull/25778)) by @FelixMalfait
- fix(storybook): prevent oversized Argos screenshots ([#25779](https://github.com/twentyhq/twenty/pull/25779)) by @bosiraphael
- fix iCal parsing: bare CR (0x0D) line breaks instead of the CRLF that… ([#25782](https://github.com/twentyhq/twenty/pull/25782)) by @mcr-ksh
- Migrate Status to the new twenty-ui API ([#25785](https://github.com/twentyhq/twenty/pull/25785)) by @bosiraphael
- Migrate Tag to the new twenty-ui API ([#25786](https://github.com/twentyhq/twenty/pull/25786)) by @bosiraphael
- Fix CLAUDE.md guard import sources ([#25789](https://github.com/twentyhq/twenty/pull/25789)) by @prastoin
- fix(front): create component instance ids once instead of rewriting them per surface ([#25790](https://github.com/twentyhq/twenty/pull/25790)) by @FelixMalfait
- Complete call recordings whose Recall transcript is empty ([#25793](https://github.com/twentyhq/twenty/pull/25793)) by @ehconitin
- Finish call recordings without a transcript when Recall rejects the transcript request ([#25794](https://github.com/twentyhq/twenty/pull/25794)) by @ehconitin
- fix(front): hide connection provider avatar when there is no logo ([#25797](https://github.com/twentyhq/twenty/pull/25797)) by @martmull
- feat(skills): split agent-only skills from user skills, rewrite the catalog ([#25798](https://github.com/twentyhq/twenty/pull/25798)) by @FelixMalfait
- fix(front): open the view picker on the id its dropdown listens to ([#25799](https://github.com/twentyhq/twenty/pull/25799)) by @FelixMalfait
- Stop re-checking already-warned workspaces every hour in CleanSuspendedWorkspacesJob ([#25800](https://github.com/twentyhq/twenty/pull/25800)) by @etiennejouan
- Give each Sentry cron monitor its own max runtime ([#25801](https://github.com/twentyhq/twenty/pull/25801)) by @etiennejouan
- Point pull users at the apply flag that protects what it could not write ([#25808](https://github.com/twentyhq/twenty/pull/25808)) by @Weiko
- List every kind pull does not export yet ([#25811](https://github.com/twentyhq/twenty/pull/25811)) by @Weiko

</details>

**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.39.0...twenty/v2.40.0

Related Repositories