twenty/v2.39.0
BasedHardware/omitwenty/v2.39.0Sep 9, 2026by twenty-pr[bot]
Upgrading?
AI Summary
This release updates the UI theme generation system and adds granular controls for call recording, workflow error handling, and usage limits.
Key Highlights
- Breaking change: Generate twenty-ui theme artifacts from design-tokens
- New features: Custom call recorder settings tab and per-object record forms
- Workflow retry logic honors `retryOnFailure`
Breaking Changes
- Generate the twenty-ui theme artifacts from a single design-tokens source
New Features
- Custom settings tab with grouped sections for call recorder
- Provision a RECORD_FORM page layout per object
- Honor `retryOnFailure` in workflow executor
- Gate intra-workspace limits behind Organization entitlement
- Render Slack task links as typed task entities
- Node settings page for step error handling
Full Release Notes
<!-- generated-release-notes v1 --> ## ⚠️ Breaking changes - Generate the twenty-ui theme artifacts from a single design-tokens source ([#24375](https://github.com/twentyhq/twenty/pull/24375)) by @bosiraphael ## ✨ New features - feat(call-recorder): custom settings tab with grouped sections ([#24913](https://github.com/twentyhq/twenty/pull/24913)) by @ehconitin - feat(record-form): provision a RECORD_FORM page layout per object ([#24999](https://github.com/twentyhq/twenty/pull/24999)) by @thomtrp - feat(workflow): honor retryOnFailure in the executor ([#25248](https://github.com/twentyhq/twenty/pull/25248)) by @thomtrp - feat(usage-limit): gate intra-workspace limits behind the Organization entitlement ([#25292](https://github.com/twentyhq/twenty/pull/25292)) by @etiennejouan - feat(slack): render task links as Slack's typed task entity ([#25303](https://github.com/twentyhq/twenty/pull/25303)) by @abdulrahmancodes - feat(slack): log Slack event retry deliveries ([#25304](https://github.com/twentyhq/twenty/pull/25304)) by @abdulrahmancodes - feat(workflow): Node settings page for step error handling ([#25314](https://github.com/twentyhq/twenty/pull/25314)) by @thomtrp - feat(workflow): idempotency hint under the retry setting ([#25334](https://github.com/twentyhq/twenty/pull/25334)) by @thomtrp - feat(call-recorder): mark the Recording Bot preference On only when a bot is scheduled ([#25412](https://github.com/twentyhq/twenty/pull/25412)) by @ehconitin - feat(apps): support logo asset on ConnectionProviderManifest ([#25419](https://github.com/twentyhq/twenty/pull/25419)) by @martmull ## 💅 Improvements & UX - Mark the Slack app as vetted and release it as 1.0.0 ([#25214](https://github.com/twentyhq/twenty/pull/25214)) by @abdulrahmancodes - Add Fathom discovery and backfill ([#25251](https://github.com/twentyhq/twenty/pull/25251)) by @ehconitin - List views ready for prod ([#25257](https://github.com/twentyhq/twenty/pull/25257)) by @Bonapara - Add fidelity manifest fields for objects, fields and permission flags ([#25265](https://github.com/twentyhq/twenty/pull/25265)) by @Weiko - Stop dropping the call recording transcript during media upload ([#25274](https://github.com/twentyhq/twenty/pull/25274)) by @ehconitin - feat(usage-limit) - reshape the limit model for quota kinds ([#25277](https://github.com/twentyhq/twenty/pull/25277)) by @etiennejouan - feat(usage-limit) - quota engine ([#25278](https://github.com/twentyhq/twenty/pull/25278)) by @etiennejouan - feat(usage) - credit allowance as a quota counter and enforcement wiring ([#25279](https://github.com/twentyhq/twenty/pull/25279)) by @etiennejouan - Tidy the campaign composer, add cancel, and confirm before sending ([#25293](https://github.com/twentyhq/twenty/pull/25293)) by @neo773 - Send campaigns in batches on a paced queue ([#25294](https://github.com/twentyhq/twenty/pull/25294)) by @neo773 - fix(ai-chat) - fix AI chat drop zone flickering while dragging over its own content ([#25307](https://github.com/twentyhq/twenty/pull/25307)) by @etiennejouan - Add the exportApplication query for the data model of a local application ([#25311](https://github.com/twentyhq/twenty/pull/25311)) by @Weiko - add fathom app gallery illustrations ([#25327](https://github.com/twentyhq/twenty/pull/25327)) by @ehconitin - bump call recorder app version to 1.12.0 ([#25329](https://github.com/twentyhq/twenty/pull/25329)) by @ehconitin - Publish queue job events over SSE ([#25333](https://github.com/twentyhq/twenty/pull/25333)) by @martmull - Keep undeclared application references on additive apply ([#25335](https://github.com/twentyhq/twenty/pull/25335)) by @Weiko - Animate navigation mode label transitions ([#25345](https://github.com/twentyhq/twenty/pull/25345)) by @Bonapara - Fix phone input editor sizing ([#25406](https://github.com/twentyhq/twenty/pull/25406)) by @Bonapara - Shorten the Link content field description ([#25409](https://github.com/twentyhq/twenty/pull/25409)) by @neo773 - Add `yarn twenty pull` to write an installed application back to source ([#25410](https://github.com/twentyhq/twenty/pull/25410)) by @Weiko - Capture the provider response when an account is revoked ([#25413](https://github.com/twentyhq/twenty/pull/25413)) by @neo773 - Record sharing 1/14: add the readability level on object metadata ([#25421](https://github.com/twentyhq/twenty/pull/25421)) by @martmull - Deliver SSE events once instead of twice ([#25423](https://github.com/twentyhq/twenty/pull/25423)) by @martmull - Add in-product Update Payment Method modal and retry unpaid invoices after SetupIntent ([#25430](https://github.com/twentyhq/twenty/pull/25430)) by @FelixMalfait - Make the navigation tabs reachable when collapsed and on mobile ([#25458](https://github.com/twentyhq/twenty/pull/25458)) by @FelixMalfait - Chunk calendar participant updates back under the 200 row limit ([#25465](https://github.com/twentyhq/twenty/pull/25465)) by @neo773 - Declare the messageListMember INDEX view and backfill both message list junction targets ([#25468](https://github.com/twentyhq/twenty/pull/25468)) by @FelixMalfait - Add a description to message lists and embed the members table on the list record page ([#25469](https://github.com/twentyhq/twenty/pull/25469)) by @FelixMalfait - Writability 1/3: expose writability on the object and field metadata DTOs ([#25470](https://github.com/twentyhq/twenty/pull/25470)) by @FelixMalfait - Writability 2/3: declare SYSTEM writability on platform-owned standard objects ([#25471](https://github.com/twentyhq/twenty/pull/25471)) by @FelixMalfait - Writability 3/3: derive record read-only state from writability instead of the system-object flag ([#25472](https://github.com/twentyhq/twenty/pull/25472)) by @FelixMalfait - Add a pinned Duplicate List action copying a message list and its members ([#25473](https://github.com/twentyhq/twenty/pull/25473)) by @FelixMalfait - Make relation table widgets follow junction relations ([#25475](https://github.com/twentyhq/twenty/pull/25475)) by @FelixMalfait - Fix Slack app doc inaccuracies found in review ([#25481](https://github.com/twentyhq/twenty/pull/25481)) by @abdulrahmancodes - Sync relation targets with their cached lists on attach and detach ([#25500](https://github.com/twentyhq/twenty/pull/25500)) by @FelixMalfait - Fix the duplicated list page and toast after Duplicate List ([#25504](https://github.com/twentyhq/twenty/pull/25504)) by @FelixMalfait - [codex] Ignore stale authentication errors after session changes ([#25510](https://github.com/twentyhq/twenty/pull/25510)) by @FelixMalfait - Make Slack app logic function executions free and simplify its README ([#25523](https://github.com/twentyhq/twenty/pull/25523)) by @abdulrahmancodes - Skip delayed workflow resume when the run no longer exists ([#25528](https://github.com/twentyhq/twenty/pull/25528)) by @thomtrp - Fix attachments missing from Outlook drafts created by the Draft Email action ([#25529](https://github.com/twentyhq/twenty/pull/25529)) by @neo773 ## 🐛 Bug fixes - Fix: Calendar drop issue & drop target resolution at list extremes ([#24082](https://github.com/twentyhq/twenty/pull/24082)) by @git-init-priyanshu - fix(workflow): blank step-editor tabs in the side panel ([#25318](https://github.com/twentyhq/twenty/pull/25318)) by @thomtrp - fix: keep completeFileUpload below the gateway timeout ([#25320](https://github.com/twentyhq/twenty/pull/25320)) by @martmull - fix: cap the SVG size that file upload completion will sanitize ([#25340](https://github.com/twentyhq/twenty/pull/25340)) by @FelixMalfait - fix: quarantine direct uploads until completion has validated them ([#25342](https://github.com/twentyhq/twenty/pull/25342)) by @FelixMalfait - fix(workflow): stop corrupting run state when a loop resets a deleted step ([#25352](https://github.com/twentyhq/twenty/pull/25352)) by @thomtrp - fix(server): ship ClickHouse migrations in the server build ([#25357](https://github.com/twentyhq/twenty/pull/25357)) by @etiennejouan ## 🔧 Developer & API - Create webhook subscriptions on the OAuth connect path ([#25211](https://github.com/twentyhq/twenty/pull/25211)) by @neo773 - Remove legacy graphql-upload mutations superseded by direct upload ([#25348](https://github.com/twentyhq/twenty/pull/25348)) by @martmull <details> <summary>🏗️ Internal changes (4)</summary> - chore(billing): centralize dollars to micro-credits conversion ([#25326](https://github.com/twentyhq/twenty/pull/25326)) by @etiennejouan - chore(workflow): remove graduated workflow-core feature flags ([#25338](https://github.com/twentyhq/twenty/pull/25338)) by @thomtrp - refactor: make each file folder state its MIME policy explicitly ([#25341](https://github.com/twentyhq/twenty/pull/25341)) by @FelixMalfait - chore(server): revert worker memory diagnostics logging ([#25355](https://github.com/twentyhq/twenty/pull/25355)) by @etiennejouan </details> <details> <summary>Full changelog (87 PRs)</summary> - Fix: Calendar drop issue & drop target resolution at list extremes ([#24082](https://github.com/twentyhq/twenty/pull/24082)) by @git-init-priyanshu - Generate the twenty-ui theme artifacts from a single design-tokens source ([#24375](https://github.com/twentyhq/twenty/pull/24375)) by @bosiraphael - feat(call-recorder): custom settings tab with grouped sections ([#24913](https://github.com/twentyhq/twenty/pull/24913)) by @ehconitin - feat(record-form): provision a RECORD_FORM page layout per object ([#24999](https://github.com/twentyhq/twenty/pull/24999)) by @thomtrp - Create webhook subscriptions on the OAuth connect path ([#25211](https://github.com/twentyhq/twenty/pull/25211)) by @neo773 - Mark the Slack app as vetted and release it as 1.0.0 ([#25214](https://github.com/twentyhq/twenty/pull/25214)) by @abdulrahmancodes - feat(workflow): honor retryOnFailure in the executor ([#25248](https://github.com/twentyhq/twenty/pull/25248)) by @thomtrp - Add Fathom discovery and backfill ([#25251](https://github.com/twentyhq/twenty/pull/25251)) by @ehconitin - List views ready for prod ([#25257](https://github.com/twentyhq/twenty/pull/25257)) by @Bonapara - Add fidelity manifest fields for objects, fields and permission flags ([#25265](https://github.com/twentyhq/twenty/pull/25265)) by @Weiko - Stop dropping the call recording transcript during media upload ([#25274](https://github.com/twentyhq/twenty/pull/25274)) by @ehconitin - feat(usage-limit) - reshape the limit model for quota kinds ([#25277](https://github.com/twentyhq/twenty/pull/25277)) by @etiennejouan - feat(usage-limit) - quota engine ([#25278](https://github.com/twentyhq/twenty/pull/25278)) by @etiennejouan - feat(usage) - credit allowance as a quota counter and enforcement wiring ([#25279](https://github.com/twentyhq/twenty/pull/25279)) by @etiennejouan - feat(usage-limit): gate intra-workspace limits behind the Organization entitlement ([#25292](https://github.com/twentyhq/twenty/pull/25292)) by @etiennejouan - Tidy the campaign composer, add cancel, and confirm before sending ([#25293](https://github.com/twentyhq/twenty/pull/25293)) by @neo773 - Send campaigns in batches on a paced queue ([#25294](https://github.com/twentyhq/twenty/pull/25294)) by @neo773 - feat(slack): render task links as Slack's typed task entity ([#25303](https://github.com/twentyhq/twenty/pull/25303)) by @abdulrahmancodes - feat(slack): log Slack event retry deliveries ([#25304](https://github.com/twentyhq/twenty/pull/25304)) by @abdulrahmancodes - fix(ai-chat) - fix AI chat drop zone flickering while dragging over its own content ([#25307](https://github.com/twentyhq/twenty/pull/25307)) by @etiennejouan - chore: bump version to 2.39.0 ([#25310](https://github.com/twentyhq/twenty/pull/25310)) by @twenty-pr - Add the exportApplication query for the data model of a local application ([#25311](https://github.com/twentyhq/twenty/pull/25311)) by @Weiko - i18n - translations ([#25312](https://github.com/twentyhq/twenty/pull/25312)) by @github-actions - feat(workflow): Node settings page for step error handling ([#25314](https://github.com/twentyhq/twenty/pull/25314)) by @thomtrp - i18n - translations ([#25316](https://github.com/twentyhq/twenty/pull/25316)) by @github-actions - fix(workflow): blank step-editor tabs in the side panel ([#25318](https://github.com/twentyhq/twenty/pull/25318)) by @thomtrp - fix: keep completeFileUpload below the gateway timeout ([#25320](https://github.com/twentyhq/twenty/pull/25320)) by @martmull - i18n - translations ([#25321](https://github.com/twentyhq/twenty/pull/25321)) by @github-actions - chore(billing): centralize dollars to micro-credits conversion ([#25326](https://github.com/twentyhq/twenty/pull/25326)) by @etiennejouan - add fathom app gallery illustrations ([#25327](https://github.com/twentyhq/twenty/pull/25327)) by @ehconitin - i18n - translations ([#25328](https://github.com/twentyhq/twenty/pull/25328)) by @github-actions - bump call recorder app version to 1.12.0 ([#25329](https://github.com/twentyhq/twenty/pull/25329)) by @ehconitin - i18n - translations ([#25331](https://github.com/twentyhq/twenty/pull/25331)) by @github-actions - Publish queue job events over SSE ([#25333](https://github.com/twentyhq/twenty/pull/25333)) by @martmull - feat(workflow): idempotency hint under the retry setting ([#25334](https://github.com/twentyhq/twenty/pull/25334)) by @thomtrp - Keep undeclared application references on additive apply ([#25335](https://github.com/twentyhq/twenty/pull/25335)) by @Weiko - i18n - translations ([#25336](https://github.com/twentyhq/twenty/pull/25336)) by @github-actions - chore(workflow): remove graduated workflow-core feature flags ([#25338](https://github.com/twentyhq/twenty/pull/25338)) by @thomtrp - i18n - translations ([#25339](https://github.com/twentyhq/twenty/pull/25339)) by @github-actions - fix: cap the SVG size that file upload completion will sanitize ([#25340](https://github.com/twentyhq/twenty/pull/25340)) by @FelixMalfait - refactor: make each file folder state its MIME policy explicitly ([#25341](https://github.com/twentyhq/twenty/pull/25341)) by @FelixMalfait - fix: quarantine direct uploads until completion has validated them ([#25342](https://github.com/twentyhq/twenty/pull/25342)) by @FelixMalfait - Animate navigation mode label transitions ([#25345](https://github.com/twentyhq/twenty/pull/25345)) by @Bonapara - i18n - translations ([#25347](https://github.com/twentyhq/twenty/pull/25347)) by @github-actions - Remove legacy graphql-upload mutations superseded by direct upload ([#25348](https://github.com/twentyhq/twenty/pull/25348)) by @martmull - i18n - translations ([#25350](https://github.com/twentyhq/twenty/pull/25350)) by @github-actions - i18n - translations ([#25351](https://github.com/twentyhq/twenty/pull/25351)) by @github-actions - fix(workflow): stop corrupting run state when a loop resets a deleted step ([#25352](https://github.com/twentyhq/twenty/pull/25352)) by @thomtrp - i18n - translations ([#25353](https://github.com/twentyhq/twenty/pull/25353)) by @github-actions - chore(server): revert worker memory diagnostics logging ([#25355](https://github.com/twentyhq/twenty/pull/25355)) by @etiennejouan - fix(server): ship ClickHouse migrations in the server build ([#25357](https://github.com/twentyhq/twenty/pull/25357)) by @etiennejouan - Fix phone input editor sizing ([#25406](https://github.com/twentyhq/twenty/pull/25406)) by @Bonapara - Shorten the Link content field description ([#25409](https://github.com/twentyhq/twenty/pull/25409)) by @neo773 - Add `yarn twenty pull` to write an installed application back to source ([#25410](https://github.com/twentyhq/twenty/pull/25410)) by @Weiko - i18n - translations ([#25411](https://github.com/twentyhq/twenty/pull/25411)) by @github-actions - feat(call-recorder): mark the Recording Bot preference On only when a bot is scheduled ([#25412](https://github.com/twentyhq/twenty/pull/25412)) by @ehconitin - Capture the provider response when an account is revoked ([#25413](https://github.com/twentyhq/twenty/pull/25413)) by @neo773 - i18n - translations ([#25414](https://github.com/twentyhq/twenty/pull/25414)) by @github-actions - i18n - translations ([#25417](https://github.com/twentyhq/twenty/pull/25417)) by @github-actions - i18n - translations ([#25418](https://github.com/twentyhq/twenty/pull/25418)) by @github-actions - feat(apps): support logo asset on ConnectionProviderManifest ([#25419](https://github.com/twentyhq/twenty/pull/25419)) by @martmull - Record sharing 1/14: add the readability level on object metadata ([#25421](https://github.com/twentyhq/twenty/pull/25421)) by @martmull - Deliver SSE events once instead of twice ([#25423](https://github.com/twentyhq/twenty/pull/25423)) by @martmull - i18n - translations ([#25424](https://github.com/twentyhq/twenty/pull/25424)) by @github-actions - Add in-product Update Payment Method modal and retry unpaid invoices after SetupIntent ([#25430](https://github.com/twentyhq/twenty/pull/25430)) by @FelixMalfait - chore: sync AI model catalog from models.dev ([#25451](https://github.com/twentyhq/twenty/pull/25451)) by @github-actions - i18n - translations ([#25455](https://github.com/twentyhq/twenty/pull/25455)) by @github-actions - i18n - translations ([#25456](https://github.com/twentyhq/twenty/pull/25456)) by @github-actions - Make the navigation tabs reachable when collapsed and on mobile ([#25458](https://github.com/twentyhq/twenty/pull/25458)) by @FelixMalfait - i18n - translations ([#25462](https://github.com/twentyhq/twenty/pull/25462)) by @github-actions - Chunk calendar participant updates back under the 200 row limit ([#25465](https://github.com/twentyhq/twenty/pull/25465)) by @neo773 - Declare the messageListMember INDEX view and backfill both message list junction targets ([#25468](https://github.com/twentyhq/twenty/pull/25468)) by @FelixMalfait - Add a description to message lists and embed the members table on the list record page ([#25469](https://github.com/twentyhq/twenty/pull/25469)) by @FelixMalfait - Writability 1/3: expose writability on the object and field metadata DTOs ([#25470](https://github.com/twentyhq/twenty/pull/25470)) by @FelixMalfait - Writability 2/3: declare SYSTEM writability on platform-owned standard objects ([#25471](https://github.com/twentyhq/twenty/pull/25471)) by @FelixMalfait - Writability 3/3: derive record read-only state from writability instead of the system-object flag ([#25472](https://github.com/twentyhq/twenty/pull/25472)) by @FelixMalfait - Add a pinned Duplicate List action copying a message list and its members ([#25473](https://github.com/twentyhq/twenty/pull/25473)) by @FelixMalfait - Make relation table widgets follow junction relations ([#25475](https://github.com/twentyhq/twenty/pull/25475)) by @FelixMalfait - Fix Slack app doc inaccuracies found in review ([#25481](https://github.com/twentyhq/twenty/pull/25481)) by @abdulrahmancodes - Sync relation targets with their cached lists on attach and detach ([#25500](https://github.com/twentyhq/twenty/pull/25500)) by @FelixMalfait - Fix the duplicated list page and toast after Duplicate List ([#25504](https://github.com/twentyhq/twenty/pull/25504)) by @FelixMalfait - [codex] Ignore stale authentication errors after session changes ([#25510](https://github.com/twentyhq/twenty/pull/25510)) by @FelixMalfait - i18n - translations ([#25517](https://github.com/twentyhq/twenty/pull/25517)) by @github-actions - Make Slack app logic function executions free and simplify its README ([#25523](https://github.com/twentyhq/twenty/pull/25523)) by @abdulrahmancodes - i18n - translations ([#25525](https://github.com/twentyhq/twenty/pull/25525)) by @github-actions - Skip delayed workflow resume when the run no longer exists ([#25528](https://github.com/twentyhq/twenty/pull/25528)) by @thomtrp - Fix attachments missing from Outlook drafts created by the Draft Email action ([#25529](https://github.com/twentyhq/twenty/pull/25529)) by @neo773 </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.38.1...twenty/v2.39.0
Related Repositories
public-apis/public-apis★ 491,220
A collective list of free APIs
NousResearch/hermes-agent★ 256,091
The agent that grows with you
yt-dlp/yt-dlp★ 200,268
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,564
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,699
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.