twenty/v2.47.0

HumanAIGC/Cloth2Textwenty/v2.47.0Oct 15, 2026by twenty-pr[bot]

Upgrading?

AI Summary

Server-side update focusing on Teams assistant integration, marketplace app versioning, and refined billing and usage limits.

Key Highlights

  • Answer Teams assistant requests
  • Hide marketplace apps that don't satisfy server version
  • Set quota and stock default values per billing plan
  • Align Tabs with Base UI
  • Complete radio and segmented selection

Breaking Changes

  • Ship the Conversations tab and workflow inbox messages under the inbox flag
  • Unpin chat Share and drop the AI chat sharing dropdown flag
  • Add widgetAvailability to front components
  • Reject records-API writes on workflow and workflowVersion
  • Remove the legacy workspace-id workflow GraphQL API

New Features

  • Teams assistant requests
  • Hide marketplace apps the server version does not satisfy
  • Set quota and stock default values per billing plan

Full Release Notes

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

## ⚠️ Breaking changes

- [BREAKING_CHANGE] Ship the Conversations tab and workflow inbox messages under the inbox flag ([#27830](https://github.com/twentyhq/twenty/pull/27830)) by @FelixMalfait
- [BREAKING_CHANGE] Unpin chat Share and drop the AI chat sharing dropdown flag ([#27832](https://github.com/twentyhq/twenty/pull/27832)) by @FelixMalfait
- Add widgetAvailability to front components ([#27841](https://github.com/twentyhq/twenty/pull/27841)) by @martmull
- Reject records-API writes on workflow and workflowVersion ([#27855](https://github.com/twentyhq/twenty/pull/27855)) by @thomtrp
- Remove the legacy workspace-id workflow GraphQL API ([#27856](https://github.com/twentyhq/twenty/pull/27856)) by @thomtrp
- Accept [BREAKING_CHANGE] titles and stop flagging feature flag removals in the API breaking change check ([#27859](https://github.com/twentyhq/twenty/pull/27859)) by @FelixMalfait
- fix(admin-panel): look up admin chat threads in the workspace from the route ([#27901](https://github.com/twentyhq/twenty/pull/27901)) by @etiennejouan

## ✨ New features

- feat(campaigns): add selected people or a whole People view to a campaign list ([#26823](https://github.com/twentyhq/twenty/pull/26823)) by @neo773
- feat(teams): answer Teams assistant requests ([#27811](https://github.com/twentyhq/twenty/pull/27811)) by @abdulrahmancodes
- feat(apps): hide marketplace apps the server version does not satisfy ([#27843](https://github.com/twentyhq/twenty/pull/27843)) by @martmull
- feat(usage-limit): set quota and stock default values per billing plan ([#27890](https://github.com/twentyhq/twenty/pull/27890)) by @etiennejouan

## 💅 Improvements & UX

- Fix JSON filter ([#26589](https://github.com/twentyhq/twenty/pull/26589)) by @BOHEUS
- Show unique and total clicks and opens on campaigns ([#26875](https://github.com/twentyhq/twenty/pull/26875)) by @neo773
- Track campaign opens ([#26938](https://github.com/twentyhq/twenty/pull/26938)) by @neo773
- Make TipTap email documents the only outbound email body format ([#26981](https://github.com/twentyhq/twenty/pull/26981)) by @neo773
- Fix record gql fields typing ([#27069](https://github.com/twentyhq/twenty/pull/27069)) by @BOHEUS
- fix force redirect with Navigate ([#27130](https://github.com/twentyhq/twenty/pull/27130)) by @minnibaevB
- Add people to a campaign list with a background job ([#27276](https://github.com/twentyhq/twenty/pull/27276)) by @neo773
- Align agent execution with caller context ([#27394](https://github.com/twentyhq/twenty/pull/27394)) by @prastoin
- refactor(usage-limit) - quota counters hold consumption; allowance cap from the workspace cache ([#27479](https://github.com/twentyhq/twenty/pull/27479)) by @etiennejouan
- Support ImageInput file selection in the front component renderer ([#27588](https://github.com/twentyhq/twenty/pull/27588)) by @bosiraphael
- Let the AI agent build validation rules from the side panel ([#27635](https://github.com/twentyhq/twenty/pull/27635)) by @thomtrp
- Link Teams transcripts to their calendar event by Microsoft Graph event id ([#27676](https://github.com/twentyhq/twenty/pull/27676)) by @ehconitin
- Add Persian locale ([#27684](https://github.com/twentyhq/twenty/pull/27684)) by @BOHEUS
- Skip standby aggregate queries when refetching after record changes ([#27691](https://github.com/twentyhq/twenty/pull/27691)) by @FelixMalfait
- Align log console access and retention with plans ([#27696](https://github.com/twentyhq/twenty/pull/27696)) by @martmull
- Let application workflows run on a schedule ([#27699](https://github.com/twentyhq/twenty/pull/27699)) by @thomtrp
- Let application workflows run on record events ([#27700](https://github.com/twentyhq/twenty/pull/27700)) by @thomtrp
- Replace Pill and NotificationCounter with Badge ([#27702](https://github.com/twentyhq/twenty/pull/27702)) by @bosiraphael
- Complete radio and segmented selection ([#27707](https://github.com/twentyhq/twenty/pull/27707)) by @bosiraphael
- Preserve native edits across renderer updates ([#27726](https://github.com/twentyhq/twenty/pull/27726)) by @bosiraphael
- Align Tabs with Base UI ([#27732](https://github.com/twentyhq/twenty/pull/27732)) by @bosiraphael
- Remove the WhatsApp and Calls Soon tabs from Communication settings ([#27733](https://github.com/twentyhq/twenty/pull/27733)) by @Bonapara
- Expose NumberField and retain NumberStepper ([#27734](https://github.com/twentyhq/twenty/pull/27734)) by @bosiraphael
- Stop stacking record creation forms on repeated Create clicks ([#27736](https://github.com/twentyhq/twenty/pull/27736)) by @thomtrp
- Complete Select public parts ([#27741](https://github.com/twentyhq/twenty/pull/27741)) by @bosiraphael
- Normalize saved view filter values for query resolution ([#27742](https://github.com/twentyhq/twenty/pull/27742)) by @FelixMalfait
- Batch global admin chat report transactions ([#27746](https://github.com/twentyhq/twenty/pull/27746)) by @FelixMalfait
- Stop selecting agent.evaluationInputs once the 2.47 drop has run ([#27748](https://github.com/twentyhq/twenty/pull/27748)) by @charlesBochet
- Derive persisted record filter types from field metadata like views ([#27754](https://github.com/twentyhq/twenty/pull/27754)) by @FelixMalfait
- Last contact 1.9.1: stop restoring trashed people, skip unchanged writes ([#27755](https://github.com/twentyhq/twenty/pull/27755)) by @martmull
- Add missing translation keys ([#27759](https://github.com/twentyhq/twenty/pull/27759)) by @BOHEUS
- Rename morph relations ([#27760](https://github.com/twentyhq/twenty/pull/27760)) by @BOHEUS
- Fix ordering for view sort replacements ([#27764](https://github.com/twentyhq/twenty/pull/27764)) by @FelixMalfait
- Wait for popup visibility in disabled item stories ([#27766](https://github.com/twentyhq/twenty/pull/27766)) by @FelixMalfait
- Fix cascade-before-update ordering in workspace migrations ([#27767](https://github.com/twentyhq/twenty/pull/27767)) by @FelixMalfait
- Fix table skeleton cells overflowing into the next column ([#27768](https://github.com/twentyhq/twenty/pull/27768)) by @ehconitin
- Remove the 2.45/2.46 chat upgrade fences and fallbacks ([#27779](https://github.com/twentyhq/twenty/pull/27779)) by @FelixMalfait
- Drop usage limit meter compatibility in 2.47 ([#27780](https://github.com/twentyhq/twenty/pull/27780)) by @FelixMalfait
- Add OSS Scanner build and threat model ([#27781](https://github.com/twentyhq/twenty/pull/27781)) by @FelixMalfait
- Identify chat owners and senders by workspace member, and drop the legacy chat columns ([#27783](https://github.com/twentyhq/twenty/pull/27783)) by @FelixMalfait
- Follow shared chats only when taking part in them, and track what members read ([#27786](https://github.com/twentyhq/twenty/pull/27786)) by @FelixMalfait
- Spell out the security contact email in SECURITY.md ([#27789](https://github.com/twentyhq/twenty/pull/27789)) by @FelixMalfait
- Show workspace members by name or email through one helper ([#27791](https://github.com/twentyhq/twenty/pull/27791)) by @FelixMalfait
- Type RolePermissionConfig by role source ([#27805](https://github.com/twentyhq/twenty/pull/27805)) by @prastoin
- Complete Autocomplete parts ([#27806](https://github.com/twentyhq/twenty/pull/27806)) by @bosiraphael
- Remove leftover in Admin Panel ([#27812](https://github.com/twentyhq/twenty/pull/27812)) by @BOHEUS
- Show the real remaining count on relation card widgets ([#27813](https://github.com/twentyhq/twenty/pull/27813)) by @charlesBochet
- Fix double highlight on view picker rows ([#27816](https://github.com/twentyhq/twenty/pull/27816)) by @Bonapara
- Gate validation rules behind the Organization plan ([#27818](https://github.com/twentyhq/twenty/pull/27818)) by @thomtrp
- Require the roles permission to pick a role when sending invitations ([#27820](https://github.com/twentyhq/twenty/pull/27820)) by @thomtrp
- Group pending invoice items monthly for invoice-paying subscriptions ([#27826](https://github.com/twentyhq/twenty/pull/27826)) by @ijreilly
- Let invoice-paying customers end their trial without a card ([#27827](https://github.com/twentyhq/twenty/pull/27827)) by @ijreilly
- Add Teams user link object ([#27828](https://github.com/twentyhq/twenty/pull/27828)) by @abdulrahmancodes
- Unify Progress semantics and move onboarding motion ([#27831](https://github.com/twentyhq/twenty/pull/27831)) by @bosiraphael
- feat(billing) : store the ?partner= sign-up attribution on the Stripe customer ([#27836](https://github.com/twentyhq/twenty/pull/27836)) by @etiennejouan
- Revert the browser-bound application claim state (#26214) ([#27837](https://github.com/twentyhq/twenty/pull/27837)) by @martmull
- Keep app update tag visible in installed apps list ([#27838](https://github.com/twentyhq/twenty/pull/27838)) by @martmull
- Order application workflow steps by application and label ([#27839](https://github.com/twentyhq/twenty/pull/27839)) by @martmull
- Show validation rule messages under their field in the record creation form ([#27840](https://github.com/twentyhq/twenty/pull/27840)) by @thomtrp
- Keep add-people-to-message-list spec from flooding the workflow queue ([#27842](https://github.com/twentyhq/twenty/pull/27842)) by @FelixMalfait
- Ask consent to bill credits when installing an app ([#27844](https://github.com/twentyhq/twenty/pull/27844)) by @martmull
- Add Toast updates and status naming ([#27846](https://github.com/twentyhq/twenty/pull/27846)) by @bosiraphael
- Make the workflow editor hooks core-only ([#27852](https://github.com/twentyhq/twenty/pull/27852)) by @thomtrp
- Make workflow commands, navigation and pages core-only ([#27853](https://github.com/twentyhq/twenty/pull/27853)) by @thomtrp
- Remove the legacy workflow trigger and version workspace services ([#27857](https://github.com/twentyhq/twenty/pull/27857)) by @thomtrp
- Remove the legacy workflow step and edge workspace services ([#27858](https://github.com/twentyhq/twenty/pull/27858)) by @thomtrp
- Show core workflow and version on the workflow runs index ([#27861](https://github.com/twentyhq/twenty/pull/27861)) by @thomtrp
- Remove tabs from marketplace app detail page ([#27868](https://github.com/twentyhq/twenty/pull/27868)) by @martmull
- Fix oversized icon in side panel switch rows ([#27869](https://github.com/twentyhq/twenty/pull/27869)) by @FelixMalfait
- Sort admin apps by attention and show author and install count ([#27871](https://github.com/twentyhq/twenty/pull/27871)) by @martmull
- Navigate the inbox with the arrow keys ([#27875](https://github.com/twentyhq/twenty/pull/27875)) by @FelixMalfait
- Show application logo on fields, views, widgets and created-by actor ([#27876](https://github.com/twentyhq/twenty/pull/27876)) by @martmull
- Remove the workflow drift check, the workspace statuses job and the workspace-to-core sync listener ([#27879](https://github.com/twentyhq/twenty/pull/27879)) by @thomtrp
- Activate and deactivate workflows without writing workspace rows ([#27880](https://github.com/twentyhq/twenty/pull/27880)) by @thomtrp
- Write workflow version content and drafts to core only ([#27881](https://github.com/twentyhq/twenty/pull/27881)) by @thomtrp
- Create, rename, duplicate and delete workflows in core only ([#27882](https://github.com/twentyhq/twenty/pull/27882)) by @thomtrp
- Remove the dead workflow mirror write code ([#27883](https://github.com/twentyhq/twenty/pull/27883)) by @thomtrp
- Seed and prefill workflows in core only ([#27884](https://github.com/twentyhq/twenty/pull/27884)) by @thomtrp
- Keep AI chat thinking signatures valid across turns ([#27888](https://github.com/twentyhq/twenty/pull/27888)) by @charlesBochet
- Speed up switching between record table views ([#27897](https://github.com/twentyhq/twenty/pull/27897)) by @charlesBochet
- Use Teams user links when matching the sender ([#27898](https://github.com/twentyhq/twenty/pull/27898)) by @abdulrahmancodes
- Put twenty-ui styles in a cascade layer ([#27899](https://github.com/twentyhq/twenty/pull/27899)) by @bosiraphael
- Use the existing banner and field error components for validation rule messages ([#27906](https://github.com/twentyhq/twenty/pull/27906)) by @thomtrp
- Add a route to remove Teams user links ([#27909](https://github.com/twentyhq/twenty/pull/27909)) by @abdulrahmancodes
- Take row-level rules from the roles the permission config intersects ([#27911](https://github.com/twentyhq/twenty/pull/27911)) by @prastoin
- Fix application author display when the manifest carries an npm-style author object ([#27918](https://github.com/twentyhq/twenty/pull/27918)) by @martmull
- Only measure overflowing lists while their count can show ([#27923](https://github.com/twentyhq/twenty/pull/27923)) by @charlesBochet
- Enable initial object views on new workspaces ([#27924](https://github.com/twentyhq/twenty/pull/27924)) by @thomtrp
- Bump claude-code-action and Claude Code ([#27928](https://github.com/twentyhq/twenty/pull/27928)) by @neo773
- Only add Bedrock cache points for Claude models ([#27929](https://github.com/twentyhq/twenty/pull/27929)) by @charlesBochet
- Make Toast timing deterministic ([#27930](https://github.com/twentyhq/twenty/pull/27930)) by @bosiraphael
- Fix Kanban icon ([#27936](https://github.com/twentyhq/twenty/pull/27936)) by @BOHEUS
- Keep the role permission config on the workspace repository ([#27942](https://github.com/twentyhq/twenty/pull/27942)) by @prastoin
- Resolve the connected account when an email is clicked, not per cell ([#27947](https://github.com/twentyhq/twenty/pull/27947)) by @charlesBochet
- Wait for Select popup transitions ([#27950](https://github.com/twentyhq/twenty/pull/27950)) by @bosiraphael
- Read waiting job ids without loading job data in the BullMQ driver ([#27955](https://github.com/twentyhq/twenty/pull/27955)) by @charlesBochet
- Make table cell and skeleton styles static and add a block Skeleton layout ([#27957](https://github.com/twentyhq/twenty/pull/27957)) by @charlesBochet
- MCP: fix soft-delete generated tools ([#27962](https://github.com/twentyhq/twenty/pull/27962)) by @BOHEUS
- Make filter validation errors actionable for AI agents ([#27963](https://github.com/twentyhq/twenty/pull/27963)) by @BOHEUS

## 🐛 Bug fixes

- fix(front): lay phone numbers out left to right in RTL locales ([#27006](https://github.com/twentyhq/twenty/pull/27006)) by @almoghazaz-cell
- fix(billing): surface checkoutSession GraphQL errors in toast ([#27018](https://github.com/twentyhq/twenty/pull/27018)) by @evanliuuu
- fix(ui): truncate LTR values at their end in RTL layouts ([#27059](https://github.com/twentyhq/twenty/pull/27059)) by @almoghazaz-cell
- fix(cli): remove legacy CLI config migration ([#27085](https://github.com/twentyhq/twenty/pull/27085)) by @Sameer7-s
- fix: use overflow clip on app layout to stop side-panel shift ([#27112](https://github.com/twentyhq/twenty/pull/27112)) by @hussnainahmedd
- fix(server): sync userWorkspace.locale when a workspace member's locale is updated through the record API ([#27245](https://github.com/twentyhq/twenty/pull/27245)) by @slavarosin
- fix(website): bump @opennextjs/cloudflare to 1.20.8 for Next 16.3.8 cache keys ([#27751](https://github.com/twentyhq/twenty/pull/27751)) by @FelixMalfait
- fix(usage-limit): no workspace record or storage limit when the config variable is unset ([#27803](https://github.com/twentyhq/twenty/pull/27803)) by @etiennejouan
- fix(workspace-cleaner): never warn members of a soft-deleted workspace ([#27814](https://github.com/twentyhq/twenty/pull/27814)) by @etiennejouan
- fix(workflow): skip not-taken if/else branch targets also listed in the step's nextStepIds ([#27833](https://github.com/twentyhq/twenty/pull/27833)) by @thomtrp
- fix(cli): lock the app template with the pins the publish check verified ([#27864](https://github.com/twentyhq/twenty/pull/27864)) by @Weiko
- fix(server): sample AI SDK v7 agent spans at 100% in Sentry ([#27913](https://github.com/twentyhq/twenty/pull/27913)) by @etiennejouan
- fix(admin-panel): drop the admin panel global AI chats list ([#27920](https://github.com/twentyhq/twenty/pull/27920)) by @etiennejouan
- fix(cli): report the Node requirement when launched with npx ([#27932](https://github.com/twentyhq/twenty/pull/27932)) by @Weiko

## 🔧 Developer & API

- Stop registering dynamic record cache fragments with graphql-tag ([#27690](https://github.com/twentyhq/twenty/pull/27690)) by @FelixMalfait
- Adopt gpt-6-luna for the cheap tier (dev, staging, self-host) ([#27763](https://github.com/twentyhq/twenty/pull/27763)) by @twenty-pr-author
- Remove unused Menu API ([#27815](https://github.com/twentyhq/twenty/pull/27815)) by @bosiraphael
- Move workflow execution integration tests to the core workflow API ([#27848](https://github.com/twentyhq/twenty/pull/27848)) by @thomtrp
- Move workflow node, core workflow, lifecycle and permission integration tests to the core workflow API ([#27849](https://github.com/twentyhq/twenty/pull/27849)) by @thomtrp
- Deprecate the SDK CLI and create-twenty-app ([#27862](https://github.com/twentyhq/twenty/pull/27862)) by @Weiko
- Align CLI version with Twenty 2.46.0 ([#27905](https://github.com/twentyhq/twenty/pull/27905)) by @Weiko
- Let Bedrock AI providers authenticate with a Bedrock API key ([#27907](https://github.com/twentyhq/twenty/pull/27907)) by @charlesBochet
- Skip cli-test in the merge queue ([#27908](https://github.com/twentyhq/twenty/pull/27908)) by @prastoin
- Skip cli-package-test in the merge queue ([#27910](https://github.com/twentyhq/twenty/pull/27910)) by @prastoin
- Let application workflows start from a webhook ([#27933](https://github.com/twentyhq/twenty/pull/27933)) by @thomtrp

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

- chore(twenty-ui): declare storybook as a devDependency ([#27697](https://github.com/twentyhq/twenty/pull/27697)) by @abdulrahmancodes
- ci(website): serve the built Worker in workerd and smoke-test real pages ([#27756](https://github.com/twentyhq/twenty/pull/27756)) by @FelixMalfait
- chore(security): bump handlebars to 4.7.10 ([#27765](https://github.com/twentyhq/twenty/pull/27765)) by @mabdullahabaid
- chore(security): bump simple-git to 4.0.2 ([#27769](https://github.com/twentyhq/twenty/pull/27769)) by @mabdullahabaid
- chore(security): bump source-map-js to 1.2.2 ([#27770](https://github.com/twentyhq/twenty/pull/27770)) by @mabdullahabaid
- chore(security): bump oxfmt to 0.72.0 and reformat ([#27772](https://github.com/twentyhq/twenty/pull/27772)) by @mabdullahabaid
- chore(security): bump nx to 22.7.12 and smol-toml to 1.9.0 ([#27782](https://github.com/twentyhq/twenty/pull/27782)) by @mabdullahabaid
- refactor(usage-limit): stock counters hold what is held, keyed by scope ([#27866](https://github.com/twentyhq/twenty/pull/27866)) by @etiennejouan
- docs: list the Microsoft scopes Twenty actually requests ([#27904](https://github.com/twentyhq/twenty/pull/27904)) by @neo773
- refactor(usage-limit): import billing directly instead of discovering its providers ([#27926](https://github.com/twentyhq/twenty/pull/27926)) by @etiennejouan
- chore(cli): bump the twenty package to 2.47.0 ([#27940](https://github.com/twentyhq/twenty/pull/27940)) by @Weiko

</details>

## 🎉 New contributors

- @evanliuuu made their first contribution in https://github.com/twentyhq/twenty/pull/27018
- @hussnainahmedd made their first contribution in https://github.com/twentyhq/twenty/pull/27112
- @Sameer7-s made their first contribution in https://github.com/twentyhq/twenty/pull/27085
- @slavarosin made their first contribution in https://github.com/twentyhq/twenty/pull/27245

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

- Fix JSON filter ([#26589](https://github.com/twentyhq/twenty/pull/26589)) by @BOHEUS
- feat(campaigns): add selected people or a whole People view to a campaign list ([#26823](https://github.com/twentyhq/twenty/pull/26823)) by @neo773
- Show unique and total clicks and opens on campaigns ([#26875](https://github.com/twentyhq/twenty/pull/26875)) by @neo773
- Track campaign opens ([#26938](https://github.com/twentyhq/twenty/pull/26938)) by @neo773
- Make TipTap email documents the only outbound email body format ([#26981](https://github.com/twentyhq/twenty/pull/26981)) by @neo773
- fix(front): lay phone numbers out left to right in RTL locales ([#27006](https://github.com/twentyhq/twenty/pull/27006)) by @almoghazaz-cell
- fix(billing): surface checkoutSession GraphQL errors in toast ([#27018](https://github.com/twentyhq/twenty/pull/27018)) by @evanliuuu
- fix(ui): truncate LTR values at their end in RTL layouts ([#27059](https://github.com/twentyhq/twenty/pull/27059)) by @almoghazaz-cell
- Fix record gql fields typing ([#27069](https://github.com/twentyhq/twenty/pull/27069)) by @BOHEUS
- fix(cli): remove legacy CLI config migration ([#27085](https://github.com/twentyhq/twenty/pull/27085)) by @Sameer7-s
- fix: use overflow clip on app layout to stop side-panel shift ([#27112](https://github.com/twentyhq/twenty/pull/27112)) by @hussnainahmedd
- fix force redirect with Navigate ([#27130](https://github.com/twentyhq/twenty/pull/27130)) by @minnibaevB
- fix(server): sync userWorkspace.locale when a workspace member's locale is updated through the record API ([#27245](https://github.com/twentyhq/twenty/pull/27245)) by @slavarosin
- Add people to a campaign list with a background job ([#27276](https://github.com/twentyhq/twenty/pull/27276)) by @neo773
- Align agent execution with caller context ([#27394](https://github.com/twentyhq/twenty/pull/27394)) by @prastoin
- refactor(usage-limit) - quota counters hold consumption; allowance cap from the workspace cache ([#27479](https://github.com/twentyhq/twenty/pull/27479)) by @etiennejouan
- Support ImageInput file selection in the front component renderer ([#27588](https://github.com/twentyhq/twenty/pull/27588)) by @bosiraphael
- Let the AI agent build validation rules from the side panel ([#27635](https://github.com/twentyhq/twenty/pull/27635)) by @thomtrp
- Link Teams transcripts to their calendar event by Microsoft Graph event id ([#27676](https://github.com/twentyhq/twenty/pull/27676)) by @ehconitin
- Add Persian locale ([#27684](https://github.com/twentyhq/twenty/pull/27684)) by @BOHEUS
- Stop registering dynamic record cache fragments with graphql-tag ([#27690](https://github.com/twentyhq/twenty/pull/27690)) by @FelixMalfait
- Skip standby aggregate queries when refetching after record changes ([#27691](https://github.com/twentyhq/twenty/pull/27691)) by @FelixMalfait
- Align log console access and retention with plans ([#27696](https://github.com/twentyhq/twenty/pull/27696)) by @martmull
- chore(twenty-ui): declare storybook as a devDependency ([#27697](https://github.com/twentyhq/twenty/pull/27697)) by @abdulrahmancodes
- Let application workflows run on a schedule ([#27699](https://github.com/twentyhq/twenty/pull/27699)) by @thomtrp
- Let application workflows run on record events ([#27700](https://github.com/twentyhq/twenty/pull/27700)) by @thomtrp
- Replace Pill and NotificationCounter with Badge ([#27702](https://github.com/twentyhq/twenty/pull/27702)) by @bosiraphael
- Complete radio and segmented selection ([#27707](https://github.com/twentyhq/twenty/pull/27707)) by @bosiraphael
- Preserve native edits across renderer updates ([#27726](https://github.com/twentyhq/twenty/pull/27726)) by @bosiraphael
- Align Tabs with Base UI ([#27732](https://github.com/twentyhq/twenty/pull/27732)) by @bosiraphael
- Remove the WhatsApp and Calls Soon tabs from Communication settings ([#27733](https://github.com/twentyhq/twenty/pull/27733)) by @Bonapara
- Expose NumberField and retain NumberStepper ([#27734](https://github.com/twentyhq/twenty/pull/27734)) by @bosiraphael
- chore: bump version to 2.47.0 ([#27735](https://github.com/twentyhq/twenty/pull/27735)) by @twenty-pr
- Stop stacking record creation forms on repeated Create clicks ([#27736](https://github.com/twentyhq/twenty/pull/27736)) by @thomtrp
- i18n - translations ([#27737](https://github.com/twentyhq/twenty/pull/27737)) by @github-actions
- i18n - translations ([#27740](https://github.com/twentyhq/twenty/pull/27740)) by @github-actions
- Complete Select public parts ([#27741](https://github.com/twentyhq/twenty/pull/27741)) by @bosiraphael
- Normalize saved view filter values for query resolution ([#27742](https://github.com/twentyhq/twenty/pull/27742)) by @FelixMalfait
- Batch global admin chat report transactions ([#27746](https://github.com/twentyhq/twenty/pull/27746)) by @FelixMalfait
- i18n - translations ([#27747](https://github.com/twentyhq/twenty/pull/27747)) by @github-actions
- Stop selecting agent.evaluationInputs once the 2.47 drop has run ([#27748](https://github.com/twentyhq/twenty/pull/27748)) by @charlesBochet
- i18n - translations ([#27750](https://github.com/twentyhq/twenty/pull/27750)) by @github-actions
- fix(website): bump @opennextjs/cloudflare to 1.20.8 for Next 16.3.8 cache keys ([#27751](https://github.com/twentyhq/twenty/pull/27751)) by @FelixMalfait
- Derive persisted record filter types from field metadata like views ([#27754](https://github.com/twentyhq/twenty/pull/27754)) by @FelixMalfait
- Last contact 1.9.1: stop restoring trashed people, skip unchanged writes ([#27755](https://github.com/twentyhq/twenty/pull/27755)) by @martmull
- ci(website): serve the built Worker in workerd and smoke-test real pages ([#27756](https://github.com/twentyhq/twenty/pull/27756)) by @FelixMalfait
- i18n - translations ([#27757](https://github.com/twentyhq/twenty/pull/27757)) by @github-actions
- i18n - translations ([#27758](https://github.com/twentyhq/twenty/pull/27758)) by @github-actions
- Add missing translation keys ([#27759](https://github.com/twentyhq/twenty/pull/27759)) by @BOHEUS
- Rename morph relations ([#27760](https://github.com/twentyhq/twenty/pull/27760)) by @BOHEUS
- chore: sync AI model catalog ([#27761](https://github.com/twentyhq/twenty/pull/27761)) by @github-actions
- Adopt gpt-6-luna for the cheap tier (dev, staging, self-host) ([#27763](https://github.com/twentyhq/twenty/pull/27763)) by @twenty-pr-author
- Fix ordering for view sort replacements ([#27764](https://github.com/twentyhq/twenty/pull/27764)) by @FelixMalfait
- chore(security): bump handlebars to 4.7.10 ([#27765](https://github.com/twentyhq/twenty/pull/27765)) by @mabdullahabaid
- Wait for popup visibility in disabled item stories ([#27766](https://github.com/twentyhq/twenty/pull/27766)) by @FelixMalfait
- Fix cascade-before-update ordering in workspace migrations ([#27767](https://github.com/twentyhq/twenty/pull/27767)) by @FelixMalfait
- Fix table skeleton cells overflowing into the next column ([#27768](https://github.com/twentyhq/twenty/pull/27768)) by @ehconitin
- chore(security): bump simple-git to 4.0.2 ([#27769](https://github.com/twentyhq/twenty/pull/27769)) by @mabdullahabaid
- chore(security): bump source-map-js to 1.2.2 ([#27770](https://github.com/twentyhq/twenty/pull/27770)) by @mabdullahabaid
- chore(security): bump oxfmt to 0.72.0 and reformat ([#27772](https://github.com/twentyhq/twenty/pull/27772)) by @mabdullahabaid
- chore: sync AI model catalog ([#27773](https://github.com/twentyhq/twenty/pull/27773)) by @github-actions
- Remove the 2.45/2.46 chat upgrade fences and fallbacks ([#27779](https://github.com/twentyhq/twenty/pull/27779)) by @FelixMalfait
- Drop usage limit meter compatibility in 2.47 ([#27780](https://github.com/twentyhq/twenty/pull/27780)) by @FelixMalfait
- Add OSS Scanner build and threat model ([#27781](https://github.com/twentyhq/twenty/pull/27781)) by @FelixMalfait
- chore(security): bump nx to 22.7.12 and smol-toml to 1.9.0 ([#27782](https://github.com/twentyhq/twenty/pull/27782)) by @mabdullahabaid
- Identify chat owners and senders by workspace member, and drop the legacy chat columns ([#27783](https://github.com/twentyhq/twenty/pull/27783)) by @FelixMalfait
- i18n - translations ([#27784](https://github.com/twentyhq/twenty/pull/27784)) by @github-actions
- Follow shared chats only when taking part in them, and track what members read ([#27786](https://github.com/twentyhq/twenty/pull/27786)) by @FelixMalfait
- Spell out the security contact email in SECURITY.md ([#27789](https://github.com/twentyhq/twenty/pull/27789)) by @FelixMalfait
- Show workspace members by name or email through one helper ([#27791](https://github.com/twentyhq/twenty/pull/27791)) by @FelixMalfait
- i18n - translations ([#27801](https://github.com/twentyhq/twenty/pull/27801)) by @github-actions
- chore: sync AI model catalog ([#27802](https://github.com/twentyhq/twenty/pull/27802)) by @github-actions
- fix(usage-limit): no workspace record or storage limit when the config variable is unset ([#27803](https://github.com/twentyhq/twenty/pull/27803)) by @etiennejouan
- Type RolePermissionConfig by role source ([#27805](https://github.com/twentyhq/twenty/pull/27805)) by @prastoin
- Complete Autocomplete parts ([#27806](https://github.com/twentyhq/twenty/pull/27806)) by @bosiraphael
- i18n - translations ([#27808](https://github.com/twentyhq/twenty/pull/27808)) by @github-actions
- i18n - translations ([#27810](https://github.com/twentyhq/twenty/pull/27810)) by @github-actions
- feat(teams): answer Teams assistant requests ([#27811](https://github.com/twentyhq/twenty/pull/27811)) by @abdulrahmancodes
- Remove leftover in Admin Panel ([#27812](https://github.com/twentyhq/twenty/pull/27812)) by @BOHEUS
- Show the real remaining count on relation card widgets ([#27813](https://github.com/twentyhq/twenty/pull/27813)) by @charlesBochet
- fix(workspace-cleaner): never warn members of a soft-deleted workspace ([#27814](https://github.com/twentyhq/twenty/pull/27814)) by @etiennejouan
- Remove unused Menu API ([#27815](https://github.com/twentyhq/twenty/pull/27815)) by @bosiraphael
- Fix double highlight on view picker rows ([#27816](https://github.com/twentyhq/twenty/pull/27816)) by @Bonapara
- Gate validation rules behind the Organization plan ([#27818](https://github.com/twentyhq/twenty/pull/27818)) by @thomtrp
- Require the roles permission to pick a role when sending invitations ([#27820](https://github.com/twentyhq/twenty/pull/27820)) by @thomtrp
- Group pending invoice items monthly for invoice-paying subscriptions ([#27826](https://github.com/twentyhq/twenty/pull/27826)) by @ijreilly
- Let invoice-paying customers end their trial without a card ([#27827](https://github.com/twentyhq/twenty/pull/27827)) by @ijreilly
- Add Teams user link object ([#27828](https://github.com/twentyhq/twenty/pull/27828)) by @abdulrahmancodes
- [BREAKING_CHANGE] Ship the Conversations tab and workflow inbox messages under the inbox flag ([#27830](https://github.com/twentyhq/twenty/pull/27830)) by @FelixMalfait
- Unify Progress semantics and move onboarding motion ([#27831](https://github.com/twentyhq/twenty/pull/27831)) by @bosiraphael
- [BREAKING_CHANGE] Unpin chat Share and drop the AI chat sharing dropdown flag ([#27832](https://github.com/twentyhq/twenty/pull/27832)) by @FelixMalfait
- fix(workflow): skip not-taken if/else branch targets also listed in the step's nextStepIds ([#27833](https://github.com/twentyhq/twenty/pull/27833)) by @thomtrp
- feat(billing) : store the ?partner= sign-up attribution on the Stripe customer ([#27836](https://github.com/twentyhq/twenty/pull/27836)) by @etiennejouan
- Revert the browser-bound application claim state (#26214) ([#27837](https://github.com/twentyhq/twenty/pull/27837)) by @martmull
- Keep app update tag visible in installed apps list ([#27838](https://github.com/twentyhq/twenty/pull/27838)) by @martmull
- Order application workflow steps by application and label ([#27839](https://github.com/twentyhq/twenty/pull/27839)) by @martmull
- Show validation rule messages under their field in the record creation form ([#27840](https://github.com/twentyhq/twenty/pull/27840)) by @thomtrp
- Add widgetAvailability to front components ([#27841](https://github.com/twentyhq/twenty/pull/27841)) by @martmull
- Keep add-people-to-message-list spec from flooding the workflow queue ([#27842](https://github.com/twentyhq/twenty/pull/27842)) by @FelixMalfait
- feat(apps): hide marketplace apps the server version does not satisfy ([#27843](https://github.com/twentyhq/twenty/pull/27843)) by @martmull
- Ask consent to bill credits when installing an app ([#27844](https://github.com/twentyhq/twenty/pull/27844)) by @martmull
- Add Toast updates and status naming ([#27846](https://github.com/twentyhq/twenty/pull/27846)) by @bosiraphael
- Move workflow execution integration tests to the core workflow API ([#27848](https://github.com/twentyhq/twenty/pull/27848)) by @thomtrp
- Move workflow node, core workflow, lifecycle and permission integration tests to the core workflow API ([#27849](https://github.com/twentyhq/twenty/pull/27849)) by @thomtrp
- Make the workflow editor hooks core-only ([#27852](https://github.com/twentyhq/twenty/pull/27852)) by @thomtrp
- Make workflow commands, navigation and pages core-only ([#27853](https://github.com/twentyhq/twenty/pull/27853)) by @thomtrp
- Reject records-API writes on workflow and workflowVersion ([#27855](https://github.com/twentyhq/twenty/pull/27855)) by @thomtrp
- Remove the legacy workspace-id workflow GraphQL API ([#27856](https://github.com/twentyhq/twenty/pull/27856)) by @thomtrp
- Remove the legacy workflow trigger and version workspace services ([#27857](https://github.com/twentyhq/twenty/pull/27857)) by @thomtrp
- Remove the legacy workflow step and edge workspace services ([#27858](https://github.com/twentyhq/twenty/pull/27858)) by @thomtrp
- Accept [BREAKING_CHANGE] titles and stop flagging feature flag removals in the API breaking change check ([#27859](https://github.com/twentyhq/twenty/pull/27859)) by @FelixMalfait
- Show core workflow and version on the workflow runs index ([#27861](https://github.com/twentyhq/twenty/pull/27861)) by @thomtrp
- Deprecate the SDK CLI and create-twenty-app ([#27862](https://github.com/twentyhq/twenty/pull/27862)) by @Weiko
- fix(cli): lock the app template with the pins the publish check verified ([#27864](https://github.com/twentyhq/twenty/pull/27864)) by @Weiko
- refactor(usage-limit): stock counters hold what is held, keyed by scope ([#27866](https://github.com/twentyhq/twenty/pull/27866)) by @etiennejouan
- Remove tabs from marketplace app detail page ([#27868](https://github.com/twentyhq/twenty/pull/27868)) by @martmull
- Fix oversized icon in side panel switch rows ([#27869](https://github.com/twentyhq/twenty/pull/27869)) by @FelixMalfait
- Sort admin apps by attention and show author and install count ([#27871](https://github.com/twentyhq/twenty/pull/27871)) by @martmull
- Navigate the inbox with the arrow keys ([#27875](https://github.com/twentyhq/twenty/pull/27875)) by @FelixMalfait
- Show application logo on fields, views, widgets and created-by actor ([#27876](https://github.com/twentyhq/twenty/pull/27876)) by @martmull
- Remove the workflow drift check, the workspace statuses job and the workspace-to-core sync listener ([#27879](https://github.com/twentyhq/twenty/pull/27879)) by @thomtrp
- Activate and deactivate workflows without writing workspace rows ([#27880](https://github.com/twentyhq/twenty/pull/27880)) by @thomtrp
- Write workflow version content and drafts to core only ([#27881](https://github.com/twentyhq/twenty/pull/27881)) by @thomtrp
- Create, rename, duplicate and delete workflows in core only ([#27882](https://github.com/twentyhq/twenty/pull/27882)) by @thomtrp
- Remove the dead workflow mirror write code ([#27883](https://github.com/twentyhq/twenty/pull/27883)) by @thomtrp
- Seed and prefill workflows in core only ([#27884](https://github.com/twentyhq/twenty/pull/27884)) by @thomtrp
- Keep AI chat thinking signatures valid across turns ([#27888](https://github.com/twentyhq/twenty/pull/27888)) by @charlesBochet
- feat(usage-limit): set quota and stock default values per billing plan ([#27890](https://github.com/twentyhq/twenty/pull/27890)) by @etiennejouan
- Speed up switching between record table views ([#27897](https://github.com/twentyhq/twenty/pull/27897)) by @charlesBochet
- Use Teams user links when matching the sender ([#27898](https://github.com/twentyhq/twenty/pull/27898)) by @abdulrahmancodes
- Put twenty-ui styles in a cascade layer ([#27899](https://github.com/twentyhq/twenty/pull/27899)) by @bosiraphael
- fix(admin-panel): look up admin chat threads in the workspace from the route ([#27901](https://github.com/twentyhq/twenty/pull/27901)) by @etiennejouan
- docs: list the Microsoft scopes Twenty actually requests ([#27904](https://github.com/twentyhq/twenty/pull/27904)) by @neo773
- Align CLI version with Twenty 2.46.0 ([#27905](https://github.com/twentyhq/twenty/pull/27905)) by @Weiko
- Use the existing banner and field error components for validation rule messages ([#27906](https://github.com/twentyhq/twenty/pull/27906)) by @thomtrp
- Let Bedrock AI providers authenticate with a Bedrock API key ([#27907](https://github.com/twentyhq/twenty/pull/27907)) by @charlesBochet
- Skip cli-test in the merge queue ([#27908](https://github.com/twentyhq/twenty/pull/27908)) by @prastoin
- Add a route to remove Teams user links ([#27909](https://github.com/twentyhq/twenty/pull/27909)) by @abdulrahmancodes
- Skip cli-package-test in the merge queue ([#27910](https://github.com/twentyhq/twenty/pull/27910)) by @prastoin
- Take row-level rules from the roles the permission config intersects ([#27911](https://github.com/twentyhq/twenty/pull/27911)) by @prastoin
- fix(server): sample AI SDK v7 agent spans at 100% in Sentry ([#27913](https://github.com/twentyhq/twenty/pull/27913)) by @etiennejouan
- Fix application author display when the manifest carries an npm-style author object ([#27918](https://github.com/twentyhq/twenty/pull/27918)) by @martmull
- fix(admin-panel): drop the admin panel global AI chats list ([#27920](https://github.com/twentyhq/twenty/pull/27920)) by @etiennejouan
- Only measure overflowing lists while their count can show ([#27923](https://github.com/twentyhq/twenty/pull/27923)) by @charlesBochet
- Enable initial object views on new workspaces ([#27924](https://github.com/twentyhq/twenty/pull/27924)) by @thomtrp
- refactor(usage-limit): import billing directly instead of discovering its providers ([#27926](https://github.com/twentyhq/twenty/pull/27926)) by @etiennejouan
- Bump claude-code-action and Claude Code ([#27928](https://github.com/twentyhq/twenty/pull/27928)) by @neo773
- Only add Bedrock cache points for Claude models ([#27929](https://github.com/twentyhq/twenty/pull/27929)) by @charlesBochet
- Make Toast timing deterministic ([#27930](https://github.com/twentyhq/twenty/pull/27930)) by @bosiraphael
- fix(cli): report the Node requirement when launched with npx ([#27932](https://github.com/twentyhq/twenty/pull/27932)) by @Weiko
- Let application workflows start from a webhook ([#27933](https://github.com/twentyhq/twenty/pull/27933)) by @thomtrp
- Fix Kanban icon ([#27936](https://github.com/twentyhq/twenty/pull/27936)) by @BOHEUS
- chore(cli): bump the twenty package to 2.47.0 ([#27940](https://github.com/twentyhq/twenty/pull/27940)) by @Weiko
- Keep the role permission config on the workspace repository ([#27942](https://github.com/twentyhq/twenty/pull/27942)) by @prastoin
- Resolve the connected account when an email is clicked, not per cell ([#27947](https://github.com/twentyhq/twenty/pull/27947)) by @charlesBochet
- Wait for Select popup transitions ([#27950](https://github.com/twentyhq/twenty/pull/27950)) by @bosiraphael
- Read waiting job ids without loading job data in the BullMQ driver ([#27955](https://github.com/twentyhq/twenty/pull/27955)) by @charlesBochet
- Make table cell and skeleton styles static and add a block Skeleton layout ([#27957](https://github.com/twentyhq/twenty/pull/27957)) by @charlesBochet
- MCP: fix soft-delete generated tools ([#27962](https://github.com/twentyhq/twenty/pull/27962)) by @BOHEUS
- Make filter validation errors actionable for AI agents ([#27963](https://github.com/twentyhq/twenty/pull/27963)) by @BOHEUS

</details>

**Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.46.0...twenty/v2.47.0

Related Repositories