twenty/v2.28.0
twentyhq/twentytwenty/v2.28.0Aug 11, 2026by twenty-pr[bot]
AI Summary
Improves Slack integration, workflow stability, and general UI/UX, including record linking in Slack and automated workflow triggers.
Key Highlights
- Slack integration allows linking records and formatting assistant replies.
- Workflow improvements include repairing orphaned versions and automated triggers.
- Fixes for various Slack and workflow-related bugs.
New Features
- Link records and format the assistant reply footer in Slack.
- Repair orphan core workflow versions via upgrade command.
- Dispatch automated triggers from core behind a flag.
Full Release Notes
<!-- generated-release-notes v1 --> ## β¨ New features - feat(twenty-slack): link records and format the assistant reply footer ([#23539](https://github.com/twentyhq/twenty/pull/23539)) by @abdulrahmancodes - feat(slack): cache the Slack bot user id at connect time ([#23726](https://github.com/twentyhq/twenty/pull/23726)) by @abdulrahmancodes - feat(workflow): repair orphan core workflow versions via upgrade command ([#23739](https://github.com/twentyhq/twenty/pull/23739)) by @thomtrp - feat(server): export event-loop delay and workspace-cache recompute metrics ([#23751](https://github.com/twentyhq/twenty/pull/23751)) by @charlesBochet - feat(workflow): dispatch automated triggers from core behind a flag ([#23775](https://github.com/twentyhq/twenty/pull/23775)) by @thomtrp - feat(server): instrument the local metadata cache and cap heavy providers by entry count ([#23778](https://github.com/twentyhq/twenty/pull/23778)) by @charlesBochet ## π Improvements & UX - Make subdomain minimum length configurable via env var ([#23209](https://github.com/twentyhq/twenty/pull/23209)) by @ijreilly - Enforce row-level permissions on joined relations ([#23369](https://github.com/twentyhq/twenty/pull/23369)) by @bosiraphael - Add messages support to runAgent for multi-turn bot conversations ([#23395](https://github.com/twentyhq/twenty/pull/23395)) by @abdulrahmancodes - Add a book-a-call onboarding step for qualified leads ([#23521](https://github.com/twentyhq/twenty/pull/23521)) by @bosiraphael - Stop showing raw chunk load errors ([#23571](https://github.com/twentyhq/twenty/pull/23571)) by @bosiraphael - Fix grouping a view that can no longer be changed or removed ([#23619](https://github.com/twentyhq/twenty/pull/23619)) by @abdulrahmancodes - Fan out Fireflies backfill into batched jobs ([#23622](https://github.com/twentyhq/twenty/pull/23622)) by @ehconitin - Feat/advanced text editor capability presets ([#23657](https://github.com/twentyhq/twenty/pull/23657)) by @ijreilly - Add cookie-session integration test suite ([#23715](https://github.com/twentyhq/twenty/pull/23715)) by @prastoin - Hide onboarding credits when billing is disabled ([#23717](https://github.com/twentyhq/twenty/pull/23717)) by @bosiraphael - Update website release notes through 2.26 ([#23736](https://github.com/twentyhq/twenty/pull/23736)) by @Bonapara - Run the people-data-labs spec suite in CI ([#23743](https://github.com/twentyhq/twenty/pull/23743)) by @bosiraphael - Continue the workspace setup chat in the side panel when navigating away ([#23744](https://github.com/twentyhq/twenty/pull/23744)) by @bosiraphael - Ignore expired invitations in invitation lookups ([#23749](https://github.com/twentyhq/twenty/pull/23749)) by @prastoin - Add IS_FEATURE_FLAG_MANAGEMENT_ENABLED to unlock feature flag toggling outside cloud ([#23750](https://github.com/twentyhq/twenty/pull/23750)) by @FelixMalfait - Dnd library migration fixes and changes ([#23752](https://github.com/twentyhq/twenty/pull/23752)) by @git-init-priyanshu - Keep the token pair as a fallback after switching to cookie auth ([#23755](https://github.com/twentyhq/twenty/pull/23755)) by @FelixMalfait - Standardize dragged element feedback ([#23772](https://github.com/twentyhq/twenty/pull/23772)) by @Bonapara - Restrict which workspace fields can be updated before activation ([#23781](https://github.com/twentyhq/twenty/pull/23781)) by @prastoin - Refactor outbound email content compilation ([#23782](https://github.com/twentyhq/twenty/pull/23782)) by @FelixMalfait - Make the call recorder transcript provider an application variable ([#23789](https://github.com/twentyhq/twenty/pull/23789)) by @ehconitin - Add OpenTelemetry metrics to workspace migration build and run ([#23797](https://github.com/twentyhq/twenty/pull/23797)) by @prastoin - Fix stray bracket after AI chat chips ([#23798](https://github.com/twentyhq/twenty/pull/23798)) by @bosiraphael - Fix workflow email body overflowing into the attachments section ([#23810](https://github.com/twentyhq/twenty/pull/23810)) by @ijreilly - Fix AI campaign editing: tool auth context in workers and live editor resync ([#23811](https://github.com/twentyhq/twenty/pull/23811)) by @FelixMalfait - Stop classifying Recall bot-detection timeouts as NOT_RECORDED in call-recorder ([#23812](https://github.com/twentyhq/twenty/pull/23812)) by @ehconitin - Bump vulnerable dependencies flagged by ECR image scanning ([#23813](https://github.com/twentyhq/twenty/pull/23813)) by @charlesBochet - Fix widget view save paths dropping relationTargetFieldMetadataId ([#23814](https://github.com/twentyhq/twenty/pull/23814)) by @FelixMalfait - Add nested relation Field widgets on record page layouts ([#23815](https://github.com/twentyhq/twenty/pull/23815)) by @FelixMalfait - Cancel drag activation when the drag source unmounts mid-gesture ([#23816](https://github.com/twentyhq/twenty/pull/23816)) by @FelixMalfait - Report a sending domain as pending while SES waits for the DKIM records ([#23818](https://github.com/twentyhq/twenty/pull/23818)) by @ijreilly - Extend live update coverage: workflow draft updates and side-panel records ([#23830](https://github.com/twentyhq/twenty/pull/23830)) by @FelixMalfait - Make AI chat streaming render cost independent of message length ([#23831](https://github.com/twentyhq/twenty/pull/23831)) by @FelixMalfait - Fix client-side record matching for nested relation filters ([#23832](https://github.com/twentyhq/twenty/pull/23832)) by @FelixMalfait - Rename credits "Increase" button to "Manage" ([#23840](https://github.com/twentyhq/twenty/pull/23840)) by @FelixMalfait - Scope sessions and application authorizations to the workspace ([#23843](https://github.com/twentyhq/twenty/pull/23843)) by @FelixMalfait - Fix missing border below the last record table row ([#23846](https://github.com/twentyhq/twenty/pull/23846)) by @FelixMalfait - Revert AI chat chips to the [[kind:...:label]] syntax ([#23852](https://github.com/twentyhq/twenty/pull/23852)) by @bosiraphael ## π Bug fixes - fix: allow app-manifest RECORD_TABLE widgets to reference a view by universal identifier ([#23634](https://github.com/twentyhq/twenty/pull/23634)) by @thomtrp - fix(twenty-front): expand HTML preview viewport in DocumentViewer (#23668) ([#23676](https://github.com/twentyhq/twenty/pull/23676)) by @Shinu-Cherian - fix(front): show relation value chip (Me / record names) in advanced filters ([#23718](https://github.com/twentyhq/twenty/pull/23718)) by @charlesBochet - fix(settings): unbreak the AI tools table and validate page-level graphql documents ([#23731](https://github.com/twentyhq/twenty/pull/23731)) by @FelixMalfait - fix(front): only show Discard Draft when workflow has a published version ([#23756](https://github.com/twentyhq/twenty/pull/23756)) by @thomtrp - fix(workflow): reject if-else branches with a dangling filterGroupId ([#23758](https://github.com/twentyhq/twenty/pull/23758)) by @blockgroot - fix(twenty-front): stop field widget layout dropdown from crashing thβ¦ ([#23784](https://github.com/twentyhq/twenty/pull/23784)) by @FelixMalfait - fix(twenty-server): compose email from the caller's own connected account ([#23793](https://github.com/twentyhq/twenty/pull/23793)) by @charlesBochet - fix(workflow): make core-consistency drift check trustworthy for rollout ([#23807](https://github.com/twentyhq/twenty/pull/23807)) by @thomtrp - fix(front): apply advanced filter value and operand edits after a fresh page load ([#23819](https://github.com/twentyhq/twenty/pull/23819)) by @charlesBochet ## π§ Developer & API - webhook subscriptions error handling ([#23707](https://github.com/twentyhq/twenty/pull/23707)) by @neo773 - Accept a singleton or filter in the GraphQL filter walker ([#23738](https://github.com/twentyhq/twenty/pull/23738)) by @bosiraphael - Proxy API routes through the vite dev server to keep local dev same-origin ([#23779](https://github.com/twentyhq/twenty/pull/23779)) by @prastoin <details> <summary>ποΈ Internal changes (3)</summary> - chore(codeowners): guard .claude, .mcp.json and CLAUDE.md ([#23734](https://github.com/twentyhq/twenty/pull/23734)) by @prastoin - refactor(front): move workflow run step logs into workflow-actions ([#23841](https://github.com/twentyhq/twenty/pull/23841)) by @thomtrp - ci(pr-review): stop a skipped label dispatch from cancelling the open dispatch ([#23856](https://github.com/twentyhq/twenty/pull/23856)) by @charlesBochet </details> ## π New contributors - @blockgroot made their first contribution in https://github.com/twentyhq/twenty/pull/23758 <details> <summary>Full changelog (76 PRs)</summary> - Make subdomain minimum length configurable via env var ([#23209](https://github.com/twentyhq/twenty/pull/23209)) by @ijreilly - Enforce row-level permissions on joined relations ([#23369](https://github.com/twentyhq/twenty/pull/23369)) by @bosiraphael - Add messages support to runAgent for multi-turn bot conversations ([#23395](https://github.com/twentyhq/twenty/pull/23395)) by @abdulrahmancodes - Add a book-a-call onboarding step for qualified leads ([#23521](https://github.com/twentyhq/twenty/pull/23521)) by @bosiraphael - feat(twenty-slack): link records and format the assistant reply footer ([#23539](https://github.com/twentyhq/twenty/pull/23539)) by @abdulrahmancodes - Stop showing raw chunk load errors ([#23571](https://github.com/twentyhq/twenty/pull/23571)) by @bosiraphael - Fix grouping a view that can no longer be changed or removed ([#23619](https://github.com/twentyhq/twenty/pull/23619)) by @abdulrahmancodes - Fan out Fireflies backfill into batched jobs ([#23622](https://github.com/twentyhq/twenty/pull/23622)) by @ehconitin - fix: allow app-manifest RECORD_TABLE widgets to reference a view by universal identifier ([#23634](https://github.com/twentyhq/twenty/pull/23634)) by @thomtrp - Feat/advanced text editor capability presets ([#23657](https://github.com/twentyhq/twenty/pull/23657)) by @ijreilly - fix(twenty-front): expand HTML preview viewport in DocumentViewer (#23668) ([#23676](https://github.com/twentyhq/twenty/pull/23676)) by @Shinu-Cherian - webhook subscriptions error handling ([#23707](https://github.com/twentyhq/twenty/pull/23707)) by @neo773 - Add cookie-session integration test suite ([#23715](https://github.com/twentyhq/twenty/pull/23715)) by @prastoin - Hide onboarding credits when billing is disabled ([#23717](https://github.com/twentyhq/twenty/pull/23717)) by @bosiraphael - fix(front): show relation value chip (Me / record names) in advanced filters ([#23718](https://github.com/twentyhq/twenty/pull/23718)) by @charlesBochet - feat(slack): cache the Slack bot user id at connect time ([#23726](https://github.com/twentyhq/twenty/pull/23726)) by @abdulrahmancodes - chore: bump version to 2.28.0 ([#23730](https://github.com/twentyhq/twenty/pull/23730)) by @twenty-pr - fix(settings): unbreak the AI tools table and validate page-level graphql documents ([#23731](https://github.com/twentyhq/twenty/pull/23731)) by @FelixMalfait - chore(codeowners): guard .claude, .mcp.json and CLAUDE.md ([#23734](https://github.com/twentyhq/twenty/pull/23734)) by @prastoin - Update website release notes through 2.26 ([#23736](https://github.com/twentyhq/twenty/pull/23736)) by @Bonapara - Accept a singleton or filter in the GraphQL filter walker ([#23738](https://github.com/twentyhq/twenty/pull/23738)) by @bosiraphael - feat(workflow): repair orphan core workflow versions via upgrade command ([#23739](https://github.com/twentyhq/twenty/pull/23739)) by @thomtrp - i18n - translations ([#23740](https://github.com/twentyhq/twenty/pull/23740)) by @github-actions - Run the people-data-labs spec suite in CI ([#23743](https://github.com/twentyhq/twenty/pull/23743)) by @bosiraphael - Continue the workspace setup chat in the side panel when navigating away ([#23744](https://github.com/twentyhq/twenty/pull/23744)) by @bosiraphael - i18n - translations ([#23746](https://github.com/twentyhq/twenty/pull/23746)) by @github-actions - i18n - translations ([#23748](https://github.com/twentyhq/twenty/pull/23748)) by @github-actions - Ignore expired invitations in invitation lookups ([#23749](https://github.com/twentyhq/twenty/pull/23749)) by @prastoin - Add IS_FEATURE_FLAG_MANAGEMENT_ENABLED to unlock feature flag toggling outside cloud ([#23750](https://github.com/twentyhq/twenty/pull/23750)) by @FelixMalfait - feat(server): export event-loop delay and workspace-cache recompute metrics ([#23751](https://github.com/twentyhq/twenty/pull/23751)) by @charlesBochet - Dnd library migration fixes and changes ([#23752](https://github.com/twentyhq/twenty/pull/23752)) by @git-init-priyanshu - Keep the token pair as a fallback after switching to cookie auth ([#23755](https://github.com/twentyhq/twenty/pull/23755)) by @FelixMalfait - fix(front): only show Discard Draft when workflow has a published version ([#23756](https://github.com/twentyhq/twenty/pull/23756)) by @thomtrp - fix(workflow): reject if-else branches with a dangling filterGroupId ([#23758](https://github.com/twentyhq/twenty/pull/23758)) by @blockgroot - Standardize dragged element feedback ([#23772](https://github.com/twentyhq/twenty/pull/23772)) by @Bonapara - feat(workflow): dispatch automated triggers from core behind a flag ([#23775](https://github.com/twentyhq/twenty/pull/23775)) by @thomtrp - feat(server): instrument the local metadata cache and cap heavy providers by entry count ([#23778](https://github.com/twentyhq/twenty/pull/23778)) by @charlesBochet - Proxy API routes through the vite dev server to keep local dev same-origin ([#23779](https://github.com/twentyhq/twenty/pull/23779)) by @prastoin - Restrict which workspace fields can be updated before activation ([#23781](https://github.com/twentyhq/twenty/pull/23781)) by @prastoin - Refactor outbound email content compilation ([#23782](https://github.com/twentyhq/twenty/pull/23782)) by @FelixMalfait - fix(twenty-front): stop field widget layout dropdown from crashing thβ¦ ([#23784](https://github.com/twentyhq/twenty/pull/23784)) by @FelixMalfait - Make the call recorder transcript provider an application variable ([#23789](https://github.com/twentyhq/twenty/pull/23789)) by @ehconitin - fix(twenty-server): compose email from the caller's own connected account ([#23793](https://github.com/twentyhq/twenty/pull/23793)) by @charlesBochet - i18n - translations ([#23794](https://github.com/twentyhq/twenty/pull/23794)) by @github-actions - i18n - docs translations ([#23796](https://github.com/twentyhq/twenty/pull/23796)) by @github-actions - Add OpenTelemetry metrics to workspace migration build and run ([#23797](https://github.com/twentyhq/twenty/pull/23797)) by @prastoin - Fix stray bracket after AI chat chips ([#23798](https://github.com/twentyhq/twenty/pull/23798)) by @bosiraphael - i18n - translations ([#23800](https://github.com/twentyhq/twenty/pull/23800)) by @github-actions - i18n - translations ([#23803](https://github.com/twentyhq/twenty/pull/23803)) by @github-actions - i18n - translations ([#23806](https://github.com/twentyhq/twenty/pull/23806)) by @github-actions - fix(workflow): make core-consistency drift check trustworthy for rollout ([#23807](https://github.com/twentyhq/twenty/pull/23807)) by @thomtrp - Fix workflow email body overflowing into the attachments section ([#23810](https://github.com/twentyhq/twenty/pull/23810)) by @ijreilly - Fix AI campaign editing: tool auth context in workers and live editor resync ([#23811](https://github.com/twentyhq/twenty/pull/23811)) by @FelixMalfait - Stop classifying Recall bot-detection timeouts as NOT_RECORDED in call-recorder ([#23812](https://github.com/twentyhq/twenty/pull/23812)) by @ehconitin - Bump vulnerable dependencies flagged by ECR image scanning ([#23813](https://github.com/twentyhq/twenty/pull/23813)) by @charlesBochet - Fix widget view save paths dropping relationTargetFieldMetadataId ([#23814](https://github.com/twentyhq/twenty/pull/23814)) by @FelixMalfait - Add nested relation Field widgets on record page layouts ([#23815](https://github.com/twentyhq/twenty/pull/23815)) by @FelixMalfait - Cancel drag activation when the drag source unmounts mid-gesture ([#23816](https://github.com/twentyhq/twenty/pull/23816)) by @FelixMalfait - Report a sending domain as pending while SES waits for the DKIM records ([#23818](https://github.com/twentyhq/twenty/pull/23818)) by @ijreilly - fix(front): apply advanced filter value and operand edits after a fresh page load ([#23819](https://github.com/twentyhq/twenty/pull/23819)) by @charlesBochet - Extend live update coverage: workflow draft updates and side-panel records ([#23830](https://github.com/twentyhq/twenty/pull/23830)) by @FelixMalfait - Make AI chat streaming render cost independent of message length ([#23831](https://github.com/twentyhq/twenty/pull/23831)) by @FelixMalfait - Fix client-side record matching for nested relation filters ([#23832](https://github.com/twentyhq/twenty/pull/23832)) by @FelixMalfait - i18n - translations ([#23834](https://github.com/twentyhq/twenty/pull/23834)) by @github-actions - chore: sync AI model catalog from models.dev ([#23839](https://github.com/twentyhq/twenty/pull/23839)) by @github-actions - Rename credits "Increase" button to "Manage" ([#23840](https://github.com/twentyhq/twenty/pull/23840)) by @FelixMalfait - refactor(front): move workflow run step logs into workflow-actions ([#23841](https://github.com/twentyhq/twenty/pull/23841)) by @thomtrp - Scope sessions and application authorizations to the workspace ([#23843](https://github.com/twentyhq/twenty/pull/23843)) by @FelixMalfait - i18n - translations ([#23844](https://github.com/twentyhq/twenty/pull/23844)) by @github-actions - i18n - translations ([#23845](https://github.com/twentyhq/twenty/pull/23845)) by @github-actions - Fix missing border below the last record table row ([#23846](https://github.com/twentyhq/twenty/pull/23846)) by @FelixMalfait - i18n - docs translations ([#23851](https://github.com/twentyhq/twenty/pull/23851)) by @github-actions - Revert AI chat chips to the [[kind:...:label]] syntax ([#23852](https://github.com/twentyhq/twenty/pull/23852)) by @bosiraphael - i18n - translations ([#23853](https://github.com/twentyhq/twenty/pull/23853)) by @github-actions - ci(pr-review): stop a skipped label dispatch from cancelling the open dispatch ([#23856](https://github.com/twentyhq/twenty/pull/23856)) by @charlesBochet - i18n - translations ([#23860](https://github.com/twentyhq/twenty/pull/23860)) by @github-actions </details> **Full Changelog**: https://github.com/twentyhq/twenty/compare/twenty/v2.27.0...twenty/v2.28.0