⚠️ Breaking changes
- [BREAKING_CHANGE] Let AI workflow steps run from their own config and permission scope (#29368) by @FelixMalfait
- chore(security): bump follow-redirects to 1.16.2 in the app lockfiles (#29523) by @mabdullahabaid
- chore(security): bump follow-redirects to 1.16.2 in the root and application dependency lockfiles (#29528) by @mabdullahabaid
- Keep the Nx cache in the workspace on CI (#29587) by @charlesBochet
- chore(security): bump happy-dom to 20.14.6 in the root lockfile (#29588) by @mabdullahabaid
✨ New features
- feat(filter): add case-sensitive IS/IS_NOT operands for TEXT fields (#29201) by @etiennejouan
- feat(billing): add billing arrangement entity and validation (#29321) by @etiennejouan
- feat(billing): reject overlapping billing arrangements on insert (#29550) by @etiennejouan
- feat(front): pick the sending account from the Messages widget + button (#29562) by @martmull
- feat(getting-started): require a payment method to hide Getting started for good (#29607) by @etiennejouan
- feat(getting-started): add a completed state to onboarding cards (#29671) by @etiennejouan
- feat(onboarding): show the invite step only with invite suggestions (#29684) by @etiennejouan
- feat(getting-started): illustrate the mailbox card with the onboarding contacts preview (#29763) by @etiennejouan
💅 Improvements & UX
- Choose recipients for new inbox chats (#28925) by @bosiraphael
- Apply Ada participation rules (#28939) by @bosiraphael
- Let apps embed websites with microphone and camera access (#28944) by @bosiraphael
- Choose Ada replies from workspace modes (#29232) by @bosiraphael
- Recheck Ada reply rules before running a turn (#29233) by @bosiraphael
- Remove the record creation form feature flag (#29246) by @Weiko
- Ensure one direct message thread per member pair (#29286) by @bosiraphael
- Mount AI Overview behind the inbox flag (#29322) by @bosiraphael
- Expose the channel of each timeline thread (#29324) by @martmull
- Show the channel of each conversation in the messages list (#29325) by @martmull
- Render app conversations as chat bubbles (#29326) by @martmull
- Reply to app conversations from the thread (#29327) by @martmull
- Rename the Emails record tab to Messages (#29343) by @martmull
- Bundle tabler icons into twenty-ui's individual build (#29384) by @FelixMalfait
- Add user-scoped Microsoft Teams connection provider (#29427) by @ehconitin
- i18n - translations (#29430) by @twenty-pr
- Add user-scoped Fathom connection provider (#29433) by @ehconitin
- Run app disconnect hooks when a removed member's connections are transferred (#29435) by @ehconitin
- Resolve numeric twenty-ui theme tokens when CSS variables can't be read (#29436) by @Weiko
- Name permissions principals by role: main, limiting and app (#29452) by @charlesBochet
- Warn before a field change turns off validation rules (#29458) by @ijreilly
- Add an application role target kind (#29463) by @prastoin
- i18n - docs translations (#29465) by @twenty-pr
- Ship code interpreter sandbox scripts and let E2B sandboxes use a custom template (#29466) by @etiennejouan
- Fix duplicate AI component previews and empty sample data (#29471) by @Weiko
- Discriminate permissions principals by type (#29475) by @charlesBochet
- Connect inbox behavior settings (#29476) by @bosiraphael
- i18n - docs translations (#29479) by @twenty-pr
- Derive repository permissions from the auth context (#29483) by @charlesBochet
- Use provider names on built-in connect cards in app preferences (#29496) by @ehconitin
- i18n - translations (#29497) by @twenty-pr
- Call recorder: add recorder styles for the bot camera tile (#29498) by @ehconitin
- i18n - translations (#29500) by @twenty-pr
- i18n - docs translations (#29505) by @twenty-pr
- Fix AI step QA findings after the inline-config rework (#29506) by @FelixMalfait
- LinkedIn app: cap the conversations a history sync imports (#29507) by @martmull
- LinkedIn app: skip profile lookups that cannot change the outcome (#29509) by @martmull
- Hide the unread divider above the first message (#29511) by @bosiraphael
- Derive permission principals straight from the auth context (#29514) by @charlesBochet
- AI: add effort levels to Claude Haiku 5.5, Sonnet 5.5 and Opus 5.5 (#29515) by @AryaKesharwani
- Publish the affiliate program terms and link them from the application form (#29520) by @StephanieJoly4
- Keep zoom inside full-height front component widgets (#29521) by @bosiraphael
- Require a layer bucket for the Lambda logic function driver (#29522) by @etiennejouan
- i18n - translations (#29524) by @twenty-pr
- LinkedIn app: reply to conversations from Twenty through Unipile (#29526) by @martmull
- Remove viaApplication from the user auth context (#29527) by @charlesBochet
- Simplify permissions utils: one event admission path, share keys in sharing (#29529) by @charlesBochet
- i18n - website translations (#29530) by @twenty-pr
- i18n - translations (#29531) by @twenty-pr
- Require the affiliate main channel URL (#29532) by @StephanieJoly4
- Name the AI run scope AiRunPermissionScope (#29534) by @charlesBochet
- i18n - website translations (#29535) by @twenty-pr
- Call recorder: fill the workspace logo plate (#29536) by @ehconitin
- Remove the IS_PRIVATE_RECORD_ENABLED feature flag (#29538) by @charlesBochet
- i18n - translations (#29539) by @twenty-pr
- Lock property edits on system-managed fields in field settings (#29540) by @charlesBochet
- i18n - docs translations (#29542) by @twenty-pr
- Remove IS_WORKER_FAIRNESS_ENABLED, worker fairness is always on (#29543) by @martmull
- Guard metadata-modules endpoints with AccessPolicyGuard (#29547) by @prastoin
- CODE steps own their source instead of a hidden logic function (#29548) by @FelixMalfait
- i18n - translations (#29549) by @twenty-pr
- Use one side panel footer style everywhere (#29551) by @FelixMalfait
- Simplify AI model selection (#29553) by @bosiraphael
- Add a direct message sharing TODO and use an enum for the conversation type (#29554) by @bosiraphael
- Unify side panel footers (#29559) by @bosiraphael
- LinkedIn app: drop reply code comments, clarify the replies README note (#29561) by @martmull
- Derive repository object permissions from the permissions principal (#29563) by @charlesBochet
- i18n - translations (#29564) by @twenty-pr
- Add NATIVE_PAGE navigation menu items and a /workflows route (#29567) by @FelixMalfait
- Show the junction toggle for custom junction objects (#29570) by @charlesBochet
- Repair application dependency checksums that do not match the stored files (#29571) by @prastoin
- Add @definetool tools to the endpoint permission snapshot (#29573) by @prastoin
- Rewrite inbox channel grants without raw SQL (#29582) by @bosiraphael
- Guard core-modules endpoints with AccessPolicyGuard (#29586) by @prastoin
- Resolve permissions principals through one service (#29591) by @charlesBochet
- Evict cached record queries when a field is renamed or deleted (#29593) by @charlesBochet
- Run server integration tests on 24 shards and split the two slowest chat specs (#29594) by @charlesBochet
- Thin out line chart data labels that would overlap (#29595) by @FelixMalfait
- i18n - docs translations (#29596) by @twenty-pr
- Name the role grant on every record the allRecords grant path (#29602) by @charlesBochet
- Stop chat specs from waiting out every snooze between tests (#29603) by @charlesBochet
- Replace the field permission specs with one spec on both APIs (#29606) by @charlesBochet
- Add operations to row level permission predicate groups (#29611) by @charlesBochet
- Remove Onboarding Packs mentions from pricing and FAQ (#29613) by @ijreilly
- Translate component labels with useLingui so they follow locale changes (#29614) by @charlesBochet
- Affiliate program: partner code in billing, clearer attribution rules, country list on the form (#29615) by @StephanieJoly4
- Fetch only what changed-files needs in discover-apps (#29617) by @FelixMalfait
- Delete timeline rows of destroyed messages and calendar events (#29619) by @neo773
- Rename CoreObjectNameSingular to StandardObjectNameSingular (#29623) by @FelixMalfait
- Compute role permissions as all records and row level grants (#29627) by @charlesBochet
- i18n - translations (#29637) by @twenty-pr
- i18n - website translations (#29641) by @twenty-pr
- i18n - translations (#29642) by @twenty-pr
- List MCP tools directly by default (#29656) by @FelixMalfait
- i18n - website translations (#29657) by @twenty-pr
- Make inbox notification badge red (#29660) by @bosiraphael
- Guard src/modules endpoints with AccessPolicyGuard and delete the legacy guards (#29661) by @prastoin
- Add required fields for PDL matches (#29662) by @bosiraphael
- i18n - translations (#29664) by @twenty-pr
- Allow clearing IMAP and SMTP port inputs (#29665) by @neo773
- Center reference chips in AI chat (#29672) by @bosiraphael
- i18n - docs translations (#29673) by @twenty-pr
- Add the field metadata option syncable entity (#29674) by @FelixMalfait
- Add the shared assistant avatar renderer (#29677) by @bosiraphael
- Read records permissions directly on the server (#29678) by @charlesBochet
- Persist workspace assistant identity (#29679) by @bosiraphael
- Move a board card back when the server rejects its update (#29682) by @FelixMalfait
- Expose the current user's records permissions in the nested shape (#29686) by @charlesBochet
- Render workflow enum array inputs as a multiselect (#29689) by @bosiraphael
- Ask for the fields a validation rule needs instead of rejecting the update (#29691) by @FelixMalfait
- Require a workspace member on the campaign send path (#29694) by @prastoin
- i18n - translations (#29697) by @twenty-pr
- i18n - website translations (#29698) by @twenty-pr
- i18n - translations (#29700) by @twenty-pr
- Read the current user's records permissions in the nested shape on the front (#29701) by @charlesBochet
- i18n - translations (#29705) by @twenty-pr
- i18n - website translations (#29706) by @twenty-pr
- Ship the application role target command in 2.56 (#29708) by @charlesBochet
- i18n - docs translations (#29709) by @twenty-pr
- Ask permission questions through PermissionsService (#29712) by @charlesBochet
- i18n - translations (#29714) by @twenty-pr
- Hide select options a validation rule would reject (#29716) by @FelixMalfait
- Tighten security of contributor setup (#29717) by @BOHEUS
- Keep text input errors below the field (#29721) by @bosiraphael
- Remove as unknown casts from specs outside twenty-server (#29722) by @charlesBochet
- i18n - translations (#29723) by @twenty-pr
- Use inbox icon for Conversations record tab (#29725) by @martmull
- Animate assistant avatars (#29726) by @bosiraphael
- Build assistant personalization controls (#29728) by @bosiraphael
- i18n - docs translations (#29730) by @twenty-pr
- Keep the legacy current user object permissions as deprecated fields (#29732) by @charlesBochet
- i18n - translations (#29734) by @twenty-pr
- Read record permission data through record-permission-orm (#29735) by @charlesBochet
- Remove as unknown casts from server database specs (#29736) by @charlesBochet
- Remove as unknown casts from server core and metadata specs (#29737) by @charlesBochet
- Remove as unknown casts from the remaining server specs (#29738) by @charlesBochet
- Move the partner code to a hidden /settings/partner page (#29739) by @etiennejouan
- i18n - translations (#29747) by @twenty-pr
- Escape identifiers in filter where conditions (#29749) by @charlesBochet
- i18n - docs translations (#29750) by @twenty-pr
- Wait for records permissions before opening the metadata gate (#29751) by @charlesBochet
- Set ORGANIZER on CalDAV events so servers send invitations (#29753) by @neo773
- Fix duplicated CalDAV events created from Twenty (#29754) by @neo773
- Scope core workflow reads to the calling application (#29755) by @prastoin
- i18n - website translations (#29756) by @twenty-pr
- i18n - translations (#29757) by @twenty-pr
- i18n - website translations (#29760) by @twenty-pr
- i18n - translations (#29766) by @twenty-pr
🐛 Bug fixes
- fix(twenty-shared): reject two-digit years when parsing date-time strings (#29176) by @Abhishek-B-R
- fix(CommonAPI): cap GraphQL find-many page size at QUERY_MAX_RECORDS (#29546) by @etiennejouan
- fix(billing): set Organization monthly fallback price to $52 (#29658) by @etiennejouan
🔧 Developer & API
- Sync MCP server tool lists through the MCP SDK and cache them on the entity (#28835) by @abdulrahmancodes
- Make validation rules declarable in the app SDK (#29283) by @ijreilly
- Share access policies between GraphQL, REST and @definetool tools (#29364) by @prastoin
- Drain API HTTP requests before flushing recorders and closing Nest (#29501) by @FelixMalfait
- Bound the whole API shutdown when sockets escape HTTP tracking (#29503) by @FelixMalfait
- Write postcard content with ai.generate; mark /rest/ai/generate-text deprecated (#29525) by @FelixMalfait
- Return 403 for REST permission denials and rework the CRUD permission specs (#29537) by @charlesBochet
- Check view access in one place for GraphQL, REST and the view tools (#29690) by @prastoin
- Share the data model read policies between GraphQL, REST and tools (#29692) by @prastoin
- Share the agent access policies between GraphQL and the agent tools (#29693) by @prastoin
🏗️ Internal changes (2)
- docs: align app guides with current CLI behavior (#29502) by @Weiko
- chore(onboarding): remove the welcome animation (#29680) by @etiennejouan
🎉 New contributors
- @Abhishek-B-R made their first contribution in #29176
- @AryaKesharwani made their first contribution in #29515
Full changelog (177 PRs)
- Sync MCP server tool lists through the MCP SDK and cache them on the entity (#28835) by @abdulrahmancodes
- Choose recipients for new inbox chats (#28925) by @bosiraphael
- Apply Ada participation rules (#28939) by @bosiraphael
- Let apps embed websites with microphone and camera access (#28944) by @bosiraphael
- fix(twenty-shared): reject two-digit years when parsing date-time strings (#29176) by @Abhishek-B-R
- feat(filter): add case-sensitive IS/IS_NOT operands for TEXT fields (#29201) by @etiennejouan
- Choose Ada replies from workspace modes (#29232) by @bosiraphael
- Recheck Ada reply rules before running a turn (#29233) by @bosiraphael
- Remove the record creation form feature flag (#29246) by @Weiko
- Make validation rules declarable in the app SDK (#29283) by @ijreilly
- Ensure one direct message thread per member pair (#29286) by @bosiraphael
- feat(billing): add billing arrangement entity and validation (#29321) by @etiennejouan
- Mount AI Overview behind the inbox flag (#29322) by @bosiraphael
- Expose the channel of each timeline thread (#29324) by @martmull
- Show the channel of each conversation in the messages list (#29325) by @martmull
- Render app conversations as chat bubbles (#29326) by @martmull
- Reply to app conversations from the thread (#29327) by @martmull
- Rename the Emails record tab to Messages (#29343) by @martmull
- Share access policies between GraphQL, REST and @definetool tools (#29364) by @prastoin
- [BREAKING_CHANGE] Let AI workflow steps run from their own config and permission scope (#29368) by @FelixMalfait
- Bundle tabler icons into twenty-ui's individual build (#29384) by @FelixMalfait
- Add user-scoped Microsoft Teams connection provider (#29427) by @ehconitin
- i18n - translations (#29430) by @twenty-pr
- Add user-scoped Fathom connection provider (#29433) by @ehconitin
- Run app disconnect hooks when a removed member's connections are transferred (#29435) by @ehconitin
- Resolve numeric twenty-ui theme tokens when CSS variables can't be read (#29436) by @Weiko
- Name permissions principals by role: main, limiting and app (#29452) by @charlesBochet
- Warn before a field change turns off validation rules (#29458) by @ijreilly
- Add an application role target kind (#29463) by @prastoin
- i18n - docs translations (#29465) by @twenty-pr
- Ship code interpreter sandbox scripts and let E2B sandboxes use a custom template (#29466) by @etiennejouan
- Fix duplicate AI component previews and empty sample data (#29471) by @Weiko
- chore: bump version to 2.56.0 (#29473) by @twenty-pr
- Discriminate permissions principals by type (#29475) by @charlesBochet
- Connect inbox behavior settings (#29476) by @bosiraphael
- i18n - docs translations (#29479) by @twenty-pr
- Derive repository permissions from the auth context (#29483) by @charlesBochet
- Use provider names on built-in connect cards in app preferences (#29496) by @ehconitin
- i18n - translations (#29497) by @twenty-pr
- Call recorder: add recorder styles for the bot camera tile (#29498) by @ehconitin
- i18n - translations (#29500) by @twenty-pr
- Drain API HTTP requests before flushing recorders and closing Nest (#29501) by @FelixMalfait
- docs: align app guides with current CLI behavior (#29502) by @Weiko
- Bound the whole API shutdown when sockets escape HTTP tracking (#29503) by @FelixMalfait
- i18n - docs translations (#29505) by @twenty-pr
- Fix AI step QA findings after the inline-config rework (#29506) by @FelixMalfait
- LinkedIn app: cap the conversations a history sync imports (#29507) by @martmull
- LinkedIn app: skip profile lookups that cannot change the outcome (#29509) by @martmull
- Hide the unread divider above the first message (#29511) by @bosiraphael
- Derive permission principals straight from the auth context (#29514) by @charlesBochet
- AI: add effort levels to Claude Haiku 5.5, Sonnet 5.5 and Opus 5.5 (#29515) by @AryaKesharwani
- Publish the affiliate program terms and link them from the application form (#29520) by @StephanieJoly4
- Keep zoom inside full-height front component widgets (#29521) by @bosiraphael
- Require a layer bucket for the Lambda logic function driver (#29522) by @etiennejouan
- chore(security): bump follow-redirects to 1.16.2 in the app lockfiles (#29523) by @mabdullahabaid
- i18n - translations (#29524) by @twenty-pr
- Write postcard content with ai.generate; mark /rest/ai/generate-text deprecated (#29525) by @FelixMalfait
- LinkedIn app: reply to conversations from Twenty through Unipile (#29526) by @martmull
- Remove viaApplication from the user auth context (#29527) by @charlesBochet
- chore(security): bump follow-redirects to 1.16.2 in the root and application dependency lockfiles (#29528) by @mabdullahabaid
- Simplify permissions utils: one event admission path, share keys in sharing (#29529) by @charlesBochet
- i18n - website translations (#29530) by @twenty-pr
- i18n - translations (#29531) by @twenty-pr
- Require the affiliate main channel URL (#29532) by @StephanieJoly4
- Name the AI run scope AiRunPermissionScope (#29534) by @charlesBochet
- i18n - website translations (#29535) by @twenty-pr
- Call recorder: fill the workspace logo plate (#29536) by @ehconitin
- Return 403 for REST permission denials and rework the CRUD permission specs (#29537) by @charlesBochet
- Remove the IS_PRIVATE_RECORD_ENABLED feature flag (#29538) by @charlesBochet
- i18n - translations (#29539) by @twenty-pr
- Lock property edits on system-managed fields in field settings (#29540) by @charlesBochet
- i18n - docs translations (#29542) by @twenty-pr
- Remove IS_WORKER_FAIRNESS_ENABLED, worker fairness is always on (#29543) by @martmull
- fix(CommonAPI): cap GraphQL find-many page size at QUERY_MAX_RECORDS (#29546) by @etiennejouan
- Guard metadata-modules endpoints with AccessPolicyGuard (#29547) by @prastoin
- CODE steps own their source instead of a hidden logic function (#29548) by @FelixMalfait
- i18n - translations (#29549) by @twenty-pr
- feat(billing): reject overlapping billing arrangements on insert (#29550) by @etiennejouan
- Use one side panel footer style everywhere (#29551) by @FelixMalfait
- Simplify AI model selection (#29553) by @bosiraphael
- Add a direct message sharing TODO and use an enum for the conversation type (#29554) by @bosiraphael
- Unify side panel footers (#29559) by @bosiraphael
- LinkedIn app: drop reply code comments, clarify the replies README note (#29561) by @martmull
- feat(front): pick the sending account from the Messages widget + button (#29562) by @martmull
- Derive repository object permissions from the permissions principal (#29563) by @charlesBochet
- i18n - translations (#29564) by @twenty-pr
- Add NATIVE_PAGE navigation menu items and a /workflows route (#29567) by @FelixMalfait
- Show the junction toggle for custom junction objects (#29570) by @charlesBochet
- Repair application dependency checksums that do not match the stored files (#29571) by @prastoin
- Add @definetool tools to the endpoint permission snapshot (#29573) by @prastoin
- Rewrite inbox channel grants without raw SQL (#29582) by @bosiraphael
- Guard core-modules endpoints with AccessPolicyGuard (#29586) by @prastoin
- Keep the Nx cache in the workspace on CI (#29587) by @charlesBochet
- chore(security): bump happy-dom to 20.14.6 in the root lockfile (#29588) by @mabdullahabaid
- Resolve permissions principals through one service (#29591) by @charlesBochet
- Evict cached record queries when a field is renamed or deleted (#29593) by @charlesBochet
- Run server integration tests on 24 shards and split the two slowest chat specs (#29594) by @charlesBochet
- Thin out line chart data labels that would overlap (#29595) by @FelixMalfait
- i18n - docs translations (#29596) by @twenty-pr
- Name the role grant on every record the allRecords grant path (#29602) by @charlesBochet
- Stop chat specs from waiting out every snooze between tests (#29603) by @charlesBochet
- Replace the field permission specs with one spec on both APIs (#29606) by @charlesBochet
- feat(getting-started): require a payment method to hide Getting started for good (#29607) by @etiennejouan
- Add operations to row level permission predicate groups (#29611) by @charlesBochet
- Remove Onboarding Packs mentions from pricing and FAQ (#29613) by @ijreilly
- Translate component labels with useLingui so they follow locale changes (#29614) by @charlesBochet
- Affiliate program: partner code in billing, clearer attribution rules, country list on the form (#29615) by @StephanieJoly4
- Fetch only what changed-files needs in discover-apps (#29617) by @FelixMalfait
- Delete timeline rows of destroyed messages and calendar events (#29619) by @neo773
- Rename CoreObjectNameSingular to StandardObjectNameSingular (#29623) by @FelixMalfait
- Compute role permissions as all records and row level grants (#29627) by @charlesBochet
- i18n - translations (#29637) by @twenty-pr
- i18n - website translations (#29641) by @twenty-pr
- i18n - translations (#29642) by @twenty-pr
- List MCP tools directly by default (#29656) by @FelixMalfait
- i18n - website translations (#29657) by @twenty-pr
- fix(billing): set Organization monthly fallback price to $52 (#29658) by @etiennejouan
- Make inbox notification badge red (#29660) by @bosiraphael
- Guard src/modules endpoints with AccessPolicyGuard and delete the legacy guards (#29661) by @prastoin
- Add required fields for PDL matches (#29662) by @bosiraphael
- i18n - translations (#29664) by @twenty-pr
- Allow clearing IMAP and SMTP port inputs (#29665) by @neo773
- feat(getting-started): add a completed state to onboarding cards (#29671) by @etiennejouan
- Center reference chips in AI chat (#29672) by @bosiraphael
- i18n - docs translations (#29673) by @twenty-pr
- Add the field metadata option syncable entity (#29674) by @FelixMalfait
- Add the shared assistant avatar renderer (#29677) by @bosiraphael
- Read records permissions directly on the server (#29678) by @charlesBochet
- Persist workspace assistant identity (#29679) by @bosiraphael
- chore(onboarding): remove the welcome animation (#29680) by @etiennejouan
- Move a board card back when the server rejects its update (#29682) by @FelixMalfait
- feat(onboarding): show the invite step only with invite suggestions (#29684) by @etiennejouan
- Expose the current user's records permissions in the nested shape (#29686) by @charlesBochet
- Render workflow enum array inputs as a multiselect (#29689) by @bosiraphael
- Check view access in one place for GraphQL, REST and the view tools (#29690) by @prastoin
- Ask for the fields a validation rule needs instead of rejecting the update (#29691) by @FelixMalfait
- Share the data model read policies between GraphQL, REST and tools (#29692) by @prastoin
- Share the agent access policies between GraphQL and the agent tools (#29693) by @prastoin
- Require a workspace member on the campaign send path (#29694) by @prastoin
- i18n - translations (#29697) by @twenty-pr
- i18n - website translations (#29698) by @twenty-pr
- i18n - translations (#29700) by @twenty-pr
- Read the current user's records permissions in the nested shape on the front (#29701) by @charlesBochet
- i18n - translations (#29705) by @twenty-pr
- i18n - website translations (#29706) by @twenty-pr
- Ship the application role target command in 2.56 (#29708) by @charlesBochet
- i18n - docs translations (#29709) by @twenty-pr
- Ask permission questions through PermissionsService (#29712) by @charlesBochet
- i18n - translations (#29714) by @twenty-pr
- Hide select options a validation rule would reject (#29716) by @FelixMalfait
- Tighten security of contributor setup (#29717) by @BOHEUS
- Keep text input errors below the field (#29721) by @bosiraphael
- Remove as unknown casts from specs outside twenty-server (#29722) by @charlesBochet
- i18n - translations (#29723) by @twenty-pr
- Use inbox icon for Conversations record tab (#29725) by @martmull
- Animate assistant avatars (#29726) by @bosiraphael
- Build assistant personalization controls (#29728) by @bosiraphael
- i18n - docs translations (#29730) by @twenty-pr
- Keep the legacy current user object permissions as deprecated fields (#29732) by @charlesBochet
- i18n - translations (#29734) by @twenty-pr
- Read record permission data through record-permission-orm (#29735) by @charlesBochet
- Remove as unknown casts from server database specs (#29736) by @charlesBochet
- Remove as unknown casts from server core and metadata specs (#29737) by @charlesBochet
- Remove as unknown casts from the remaining server specs (#29738) by @charlesBochet
- Move the partner code to a hidden /settings/partner page (#29739) by @etiennejouan
- i18n - translations (#29747) by @twenty-pr
- Escape identifiers in filter where conditions (#29749) by @charlesBochet
- i18n - docs translations (#29750) by @twenty-pr
- Wait for records permissions before opening the metadata gate (#29751) by @charlesBochet
- Set ORGANIZER on CalDAV events so servers send invitations (#29753) by @neo773
- Fix duplicated CalDAV events created from Twenty (#29754) by @neo773
- Scope core workflow reads to the calling application (#29755) by @prastoin
- i18n - website translations (#29756) by @twenty-pr
- i18n - translations (#29757) by @twenty-pr
- i18n - website translations (#29760) by @twenty-pr
- feat(getting-started): illustrate the mailbox card with the onboarding contacts preview (#29763) by @etiennejouan
- i18n - translations (#29766) by @twenty-pr
Full Changelog: twenty/v2.55.0...twenty/v2.56.0