github twentyhq/twenty twenty/v2.34.0

5 hours ago

⚠️ Breaking changes

✨ New features

💅 Improvements & UX

🐛 Bug fixes

  • fix: add SettingsRolesQueryEffect to invite tab (#23320) by @atharv-sys32
  • fix(twenty-server): resolve standardOverrides description in MCP CRUD tool schemas (#23562) (#23606) by @Shinu-Cherian
  • fix: unblock AI chat on manually added models (#23695) by @brunobuddy
  • fix(server,shared): validate view filter values on app manifest sync (#23848) by @thomtrp
  • fix(twenty-server): resolve uninstall hook from application column set at sync time (#23908) by @ehconitin
  • fix: preserve morph-related records when merging people (#23945) by @DebadityaHait
  • fix(front): prevent stale timeline diff from crashing the Timeline tab (#23972) by @thomtrp
  • fix(workflow): honor defaultSettings input for CODE/LOGIC_FUNCTION step creation (#23976) by @unchainedio
  • fix(ui): render avatar image as CSS background to fix Safari Kanban repaint (#23978) by @thomtrp
  • fix(server): validate row level permission predicate values at write time (#23999) by @thomtrp
  • fix(upgrade): skip 2.20 campaign view columns whose field does not exist yet (#24003) by @neo773
  • fix(messaging): stop syncing unsubscribe requests (#24007) by @neo773
  • fix(front): select first matching option on enter in multi-select input (#24015) by @thomtrp
  • fix: validate chart filter operands and values on app manifest sync (#24027) by @thomtrp
  • fix(messaging): stop logging deleted-message 404s during Gmail import (#24030) by @neo773
  • fix(sync): only mark channels FAILED_INSUFFICIENT_PERMISSIONS on documented permanent account errors (#24035) by @neo773
  • fix(front): hide the remove icon on the last invite-team input (#24039) by @FelixMalfait
  • fix(front): stop showing No results found while command menu items are displayed (#24040) by @thomtrp
  • fix(billing): skip deleted workspaces in the credit balance backfill (#24067) by @FelixMalfait
  • fix(billing): skip the rollover for workspaces that no longer exist (#24068) by @FelixMalfait
  • fix(calendar): stop CalDAV errors falling to UNKNOWN and retrying forever (#24079) by @neo773
  • fix(front): make logout navigate once (unbreaks the invite e2e) (#24128) by @charlesBochet
  • fix(messaging): default new channels to METADATA visibility instead of SHARE_EVERYTHING (#24135) by @neo773
  • fix(workflow): keep converging steps when an if/else branch is skipped (#24136) by @thomtrp
  • fix(front): show Select dropdowns above modals and fix the rollover credits label (#24137) by @FelixMalfait
  • fix: handle unavailable IMAP mailboxes (#24141) by @neo773
  • fix(billing): map already-subscribed checkout retry to a user error (#24150) by @thomtrp
  • fix(postcard): make the app-prod-parity postcard e2e suite pass (#24167) by @charlesBochet
  • fix(front): hide record table header when empty on mobile (#24185) by @FelixMalfait
  • fix(server): quote the alias in ORM v2 record-identifier where clauses (#24213) by @charlesBochet
  • fix(server): fail FIND_RECORDS cleanly on an uncomputable filter (#24215) by @thomtrp
  • fix(server): add findAndCount to the ORM v2 workspace repository (#24244) by @charlesBochet
  • fix: preserve theme tokens when CSS variables are unresolved (#24250) by @anamikasingh200
  • fix(tests): make the gmail mock honour the in:sent search filter (#24259) by @thomtrp
  • fix(front): wrap relation card rows in RecordDetailRecordsListContainer (#24261) by @thomtrp
  • fix(front): stop sending the dormant token pair on the SSE stream under cookie auth (#24274) by @FelixMalfait
  • fix(front): recover from a session cookie the server does not accept (#24275) by @FelixMalfait
  • fix(server): report an unauthenticated GraphQL request as UNAUTHENTICATED, not FORBIDDEN (#24276) by @FelixMalfait
  • fix(twenty-slack): point the README setup link at an absolute url (#24288) by @abdulrahmancodes
  • fix(server): map ORM v2 driver errors to typed exceptions (#24290) by @thomtrp
  • fix(user-workspace): stop pretending role targets are soft deleted (#24295) by @FelixMalfait
  • fix(server): resolve morph join column when walking relations to person (#24298) by @thomtrp
  • fix(server): ORM v2 rollout safety - rollback-proof transactions and a working flag rollback (#24299) by @thomtrp
  • fix(i18n): translate page layout names (#24315) by @FelixMalfait
  • fix(i18n): resolve metadata subscription events against the subscriber's locale (#24323) by @FelixMalfait
  • fix(server): ORM v2 write-path parity - persist workflow step logs, skip undefined values (#24330) by @thomtrp
  • fix(server): make cursor pagination exhaustive for any orderBy (#24354) by @FelixMalfait
  • fix(front): keep empty values at the bottom for ascending sorts (#24366) by @FelixMalfait
  • fix(workflow): flag a trigger filter whose field reference is broken (#24377) by @thomtrp
  • fix(filter): enforce conjunctive multi-token matching for composite name filters (#24260) (#24380) by @jihadMo
  • fix: repair escaped inline-code tags in Crowdin docs translations (#24397) by @abdulrahmancodes
  • fix: always pull app and website translations on schedule (#24400) by @abdulrahmancodes
  • fix(server): timeline calendar events denied on the ORM v2 read path (#24403) by @FelixMalfait
  • fix: bump undici to 6.28.0 across app lockfiles (Dependabot) (#24482) by @mabdullahabaid
  • fix: bump ip-address to 10.5.0 in app lockfiles (Dependabot) (#24487) by @mabdullahabaid
  • fix: bump nanoid to 5.1.16 (Dependabot) (#24489) by @mabdullahabaid
  • fix: bump fast-uri 3.1.4 - 3.1.5 (Dependabot) (#24491) by @mabdullahabaid
  • fix: bump socket.io-parser 4.2.6 - 4.2.7 (Dependabot) (#24492) by @mabdullahabaid
  • fix(twenty-orm): let an application write its own records while serving a person (#24494) by @FelixMalfait
  • fix(sdk): rerun dev sync when changes arrive during sync (#24514) by @FelixMalfait
  • fix(server): prevent cleared PromiseMemoizer work from overwriting newer values (#24515) by @FelixMalfait
  • fix(ui): keep Checkbox state controlled (#24516) by @FelixMalfait
  • fix(auth): sign up in the resolved workspace in single-workspace mode (#24523) by @caveman99
  • fix(ui): let AnimatedPlaceholder asset maps infer their key union (#24531) by @FelixMalfait
  • fix(server): honor the statusCode option CustomException declares (#24534) by @FelixMalfait
  • fix(front): narrow TableSortValue to the direction the table implements (#24536) by @FelixMalfait
  • fix(ci): stop the i18n formatting ping-pong between Crowdin pull and push workflows (#24590) by @abdulrahmancodes
  • fix: bump postcss to 8.5.26 across app lockfiles (Dependabot) (#24596) by @mabdullahabaid
  • fix: bump brace-expansion to 5.0.9 in app lockfiles (Dependabot) (#24615) by @mabdullahabaid

⚡ Performance

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

🔧 Developer & API

🏗️ Internal changes (31)

🎉 New contributors

Full changelog (424 PRs)
  • Twenty-front: Record Calendar multi drag functionality (#23316) by @git-init-priyanshu
  • fix: add SettingsRolesQueryEffect to invite tab (#23320) by @atharv-sys32
  • Implement MutationObserver in the front component worker sandbox (#23489) by @bosiraphael
  • fix(twenty-server): resolve standardOverrides description in MCP CRUD tool schemas (#23562) (#23606) by @Shinu-Cherian
  • Remove the frontend's remaining view.openRecordIn plumbing (#23627) by @FelixMalfait
  • Run application uninstall hooks when deleting a workspace (#23633) by @ehconitin
  • System record page layout (#23651) by @prastoin
  • Add GraphQL direct execution cost metrics (#23655) by @Weiko
  • Rework the twenty-partners Claude skills into a reviewable lead path (#23661) by @rashad
  • Fix handle in ConnectionProvider (#23674) by @BOHEUS
  • fix: unblock AI chat on manually added models (#23695) by @brunobuddy
  • Allow going back to the previous onboarding step (#23716) by @bosiraphael
  • Make localStorage and sessionStorage work in app front components (#23761) by @bosiraphael
  • Share front component dependencies through a per-app bundle (#23773) by @bosiraphael
  • feat(twenty-slack): pass Slack conversation history to runAgent as messages (#23821) by @abdulrahmancodes
  • fix(server,shared): validate view filter values on app manifest sync (#23848) by @thomtrp
  • Add a deprecated attribute to app manifest variables (#23868) by @bosiraphael
  • feat(slack): native agent replies, thinking status everywhere (#23886) by @abdulrahmancodes
  • feat(slack): give the assistant a concrete reply anatomy (#23887) by @abdulrahmancodes
  • Redirect to companies and collapse the chat when workspace setup ends (#23904) by @bosiraphael
  • fix(twenty-server): resolve uninstall hook from application column set at sync time (#23908) by @ehconitin
  • Add native call recording transcript tab to the calendar event record page (#23909) by @ehconitin
  • fix: preserve morph-related records when merging people (#23945) by @DebadityaHait
  • Split metadata loader and filter responsibilities (#23954) by @FelixMalfait
  • Refactor CalDAV event fetching to use davRequest API (#23956) by @neo773
  • Handle Microsoft calendar token refresh failures gracefully (#23958) by @neo773
  • feat(campaign): move the campaign envelope fields above the body (#23959) by @FelixMalfait
  • [Twenty-front][Calendar]: Prevent calendar card cell hover/edit state for multi-day records (#23962) by @git-init-priyanshu
  • feat(front): expand button and record actions in the side panel footer (#23965) by @FelixMalfait
  • i18n - translations (#23966) by @github-actions
  • chore: bump version to 2.31.0 (#23967) by @twenty-pr
  • Enrich the onboarding chat kickoff with person and workspace context (#23970) by @bosiraphael
  • fix(front): prevent stale timeline diff from crashing the Timeline tab (#23972) by @thomtrp
  • feat(billing): replace the credit balance column with a credit grant ledger (#23973) by @FelixMalfait
  • i18n - translations (#23974) by @github-actions
  • fix(workflow): honor defaultSettings input for CODE/LOGIC_FUNCTION step creation (#23976) by @unchainedio
  • fix(ui): render avatar image as CSS background to fix Safari Kanban repaint (#23978) by @thomtrp
  • Stop retrying the SSE event stream once the client is signed out (#23979) by @FelixMalfait
  • perf(server): remove the compact-storage flag, slice cache demotion, use a plain LIMIT on find-many (#23980) by @charlesBochet
  • feat(messaging): import recent messages as soon as an account connects (#23983) by @neo773
  • feat(slack): act as the workspace member who tagged the bot (#23985) by @abdulrahmancodes
  • chore: sync AI model catalog from models.dev (#23988) by @github-actions
  • feat(server): ORM v2, a TypeORM-free workspace read path behind a flag (#23991) by @charlesBochet
  • Add native call recording summary tab to the calendar event record page (#23992) by @ehconitin
  • i18n - translations (#23993) by @github-actions
  • i18n - translations (#23995) by @github-actions
  • chore(slack): bump app version to 0.3.0 (#23996) by @abdulrahmancodes
  • fix(server): validate row level permission predicate values at write time (#23999) by @thomtrp
  • fix(upgrade): skip 2.20 campaign view columns whose field does not exist yet (#24003) by @neo773
  • i18n - translations (#24006) by @github-actions
  • fix(messaging): stop syncing unsubscribe requests (#24007) by @neo773
  • Disable jest coverage locally and cap twenty-server test workers (#24008) by @bosiraphael
  • i18n - translations (#24010) by @github-actions
  • chore: set npm packages to 2.31.0-alpha.1 (#24011) by @prastoin
  • Ask about CRM migration at the start of the workspace setup chat (#24013) by @bosiraphael
  • i18n - translations (#24014) by @github-actions
  • fix(front): select first matching option on enter in multi-select input (#24015) by @thomtrp
  • Migrate call-recorder and fireflies to twenty-sdk 2.31.0-alpha.1 (#24016) by @prastoin
  • Send file attachments when answering an AI chat question (#24017) by @bosiraphael
  • i18n - docs translations (#24018) by @github-actions
  • perf(server): cut Sentry instrumentation overhead and stop packing the working set (#24019) by @charlesBochet
  • Fix record-page reconcile self-collision on user-added FIELDS widgets (#24022) by @prastoin
  • Align DPA entity roles and signatures (#24026) by @FelixMalfait
  • fix: validate chart filter operands and values on app manifest sync (#24027) by @thomtrp
  • fix(messaging): stop logging deleted-message 404s during Gmail import (#24030) by @neo773
  • Remove the send Slack message front component (#24031) by @abdulrahmancodes
  • fix(sync): only mark channels FAILED_INSUFFICIENT_PERMISSIONS on documented permanent account errors (#24035) by @neo773
  • fix(front): hide the remove icon on the last invite-team input (#24039) by @FelixMalfait
  • fix(front): stop showing No results found while command menu items are displayed (#24040) by @thomtrp
  • Make server-served front same-origin by default and surface CORS misconfig (#24041) by @FelixMalfait
  • feat(twenty-slack): stop Slack unfurling the record links in assistant replies (#24054) by @abdulrahmancodes
  • i18n - docs translations (#24055) by @github-actions
  • i18n - translations (#24057) by @github-actions
  • i18n - translations (#24058) by @github-actions
  • Remove alpha sufix to npm packages (#24059) by @prastoin
  • chore: bump version to 2.32.0 (#24061) by @twenty-pr
  • i18n - translations (#24062) by @github-actions
  • i18n - docs translations (#24064) by @github-actions
  • fix(billing): skip deleted workspaces in the credit balance backfill (#24067) by @FelixMalfait
  • fix(billing): skip the rollover for workspaces that no longer exist (#24068) by @FelixMalfait
  • i18n - translations (#24073) by @github-actions
  • feat(server): route findOne through the ORM v2 read path (#24077) by @charlesBochet
  • fix(calendar): stop CalDAV errors falling to UNKNOWN and retrying forever (#24079) by @neo773
  • i18n - docs translations (#24080) by @github-actions
  • perf(server): workspace-cache packing budget + class-validator fast paths (#24083) by @charlesBochet
  • feat(server): observe ORM v2 read-path usage with a metric (#24086) by @charlesBochet
  • feat(server): route findDuplicates through the ORM v2 read path (#24088) by @charlesBochet
  • feat(run-agent): scope run-as to the member's role and keep the application on the context (#24089) by @abdulrahmancodes
  • Modify PG_DATABASE_URL to include PG_DATABASE_NAME (#24091) by @pwntr
  • feat(server): route groupBy through the ORM v2 read path (#24092) by @charlesBochet
  • test(server): delete service unit specs (#24094) by @charlesBochet
  • feat(twenty-slack): release the Slack team claim when the install is revoked on the Slack side (#24097) by @abdulrahmancodes
  • i18n - translations (#24099) by @github-actions
  • refactor(server): extract pure service logic into utils (#24100) by @charlesBochet
  • feat(server): route nested relation loading through the ORM v2 read path (#24101) by @charlesBochet
  • i18n - translations (#24102) by @github-actions
  • test(server): integration coverage for messaging and calendar sync (#24104) by @neo773
  • test(server): IMAP and CalDAV integration tests against real servers (#24105) by @neo773
  • feat(twenty-slack): interactivity endpoint + native feedback buttons on assistant answers (#24107) by @abdulrahmancodes
  • chore: sync AI model catalog from models.dev (#24110) by @github-actions
  • feat(server): load mutation nested relations through the ORM v2 read path (#24113) by @charlesBochet
  • chore: remove low-value comments (#24114) by @charlesBochet
  • ci: unbreak CI E2E Main (same-origin front + fix the specs behind the login gate) (#24115) by @charlesBochet
  • feat: support gt/lt comparisons on select and rating filters (#24116) by @thomtrp
  • chore: remove low-value short comments (#24117) by @charlesBochet
  • feat(server): add the ORM v2 mutation statement layer (update/delete/soft-delete/restore) (#24118) by @charlesBochet
  • chore: remove low-value long comments (#24125) by @charlesBochet
  • i18n - translations (#24126) by @github-actions
  • fix(front): make logout navigate once (unbreaks the invite e2e) (#24128) by @charlesBochet
  • refactor(server): name workspace-cache transforms compact/serialize/pack (#24129) by @charlesBochet
  • chore: replace JSDoc blocks on internal utils with short comments (#24130) by @charlesBochet
  • feat(server): route delete, destroy and restore through the ORM v2 write path (#24131) by @charlesBochet
  • Reorganize twenty-front-component-renderer into feature folders (#24132) by @bosiraphael
  • i18n - translations (#24133) by @github-actions
  • fix(messaging): default new channels to METADATA visibility instead of SHARE_EVERYTHING (#24135) by @neo773
  • fix(workflow): keep converging steps when an if/else branch is skipped (#24136) by @thomtrp
  • fix(front): show Select dropdowns above modals and fix the rollover credits label (#24137) by @FelixMalfait
  • i18n - docs translations (#24139) by @github-actions
  • feat(server): route update through the ORM v2 write path (#24140) by @charlesBochet
  • fix: handle unavailable IMAP mailboxes (#24141) by @neo773
  • i18n - translations (#24142) by @github-actions
  • Install changed apps on the preview environment, document app previews for external repos (#24143) by @FelixMalfait
  • Persist admin panel chat filters across navigation (#24144) by @bosiraphael
  • feat(server): route create, upsert and merge through the ORM v2 write path (#24145) by @charlesBochet
  • i18n - translations (#24146) by @github-actions
  • i18n - translations (#24147) by @github-actions
  • ci: serialize the i18n workflows per branch (#24148) by @charlesBochet
  • fix(billing): map already-subscribed checkout retry to a user error (#24150) by @thomtrp
  • Skip contact creation when the connected account owner is gone (#24151) by @thomtrp
  • Fireflies app settings tab with API-key-gated call history backfill (#24152) by @ehconitin
  • Fix duplicate key errors during message import (#24154) by @thomtrp
  • i18n - docs translations (#24155) by @github-actions
  • Show pinned command menu actions as icons on mobile headers (#24156) by @FelixMalfait
  • Refresh the front component limitations doc (#24157) by @bosiraphael
  • docs: keep JSX tags out of translatable prose so Crowdin can rebuild (#24158) by @charlesBochet
  • i18n - translations (#24161) by @github-actions
  • i18n - translations (#24162) by @github-actions
  • test(server): cover outbound messaging and calendar providers (#24164) by @neo773
  • i18n - docs translations (#24166) by @github-actions
  • fix(postcard): make the app-prod-parity postcard e2e suite pass (#24167) by @charlesBochet
  • Make the mobile navigation menu a real home page (#24168) by @FelixMalfait
  • feat(server): ORM v2 workspace repository read-family methods (#24170) by @charlesBochet
  • Remove selection checkboxes and the aggregate footer on mobile (#24172) by @FelixMalfait
  • feat(front): allow relations to system objects under an Advanced section (#24173) by @FelixMalfait
  • i18n - translations (#24174) by @github-actions
  • AI chat: never fail silently on exhausted credits (#24175) by @FelixMalfait
  • Give the mobile settings header its page title (#24176) by @FelixMalfait
  • feat(server): route module workspace repositories through ORM v2 and drop the EntityMetadata build (Stage B + C) (#24179) by @charlesBochet
  • test(server): cover workflow email and calendar actions across providers (#24181) by @neo773
  • feat(server): eliminate v1 ORM from workspace write transactions on the flag (#24182) by @charlesBochet
  • Stop the welcome title overflowing on mobile (#24183) by @FelixMalfait
  • Scroll the tab row on mobile instead of hiding tabs behind a dropdown (#24184) by @FelixMalfait
  • fix(front): hide record table header when empty on mobile (#24185) by @FelixMalfait
  • chore: sync AI model catalog from models.dev (#24186) by @github-actions
  • i18n - translations (#24187) by @github-actions
  • Surface the real ClickHouse error when an insert fails (#24189) by @thomtrp
  • test(twenty-slack): cover the app end to end against a mocked Slack workspace (#24192) by @abdulrahmancodes
  • Make Other an explicit option in the AI chat question card (#24193) by @bosiraphael
  • Polyfill navigator.clipboard.writeText for front components (#24195) by @FelixMalfait
  • Point CI dispatches at twentyhq/twenty-factory (#24196) by @FelixMalfait
  • Extract provider-neutral webhook handlers from SES-specific services (#24200) by @FelixMalfait
  • Abstract inbound email retrieval behind message sources (#24201) by @FelixMalfait
  • Add Resend as a community emailing domain driver (#24202) by @FelixMalfait
  • App media recording via standard web API polyfills (compare with #24053) (#24203) by @FelixMalfait
  • refactor(front): support multiple widget header actions (#24204) by @ehconitin
  • Sample AI traces at 100% in Sentry and attribute AI calls (#24207) by @bosiraphael
  • feat(metadata): writability levels on object and field metadata (#24208) by @abdulrahmancodes
  • Interface scale preference via root CSS zoom (#24209) by @FelixMalfait
  • i18n - docs translations (#24210) by @github-actions
  • i18n - translations (#24212) by @github-actions
  • fix(server): quote the alias in ORM v2 record-identifier where clauses (#24213) by @charlesBochet
  • Ask the onboarding CRM migration question with the ask_questions tool (#24214) by @bosiraphael
  • fix(server): fail FIND_RECORDS cleanly on an uncomputable filter (#24215) by @thomtrp
  • Remove the dedicated media-notes example app workflow (#24216) by @FelixMalfait
  • i18n - translations (#24217) by @github-actions
  • perf(server): skip the ORM EntityMetadata build for ORM v2 workspaces at the cache layer (#24219) by @charlesBochet
  • Fix orphaned mirrored field permission blocking relation field updates (#24220) by @FelixMalfait
  • Merge language and scale into one Interface settings section (#24222) by @FelixMalfait
  • i18n - docs translations (#24224) by @github-actions
  • ORM v2: TypeORM parity for joins / andSelect / distinctOn (#24225) by @charlesBochet
  • chore: sync AI model catalog from models.dev (#24228) by @github-actions
  • Float the mobile bottom bar over content with a glass style (#24229) by @FelixMalfait
  • ORM v2: relation-keyed where clauses (#24230) by @charlesBochet
  • Turn the mobile bottom bar into the home page's tab bar (#24232) by @FelixMalfait
  • i18n - translations (#24233) by @github-actions
  • Restore primary pinned actions with footer-owned width measurement (#24235) by @FelixMalfait
  • i18n - translations (#24237) by @github-actions
  • fix(server): add findAndCount to the ORM v2 workspace repository (#24244) by @charlesBochet
  • fix: preserve theme tokens when CSS variables are unresolved (#24250) by @anamikasingh200
  • Give the mobile record header a proper title treatment (#24251) by @FelixMalfait
  • feat(sdk): let apps set writability on objects and fields (#24255) by @abdulrahmancodes
  • Make cookie sessions the only web auth path (#24257) by @FelixMalfait
  • Make deactivated objects editable from settings (#24258) by @thomtrp
  • fix(tests): make the gmail mock honour the in:sent search filter (#24259) by @thomtrp
  • fix(front): wrap relation card rows in RecordDetailRecordsListContainer (#24261) by @thomtrp
  • fix(billing) - void unpaid upgrade invoices so a failed charge cannot be collected later (#24264) by @etiennejouan
  • Show exact date on hover for timeline activity dates (#24265) by @FelixMalfait
  • i18n - translations (#24266) by @github-actions
  • Float the mobile bottom bar again and reserve its footprint in page content (#24267) by @FelixMalfait
  • i18n - translations (#24268) by @github-actions
  • Stop fetching unused morph targets in the timeline query (#24269) by @FelixMalfait
  • Skip relation queries for unset to-one join columns (#24270) by @FelixMalfait
  • i18n - translations (#24272) by @github-actions
  • fix(front): stop sending the dormant token pair on the SSE stream under cookie auth (#24274) by @FelixMalfait
  • fix(front): recover from a session cookie the server does not accept (#24275) by @FelixMalfait
  • fix(server): report an unauthenticated GraphQL request as UNAUTHENTICATED, not FORBIDDEN (#24276) by @FelixMalfait
  • Move presentational primitives from twenty-front to twenty-ui (#24277) by @bosiraphael
  • Add Text typography primitive with truncate and lineClamp (#24278) by @bosiraphael
  • Adopt Base UI compound Field for form fields (#24279) by @bosiraphael
  • Fix MCP tool calls reporting structured failures as success (#24280) by @etiennejouan
  • Show ask_questions as a readable Q&A card in the admin chat viewer (#24281) by @bosiraphael
  • i18n - docs translations (#24287) by @github-actions
  • fix(twenty-slack): point the README setup link at an absolute url (#24288) by @abdulrahmancodes
  • fix(server): map ORM v2 driver errors to typed exceptions (#24290) by @thomtrp
  • feat(front): delete a workflow step from the diagram node (#24292) by @thomtrp
  • i18n - translations (#24293) by @github-actions
  • refactor(twenty-orm): replace scoped repository save() with insert/update (#24294) by @FelixMalfait
  • fix(user-workspace): stop pretending role targets are soft deleted (#24295) by @FelixMalfait
  • Read property-mapped attributes back from getAttribute on remote elements (#24297) by @bosiraphael
  • fix(server): resolve morph join column when walking relations to person (#24298) by @thomtrp
  • fix(server): ORM v2 rollout safety - rollback-proof transactions and a working flag rollback (#24299) by @thomtrp
  • refactor(i18n) - share the message-id hash and the translatable registry [1/6] (#24300) by @FelixMalfait
  • Fix dashboard duplication rejecting relation-traversal chart filters (#24301) by @ehconitin
  • i18n - translations (#24302) by @github-actions
  • refactor(i18n) - resolve page layout and view field group labels through one resolver [2/6] (#24304) by @FelixMalfait
  • fix(i18n) - resolve view names through the shared resolver so app catalogs apply [3/6] (#24306) by @FelixMalfait
  • fix(i18n) - translate command menu item labels [4/6] (#24310) by @FelixMalfait
  • Gate twenty-ui interaction handlers on the element being clickable (#24311) by @bosiraphael
  • fix(i18n) - translate navigation menu item names [5/6] (#24312) by @FelixMalfait
  • i18n - translations (#24313) by @github-actions
  • fix(i18n): translate page layout names (#24315) by @FelixMalfait
  • i18n - translations (#24316) by @github-actions
  • Add retryable logic function failures with queue backoff (#24317) by @ehconitin
  • i18n - translations (#24318) by @github-actions
  • chore: bump version to 2.33.0 (#24319) by @thomtrp
  • i18n - translations (#24320) by @github-actions
  • refactor(i18n): own catalog resolution in one service so REST reaches app catalogs (#24321) by @FelixMalfait
  • fix(i18n): resolve metadata subscription events against the subscriber's locale (#24323) by @FelixMalfait
  • refactor(i18n): one runtime key space for translation catalogs (#24325) by @FelixMalfait
  • refactor(i18n): one placeholder syntax for every derived label (#24326) by @FelixMalfait
  • fix(mcp) - hydrate relation fields selected by name in MCP find tools (#24328) by @etiennejouan
  • fix(server): ORM v2 write-path parity - persist workflow step logs, skip undefined values (#24330) by @thomtrp
  • Guide the AI workspace setup with a dedicated system prompt and a next-step question (#24331) by @bosiraphael
  • feat(metadata): adopt SYSTEM writability, starting with search vectors (#24335) by @abdulrahmancodes
  • Move in-product explainer videos from feature flagged to GA (#24337) by @Bredo
  • Pin timeline activity write path behavior with integration tests (#24339) by @FelixMalfait
  • Declare note and task targets as junction relations (#24340) by @FelixMalfait
  • Drive timeline activities from rules instead of hardcoded branches (#24341) by @FelixMalfait
  • feat(workflow): add core-backed workflows index page behind a flag (#24350) by @thomtrp
  • Split onboarding chat spans into their own telemetry functionId (#24353) by @bosiraphael
  • fix(server): make cursor pagination exhaustive for any orderBy (#24354) by @FelixMalfait
  • Stop reporting contact creation duplicate key conflicts to Sentry (#24355) by @thomtrp
  • feat(server): support cursor pagination with relation-field ordering (#24356) by @FelixMalfait
  • i18n - translations (#24357) by @github-actions
  • refactor(i18n): key metadata catalog entries per role with message context (#24360) by @FelixMalfait
  • feat(call-recorder): cancel open recording requests and upcoming Recall bots on uninstall (#24361) by @ehconitin
  • docs: rightsize CLAUDE.md to gotchas, add AGENTS.md symlink (#24362) by @FelixMalfait
  • Generate command menu item mocks instead of hand-maintaining them (#24363) by @FelixMalfait
  • test(server): cover cursor pagination ordered by a morph relation leg (#24364) by @FelixMalfait
  • fix(front): keep empty values at the bottom for ascending sorts (#24366) by @FelixMalfait
  • i18n - docs translations (#24368) by @github-actions
  • Allow prop spreading in twenty-ui and remove the unused VISIBILITY_HIDDEN export (#24370) by @bosiraphael
  • Edit metadata translations in the UI: per-entity side panel + translate-or-rename prompt (#24374) by @FelixMalfait
  • fix(workflow): flag a trigger filter whose field reference is broken (#24377) by @thomtrp
  • i18n - docs translations (#24379) by @github-actions
  • fix(filter): enforce conjunctive multi-token matching for composite name filters (#24260) (#24380) by @jihadMo
  • refactor(server): compile SQL order clauses from the resolved orderBy leaves (#24382) by @FelixMalfait
  • fix(billing) - unblock resource credit upgrades rejected by Stripe (#24383) by @etiennejouan
  • Tag chat error events with their chat kind (#24387) by @bosiraphael
  • i18n - docs translations (#24390) by @github-actions
  • fix: repair escaped inline-code tags in Crowdin docs translations (#24397) by @abdulrahmancodes
  • fix: always pull app and website translations on schedule (#24400) by @abdulrahmancodes
  • Let a server route declare which HTTP methods it answers (#24401) by @emmanuelhb56
  • fix(server): timeline calendar events denied on the ORM v2 read path (#24403) by @FelixMalfait
  • Update docs (#24404) by @BOHEUS
  • Render pre-2.33 command menu item labels instead of raw template expressions (#24405) by @FelixMalfait
  • Resolve object labels in search results through the shared resolver (#24406) by @FelixMalfait
  • Stop a manifest without translations from deleting an application's stored locales (#24408) by @FelixMalfait
  • Give the REST metadata API one label-resolution path (#24410) by @FelixMalfait
  • i18n - docs translations (#24413) by @github-actions
  • v1.6.3 — Remove the ranking field from the partner model (#24414) by @rashad
  • Collapse the 24 view permission guards into three (#24415) by @FelixMalfait
  • i18n - translations (#24417) by @github-actions
  • i18n - website translations (#24418) by @github-actions
  • i18n - translations (#24419) by @github-actions
  • i18n - translations (#24423) by @github-actions
  • i18n - translations (#24424) by @github-actions
  • i18n - translations (#24426) by @github-actions
  • Fix AI FAQ: self-hosted custom models don't need an Organization license (#24430) by @thomtrp
  • Revert AI FAQ wording on self-hosted custom models (#24435) by @thomtrp
  • i18n - translations (#24436) by @github-actions
  • i18n - docs translations (#24438) by @github-actions
  • i18n - translations (#24439) by @github-actions
  • i18n - website translations (#24440) by @github-actions
  • i18n - translations (#24442) by @github-actions
  • i18n - translations (#24443) by @github-actions
  • i18n - translations (#24448) by @github-actions
  • i18n - website translations (#24449) by @github-actions
  • i18n - docs translations (#24450) by @github-actions
  • i18n - translations (#24455) by @github-actions
  • i18n - translations (#24457) by @github-actions
  • v1.6.4 — feat(partners): expose marketplace ranking metadata on the list endpoint (#24459) by @rashad
  • Rank marketplace partners by evidence instead of by name (needs twenty-partners 1.6.4) (#24460) by @rashad
  • i18n - translations (#24462) by @github-actions
  • i18n - translations (#24464) by @github-actions
  • i18n - translations (#24467) by @github-actions
  • i18n - translations (#24468) by @github-actions
  • i18n - translations (#24469) by @github-actions
  • i18n - translations (#24470) by @github-actions
  • i18n - translations (#24476) by @github-actions
  • i18n - translations (#24477) by @github-actions
  • i18n - translations (#24479) by @github-actions
  • i18n - translations (#24480) by @github-actions
  • fix: bump undici to 6.28.0 across app lockfiles (Dependabot) (#24482) by @mabdullahabaid
  • i18n - translations (#24484) by @github-actions
  • i18n - translations (#24485) by @github-actions
  • fix: bump ip-address to 10.5.0 in app lockfiles (Dependabot) (#24487) by @mabdullahabaid
  • fix: bump nanoid to 5.1.16 (Dependabot) (#24489) by @mabdullahabaid
  • fix: bump fast-uri 3.1.4 - 3.1.5 (Dependabot) (#24491) by @mabdullahabaid
  • fix: bump socket.io-parser 4.2.6 - 4.2.7 (Dependabot) (#24492) by @mabdullahabaid
  • feat(logic-function): give handlers an execution context, and a choice of whose access each call uses (#24493) by @FelixMalfait
  • fix(twenty-orm): let an application write its own records while serving a person (#24494) by @FelixMalfait
  • Give the i18n context helper one home (#24495) by @FelixMalfait
  • fix: bump nx 22.7.5 - 22.7.8 (Dependabot) (#24496) by @mabdullahabaid
  • i18n - translations (#24497) by @github-actions
  • Read translatable properties without a cast (#24498) by @FelixMalfait
  • i18n - docs translations (#24500) by @github-actions
  • i18n - translations (#24506) by @github-actions
  • i18n - translations (#24507) by @github-actions
  • i18n - translations (#24509) by @github-actions
  • Reduce non-AI Sentry trace sampling (#24511) by @bosiraphael
  • docs(codex-plugin): use apply and plan commands (#24512) by @FelixMalfait
  • chore(front): remove unused application data table (#24513) by @FelixMalfait
  • fix(sdk): rerun dev sync when changes arrive during sync (#24514) by @FelixMalfait
  • fix(server): prevent cleared PromiseMemoizer work from overwriting newer values (#24515) by @FelixMalfait
  • fix(ui): keep Checkbox state controlled (#24516) by @FelixMalfait
  • i18n - translations (#24522) by @github-actions
  • fix(auth): sign up in the resolved workspace in single-workspace mode (#24523) by @caveman99
  • Match participants on the transaction that inserted them (#24525) by @neo773
  • i18n - translations (#24527) by @github-actions
  • i18n - translations (#24528) by @github-actions
  • i18n - docs translations (#24529) by @github-actions
  • i18n - translations (#24530) by @github-actions
  • fix(ui): let AnimatedPlaceholder asset maps infer their key union (#24531) by @FelixMalfait
  • chore(sdk): delete the dead twenty-client-template copy (#24532) by @FelixMalfait
  • refactor(server): drop unused flat-metadata params from OpenAPI path builders (#24533) by @FelixMalfait
  • fix(server): honor the statusCode option CustomException declares (#24534) by @FelixMalfait
  • refactor(oxlint-rules): de-duplicate the two guarded-endpoint rules (#24535) by @FelixMalfait
  • fix(front): narrow TableSortValue to the direction the table implements (#24536) by @FelixMalfait
  • i18n - translations (#24539) by @github-actions
  • i18n - translations (#24543) by @github-actions
  • refactor(rest): move restore to a suffix path and make restore-one reachable (#24544) by @FelixMalfait
  • i18n - translations (#24545) by @github-actions
  • i18n - website translations (#24546) by @github-actions
  • i18n - translations (#24547) by @github-actions
  • i18n - website translations (#24549) by @github-actions
  • i18n - translations (#24553) by @github-actions
  • i18n - website translations (#24554) by @github-actions
  • i18n - translations (#24555) by @github-actions
  • i18n - website translations (#24556) by @github-actions
  • i18n - website translations (#24557) by @github-actions
  • i18n - translations (#24558) by @github-actions
  • i18n - translations (#24564) by @github-actions
  • i18n - website translations (#24565) by @github-actions
  • i18n - website translations (#24566) by @github-actions
  • i18n - translations (#24567) by @github-actions
  • Replace timelineActivity.name with a timelineActivityType id (#24568) by @FelixMalfait
  • i18n - translations (#24569) by @github-actions
  • i18n - translations (#24570) by @github-actions
  • i18n - website translations (#24571) by @github-actions
  • i18n - website translations (#24572) by @github-actions
  • i18n - translations (#24574) by @github-actions
  • i18n - website translations (#24575) by @github-actions
  • i18n - website translations (#24576) by @github-actions
  • i18n - translations (#24577) by @github-actions
  • i18n - translations (#24578) by @github-actions
  • i18n - website translations (#24579) by @github-actions
  • i18n - website translations (#24580) by @github-actions
  • i18n - translations (#24581) by @github-actions
  • chore: sync AI model catalog from models.dev (#24584) by @github-actions
  • i18n - translations (#24585) by @github-actions
  • i18n - website translations (#24586) by @github-actions
  • i18n - website translations (#24587) by @github-actions
  • i18n - translations (#24588) by @github-actions
  • fix(ci): stop the i18n formatting ping-pong between Crowdin pull and push workflows (#24590) by @abdulrahmancodes
  • fix(open-api): make request-body examples deterministic (#24591) by @FelixMalfait
  • i18n - translations (#24592) by @github-actions
  • i18n - website translations (#24593) by @github-actions
  • i18n - website translations (#24594) by @github-actions
  • i18n - translations (#24595) by @github-actions
  • fix: bump postcss to 8.5.26 across app lockfiles (Dependabot) (#24596) by @mabdullahabaid
  • Fix legacy activity junction target backfill (#24598) by @FelixMalfait
  • i18n - translations (#24600) by @github-actions
  • i18n - translations (#24602) by @github-actions
  • i18n - website translations (#24603) by @github-actions
  • i18n - website translations (#24604) by @github-actions
  • i18n - translations (#24606) by @github-actions
  • chore: bump version to 2.34.0 (#24609) by @twenty-pr
  • fix: bump brace-expansion to 5.0.9 in app lockfiles (Dependabot) (#24615) by @mabdullahabaid
  • i18n - translations (#24616) by @github-actions
  • i18n - website translations (#24617) by @github-actions
  • i18n - website translations (#24618) by @github-actions
  • i18n - translations (#24619) by @github-actions
  • Make timeline activity types a generic application contract (#24620) by @FelixMalfait
  • i18n - translations (#24622) by @github-actions
  • i18n - website translations (#24623) by @github-actions
  • i18n - website translations (#24624) by @github-actions
  • i18n - translations (#24625) by @github-actions
  • i18n - translations (#24627) by @github-actions
  • i18n - website translations (#24628) by @github-actions
  • i18n - translations (#24629) by @github-actions
  • i18n - website translations (#24630) by @github-actions
  • i18n - translations (#24631) by @github-actions
  • i18n - website translations (#24632) by @github-actions
  • i18n - website translations (#24633) by @github-actions
  • i18n - translations (#24634) by @github-actions
  • Emit attachment timeline activities through direct relations (#24637) by @FelixMalfait
  • Repair activity junction targets for custom-only morphs (#24638) by @FelixMalfait
  • i18n - docs translations (#24640) by @github-actions
  • Fix composite field update events (#24641) by @FelixMalfait
  • Guard attachment activity upgrade on legacy schemas (#24642) by @FelixMalfait
  • Remove generated attachment locale catalog changes (#24643) by @FelixMalfait
  • Fix update events across ORM write paths (#24644) by @FelixMalfait
  • Fix legacy composite update event snapshots (#24648) by @FelixMalfait

Full Changelog: twenty/v2.30.0...twenty/v2.34.0

Don't miss a new twenty release

NewReleases is sending notifications on new releases.