twenty/v2.34.0
firecracker-microvm/firecrackertwenty/v2.34.0Aug 24, 2026by twenty-pr[bot]
AI Summary
Introduces the ORM v2 read path behind a flag and begins the migration away from v1 TypeORM. It adds native Slack agent replies, billing updates, and metadata writability levels, while enabling storage APIs in front components.
Key Highlights
- ORM v2 read path introduced behind a feature flag
- Native Slack agent replies and interactivity with feedback buttons
- Billing credit balance replaced with a credit grant ledger
- Metadata writability levels (SYSTEM, APPLICATION, OPEN)
- localStorage and sessionStorage support in front components
Breaking Changes
- System record page layout
- feat(front): expand button and record actions in the side panel footer
- Edit metadata translations in the UI
- feat(logic-function): give handlers an execution context
- fix: bump nx 22.7.5 - 22.7.8
- refactor(rest): move restore to a suffix path
- fix(open-api): make request-body examples deterministic
New Features
- feat(twenty-slack): pass Slack conversation history to runAgent
- feat(slack): native agent replies, thinking status everywhere
- feat(billing): replace the credit balance column with a credit grant ledger
- feat(messaging): import recent messages as soon as an account connects
- feat(server): ORM v2, a TypeORM-free workspace read path behind a flag
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 - Edit metadata translations in the UI: per-entity side panel + translate-or-rename prompt ([#24374](https://github.com/twentyhq/twenty/pull/24374)) by @FelixMalfait - feat(logic-function): give handlers an execution context, and a choice of whose access each call uses ([#24493](https://github.com/twentyhq/twenty/pull/24493)) by @FelixMalfait - fix: bump nx 22.7.5 - 22.7.8 (Dependabot) ([#24496](https://github.com/twentyhq/twenty/pull/24496)) by @mabdullahabaid - refactor(rest): move restore to a suffix path and make restore-one reachable ([#24544](https://github.com/twentyhq/twenty/pull/24544)) by @FelixMalfait - fix(open-api): make request-body examples deterministic ([#24591](https://github.com/twentyhq/twenty/pull/24591)) 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(front): allow relations to system objects under an Advanced section ([#24173](https://github.com/twentyhq/twenty/pull/24173)) 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 - 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 - feat(metadata): adopt SYSTEM writability, starting with search vectors ([#24335](https://github.com/twentyhq/twenty/pull/24335)) by @abdulrahmancodes - feat(workflow): add core-backed workflows index page behind a flag ([#24350](https://github.com/twentyhq/twenty/pull/24350)) by @thomtrp - feat(server): support cursor pagination with relation-field ordering ([#24356](https://github.com/twentyhq/twenty/pull/24356)) by @FelixMalfait - feat(call-recorder): cancel open recording requests and upcoming Recall bots on uninstall ([#24361](https://github.com/twentyhq/twenty/pull/24361)) by @ehconitin ## 💅 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 - Run application uninstall hooks when deleting a workspace ([#23633](https://github.com/twentyhq/twenty/pull/23633)) by @ehconitin - Rework the twenty-partners Claude skills into a reviewable lead path ([#23661](https://github.com/twentyhq/twenty/pull/23661)) by @rashad - Fix handle in ConnectionProvider ([#23674](https://github.com/twentyhq/twenty/pull/23674)) by @BOHEUS - 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 - [Twenty-front][Calendar]: Prevent calendar card cell hover/edit state for multi-day records ([#23962](https://github.com/twentyhq/twenty/pull/23962)) by @git-init-priyanshu - 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 - Modify PG_DATABASE_URL to include PG_DATABASE_NAME ([#24091](https://github.com/twentyhq/twenty/pull/24091)) by @pwntr - 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 - Add Resend as a community emailing domain driver ([#24202](https://github.com/twentyhq/twenty/pull/24202)) 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 - Add Text typography primitive with truncate and lineClamp ([#24278](https://github.com/twentyhq/twenty/pull/24278)) by @bosiraphael - Adopt Base UI compound Field for form fields ([#24279](https://github.com/twentyhq/twenty/pull/24279)) by @bosiraphael - Fix MCP tool calls reporting structured failures as success ([#24280](https://github.com/twentyhq/twenty/pull/24280)) by @etiennejouan - Show ask_questions as a readable Q&A card in the admin chat viewer ([#24281](https://github.com/twentyhq/twenty/pull/24281)) by @bosiraphael - Read property-mapped attributes back from getAttribute on remote elements ([#24297](https://github.com/twentyhq/twenty/pull/24297)) by @bosiraphael - 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 - refactor(i18n) - resolve page layout and view field group labels through one resolver [2/6] ([#24304](https://github.com/twentyhq/twenty/pull/24304)) by @FelixMalfait - fix(i18n) - resolve view names through the shared resolver so app catalogs apply [3/6] ([#24306](https://github.com/twentyhq/twenty/pull/24306)) by @FelixMalfait - fix(i18n) - translate command menu item labels [4/6] ([#24310](https://github.com/twentyhq/twenty/pull/24310)) by @FelixMalfait - Gate twenty-ui interaction handlers on the element being clickable ([#24311](https://github.com/twentyhq/twenty/pull/24311)) by @bosiraphael - fix(i18n) - translate navigation menu item names [5/6] ([#24312](https://github.com/twentyhq/twenty/pull/24312)) by @FelixMalfait - Add retryable logic function failures with queue backoff ([#24317](https://github.com/twentyhq/twenty/pull/24317)) by @ehconitin - fix(mcp) - hydrate relation fields selected by name in MCP find tools ([#24328](https://github.com/twentyhq/twenty/pull/24328)) by @etiennejouan - Guide the AI workspace setup with a dedicated system prompt and a next-step question ([#24331](https://github.com/twentyhq/twenty/pull/24331)) by @bosiraphael - Move in-product explainer videos from feature flagged to GA ([#24337](https://github.com/twentyhq/twenty/pull/24337)) by @Bredo - Pin timeline activity write path behavior with integration tests ([#24339](https://github.com/twentyhq/twenty/pull/24339)) by @FelixMalfait - Declare note and task targets as junction relations ([#24340](https://github.com/twentyhq/twenty/pull/24340)) by @FelixMalfait - Drive timeline activities from rules instead of hardcoded branches ([#24341](https://github.com/twentyhq/twenty/pull/24341)) by @FelixMalfait - Split onboarding chat spans into their own telemetry functionId ([#24353](https://github.com/twentyhq/twenty/pull/24353)) by @bosiraphael - Stop reporting contact creation duplicate key conflicts to Sentry ([#24355](https://github.com/twentyhq/twenty/pull/24355)) by @thomtrp - Generate command menu item mocks instead of hand-maintaining them ([#24363](https://github.com/twentyhq/twenty/pull/24363)) by @FelixMalfait - Allow prop spreading in twenty-ui and remove the unused VISIBILITY_HIDDEN export ([#24370](https://github.com/twentyhq/twenty/pull/24370)) by @bosiraphael - fix(billing) - unblock resource credit upgrades rejected by Stripe ([#24383](https://github.com/twentyhq/twenty/pull/24383)) by @etiennejouan - Tag chat error events with their chat kind ([#24387](https://github.com/twentyhq/twenty/pull/24387)) by @bosiraphael - Let a server route declare which HTTP methods it answers ([#24401](https://github.com/twentyhq/twenty/pull/24401)) by @emmanuelhb56 - Update docs ([#24404](https://github.com/twentyhq/twenty/pull/24404)) by @BOHEUS - Render pre-2.33 command menu item labels instead of raw template expressions ([#24405](https://github.com/twentyhq/twenty/pull/24405)) by @FelixMalfait - Resolve object labels in search results through the shared resolver ([#24406](https://github.com/twentyhq/twenty/pull/24406)) by @FelixMalfait - Stop a manifest without translations from deleting an application's stored locales ([#24408](https://github.com/twentyhq/twenty/pull/24408)) by @FelixMalfait - v1.6.3 — Remove the ranking field from the partner model ([#24414](https://github.com/twentyhq/twenty/pull/24414)) by @rashad - Collapse the 24 view permission guards into three ([#24415](https://github.com/twentyhq/twenty/pull/24415)) by @FelixMalfait - Fix AI FAQ: self-hosted custom models don't need an Organization license ([#24430](https://github.com/twentyhq/twenty/pull/24430)) by @thomtrp - Revert AI FAQ wording on self-hosted custom models ([#24435](https://github.com/twentyhq/twenty/pull/24435)) by @thomtrp - v1.6.4 — feat(partners): expose marketplace ranking metadata on the list endpoint ([#24459](https://github.com/twentyhq/twenty/pull/24459)) by @rashad - Rank marketplace partners by evidence instead of by name (needs twenty-partners 1.6.4) ([#24460](https://github.com/twentyhq/twenty/pull/24460)) by @rashad - Give the i18n context helper one home ([#24495](https://github.com/twentyhq/twenty/pull/24495)) by @FelixMalfait - Read translatable properties without a cast ([#24498](https://github.com/twentyhq/twenty/pull/24498)) by @FelixMalfait - Reduce non-AI Sentry trace sampling ([#24511](https://github.com/twentyhq/twenty/pull/24511)) by @bosiraphael - Match participants on the transaction that inserted them ([#24525](https://github.com/twentyhq/twenty/pull/24525)) by @neo773 - Replace timelineActivity.name with a timelineActivityType id ([#24568](https://github.com/twentyhq/twenty/pull/24568)) by @FelixMalfait - Fix legacy activity junction target backfill ([#24598](https://github.com/twentyhq/twenty/pull/24598)) by @FelixMalfait - Make timeline activity types a generic application contract ([#24620](https://github.com/twentyhq/twenty/pull/24620)) by @FelixMalfait - Emit attachment timeline activities through direct relations ([#24637](https://github.com/twentyhq/twenty/pull/24637)) by @FelixMalfait - Repair activity junction targets for custom-only morphs ([#24638](https://github.com/twentyhq/twenty/pull/24638)) by @FelixMalfait - Fix composite field update events ([#24641](https://github.com/twentyhq/twenty/pull/24641)) by @FelixMalfait - Guard attachment activity upgrade on legacy schemas ([#24642](https://github.com/twentyhq/twenty/pull/24642)) by @FelixMalfait - Remove generated attachment locale catalog changes ([#24643](https://github.com/twentyhq/twenty/pull/24643)) by @FelixMalfait - Fix update events across ORM write paths ([#24644](https://github.com/twentyhq/twenty/pull/24644)) by @FelixMalfait - Fix legacy composite update event snapshots ([#24648](https://github.com/twentyhq/twenty/pull/24648)) by @FelixMalfait ## 🐛 Bug fixes - fix: add SettingsRolesQueryEffect to invite tab ([#23320](https://github.com/twentyhq/twenty/pull/23320)) by @atharv-sys32 - fix(twenty-server): resolve standardOverrides description in MCP CRUD tool schemas (#23562) ([#23606](https://github.com/twentyhq/twenty/pull/23606)) by @Shinu-Cherian - fix: unblock AI chat on manually added models ([#23695](https://github.com/twentyhq/twenty/pull/23695)) by @brunobuddy - 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: handle unavailable IMAP mailboxes ([#24141](https://github.com/twentyhq/twenty/pull/24141)) by @neo773 - 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: preserve theme tokens when CSS variables are unresolved ([#24250](https://github.com/twentyhq/twenty/pull/24250)) by @anamikasingh200 - fix(tests): make the gmail mock honour the in:sent search filter ([#24259](https://github.com/twentyhq/twenty/pull/24259)) by @thomtrp - 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 - fix(server): resolve morph join column when walking relations to person ([#24298](https://github.com/twentyhq/twenty/pull/24298)) by @thomtrp - fix(server): ORM v2 rollout safety - rollback-proof transactions and a working flag rollback ([#24299](https://github.com/twentyhq/twenty/pull/24299)) by @thomtrp - fix(i18n): translate page layout names ([#24315](https://github.com/twentyhq/twenty/pull/24315)) by @FelixMalfait - fix(i18n): resolve metadata subscription events against the subscriber's locale ([#24323](https://github.com/twentyhq/twenty/pull/24323)) by @FelixMalfait - fix(server): ORM v2 write-path parity - persist workflow step logs, skip undefined values ([#24330](https://github.com/twentyhq/twenty/pull/24330)) by @thomtrp - fix(server): make cursor pagination exhaustive for any orderBy ([#24354](https://github.com/twentyhq/twenty/pull/24354)) by @FelixMalfait - fix(front): keep empty values at the bottom for ascending sorts ([#24366](https://github.com/twentyhq/twenty/pull/24366)) by @FelixMalfait - fix(workflow): flag a trigger filter whose field reference is broken ([#24377](https://github.com/twentyhq/twenty/pull/24377)) by @thomtrp - fix(filter): enforce conjunctive multi-token matching for composite name filters (#24260) ([#24380](https://github.com/twentyhq/twenty/pull/24380)) by @jihadMo - fix: repair escaped inline-code tags in Crowdin docs translations ([#24397](https://github.com/twentyhq/twenty/pull/24397)) by @abdulrahmancodes - fix: always pull app and website translations on schedule ([#24400](https://github.com/twentyhq/twenty/pull/24400)) by @abdulrahmancodes - fix(server): timeline calendar events denied on the ORM v2 read path ([#24403](https://github.com/twentyhq/twenty/pull/24403)) by @FelixMalfait - fix: bump undici to 6.28.0 across app lockfiles (Dependabot) ([#24482](https://github.com/twentyhq/twenty/pull/24482)) by @mabdullahabaid - fix: bump ip-address to 10.5.0 in app lockfiles (Dependabot) ([#24487](https://github.com/twentyhq/twenty/pull/24487)) by @mabdullahabaid - fix: bump nanoid to 5.1.16 (Dependabot) ([#24489](https://github.com/twentyhq/twenty/pull/24489)) by @mabdullahabaid - fix: bump fast-uri 3.1.4 - 3.1.5 (Dependabot) ([#24491](https://github.com/twentyhq/twenty/pull/24491)) by @mabdullahabaid - fix: bump socket.io-parser 4.2.6 - 4.2.7 (Dependabot) ([#24492](https://github.com/twentyhq/twenty/pull/24492)) by @mabdullahabaid - fix(twenty-orm): let an application write its own records while serving a person ([#24494](https://github.com/twentyhq/twenty/pull/24494)) by @FelixMalfait - fix(sdk): rerun dev sync when changes arrive during sync ([#24514](https://github.com/twentyhq/twenty/pull/24514)) by @FelixMalfait - fix(server): prevent cleared PromiseMemoizer work from overwriting newer values ([#24515](https://github.com/twentyhq/twenty/pull/24515)) by @FelixMalfait - fix(ui): keep Checkbox state controlled ([#24516](https://github.com/twentyhq/twenty/pull/24516)) by @FelixMalfait - fix(auth): sign up in the resolved workspace in single-workspace mode ([#24523](https://github.com/twentyhq/twenty/pull/24523)) by @caveman99 - fix(ui): let AnimatedPlaceholder asset maps infer their key union ([#24531](https://github.com/twentyhq/twenty/pull/24531)) by @FelixMalfait - fix(server): honor the statusCode option CustomException declares ([#24534](https://github.com/twentyhq/twenty/pull/24534)) by @FelixMalfait - fix(front): narrow TableSortValue to the direction the table implements ([#24536](https://github.com/twentyhq/twenty/pull/24536)) by @FelixMalfait - fix(ci): stop the i18n formatting ping-pong between Crowdin pull and push workflows ([#24590](https://github.com/twentyhq/twenty/pull/24590)) by @abdulrahmancodes - fix: bump postcss to 8.5.26 across app lockfiles (Dependabot) ([#24596](https://github.com/twentyhq/twenty/pull/24596)) by @mabdullahabaid - fix: bump brace-expansion to 5.0.9 in app lockfiles (Dependabot) ([#24615](https://github.com/twentyhq/twenty/pull/24615)) by @mabdullahabaid ## ⚡ 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 - Give the REST metadata API one label-resolution path ([#24410](https://github.com/twentyhq/twenty/pull/24410)) by @FelixMalfait <details> <summary>🏗️ Internal changes (31)</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 - refactor(i18n): own catalog resolution in one service so REST reaches app catalogs ([#24321](https://github.com/twentyhq/twenty/pull/24321)) by @FelixMalfait - refactor(i18n): one runtime key space for translation catalogs ([#24325](https://github.com/twentyhq/twenty/pull/24325)) by @FelixMalfait - refactor(i18n): one placeholder syntax for every derived label ([#24326](https://github.com/twentyhq/twenty/pull/24326)) by @FelixMalfait - refactor(i18n): key metadata catalog entries per role with message context ([#24360](https://github.com/twentyhq/twenty/pull/24360)) by @FelixMalfait - docs: rightsize CLAUDE.md to gotchas, add AGENTS.md symlink ([#24362](https://github.com/twentyhq/twenty/pull/24362)) by @FelixMalfait - test(server): cover cursor pagination ordered by a morph relation leg ([#24364](https://github.com/twentyhq/twenty/pull/24364)) by @FelixMalfait - refactor(server): compile SQL order clauses from the resolved orderBy leaves ([#24382](https://github.com/twentyhq/twenty/pull/24382)) by @FelixMalfait - docs(codex-plugin): use apply and plan commands ([#24512](https://github.com/twentyhq/twenty/pull/24512)) by @FelixMalfait - chore(front): remove unused application data table ([#24513](https://github.com/twentyhq/twenty/pull/24513)) by @FelixMalfait - chore(sdk): delete the dead twenty-client-template copy ([#24532](https://github.com/twentyhq/twenty/pull/24532)) by @FelixMalfait - refactor(server): drop unused flat-metadata params from OpenAPI path builders ([#24533](https://github.com/twentyhq/twenty/pull/24533)) by @FelixMalfait - refactor(oxlint-rules): de-duplicate the two guarded-endpoint rules ([#24535](https://github.com/twentyhq/twenty/pull/24535)) 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 - @brunobuddy made their first contribution in https://github.com/twentyhq/twenty/pull/23695 - @pwntr made their first contribution in https://github.com/twentyhq/twenty/pull/24091 - @anamikasingh200 made their first contribution in https://github.com/twentyhq/twenty/pull/24250 - @jihadMo made their first contribution in https://github.com/twentyhq/twenty/pull/24380 - @caveman99 made their first contribution in https://github.com/twentyhq/twenty/pull/24523 <details> <summary>Full changelog (424 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 - fix(twenty-server): resolve standardOverrides description in MCP CRUD tool schemas (#23562) ([#23606](https://github.com/twentyhq/twenty/pull/23606)) by @Shinu-Cherian - Remove the frontend's remaining view.openRecordIn plumbing ([#23627](https://github.com/twentyhq/twenty/pull/23627)) by @FelixMalfait - Run application uninstall hooks when deleting a workspace ([#23633](https://github.com/twentyhq/twenty/pull/23633)) by @ehconitin - 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 - Rework the twenty-partners Claude skills into a reviewable lead path ([#23661](https://github.com/twentyhq/twenty/pull/23661)) by @rashad - Fix handle in ConnectionProvider ([#23674](https://github.com/twentyhq/twenty/pull/23674)) by @BOHEUS - fix: unblock AI chat on manually added models ([#23695](https://github.com/twentyhq/twenty/pull/23695)) by @brunobuddy - 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 - [Twenty-front][Calendar]: Prevent calendar card cell hover/edit state for multi-day records ([#23962](https://github.com/twentyhq/twenty/pull/23962)) by @git-init-priyanshu - 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 - Modify PG_DATABASE_URL to include PG_DATABASE_NAME ([#24091](https://github.com/twentyhq/twenty/pull/24091)) by @pwntr - 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 - fix: handle unavailable IMAP mailboxes ([#24141](https://github.com/twentyhq/twenty/pull/24141)) by @neo773 - 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 - feat(front): allow relations to system objects under an Advanced section ([#24173](https://github.com/twentyhq/twenty/pull/24173)) 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 - Add Resend as a community emailing domain driver ([#24202](https://github.com/twentyhq/twenty/pull/24202)) 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 - fix: preserve theme tokens when CSS variables are unresolved ([#24250](https://github.com/twentyhq/twenty/pull/24250)) by @anamikasingh200 - 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(tests): make the gmail mock honour the in:sent search filter ([#24259](https://github.com/twentyhq/twenty/pull/24259)) 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 - Add Text typography primitive with truncate and lineClamp ([#24278](https://github.com/twentyhq/twenty/pull/24278)) by @bosiraphael - Adopt Base UI compound Field for form fields ([#24279](https://github.com/twentyhq/twenty/pull/24279)) by @bosiraphael - Fix MCP tool calls reporting structured failures as success ([#24280](https://github.com/twentyhq/twenty/pull/24280)) by @etiennejouan - Show ask_questions as a readable Q&A card in the admin chat viewer ([#24281](https://github.com/twentyhq/twenty/pull/24281)) by @bosiraphael - 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 - Read property-mapped attributes back from getAttribute on remote elements ([#24297](https://github.com/twentyhq/twenty/pull/24297)) by @bosiraphael - fix(server): resolve morph join column when walking relations to person ([#24298](https://github.com/twentyhq/twenty/pull/24298)) by @thomtrp - fix(server): ORM v2 rollout safety - rollback-proof transactions and a working flag rollback ([#24299](https://github.com/twentyhq/twenty/pull/24299)) by @thomtrp - 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 - refactor(i18n) - resolve page layout and view field group labels through one resolver [2/6] ([#24304](https://github.com/twentyhq/twenty/pull/24304)) by @FelixMalfait - fix(i18n) - resolve view names through the shared resolver so app catalogs apply [3/6] ([#24306](https://github.com/twentyhq/twenty/pull/24306)) by @FelixMalfait - fix(i18n) - translate command menu item labels [4/6] ([#24310](https://github.com/twentyhq/twenty/pull/24310)) by @FelixMalfait - Gate twenty-ui interaction handlers on the element being clickable ([#24311](https://github.com/twentyhq/twenty/pull/24311)) by @bosiraphael - fix(i18n) - translate navigation menu item names [5/6] ([#24312](https://github.com/twentyhq/twenty/pull/24312)) by @FelixMalfait - i18n - translations ([#24313](https://github.com/twentyhq/twenty/pull/24313)) by @github-actions - fix(i18n): translate page layout names ([#24315](https://github.com/twentyhq/twenty/pull/24315)) by @FelixMalfait - i18n - translations ([#24316](https://github.com/twentyhq/twenty/pull/24316)) by @github-actions - Add retryable logic function failures with queue backoff ([#24317](https://github.com/twentyhq/twenty/pull/24317)) by @ehconitin - i18n - translations ([#24318](https://github.com/twentyhq/twenty/pull/24318)) by @github-actions - chore: bump version to 2.33.0 ([#24319](https://github.com/twentyhq/twenty/pull/24319)) by @thomtrp - i18n - translations ([#24320](https://github.com/twentyhq/twenty/pull/24320)) by @github-actions - refactor(i18n): own catalog resolution in one service so REST reaches app catalogs ([#24321](https://github.com/twentyhq/twenty/pull/24321)) by @FelixMalfait - fix(i18n): resolve metadata subscription events against the subscriber's locale ([#24323](https://github.com/twentyhq/twenty/pull/24323)) by @FelixMalfait - refactor(i18n): one runtime key space for translation catalogs ([#24325](https://github.com/twentyhq/twenty/pull/24325)) by @FelixMalfait - refactor(i18n): one placeholder syntax for every derived label ([#24326](https://github.com/twentyhq/twenty/pull/24326)) by @FelixMalfait - fix(mcp) - hydrate relation fields selected by name in MCP find tools ([#24328](https://github.com/twentyhq/twenty/pull/24328)) by @etiennejouan - fix(server): ORM v2 write-path parity - persist workflow step logs, skip undefined values ([#24330](https://github.com/twentyhq/twenty/pull/24330)) by @thomtrp - Guide the AI workspace setup with a dedicated system prompt and a next-step question ([#24331](https://github.com/twentyhq/twenty/pull/24331)) by @bosiraphael - feat(metadata): adopt SYSTEM writability, starting with search vectors ([#24335](https://github.com/twentyhq/twenty/pull/24335)) by @abdulrahmancodes - Move in-product explainer videos from feature flagged to GA ([#24337](https://github.com/twentyhq/twenty/pull/24337)) by @Bredo - Pin timeline activity write path behavior with integration tests ([#24339](https://github.com/twentyhq/twenty/pull/24339)) by @FelixMalfait - Declare note and task targets as junction relations ([#24340](https://github.com/twentyhq/twenty/pull/24340)) by @FelixMalfait - Drive timeline activities from rules instead of hardcoded branches ([#24341](https://github.com/twentyhq/twenty/pull/24341)) by @FelixMalfait - feat(workflow): add core-backed workflows index page behind a flag ([#24350](https://github.com/twentyhq/twenty/pull/24350)) by @thomtrp - Split onboarding chat spans into their own telemetry functionId ([#24353](https://github.com/twentyhq/twenty/pull/24353)) by @bosiraphael - fix(server): make cursor pagination exhaustive for any orderBy ([#24354](https://github.com/twentyhq/twenty/pull/24354)) by @FelixMalfait - Stop reporting contact creation duplicate key conflicts to Sentry ([#24355](https://github.com/twentyhq/twenty/pull/24355)) by @thomtrp - feat(server): support cursor pagination with relation-field ordering ([#24356](https://github.com/twentyhq/twenty/pull/24356)) by @FelixMalfait - i18n - translations ([#24357](https://github.com/twentyhq/twenty/pull/24357)) by @github-actions - refactor(i18n): key metadata catalog entries per role with message context ([#24360](https://github.com/twentyhq/twenty/pull/24360)) by @FelixMalfait - feat(call-recorder): cancel open recording requests and upcoming Recall bots on uninstall ([#24361](https://github.com/twentyhq/twenty/pull/24361)) by @ehconitin - docs: rightsize CLAUDE.md to gotchas, add AGENTS.md symlink ([#24362](https://github.com/twentyhq/twenty/pull/24362)) by @FelixMalfait - Generate command menu item mocks instead of hand-maintaining them ([#24363](https://github.com/twentyhq/twenty/pull/24363)) by @FelixMalfait - test(server): cover cursor pagination ordered by a morph relation leg ([#24364](https://github.com/twentyhq/twenty/pull/24364)) by @FelixMalfait - fix(front): keep empty values at the bottom for ascending sorts ([#24366](https://github.com/twentyhq/twenty/pull/24366)) by @FelixMalfait - i18n - docs translations ([#24368](https://github.com/twentyhq/twenty/pull/24368)) by @github-actions - Allow prop spreading in twenty-ui and remove the unused VISIBILITY_HIDDEN export ([#24370](https://github.com/twentyhq/twenty/pull/24370)) by @bosiraphael - Edit metadata translations in the UI: per-entity side panel + translate-or-rename prompt ([#24374](https://github.com/twentyhq/twenty/pull/24374)) by @FelixMalfait - fix(workflow): flag a trigger filter whose field reference is broken ([#24377](https://github.com/twentyhq/twenty/pull/24377)) by @thomtrp - i18n - docs translations ([#24379](https://github.com/twentyhq/twenty/pull/24379)) by @github-actions - fix(filter): enforce conjunctive multi-token matching for composite name filters (#24260) ([#24380](https://github.com/twentyhq/twenty/pull/24380)) by @jihadMo - refactor(server): compile SQL order clauses from the resolved orderBy leaves ([#24382](https://github.com/twentyhq/twenty/pull/24382)) by @FelixMalfait - fix(billing) - unblock resource credit upgrades rejected by Stripe ([#24383](https://github.com/twentyhq/twenty/pull/24383)) by @etiennejouan - Tag chat error events with their chat kind ([#24387](https://github.com/twentyhq/twenty/pull/24387)) by @bosiraphael - i18n - docs translations ([#24390](https://github.com/twentyhq/twenty/pull/24390)) by @github-actions - fix: repair escaped inline-code tags in Crowdin docs translations ([#24397](https://github.com/twentyhq/twenty/pull/24397)) by @abdulrahmancodes - fix: always pull app and website translations on schedule ([#24400](https://github.com/twentyhq/twenty/pull/24400)) by @abdulrahmancodes - Let a server route declare which HTTP methods it answers ([#24401](https://github.com/twentyhq/twenty/pull/24401)) by @emmanuelhb56 - fix(server): timeline calendar events denied on the ORM v2 read path ([#24403](https://github.com/twentyhq/twenty/pull/24403)) by @FelixMalfait - Update docs ([#24404](https://github.com/twentyhq/twenty/pull/24404)) by @BOHEUS - Render pre-2.33 command menu item labels instead of raw template expressions ([#24405](https://github.com/twentyhq/twenty/pull/24405)) by @FelixMalfait - Resolve object labels in search results through the shared resolver ([#24406](https://github.com/twentyhq/twenty/pull/24406)) by @FelixMalfait - Stop a manifest without translations from deleting an application's stored locales ([#24408](https://github.com/twentyhq/twenty/pull/24408)) by @FelixMalfait - Give the REST metadata API one label-resolution path ([#24410](https://github.com/twentyhq/twenty/pull/24410)) by @FelixMalfait - i18n - docs translations ([#24413](https://github.com/twentyhq/twenty/pull/24413)) by @github-actions - v1.6.3 — Remove the ranking field from the partner model ([#24414](https://github.com/twentyhq/twenty/pull/24414)) by @rashad - Collapse the 24 view permission guards into three ([#24415](https://github.com/twentyhq/twenty/pull/24415)) by @FelixMalfait - i18n - translations ([#24417](https://github.com/twentyhq/twenty/pull/24417)) by @github-actions - i18n - website translations ([#24418](https://github.com/twentyhq/twenty/pull/24418)) by @github-actions - i18n - translations ([#24419](https://github.com/twentyhq/twenty/pull/24419)) by @github-actions - i18n - translations ([#24423](https://github.com/twentyhq/twenty/pull/24423)) by @github-actions - i18n - translations ([#24424](https://github.com/twentyhq/twenty/pull/24424)) by @github-actions - i18n - translations ([#24426](https://github.com/twentyhq/twenty/pull/24426)) by @github-actions - Fix AI FAQ: self-hosted custom models don't need an Organization license ([#24430](https://github.com/twentyhq/twenty/pull/24430)) by @thomtrp - Revert AI FAQ wording on self-hosted custom models ([#24435](https://github.com/twentyhq/twenty/pull/24435)) by @thomtrp - i18n - translations ([#24436](https://github.com/twentyhq/twenty/pull/24436)) by @github-actions - i18n - docs translations ([#24438](https://github.com/twentyhq/twenty/pull/24438)) by @github-actions - i18n - translations ([#24439](https://github.com/twentyhq/twenty/pull/24439)) by @github-actions - i18n - website translations ([#24440](https://github.com/twentyhq/twenty/pull/24440)) by @github-actions - i18n - translations ([#24442](https://github.com/twentyhq/twenty/pull/24442)) by @github-actions - i18n - translations ([#24443](https://github.com/twentyhq/twenty/pull/24443)) by @github-actions - i18n - translations ([#24448](https://github.com/twentyhq/twenty/pull/24448)) by @github-actions - i18n - website translations ([#24449](https://github.com/twentyhq/twenty/pull/24449)) by @github-actions - i18n - docs translations ([#24450](https://github.com/twentyhq/twenty/pull/24450)) by @github-actions - i18n - translations ([#24455](https://github.com/twentyhq/twenty/pull/24455)) by @github-actions - i18n - translations ([#24457](https://github.com/twentyhq/twenty/pull/24457)) by @github-actions - v1.6.4 — feat(partners): expose marketplace ranking metadata on the list endpoint ([#24459](https://github.com/twentyhq/twenty/pull/24459)) by @rashad - Rank marketplace partners by evidence instead of by name (needs twenty-partners 1.6.4) ([#24460](https://github.com/twentyhq/twenty/pull/24460)) by @rashad - i18n - translations ([#24462](https://github.com/twentyhq/twenty/pull/24462)) by @github-actions - i18n - translations ([#24464](https://github.com/twentyhq/twenty/pull/24464)) by @github-actions - i18n - translations ([#24467](https://github.com/twentyhq/twenty/pull/24467)) by @github-actions - i18n - translations ([#24468](https://github.com/twentyhq/twenty/pull/24468)) by @github-actions - i18n - translations ([#24469](https://github.com/twentyhq/twenty/pull/24469)) by @github-actions - i18n - translations ([#24470](https://github.com/twentyhq/twenty/pull/24470)) by @github-actions - i18n - translations ([#24476](https://github.com/twentyhq/twenty/pull/24476)) by @github-actions - i18n - translations ([#24477](https://github.com/twentyhq/twenty/pull/24477)) by @github-actions - i18n - translations ([#24479](https://github.com/twentyhq/twenty/pull/24479)) by @github-actions - i18n - translations ([#24480](https://github.com/twentyhq/twenty/pull/24480)) by @github-actions - fix: bump undici to 6.28.0 across app lockfiles (Dependabot) ([#24482](https://github.com/twentyhq/twenty/pull/24482)) by @mabdullahabaid - i18n - translations ([#24484](https://github.com/twentyhq/twenty/pull/24484)) by @github-actions - i18n - translations ([#24485](https://github.com/twentyhq/twenty/pull/24485)) by @github-actions - fix: bump ip-address to 10.5.0 in app lockfiles (Dependabot) ([#24487](https://github.com/twentyhq/twenty/pull/24487)) by @mabdullahabaid - fix: bump nanoid to 5.1.16 (Dependabot) ([#24489](https://github.com/twentyhq/twenty/pull/24489)) by @mabdullahabaid - fix: bump fast-uri 3.1.4 - 3.1.5 (Dependabot) ([#24491](https://github.com/twentyhq/twenty/pull/24491)) by @mabdullahabaid - fix: bump socket.io-parser 4.2.6 - 4.2.7 (Dependabot) ([#24492](https://github.com/twentyhq/twenty/pull/24492)) by @mabdullahabaid - feat(logic-function): give handlers an execution context, and a choice of whose access each call uses ([#24493](https://github.com/twentyhq/twenty/pull/24493)) by @FelixMalfait - fix(twenty-orm): let an application write its own records while serving a person ([#24494](https://github.com/twentyhq/twenty/pull/24494)) by @FelixMalfait - Give the i18n context helper one home ([#24495](https://github.com/twentyhq/twenty/pull/24495)) by @FelixMalfait - fix: bump nx 22.7.5 - 22.7.8 (Dependabot) ([#24496](https://github.com/twentyhq/twenty/pull/24496)) by @mabdullahabaid - i18n - translations ([#24497](https://github.com/twentyhq/twenty/pull/24497)) by @github-actions - Read translatable properties without a cast ([#24498](https://github.com/twentyhq/twenty/pull/24498)) by @FelixMalfait - i18n - docs translations ([#24500](https://github.com/twentyhq/twenty/pull/24500)) by @github-actions - i18n - translations ([#24506](https://github.com/twentyhq/twenty/pull/24506)) by @github-actions - i18n - translations ([#24507](https://github.com/twentyhq/twenty/pull/24507)) by @github-actions - i18n - translations ([#24509](https://github.com/twentyhq/twenty/pull/24509)) by @github-actions - Reduce non-AI Sentry trace sampling ([#24511](https://github.com/twentyhq/twenty/pull/24511)) by @bosiraphael - docs(codex-plugin): use apply and plan commands ([#24512](https://github.com/twentyhq/twenty/pull/24512)) by @FelixMalfait - chore(front): remove unused application data table ([#24513](https://github.com/twentyhq/twenty/pull/24513)) by @FelixMalfait - fix(sdk): rerun dev sync when changes arrive during sync ([#24514](https://github.com/twentyhq/twenty/pull/24514)) by @FelixMalfait - fix(server): prevent cleared PromiseMemoizer work from overwriting newer values ([#24515](https://github.com/twentyhq/twenty/pull/24515)) by @FelixMalfait - fix(ui): keep Checkbox state controlled ([#24516](https://github.com/twentyhq/twenty/pull/24516)) by @FelixMalfait - i18n - translations ([#24522](https://github.com/twentyhq/twenty/pull/24522)) by @github-actions - fix(auth): sign up in the resolved workspace in single-workspace mode ([#24523](https://github.com/twentyhq/twenty/pull/24523)) by @caveman99 - Match participants on the transaction that inserted them ([#24525](https://github.com/twentyhq/twenty/pull/24525)) by @neo773 - i18n - translations ([#24527](https://github.com/twentyhq/twenty/pull/24527)) by @github-actions - i18n - translations ([#24528](https://github.com/twentyhq/twenty/pull/24528)) by @github-actions - i18n - docs translations ([#24529](https://github.com/twentyhq/twenty/pull/24529)) by @github-actions - i18n - translations ([#24530](https://github.com/twentyhq/twenty/pull/24530)) by @github-actions - fix(ui): let AnimatedPlaceholder asset maps infer their key union ([#24531](https://github.com/twentyhq/twenty/pull/24531)) by @FelixMalfait - chore(sdk): delete the dead twenty-client-template copy ([#24532](https://github.com/twentyhq/twenty/pull/24532)) by @FelixMalfait - refactor(server): drop unused flat-metadata params from OpenAPI path builders ([#24533](https://github.com/twentyhq/twenty/pull/24533)) by @FelixMalfait - fix(server): honor the statusCode option CustomException declares ([#24534](https://github.com/twentyhq/twenty/pull/24534)) by @FelixMalfait - refactor(oxlint-rules): de-duplicate the two guarded-endpoint rules ([#24535](https://github.com/twentyhq/twenty/pull/24535)) by @FelixMalfait - fix(front): narrow TableSortValue to the direction the table implements ([#24536](https://github.com/twentyhq/twenty/pull/24536)) by @FelixMalfait - i18n - translations ([#24539](https://github.com/twentyhq/twenty/pull/24539)) by @github-actions - i18n - translations ([#24543](https://github.com/twentyhq/twenty/pull/24543)) by @github-actions - refactor(rest): move restore to a suffix path and make restore-one reachable ([#24544](https://github.com/twentyhq/twenty/pull/24544)) by @FelixMalfait - i18n - translations ([#24545](https://github.com/twentyhq/twenty/pull/24545)) by @github-actions - i18n - website translations ([#24546](https://github.com/twentyhq/twenty/pull/24546)) by @github-actions - i18n - translations ([#24547](https://github.com/twentyhq/twenty/pull/24547)) by @github-actions - i18n - website translations ([#24549](https://github.com/twentyhq/twenty/pull/24549)) by @github-actions - i18n - translations ([#24553](https://github.com/twentyhq/twenty/pull/24553)) by @github-actions - i18n - website translations ([#24554](https://github.com/twentyhq/twenty/pull/24554)) by @github-actions - i18n - translations ([#24555](https://github.com/twentyhq/twenty/pull/24555)) by @github-actions - i18n - website translations ([#24556](https://github.com/twentyhq/twenty/pull/24556)) by @github-actions - i18n - website translations ([#24557](https://github.com/twentyhq/twenty/pull/24557)) by @github-actions - i18n - translations ([#24558](https://github.com/twentyhq/twenty/pull/24558)) by @github-actions - i18n - translations ([#24564](https://github.com/twentyhq/twenty/pull/24564)) by @github-actions - i18n - website translations ([#24565](https://github.com/twentyhq/twenty/pull/24565)) by @github-actions - i18n - website translations ([#24566](https://github.com/twentyhq/twenty/pull/24566)) by @github-actions - i18n - translations ([#24567](https://github.com/twentyhq/twenty/pull/24567)) by @github-actions - Replace timelineActivity.name with a timelineActivityType id ([#24568](https://github.com/twentyhq/twenty/pull/24568)) by @FelixMalfait - i18n - translations ([#24569](https://github.com/twentyhq/twenty/pull/24569)) by @github-actions - i18n - translations ([#24570](https://github.com/twentyhq/twenty/pull/24570)) by @github-actions - i18n - website translations ([#24571](https://github.com/twentyhq/twenty/pull/24571)) by @github-actions - i18n - website translations ([#24572](https://github.com/twentyhq/twenty/pull/24572)) by @github-actions - i18n - translations ([#24574](https://github.com/twentyhq/twenty/pull/24574)) by @github-actions - i18n - website translations ([#24575](https://github.com/twentyhq/twenty/pull/24575)) by @github-actions - i18n - website translations ([#24576](https://github.com/twentyhq/twenty/pull/24576)) by @github-actions - i18n - translations ([#24577](https://github.com/twentyhq/twenty/pull/24577)) by @github-actions - i18n - translations ([#24578](https://github.com/twentyhq/twenty/pull/24578)) by @github-actions - i18n - website translations ([#24579](https://github.com/twentyhq/twenty/pull/24579)) by @github-actions - i18n - website translations ([#24580](https://github.com/twentyhq/twenty/pull/24580)) by @github-actions - i18n - translations ([#24581](https://github.com/twentyhq/twenty/pull/24581)) by @github-actions - chore: sync AI model catalog from models.dev ([#24584](https://github.com/twentyhq/twenty/pull/24584)) by @github-actions - i18n - translations ([#24585](https://github.com/twentyhq/twenty/pull/24585)) by @github-actions - i18n - website translations ([#24586](https://github.com/twentyhq/twenty/pull/24586)) by @github-actions - i18n - website translations ([#24587](https://github.com/twentyhq/twenty/pull/24587)) by @github-actions - i18n - translations ([#24588](https://github.com/twentyhq/twenty/pull/24588)) by @github-actions - fix(ci): stop the i18n formatting ping-pong between Crowdin pull and push workflows ([#24590](https://github.com/twentyhq/twenty/pull/24590)) by @abdulrahmancodes - fix(open-api): make request-body examples deterministic ([#24591](https://github.com/twentyhq/twenty/pull/24591)) by @FelixMalfait - i18n - translations ([#24592](https://github.com/twentyhq/twenty/pull/24592)) by @github-actions - i18n - website translations ([#24593](https://github.com/twentyhq/twenty/pull/24593)) by @github-actions - i18n - website translations ([#24594](https://github.com/twentyhq/twenty/pull/24594)) by @github-actions - i18n - translations ([#24595](https://github.com/twentyhq/twenty/pull/24595)) by @github-actions - fix: bump postcss to 8.5.26 across app lockfiles (Dependabot) ([#24596](https://github.com/twentyhq/twenty/pull/24596)) by @mabdullahabaid - Fix legacy activity junction target backfill ([#24598](https://github.com/twentyhq/twenty/pull/24598)) by @FelixMalfait - i18n - translations ([#24600](https://github.com/twentyhq/twenty/pull/24600)) by @github-actions - i18n - translations ([#24602](https://github.com/twentyhq/twenty/pull/24602)) by @github-actions - i18n - website translations ([#24603](https://github.com/twentyhq/twenty/pull/24603)) by @github-actions - i18n - website translations ([#24604](https://github.com/twentyhq/twenty/pull/24604)) by @github-actions - i18n - translations ([#24606](https://github.com/twentyhq/twenty/pull/24606)) by @github-actions - chore: bump version to 2.34.0 ([#24609](https://github.com/twentyhq/twenty/pull/24609)) by @twenty-pr - fix: bump brace-expansion to 5.0.9 in app lockfiles (Dependabot) ([#24615](https://github.com/twentyhq/twenty/pull/24615)) by @mabdullahabaid - i18n - translations ([#24616](https://github.com/twentyhq/twenty/pull/24616)) by @github-actions - i18n - website translations ([#24617](https://github.com/twentyhq/twenty/pull/24617)) by @github-actions - i18n - website translations ([#24618](https://github.com/twentyhq/twenty/pull/24618)) by @github-actions - i18n - translations ([#24619](https://github.com/twentyhq/twenty/pull/24619)) by @github-actions - Make timeline activity types a generic application contract ([#24620](https://github.com/twentyhq/twenty/pull/24620)) by @FelixMalfait - i18n - translations ([#24622](https://github.com/twentyhq/twenty/pull/24622)) by @github-actions - i18n - website translations ([#24623](https://github.com/twentyhq/twenty/pull/24623)) by @github-actions - i18n - website translations ([#24624](https://github.com/twentyhq/twenty/pull/24624)) by @github-actions - i18n - translations ([#24625](https://github.com/twentyhq/twenty/pull/24625)) by @github-actions - i18n - translations ([#24627](https://github.com/twentyhq/twenty/pull/24627)) by @github-actions - i18n - website translations ([#24628](https://github.com/twentyhq/twenty/pull/24628)) by @github-actions - i18n - translations ([#24629](https://github.com/twentyhq/twenty/pull/24629)) by @github-actions - i18n - website translations ([#24630](https://github.com/twentyhq/twenty/pull/24630)) by @github-actions - i18n - translations ([#24631](https://github.com/twentyhq/twenty/pull/24631)) by @github-actions - i18n - website translations ([#24632](https://github.com/twentyhq/twenty/pull/24632)) by @github-actions - i18n - website translations ([#24633](https://github.com/twentyhq/twenty/pull/24633)) by @github-actions - i18n - translations ([#24634](https://github.com/twentyhq/twenty/pull/24634)) by @github-actions - Emit attachment timeline activities through direct relations ([#24637](https://github.com/twentyhq/twenty/pull/24637)) by @FelixMalfait - Repair activity junction targets for custom-only morphs ([#24638](https://github.com/twentyhq/twenty/pull/24638)) by @FelixMalfait - i18n - docs translations ([#24640](https://github.com/twentyhq/twenty/pull/24640)) by @github-actions - Fix composite field update events ([#24641](https://github.com/twentyhq/twenty/pull/24641)) by @FelixMalfait - Guard attachment activity upgrade on legacy schemas ([#24642](https://github.com/twentyhq/twenty/pull/24642)) by @FelixMalfait - Remove generated attachment locale catalog changes ([#24643](https://github.com/twentyhq/twenty/pull/24643)) by @FelixMalfait - Fix update events across ORM write paths ([#24644](https://github.com/twentyhq/twenty/pull/24644)) by @FelixMalfait - Fix legacy composite update event snapshots ([#24648](https://github.com/twentyhq/twenty/pull/24648)) by @FelixMalfait </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.30.0...twenty/v2.34.0