⚠️ Breaking changes
- Let every application admin manage a workspace-shared connection (#25773) by @abdulrahmancodes
✨ New features
- feat(server): validate workflow versions through exceptions, malformed at write and non-activable on activate or validate (#24964) by @charlesBochet
- feat(metadata): author-keyed overrides blob (steps 1 to 3) (#25284) by @prastoin
- feat(view): seed a user-owned initial view per object alongside the INDEX view (#25416) by @thomtrp
- feat(workflow): add workspaceWorkflowId to core workflows (#25723) by @thomtrp
- feat(usage-limit): expose usage limits over the metadata API (#25740) by @etiennejouan
- feat(usage-limit): list workspace limits in a billing tab (#25741) by @etiennejouan
- feat(usage-limit): create and edit limits from settings billing (#25742) by @etiennejouan
- feat(workflow): point core workflows and command menu items at core version ids (#25757) by @thomtrp
- feat(slack): report a rejected bot token to the platform connection (#25763) by @abdulrahmancodes
- feat(ai): generate every deployment catalog from the model catalog and a spec (#25831) by @FelixMalfait
- feat(slack): access mode to restrict the assistant to linked members (#25834) by @abdulrahmancodes
- feat(workflow): read the workflow show page shell through core (#25901) by @thomtrp
- feat(workflow): discard a workflow draft through the core API (#25902) by @thomtrp
- feat(messaging): let apps own message channels (#25903) by @FelixMalfait
- feat(messaging): let apps ingest messages into their channels (#25905) by @FelixMalfait
- feat(messaging): resolve identity for non-email participants (#25906) by @FelixMalfait
- feat(workflow): remove the See Active Version command menu item from workspaces (#25938) by @thomtrp
- feat(last-contact): run database event triggers in batch mode (#26072) by @martmull
💅 Improvements & UX
- Enforce blocklist scope and surface the workspace blocklist in settings (#25007) by @neo773
- Record sharing: inherited objects follow their parent (#25439) by @martmull
- Granola 7/8: Filter Granola synchronization by folder (#25576) by @ehconitin
- [3/4] Desktop Recorder: add the Twenty desktop app (#25616) by @Bonapara
- [1/4] Desktop Recorder: support existing UI controls (#25632) by @Bonapara
- [2/4] Desktop Recorder: add the installable Twenty integration (#25633) by @Bonapara
- Replace frontend snackbars with twenty-ui toasts (#25664) by @bosiraphael
- Add
eloqnt lintto catch translation errors (#25754) by @amannn - Resolve Slack account identity through one typed service (#25772) by @abdulrahmancodes
- Fix shared connected account permissions and visibility (#25777) by @neo773
- Validate select option colors (#25805) by @bosiraphael
- Polish AI model settings (#25810) by @Bonapara
- Stop selecting non-mailbox connected accounts as the email sender (#25814) by @neo773
- Emit URL-safe pagination cursors (#25822) by @tomjtobinn
- Let runAgent messages carry file attachments (#25835) by @abdulrahmancodes
- Repair machine-translation damage in Crowdin automatically (#25842) by @FelixMalfait
- Cover every translation pipeline with the normalizer (#25848) by @FelixMalfait
- Ship three finished locales, drop the pseudo-locale, and lint the ICU apostrophe (#25850) by @FelixMalfait
- Close the silent gaps around adding a locale, and stop an email shipping its message ids (#25851) by @FelixMalfait
- Delete translations that came back as debris rather than words (#25853) by @FelixMalfait
- Lay the app out right to left for Arabic and Hebrew (#25854) by @FelixMalfait
- Mint optimistic cache cursors the way the server does (#25855) by @FelixMalfait
- Update book meetings doc for the calendar event composer (#25856) by @neo773
- Restore code identifiers the docs translated into prose (#25858) by @FelixMalfait
- Fix the English, and the catalogs and layout that made it unreadable (#25859) by @FelixMalfait
- fix (usage-limit) - stop plan-gated spender groups from opening in the billing limits form (#25871) by @etiennejouan
- Phone number fix (#25882) by @BOHEUS
- Thread replies to email group and campaign emails (#25884) by @neo773
- Migrate buttons to Base UI (#25888) by @bosiraphael
- Add live previews to Twenty UI documentation (#25889) by @bosiraphael
- [forms 1/3] Make record creation commands available across objects (#25890) by @Bonapara
- Move UI Library into the Developers menu (#25898) by @bosiraphael
- [4/4] Desktop Recorder: add desktop application coverage (#25900) by @Bonapara
- Index the messageList and messageCampaign legs on timelineActivity (#25912) by @charlesBochet
- Publish Twenty app skills as a portable Agent Skills collection (skills.sh) (#25913) by @martmull
- Record sharing: inherited records follow the records their child rows point at (#25914) by @martmull
- Remove the email group flag and gate campaigns behind their own flag (#25916) by @neo773
- fix(ai-chat) - fix AI chat turns dying on tool results that carry Date values (#25921) by @etiennejouan
- Show AI chat context and credit usage (#25923) by @Bonapara
- Record sharing: inherited records follow the parent's complete access policy, in queries and events (#25925) by @martmull
- Add readable admin feature flag names and descriptions (#25927) by @Bonapara
- Default demo accounts to the system theme (#25928) by @Bonapara
- Use primary text color for settings table identifying columns (#25939) by @Bonapara
- Add copy button on hover to Emails/Phones/Links in the record side panel (#25940) by @charlesBochet
- Clarify self-hosted pricing CTAs and Organization license keys (#25941) by @Bonapara
- Clarify model mode comparisons with an information popup (#25947) by @Bonapara
- Organize Twenty UI into primitive families (#25948) by @bosiraphael
- Read forwarded email bodies like the mailbox importers do (#25954) by @neo773
- Complete Organization naming in settings and activation (#25961) by @Bonapara
- Scope application file uploads to the registration owner (#25962) by @prastoin
- Split the admin application registration update input (#25963) by @prastoin
- Record sharing: gate events through one access policy entry point (#25964) by @martmull
- Pin catalog sync to a registration's own source package (#25965) by @prastoin
- Derive permission universal identifiers from their role and target (#25966) by @Weiko
- Redesign the marketplace app detail page (#25969) by @martmull
- [1/2 Sidebar] New layout (#25974) by @Bonapara
- Export roles, permissions and permission flags (#25975) by @Weiko
- Use Twenty UI components in presentation stories (#25976) by @bosiraphael
- Desktop Recorder: align merged integration and UI naming conventions (#25977) by @Bonapara
- Document data display primitives (#25980) by @bosiraphael
- Export row-level permission predicates and groups (#25984) by @Weiko
- Share CSV formatting and composite field labels (#25986) by @Weiko
- Write roles and permission flags on pull (#25994) by @Weiko
- Use a twenty-bounce MAIL FROM subdomain for new sending domains (#25995) by @neo773
- Show sending domain DNS records as a status list and a records table (#25996) by @neo773
- Use Twenty UI buttons in Menu and Popover stories (#26001) by @bosiraphael
- Remove unused view delete mutations from the front (#26003) by @Weiko
- Fix custom domain settings spacing (#26007) by @Bonapara
- Show shortcuts in command menu button tooltips (#26009) by @Bonapara
- Clip the toast progress overlay to the toast corners (#26012) by @neo773
- Record sharing: fail closed on unresolved row predicates, gate application events on the role, run dashboard duplication under the caller (#26021) by @martmull
- Require client authentication for OAuth token introspection (#26023) by @charlesBochet
- Consume the OAuth authorization code atomically (#26025) by @charlesBochet
- Block system and relation fields on workspace member settings update (#26026) by @charlesBochet
- Enforce UNLISTED view visibility when resolving query params (#26027) by @charlesBochet
- Expose minimum likelihood in enrichment workflows (#26040) by @bosiraphael
- Clarify twenty-ui setup in the README (#26044) by @bosiraphael
- Split Twenty UI docs into primitives and components (#26045) by @bosiraphael
- Skip participant matching jobs when no person email is involved (#26058) by @neo773
- Show contact auto-creation and sync options on shared mailboxes (#26059) by @neo773
- Honor exclude group emails on shared mailboxes (#26060) by @neo773
- Document controlled and uncontrolled UI state (#26062) by @bosiraphael
- Document Twenty UI anatomy and composition (#26066) by @bosiraphael
- Disable play functions in UI documentation examples (#26069) by @bosiraphael
- Make record sharing an enterprise feature (#26070) by @martmull
- Keep default domain deep links through sign-in and workspace selection (#26073) by @martmull
- Cache billing entitlements in the workspace cache (#26078) by @Weiko
- Embed MainButton and LightButton stories in docs (#26089) by @bosiraphael
- Add website release notes for 2.39 and 2.40 (#26092) by @Bonapara
- Add website release notes for 2.27 and 2.34 (#26094) by @Bonapara
🐛 Bug fixes
- fix(server): backfill workflow rich text record fields (2.41 upgrade command) (#24965) by @charlesBochet
- fix(shared): stop the utils barrel dragging handlebars into twenty-client-sdk (#25846) by @FelixMalfait
- fix(create-twenty-app): ship a lockfile so generated apps install under an age gate (#25879) by @FelixMalfait
- fix(front): widen the admin default-model rows (#25881) by @FelixMalfait
- fix(currency): prevent dropping decimal separator and multiplying amount on 0-decimal fields (#25870) (#25904) by @Dewin
- fix(email-tool): resolve the default sender through the caller entitlement filter (#25908) by @etiennejouan
- fix(billing): restore the credit-package match on an interval switch (#25919) by @FelixMalfait
- fix(record-form): render rich text fields with the BlockNote editor (#25920) by @thomtrp
- fix(messaging): resolve an app channel's connectedAccount for app contexts (#25942) by @FelixMalfait
- fix(upgrade): pin 2.20 messageList view command to its original columns (#26006) by @prastoin
- fix(front-component-renderer): forward React 18 camelCase attributes on remote elements (#26015) by @abdulrahmancodes
- fix(messaging): enforce CRLF line endings on raw outbound messages and surface IMAP append error responseText (#26011) (#26017) by @Dewin
- fix(workflow): stop reporting user-facing step errors to Sentry (#26041) by @charlesBochet
- fix(rest): forward flatIndexMaps to the merge query runner (#26063) by @charlesBochet
- fix(workflow): unblock the 2-41 See Active Version removal on workspaces that still have the item (#26090) by @thomtrp
🔧 Developer & API
- Migrate Avatar to the new twenty-ui API (#25787) by @bosiraphael
- Migrate Chip to the new twenty-ui API (#25788) by @bosiraphael
- Add Twenty UI documentation and generated API references (#25791) by @bosiraphael
- Prevent reactivating revoked API keys (#25918) by @Weiko
🏗️ Internal changes (10)
- refactor(ai): derive the SDK package from the packages we bundle (#25845) by @FelixMalfait
- refactor(shared): resolve workflow variables without handlebars (#25852) by @FelixMalfait
- docs: state which plan row-level permissions require (#25868) by @yosh1
- docs: move Translations under the Operations section (#25892) by @FelixMalfait
- docs(slack): point self-hosters at the Slack setup guide (#25899) by @abdulrahmancodes
- chore(security): bump curl/jq in the image and the npm packages flagged by Oneleet (#25926) by @charlesBochet
- chore(security): drop extract-zip (HIGH, past SLA, no fix) by lifting mintlify's puppeteer to 25 (#25931) by @charlesBochet
- test(messaging): cover the app-facing message channel API end to end (#25945) by @FelixMalfait
- revert(email-tool): restore the default sender resolution (#25972) by @etiennejouan
- refactor(server): bind resolved application packages to their registration (#26077) by @prastoin
🎉 New contributors
- @amannn made their first contribution in #25754
- @tomjtobinn made their first contribution in #25822
- @yosh1 made their first contribution in #25868
- @Dewin made their first contribution in #26017
Full changelog (188 PRs)
- feat(server): validate workflow versions through exceptions, malformed at write and non-activable on activate or validate (#24964) by @charlesBochet
- fix(server): backfill workflow rich text record fields (2.41 upgrade command) (#24965) by @charlesBochet
- Enforce blocklist scope and surface the workspace blocklist in settings (#25007) by @neo773
- feat(metadata): author-keyed overrides blob (steps 1 to 3) (#25284) by @prastoin
- feat(view): seed a user-owned initial view per object alongside the INDEX view (#25416) by @thomtrp
- Record sharing: inherited objects follow their parent (#25439) by @martmull
- Granola 7/8: Filter Granola synchronization by folder (#25576) by @ehconitin
- [3/4] Desktop Recorder: add the Twenty desktop app (#25616) by @Bonapara
- [1/4] Desktop Recorder: support existing UI controls (#25632) by @Bonapara
- [2/4] Desktop Recorder: add the installable Twenty integration (#25633) by @Bonapara
- Replace frontend snackbars with twenty-ui toasts (#25664) by @bosiraphael
- feat(workflow): add workspaceWorkflowId to core workflows (#25723) by @thomtrp
- feat(usage-limit): expose usage limits over the metadata API (#25740) by @etiennejouan
- feat(usage-limit): list workspace limits in a billing tab (#25741) by @etiennejouan
- feat(usage-limit): create and edit limits from settings billing (#25742) by @etiennejouan
- Add
eloqnt lintto catch translation errors (#25754) by @amannn - feat(workflow): point core workflows and command menu items at core version ids (#25757) by @thomtrp
- feat(slack): report a rejected bot token to the platform connection (#25763) by @abdulrahmancodes
- Resolve Slack account identity through one typed service (#25772) by @abdulrahmancodes
- Let every application admin manage a workspace-shared connection (#25773) by @abdulrahmancodes
- Fix shared connected account permissions and visibility (#25777) by @neo773
- Migrate Avatar to the new twenty-ui API (#25787) by @bosiraphael
- Migrate Chip to the new twenty-ui API (#25788) by @bosiraphael
- Add Twenty UI documentation and generated API references (#25791) by @bosiraphael
- Validate select option colors (#25805) by @bosiraphael
- Polish AI model settings (#25810) by @Bonapara
- chore: bump version to 2.41.0 (#25813) by @twenty-pr
- Stop selecting non-mailbox connected accounts as the email sender (#25814) by @neo773
- Emit URL-safe pagination cursors (#25822) by @tomjtobinn
- chore: sync AI model catalog (#25825) by @github-actions
- feat(ai): generate every deployment catalog from the model catalog and a spec (#25831) by @FelixMalfait
- feat(slack): access mode to restrict the assistant to linked members (#25834) by @abdulrahmancodes
- Let runAgent messages carry file attachments (#25835) by @abdulrahmancodes
- chore: sync AI model catalog (#25840) by @github-actions
- Repair machine-translation damage in Crowdin automatically (#25842) by @FelixMalfait
- refactor(ai): derive the SDK package from the packages we bundle (#25845) by @FelixMalfait
- fix(shared): stop the utils barrel dragging handlebars into twenty-client-sdk (#25846) by @FelixMalfait
- Cover every translation pipeline with the normalizer (#25848) by @FelixMalfait
- i18n - website translations (#25849) by @github-actions
- Ship three finished locales, drop the pseudo-locale, and lint the ICU apostrophe (#25850) by @FelixMalfait
- Close the silent gaps around adding a locale, and stop an email shipping its message ids (#25851) by @FelixMalfait
- refactor(shared): resolve workflow variables without handlebars (#25852) by @FelixMalfait
- Delete translations that came back as debris rather than words (#25853) by @FelixMalfait
- Lay the app out right to left for Arabic and Hebrew (#25854) by @FelixMalfait
- Mint optimistic cache cursors the way the server does (#25855) by @FelixMalfait
- Update book meetings doc for the calendar event composer (#25856) by @neo773
- Restore code identifiers the docs translated into prose (#25858) by @FelixMalfait
- Fix the English, and the catalogs and layout that made it unreadable (#25859) by @FelixMalfait
- i18n - website translations (#25860) by @github-actions
- i18n - website translations (#25861) by @github-actions
- i18n - translations (#25863) by @github-actions
- i18n - translations (#25864) by @github-actions
- i18n - website translations (#25865) by @github-actions
- i18n - translations (#25867) by @github-actions
- docs: state which plan row-level permissions require (#25868) by @yosh1
- chore: sync AI model catalog (#25869) by @github-actions
- fix (usage-limit) - stop plan-gated spender groups from opening in the billing limits form (#25871) by @etiennejouan
- fix(create-twenty-app): ship a lockfile so generated apps install under an age gate (#25879) by @FelixMalfait
- fix(front): widen the admin default-model rows (#25881) by @FelixMalfait
- Phone number fix (#25882) by @BOHEUS
- Thread replies to email group and campaign emails (#25884) by @neo773
- i18n - translations (#25885) by @github-actions
- i18n - translations (#25886) by @github-actions
- Migrate buttons to Base UI (#25888) by @bosiraphael
- Add live previews to Twenty UI documentation (#25889) by @bosiraphael
- [forms 1/3] Make record creation commands available across objects (#25890) by @Bonapara
- docs: move Translations under the Operations section (#25892) by @FelixMalfait
- Move UI Library into the Developers menu (#25898) by @bosiraphael
- docs(slack): point self-hosters at the Slack setup guide (#25899) by @abdulrahmancodes
- [4/4] Desktop Recorder: add desktop application coverage (#25900) by @Bonapara
- feat(workflow): read the workflow show page shell through core (#25901) by @thomtrp
- feat(workflow): discard a workflow draft through the core API (#25902) by @thomtrp
- feat(messaging): let apps own message channels (#25903) by @FelixMalfait
- fix(currency): prevent dropping decimal separator and multiplying amount on 0-decimal fields (#25870) (#25904) by @Dewin
- feat(messaging): let apps ingest messages into their channels (#25905) by @FelixMalfait
- feat(messaging): resolve identity for non-email participants (#25906) by @FelixMalfait
- fix(email-tool): resolve the default sender through the caller entitlement filter (#25908) by @etiennejouan
- i18n - translations (#25910) by @github-actions
- Index the messageList and messageCampaign legs on timelineActivity (#25912) by @charlesBochet
- Publish Twenty app skills as a portable Agent Skills collection (skills.sh) (#25913) by @martmull
- Record sharing: inherited records follow the records their child rows point at (#25914) by @martmull
- Remove the email group flag and gate campaigns behind their own flag (#25916) by @neo773
- i18n - translations (#25917) by @github-actions
- Prevent reactivating revoked API keys (#25918) by @Weiko
- fix(billing): restore the credit-package match on an interval switch (#25919) by @FelixMalfait
- fix(record-form): render rich text fields with the BlockNote editor (#25920) by @thomtrp
- fix(ai-chat) - fix AI chat turns dying on tool results that carry Date values (#25921) by @etiennejouan
- i18n - translations (#25922) by @github-actions
- Show AI chat context and credit usage (#25923) by @Bonapara
- i18n - translations (#25924) by @github-actions
- Record sharing: inherited records follow the parent's complete access policy, in queries and events (#25925) by @martmull
- chore(security): bump curl/jq in the image and the npm packages flagged by Oneleet (#25926) by @charlesBochet
- Add readable admin feature flag names and descriptions (#25927) by @Bonapara
- Default demo accounts to the system theme (#25928) by @Bonapara
- chore(security): bump @faker-js/faker to 10 (HIGH Dependabot alert on an SLA clock) (#25930) by @charlesBochet
- chore(security): drop extract-zip (HIGH, past SLA, no fix) by lifting mintlify's puppeteer to 25 (#25931) by @charlesBochet
- chore: sync AI model catalog (#25934) by @github-actions
- feat(workflow): remove the See Active Version command menu item from workspaces (#25938) by @thomtrp
- Use primary text color for settings table identifying columns (#25939) by @Bonapara
- Add copy button on hover to Emails/Phones/Links in the record side panel (#25940) by @charlesBochet
- Clarify self-hosted pricing CTAs and Organization license keys (#25941) by @Bonapara
- fix(messaging): resolve an app channel's connectedAccount for app contexts (#25942) by @FelixMalfait
- test(messaging): cover the app-facing message channel API end to end (#25945) by @FelixMalfait
- Clarify model mode comparisons with an information popup (#25947) by @Bonapara
- Organize Twenty UI into primitive families (#25948) by @bosiraphael
- i18n - translations (#25949) by @github-actions
- i18n - translations (#25950) by @github-actions
- i18n - translations (#25952) by @github-actions
- i18n - translations (#25953) by @github-actions
- Read forwarded email bodies like the mailbox importers do (#25954) by @neo773
- i18n - translations (#25955) by @github-actions
- i18n - website translations (#25956) by @github-actions
- i18n - translations (#25958) by @github-actions
- i18n - website translations (#25960) by @github-actions
- Complete Organization naming in settings and activation (#25961) by @Bonapara
- Scope application file uploads to the registration owner (#25962) by @prastoin
- Split the admin application registration update input (#25963) by @prastoin
- Record sharing: gate events through one access policy entry point (#25964) by @martmull
- Pin catalog sync to a registration's own source package (#25965) by @prastoin
- Derive permission universal identifiers from their role and target (#25966) by @Weiko
- i18n - website translations (#25967) by @github-actions
- Redesign the marketplace app detail page (#25969) by @martmull
- i18n - translations (#25971) by @github-actions
- revert(email-tool): restore the default sender resolution (#25972) by @etiennejouan
- i18n - translations (#25973) by @github-actions
- [1/2 Sidebar] New layout (#25974) by @Bonapara
- Export roles, permissions and permission flags (#25975) by @Weiko
- Use Twenty UI components in presentation stories (#25976) by @bosiraphael
- Desktop Recorder: align merged integration and UI naming conventions (#25977) by @Bonapara
- i18n - translations (#25979) by @github-actions
- Document data display primitives (#25980) by @bosiraphael
- i18n - website translations (#25981) by @github-actions
- Export row-level permission predicates and groups (#25984) by @Weiko
- i18n - translations (#25985) by @github-actions
- Share CSV formatting and composite field labels (#25986) by @Weiko
- i18n - translations (#25990) by @github-actions
- Write roles and permission flags on pull (#25994) by @Weiko
- Use a twenty-bounce MAIL FROM subdomain for new sending domains (#25995) by @neo773
- Show sending domain DNS records as a status list and a records table (#25996) by @neo773
- i18n - translations (#25999) by @github-actions
- Use Twenty UI buttons in Menu and Popover stories (#26001) by @bosiraphael
- Remove unused view delete mutations from the front (#26003) by @Weiko
- i18n - translations (#26004) by @github-actions
- fix(upgrade): pin 2.20 messageList view command to its original columns (#26006) by @prastoin
- Fix custom domain settings spacing (#26007) by @Bonapara
- Show shortcuts in command menu button tooltips (#26009) by @Bonapara
- i18n - translations (#26010) by @github-actions
- Clip the toast progress overlay to the toast corners (#26012) by @neo773
- i18n - translations (#26013) by @github-actions
- fix(front-component-renderer): forward React 18 camelCase attributes on remote elements (#26015) by @abdulrahmancodes
- fix(messaging): enforce CRLF line endings on raw outbound messages and surface IMAP append error responseText (#26011) (#26017) by @Dewin
- i18n - translations (#26018) by @github-actions
- Record sharing: fail closed on unresolved row predicates, gate application events on the role, run dashboard duplication under the caller (#26021) by @martmull
- i18n - translations (#26022) by @github-actions
- Require client authentication for OAuth token introspection (#26023) by @charlesBochet
- Consume the OAuth authorization code atomically (#26025) by @charlesBochet
- Block system and relation fields on workspace member settings update (#26026) by @charlesBochet
- Enforce UNLISTED view visibility when resolving query params (#26027) by @charlesBochet
- chore: sync AI model catalog (#26033) by @github-actions
- Expose minimum likelihood in enrichment workflows (#26040) by @bosiraphael
- fix(workflow): stop reporting user-facing step errors to Sentry (#26041) by @charlesBochet
- Clarify twenty-ui setup in the README (#26044) by @bosiraphael
- Split Twenty UI docs into primitives and components (#26045) by @bosiraphael
- i18n - translations (#26050) by @github-actions
- i18n - translations (#26051) by @github-actions
- Skip participant matching jobs when no person email is involved (#26058) by @neo773
- Show contact auto-creation and sync options on shared mailboxes (#26059) by @neo773
- Honor exclude group emails on shared mailboxes (#26060) by @neo773
- i18n - translations (#26061) by @github-actions
- Document controlled and uncontrolled UI state (#26062) by @bosiraphael
- fix(rest): forward flatIndexMaps to the merge query runner (#26063) by @charlesBochet
- Document Twenty UI anatomy and composition (#26066) by @bosiraphael
- i18n - translations (#26067) by @github-actions
- Disable play functions in UI documentation examples (#26069) by @bosiraphael
- Make record sharing an enterprise feature (#26070) by @martmull
- feat(last-contact): run database event triggers in batch mode (#26072) by @martmull
- Keep default domain deep links through sign-in and workspace selection (#26073) by @martmull
- i18n - translations (#26074) by @github-actions
- refactor(server): bind resolved application packages to their registration (#26077) by @prastoin
- Cache billing entitlements in the workspace cache (#26078) by @Weiko
- i18n - translations (#26079) by @github-actions
- Embed MainButton and LightButton stories in docs (#26089) by @bosiraphael
- fix(workflow): unblock the 2-41 See Active Version removal on workspaces that still have the item (#26090) by @thomtrp
- Add website release notes for 2.39 and 2.40 (#26092) by @Bonapara
- i18n - website translations (#26093) by @github-actions
- Add website release notes for 2.27 and 2.34 (#26094) by @Bonapara
- i18n - website translations (#26095) by @github-actions
- i18n - website translations (#26096) by @github-actions
Full Changelog: twenty/v2.40.0...twenty/v2.41.0