⚠️ Breaking changes
- [BREAKING_CHANGE] Drop the legacy workspace workflow object (#30036) by @charlesBochet
- [BREAKING_CHANGE] Read row level permission rules in the permission compiler (#30132) by @charlesBochet
- [BREAKING_CHANGE] Mask record grants with limiting roles and drop legacy current user permissions (#30145) by @charlesBochet
- chore(security): bump exa-js to 2.28.0 in the exa app (#30188) by @mabdullahabaid
✨ New features
- feat(getting-started): show Keep Twenty in the sidebar card and drop the trial days bar (#30056) by @etiennejouan
- feat(getting-started): add a Next button to the step header (#30065) by @etiennejouan
- feat(getting-started): replace snooze options with a single snooze until tomorrow (#30084) by @etiennejouan
💅 Improvements & UX
- Agents design fixes (#29288) by @Bonapara
- Remove the legacy CODE step logic-function path (2.57) (#29620) by @FelixMalfait
- Show the workspace and app logo when connecting OAuth apps (#29640) by @Bonapara
- Add an MCP tool workflow step backed by the cached server tools (#29668) by @abdulrahmancodes
- Notify members mentioned in app and workflow inbox messages (#29675) by @bosiraphael
- Let logic functions call the server through a private URL (#29687) by @prastoin
- Fix retried first send of a new inbox chat (#29688) by @bosiraphael
- Let validation rules read a record's previous values (#29718) by @FelixMalfait
- Add self-service two-factor authentication backup codes (#29833) by @abdulrahmancodes
- Show grouped table and list views as tabs, behind a feature flag (#29855) by @FelixMalfait
- Add DESIGN.md with Twenty's product UI rules (#29861) by @Bonapara
- Complete assistant identity presentation (#29863) by @bosiraphael
- Import email attachments as remote files streamed from the provider (#29941) by @neo773
- Evaluate RLS rules through a relation (#29953) by @charlesBochet
- Keep blank lines and br tags when converting markdown to rich text (#29956) by @BOHEUS
- Let messaging providers declare a chat or email conversation style (#29963) by @martmull
- Run applications with their grant (#29965) by @prastoin
- Validate HTTP tool requests and log their caller and outcome (#29978) by @prastoin
- Let a member session follow and stop its own ai.generate runs (#29981) by @FelixMalfait
- Let applications archive the inbox threads they wrote (#29982) by @FelixMalfait
- Batch attach_conversation_to_record into attach_conversation_to_records (#29984) by @FelixMalfait
- Run HTTP requests through the logic function driver (#29996) by @prastoin
- Reject SAML certificates followed by more data (#29999) by @prastoin
- i18n - translations (#30000) by @twenty-pr
- Send email-style replies through app messaging providers (#30002) by @martmull
- Reject replayed SAML assertions (#30004) by @prastoin
- i18n - translations (#30005) by @twenty-pr
- Split permission reads and access group computation (#30007) by @charlesBochet
- Add jobConfig to core workflows and logic functions (#30009) by @martmull
- Pace workflow and logic function jobs by their jobConfig limiter (#30011) by @martmull
- LinkedIn app: set missing person avatars from LinkedIn profile pictures (#30012) by @martmull
- Validate component drafts before requesting publication approval (#30013) by @Weiko
- i18n - docs translations (#30014) by @twenty-pr
- Freeze legacy workflow references in released upgrade commands (#30015) by @charlesBochet
- i18n - translations (#30017) by @twenty-pr
- Attribute code-step usage to the same workflow id as step billing (#30018) by @charlesBochet
- Key the legacy workflow object guards on frozen identifiers (#30019) by @charlesBochet
- Add logo to connection provider (#30022) by @martmull
- Cover limiter pacing with an integration test on real Redis (#30023) by @martmull
- i18n - translations (#30026) by @twenty-pr
- i18n - docs translations (#30028) by @twenty-pr
- Fix chat thread flash after sending a message (#30029) by @martmull
- Store LinkedIn message attachments in Twenty (#30031) by @martmull
- Refresh a message thread when files are attached to its messages (#30032) by @martmull
- Layer the permissions internal folders (#30033) by @charlesBochet
- Stop reading and writing the legacy workflow link on runs and versions (#30034) by @charlesBochet
- Compile RLS rules from role permissions (#30035) by @charlesBochet
- Add core workflow metadata ahead of dropping the legacy workflow object (#30037) by @charlesBochet
- Compile the RLS filter once and split field access (#30038) by @charlesBochet
- Lay out workflow diagrams automatically until a user places a node (#30039) by @FelixMalfait
- Remove the type-check suppressions in 2 files of modules/workflow (#30040) by @twenty-pr-author
- Remove the
as unknown ascasts in 3 files of modules/ai (#30041) by @twenty-pr-author - Rename 12 server files to the singular suffix in src/engine/metadata-modules/ai/ai-agent-execution/constants (#30042) by @twenty-pr-author
- Show recent run health on the workflows index (#30043) by @FelixMalfait
- Use
isDefinedin captchaRefreshLink.ts (#30044) by @twenty-pr-author - Add Overview and Runs tabs to the workflow page (#30045) by @FelixMalfait
- Stop using the legacy workflow object in the front (#30046) by @charlesBochet
- i18n - translations (#30047) by @twenty-pr
- LinkedIn: sync the profile picture of the account owner's person (#30048) by @martmull
- i18n - translations (#30050) by @twenty-pr
- Give callers the global record permission answer (#30051) by @charlesBochet
- i18n - translations (#30052) by @twenty-pr
- i18n - translations (#30055) by @twenty-pr
- Test that an OIDC login only completes in the browser that started it (#30058) by @prastoin
- Remove SAML strategy unit cases covered by the SSO integration tests (#30059) by @prastoin
- Show other objects in a relation preview tooltip (#30060) by @Bonapara
- Give reads and writes their own records access condition (#30061) by @charlesBochet
- i18n - docs translations (#30062) by @twenty-pr
- Save chat turns when the model sends malformed tool arguments (#30066) by @neo773
- i18n - translations (#30067) by @twenty-pr
- Stop the validation rule lifecycle test from deactivating a seeded company field (#30073) by @charlesBochet
- Ignore RLS on limiting roles and rename the runtime limiting role (#30074) by @charlesBochet
- Stop patching the global console in the local logic function driver (#30077) by @charlesBochet
- i18n - translations (#30079) by @twenty-pr
- Show labels and following in the AI chat details (#30080) by @martmull
- Show who is typing in the AI chat (#30081) by @martmull
- Play Messages voice notes with a compact player (#30082) by @martmull
- i18n - translations (#30085) by @twenty-pr
- Add sync toggles for email and calendar channels (#30087) by @BOHEUS
- Show a disabled checkbox for built-in agents in the Agents list (#30090) by @Bonapara
- Refuse activating a workflow whose loop never returns to its iterator (#30092) by @prastoin
- i18n - translations (#30094) by @twenty-pr
- Add attachments and the new-message view to Messages (#30095) by @martmull
- i18n - docs translations (#30097) by @twenty-pr
- i18n - translations (#30098) by @twenty-pr
- Show reactions and their counts in the Messages reader (#30099) by @martmull
- Show the time in outgoing Messages bubbles (#30102) by @martmull
- Show a receipt in outgoing Messages bubbles (#30103) by @martmull
- i18n - translations (#30106) by @twenty-pr
- i18n - translations (#30108) by @twenty-pr
- Add the row level permission rule syncable entity (#30111) by @charlesBochet
- i18n - docs translations (#30114) by @twenty-pr
- Add date functions to rule expressions and read database events as conditions (#30115) by @FelixMalfait
- Match database-event triggers through one shared matcher with conditions (#30116) by @FelixMalfait
- Link row level permission predicates, groups and field permissions to rules (#30117) by @charlesBochet
- i18n - translations (#30124) by @twenty-pr
- Align chat conversation and approval cards with Figma (#30125) by @Bonapara
- Declare record event triggers as eventTriggerSettings with on: 'recordEvent' (#30126) by @FelixMalfait
- i18n - translations (#30129) by @twenty-pr
- Refuse deleting a field still used by a row-level permission rule (#30130) by @charlesBochet
- Build twenty-shared with one output file per source module (#30131) by @charlesBochet
- Save role settings on row level permission rules (#30133) by @charlesBochet
- i18n - translations (#30136) by @twenty-pr
- Align AI chat composer spacing with Figma (#30138) by @martmull
- Grant known record ids through related record paths (#30140) by @charlesBochet
- i18n - translations (#30142) by @twenty-pr
- Let a full access record share grant delete operations (#30146) by @charlesBochet
- Deliver events of records reached through related record paths (#30148) by @charlesBochet
- i18n - translations (#30149) by @twenty-pr
- Note the paid Slack plan needed for the Slack app's AI agent (#30150) by @abdulrahmancodes
- Remove the
Boolean()casts in 4 files of modules/object-record (#30154) by @twenty-pr-author - Remove the comparisons to
trueandfalsein 8 files of modules/object-record (#30155) by @twenty-pr-author - Remove the
: anyannotations in 9 files of engine/core-modules (#30157) by @twenty-pr-author - Remove the type-check suppressions in compute-system-record-page-layout-to-create.util.ts (#30158) by @twenty-pr-author
- Bump Playwright to 1.65 to support Ubuntu 26.04 runners (#30167) by @charlesBochet
- Ignore row level permissions persisted before 2.58 (#30168) by @charlesBochet
- Space paragraphs inside README blockquotes on app pages (#30171) by @abdulrahmancodes
- i18n - translations (#30172) by @twenty-pr
- i18n - translations (#30179) by @twenty-pr
- i18n - translations (#30180) by @twenty-pr
- Let the workflow Overview scope its bar chart like other chart callers (#30181) by @FelixMalfait
- i18n - docs translations (#30184) by @twenty-pr
- Redirect the bare front domain to the default domain and stop the not-found redirect loop (#30185) by @charlesBochet
- Let record shares and private record creators grant on their own (#30187) by @charlesBochet
- Add stopGenerate to stop a followed ai.generate run (#30190) by @FelixMalfait
- Resolve the custom application of a soft-deleted workspace (#30191) by @prastoin
- Application can only CUD their owned roles (#30192) by @prastoin
- Give private records their own service and repository (#30193) by @charlesBochet
- i18n - translations (#30194) by @twenty-pr
- Let the permission engine create the record share and access group tables behind a flag (#30195) by @charlesBochet
- i18n - docs translations (#30199) by @twenty-pr
- Store the access groups records inherit through related record paths (#30201) by @charlesBochet
- Let a private record's creator reach it without a role grant and tidy permission sources (#30202) by @charlesBochet
- Follow related record paths in record listings through access groups (#30206) by @charlesBochet
- Follow related record paths through shares, creators and writes (#30207) by @charlesBochet
- i18n - translations (#30208) by @twenty-pr
- i18n - translations (#30210) by @twenty-pr
- i18n - translations (#30211) by @twenty-pr
- Bump stream-json to 3.8.0 (#30213) by @BOHEUS
- i18n - translations (#30214) by @twenty-pr
- Link records and frame the request for the Teams assistant (#30215) by @abdulrahmancodes
- Tell Teams members why the assistant could not answer (#30216) by @abdulrahmancodes
- Answer a bare mention of the Teams assistant with a hint (#30217) by @abdulrahmancodes
- Keep Teams assistant answers within the message size limit (#30218) by @abdulrahmancodes
- Remove the
as anycasts in StepBar.tsx (#30219) by @twenty-pr-author - Remove the
as nevercasts in resolve-effective-universal-flat-entity.util.ts (#30220) by @twenty-pr-author - Serve a merged twenty-shared build to dev servers instead of pre-bundling it (#30224) by @FelixMalfait
- Fix a listing table scan with shared path sources and a rule matching all on an empty member list (#30225) by @charlesBochet
- Retry hovers in the gallery tooltip tests until the tooltip opens (#30226) by @FelixMalfait
- Bump Node to 26.13.1 (#30229) by @prastoin
- i18n - translations (#30236) by @twenty-pr
🐛 Bug fixes
- fix(getting-started): stop the page from scrolling and hide the trial snooze once paid (#30006) by @etiennejouan
- fix(ai): stop the assistant from introducing itself by name (#30010) by @etiennejouan
- fix(getting-started): stop counting SSO sign-in accounts as mailboxes (#30021) by @etiennejouan
- fix(getting-started): keep completed steps in the step sequence (#30053) by @etiennejouan
- fix(getting-started): slide stack cards between depths when the step changes (#30054) by @etiennejouan
- fix(cli): keep workflow code steps out of definition discovery (#30088) by @Weiko
- fix(getting-started): fit the book a call step on short screens (#30100) by @etiennejouan
- fix(inbox): stop the assistant pending indicators from flickering (#30112) by @etiennejouan
- fix(inbox): keep reopened chats open, show a text cursor in the composer and the circled Done icon (#30123) by @etiennejouan
🔧 Developer & API
- Fix SDK metadata client index for senderApplicationId (#30001) by @charlesBochet
- Fix order-dependent integration tests and stale SDK metadata client (#30068) by @charlesBochet
- Export workflow filter enums from the SDK and report unconfigured widgets (#30118) by @FelixMalfait
- Bump @aws-sdk/xml-builder to drop vulnerable fast-xml-parser (#30212) by @BOHEUS
- Rename 3 server files to the singular suffix in src/engine/core-modules/open-api/utils (#30222) by @twenty-pr-author
🏗️ Internal changes (1)
Full changelog (173 PRs)
- Agents design fixes (#29288) by @Bonapara
- Remove the legacy CODE step logic-function path (2.57) (#29620) by @FelixMalfait
- Show the workspace and app logo when connecting OAuth apps (#29640) by @Bonapara
- Add an MCP tool workflow step backed by the cached server tools (#29668) by @abdulrahmancodes
- Notify members mentioned in app and workflow inbox messages (#29675) by @bosiraphael
- Let logic functions call the server through a private URL (#29687) by @prastoin
- Fix retried first send of a new inbox chat (#29688) by @bosiraphael
- Let validation rules read a record's previous values (#29718) by @FelixMalfait
- Add self-service two-factor authentication backup codes (#29833) by @abdulrahmancodes
- Show grouped table and list views as tabs, behind a feature flag (#29855) by @FelixMalfait
- Add DESIGN.md with Twenty's product UI rules (#29861) by @Bonapara
- Complete assistant identity presentation (#29863) by @bosiraphael
- Import email attachments as remote files streamed from the provider (#29941) by @neo773
- Evaluate RLS rules through a relation (#29953) by @charlesBochet
- Keep blank lines and br tags when converting markdown to rich text (#29956) by @BOHEUS
- Let messaging providers declare a chat or email conversation style (#29963) by @martmull
- Run applications with their grant (#29965) by @prastoin
- Validate HTTP tool requests and log their caller and outcome (#29978) by @prastoin
- Let a member session follow and stop its own ai.generate runs (#29981) by @FelixMalfait
- Let applications archive the inbox threads they wrote (#29982) by @FelixMalfait
- Batch attach_conversation_to_record into attach_conversation_to_records (#29984) by @FelixMalfait
- Run HTTP requests through the logic function driver (#29996) by @prastoin
- Reject SAML certificates followed by more data (#29999) by @prastoin
- i18n - translations (#30000) by @twenty-pr
- Fix SDK metadata client index for senderApplicationId (#30001) by @charlesBochet
- Send email-style replies through app messaging providers (#30002) by @martmull
- Reject replayed SAML assertions (#30004) by @prastoin
- i18n - translations (#30005) by @twenty-pr
- fix(getting-started): stop the page from scrolling and hide the trial snooze once paid (#30006) by @etiennejouan
- Split permission reads and access group computation (#30007) by @charlesBochet
- Add jobConfig to core workflows and logic functions (#30009) by @martmull
- fix(ai): stop the assistant from introducing itself by name (#30010) by @etiennejouan
- Pace workflow and logic function jobs by their jobConfig limiter (#30011) by @martmull
- LinkedIn app: set missing person avatars from LinkedIn profile pictures (#30012) by @martmull
- Validate component drafts before requesting publication approval (#30013) by @Weiko
- i18n - docs translations (#30014) by @twenty-pr
- Freeze legacy workflow references in released upgrade commands (#30015) by @charlesBochet
- i18n - translations (#30017) by @twenty-pr
- Attribute code-step usage to the same workflow id as step billing (#30018) by @charlesBochet
- Key the legacy workflow object guards on frozen identifiers (#30019) by @charlesBochet
- docs(skills): document activity target objects in workflow-building skill (#30020) by @ijreilly
- fix(getting-started): stop counting SSO sign-in accounts as mailboxes (#30021) by @etiennejouan
- Add logo to connection provider (#30022) by @martmull
- Cover limiter pacing with an integration test on real Redis (#30023) by @martmull
- i18n - translations (#30026) by @twenty-pr
- i18n - docs translations (#30028) by @twenty-pr
- Fix chat thread flash after sending a message (#30029) by @martmull
- Store LinkedIn message attachments in Twenty (#30031) by @martmull
- Refresh a message thread when files are attached to its messages (#30032) by @martmull
- Layer the permissions internal folders (#30033) by @charlesBochet
- Stop reading and writing the legacy workflow link on runs and versions (#30034) by @charlesBochet
- Compile RLS rules from role permissions (#30035) by @charlesBochet
- [BREAKING_CHANGE] Drop the legacy workspace workflow object (#30036) by @charlesBochet
- Add core workflow metadata ahead of dropping the legacy workflow object (#30037) by @charlesBochet
- Compile the RLS filter once and split field access (#30038) by @charlesBochet
- Lay out workflow diagrams automatically until a user places a node (#30039) by @FelixMalfait
- Remove the type-check suppressions in 2 files of modules/workflow (#30040) by @twenty-pr-author
- Remove the
as unknown ascasts in 3 files of modules/ai (#30041) by @twenty-pr-author - Rename 12 server files to the singular suffix in src/engine/metadata-modules/ai/ai-agent-execution/constants (#30042) by @twenty-pr-author
- Show recent run health on the workflows index (#30043) by @FelixMalfait
- Use
isDefinedin captchaRefreshLink.ts (#30044) by @twenty-pr-author - Add Overview and Runs tabs to the workflow page (#30045) by @FelixMalfait
- Stop using the legacy workflow object in the front (#30046) by @charlesBochet
- i18n - translations (#30047) by @twenty-pr
- LinkedIn: sync the profile picture of the account owner's person (#30048) by @martmull
- i18n - translations (#30050) by @twenty-pr
- Give callers the global record permission answer (#30051) by @charlesBochet
- i18n - translations (#30052) by @twenty-pr
- fix(getting-started): keep completed steps in the step sequence (#30053) by @etiennejouan
- fix(getting-started): slide stack cards between depths when the step changes (#30054) by @etiennejouan
- i18n - translations (#30055) by @twenty-pr
- feat(getting-started): show Keep Twenty in the sidebar card and drop the trial days bar (#30056) by @etiennejouan
- Test that an OIDC login only completes in the browser that started it (#30058) by @prastoin
- Remove SAML strategy unit cases covered by the SSO integration tests (#30059) by @prastoin
- Show other objects in a relation preview tooltip (#30060) by @Bonapara
- Give reads and writes their own records access condition (#30061) by @charlesBochet
- i18n - docs translations (#30062) by @twenty-pr
- feat(getting-started): add a Next button to the step header (#30065) by @etiennejouan
- Save chat turns when the model sends malformed tool arguments (#30066) by @neo773
- i18n - translations (#30067) by @twenty-pr
- Fix order-dependent integration tests and stale SDK metadata client (#30068) by @charlesBochet
- Stop the validation rule lifecycle test from deactivating a seeded company field (#30073) by @charlesBochet
- Ignore RLS on limiting roles and rename the runtime limiting role (#30074) by @charlesBochet
- Stop patching the global console in the local logic function driver (#30077) by @charlesBochet
- i18n - translations (#30079) by @twenty-pr
- Show labels and following in the AI chat details (#30080) by @martmull
- Show who is typing in the AI chat (#30081) by @martmull
- Play Messages voice notes with a compact player (#30082) by @martmull
- feat(getting-started): replace snooze options with a single snooze until tomorrow (#30084) by @etiennejouan
- i18n - translations (#30085) by @twenty-pr
- Add sync toggles for email and calendar channels (#30087) by @BOHEUS
- fix(cli): keep workflow code steps out of definition discovery (#30088) by @Weiko
- Show a disabled checkbox for built-in agents in the Agents list (#30090) by @Bonapara
- Refuse activating a workflow whose loop never returns to its iterator (#30092) by @prastoin
- i18n - translations (#30094) by @twenty-pr
- Add attachments and the new-message view to Messages (#30095) by @martmull
- i18n - docs translations (#30097) by @twenty-pr
- i18n - translations (#30098) by @twenty-pr
- Show reactions and their counts in the Messages reader (#30099) by @martmull
- fix(getting-started): fit the book a call step on short screens (#30100) by @etiennejouan
- Show the time in outgoing Messages bubbles (#30102) by @martmull
- Show a receipt in outgoing Messages bubbles (#30103) by @martmull
- i18n - translations (#30106) by @twenty-pr
- i18n - translations (#30108) by @twenty-pr
- Add the row level permission rule syncable entity (#30111) by @charlesBochet
- fix(inbox): stop the assistant pending indicators from flickering (#30112) by @etiennejouan
- i18n - docs translations (#30114) by @twenty-pr
- Add date functions to rule expressions and read database events as conditions (#30115) by @FelixMalfait
- Match database-event triggers through one shared matcher with conditions (#30116) by @FelixMalfait
- Link row level permission predicates, groups and field permissions to rules (#30117) by @charlesBochet
- Export workflow filter enums from the SDK and report unconfigured widgets (#30118) by @FelixMalfait
- fix(inbox): keep reopened chats open, show a text cursor in the composer and the circled Done icon (#30123) by @etiennejouan
- i18n - translations (#30124) by @twenty-pr
- Align chat conversation and approval cards with Figma (#30125) by @Bonapara
- Declare record event triggers as eventTriggerSettings with on: 'recordEvent' (#30126) by @FelixMalfait
- i18n - translations (#30129) by @twenty-pr
- Refuse deleting a field still used by a row-level permission rule (#30130) by @charlesBochet
- Build twenty-shared with one output file per source module (#30131) by @charlesBochet
- [BREAKING_CHANGE] Read row level permission rules in the permission compiler (#30132) by @charlesBochet
- Save role settings on row level permission rules (#30133) by @charlesBochet
- i18n - translations (#30136) by @twenty-pr
- Align AI chat composer spacing with Figma (#30138) by @martmull
- Grant known record ids through related record paths (#30140) by @charlesBochet
- i18n - translations (#30142) by @twenty-pr
- [BREAKING_CHANGE] Mask record grants with limiting roles and drop legacy current user permissions (#30145) by @charlesBochet
- Let a full access record share grant delete operations (#30146) by @charlesBochet
- Deliver events of records reached through related record paths (#30148) by @charlesBochet
- i18n - translations (#30149) by @twenty-pr
- Note the paid Slack plan needed for the Slack app's AI agent (#30150) by @abdulrahmancodes
- Remove the
Boolean()casts in 4 files of modules/object-record (#30154) by @twenty-pr-author - Remove the comparisons to
trueandfalsein 8 files of modules/object-record (#30155) by @twenty-pr-author - Remove the
: anyannotations in 9 files of engine/core-modules (#30157) by @twenty-pr-author - Remove the type-check suppressions in compute-system-record-page-layout-to-create.util.ts (#30158) by @twenty-pr-author
- Bump Playwright to 1.65 to support Ubuntu 26.04 runners (#30167) by @charlesBochet
- Ignore row level permissions persisted before 2.58 (#30168) by @charlesBochet
- Space paragraphs inside README blockquotes on app pages (#30171) by @abdulrahmancodes
- i18n - translations (#30172) by @twenty-pr
- i18n - translations (#30179) by @twenty-pr
- i18n - translations (#30180) by @twenty-pr
- Let the workflow Overview scope its bar chart like other chart callers (#30181) by @FelixMalfait
- i18n - docs translations (#30184) by @twenty-pr
- Redirect the bare front domain to the default domain and stop the not-found redirect loop (#30185) by @charlesBochet
- Let record shares and private record creators grant on their own (#30187) by @charlesBochet
- chore(security): bump exa-js to 2.28.0 in the exa app (#30188) by @mabdullahabaid
- Add stopGenerate to stop a followed ai.generate run (#30190) by @FelixMalfait
- Resolve the custom application of a soft-deleted workspace (#30191) by @prastoin
- Application can only CUD their owned roles (#30192) by @prastoin
- Give private records their own service and repository (#30193) by @charlesBochet
- i18n - translations (#30194) by @twenty-pr
- Let the permission engine create the record share and access group tables behind a flag (#30195) by @charlesBochet
- i18n - docs translations (#30199) by @twenty-pr
- Store the access groups records inherit through related record paths (#30201) by @charlesBochet
- Let a private record's creator reach it without a role grant and tidy permission sources (#30202) by @charlesBochet
- Follow related record paths in record listings through access groups (#30206) by @charlesBochet
- Follow related record paths through shares, creators and writes (#30207) by @charlesBochet
- i18n - translations (#30208) by @twenty-pr
- i18n - translations (#30210) by @twenty-pr
- i18n - translations (#30211) by @twenty-pr
- Bump @aws-sdk/xml-builder to drop vulnerable fast-xml-parser (#30212) by @BOHEUS
- Bump stream-json to 3.8.0 (#30213) by @BOHEUS
- i18n - translations (#30214) by @twenty-pr
- Link records and frame the request for the Teams assistant (#30215) by @abdulrahmancodes
- Tell Teams members why the assistant could not answer (#30216) by @abdulrahmancodes
- Answer a bare mention of the Teams assistant with a hint (#30217) by @abdulrahmancodes
- Keep Teams assistant answers within the message size limit (#30218) by @abdulrahmancodes
- Remove the
as anycasts in StepBar.tsx (#30219) by @twenty-pr-author - Remove the
as nevercasts in resolve-effective-universal-flat-entity.util.ts (#30220) by @twenty-pr-author - Rename 3 server files to the singular suffix in src/engine/core-modules/open-api/utils (#30222) by @twenty-pr-author
- Serve a merged twenty-shared build to dev servers instead of pre-bundling it (#30224) by @FelixMalfait
- Fix a listing table scan with shared path sources and a rule matching all on an empty member list (#30225) by @charlesBochet
- Retry hovers in the gallery tooltip tests until the tooltip opens (#30226) by @FelixMalfait
- Bump Node to 26.13.1 (#30229) by @prastoin
- i18n - translations (#30236) by @twenty-pr
Full Changelog: twenty/v2.57.1...twenty/v2.58.0