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