twenty/v2.32.0

twentyhq/twentytwenty/v2.32.0Aug 27, 2026by twenty-pr[bot]

AI Summary

SDK updates for v2.32.0, focusing on Slack features (native agent replies), ORM v2 read path implementation, and usage limits.

Key Highlights

  • Slack native agent replies
  • ORM v2 read path
  • Usage limit entity

Breaking Changes

  • System record page layout
  • SidePanelExpandTarget callback

New Features

  • Usage limit entity
  • Rate-limit API requests from configured usage limits
  • Slack native agent replies and thinking status
  • Billing credit grant ledger
  • ORM v2 read path

Full Release Notes

<!-- generated-release-notes v1 -->

## ⚠️ Breaking changes

- System record page layout ([#23651](https://github.com/twentyhq/twenty/pull/23651)) by @prastoin
- feat(front): expand button and record actions in the side panel footer ([#23965](https://github.com/twentyhq/twenty/pull/23965)) by @FelixMalfait

## ✨ New features

- feat(twenty-slack): pass Slack conversation history to runAgent as messages ([#23821](https://github.com/twentyhq/twenty/pull/23821)) by @abdulrahmancodes
- feat(slack): native agent replies, thinking status everywhere ([#23886](https://github.com/twentyhq/twenty/pull/23886)) by @abdulrahmancodes
- feat(slack): give the assistant a concrete reply anatomy ([#23887](https://github.com/twentyhq/twenty/pull/23887)) by @abdulrahmancodes
- feat(campaign): move the campaign envelope fields above the body ([#23959](https://github.com/twentyhq/twenty/pull/23959)) by @FelixMalfait
- feat(billing): replace the credit balance column with a credit grant ledger ([#23973](https://github.com/twentyhq/twenty/pull/23973)) by @FelixMalfait
- feat(messaging): import recent messages as soon as an account connects ([#23983](https://github.com/twentyhq/twenty/pull/23983)) by @neo773
- feat(slack): act as the workspace member who tagged the bot ([#23985](https://github.com/twentyhq/twenty/pull/23985)) by @abdulrahmancodes
- feat(server): ORM v2, a TypeORM-free workspace read path behind a flag ([#23991](https://github.com/twentyhq/twenty/pull/23991)) by @charlesBochet
- feat(twenty-slack): stop Slack unfurling the record links in assistant replies ([#24054](https://github.com/twentyhq/twenty/pull/24054)) by @abdulrahmancodes
- feat(server): route findOne through the ORM v2 read path ([#24077](https://github.com/twentyhq/twenty/pull/24077)) by @charlesBochet
- feat(server): observe ORM v2 read-path usage with a metric ([#24086](https://github.com/twentyhq/twenty/pull/24086)) by @charlesBochet
- feat(server): route findDuplicates through the ORM v2 read path ([#24088](https://github.com/twentyhq/twenty/pull/24088)) by @charlesBochet
- feat(run-agent): scope run-as to the member's role and keep the application on the context ([#24089](https://github.com/twentyhq/twenty/pull/24089)) by @abdulrahmancodes
- feat(server): route groupBy through the ORM v2 read path ([#24092](https://github.com/twentyhq/twenty/pull/24092)) by @charlesBochet
- feat(twenty-slack): release the Slack team claim when the install is revoked on the Slack side ([#24097](https://github.com/twentyhq/twenty/pull/24097)) by @abdulrahmancodes
- feat(server): route nested relation loading through the ORM v2 read path ([#24101](https://github.com/twentyhq/twenty/pull/24101)) by @charlesBochet
- feat(twenty-slack): interactivity endpoint + native feedback buttons on assistant answers ([#24107](https://github.com/twentyhq/twenty/pull/24107)) by @abdulrahmancodes
- feat(server): load mutation nested relations through the ORM v2 read path ([#24113](https://github.com/twentyhq/twenty/pull/24113)) by @charlesBochet
- feat: support gt/lt comparisons on select and rating filters ([#24116](https://github.com/twentyhq/twenty/pull/24116)) by @thomtrp
- feat(server): add the ORM v2 mutation statement layer (update/delete/soft-delete/restore) ([#24118](https://github.com/twentyhq/twenty/pull/24118)) by @charlesBochet
- feat(server): route delete, destroy and restore through the ORM v2 write path ([#24131](https://github.com/twentyhq/twenty/pull/24131)) by @charlesBochet
- feat(server): route update through the ORM v2 write path ([#24140](https://github.com/twentyhq/twenty/pull/24140)) by @charlesBochet
- feat(server): route create, upsert and merge through the ORM v2 write path ([#24145](https://github.com/twentyhq/twenty/pull/24145)) by @charlesBochet
- feat(server): ORM v2 workspace repository read-family methods ([#24170](https://github.com/twentyhq/twenty/pull/24170)) by @charlesBochet
- feat(server): route module workspace repositories through ORM v2 and drop the EntityMetadata build (Stage B + C) ([#24179](https://github.com/twentyhq/twenty/pull/24179)) by @charlesBochet
- feat(server): eliminate v1 ORM from workspace write transactions on the flag ([#24182](https://github.com/twentyhq/twenty/pull/24182)) by @charlesBochet
- feat(metadata): writability levels on object and field metadata ([#24208](https://github.com/twentyhq/twenty/pull/24208)) by @abdulrahmancodes
- feat(sdk): let apps set writability on objects and fields ([#24255](https://github.com/twentyhq/twenty/pull/24255)) by @abdulrahmancodes
- feat(front): delete a workflow step from the diagram node ([#24292](https://github.com/twentyhq/twenty/pull/24292)) by @thomtrp

## 💅 Improvements & UX

- Twenty-front: Record Calendar multi drag functionality ([#23316](https://github.com/twentyhq/twenty/pull/23316)) by @git-init-priyanshu
- Implement MutationObserver in the front component worker sandbox ([#23489](https://github.com/twentyhq/twenty/pull/23489)) by @bosiraphael
- Remove the frontend's remaining view.openRecordIn plumbing ([#23627](https://github.com/twentyhq/twenty/pull/23627)) by @FelixMalfait
- Allow going back to the previous onboarding step ([#23716](https://github.com/twentyhq/twenty/pull/23716)) by @bosiraphael
- Make localStorage and sessionStorage work in app front components ([#23761](https://github.com/twentyhq/twenty/pull/23761)) by @bosiraphael
- Share front component dependencies through a per-app bundle ([#23773](https://github.com/twentyhq/twenty/pull/23773)) by @bosiraphael
- Add a deprecated attribute to app manifest variables ([#23868](https://github.com/twentyhq/twenty/pull/23868)) by @bosiraphael
- Redirect to companies and collapse the chat when workspace setup ends ([#23904](https://github.com/twentyhq/twenty/pull/23904)) by @bosiraphael
- Add native call recording transcript tab to the calendar event record page ([#23909](https://github.com/twentyhq/twenty/pull/23909)) by @ehconitin
- Split metadata loader and filter responsibilities ([#23954](https://github.com/twentyhq/twenty/pull/23954)) by @FelixMalfait
- Handle Microsoft calendar token refresh failures gracefully ([#23958](https://github.com/twentyhq/twenty/pull/23958)) by @neo773
- Enrich the onboarding chat kickoff with person and workspace context ([#23970](https://github.com/twentyhq/twenty/pull/23970)) by @bosiraphael
- Stop retrying the SSE event stream once the client is signed out ([#23979](https://github.com/twentyhq/twenty/pull/23979)) by @FelixMalfait
- Add native call recording summary tab to the calendar event record page ([#23992](https://github.com/twentyhq/twenty/pull/23992)) by @ehconitin
- Disable jest coverage locally and cap twenty-server test workers ([#24008](https://github.com/twentyhq/twenty/pull/24008)) by @bosiraphael
- Ask about CRM migration at the start of the workspace setup chat ([#24013](https://github.com/twentyhq/twenty/pull/24013)) by @bosiraphael
- Send file attachments when answering an AI chat question ([#24017](https://github.com/twentyhq/twenty/pull/24017)) by @bosiraphael
- Fix record-page reconcile self-collision on user-added FIELDS widgets ([#24022](https://github.com/twentyhq/twenty/pull/24022)) by @prastoin
- Align DPA entity roles and signatures ([#24026](https://github.com/twentyhq/twenty/pull/24026)) by @FelixMalfait
- Remove the send Slack message front component ([#24031](https://github.com/twentyhq/twenty/pull/24031)) by @abdulrahmancodes
- Make server-served front same-origin by default and surface CORS misconfig ([#24041](https://github.com/twentyhq/twenty/pull/24041)) by @FelixMalfait
- Remove alpha sufix to npm packages ([#24059](https://github.com/twentyhq/twenty/pull/24059)) by @prastoin
- Reorganize twenty-front-component-renderer into feature folders ([#24132](https://github.com/twentyhq/twenty/pull/24132)) by @bosiraphael
- Install changed apps on the preview environment, document app previews for external repos ([#24143](https://github.com/twentyhq/twenty/pull/24143)) by @FelixMalfait
- Persist admin panel chat filters across navigation ([#24144](https://github.com/twentyhq/twenty/pull/24144)) by @bosiraphael
- Skip contact creation when the connected account owner is gone ([#24151](https://github.com/twentyhq/twenty/pull/24151)) by @thomtrp
- Fix duplicate key errors during message import ([#24154](https://github.com/twentyhq/twenty/pull/24154)) by @thomtrp
- Show pinned command menu actions as icons on mobile headers ([#24156](https://github.com/twentyhq/twenty/pull/24156)) by @FelixMalfait
- Refresh the front component limitations doc ([#24157](https://github.com/twentyhq/twenty/pull/24157)) by @bosiraphael
- Make the mobile navigation menu a real home page ([#24168](https://github.com/twentyhq/twenty/pull/24168)) by @FelixMalfait
- Remove selection checkboxes and the aggregate footer on mobile ([#24172](https://github.com/twentyhq/twenty/pull/24172)) by @FelixMalfait
- AI chat: never fail silently on exhausted credits ([#24175](https://github.com/twentyhq/twenty/pull/24175)) by @FelixMalfait
- Give the mobile settings header its page title ([#24176](https://github.com/twentyhq/twenty/pull/24176)) by @FelixMalfait
- Stop the welcome title overflowing on mobile ([#24183](https://github.com/twentyhq/twenty/pull/24183)) by @FelixMalfait
- Scroll the tab row on mobile instead of hiding tabs behind a dropdown ([#24184](https://github.com/twentyhq/twenty/pull/24184)) by @FelixMalfait
- Surface the real ClickHouse error when an insert fails ([#24189](https://github.com/twentyhq/twenty/pull/24189)) by @thomtrp
- Make Other an explicit option in the AI chat question card ([#24193](https://github.com/twentyhq/twenty/pull/24193)) by @bosiraphael
- Polyfill navigator.clipboard.writeText for front components ([#24195](https://github.com/twentyhq/twenty/pull/24195)) by @FelixMalfait
- Point CI dispatches at twentyhq/twenty-factory ([#24196](https://github.com/twentyhq/twenty/pull/24196)) by @FelixMalfait
- Abstract inbound email retrieval behind message sources ([#24201](https://github.com/twentyhq/twenty/pull/24201)) by @FelixMalfait
- Sample AI traces at 100% in Sentry and attribute AI calls ([#24207](https://github.com/twentyhq/twenty/pull/24207)) by @bosiraphael
- Interface scale preference via root CSS zoom ([#24209](https://github.com/twentyhq/twenty/pull/24209)) by @FelixMalfait
- Ask the onboarding CRM migration question with the ask_questions tool ([#24214](https://github.com/twentyhq/twenty/pull/24214)) by @bosiraphael
- Remove the dedicated media-notes example app workflow ([#24216](https://github.com/twentyhq/twenty/pull/24216)) by @FelixMalfait
- Fix orphaned mirrored field permission blocking relation field updates ([#24220](https://github.com/twentyhq/twenty/pull/24220)) by @FelixMalfait
- Merge language and scale into one Interface settings section ([#24222](https://github.com/twentyhq/twenty/pull/24222)) by @FelixMalfait
- ORM v2: TypeORM parity for joins / andSelect / distinctOn ([#24225](https://github.com/twentyhq/twenty/pull/24225)) by @charlesBochet
- Float the mobile bottom bar over content with a glass style ([#24229](https://github.com/twentyhq/twenty/pull/24229)) by @FelixMalfait
- ORM v2: relation-keyed where clauses ([#24230](https://github.com/twentyhq/twenty/pull/24230)) by @charlesBochet
- Turn the mobile bottom bar into the home page's tab bar ([#24232](https://github.com/twentyhq/twenty/pull/24232)) by @FelixMalfait
- Restore primary pinned actions with footer-owned width measurement ([#24235](https://github.com/twentyhq/twenty/pull/24235)) by @FelixMalfait
- Give the mobile record header a proper title treatment ([#24251](https://github.com/twentyhq/twenty/pull/24251)) by @FelixMalfait
- Make cookie sessions the only web auth path ([#24257](https://github.com/twentyhq/twenty/pull/24257)) by @FelixMalfait
- Make deactivated objects editable from settings ([#24258](https://github.com/twentyhq/twenty/pull/24258)) by @thomtrp
- fix(billing) - void unpaid upgrade invoices so a failed charge cannot be collected later ([#24264](https://github.com/twentyhq/twenty/pull/24264)) by @etiennejouan
- Show exact date on hover for timeline activity dates ([#24265](https://github.com/twentyhq/twenty/pull/24265)) by @FelixMalfait
- Float the mobile bottom bar again and reserve its footprint in page content ([#24267](https://github.com/twentyhq/twenty/pull/24267)) by @FelixMalfait
- Stop fetching unused morph targets in the timeline query ([#24269](https://github.com/twentyhq/twenty/pull/24269)) by @FelixMalfait
- Skip relation queries for unset to-one join columns ([#24270](https://github.com/twentyhq/twenty/pull/24270)) by @FelixMalfait
- Move presentational primitives from twenty-front to twenty-ui ([#24277](https://github.com/twentyhq/twenty/pull/24277)) by @bosiraphael
- Fix MCP tool calls reporting structured failures as success ([#24280](https://github.com/twentyhq/twenty/pull/24280)) by @etiennejouan
- refactor(i18n) - share the message-id hash and the translatable registry [1/6] ([#24300](https://github.com/twentyhq/twenty/pull/24300)) by @FelixMalfait
- Fix dashboard duplication rejecting relation-traversal chart filters ([#24301](https://github.com/twentyhq/twenty/pull/24301)) by @ehconitin

## 🐛 Bug fixes

- fix: add SettingsRolesQueryEffect to invite tab ([#23320](https://github.com/twentyhq/twenty/pull/23320)) by @atharv-sys32
- fix(server,shared): validate view filter values on app manifest sync ([#23848](https://github.com/twentyhq/twenty/pull/23848)) by @thomtrp
- fix(twenty-server): resolve uninstall hook from application column set at sync time ([#23908](https://github.com/twentyhq/twenty/pull/23908)) by @ehconitin
- fix: preserve morph-related records when merging people ([#23945](https://github.com/twentyhq/twenty/pull/23945)) by @DebadityaHait
- fix(front): prevent stale timeline diff from crashing the Timeline tab ([#23972](https://github.com/twentyhq/twenty/pull/23972)) by @thomtrp
- fix(workflow): honor defaultSettings input for CODE/LOGIC_FUNCTION step creation ([#23976](https://github.com/twentyhq/twenty/pull/23976)) by @unchainedio
- fix(ui): render avatar image as CSS background to fix Safari Kanban repaint ([#23978](https://github.com/twentyhq/twenty/pull/23978)) by @thomtrp
- fix(server): validate row level permission predicate values at write time ([#23999](https://github.com/twentyhq/twenty/pull/23999)) by @thomtrp
- fix(upgrade): skip 2.20 campaign view columns whose field does not exist yet ([#24003](https://github.com/twentyhq/twenty/pull/24003)) by @neo773
- fix(messaging): stop syncing unsubscribe requests ([#24007](https://github.com/twentyhq/twenty/pull/24007)) by @neo773
- fix(front): select first matching option on enter in multi-select input ([#24015](https://github.com/twentyhq/twenty/pull/24015)) by @thomtrp
- fix: validate chart filter operands and values on app manifest sync ([#24027](https://github.com/twentyhq/twenty/pull/24027)) by @thomtrp
- fix(messaging): stop logging deleted-message 404s during Gmail import ([#24030](https://github.com/twentyhq/twenty/pull/24030)) by @neo773
- fix(sync): only mark channels FAILED_INSUFFICIENT_PERMISSIONS on documented permanent account errors ([#24035](https://github.com/twentyhq/twenty/pull/24035)) by @neo773
- fix(front): hide the remove icon on the last invite-team input ([#24039](https://github.com/twentyhq/twenty/pull/24039)) by @FelixMalfait
- fix(front): stop showing No results found while command menu items are displayed ([#24040](https://github.com/twentyhq/twenty/pull/24040)) by @thomtrp
- fix(billing): skip deleted workspaces in the credit balance backfill ([#24067](https://github.com/twentyhq/twenty/pull/24067)) by @FelixMalfait
- fix(billing): skip the rollover for workspaces that no longer exist ([#24068](https://github.com/twentyhq/twenty/pull/24068)) by @FelixMalfait
- fix(calendar): stop CalDAV errors falling to UNKNOWN and retrying forever ([#24079](https://github.com/twentyhq/twenty/pull/24079)) by @neo773
- fix(front): make logout navigate once (unbreaks the invite e2e) ([#24128](https://github.com/twentyhq/twenty/pull/24128)) by @charlesBochet
- fix(messaging): default new channels to METADATA visibility instead of SHARE_EVERYTHING ([#24135](https://github.com/twentyhq/twenty/pull/24135)) by @neo773
- fix(workflow): keep converging steps when an if/else branch is skipped ([#24136](https://github.com/twentyhq/twenty/pull/24136)) by @thomtrp
- fix(front): show Select dropdowns above modals and fix the rollover credits label ([#24137](https://github.com/twentyhq/twenty/pull/24137)) by @FelixMalfait
- fix(billing): map already-subscribed checkout retry to a user error ([#24150](https://github.com/twentyhq/twenty/pull/24150)) by @thomtrp
- fix(postcard): make the app-prod-parity postcard e2e suite pass ([#24167](https://github.com/twentyhq/twenty/pull/24167)) by @charlesBochet
- fix(front): hide record table header when empty on mobile ([#24185](https://github.com/twentyhq/twenty/pull/24185)) by @FelixMalfait
- fix(server): quote the alias in ORM v2 record-identifier where clauses ([#24213](https://github.com/twentyhq/twenty/pull/24213)) by @charlesBochet
- fix(server): fail FIND_RECORDS cleanly on an uncomputable filter ([#24215](https://github.com/twentyhq/twenty/pull/24215)) by @thomtrp
- fix(server): add findAndCount to the ORM v2 workspace repository ([#24244](https://github.com/twentyhq/twenty/pull/24244)) by @charlesBochet
- fix(front): wrap relation card rows in RecordDetailRecordsListContainer ([#24261](https://github.com/twentyhq/twenty/pull/24261)) by @thomtrp
- fix(front): stop sending the dormant token pair on the SSE stream under cookie auth ([#24274](https://github.com/twentyhq/twenty/pull/24274)) by @FelixMalfait
- fix(front): recover from a session cookie the server does not accept ([#24275](https://github.com/twentyhq/twenty/pull/24275)) by @FelixMalfait
- fix(server): report an unauthenticated GraphQL request as UNAUTHENTICATED, not FORBIDDEN ([#24276](https://github.com/twentyhq/twenty/pull/24276)) by @FelixMalfait
- fix(twenty-slack): point the README setup link at an absolute url ([#24288](https://github.com/twentyhq/twenty/pull/24288)) by @abdulrahmancodes
- fix(server): map ORM v2 driver errors to typed exceptions ([#24290](https://github.com/twentyhq/twenty/pull/24290)) by @thomtrp
- fix(user-workspace): stop pretending role targets are soft deleted ([#24295](https://github.com/twentyhq/twenty/pull/24295)) by @FelixMalfait

## ⚡ Performance

- perf(server): remove the compact-storage flag, slice cache demotion, use a plain LIMIT on find-many ([#23980](https://github.com/twentyhq/twenty/pull/23980)) by @charlesBochet
- perf(server): cut Sentry instrumentation overhead and stop packing the working set ([#24019](https://github.com/twentyhq/twenty/pull/24019)) by @charlesBochet
- perf(server): workspace-cache packing budget + class-validator fast paths ([#24083](https://github.com/twentyhq/twenty/pull/24083)) by @charlesBochet
- perf(server): skip the ORM EntityMetadata build for ORM v2 workspaces at the cache layer ([#24219](https://github.com/twentyhq/twenty/pull/24219)) by @charlesBochet

## 🔧 Developer & API

- Add GraphQL direct execution cost metrics ([#23655](https://github.com/twentyhq/twenty/pull/23655)) by @Weiko
- Refactor CalDAV event fetching to use davRequest API ([#23956](https://github.com/twentyhq/twenty/pull/23956)) by @neo773
- Migrate call-recorder and fireflies to twenty-sdk 2.31.0-alpha.1 ([#24016](https://github.com/twentyhq/twenty/pull/24016)) by @prastoin
- Fireflies app settings tab with API-key-gated call history backfill ([#24152](https://github.com/twentyhq/twenty/pull/24152)) by @ehconitin
- Extract provider-neutral webhook handlers from SES-specific services ([#24200](https://github.com/twentyhq/twenty/pull/24200)) by @FelixMalfait
- App media recording via standard web API polyfills (compare with #24053) ([#24203](https://github.com/twentyhq/twenty/pull/24203)) by @FelixMalfait

<details>
<summary>🏗️ Internal changes (19)</summary>

- chore(slack): bump app version to 0.3.0 ([#23996](https://github.com/twentyhq/twenty/pull/23996)) by @abdulrahmancodes
- chore: set npm packages to 2.31.0-alpha.1 ([#24011](https://github.com/twentyhq/twenty/pull/24011)) by @prastoin
- test(server): delete service unit specs ([#24094](https://github.com/twentyhq/twenty/pull/24094)) by @charlesBochet
- refactor(server): extract pure service logic into utils ([#24100](https://github.com/twentyhq/twenty/pull/24100)) by @charlesBochet
- test(server): integration coverage for messaging and calendar sync ([#24104](https://github.com/twentyhq/twenty/pull/24104)) by @neo773
- test(server): IMAP and CalDAV integration tests against real servers ([#24105](https://github.com/twentyhq/twenty/pull/24105)) by @neo773
- chore: remove low-value comments ([#24114](https://github.com/twentyhq/twenty/pull/24114)) by @charlesBochet
- ci: unbreak CI E2E Main (same-origin front + fix the specs behind the login gate) ([#24115](https://github.com/twentyhq/twenty/pull/24115)) by @charlesBochet
- chore: remove low-value short comments ([#24117](https://github.com/twentyhq/twenty/pull/24117)) by @charlesBochet
- chore: remove low-value long comments ([#24125](https://github.com/twentyhq/twenty/pull/24125)) by @charlesBochet
- refactor(server): name workspace-cache transforms compact/serialize/pack ([#24129](https://github.com/twentyhq/twenty/pull/24129)) by @charlesBochet
- chore: replace JSDoc blocks on internal utils with short comments ([#24130](https://github.com/twentyhq/twenty/pull/24130)) by @charlesBochet
- ci: serialize the i18n workflows per branch ([#24148](https://github.com/twentyhq/twenty/pull/24148)) by @charlesBochet
- docs: keep JSX tags out of translatable prose so Crowdin can rebuild ([#24158](https://github.com/twentyhq/twenty/pull/24158)) by @charlesBochet
- test(server): cover outbound messaging and calendar providers ([#24164](https://github.com/twentyhq/twenty/pull/24164)) by @neo773
- test(server): cover workflow email and calendar actions across providers ([#24181](https://github.com/twentyhq/twenty/pull/24181)) by @neo773
- test(twenty-slack): cover the app end to end against a mocked Slack workspace ([#24192](https://github.com/twentyhq/twenty/pull/24192)) by @abdulrahmancodes
- refactor(front): support multiple widget header actions ([#24204](https://github.com/twentyhq/twenty/pull/24204)) by @ehconitin
- refactor(twenty-orm): replace scoped repository save() with insert/update ([#24294](https://github.com/twentyhq/twenty/pull/24294)) by @FelixMalfait

</details>

## 🎉 New contributors

- @DebadityaHait made their first contribution in https://github.com/twentyhq/twenty/pull/23945
- @unchainedio made their first contribution in https://github.com/twentyhq/twenty/pull/23976
- @atharv-sys32 made their first contribution in https://github.com/twentyhq/twenty/pull/23320

<details>
<summary>Full changelog (208 PRs)</summary>

- Twenty-front: Record Calendar multi drag functionality ([#23316](https://github.com/twentyhq/twenty/pull/23316)) by @git-init-priyanshu
- fix: add SettingsRolesQueryEffect to invite tab ([#23320](https://github.com/twentyhq/twenty/pull/23320)) by @atharv-sys32
- Implement MutationObserver in the front component worker sandbox ([#23489](https://github.com/twentyhq/twenty/pull/23489)) by @bosiraphael
- Remove the frontend's remaining view.openRecordIn plumbing ([#23627](https://github.com/twentyhq/twenty/pull/23627)) by @FelixMalfait
- System record page layout ([#23651](https://github.com/twentyhq/twenty/pull/23651)) by @prastoin
- Add GraphQL direct execution cost metrics ([#23655](https://github.com/twentyhq/twenty/pull/23655)) by @Weiko
- Allow going back to the previous onboarding step ([#23716](https://github.com/twentyhq/twenty/pull/23716)) by @bosiraphael
- Make localStorage and sessionStorage work in app front components ([#23761](https://github.com/twentyhq/twenty/pull/23761)) by @bosiraphael
- Share front component dependencies through a per-app bundle ([#23773](https://github.com/twentyhq/twenty/pull/23773)) by @bosiraphael
- feat(twenty-slack): pass Slack conversation history to runAgent as messages ([#23821](https://github.com/twentyhq/twenty/pull/23821)) by @abdulrahmancodes
- fix(server,shared): validate view filter values on app manifest sync ([#23848](https://github.com/twentyhq/twenty/pull/23848)) by @thomtrp
- Add a deprecated attribute to app manifest variables ([#23868](https://github.com/twentyhq/twenty/pull/23868)) by @bosiraphael
- feat(slack): native agent replies, thinking status everywhere ([#23886](https://github.com/twentyhq/twenty/pull/23886)) by @abdulrahmancodes
- feat(slack): give the assistant a concrete reply anatomy ([#23887](https://github.com/twentyhq/twenty/pull/23887)) by @abdulrahmancodes
- Redirect to companies and collapse the chat when workspace setup ends ([#23904](https://github.com/twentyhq/twenty/pull/23904)) by @bosiraphael
- fix(twenty-server): resolve uninstall hook from application column set at sync time ([#23908](https://github.com/twentyhq/twenty/pull/23908)) by @ehconitin
- Add native call recording transcript tab to the calendar event record page ([#23909](https://github.com/twentyhq/twenty/pull/23909)) by @ehconitin
- fix: preserve morph-related records when merging people ([#23945](https://github.com/twentyhq/twenty/pull/23945)) by @DebadityaHait
- Split metadata loader and filter responsibilities ([#23954](https://github.com/twentyhq/twenty/pull/23954)) by @FelixMalfait
- Refactor CalDAV event fetching to use davRequest API ([#23956](https://github.com/twentyhq/twenty/pull/23956)) by @neo773
- Handle Microsoft calendar token refresh failures gracefully ([#23958](https://github.com/twentyhq/twenty/pull/23958)) by @neo773
- feat(campaign): move the campaign envelope fields above the body ([#23959](https://github.com/twentyhq/twenty/pull/23959)) by @FelixMalfait
- feat(front): expand button and record actions in the side panel footer ([#23965](https://github.com/twentyhq/twenty/pull/23965)) by @FelixMalfait
- i18n - translations ([#23966](https://github.com/twentyhq/twenty/pull/23966)) by @github-actions
- chore: bump version to 2.31.0 ([#23967](https://github.com/twentyhq/twenty/pull/23967)) by @twenty-pr
- Enrich the onboarding chat kickoff with person and workspace context ([#23970](https://github.com/twentyhq/twenty/pull/23970)) by @bosiraphael
- fix(front): prevent stale timeline diff from crashing the Timeline tab ([#23972](https://github.com/twentyhq/twenty/pull/23972)) by @thomtrp
- feat(billing): replace the credit balance column with a credit grant ledger ([#23973](https://github.com/twentyhq/twenty/pull/23973)) by @FelixMalfait
- i18n - translations ([#23974](https://github.com/twentyhq/twenty/pull/23974)) by @github-actions
- fix(workflow): honor defaultSettings input for CODE/LOGIC_FUNCTION step creation ([#23976](https://github.com/twentyhq/twenty/pull/23976)) by @unchainedio
- fix(ui): render avatar image as CSS background to fix Safari Kanban repaint ([#23978](https://github.com/twentyhq/twenty/pull/23978)) by @thomtrp
- Stop retrying the SSE event stream once the client is signed out ([#23979](https://github.com/twentyhq/twenty/pull/23979)) by @FelixMalfait
- perf(server): remove the compact-storage flag, slice cache demotion, use a plain LIMIT on find-many ([#23980](https://github.com/twentyhq/twenty/pull/23980)) by @charlesBochet
- feat(messaging): import recent messages as soon as an account connects ([#23983](https://github.com/twentyhq/twenty/pull/23983)) by @neo773
- feat(slack): act as the workspace member who tagged the bot ([#23985](https://github.com/twentyhq/twenty/pull/23985)) by @abdulrahmancodes
- chore: sync AI model catalog from models.dev ([#23988](https://github.com/twentyhq/twenty/pull/23988)) by @github-actions
- feat(server): ORM v2, a TypeORM-free workspace read path behind a flag ([#23991](https://github.com/twentyhq/twenty/pull/23991)) by @charlesBochet
- Add native call recording summary tab to the calendar event record page ([#23992](https://github.com/twentyhq/twenty/pull/23992)) by @ehconitin
- i18n - translations ([#23993](https://github.com/twentyhq/twenty/pull/23993)) by @github-actions
- i18n - translations ([#23995](https://github.com/twentyhq/twenty/pull/23995)) by @github-actions
- chore(slack): bump app version to 0.3.0 ([#23996](https://github.com/twentyhq/twenty/pull/23996)) by @abdulrahmancodes
- fix(server): validate row level permission predicate values at write time ([#23999](https://github.com/twentyhq/twenty/pull/23999)) by @thomtrp
- fix(upgrade): skip 2.20 campaign view columns whose field does not exist yet ([#24003](https://github.com/twentyhq/twenty/pull/24003)) by @neo773
- i18n - translations ([#24006](https://github.com/twentyhq/twenty/pull/24006)) by @github-actions
- fix(messaging): stop syncing unsubscribe requests ([#24007](https://github.com/twentyhq/twenty/pull/24007)) by @neo773
- Disable jest coverage locally and cap twenty-server test workers ([#24008](https://github.com/twentyhq/twenty/pull/24008)) by @bosiraphael
- i18n - translations ([#24010](https://github.com/twentyhq/twenty/pull/24010)) by @github-actions
- chore: set npm packages to 2.31.0-alpha.1 ([#24011](https://github.com/twentyhq/twenty/pull/24011)) by @prastoin
- Ask about CRM migration at the start of the workspace setup chat ([#24013](https://github.com/twentyhq/twenty/pull/24013)) by @bosiraphael
- i18n - translations ([#24014](https://github.com/twentyhq/twenty/pull/24014)) by @github-actions
- fix(front): select first matching option on enter in multi-select input ([#24015](https://github.com/twentyhq/twenty/pull/24015)) by @thomtrp
- Migrate call-recorder and fireflies to twenty-sdk 2.31.0-alpha.1 ([#24016](https://github.com/twentyhq/twenty/pull/24016)) by @prastoin
- Send file attachments when answering an AI chat question ([#24017](https://github.com/twentyhq/twenty/pull/24017)) by @bosiraphael
- i18n - docs translations ([#24018](https://github.com/twentyhq/twenty/pull/24018)) by @github-actions
- perf(server): cut Sentry instrumentation overhead and stop packing the working set ([#24019](https://github.com/twentyhq/twenty/pull/24019)) by @charlesBochet
- Fix record-page reconcile self-collision on user-added FIELDS widgets ([#24022](https://github.com/twentyhq/twenty/pull/24022)) by @prastoin
- Align DPA entity roles and signatures ([#24026](https://github.com/twentyhq/twenty/pull/24026)) by @FelixMalfait
- fix: validate chart filter operands and values on app manifest sync ([#24027](https://github.com/twentyhq/twenty/pull/24027)) by @thomtrp
- fix(messaging): stop logging deleted-message 404s during Gmail import ([#24030](https://github.com/twentyhq/twenty/pull/24030)) by @neo773
- Remove the send Slack message front component ([#24031](https://github.com/twentyhq/twenty/pull/24031)) by @abdulrahmancodes
- fix(sync): only mark channels FAILED_INSUFFICIENT_PERMISSIONS on documented permanent account errors ([#24035](https://github.com/twentyhq/twenty/pull/24035)) by @neo773
- fix(front): hide the remove icon on the last invite-team input ([#24039](https://github.com/twentyhq/twenty/pull/24039)) by @FelixMalfait
- fix(front): stop showing No results found while command menu items are displayed ([#24040](https://github.com/twentyhq/twenty/pull/24040)) by @thomtrp
- Make server-served front same-origin by default and surface CORS misconfig ([#24041](https://github.com/twentyhq/twenty/pull/24041)) by @FelixMalfait
- feat(twenty-slack): stop Slack unfurling the record links in assistant replies ([#24054](https://github.com/twentyhq/twenty/pull/24054)) by @abdulrahmancodes
- i18n - docs translations ([#24055](https://github.com/twentyhq/twenty/pull/24055)) by @github-actions
- i18n - translations ([#24057](https://github.com/twentyhq/twenty/pull/24057)) by @github-actions
- i18n - translations ([#24058](https://github.com/twentyhq/twenty/pull/24058)) by @github-actions
- Remove alpha sufix to npm packages ([#24059](https://github.com/twentyhq/twenty/pull/24059)) by @prastoin
- chore: bump version to 2.32.0 ([#24061](https://github.com/twentyhq/twenty/pull/24061)) by @twenty-pr
- i18n - translations ([#24062](https://github.com/twentyhq/twenty/pull/24062)) by @github-actions
- i18n - docs translations ([#24064](https://github.com/twentyhq/twenty/pull/24064)) by @github-actions
- fix(billing): skip deleted workspaces in the credit balance backfill ([#24067](https://github.com/twentyhq/twenty/pull/24067)) by @FelixMalfait
- fix(billing): skip the rollover for workspaces that no longer exist ([#24068](https://github.com/twentyhq/twenty/pull/24068)) by @FelixMalfait
- i18n - translations ([#24073](https://github.com/twentyhq/twenty/pull/24073)) by @github-actions
- feat(server): route findOne through the ORM v2 read path ([#24077](https://github.com/twentyhq/twenty/pull/24077)) by @charlesBochet
- fix(calendar): stop CalDAV errors falling to UNKNOWN and retrying forever ([#24079](https://github.com/twentyhq/twenty/pull/24079)) by @neo773
- i18n - docs translations ([#24080](https://github.com/twentyhq/twenty/pull/24080)) by @github-actions
- perf(server): workspace-cache packing budget + class-validator fast paths ([#24083](https://github.com/twentyhq/twenty/pull/24083)) by @charlesBochet
- feat(server): observe ORM v2 read-path usage with a metric ([#24086](https://github.com/twentyhq/twenty/pull/24086)) by @charlesBochet
- feat(server): route findDuplicates through the ORM v2 read path ([#24088](https://github.com/twentyhq/twenty/pull/24088)) by @charlesBochet
- feat(run-agent): scope run-as to the member's role and keep the application on the context ([#24089](https://github.com/twentyhq/twenty/pull/24089)) by @abdulrahmancodes
- feat(server): route groupBy through the ORM v2 read path ([#24092](https://github.com/twentyhq/twenty/pull/24092)) by @charlesBochet
- test(server): delete service unit specs ([#24094](https://github.com/twentyhq/twenty/pull/24094)) by @charlesBochet
- feat(twenty-slack): release the Slack team claim when the install is revoked on the Slack side ([#24097](https://github.com/twentyhq/twenty/pull/24097)) by @abdulrahmancodes
- i18n - translations ([#24099](https://github.com/twentyhq/twenty/pull/24099)) by @github-actions
- refactor(server): extract pure service logic into utils ([#24100](https://github.com/twentyhq/twenty/pull/24100)) by @charlesBochet
- feat(server): route nested relation loading through the ORM v2 read path ([#24101](https://github.com/twentyhq/twenty/pull/24101)) by @charlesBochet
- i18n - translations ([#24102](https://github.com/twentyhq/twenty/pull/24102)) by @github-actions
- test(server): integration coverage for messaging and calendar sync ([#24104](https://github.com/twentyhq/twenty/pull/24104)) by @neo773
- test(server): IMAP and CalDAV integration tests against real servers ([#24105](https://github.com/twentyhq/twenty/pull/24105)) by @neo773
- feat(twenty-slack): interactivity endpoint + native feedback buttons on assistant answers ([#24107](https://github.com/twentyhq/twenty/pull/24107)) by @abdulrahmancodes
- chore: sync AI model catalog from models.dev ([#24110](https://github.com/twentyhq/twenty/pull/24110)) by @github-actions
- feat(server): load mutation nested relations through the ORM v2 read path ([#24113](https://github.com/twentyhq/twenty/pull/24113)) by @charlesBochet
- chore: remove low-value comments ([#24114](https://github.com/twentyhq/twenty/pull/24114)) by @charlesBochet
- ci: unbreak CI E2E Main (same-origin front + fix the specs behind the login gate) ([#24115](https://github.com/twentyhq/twenty/pull/24115)) by @charlesBochet
- feat: support gt/lt comparisons on select and rating filters ([#24116](https://github.com/twentyhq/twenty/pull/24116)) by @thomtrp
- chore: remove low-value short comments ([#24117](https://github.com/twentyhq/twenty/pull/24117)) by @charlesBochet
- feat(server): add the ORM v2 mutation statement layer (update/delete/soft-delete/restore) ([#24118](https://github.com/twentyhq/twenty/pull/24118)) by @charlesBochet
- chore: remove low-value long comments ([#24125](https://github.com/twentyhq/twenty/pull/24125)) by @charlesBochet
- i18n - translations ([#24126](https://github.com/twentyhq/twenty/pull/24126)) by @github-actions
- fix(front): make logout navigate once (unbreaks the invite e2e) ([#24128](https://github.com/twentyhq/twenty/pull/24128)) by @charlesBochet
- refactor(server): name workspace-cache transforms compact/serialize/pack ([#24129](https://github.com/twentyhq/twenty/pull/24129)) by @charlesBochet
- chore: replace JSDoc blocks on internal utils with short comments ([#24130](https://github.com/twentyhq/twenty/pull/24130)) by @charlesBochet
- feat(server): route delete, destroy and restore through the ORM v2 write path ([#24131](https://github.com/twentyhq/twenty/pull/24131)) by @charlesBochet
- Reorganize twenty-front-component-renderer into feature folders ([#24132](https://github.com/twentyhq/twenty/pull/24132)) by @bosiraphael
- i18n - translations ([#24133](https://github.com/twentyhq/twenty/pull/24133)) by @github-actions
- fix(messaging): default new channels to METADATA visibility instead of SHARE_EVERYTHING ([#24135](https://github.com/twentyhq/twenty/pull/24135)) by @neo773
- fix(workflow): keep converging steps when an if/else branch is skipped ([#24136](https://github.com/twentyhq/twenty/pull/24136)) by @thomtrp
- fix(front): show Select dropdowns above modals and fix the rollover credits label ([#24137](https://github.com/twentyhq/twenty/pull/24137)) by @FelixMalfait
- i18n - docs translations ([#24139](https://github.com/twentyhq/twenty/pull/24139)) by @github-actions
- feat(server): route update through the ORM v2 write path ([#24140](https://github.com/twentyhq/twenty/pull/24140)) by @charlesBochet
- i18n - translations ([#24142](https://github.com/twentyhq/twenty/pull/24142)) by @github-actions
- Install changed apps on the preview environment, document app previews for external repos ([#24143](https://github.com/twentyhq/twenty/pull/24143)) by @FelixMalfait
- Persist admin panel chat filters across navigation ([#24144](https://github.com/twentyhq/twenty/pull/24144)) by @bosiraphael
- feat(server): route create, upsert and merge through the ORM v2 write path ([#24145](https://github.com/twentyhq/twenty/pull/24145)) by @charlesBochet
- i18n - translations ([#24146](https://github.com/twentyhq/twenty/pull/24146)) by @github-actions
- i18n - translations ([#24147](https://github.com/twentyhq/twenty/pull/24147)) by @github-actions
- ci: serialize the i18n workflows per branch ([#24148](https://github.com/twentyhq/twenty/pull/24148)) by @charlesBochet
- fix(billing): map already-subscribed checkout retry to a user error ([#24150](https://github.com/twentyhq/twenty/pull/24150)) by @thomtrp
- Skip contact creation when the connected account owner is gone ([#24151](https://github.com/twentyhq/twenty/pull/24151)) by @thomtrp
- Fireflies app settings tab with API-key-gated call history backfill ([#24152](https://github.com/twentyhq/twenty/pull/24152)) by @ehconitin
- Fix duplicate key errors during message import ([#24154](https://github.com/twentyhq/twenty/pull/24154)) by @thomtrp
- i18n - docs translations ([#24155](https://github.com/twentyhq/twenty/pull/24155)) by @github-actions
- Show pinned command menu actions as icons on mobile headers ([#24156](https://github.com/twentyhq/twenty/pull/24156)) by @FelixMalfait
- Refresh the front component limitations doc ([#24157](https://github.com/twentyhq/twenty/pull/24157)) by @bosiraphael
- docs: keep JSX tags out of translatable prose so Crowdin can rebuild ([#24158](https://github.com/twentyhq/twenty/pull/24158)) by @charlesBochet
- i18n - translations ([#24161](https://github.com/twentyhq/twenty/pull/24161)) by @github-actions
- i18n - translations ([#24162](https://github.com/twentyhq/twenty/pull/24162)) by @github-actions
- test(server): cover outbound messaging and calendar providers ([#24164](https://github.com/twentyhq/twenty/pull/24164)) by @neo773
- i18n - docs translations ([#24166](https://github.com/twentyhq/twenty/pull/24166)) by @github-actions
- fix(postcard): make the app-prod-parity postcard e2e suite pass ([#24167](https://github.com/twentyhq/twenty/pull/24167)) by @charlesBochet
- Make the mobile navigation menu a real home page ([#24168](https://github.com/twentyhq/twenty/pull/24168)) by @FelixMalfait
- feat(server): ORM v2 workspace repository read-family methods ([#24170](https://github.com/twentyhq/twenty/pull/24170)) by @charlesBochet
- Remove selection checkboxes and the aggregate footer on mobile ([#24172](https://github.com/twentyhq/twenty/pull/24172)) by @FelixMalfait
- i18n - translations ([#24174](https://github.com/twentyhq/twenty/pull/24174)) by @github-actions
- AI chat: never fail silently on exhausted credits ([#24175](https://github.com/twentyhq/twenty/pull/24175)) by @FelixMalfait
- Give the mobile settings header its page title ([#24176](https://github.com/twentyhq/twenty/pull/24176)) by @FelixMalfait
- feat(server): route module workspace repositories through ORM v2 and drop the EntityMetadata build (Stage B + C) ([#24179](https://github.com/twentyhq/twenty/pull/24179)) by @charlesBochet
- test(server): cover workflow email and calendar actions across providers ([#24181](https://github.com/twentyhq/twenty/pull/24181)) by @neo773
- feat(server): eliminate v1 ORM from workspace write transactions on the flag ([#24182](https://github.com/twentyhq/twenty/pull/24182)) by @charlesBochet
- Stop the welcome title overflowing on mobile ([#24183](https://github.com/twentyhq/twenty/pull/24183)) by @FelixMalfait
- Scroll the tab row on mobile instead of hiding tabs behind a dropdown ([#24184](https://github.com/twentyhq/twenty/pull/24184)) by @FelixMalfait
- fix(front): hide record table header when empty on mobile ([#24185](https://github.com/twentyhq/twenty/pull/24185)) by @FelixMalfait
- chore: sync AI model catalog from models.dev ([#24186](https://github.com/twentyhq/twenty/pull/24186)) by @github-actions
- i18n - translations ([#24187](https://github.com/twentyhq/twenty/pull/24187)) by @github-actions
- Surface the real ClickHouse error when an insert fails ([#24189](https://github.com/twentyhq/twenty/pull/24189)) by @thomtrp
- test(twenty-slack): cover the app end to end against a mocked Slack workspace ([#24192](https://github.com/twentyhq/twenty/pull/24192)) by @abdulrahmancodes
- Make Other an explicit option in the AI chat question card ([#24193](https://github.com/twentyhq/twenty/pull/24193)) by @bosiraphael
- Polyfill navigator.clipboard.writeText for front components ([#24195](https://github.com/twentyhq/twenty/pull/24195)) by @FelixMalfait
- Point CI dispatches at twentyhq/twenty-factory ([#24196](https://github.com/twentyhq/twenty/pull/24196)) by @FelixMalfait
- Extract provider-neutral webhook handlers from SES-specific services ([#24200](https://github.com/twentyhq/twenty/pull/24200)) by @FelixMalfait
- Abstract inbound email retrieval behind message sources ([#24201](https://github.com/twentyhq/twenty/pull/24201)) by @FelixMalfait
- App media recording via standard web API polyfills (compare with #24053) ([#24203](https://github.com/twentyhq/twenty/pull/24203)) by @FelixMalfait
- refactor(front): support multiple widget header actions ([#24204](https://github.com/twentyhq/twenty/pull/24204)) by @ehconitin
- Sample AI traces at 100% in Sentry and attribute AI calls ([#24207](https://github.com/twentyhq/twenty/pull/24207)) by @bosiraphael
- feat(metadata): writability levels on object and field metadata ([#24208](https://github.com/twentyhq/twenty/pull/24208)) by @abdulrahmancodes
- Interface scale preference via root CSS zoom ([#24209](https://github.com/twentyhq/twenty/pull/24209)) by @FelixMalfait
- i18n - docs translations ([#24210](https://github.com/twentyhq/twenty/pull/24210)) by @github-actions
- i18n - translations ([#24212](https://github.com/twentyhq/twenty/pull/24212)) by @github-actions
- fix(server): quote the alias in ORM v2 record-identifier where clauses ([#24213](https://github.com/twentyhq/twenty/pull/24213)) by @charlesBochet
- Ask the onboarding CRM migration question with the ask_questions tool ([#24214](https://github.com/twentyhq/twenty/pull/24214)) by @bosiraphael
- fix(server): fail FIND_RECORDS cleanly on an uncomputable filter ([#24215](https://github.com/twentyhq/twenty/pull/24215)) by @thomtrp
- Remove the dedicated media-notes example app workflow ([#24216](https://github.com/twentyhq/twenty/pull/24216)) by @FelixMalfait
- i18n - translations ([#24217](https://github.com/twentyhq/twenty/pull/24217)) by @github-actions
- perf(server): skip the ORM EntityMetadata build for ORM v2 workspaces at the cache layer ([#24219](https://github.com/twentyhq/twenty/pull/24219)) by @charlesBochet
- Fix orphaned mirrored field permission blocking relation field updates ([#24220](https://github.com/twentyhq/twenty/pull/24220)) by @FelixMalfait
- Merge language and scale into one Interface settings section ([#24222](https://github.com/twentyhq/twenty/pull/24222)) by @FelixMalfait
- i18n - docs translations ([#24224](https://github.com/twentyhq/twenty/pull/24224)) by @github-actions
- ORM v2: TypeORM parity for joins / andSelect / distinctOn ([#24225](https://github.com/twentyhq/twenty/pull/24225)) by @charlesBochet
- chore: sync AI model catalog from models.dev ([#24228](https://github.com/twentyhq/twenty/pull/24228)) by @github-actions
- Float the mobile bottom bar over content with a glass style ([#24229](https://github.com/twentyhq/twenty/pull/24229)) by @FelixMalfait
- ORM v2: relation-keyed where clauses ([#24230](https://github.com/twentyhq/twenty/pull/24230)) by @charlesBochet
- Turn the mobile bottom bar into the home page's tab bar ([#24232](https://github.com/twentyhq/twenty/pull/24232)) by @FelixMalfait
- i18n - translations ([#24233](https://github.com/twentyhq/twenty/pull/24233)) by @github-actions
- Restore primary pinned actions with footer-owned width measurement ([#24235](https://github.com/twentyhq/twenty/pull/24235)) by @FelixMalfait
- i18n - translations ([#24237](https://github.com/twentyhq/twenty/pull/24237)) by @github-actions
- fix(server): add findAndCount to the ORM v2 workspace repository ([#24244](https://github.com/twentyhq/twenty/pull/24244)) by @charlesBochet
- Give the mobile record header a proper title treatment ([#24251](https://github.com/twentyhq/twenty/pull/24251)) by @FelixMalfait
- feat(sdk): let apps set writability on objects and fields ([#24255](https://github.com/twentyhq/twenty/pull/24255)) by @abdulrahmancodes
- Make cookie sessions the only web auth path ([#24257](https://github.com/twentyhq/twenty/pull/24257)) by @FelixMalfait
- Make deactivated objects editable from settings ([#24258](https://github.com/twentyhq/twenty/pull/24258)) by @thomtrp
- fix(front): wrap relation card rows in RecordDetailRecordsListContainer ([#24261](https://github.com/twentyhq/twenty/pull/24261)) by @thomtrp
- fix(billing) - void unpaid upgrade invoices so a failed charge cannot be collected later ([#24264](https://github.com/twentyhq/twenty/pull/24264)) by @etiennejouan
- Show exact date on hover for timeline activity dates ([#24265](https://github.com/twentyhq/twenty/pull/24265)) by @FelixMalfait
- i18n - translations ([#24266](https://github.com/twentyhq/twenty/pull/24266)) by @github-actions
- Float the mobile bottom bar again and reserve its footprint in page content ([#24267](https://github.com/twentyhq/twenty/pull/24267)) by @FelixMalfait
- i18n - translations ([#24268](https://github.com/twentyhq/twenty/pull/24268)) by @github-actions
- Stop fetching unused morph targets in the timeline query ([#24269](https://github.com/twentyhq/twenty/pull/24269)) by @FelixMalfait
- Skip relation queries for unset to-one join columns ([#24270](https://github.com/twentyhq/twenty/pull/24270)) by @FelixMalfait
- i18n - translations ([#24272](https://github.com/twentyhq/twenty/pull/24272)) by @github-actions
- fix(front): stop sending the dormant token pair on the SSE stream under cookie auth ([#24274](https://github.com/twentyhq/twenty/pull/24274)) by @FelixMalfait
- fix(front): recover from a session cookie the server does not accept ([#24275](https://github.com/twentyhq/twenty/pull/24275)) by @FelixMalfait
- fix(server): report an unauthenticated GraphQL request as UNAUTHENTICATED, not FORBIDDEN ([#24276](https://github.com/twentyhq/twenty/pull/24276)) by @FelixMalfait
- Move presentational primitives from twenty-front to twenty-ui ([#24277](https://github.com/twentyhq/twenty/pull/24277)) by @bosiraphael
- Fix MCP tool calls reporting structured failures as success ([#24280](https://github.com/twentyhq/twenty/pull/24280)) by @etiennejouan
- i18n - docs translations ([#24287](https://github.com/twentyhq/twenty/pull/24287)) by @github-actions
- fix(twenty-slack): point the README setup link at an absolute url ([#24288](https://github.com/twentyhq/twenty/pull/24288)) by @abdulrahmancodes
- fix(server): map ORM v2 driver errors to typed exceptions ([#24290](https://github.com/twentyhq/twenty/pull/24290)) by @thomtrp
- feat(front): delete a workflow step from the diagram node ([#24292](https://github.com/twentyhq/twenty/pull/24292)) by @thomtrp
- i18n - translations ([#24293](https://github.com/twentyhq/twenty/pull/24293)) by @github-actions
- refactor(twenty-orm): replace scoped repository save() with insert/update ([#24294](https://github.com/twentyhq/twenty/pull/24294)) by @FelixMalfait
- fix(user-workspace): stop pretending role targets are soft deleted ([#24295](https://github.com/twentyhq/twenty/pull/24295)) by @FelixMalfait
- refactor(i18n) - share the message-id hash and the translatable registry [1/6] ([#24300](https://github.com/twentyhq/twenty/pull/24300)) by @FelixMalfait
- Fix dashboard duplication rejecting relation-traversal chart filters ([#24301](https://github.com/twentyhq/twenty/pull/24301)) by @ehconitin
- i18n - translations ([#24302](https://github.com/twentyhq/twenty/pull/24302)) by @github-actions
- i18n - translations ([#24313](https://github.com/twentyhq/twenty/pull/24313)) by @github-actions
- i18n - translations ([#24316](https://github.com/twentyhq/twenty/pull/24316)) by @github-actions

</details>

**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.30.0...twenty/v2.32.0