What's Changed
- chore: bump version to 2.38.0 by @twenty-pr[bot] in #24948
- Preserve hash and query in OAuth connect redirect locations by @FelixMalfait in #24959
- Fix double-composited translucency on tooltips by @FelixMalfait in #24962
- perf(server): declarative shared fetch plan for workspace cache recomputation by @prastoin in #24750
- fix(server): stop rate-limit throttler exceptions from reaching Sentry by @charlesBochet in #24931
- Fix stack overflow when importing a large Gmail folder by @neo773 in #24883
- Align timeline event icons with their row text by @FelixMalfait in #24957
- Make Edit Layout available across the app by @Bonapara in #24865
- Remove pre-2-32 uiScale and pre-2-27 openRecordIn fallbacks by @FelixMalfait in #24966
- refactor(server): extract WorkflowMetadataReadService from the common god-service by @charlesBochet in #24963
- v1.7.1 — feat(partners): add a How to review playbook in Matching Admin by @rashad in #24904
- i18n - website translations by @github-actions[bot] in #24972
- v1.7.2 — feat(partners): add opportunity process playbooks by @rashad in #24956
- chore(billing): drop the creditBalanceMicro and hasReachedCurrentPeriodCap columns by @FelixMalfait in #24969
- Anchor email and calendar timeline activities at their semantic time by @FelixMalfait in #24967
- Scope two-hop relation widgets through the right morph branch by @thomtrp in #24929
- i18n - website translations by @github-actions[bot] in #24977
- Prerender record page tabs on hover by @FelixMalfait in #24958
- Follow reschedules on linked timeline activities by @FelixMalfait in #24968
- Bill logic function executions for duration like AWS Lambda by @martmull in #24938
- Show Stripe Link in the onboarding payment step by @FelixMalfait in #24978
- Make the timeline happensAt mapping timeline activity type metadata by @FelixMalfait in #24970
- perf(server): serve the field-metadata query path from the lean projection by @charlesBochet in #24973
- Unify record and side-panel header identifiers by @Bonapara in #24935
- fix(server): report a credential-less request to UserAuthGuard as UNAUTHENTICATED by @FelixMalfait in #24981
- test(e2e): cookie-authenticate direct backend calls, and clear the token pair on switch by @FelixMalfait in #24982
- v1.8.0 — Super partner flag and directory view by @rashad in #24951
- Add Super partner pinning and mark on the website marketplace by @rashad in #24952
- i18n - website translations by @github-actions[bot] in #24991
- Tune squircle corners to K 2.2 and preserve round shapes by @Bonapara in #24974
- Replace record summary cards with an identifier bar by @Bonapara in #24936
- Add canonical product icon dictionary by @Bonapara in #23719
- perf(server): diff full-sync message deletes via a Set, not Array.includes by @charlesBochet in #24996
- feat(page-layout): declare the record form layout and form field widget by @thomtrp in #24961
- Stop flagging MCP execute_tool as destructive by @FelixMalfait in #24995
- i18n - website translations by @github-actions[bot] in #24998
- Allow record page layouts to unpin the first tab by @Bonapara in #24937
- Hide the group header when the fields widget has a single group by @FelixMalfait in #24997
- Add sidebar command and tooltips by @Bonapara in #24985
- Add the blocklist scope field and make its owner optional by @neo773 in #24813
- Fix e2e on main: disabled sortable cells claim button semantics by @FelixMalfait in #24979
- Add a domain subtype to LINKS fields and normalize domains on write by @neo773 in #24911
- feat(front): serve the core workflows index on the workflows object route by @thomtrp in #24939
- perf(server): reuse the html-to-text converter across imported messages by @charlesBochet in #25004
- Fix additionalEmails typing in generated client SDK by @martmull in #24869
- v1.8.1 — Fix partner case-study save rejected by RLS by @rashad in #25010
- Pin Ask AI globally and open new chats in full page by @FelixMalfait in #25005
- Slide the mobile record table's frozen column instead of resizing it by @FelixMalfait in #24993
- Upgrade public apps to twenty-sdk 2.37.0 and label their application variables by @martmull in #24990
- Center the full page AI chat and suggest prompts from the browsed page by @FelixMalfait in #25016
- Fix the chat focus crash and give the preprompt effect the suggested prompts by @FelixMalfait in #25017
- Account for every AI chat turn outcome exactly once by @FelixMalfait in #25019
- Stop caching the partners API response by @neo773 in #25021
- fix(ai): refresh the default model lists for self-hosted instances by @FelixMalfait in #25022
- Move AI provider admin operations to their own resolver by @FelixMalfait in #25023
- Read the agent suites' model ids from the recommended list by @FelixMalfait in #25026
- Switch between Home, AI and Settings from one segmented control by @FelixMalfait in #25059
- Make QA Scout failures quiet on PRs and legible in CI by @FelixMalfait in #25060
- Sync calendar webhooks without waiting for the import cron by @neo773 in #24987
- Grant credits to enrichment-qualified workspaces by @FelixMalfait in #25063
- Hide Twenty-operated config variables from the admin panel by @FelixMalfait in #25068
- Drop the tab list from the walkthrough modal when there is a single tab by @FelixMalfait in #25069
- fix(ci): authenticate the app-dev test leg as the seeded admin user by @abdulrahmancodes in #25028
- Register transcription models alongside language models by @FelixMalfait in #25064
- Fix the rich text editor crash on the full screen toggle by @FelixMalfait in #25071
- Keep only the writes inside the calendar and messaging import transactions by @neo773 in #24681
- Make the list view GA and fix what QA found on it by @FelixMalfait in #25072
- Remove the legacy token-pair credential from the front by @FelixMalfait in #25070
- fix: preserve editor content when toggling fullscreen by @saadassali in #24563
- Add dictation to the AI chat composer by @FelixMalfait in #25073
- Swap Settings for a record-open switcher in the workspace dropdown by @FelixMalfait in #25077
- Surface structured login verification errors by @FelixMalfait in #25080
- Fix auth provider propagation in password sign-up flows by @FelixMalfait in #25078
- Migrate react-grid-layout to v2 by @ehconitin in #24922
- Fix morph junction relation picker in field widgets by @FelixMalfait in #25097
- Fail closed when issuing required user sessions by @FelixMalfait in #25079
- Widget-level isUIEditable setting; kanban/table parity on read-only surfaces by @ehconitin in #24308
- fix(server): persist user locale on userWorkspace create by @cfngc4594 in #25098
- feat(slack): admin-set manual user links on app-locked records by @abdulrahmancodes in #24670
- fix(workflow): create a record when a relation variable resolves to null by @thomtrp in #25000
- fix(server): release S3 sockets held by abandoned response bodies by @thomtrp in #25107
- Cancel Recall bot when a call recording is deleted by @ehconitin in #25115
- Scaffold Fathom Twenty app by @ehconitin in #24900
- Load saved any-field filters in record widgets by @FelixMalfait in #25118
- Make inferred workspace logo upload best effort by @Weiko in #25100
- Preserve record widget settings on data source change by @FelixMalfait in #25117
- Move the object navigation command menu item into the metadata side-effect engine by @prastoin in #23795
- Distribute orphan Recall cleanup jobs across workspaces by @ehconitin in #25114
- Remove no-op universal flat entity casts in side effect handlers by @prastoin in #25121
- Await inferred workspace logo upload during sign-up by @Weiko in #25126
- Fix solo field widget header actions by @FelixMalfait in #25102
- Validate junction relation target settings by @FelixMalfait in #25108
- Add role and app reference chips to AI chat by @FelixMalfait in #25129
- Add page link and theme commands to command menu by @Bonapara in #25002
- Add Note widgets to record page layouts by @Bonapara in #25086
- Resolve reverse junction relations directionally by @FelixMalfait in #25113
- Fix chat reference chip Storybook assertion by @FelixMalfait in #25145
- feat(slack): settings UI and consent flow for Slack user links by @abdulrahmancodes in #24887
- Improve record page layout editing experience by @Bonapara in #25087
- Scope calendar orphan cleanup to the events the sync just unlinked by @neo773 in #24988
- Treat Google policy_enforced as a permanent OAuth error by @neo773 in #25148
- fix(messaging): register blocklist delete listener on DELETED, not CREATED by @neo773 in #25149
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #25152
- Keep workflow nodes centered when renamed by @rafipopz98 in #24334
- Surface Relations on email thread and calendar event record pages by @FelixMalfait in #24994
- Port genql 3.0.5 test suite and run twenty-client-sdk tests in CI by @prastoin in #25092
- Compute selected call recording on the server by @ehconitin in #24945
- Generalize upgrade:background into a background wrapper for any nest command by @prastoin in #25131
- Add copy and see-all actions to the call recording summary widget header by @ehconitin in #24924
- docs: clarify that the app key-value store is persistent (Postgres-backed) by @martmull in #25160
- feat(slack): auto-link the installer on connect and clear ghost links by @abdulrahmancodes in #25150
- Unify workspace routes across main and side panel by @FelixMalfait in #25141
- fix: exclude CalDAV collection href from event sync by @MoonBrillante in #25094
- Fix workflow diagram jumping 200px left when a rename forks a draft by @thomtrp in #25162
- Fix IMAP messages without Date header by @Leotrancoz0 in #25120
- Resolve morph member IDs in grouped metadata by @FelixMalfait in #25137
- Restore purpose-built side panel page state by @FelixMalfait in #25167
- Email campaigns 1/4: give each delivery its own row by @neo773 in #25122
- feat(server): run newly installed packaged application logic functions in prebuilt mode by @martmull in #25119
- Email campaigns 2/4: claim each send exactly once by @neo773 in #25123
- Type composite raw JSON sub-fields in the workspace GraphQL schema by @martmull in #25116
- Add lifecycle state column to application by @martmull in #25163
- Show status-specific call recording placeholders by @ehconitin in #24947
- fix(exception-handler): guard Sentry driver against non-object exceptions by @etiennejouan in #25171
- Hide Ask AI command when in side panel by @FelixMalfait in #25168
- Email campaigns 3/4: record delivery outcomes from webhooks by @neo773 in #25124
- Preserve typed characters when focusing the activity editor by @Weiko in #25172
- feat(workflow): filters on the core workflows index by @thomtrp in #25109
- Show the Stripe billing date in self-hosted enterprise settings by @ijreilly in #25170
- feat(usage) - collect + attribute every CommonAPI request by @etiennejouan in #24960
- fix(twenty-front): blank index field labels on settings page by @Amit91848 in #24503
- Add call recording animated placeholder by @ehconitin in #25142
- Fix admin panel app install counts and show suspended installs by @ehconitin in #25158
- Fix dashboard record table settings context by @Weiko in #25180
- Provision missing object system relations by @thomtrp in #25169
- Email campaigns 4/4: honour unsubscribes and meter sends by @neo773 in #25125
- fix(ai-chat) - fix AI chat questions stuck on 'already been answered' after interrupted streams by @etiennejouan in #25175
- Simplify settings-shell opening in
useNavigateSettingsand add routed side-panel test by @FelixMalfait in #25187 - Remove the orphaned message deliveryStatus field by @FelixMalfait in #25161
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #25194
- Support nested relation create with morph target selection by @FelixMalfait in #25174
- Include Note/Task rich-text body in field lists and add unit test by @FelixMalfait in #25195
- Add customizable call recorder chat notice by @ehconitin in #25146
- feat(workflow): dispatch workflow triggers on core ids by @thomtrp in #25104
- Harden unified workspace surfaces by @FelixMalfait in #25164
- Drop objectMetadataItemId from navigation command menu item payloads by @prastoin in #25132
- Update Ask AI command icon and migrate legacy sparkle icon in 2.38 by @FelixMalfait in #25201
- Simplify default Task and Note record pages and add workspace migration by @FelixMalfait in #25177
- Insert actions on existing workflow branches by @Bonapara in #25133
- Reconnect workflow arrow targets without rebuilding actions by @Bonapara in #25134
- Search workflow fields across steps from the root picker by @Bonapara in #25135
- Add Fathom OAuth connection by @ehconitin in #25197
- Fix main's red typecheck: drop removed portal fields from the settings test wrapper by @FelixMalfait in #25196
- fix(billing) - fix stale seat count billed on plan and interval subscription updates by @etiennejouan in #25202
- test(server): cover field read permission for group-by records selection by @prastoin in #25206
- feat(slack): match the Slack roster by email and list unlinked users by @abdulrahmancodes in #25151
- Broadcast application and applicationRegistration changes over SSE by @martmull in #25173
- v1.8.3 — Keep applied briefs visible after unlist by @rashad in #25001
- Run connection-provider disconnect hooks before deleting the token by @ehconitin in #25215
- feat(server): add command converting existing application logic functions to prebuilt by @martmull in #25178
- Remove the automatic snackbar when a front component copies to the clipboard by @martmull in #25220
- Update Legal FAQ by @BOHEUS in #25209
- fix(server): propagate stream destroy to the socket behind the SDK checksum wrapper by @thomtrp in #25207
- chore(server): add worker memory diagnostics logging by @etiennejouan in #25216
- Return job handles from enqueueJob(s) and add a getJobs query by @martmull in #25204
- fix(slack): let a declined link fall through to the member's own email match by @hktitof in #25229
- Host the main surface's route context store once, above the page transition by @FelixMalfait in #25233
- Stop remounting every device-session row on each render of the devices section by @FelixMalfait in #25232
- Scope component instance ids at the provider, not in the resolving primitive by @FelixMalfait in #25225
- Add the missing im:write scope to the Slack app manifest by @abdulrahmancodes in #25234
- Align the Slack app docs and metadata with the vetted apps by @abdulrahmancodes in #25235
- Remove the "Answered in" duration footer from Slack assistant replies by @abdulrahmancodes in #25237
- Split usage by application and give apps a billing block: usage, recurring fees, and pricing by @FelixMalfait in #24541
- chore: sync AI model catalog from models.dev by @github-actions[bot] in #25244
- feat(workflow): honor continueOnFailure in the executor by @thomtrp in #25222
- chore(slack): bump app version to 0.6.1 by @abdulrahmancodes in #25242
- Put the navbar tabs and the show page header on one 40px grid by @FelixMalfait in #25236
- Drop the app-to-settings cross-fade by @FelixMalfait in #25249
- Delete side-panel and navigation tests that only exercise their mocks by @FelixMalfait in #25250
- Delete frontend files nothing imports by @FelixMalfait in #25253
- Add --no-delete to apply, plan and dev for additive application sync by @Weiko in #25245
- Move settings detail tabs below headers by @Bonapara in #25255
- Move information banners above page headers by @Bonapara in #25261
- Share the empty state, containers and drag-drop provider between record list and table by @FelixMalfait in #25258
- Collapse page-layout twin hooks, widget factories and relation cards by @FelixMalfait in #25259
- Resolve AI chat references through one table instead of eight link components by @FelixMalfait in #25260
- Restore the five SSO GraphQL documents and regenerate the metadata client by @FelixMalfait in #25271
- feat(workflow): browse and restore core workflow versions from the side panel by @thomtrp in #25199
- Sync Fathom recordings from webhooks by @ehconitin in #25208
- fix(slack): mark user links from disconnected Slack workspaces by @abdulrahmancodes in #25269
- feat(slack): render Twenty record links as work object previews by @abdulrahmancodes in #24980
- Create and delete the enqueue-job spec's logic functions one at a time by @Weiko in #25273
- Keep the raw junction target id out of a relation field's universal settings by @Weiko in #25264
- Remove owner-workspace restriction on unlisted tarball app installs by @martmull in #25270
- Allow development application on top of owned application by @martmull in #25267
- Fix the flaky front-sb-test storybook shards by @bosiraphael in #24412
- refactor: standardize SSO, SAML, OIDC, API and URL acronyms to PascalCase in internal identifiers by @FelixMalfait in #25281
- feat(slack): surface broken connections and failed auto-link sweeps in the settings tab by @abdulrahmancodes in #25240
- fix(workflow): let create_complete_workflow build iterator loop bodies by @thomtrp in #25283
- feat(workflow): show workspace workflow versions only while the core index flag is off by @thomtrp in #25280
- fix(slack): post the assistant failure reply on its own deadline by @abdulrahmancodes in #25285
- Fix person merge failing on shared message threads and over 200 related records by @neo773 in #25190
- fix(auth): preserve connected account scopes on SSO login by @ayush-singh-0601 in #25296
- Keep task and note junction relations consistent by @FelixMalfait in #25200
- Fix upgrade resume after instance command segment by @FelixMalfait in #25299
- Support legacy activity target columns during upgrade by @FelixMalfait in #25301
- fix(server): require ROLES permission to bind a role to an API key by @charlesBochet in #24806
- i18n - translations by @github-actions[bot] in #25306
- i18n - translations by @github-actions[bot] in #25308
New Contributors
- @saadassali made their first contribution in #24563
- @cfngc4594 made their first contribution in #25098
- @rafipopz98 made their first contribution in #24334
- @MoonBrillante made their first contribution in #25094
- @Leotrancoz0 made their first contribution in #25120
- @Amit91848 made their first contribution in #24503
- @hktitof made their first contribution in #25229
- @ayush-singh-0601 made their first contribution in #25296
Full Changelog: twenty/v2.37.0...twenty/v2.38.1