twenty/v2.29.0
✨ New features
- feat(twenty-slack): link records and format the assistant reply footer (#23539) by @abdulrahmancodes
- feat(slack): cache the Slack bot user id at connect time (#23726) by @abdulrahmancodes
- feat(workflow): repair orphan core workflow versions via upgrade command (#23739) by @thomtrp
- feat(server): export event-loop delay and workspace-cache recompute metrics (#23751) by @charlesBochet
- feat(slack): release the Slack team claim when the connection goes away (#23753) by @abdulrahmancodes
- feat(workflow): dispatch automated triggers from core behind a flag (#23775) by @thomtrp
- feat(server): instrument the local metadata cache and cap heavy providers by entry count (#23778) by @charlesBochet
- feat(slack): strip the bot's own mention anywhere in the request text (#23837) by @abdulrahmancodes
💅 Improvements & UX
- Make subdomain minimum length configurable via env var (#23209) by @ijreilly
- Enforce row-level permissions on joined relations (#23369) by @bosiraphael
- Add messages support to runAgent for multi-turn bot conversations (#23395) by @abdulrahmancodes
- Add a book-a-call onboarding step for qualified leads (#23521) by @bosiraphael
- Stop showing raw chunk load errors (#23571) by @bosiraphael
- Fix grouping a view that can no longer be changed or removed (#23619) by @abdulrahmancodes
- Fan out Fireflies backfill into batched jobs (#23622) by @ehconitin
- Feat/advanced text editor capability presets (#23657) by @ijreilly
- Add cookie-session integration test suite (#23715) by @prastoin
- Hide onboarding credits when billing is disabled (#23717) by @bosiraphael
- Update website release notes through 2.26 (#23736) by @Bonapara
- Run the people-data-labs spec suite in CI (#23743) by @bosiraphael
- Continue the workspace setup chat in the side panel when navigating away (#23744) by @bosiraphael
- Ignore expired invitations in invitation lookups (#23749) by @prastoin
- Add IS_FEATURE_FLAG_MANAGEMENT_ENABLED to unlock feature flag toggling outside cloud (#23750) by @FelixMalfait
- Dnd library migration fixes and changes (#23752) by @git-init-priyanshu
- Keep the token pair as a fallback after switching to cookie auth (#23755) by @FelixMalfait
- Add global admin panel chat list with onboarding filter and enriched transcript (#23757) by @bosiraphael
- Standardize dragged element feedback (#23772) by @Bonapara
- Restrict which workspace fields can be updated before activation (#23781) by @prastoin
- Refactor outbound email content compilation (#23782) by @FelixMalfait
- Make the call recorder transcript provider an application variable (#23789) by @ehconitin
- Add OpenTelemetry metrics to workspace migration build and run (#23797) by @prastoin
- Fix stray bracket after AI chat chips (#23798) by @bosiraphael
- Fix workflow email body overflowing into the attachments section (#23810) by @ijreilly
- Fix AI campaign editing: tool auth context in workers and live editor resync (#23811) by @FelixMalfait
- Stop classifying Recall bot-detection timeouts as NOT_RECORDED in call-recorder (#23812) by @ehconitin
- Bump vulnerable dependencies flagged by ECR image scanning (#23813) by @charlesBochet
- Fix widget view save paths dropping relationTargetFieldMetadataId (#23814) by @FelixMalfait
- Add nested relation Field widgets on record page layouts (#23815) by @FelixMalfait
- Cancel drag activation when the drag source unmounts mid-gesture (#23816) by @FelixMalfait
- Report a sending domain as pending while SES waits for the DKIM records (#23818) by @ijreilly
- Extend live update coverage: workflow draft updates and side-panel records (#23830) by @FelixMalfait
- Make AI chat streaming render cost independent of message length (#23831) by @FelixMalfait
- Fix client-side record matching for nested relation filters (#23832) by @FelixMalfait
- slack: answer empty requests and nudge lapsed threads (#23835) by @abdulrahmancodes
- Rename credits "Increase" button to "Manage" (#23840) by @FelixMalfait
- Scope sessions and application authorizations to the workspace (#23843) by @FelixMalfait
- Fix missing border below the last record table row (#23846) by @FelixMalfait
- Revert AI chat chips to the [[kind:...:label]] syntax (#23852) by @bosiraphael
- Add call recording transcript and summary widget types (#23864) by @ehconitin
- Escape JSON-LD payloads before inlining them in a script tag (#23865) by @FelixMalfait
- Strip template elements from the HTML block preview (#23866) by @FelixMalfait
- Clear to-one relation key instead of storing {id: null} in record workflow steps (#23869) by @thomtrp
- Revert "Make subdomain minimum length configurable via env var" (#23871) by @ijreilly
- Gate the workspace setup AI chat to workspace creators (#23881) by @bosiraphael
- Show only the record title in the mobile page header (#23902) by @FelixMalfait
🐛 Bug fixes
- fix: allow app-manifest RECORD_TABLE widgets to reference a view by universal identifier (#23634) by @thomtrp
- fix(twenty-front): expand HTML preview viewport in DocumentViewer (#23668) (#23676) by @Shinu-Cherian
- fix(front): show relation value chip (Me / record names) in advanced filters (#23718) by @charlesBochet
- fix(settings): unbreak the AI tools table and validate page-level graphql documents (#23731) by @FelixMalfait
- fix(front): only show Discard Draft when workflow has a published version (#23756) by @thomtrp
- fix(workflow): reject if-else branches with a dangling filterGroupId (#23758) by @blockgroot
- fix(twenty-front): stop field widget layout dropdown from crashing th… (#23784) by @FelixMalfait
- fix(twenty-server): compose email from the caller's own connected account (#23793) by @charlesBochet
- fix(twenty-server): stop the yarn-install Lambda from running out of memory (#23805) by @charlesBochet
- fix(workflow): make core-consistency drift check trustworthy for rollout (#23807) by @thomtrp
- fix(front): apply advanced filter value and operand edits after a fresh page load (#23819) by @charlesBochet
- fix(twenty-front): keep auto-select model preselection instead of discarding it (#23854) by @charlesBochet
- fix(front): run a single Monaco instance across the app (#23855) by @FelixMalfait
- fix(twenty-server): notify SSE subscribers when an update leaves their filtered view (#23858) by @charlesBochet
- fix(front): preserve currency decimals when opening the field editor (#23874) by @thomtrp
🔧 Developer & API
- webhook subscriptions error handling (#23707) by @neo773
- Accept a singleton or filter in the GraphQL filter walker (#23738) by @bosiraphael
- Proxy API routes through the vite dev server to keep local dev same-origin (#23779) by @prastoin
- Give AWS SDK clients an explicit request timeout (#23857) by @charlesBochet
- Self-host every font instead of loading them from Google (#23859) by @FelixMalfait
🏗️ Internal changes (3)
🎉 New contributors
- @blockgroot made their first contribution in #23758
Full changelog (98 PRs)
- Make subdomain minimum length configurable via env var (#23209) by @ijreilly
- Enforce row-level permissions on joined relations (#23369) by @bosiraphael
- Add messages support to runAgent for multi-turn bot conversations (#23395) by @abdulrahmancodes
- Add a book-a-call onboarding step for qualified leads (#23521) by @bosiraphael
- feat(twenty-slack): link records and format the assistant reply footer (#23539) by @abdulrahmancodes
- Stop showing raw chunk load errors (#23571) by @bosiraphael
- Fix grouping a view that can no longer be changed or removed (#23619) by @abdulrahmancodes
- Fan out Fireflies backfill into batched jobs (#23622) by @ehconitin
- fix: allow app-manifest RECORD_TABLE widgets to reference a view by universal identifier (#23634) by @thomtrp
- Feat/advanced text editor capability presets (#23657) by @ijreilly
- fix(twenty-front): expand HTML preview viewport in DocumentViewer (#23668) (#23676) by @Shinu-Cherian
- webhook subscriptions error handling (#23707) by @neo773
- Add cookie-session integration test suite (#23715) by @prastoin
- Hide onboarding credits when billing is disabled (#23717) by @bosiraphael
- fix(front): show relation value chip (Me / record names) in advanced filters (#23718) by @charlesBochet
- feat(slack): cache the Slack bot user id at connect time (#23726) by @abdulrahmancodes
- chore: bump version to 2.28.0 (#23730) by @twenty-pr
- fix(settings): unbreak the AI tools table and validate page-level graphql documents (#23731) by @FelixMalfait
- chore(codeowners): guard .claude, .mcp.json and CLAUDE.md (#23734) by @prastoin
- Update website release notes through 2.26 (#23736) by @Bonapara
- Accept a singleton or filter in the GraphQL filter walker (#23738) by @bosiraphael
- feat(workflow): repair orphan core workflow versions via upgrade command (#23739) by @thomtrp
- i18n - translations (#23740) by @github-actions
- Run the people-data-labs spec suite in CI (#23743) by @bosiraphael
- Continue the workspace setup chat in the side panel when navigating away (#23744) by @bosiraphael
- i18n - translations (#23746) by @github-actions
- i18n - translations (#23748) by @github-actions
- Ignore expired invitations in invitation lookups (#23749) by @prastoin
- Add IS_FEATURE_FLAG_MANAGEMENT_ENABLED to unlock feature flag toggling outside cloud (#23750) by @FelixMalfait
- feat(server): export event-loop delay and workspace-cache recompute metrics (#23751) by @charlesBochet
- Dnd library migration fixes and changes (#23752) by @git-init-priyanshu
- feat(slack): release the Slack team claim when the connection goes away (#23753) by @abdulrahmancodes
- Keep the token pair as a fallback after switching to cookie auth (#23755) by @FelixMalfait
- fix(front): only show Discard Draft when workflow has a published version (#23756) by @thomtrp
- Add global admin panel chat list with onboarding filter and enriched transcript (#23757) by @bosiraphael
- fix(workflow): reject if-else branches with a dangling filterGroupId (#23758) by @blockgroot
- Standardize dragged element feedback (#23772) by @Bonapara
- feat(workflow): dispatch automated triggers from core behind a flag (#23775) by @thomtrp
- feat(server): instrument the local metadata cache and cap heavy providers by entry count (#23778) by @charlesBochet
- Proxy API routes through the vite dev server to keep local dev same-origin (#23779) by @prastoin
- Restrict which workspace fields can be updated before activation (#23781) by @prastoin
- Refactor outbound email content compilation (#23782) by @FelixMalfait
- fix(twenty-front): stop field widget layout dropdown from crashing th… (#23784) by @FelixMalfait
- Make the call recorder transcript provider an application variable (#23789) by @ehconitin
- fix(twenty-server): compose email from the caller's own connected account (#23793) by @charlesBochet
- i18n - translations (#23794) by @github-actions
- i18n - docs translations (#23796) by @github-actions
- Add OpenTelemetry metrics to workspace migration build and run (#23797) by @prastoin
- Fix stray bracket after AI chat chips (#23798) by @bosiraphael
- i18n - translations (#23800) by @github-actions
- i18n - translations (#23803) by @github-actions
- fix(twenty-server): stop the yarn-install Lambda from running out of memory (#23805) by @charlesBochet
- i18n - translations (#23806) by @github-actions
- fix(workflow): make core-consistency drift check trustworthy for rollout (#23807) by @thomtrp
- Fix workflow email body overflowing into the attachments section (#23810) by @ijreilly
- Fix AI campaign editing: tool auth context in workers and live editor resync (#23811) by @FelixMalfait
- Stop classifying Recall bot-detection timeouts as NOT_RECORDED in call-recorder (#23812) by @ehconitin
- Bump vulnerable dependencies flagged by ECR image scanning (#23813) by @charlesBochet
- Fix widget view save paths dropping relationTargetFieldMetadataId (#23814) by @FelixMalfait
- Add nested relation Field widgets on record page layouts (#23815) by @FelixMalfait
- Cancel drag activation when the drag source unmounts mid-gesture (#23816) by @FelixMalfait
- Report a sending domain as pending while SES waits for the DKIM records (#23818) by @ijreilly
- fix(front): apply advanced filter value and operand edits after a fresh page load (#23819) by @charlesBochet
- chore: bump version to 2.29.0 (#23820) by @twenty-pr
- Extend live update coverage: workflow draft updates and side-panel records (#23830) by @FelixMalfait
- Make AI chat streaming render cost independent of message length (#23831) by @FelixMalfait
- Fix client-side record matching for nested relation filters (#23832) by @FelixMalfait
- i18n - translations (#23834) by @github-actions
- slack: answer empty requests and nudge lapsed threads (#23835) by @abdulrahmancodes
- feat(slack): strip the bot's own mention anywhere in the request text (#23837) by @abdulrahmancodes
- chore: sync AI model catalog from models.dev (#23839) by @github-actions
- Rename credits "Increase" button to "Manage" (#23840) by @FelixMalfait
- refactor(front): move workflow run step logs into workflow-actions (#23841) by @thomtrp
- Scope sessions and application authorizations to the workspace (#23843) by @FelixMalfait
- i18n - translations (#23844) by @github-actions
- i18n - translations (#23845) by @github-actions
- Fix missing border below the last record table row (#23846) by @FelixMalfait
- i18n - docs translations (#23851) by @github-actions
- Revert AI chat chips to the [[kind:...:label]] syntax (#23852) by @bosiraphael
- i18n - translations (#23853) by @github-actions
- fix(twenty-front): keep auto-select model preselection instead of discarding it (#23854) by @charlesBochet
- fix(front): run a single Monaco instance across the app (#23855) by @FelixMalfait
- ci(pr-review): stop a skipped label dispatch from cancelling the open dispatch (#23856) by @charlesBochet
- Give AWS SDK clients an explicit request timeout (#23857) by @charlesBochet
- fix(twenty-server): notify SSE subscribers when an update leaves their filtered view (#23858) by @charlesBochet
- Self-host every font instead of loading them from Google (#23859) by @FelixMalfait
- i18n - translations (#23860) by @github-actions
- Add call recording transcript and summary widget types (#23864) by @ehconitin
- Escape JSON-LD payloads before inlining them in a script tag (#23865) by @FelixMalfait
- Strip template elements from the HTML block preview (#23866) by @FelixMalfait
- Clear to-one relation key instead of storing {id: null} in record workflow steps (#23869) by @thomtrp
- Revert "Make subdomain minimum length configurable via env var" (#23871) by @ijreilly
- i18n - translations (#23873) by @github-actions
- fix(front): preserve currency decimals when opening the field editor (#23874) by @thomtrp
- i18n - docs translations (#23878) by @github-actions
- Gate the workspace setup AI chat to workspace creators (#23881) by @bosiraphael
- Show only the record title in the mobile page header (#23902) by @FelixMalfait
- i18n - translations (#23905) by @github-actions
Full Changelog: twenty/v2.27.0...twenty/v2.29.0