From 08fc038c3630fac0894b9a9a40d33d40f2a49b6f Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:12:59 +0000 Subject: [PATCH 01/83] Add v11.7 ESR documentation for May 15 release Updates documentation for the Mattermost v11.7 Extended Support Release and Desktop App v6.2 ESR, releasing May 15, 2026 with support through May 15, 2027. Co-authored-by: Amy Blais --- .../upgrade/important-upgrade-notes.rst | 2 ++ .../upgrade/open-source-components.rst | 2 ++ .../server/linux/deploy-rhel.rst | 2 +- .../server/linux/deploy-tar.rst | 2 +- .../software-hardware-requirements.rst | 4 +--- .../product-overview/deprecated-features.rst | 2 +- .../mattermost-desktop-releases.md | 1 + .../mattermost-server-releases.md | 1 + .../mattermost-v11-changelog.md | 18 ++++++++++++++++++ source/product-overview/release-policy.md | 2 +- 10 files changed, 29 insertions(+), 7 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 97f297a0cfe..b0e37e228d4 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -12,6 +12,8 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | If you're upgrading | Then... | | from a version earlier than... | | +====================================================+==================================================================================================================================================================+ +| v11.7 | There are no important upgrade notes in the v11.7 release. | ++----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/source/administration-guide/upgrade/open-source-components.rst b/source/administration-guide/upgrade/open-source-components.rst index 572b44ccdba..efa49506652 100644 --- a/source/administration-guide/upgrade/open-source-components.rst +++ b/source/administration-guide/upgrade/open-source-components.rst @@ -9,6 +9,7 @@ The following open source components are used to provide the full benefits of Ma Desktop -------- +- Mattermost Desktop v6.2.0 - `View Open Source Components `__. - Mattermost Desktop v6.1.0 - `View Open Source Components `__. - Mattermost Desktop v6.0.0 - `View Open Source Components `__. - Mattermost Desktop v5.13.0 - `View Open Source Components `__. @@ -138,6 +139,7 @@ Mobile Server ------------------------------ +- Mattermost Enterprise Edition v11.7.0 - `View Open Source Components `__. - Mattermost Enterprise Edition v11.6.0 - `View Open Source Components `__. - Mattermost Enterprise Edition v11.5.0 - `View Open Source Components `__. - Mattermost Enterprise Edition v11.4.0 - `View Open Source Components `__. diff --git a/source/deployment-guide/server/linux/deploy-rhel.rst b/source/deployment-guide/server/linux/deploy-rhel.rst index 8f3c838feff..56009e68f3e 100644 --- a/source/deployment-guide/server/linux/deploy-rhel.rst +++ b/source/deployment-guide/server/linux/deploy-rhel.rst @@ -50,7 +50,7 @@ In a terminal window, ssh onto the system that will host the Mattermost Server. .. code-block:: sh - wget https://releases.mattermost.com/10.11.14/mattermost-10.11.14-linux-amd64.tar.gz + wget https://releases.mattermost.com/11.7.0/mattermost-11.7.0-linux-amd64.tar.gz .. tab:: Older releases diff --git a/source/deployment-guide/server/linux/deploy-tar.rst b/source/deployment-guide/server/linux/deploy-tar.rst index fcb1eea115e..57b1722a5af 100644 --- a/source/deployment-guide/server/linux/deploy-tar.rst +++ b/source/deployment-guide/server/linux/deploy-tar.rst @@ -51,7 +51,7 @@ In a terminal window, ssh onto the system that will host the Mattermost Server. .. code-block:: sh - wget https://releases.mattermost.com/10.11.14/mattermost-10.11.14-linux-amd64.tar.gz + wget https://releases.mattermost.com/11.7.0/mattermost-11.7.0-linux-amd64.tar.gz .. tab:: Older releases diff --git a/source/deployment-guide/software-hardware-requirements.rst b/source/deployment-guide/software-hardware-requirements.rst index 939ac179a01..28c4978cf06 100644 --- a/source/deployment-guide/software-hardware-requirements.rst +++ b/source/deployment-guide/software-hardware-requirements.rst @@ -135,11 +135,9 @@ When a PostgreSQL version reaches its end of life (EOL), Mattermost will require +------------------------------------------------------------+------------------+--------------------------------+ | :ref:`v10.11 ESR `| 2025-8-15 | 13.x | +------------------------------------------------------------+------------------+--------------------------------+ -| v11.7 ESR ``*`` | 2026-5-15 | 14.x (EOL 2026-11-12) | +| :ref:`v11.7 ESR ` | 2026-5-15 | 14.x (EOL 2026-11-12) | +------------------------------------------------------------+------------------+--------------------------------+ -``*`` Forcasted release version and date. - Customers will have 9 months to plan, test, and upgrade their PostgreSQL version before the new requirement takes effect. This policy aims to provide clarity and transparency so you can align database upgrades with the Mattermost release schedule. Contact a `Mattermost Expert `_. to discuss your options. Database Search limitations diff --git a/source/product-overview/deprecated-features.rst b/source/product-overview/deprecated-features.rst index 403bd85b75f..8fb9f1e6dca 100644 --- a/source/product-overview/deprecated-features.rst +++ b/source/product-overview/deprecated-features.rst @@ -6,7 +6,7 @@ This page describes features that are removed from support for Mattermost, or wi Upcoming deprecations ----------------------- -- There are no planned deprecations at this time. +- Support for Mattermost Server v10.11 `Extended Support Release `__ ends August 15, 2026. We strongly recommend upgrading to `Mattermost Server v11.7 `__ or later before that date. Removed features by Mattermost version ---------------------------------------- diff --git a/source/product-overview/mattermost-desktop-releases.md b/source/product-overview/mattermost-desktop-releases.md index 8247e039336..748f5df58d7 100644 --- a/source/product-overview/mattermost-desktop-releases.md +++ b/source/product-overview/mattermost-desktop-releases.md @@ -18,6 +18,7 @@ Mattermost releases a new desktop app version every 4 months, in February, May, | **Release** | **Support** | **Compatible with** | |:---|:---|:---| +| v6.2 [Download](https://github.com/mattermost/desktop/releases/tag/v6.2.0) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v6.2.0/sbom-desktop-v6.2.0.json) | Released: 2026-05-15
Support Ends: 2027-05-15 {ref}`EXTENDED ` | {ref}`v11.7 `, {ref}`v11.6 `, {ref}`v11.5 `, {ref}`v11.4 `, {ref}`v11.3 `, {ref}`v11.2 ` | | v6.1 [Download](https://github.com/mattermost/desktop/releases/tag/v6.1.1) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v6.1.1/sbom-desktop-v6.1.1.json) | Released: 2026-03-02
Support Ends: 2026-05-15 | {ref}`v11.6 `, {ref}`v11.5 `, {ref}`v11.4 `, {ref}`v11.3 `, {ref}`v11.2 `, {ref}`v10.11 ` | | v6.0 [Download](https://github.com/mattermost/desktop/releases/tag/v6.0.4) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v6.0.4/sbom-desktop-v6.0.4.json) | Released: 2025-11-14
Support Ends: 2026-03-15 | {ref}`v11.4 `, {ref}`v11.3 `, {ref}`v11.2 `, {ref}`v11.1 `, {ref}`v11.0 `, {ref}`v10.12 `, {ref}`v10.11 ` | | v5.13 [Download](https://github.com/mattermost/desktop/releases/tag/v5.13.5) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v5.13.5/sbom-desktop-v5.13.5.json) | Released: 2025-08-15
Support Ends: 2026-08-15 {ref}`EXTENDED ` | {ref}`v11.0 `, {ref}`v10.12 `, {ref}`v10.11 `, {ref}`v10.10 `, {ref}`v10.9 `, {ref}`v10.5 ` | diff --git a/source/product-overview/mattermost-server-releases.md b/source/product-overview/mattermost-server-releases.md index 3557c6595e3..165d64aeb8a 100644 --- a/source/product-overview/mattermost-server-releases.md +++ b/source/product-overview/mattermost-server-releases.md @@ -19,6 +19,7 @@ Mattermost releases a new server version on the 16th of each month in [binary fo | **Release** | **Released on** | **Support ends** | |:---|:---|:---| +| v11.7 [Download](https://releases.mattermost.com/11.7.0/mattermost-11.7.0-linux-amd64.tar.gz) \| {ref}`Changelog ` \|
SBOM
| 2026-05-15 | 2027-05-15 {ref}`EXTENDED ` | | v11.6 [Download](https://releases.mattermost.com/11.6.0/mattermost-11.6.0-linux-amd64.tar.gz) \| {ref}`Changelog ` \|
SBOM
| 2026-04-16 | 2026-07-15 | | v11.5 [Download](https://releases.mattermost.com/11.5.2/mattermost-11.5.2-linux-amd64.tar.gz) \| {ref}`Changelog ` \|
SBOM
| 2026-03-16 | 2026-06-15 | | v11.4 [Download](https://releases.mattermost.com/11.4.4/mattermost-11.4.4-linux-amd64.tar.gz) \| {ref}`Changelog ` \|
SBOM
| 2026-02-16 | 2026-05-15 | diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index eb2a01b1c12..a0f484baae8 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -9,6 +9,24 @@ ```{include} common-esr-support-upgrade.md ``` +(release-v11.7-extended-support-release)= +## Release v11.7 - [Extended Support Release](https://docs.mattermost.com/product-overview/release-policy.html#release-types) + +- **11.7.0, released 2026-05-15** + - Original 11.7.0 release. + +```{Important} +If you upgrade from a release earlier than v11.6, please read the other [Important Upgrade Notes](https://docs.mattermost.com/administration-guide/upgrade/important-upgrade-notes.html). In case of an upgrade failure, please check the [Downgrade Guide](https://docs.mattermost.com/administration-guide/upgrade/downgrading-mattermost-server.html) and the [Recovery Guide](https://docs.mattermost.com/deployment-guide/backup-disaster-recovery.html) for rollback steps and interim mitigation strategy. +``` + +### Improvements + +See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-available/) on the highlights in our latest release. + +### Bug Fixes + +### Contributors + (release-v11.6-feature-release)= ## Release v11.6 - [Feature Release](https://docs.mattermost.com/product-overview/release-policy.html#release-types) diff --git a/source/product-overview/release-policy.md b/source/product-overview/release-policy.md index a25819b2f17..d777194d3a4 100644 --- a/source/product-overview/release-policy.md +++ b/source/product-overview/release-policy.md @@ -83,7 +83,7 @@ The following table lists all releases across Mattermost v7.0, v8.0, and v9.0, i ```{Important} - If you're on a legacy Mattermost release prior to v7.1, in order to take advantage of newer Mattermost releases, you must upgrade to [v7.1 ESR](https://docs.mattermost.com/product-overview/unsupported-legacy-releases.html#release-v7-1-extended-support-release) at a minimum. -- Upgrading from one Extended Support Release (ESR) to the next ESR (``major`` -> ``major_next``) is fully supported and tested. However, upgrading across multiple ESR versions (``major`` to ``major+2``) is supported, but not tested. If you plan to skip versions, we strongly recommend upgrading only between ESR releases. For example, if you're upgrading from v8.1 ESR, upgrade to the v9.5 ESR or the v9.11 ESR before attempting to upgrade to the [v10.5 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-5-extended-support-release) or the [v10.11 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-11-extended-support-release). +- Upgrading from one Extended Support Release (ESR) to the next ESR (``major`` -> ``major_next``) is fully supported and tested. However, upgrading across multiple ESR versions (``major`` to ``major+2``) is supported, but not tested. If you plan to skip versions, we strongly recommend upgrading only between ESR releases. For example, if you're upgrading from v8.1 ESR, upgrade to the v9.5 ESR or the v9.11 ESR before attempting to upgrade to the [v10.5 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-5-extended-support-release) or the [v10.11 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-11-extended-support-release) or the [v11.7 ESR](https://docs.mattermost.com/product-overview/mattermost-v11-changelog.html#release-v11-7-extended-support-release). ``` | **Release** | **Release Type** | **Support ended** | From 35b417bf5f52d9458e00a36482fb59ac8f409cf2 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 14:51:40 +0300 Subject: [PATCH 02/83] Update release-policy.md --- source/product-overview/release-policy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/release-policy.md b/source/product-overview/release-policy.md index d777194d3a4..ef3af75a390 100644 --- a/source/product-overview/release-policy.md +++ b/source/product-overview/release-policy.md @@ -59,6 +59,7 @@ gantt v11.5 :active, 2026-03-16, 2026-06-15 v11.6 :active, 2026-04-16, 2026-07-15 v11.7 & Desktop App v6.2 Extended Support :crit, 2026-05-16, 2027-05-15 + v11.8 :active, 2026-06-16, 2026-09-15 ``` **Timeline Legend:** From 638e5495d9a36a2886233145aa5b7d09f8b90857 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 14:52:13 +0300 Subject: [PATCH 03/83] Update ui-ada-changelog.rst --- source/product-overview/ui-ada-changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/product-overview/ui-ada-changelog.rst b/source/product-overview/ui-ada-changelog.rst index 2a8ae592246..e45e7bbd613 100644 --- a/source/product-overview/ui-ada-changelog.rst +++ b/source/product-overview/ui-ada-changelog.rst @@ -12,6 +12,8 @@ Changelog * - Version - Change Description + * - v11.7 + - Change Description * - v11.6 - (UI) Added support for Default Agent in suggestions and integrated Agents into the App Bar. * - v11.6 From 458bab09684fcd18601dca2bb6c5f1afcae1fb15 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:15:26 +0300 Subject: [PATCH 04/83] Update mattermost-v11-changelog.md --- .../mattermost-v11-changelog.md | 106 +++++++++++++++++- 1 file changed, 104 insertions(+), 2 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index a0f484baae8..f8ed7b6ab54 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -12,8 +12,25 @@ (release-v11.7-extended-support-release)= ## Release v11.7 - [Extended Support Release](https://docs.mattermost.com/product-overview/release-policy.html#release-types) -- **11.7.0, released 2026-05-15** - - Original 11.7.0 release. +**Release day 2026-05-15** + +```{Attention} +**Breaking Changes** +FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users will no longer be valid and require a password reset. Non-FIPS builds are unaffected. +``` + +#### Database Schema Changes + - + +#### config.json +New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. + - **Changes to Enterprise Advanced plan:** + - Under ``PrivacySettings`` in ``config.json``, added ``UseAnonymousURLs`` configuration setting to support a new feature of creating teams and channels using anonymous URLs so the channel and team name are not revealed in the URL. + - **Changes to Enterprise plans:** + - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require FIPS builds a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. + - **Changes to all plans:** + - Under ``DatabaseSettings`` in ``config.json``, added ``AnalyticsQueryTimeout`` configuration setting for use when running long analytics queries in the background. + - Under ``TeamSettings`` in ``config.json``, added ``EnableManagedChannelCategories`` configuration setting to enable managed channel categories for Channel Admins to enforce sidebar organization across teams. ```{Important} If you upgrade from a release earlier than v11.6, please read the other [Important Upgrade Notes](https://docs.mattermost.com/administration-guide/upgrade/important-upgrade-notes.html). In case of an upgrade failure, please check the [Downgrade Guide](https://docs.mattermost.com/administration-guide/upgrade/downgrading-mattermost-server.html) and the [Recovery Guide](https://docs.mattermost.com/deployment-guide/backup-disaster-recovery.html) for rollback steps and interim mitigation strategy. @@ -23,9 +40,94 @@ If you upgrade from a release earlier than v11.6, please read the other [Importa See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-available/) on the highlights in our latest release. +#### User Interface (UI) + - Pre-packaged Boards plugin version [v9.2.4](https://github.com/mattermost/mattermost-plugin-boards/releases/tag/v9.2.4). + - Pre-packaged GitHub plugin version [v2.7.0](https://github.com/mattermost/mattermost-plugin-github/releases/tag/v2.7.0). + - Pre-packaged Jira plugin version [v4.6.0](https://github.com/mattermost/mattermost-plugin-jira/releases/tag/v4.6.0). + - Pre-packaged Zoom plugin version [v1.13.0](https://github.com/mattermost/mattermost-plugin-zoom/releases/tag/v1.13.0). + - Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. + - Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. + - Channel membership changes are now reliably synchronized between connected workspaces, even when a remote server is temporarily offline. Previously, membership removals could be missed during outages. + - Added an "Open in new tab" button to the **Product Switcher** menu. + - Substring matching is now allowed when searching channel members in the member sub-panel in a channel. + - Improved accessibility of thread list menus. + - Improved autocomplete while typing in Korean and using Firefox. + - Updated license renewal and expiry notification emails with refreshed branding, copy, and layout. + - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. + - Dropped support for JS features required by browsers over three years old. + - Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. + - Add the ability to handle from which remotes a channel is shared from the channel settings user interface. + +#### Administration + - Removed direct dependency on ``blang/semver/v4``. + - Updated dependency versions for server and public services. + - Added managed channel categories for Channel Admins to enforce sidebar organization across teams. + - Migrated access control policies from v0.2 to v0.3, replacing the wildcard action with explicit action types to support multi-action policies. + - Added team-level ABAC membership policies, allowing Team Admins to create and manage attribute-based access policies for private channels within their team directly from a new Membership Policies tab in the Team Settings Modal. + - Added permission policies. + - Added support for Elasticsearch v9 alongside v8. Elasticsearch v7 is no longer supported. + - Fail-fast requests are now done to the Elasticsearch/Opensearch cluster when it is down. + - Added a new ``mattermost_search_engine_status`` metric that reports whether the Elasticsearch/Opensearch cluster is healthy (value = 1) or not (value = 0). If the cluster is not enabled, its value is reported as 1. + - Added logic to monitor the health of Elasticsearch/Opensearch clusters to implement a retry mechanism. + - Updated URL validation in integration actions to make them more secure. + - Added a new built-in delegated administration role: Shared Channel Manager. This role allows System Admins to delegate Connected Workspaces management to specific users without granting full system administration access. + - Shared Channels related errors now appear in the main log file by default. + - Added a new Integrated Boards feature flag. + - Added protected fields and field specific permissions to the property fields. + - Added a ``--workers`` flag to the mmctl import process to control concurrency. + - Added support for listing user roles through mmctl. + - Added new permissions to back Self Service Agent Creation in Mattermost Agents: +``manage_own_agent``: Allows users to create and manage their own agents. +``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. + +#### Plugins + - Added a pluggable AI Actions Menu to the text editor formatting bar with cascading submenus. Plugins can register custom action items via ``registerAIActionMenuItemComponent``. The existing Rewrite feature is now accessed through this menu. + - Improved response handling for outgoing webhook requests. + ### Bug Fixes + - Fixed a crash when native app download links were malformed. + - Fixed an issue where premade themes were hidden when custom themes were disabled. + - Fixed an issue where importing files with Japanese dakuten/handakuten characters (e.g., ガ, パ, べ) failed on macOS due to Unicode normalization mismatch (NFC/NFD). + - Fixed an issue that caused profile pictures to be incorrectly rotated on upload, as their EXIF rotation tag was ignored. + - Fixed a nil pointer dereference in ``UpdateUser`` when the user update operation returned an unexpected nil result (Sentry VF, 14 events). + - Fixed an issue with the date picker not being able to overflow interactive dialogs properly. + - Fixed an issue where fetching a newly created channel could fail with "channel not found" on deployments with database read replicas. + - Fixed visual glitches with misaligned text and icon in image attachments in compact mode. + - Fixed an issue where shared channels would intermittently display "Shared with trusted organizations" instead of showing the actual connection name. + - Fixed an issue where attachment-only posts would get sent on **enter** even when set to only send on **ctrl/cmd + enter**. + - Fixed styling issues in the **Browse Channels** modal when there were long channel purpose values present. + - Fixed an issue where shared channel invites were silently dropped in High Availability clusters when the API request landed on a non-leader node. + - Fixed an issue where message attachment titles would render encoded special characters as-is. + - Fixed an issue with the **Invite to Team** modal ignoring the most recent key pressed when suggesting users. + - Fixed an issue where a "Don't have an account" link showed up on the login page even when signups were disabled. + - Fixed issues with interactive dialogs - dynamic select lookups, radio values, and field refresh. + - Fixed an issue where desktop notifications still triggered for a channel or thread that was focused in a popout window. + - Fixed an issue where the ``remote_id`` field on user objects could be set via the user patch API. + - Fixed an issue where keyboard navigation didn't work in the channel header and sidebar channel menus. + - Fixed an issue where the Workspace Optimization page appeared in the System Console on Mattermost Cloud workspaces. + - Fixed an issue where in compact mode, file attachment's name didn't display correctly when editing a post with attachments. + - Fixed an issue where the textbox would appear focused but not accept keyboard shortcuts after editing a post. + +### API Changes + - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. + - Added new API endpoints for the Property System Architecture v2. + - Plugin API: Added new pre-hooks for channel membership, team membership, and channel archiving. Plugins can now intercept operations before they are persisted using three new hooks: ``ChannelMemberWillBeAdded`` (modify or reject a channel member addition), ``TeamMemberWillBeAdded`` (modify or reject a team member addition), and ``ChannelWillBeArchived`` (reject a channel archive). + - Added new API endpoints ``PUT /api/v4/system/e2e/ai_bridge``, ``GET /api/v4/system/e2e/ai_bridge``, and ``DELETE /api/v4/system/e2e/ai_bridge`` for E2E testing of AI features. These endpoints are only accessible when ``EnableTesting`` is true. Refactored internal AI-related logic to use a new ``AgentsBridge`` interface for improved testability. Added new DTOs in ``server/public/model`` for AI bridge information and test helpers. + - Added a new API endpoint ``PUT /api/v4/channels/{channel_id}/members`` that sets the complete membership of a channel in a single call. The endpoint accepts a JSON object with ``members`` (desired user IDs) and an optional ``channel_admins`` (user IDs to designate as channel admins). The server computes the diff against current membership, adds or removes users as needed, and reconciles admin roles. When ``channel_admins`` is omitted, existing admin roles are preserved. Results are streamed back as NDJSON for progress tracking. Requires system admin permissions. + - Added three new plugin APIs for shared channel sync: ``SendSharedChannelSyncMsg``, ``SendSharedChannelAttachmentSyncMsg``, and ``SendSharedChannelProfileImageSyncMsg``. These allow plugins acting as shared channel remotes to sync posts, reactions, users, file attachments, and profile images into Mattermost, complementing the existing outbound ``OnSharedChannels`` hooks. + +### Websocket Event Changes + - Added websocket events for Property System Architecture v2. + +### Audit Log Event Changes + - Added new audit logs ``AuditEventCreateView``, ``AuditEventGetView``, ``AuditEventUpdateView``, ``AuditEventDeleteView``, ``AuditEventListViewsForChannel``, ``AuditEventUpdateViewSortOrder``, ``AuditEventGetPostsForView``, ``AuditEventCreatePropertyField``, ``AuditEventDeletePropertyField``, ``AuditEventGetPropertyFields``, ``AuditEventPatchPropertyField``, ``AuditEventGetPropertyValues``, and ``AuditEventPatchPropertyValues`` for Integrated Boards. + - Added a new audit log ``AuditEventSetChannelMembers`` for channel memberships. + +### Go Version + - v11.7 is built with Go ``v1.25.8``. ### Contributors + - (release-v11.6-feature-release)= ## Release v11.6 - [Feature Release](https://docs.mattermost.com/product-overview/release-policy.html#release-types) From 97a99743314e38811493aa5701f8cb25484c713d Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:20:49 +0300 Subject: [PATCH 05/83] Update ui-ada-changelog.rst --- source/product-overview/ui-ada-changelog.rst | 24 +++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/source/product-overview/ui-ada-changelog.rst b/source/product-overview/ui-ada-changelog.rst index e45e7bbd613..73a0b10abc9 100644 --- a/source/product-overview/ui-ada-changelog.rst +++ b/source/product-overview/ui-ada-changelog.rst @@ -13,7 +13,29 @@ Changelog * - Version - Change Description * - v11.7 - - Change Description + - (UI) Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. + * - v11.7 + - (UI) Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. + * - v11.7 + - (UI) Channel membership changes are now reliably synchronized between connected workspaces, even when a remote server is temporarily offline. Previously, membership removals could be missed during outages. + * - v11.7 + - (UI) Added an "Open in new tab" button to the **Product Switcher** menu. + * - v11.7 + - (UI) Substring matching is now allowed when searching channel members in the member sub-panel in a channel. + * - v11.7 + - (Accessibility) Improved accessibility of thread list menus. + * - v11.7 + - (UI) Improved autocomplete while typing in Korean and using Firefox. + * - v11.7 + - (UI) Updated license renewal and expiry notification emails with refreshed branding, copy, and layout. + * - v11.7 + - (UI) Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. + * - v11.7 + - (UI) Dropped support for JS features required by browsers over three years old. + * - v11.7 + - (UI) Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. + * - v11.7 + - (UI) Added the ability to handle from which remotes a channel is shared from the channel settings user interface. * - v11.6 - (UI) Added support for Default Agent in suggestions and integrated Agents into the App Bar. * - v11.6 From 6b487595bf0260af410a7352eee77d1fd426cc42 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:20:52 +0300 Subject: [PATCH 06/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index f8ed7b6ab54..ecfb7d20ced 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -56,7 +56,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. - Dropped support for JS features required by browsers over three years old. - Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. - - Add the ability to handle from which remotes a channel is shared from the channel settings user interface. + - Added the ability to handle from which remotes a channel is shared from the channel settings user interface. #### Administration - Removed direct dependency on ``blang/semver/v4``. From 7d521b8c1ac3417bdd5a5280d76c4e0c279da0c0 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:22:53 +0300 Subject: [PATCH 07/83] Update important-upgrade-notes.rst --- .../administration-guide/upgrade/important-upgrade-notes.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index b0e37e228d4..ff757b3896c 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -12,7 +12,8 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | If you're upgrading | Then... | | from a version earlier than... | | +====================================================+==================================================================================================================================================================+ -| v11.7 | There are no important upgrade notes in the v11.7 release. | +| v11.7 | FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users | +| | lwill no longer be valid and require a password reset. Non-FIPS builds are unaffected. | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 3e597c6ed08ad042688bbdadfd9e28ebcef246d0 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:23:13 +0300 Subject: [PATCH 08/83] Update open-source-components.rst --- source/administration-guide/upgrade/open-source-components.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/administration-guide/upgrade/open-source-components.rst b/source/administration-guide/upgrade/open-source-components.rst index efa49506652..d4ff8411740 100644 --- a/source/administration-guide/upgrade/open-source-components.rst +++ b/source/administration-guide/upgrade/open-source-components.rst @@ -39,6 +39,7 @@ Desktop Mobile ------- +- Mattermost Mobile v2.40.0 - `View Open Source Components `__. - Mattermost Mobile v2.39.0 - `View Open Source Components `__. - Mattermost Mobile v2.38.0 - `View Open Source Components `__. - Mattermost Mobile v2.37.0 - `View Open Source Components `__. From 5d217bacd541b21b9c1e1894367d4d20547e0b1a Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:23:35 +0300 Subject: [PATCH 09/83] Update deprecated-features.rst --- source/product-overview/deprecated-features.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/deprecated-features.rst b/source/product-overview/deprecated-features.rst index 8fb9f1e6dca..bcd40e807b3 100644 --- a/source/product-overview/deprecated-features.rst +++ b/source/product-overview/deprecated-features.rst @@ -6,7 +6,7 @@ This page describes features that are removed from support for Mattermost, or wi Upcoming deprecations ----------------------- -- Support for Mattermost Server v10.11 `Extended Support Release `__ ends August 15, 2026. We strongly recommend upgrading to `Mattermost Server v11.7 `__ or later before that date. +There are no planned deprecations at this time. Removed features by Mattermost version ---------------------------------------- From d2d1f763d1deb4d441fd3bdfc011b0e62c309c3e Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:23:49 +0300 Subject: [PATCH 10/83] Update mattermost-desktop-releases.md --- source/product-overview/mattermost-desktop-releases.md | 1 - 1 file changed, 1 deletion(-) diff --git a/source/product-overview/mattermost-desktop-releases.md b/source/product-overview/mattermost-desktop-releases.md index 748f5df58d7..8247e039336 100644 --- a/source/product-overview/mattermost-desktop-releases.md +++ b/source/product-overview/mattermost-desktop-releases.md @@ -18,7 +18,6 @@ Mattermost releases a new desktop app version every 4 months, in February, May, | **Release** | **Support** | **Compatible with** | |:---|:---|:---| -| v6.2 [Download](https://github.com/mattermost/desktop/releases/tag/v6.2.0) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v6.2.0/sbom-desktop-v6.2.0.json) | Released: 2026-05-15
Support Ends: 2027-05-15 {ref}`EXTENDED ` | {ref}`v11.7 `, {ref}`v11.6 `, {ref}`v11.5 `, {ref}`v11.4 `, {ref}`v11.3 `, {ref}`v11.2 ` | | v6.1 [Download](https://github.com/mattermost/desktop/releases/tag/v6.1.1) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v6.1.1/sbom-desktop-v6.1.1.json) | Released: 2026-03-02
Support Ends: 2026-05-15 | {ref}`v11.6 `, {ref}`v11.5 `, {ref}`v11.4 `, {ref}`v11.3 `, {ref}`v11.2 `, {ref}`v10.11 ` | | v6.0 [Download](https://github.com/mattermost/desktop/releases/tag/v6.0.4) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v6.0.4/sbom-desktop-v6.0.4.json) | Released: 2025-11-14
Support Ends: 2026-03-15 | {ref}`v11.4 `, {ref}`v11.3 `, {ref}`v11.2 `, {ref}`v11.1 `, {ref}`v11.0 `, {ref}`v10.12 `, {ref}`v10.11 ` | | v5.13 [Download](https://github.com/mattermost/desktop/releases/tag/v5.13.5) \| {ref}`Changelog ` \| [SBOM download](https://github.com/mattermost/desktop/releases/download/v5.13.5/sbom-desktop-v5.13.5.json) | Released: 2025-08-15
Support Ends: 2026-08-15 {ref}`EXTENDED ` | {ref}`v11.0 `, {ref}`v10.12 `, {ref}`v10.11 `, {ref}`v10.10 `, {ref}`v10.9 `, {ref}`v10.5 ` | From 12a35cced5db137367e91f6afc295ce3bb878717 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:24:15 +0300 Subject: [PATCH 11/83] Update deprecated-features.rst --- source/product-overview/deprecated-features.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/deprecated-features.rst b/source/product-overview/deprecated-features.rst index bcd40e807b3..403bd85b75f 100644 --- a/source/product-overview/deprecated-features.rst +++ b/source/product-overview/deprecated-features.rst @@ -6,7 +6,7 @@ This page describes features that are removed from support for Mattermost, or wi Upcoming deprecations ----------------------- -There are no planned deprecations at this time. +- There are no planned deprecations at this time. Removed features by Mattermost version ---------------------------------------- From 2c3b6941842fbe4ef610380fb75ecc46b3db966e Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:02:11 +0300 Subject: [PATCH 12/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index ecfb7d20ced..fc743d00209 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -32,6 +32,9 @@ New setting options were added to ``config.json``. Below is a list of the additi - Under ``DatabaseSettings`` in ``config.json``, added ``AnalyticsQueryTimeout`` configuration setting for use when running long analytics queries in the background. - Under ``TeamSettings`` in ``config.json``, added ``EnableManagedChannelCategories`` configuration setting to enable managed channel categories for Channel Admins to enforce sidebar organization across teams. +### Compatibility + - Updated minimum Edge and Chrome versions to 146+. + ```{Important} If you upgrade from a release earlier than v11.6, please read the other [Important Upgrade Notes](https://docs.mattermost.com/administration-guide/upgrade/important-upgrade-notes.html). In case of an upgrade failure, please check the [Downgrade Guide](https://docs.mattermost.com/administration-guide/upgrade/downgrading-mattermost-server.html) and the [Recovery Guide](https://docs.mattermost.com/deployment-guide/backup-disaster-recovery.html) for rollback steps and interim mitigation strategy. ``` From 056bcfb91ad45ad767f05bb2f6bd3816f1b2d473 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:02:57 +0300 Subject: [PATCH 13/83] Update software-hardware-requirements.rst --- .../deployment-guide/software-hardware-requirements.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/deployment-guide/software-hardware-requirements.rst b/source/deployment-guide/software-hardware-requirements.rst index 28c4978cf06..f266e0cdaed 100644 --- a/source/deployment-guide/software-hardware-requirements.rst +++ b/source/deployment-guide/software-hardware-requirements.rst @@ -50,10 +50,10 @@ PC web .. csv-table:: :header: "Browser", "Self-Hosted Technical Requirement", "Cloud Technical Requirement" - "Chrome", "v144+", "v144+" + "Chrome", "v146+", "v146+" "Firefox", "v140+", "v140+" "Safari", "v26.2+", "v26.2+" - "Edge", "v144+", "v144+" + "Edge", "v146+", "v146+" `*` Internet Explorer (IE11) is no longer supported. We recommend using the `Mattermost desktop app `_ or another supported browser. See `this forum post `__ to learn more. @@ -78,8 +78,8 @@ Mobile web .. csv-table:: :header: "Browser", "Technical Requirement" - "iOS", "iOS 16.0+ with Safari 26.2+ or Chrome 144+" - "Android", "Android 7+ with Chrome 144+" + "iOS", "iOS 16.0+ with Safari 26.2+ or Chrome 146+" + "Android", "Android 7+ with Chrome 146+" Email client ^^^^^^^^^^^^ From d51de1a8b747601776b8d0d39f7caf1241d793c9 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:07:17 +0300 Subject: [PATCH 14/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index fc743d00209..efc5089c232 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -54,6 +54,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added an "Open in new tab" button to the **Product Switcher** menu. - Substring matching is now allowed when searching channel members in the member sub-panel in a channel. - Improved accessibility of thread list menus. + - Channel banners are now shown in thread views. - Improved autocomplete while typing in Korean and using Firefox. - Updated license renewal and expiry notification emails with refreshed branding, copy, and layout. - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. From b876dd973ba31a9c1901727392b3dddc07098036 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:07:46 +0300 Subject: [PATCH 15/83] Update ui-ada-changelog.rst --- source/product-overview/ui-ada-changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/product-overview/ui-ada-changelog.rst b/source/product-overview/ui-ada-changelog.rst index 73a0b10abc9..887da36cf63 100644 --- a/source/product-overview/ui-ada-changelog.rst +++ b/source/product-overview/ui-ada-changelog.rst @@ -36,6 +36,8 @@ Changelog - (UI) Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. * - v11.7 - (UI) Added the ability to handle from which remotes a channel is shared from the channel settings user interface. + * - v11.7 + - (UI) Channel banners are now shown in thread views. * - v11.6 - (UI) Added support for Default Agent in suggestions and integrated Agents into the App Bar. * - v11.6 From baab7f2130b9f6d11cf4bbf42c569541254b5d07 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 09:16:36 +0300 Subject: [PATCH 16/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index efc5089c232..8e92547a8c4 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -48,6 +48,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Pre-packaged GitHub plugin version [v2.7.0](https://github.com/mattermost/mattermost-plugin-github/releases/tag/v2.7.0). - Pre-packaged Jira plugin version [v4.6.0](https://github.com/mattermost/mattermost-plugin-jira/releases/tag/v4.6.0). - Pre-packaged Zoom plugin version [v1.13.0](https://github.com/mattermost/mattermost-plugin-zoom/releases/tag/v1.13.0). + - Pre-packaged Agents plugin version [v2.0.0](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.0). - Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. - Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. - Channel membership changes are now reliably synchronized between connected workspaces, even when a remote server is temporarily offline. Previously, membership removals could be missed during outages. From 7eafd0f0433e3af4aee2bc84136f9c6afadb8664 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 13:31:11 +0300 Subject: [PATCH 17/83] Update release-policy.md --- source/product-overview/release-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/release-policy.md b/source/product-overview/release-policy.md index ef3af75a390..916746df529 100644 --- a/source/product-overview/release-policy.md +++ b/source/product-overview/release-policy.md @@ -84,7 +84,7 @@ The following table lists all releases across Mattermost v7.0, v8.0, and v9.0, i ```{Important} - If you're on a legacy Mattermost release prior to v7.1, in order to take advantage of newer Mattermost releases, you must upgrade to [v7.1 ESR](https://docs.mattermost.com/product-overview/unsupported-legacy-releases.html#release-v7-1-extended-support-release) at a minimum. -- Upgrading from one Extended Support Release (ESR) to the next ESR (``major`` -> ``major_next``) is fully supported and tested. However, upgrading across multiple ESR versions (``major`` to ``major+2``) is supported, but not tested. If you plan to skip versions, we strongly recommend upgrading only between ESR releases. For example, if you're upgrading from v8.1 ESR, upgrade to the v9.5 ESR or the v9.11 ESR before attempting to upgrade to the [v10.5 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-5-extended-support-release) or the [v10.11 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-11-extended-support-release) or the [v11.7 ESR](https://docs.mattermost.com/product-overview/mattermost-v11-changelog.html#release-v11-7-extended-support-release). +- Upgrading from one Extended Support Release (ESR) to the next ESR (``major`` -> ``major_next``) is fully supported and tested. However, upgrading across multiple ESR versions (``major`` to ``major+2``) is supported, but not tested. If you plan to skip versions, we strongly recommend upgrading only between ESR releases. For example, if you're upgrading from v8.1 ESR, upgrade to the v9.5 ESR or the v9.11 ESR before attempting to upgrade to the [v10.11 ESR](https://docs.mattermost.com/product-overview/mattermost-v10-changelog.html#release-v10-11-extended-support-release) or the [v11.7 ESR](https://docs.mattermost.com/product-overview/mattermost-v11-changelog.html#release-v11-7-extended-support-release). ``` | **Release** | **Release Type** | **Support ended** | From 40f84c008596c45a85cc96f08f16b5685e31492d Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 13:32:15 +0300 Subject: [PATCH 18/83] Update software-hardware-requirements.rst --- source/deployment-guide/software-hardware-requirements.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/deployment-guide/software-hardware-requirements.rst b/source/deployment-guide/software-hardware-requirements.rst index f266e0cdaed..39e477eb467 100644 --- a/source/deployment-guide/software-hardware-requirements.rst +++ b/source/deployment-guide/software-hardware-requirements.rst @@ -135,7 +135,7 @@ When a PostgreSQL version reaches its end of life (EOL), Mattermost will require +------------------------------------------------------------+------------------+--------------------------------+ | :ref:`v10.11 ESR `| 2025-8-15 | 13.x | +------------------------------------------------------------+------------------+--------------------------------+ -| :ref:`v11.7 ESR ` | 2026-5-15 | 14.x (EOL 2026-11-12) | +| :ref:`v11.7 ESR ` | 2026-5-15 | 14.x (EOL 2026-11-12) | +------------------------------------------------------------+------------------+--------------------------------+ Customers will have 9 months to plan, test, and upgrade their PostgreSQL version before the new requirement takes effect. This policy aims to provide clarity and transparency so you can align database upgrades with the Mattermost release schedule. Contact a `Mattermost Expert `_. to discuss your options. From 4c83f9039c552441d9d85383f41852a51a71fb8a Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 13:36:55 +0300 Subject: [PATCH 19/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 8e92547a8c4..45c9aa154eb 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -20,12 +20,10 @@ FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy c ``` #### Database Schema Changes - - + - TBD #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. - - **Changes to Enterprise Advanced plan:** - - Under ``PrivacySettings`` in ``config.json``, added ``UseAnonymousURLs`` configuration setting to support a new feature of creating teams and channels using anonymous URLs so the channel and team name are not revealed in the URL. - **Changes to Enterprise plans:** - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require FIPS builds a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. - **Changes to all plans:** @@ -82,8 +80,8 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added a ``--workers`` flag to the mmctl import process to control concurrency. - Added support for listing user roles through mmctl. - Added new permissions to back Self Service Agent Creation in Mattermost Agents: -``manage_own_agent``: Allows users to create and manage their own agents. -``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. + - ``manage_own_agent``: Allows users to create and manage their own agents. + - ``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. #### Plugins - Added a pluggable AI Actions Menu to the text editor formatting bar with cascading submenus. Plugins can register custom action items via ``registerAIActionMenuItemComponent``. The existing Rewrite feature is now accessed through this menu. @@ -132,7 +130,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - v11.7 is built with Go ``v1.25.8``. ### Contributors - - + - TBD (release-v11.6-feature-release)= ## Release v11.6 - [Feature Release](https://docs.mattermost.com/product-overview/release-policy.html#release-types) From ae279c2f6f5f98d3d3a638b9a26c071ecf4fc2a0 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 13:44:49 +0300 Subject: [PATCH 20/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 45c9aa154eb..20db8f33344 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -24,6 +24,8 @@ FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy c #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. + - **Changes to Enterprise Advanced plan:** + - Under ``ExperimentalSetting`` in ``config.json``, added ``EnableWatermark`` configuration setting to add watermarking toggle in the server. - **Changes to Enterprise plans:** - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require FIPS builds a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. - **Changes to all plans:** @@ -125,6 +127,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab ### Audit Log Event Changes - Added new audit logs ``AuditEventCreateView``, ``AuditEventGetView``, ``AuditEventUpdateView``, ``AuditEventDeleteView``, ``AuditEventListViewsForChannel``, ``AuditEventUpdateViewSortOrder``, ``AuditEventGetPostsForView``, ``AuditEventCreatePropertyField``, ``AuditEventDeletePropertyField``, ``AuditEventGetPropertyFields``, ``AuditEventPatchPropertyField``, ``AuditEventGetPropertyValues``, and ``AuditEventPatchPropertyValues`` for Integrated Boards. - Added a new audit log ``AuditEventSetChannelMembers`` for channel memberships. + - Added new audit logs ``AuditEventCreateTeamAccessPolicy``, ``AuditEventUpdateTeamAccessPolicy``, ``AuditEventDeleteTeamAccessPolicy``, ``AuditEventAssignTeamAccessPolicy``, ``AuditEventUnassignTeamAccessPolicy``, and ``AuditEventTriggerTeamPolicySync`` for team-level ABAC membership policies. ### Go Version - v11.7 is built with Go ``v1.25.8``. From 3ef9d61197fc2dbbff0e3b11d0c74583ea1fb899 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 16:26:51 +0300 Subject: [PATCH 21/83] Update release-policy.md --- source/product-overview/release-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/release-policy.md b/source/product-overview/release-policy.md index 916746df529..ce862932d93 100644 --- a/source/product-overview/release-policy.md +++ b/source/product-overview/release-policy.md @@ -58,7 +58,7 @@ gantt v11.4 :active, 2026-02-16, 2026-05-15 v11.5 :active, 2026-03-16, 2026-06-15 v11.6 :active, 2026-04-16, 2026-07-15 - v11.7 & Desktop App v6.2 Extended Support :crit, 2026-05-16, 2027-05-15 + v11.7 & Desktop App v6.2 Extended Support :crit, 2026-05-15, 2027-05-15 v11.8 :active, 2026-06-16, 2026-09-15 ``` From 87782f1b5dce2b926ae6f24efef8b39b086b9fa7 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 17 Apr 2026 18:29:26 +0300 Subject: [PATCH 22/83] Update important-upgrade-notes.rst --- source/administration-guide/upgrade/important-upgrade-notes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index ff757b3896c..2a2bc4734b1 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -13,7 +13,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | from a version earlier than... | | +====================================================+==================================================================================================================================================================+ | v11.7 | FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users | -| | lwill no longer be valid and require a password reset. Non-FIPS builds are unaffected. | +| | will no longer be valid and require a password reset. Non-FIPS builds are unaffected. | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 3303a07c66c5ddfa68e793cee3eec584f2f8b6fb Mon Sep 17 00:00:00 2001 From: Doug Lauder Date: Sat, 18 Apr 2026 16:30:59 -0400 Subject: [PATCH 23/83] Apply suggestion from @wiggin77 --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 20db8f33344..74f4bffe3c4 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -119,7 +119,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Plugin API: Added new pre-hooks for channel membership, team membership, and channel archiving. Plugins can now intercept operations before they are persisted using three new hooks: ``ChannelMemberWillBeAdded`` (modify or reject a channel member addition), ``TeamMemberWillBeAdded`` (modify or reject a team member addition), and ``ChannelWillBeArchived`` (reject a channel archive). - Added new API endpoints ``PUT /api/v4/system/e2e/ai_bridge``, ``GET /api/v4/system/e2e/ai_bridge``, and ``DELETE /api/v4/system/e2e/ai_bridge`` for E2E testing of AI features. These endpoints are only accessible when ``EnableTesting`` is true. Refactored internal AI-related logic to use a new ``AgentsBridge`` interface for improved testability. Added new DTOs in ``server/public/model`` for AI bridge information and test helpers. - Added a new API endpoint ``PUT /api/v4/channels/{channel_id}/members`` that sets the complete membership of a channel in a single call. The endpoint accepts a JSON object with ``members`` (desired user IDs) and an optional ``channel_admins`` (user IDs to designate as channel admins). The server computes the diff against current membership, adds or removes users as needed, and reconciles admin roles. When ``channel_admins`` is omitted, existing admin roles are preserved. Results are streamed back as NDJSON for progress tracking. Requires system admin permissions. - - Added three new plugin APIs for shared channel sync: ``SendSharedChannelSyncMsg``, ``SendSharedChannelAttachmentSyncMsg``, and ``SendSharedChannelProfileImageSyncMsg``. These allow plugins acting as shared channel remotes to sync posts, reactions, users, file attachments, and profile images into Mattermost, complementing the existing outbound ``OnSharedChannels`` hooks. + - Added three new plugin APIs for shared channel sync: ``ReceiveSharedChannelSyncMsg``, ``ReceiveSharedChannelAttachmentSyncMsg``, and ``ReceiveSharedChannelProfileImageSyncMsg``. These allow plugins acting as shared channel remotes to sync posts, reactions, users, file attachments, and profile images into Mattermost, complementing the existing outbound ``OnSharedChannels`` hooks. ### Websocket Event Changes - Added websocket events for Property System Architecture v2. From 8a8eb8434e587a2c4e124705fdea5320e22b1c9d Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:28:21 +0300 Subject: [PATCH 24/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 74f4bffe3c4..933e5c71709 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -118,7 +118,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added new API endpoints for the Property System Architecture v2. - Plugin API: Added new pre-hooks for channel membership, team membership, and channel archiving. Plugins can now intercept operations before they are persisted using three new hooks: ``ChannelMemberWillBeAdded`` (modify or reject a channel member addition), ``TeamMemberWillBeAdded`` (modify or reject a team member addition), and ``ChannelWillBeArchived`` (reject a channel archive). - Added new API endpoints ``PUT /api/v4/system/e2e/ai_bridge``, ``GET /api/v4/system/e2e/ai_bridge``, and ``DELETE /api/v4/system/e2e/ai_bridge`` for E2E testing of AI features. These endpoints are only accessible when ``EnableTesting`` is true. Refactored internal AI-related logic to use a new ``AgentsBridge`` interface for improved testability. Added new DTOs in ``server/public/model`` for AI bridge information and test helpers. - - Added a new API endpoint ``PUT /api/v4/channels/{channel_id}/members`` that sets the complete membership of a channel in a single call. The endpoint accepts a JSON object with ``members`` (desired user IDs) and an optional ``channel_admins`` (user IDs to designate as channel admins). The server computes the diff against current membership, adds or removes users as needed, and reconciles admin roles. When ``channel_admins`` is omitted, existing admin roles are preserved. Results are streamed back as NDJSON for progress tracking. Requires system admin permissions. + - Added a new API endpoint ``PUT /api/v4/channels/{channel_id}/members`` that sets the complete membership of a channel in a single call. The endpoint accepts a JSON object with ``members`` (desired user IDs) and an optional ``channel_admins`` (user IDs to designate as channel admins). The server computes the diff against current membership, adds or removes users as needed, and reconciles admin roles. Results are streamed back as NDJSON for progress tracking. Requires system admin permissions. - Added three new plugin APIs for shared channel sync: ``ReceiveSharedChannelSyncMsg``, ``ReceiveSharedChannelAttachmentSyncMsg``, and ``ReceiveSharedChannelProfileImageSyncMsg``. These allow plugins acting as shared channel remotes to sync posts, reactions, users, file attachments, and profile images into Mattermost, complementing the existing outbound ``OnSharedChannels`` hooks. ### Websocket Event Changes From 587b280a21d53ef9e27170b83d987e4ae2cf9b4b Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 11:22:35 +0300 Subject: [PATCH 25/83] Update source/product-overview/mattermost-v11-changelog.md Co-authored-by: Doug Lauder --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 933e5c71709..a732a968ece 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -27,7 +27,7 @@ New setting options were added to ``config.json``. Below is a list of the additi - **Changes to Enterprise Advanced plan:** - Under ``ExperimentalSetting`` in ``config.json``, added ``EnableWatermark`` configuration setting to add watermarking toggle in the server. - **Changes to Enterprise plans:** - - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require FIPS builds a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. + - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require a minimum of 14 characters for passwords and for atmos/camo proxy and shared channel secrets. - **Changes to all plans:** - Under ``DatabaseSettings`` in ``config.json``, added ``AnalyticsQueryTimeout`` configuration setting for use when running long analytics queries in the background. - Under ``TeamSettings`` in ``config.json``, added ``EnableManagedChannelCategories`` configuration setting to enable managed channel categories for Channel Admins to enforce sidebar organization across teams. From 8bd23a522f22bfc357ef5f841052b877fb704559 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 11:23:15 +0300 Subject: [PATCH 26/83] Update mattermost-v11-changelog.md From 4ee4b77d7442f9a49a3d5192dd38764cd392e106 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 12:44:25 +0300 Subject: [PATCH 27/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index a732a968ece..108603e6baa 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -16,7 +16,7 @@ ```{Attention} **Breaking Changes** -FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users will no longer be valid and require a password reset. Non-FIPS builds are unaffected. + - FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users will no longer be valid and require a password reset. Non-FIPS builds are unaffected. ``` #### Database Schema Changes From 01f00359b5b597affa0d5919fa0efa2948e2f7aa Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 14:04:26 +0300 Subject: [PATCH 28/83] Update release-policy.md --- source/product-overview/release-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/release-policy.md b/source/product-overview/release-policy.md index ce862932d93..bdc6c2db178 100644 --- a/source/product-overview/release-policy.md +++ b/source/product-overview/release-policy.md @@ -55,7 +55,7 @@ gantt v11.1 :done, 2025-11-14, 2026-02-15 v11.2 :done, 2025-12-16, 2026-03-15 v11.3 :done, 2026-01-16, 2026-04-15 - v11.4 :active, 2026-02-16, 2026-05-15 + v11.4 :done, 2026-02-16, 2026-05-15 v11.5 :active, 2026-03-16, 2026-06-15 v11.6 :active, 2026-04-16, 2026-07-15 v11.7 & Desktop App v6.2 Extended Support :crit, 2026-05-15, 2027-05-15 From 5fc4be1ec6e748af47f30c70552df71a68209258 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 17:56:39 +0300 Subject: [PATCH 29/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index daa8ad3b7d6..51453e4143d 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -64,7 +64,6 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added the ability to handle from which remotes a channel is shared from the channel settings user interface. #### Administration - - Removed direct dependency on ``blang/semver/v4``. - Updated dependency versions for server and public services. - Added managed channel categories for Channel Admins to enforce sidebar organization across teams. - Migrated access control policies from v0.2 to v0.3, replacing the wildcard action with explicit action types to support multi-action policies. From edb6d21404000938be0b5418b55e9cd69e66981a Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 20 Apr 2026 18:31:13 +0300 Subject: [PATCH 30/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 51453e4143d..799df74b71a 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -111,6 +111,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed an issue where the Workspace Optimization page appeared in the System Console on Mattermost Cloud workspaces. - Fixed an issue where in compact mode, file attachment's name didn't display correctly when editing a post with attachments. - Fixed an issue where the textbox would appear focused but not accept keyboard shortcuts after editing a post. + - Fixed an issue where SAML login failed for users mapped via objectGUID when the IdP sent the value as a UUID string instead of base64-encoded raw bytes (affecting Keycloak 26.6.0 and later with user-attribute-ldap-mapper). ### API Changes - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. From 1bda464c09ebee64a4bcac884183a20e77769250 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Tue, 21 Apr 2026 11:21:57 +0300 Subject: [PATCH 31/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 799df74b71a..cf26d8240a6 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -112,6 +112,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed an issue where in compact mode, file attachment's name didn't display correctly when editing a post with attachments. - Fixed an issue where the textbox would appear focused but not accept keyboard shortcuts after editing a post. - Fixed an issue where SAML login failed for users mapped via objectGUID when the IdP sent the value as a UUID string instead of base64-encoded raw bytes (affecting Keycloak 26.6.0 and later with user-attribute-ldap-mapper). + - Fixed an issue with clipped emoticons and letters in channel banners. ### API Changes - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. From 9aaa512f471b93e156c8bf595e4f7597551514ee Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Tue, 21 Apr 2026 14:49:57 +0300 Subject: [PATCH 32/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index cf26d8240a6..f6464c8ab5f 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -113,6 +113,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed an issue where the textbox would appear focused but not accept keyboard shortcuts after editing a post. - Fixed an issue where SAML login failed for users mapped via objectGUID when the IdP sent the value as a UUID string instead of base64-encoded raw bytes (affecting Keycloak 26.6.0 and later with user-attribute-ldap-mapper). - Fixed an issue with clipped emoticons and letters in channel banners. + - Fixed an issue where removing a remote could leave channels in a "shared" state, even if not shared with any remote. ### API Changes - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. From 8d2c7dbc610b2a291158521fc6f06e62be1c5aa2 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:00:20 +0300 Subject: [PATCH 33/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index f6464c8ab5f..7bb2f4e40a1 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -114,6 +114,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed an issue where SAML login failed for users mapped via objectGUID when the IdP sent the value as a UUID string instead of base64-encoded raw bytes (affecting Keycloak 26.6.0 and later with user-attribute-ldap-mapper). - Fixed an issue with clipped emoticons and letters in channel banners. - Fixed an issue where removing a remote could leave channels in a "shared" state, even if not shared with any remote. + - Fixed an issue where OpenSearch/Elasticsearch reindex jobs could report success even when bulk writes were silently rejected by the search backend, causing silent data loss in the search index. ### API Changes - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. From 3d89cd1bb47fea3630008c902349e9480882a395 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:00:30 +0300 Subject: [PATCH 34/83] Update source/product-overview/mattermost-v11-changelog.md Co-authored-by: Ibrahim Serdar Acikgoz --- source/product-overview/mattermost-v11-changelog.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 7846adca69a..a6b916410f6 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -68,7 +68,8 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added managed channel categories for Channel Admins to enforce sidebar organization across teams. - Migrated access control policies from v0.2 to v0.3, replacing the wildcard action with explicit action types to support multi-action policies. - Added team-level ABAC membership policies, allowing Team Admins to create and manage attribute-based access policies for private channels within their team directly from a new Membership Policies tab in the Team Settings Modal. - - Added permission policies. + - Added permission policies to manage file attachment download/upload actions. + - Policy editor is improved for "Multi Select" attribute types to use more intuitive operators. - Added support for Elasticsearch v9 alongside v8. Elasticsearch v7 is no longer supported. - Fail-fast requests are now done to the Elasticsearch/Opensearch cluster when it is down. - Added a new ``mattermost_search_engine_status`` metric that reports whether the Elasticsearch/Opensearch cluster is healthy (value = 1) or not (value = 0). If the cluster is not enabled, its value is reported as 1. From 17d974629053fd0fee565321a2004c91d712b5bb Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 23 Apr 2026 09:52:12 +0300 Subject: [PATCH 35/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index a6b916410f6..702d167098b 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -81,6 +81,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added protected fields and field specific permissions to the property fields. - Added a ``--workers`` flag to the mmctl import process to control concurrency. - Added support for listing user roles through mmctl. + - Added support for collecting plugin metrics, namespacing them, and serving on the standarad ``/metrics`` endpoint. - Added new permissions to back Self Service Agent Creation in Mattermost Agents: - ``manage_own_agent``: Allows users to create and manage their own agents. - ``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. From ae4c343ed4d3c089af7636b3fecac0acf570f2ab Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 23 Apr 2026 13:32:00 +0300 Subject: [PATCH 36/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 702d167098b..bdbfef0b0b1 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -82,6 +82,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added a ``--workers`` flag to the mmctl import process to control concurrency. - Added support for listing user roles through mmctl. - Added support for collecting plugin metrics, namespacing them, and serving on the standarad ``/metrics`` endpoint. + - In the access control table editor, multi-select user attributes can now only use the "in" operator; changing the attribute on a row no longer resets the operator when both attributes are non-multi-select. - Added new permissions to back Self Service Agent Creation in Mattermost Agents: - ``manage_own_agent``: Allows users to create and manage their own agents. - ``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. From 64900a611555a077e815bb3deba61a6514ca8772 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:07:46 +0300 Subject: [PATCH 37/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index bdbfef0b0b1..73500b21ded 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -20,7 +20,8 @@ ``` #### Database Schema Changes - - TBD + - The following schema changes are included in the v11.7 release. No database downtime is expected for this upgrade. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. + - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. From ce7c3a348bba2e4d9225826c943a3d44b0cca52f Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:10:57 +0300 Subject: [PATCH 38/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 73500b21ded..06a832b8eb9 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -20,7 +20,7 @@ ``` #### Database Schema Changes - - The following schema changes are included in the v11.7 release. No database downtime is expected for this upgrade. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. + - The following schema changes are included in the v11.7 release. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. #### config.json From 12a8915e82fa620949c190d07609af6421ef64e9 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:18:03 +0300 Subject: [PATCH 39/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 2a2bc4734b1..67d87d13128 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -14,6 +14,38 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> +====================================================+==================================================================================================================================================================+ | v11.7 | FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users | | | will no longer be valid and require a password reset. Non-FIPS builds are unaffected. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to | +| | ``WHERE Type = 'parent'``. Before creating the index, duplicate parent policy names are resolved by appending the policy ID to all but the oldest entry. This | +| | enforces uniqueness of parent policy names and prevents future duplicates from being created. The migration targets ``AccessControlPolicies``, not posts or | +| | reactions. For deployments where ``AttributeBasedAccessControl`` was not enabled, the table will be empty and the migration completes in under a second. For | +| | deployments where the flag was enabled, the number of parent policies is expected to remain small, so timing is still negligible. The ``CREATE UNIQUE INDEX`` | +| | (non-concurrent) takes a ``SHARE`` lock on ``AccessControlPolicies``, blocking concurrent ``INSERT/UPDATE/DELETE`` for the duration of the index build. The | +| | ``UPDATE`` (deduplication) takes a ``ROW EXCLUSIVE`` lock on the same table. For most self-hosted deployments, the ``AttributeBasedAccessControl`` feature flag | +| | will not have been enabled, so the table will be empty and both operations complete in milliseconds. For Cloud or early-access deployments where the feature | +| | flag was enabled, the table may contain data, but the number of parent policies is expected to be small, so the lock window remains short. The | +| | ``CREATE UNIQUE INDEX`` (non-concurrent) takes a brief ``SHARE`` lock on ``AccessControlPolicies``. For deployments where ``AttributeBasedAccessControl`` was | +| | not enabled, the table is empty and the lock is negligible. For deployments where the flag was enabled, the number of parent policies is expected to be small, | +| | so the lock window remains short in either case. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | -- PostgreSQL only (MySQL not supported in v11+): | +| | -- Deduplicate parent policy names before adding unique constraint. | +| | -- The oldest policy (by CreateAt) keeps its original name; duplicates get ' ()' appended. | +| | UPDATE AccessControlPolicies AS p | +| | SET Name = LEFT(p.Name, 128 - LENGTH(' (' || p.ID || ')')) || ' (' || p.ID || ')' | +| | FROM ( | +| | SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY CreateAt ASC) AS rn | +| | FROM AccessControlPolicies | +| | WHERE Type = 'parent' | +| | ) AS dupes | +| | WHERE p.ID = dupes.ID | +| | AND dupes.rn > 1; | +| | | +| | CREATE UNIQUE INDEX IF NOT EXISTS idx_accesscontrolpolicies_name_type | +| | ON AccessControlPolicies (Name, Type) | +| | WHERE Type = 'parent'; | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From af49aea0c27aa65157986e7a43c79fe148029e24 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:24:06 +0300 Subject: [PATCH 40/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 67d87d13128..a7003240a11 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -17,16 +17,17 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to | | | ``WHERE Type = 'parent'``. Before creating the index, duplicate parent policy names are resolved by appending the policy ID to all but the oldest entry. This | -| | enforces uniqueness of parent policy names and prevents future duplicates from being created. The migration targets ``AccessControlPolicies``, not posts or | -| | reactions. For deployments where ``AttributeBasedAccessControl`` was not enabled, the table will be empty and the migration completes in under a second. For | -| | deployments where the flag was enabled, the number of parent policies is expected to remain small, so timing is still negligible. The ``CREATE UNIQUE INDEX`` | -| | (non-concurrent) takes a ``SHARE`` lock on ``AccessControlPolicies``, blocking concurrent ``INSERT/UPDATE/DELETE`` for the duration of the index build. The | -| | ``UPDATE`` (deduplication) takes a ``ROW EXCLUSIVE`` lock on the same table. For most self-hosted deployments, the ``AttributeBasedAccessControl`` feature flag | -| | will not have been enabled, so the table will be empty and both operations complete in milliseconds. For Cloud or early-access deployments where the feature | -| | flag was enabled, the table may contain data, but the number of parent policies is expected to be small, so the lock window remains short. The | -| | ``CREATE UNIQUE INDEX`` (non-concurrent) takes a brief ``SHARE`` lock on ``AccessControlPolicies``. For deployments where ``AttributeBasedAccessControl`` was | -| | not enabled, the table is empty and the lock is negligible. For deployments where the flag was enabled, the number of parent policies is expected to be small, | -| | so the lock window remains short in either case. The SQL queries included are: | +| | enforces uniqueness of parent policy names and prevents future duplicates from being created. The migration takes < 1 second. The migration targets | +| | ``AccessControlPolicies``, not posts or reactions. For deployments where ``AttributeBasedAccessControl`` was not enabled, the table will be empty and the | +| | migration completes in under a second. For deployments where the flag was enabled, the number of parent policies is expected to remain small, so timing is | +| | still negligible. The ``CREATE UNIQUE INDEX`` (non-concurrent) takes a ``SHARE`` lock on ``AccessControlPolicies``, blocking concurrent ``INSERT/UPDATE/DELETE`` | +| | for the duration of the index build. The ``UPDATE`` (deduplication) takes a ``ROW EXCLUSIVE`` lock on the same table. For most self-hosted deployments, the | +| | ``AttributeBasedAccessControl`` feature flag will not have been enabled, so the table will be empty and both operations complete in milliseconds. For Cloud or | +| | early-access deployments where the feature flag was enabled, the table may contain data, but the number of parent policies is expected to be small, so the lock | +| | window remains short. The ``CREATE UNIQUE INDEX`` (non-concurrent) takes a brief ``SHARE`` lock on ``AccessControlPolicies``. For deployments where | +| | ``AttributeBasedAccessControl`` was not enabled, the table is empty and the lock is negligible. For deployments where the flag was enabled, the number of | +| | parent policies is expected to be small, so the lock window remains short in either case. The migrations are fully backwards-compatible and no database downtime | +| | is expected for this upgrade. The SQL queries included are: | | | | | | .. code-block:: sql | | | | From 7c66b5140fe32610c12c4e132bfbe0ad50b2bf52 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:25:24 +0300 Subject: [PATCH 41/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 06a832b8eb9..73500b21ded 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -20,7 +20,7 @@ ``` #### Database Schema Changes - - The following schema changes are included in the v11.7 release. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. + - The following schema changes are included in the v11.7 release. No database downtime is expected for this upgrade. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. #### config.json From 769be0c81a3cc59ff95a9ce83d92876e6646f5f9 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:02:53 +0300 Subject: [PATCH 42/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 73500b21ded..ce4ccbb7476 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -82,7 +82,6 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added protected fields and field specific permissions to the property fields. - Added a ``--workers`` flag to the mmctl import process to control concurrency. - Added support for listing user roles through mmctl. - - Added support for collecting plugin metrics, namespacing them, and serving on the standarad ``/metrics`` endpoint. - In the access control table editor, multi-select user attributes can now only use the "in" operator; changing the attribute on a row no longer resets the operator when both attributes are non-multi-select. - Added new permissions to back Self Service Agent Creation in Mattermost Agents: - ``manage_own_agent``: Allows users to create and manage their own agents. From dfba63117dede11a8054c87edf8f0527937f9ee5 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 27 Apr 2026 11:00:21 +0300 Subject: [PATCH 43/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index ce4ccbb7476..8e767131290 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -74,7 +74,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added support for Elasticsearch v9 alongside v8. Elasticsearch v7 is no longer supported. - Fail-fast requests are now done to the Elasticsearch/Opensearch cluster when it is down. - Added a new ``mattermost_search_engine_status`` metric that reports whether the Elasticsearch/Opensearch cluster is healthy (value = 1) or not (value = 0). If the cluster is not enabled, its value is reported as 1. - - Added logic to monitor the health of Elasticsearch/Opensearch clusters to implement a retry mechanism. + - Added [logic](https://docs.mattermost.com/administration-guide/scale/common-configure-mattermost-for-enterprise-search.html) to monitor the health of Elasticsearch/Opensearch clusters to implement a retry mechanism. - Updated URL validation in integration actions to make them more secure. - Added a new built-in delegated administration role: Shared Channel Manager. This role allows System Admins to delegate Connected Workspaces management to specific users without granting full system administration access. - Shared Channels related errors now appear in the main log file by default. From 4c60d58dafbfb0867343c6c239aaf7b5e457c248 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:55:14 +0300 Subject: [PATCH 44/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 8e767131290..5e34dd06ad8 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -22,6 +22,7 @@ #### Database Schema Changes - The following schema changes are included in the v11.7 release. No database downtime is expected for this upgrade. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. + - The ``PropertyFields`` and ``PropertyValues`` tables were modified, and a new ``Views`` table was created. #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. From 7c75b6eda1df9e7ba9a3a6a5cbf8c096f0992c1a Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 27 Apr 2026 14:10:05 +0300 Subject: [PATCH 45/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index a7003240a11..e3f70a710be 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -47,6 +47,93 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | CREATE UNIQUE INDEX IF NOT EXISTS idx_accesscontrolpolicies_name_type | | | ON AccessControlPolicies (Name, Type) | | | WHERE Type = 'parent'; | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | The ``PropertyFields`` table is modified. Two new nullable columns, ``CreatedBy`` and ``UpdatedBy``, are added to track which user created and last modified | +| | each field. A new ``ObjectType`` column is added with a ``NOT NULL`` constraint and an empty string default, to discriminate between legacy and typed property | +| | fields. A new ``Protected`` boolean column is added with a default of ``FALSE``, along with three new columns (``PermissionField``, ``PermissionValues``, | +| | ``PermissionOptions``) using a new ``permission_level`` enum type with values none, sysadmin, and member. The existing unique index ``idx_propertyfields_unique``| +| | on (GroupID, TargetID, Name) is dropped and replaced by two new partial unique indexes: ``idx_propertyfields_unique_legacy`` which covers legacy rows where | +| | ``ObjectType = ''`` and ``idx_propertyfields_unique_typed`` which covers typed rows where ``ObjectType != ''``, indexing (``ObjectType``, ``GroupID``, | +| | ``TargetType``, ``TargetID``, ``Name``). | +| | | +| | The ``PropertyValues`` table is modified. Two new nullable columns, ``CreatedBy`` and ``UpdatedBy``, are added, matching | +| | the same tracking columns on ``PropertyFields``. | +| | | +| | A new ``Views`` table is created. A new index ``idx_views_channel_id_delete_at`` on (``ChannelId``, ``DeleteAt``) is created for this table. | +| | | +| | Migrations 160, 161, and 165 use ``ALTER TABLE ADD COLUMN``, which briefly acquires a lock, but this is instant | +| | (metadata-only) on PostgreSQL 11+. All other migrations, including index creation and deletion, use CONCURRENTLY and are lock-free. All locks are instant | +| | metadata operations and all index operations use CONCURRENTLY. These eight migrations are safe for zero-downtime deployment. They only affect low-row-count | +| | tables (``PropertyFields``, ``PropertyValues``) and create a new empty table (``Views``), with no full-table data modifications, no column type changes, and | +| | minimal I/O from concurrent index operations. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL | +| | queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | --- 160 | +| | ALTER TABLE PropertyFields | +| | ADD COLUMN IF NOT EXISTS CreatedBy varchar(26), | +| | ADD COLUMN IF NOT EXISTS UpdatedBy varchar(26); | +| | | +| | ALTER TABLE PropertyValues | +| | ADD COLUMN IF NOT EXISTS CreatedBy varchar(26), | +| | ADD COLUMN IF NOT EXISTS UpdatedBy varchar(26); | +| | | +| | --- 161 | +| | ALTER TABLE PropertyFields ADD COLUMN IF NOT EXISTS ObjectType varchar(255) NOT NULL DEFAULT ''; | +| | | +| | --- 162 | +| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_unique; | +| | | +| | --- 163 | +| | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_legacy | +| | ON PropertyFields (GroupID, TargetID, Name) | +| | WHERE DeleteAt = 0 AND ObjectType = ''; | +| | | +| | --- 164 | +| | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_typed | +| | ON PropertyFields (ObjectType, GroupID, TargetType, TargetID, Name) | +| | WHERE DeleteAt = 0 AND ObjectType != ''; +| | +| | --- 165 +| | DO $$ +| | BEGIN +| | IF NOT EXISTS (SELECT * FROM pg_type typ +| | INNER JOIN pg_namespace nsp ON nsp.oid = typ.typnamespace | +| | WHERE nsp.nspname = current_schema() +| | AND typ.typname = 'permission_level') THEN +| | CREATE TYPE permission_level AS ENUM ('none', 'sysadmin', 'member'); +| | END IF; +| | END; +| | $$ +| | LANGUAGE plpgsql; +| | +| | ALTER TABLE PropertyFields +| | ADD COLUMN IF NOT EXISTS Protected BOOLEAN NOT NULL DEFAULT FALSE, +| | ADD COLUMN IF NOT EXISTS PermissionField permission_level, +| | ADD COLUMN IF NOT EXISTS PermissionValues permission_level, +| | ADD COLUMN IF NOT EXISTS PermissionOptions permission_level; +| | +| | --- 166 +| | CREATE TABLE IF NOT EXISTS Views ( +| | Id VARCHAR(26) PRIMARY KEY, +| | ChannelId VARCHAR(26) NOT NULL, +| | Type VARCHAR(32) NOT NULL, +| | CreatorId VARCHAR(26) NOT NULL, +| | Title VARCHAR(256) NOT NULL, +| | Description TEXT, +| | SortOrder INTEGER NOT NULL DEFAULT 0, +| | Props jsonb, +| | CreateAt BIGINT NOT NULL, +| | UpdateAt BIGINT NOT NULL, +| | DeleteAt BIGINT NOT NULL DEFAULT 0 +| | ); +| | +| | --- 167 +| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_views_channel_id_delete_at ON Views(ChannelId, DeleteAt); +| | +| | --- 171 +| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 71eac90e5959ba2202582ffa020d7d4c0e537a49 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 27 Apr 2026 14:42:26 +0300 Subject: [PATCH 46/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index e3f70a710be..1bd5867c9a3 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -93,47 +93,47 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | --- 164 | | | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_typed | | | ON PropertyFields (ObjectType, GroupID, TargetType, TargetID, Name) | -| | WHERE DeleteAt = 0 AND ObjectType != ''; -| | -| | --- 165 -| | DO $$ -| | BEGIN -| | IF NOT EXISTS (SELECT * FROM pg_type typ +| | WHERE DeleteAt = 0 AND ObjectType != ''; | +| | | +| | --- 165 | +| | DO $$ | +| | BEGIN | +| | IF NOT EXISTS (SELECT * FROM pg_type typ | | | INNER JOIN pg_namespace nsp ON nsp.oid = typ.typnamespace | -| | WHERE nsp.nspname = current_schema() -| | AND typ.typname = 'permission_level') THEN -| | CREATE TYPE permission_level AS ENUM ('none', 'sysadmin', 'member'); -| | END IF; -| | END; -| | $$ -| | LANGUAGE plpgsql; -| | -| | ALTER TABLE PropertyFields -| | ADD COLUMN IF NOT EXISTS Protected BOOLEAN NOT NULL DEFAULT FALSE, -| | ADD COLUMN IF NOT EXISTS PermissionField permission_level, -| | ADD COLUMN IF NOT EXISTS PermissionValues permission_level, -| | ADD COLUMN IF NOT EXISTS PermissionOptions permission_level; -| | -| | --- 166 -| | CREATE TABLE IF NOT EXISTS Views ( -| | Id VARCHAR(26) PRIMARY KEY, -| | ChannelId VARCHAR(26) NOT NULL, -| | Type VARCHAR(32) NOT NULL, -| | CreatorId VARCHAR(26) NOT NULL, -| | Title VARCHAR(256) NOT NULL, -| | Description TEXT, -| | SortOrder INTEGER NOT NULL DEFAULT 0, -| | Props jsonb, -| | CreateAt BIGINT NOT NULL, -| | UpdateAt BIGINT NOT NULL, -| | DeleteAt BIGINT NOT NULL DEFAULT 0 -| | ); -| | -| | --- 167 -| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_views_channel_id_delete_at ON Views(ChannelId, DeleteAt); -| | -| | --- 171 -| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; +| | WHERE nsp.nspname = current_schema() | +| | AND typ.typname = 'permission_level') THEN | +| | CREATE TYPE permission_level AS ENUM ('none', 'sysadmin', 'member'); | +| | END IF; | +| | END; | +| | $$ | +| | LANGUAGE plpgsql; | +| | | +| | ALTER TABLE PropertyFields | +| | ADD COLUMN IF NOT EXISTS Protected BOOLEAN NOT NULL DEFAULT FALSE, | +| | ADD COLUMN IF NOT EXISTS PermissionField permission_level, | +| | ADD COLUMN IF NOT EXISTS PermissionValues permission_level, | +| | ADD COLUMN IF NOT EXISTS PermissionOptions permission_level; | +| | | +| | --- 166 | +| | CREATE TABLE IF NOT EXISTS Views ( | +| | Id VARCHAR(26) PRIMARY KEY, | +| | ChannelId VARCHAR(26) NOT NULL, | +| | Type VARCHAR(32) NOT NULL, | +| | CreatorId VARCHAR(26) NOT NULL, | +| | Title VARCHAR(256) NOT NULL, | +| | Description TEXT, | +| | SortOrder INTEGER NOT NULL DEFAULT 0, | +| | Props jsonb, | +| | CreateAt BIGINT NOT NULL, | +| | UpdateAt BIGINT NOT NULL, | +| | DeleteAt BIGINT NOT NULL DEFAULT 0 | +| | ); | +| | | +| | --- 167 | +| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_views_channel_id_delete_at ON Views(ChannelId, DeleteAt); | +| | | +| | --- 171 | +| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From af77743dfefb794d888f8e734f4f9ee37dad6d64 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 27 Apr 2026 14:51:21 +0300 Subject: [PATCH 47/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 1bd5867c9a3..4e874930a89 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -70,70 +70,70 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | | | | .. code-block:: sql | | | | -| | --- 160 | -| | ALTER TABLE PropertyFields | -| | ADD COLUMN IF NOT EXISTS CreatedBy varchar(26), | -| | ADD COLUMN IF NOT EXISTS UpdatedBy varchar(26); | -| | | -| | ALTER TABLE PropertyValues | -| | ADD COLUMN IF NOT EXISTS CreatedBy varchar(26), | -| | ADD COLUMN IF NOT EXISTS UpdatedBy varchar(26); | -| | | -| | --- 161 | -| | ALTER TABLE PropertyFields ADD COLUMN IF NOT EXISTS ObjectType varchar(255) NOT NULL DEFAULT ''; | -| | | -| | --- 162 | -| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_unique; | -| | | -| | --- 163 | -| | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_legacy | -| | ON PropertyFields (GroupID, TargetID, Name) | -| | WHERE DeleteAt = 0 AND ObjectType = ''; | -| | | -| | --- 164 | -| | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_typed | -| | ON PropertyFields (ObjectType, GroupID, TargetType, TargetID, Name) | -| | WHERE DeleteAt = 0 AND ObjectType != ''; | -| | | -| | --- 165 | -| | DO $$ | -| | BEGIN | -| | IF NOT EXISTS (SELECT * FROM pg_type typ | -| | INNER JOIN pg_namespace nsp ON nsp.oid = typ.typnamespace | -| | WHERE nsp.nspname = current_schema() | -| | AND typ.typname = 'permission_level') THEN | -| | CREATE TYPE permission_level AS ENUM ('none', 'sysadmin', 'member'); | -| | END IF; | -| | END; | -| | $$ | -| | LANGUAGE plpgsql; | -| | | -| | ALTER TABLE PropertyFields | -| | ADD COLUMN IF NOT EXISTS Protected BOOLEAN NOT NULL DEFAULT FALSE, | -| | ADD COLUMN IF NOT EXISTS PermissionField permission_level, | -| | ADD COLUMN IF NOT EXISTS PermissionValues permission_level, | -| | ADD COLUMN IF NOT EXISTS PermissionOptions permission_level; | -| | | -| | --- 166 | -| | CREATE TABLE IF NOT EXISTS Views ( | -| | Id VARCHAR(26) PRIMARY KEY, | -| | ChannelId VARCHAR(26) NOT NULL, | -| | Type VARCHAR(32) NOT NULL, | -| | CreatorId VARCHAR(26) NOT NULL, | -| | Title VARCHAR(256) NOT NULL, | -| | Description TEXT, | -| | SortOrder INTEGER NOT NULL DEFAULT 0, | -| | Props jsonb, | -| | CreateAt BIGINT NOT NULL, | -| | UpdateAt BIGINT NOT NULL, | -| | DeleteAt BIGINT NOT NULL DEFAULT 0 | -| | ); | -| | | -| | --- 167 | -| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_views_channel_id_delete_at ON Views(ChannelId, DeleteAt); | -| | | -| | --- 171 | -| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; | +| | --- 160 | +| | ALTER TABLE PropertyFields | +| | ADD COLUMN IF NOT EXISTS CreatedBy varchar(26), | +| | ADD COLUMN IF NOT EXISTS UpdatedBy varchar(26); | +| | | +| | ALTER TABLE PropertyValues | +| | ADD COLUMN IF NOT EXISTS CreatedBy varchar(26), | +| | ADD COLUMN IF NOT EXISTS UpdatedBy varchar(26); | +| | | +| | --- 161 | +| | ALTER TABLE PropertyFields ADD COLUMN IF NOT EXISTS ObjectType varchar(255) NOT NULL DEFAULT ''; | +| | | +| | --- 162 | +| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_unique; | +| | | +| | --- 163 | +| | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_legacy | +| | ON PropertyFields (GroupID, TargetID, Name) | +| | WHERE DeleteAt = 0 AND ObjectType = ''; | +| | | +| | --- 164 | +| | CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_unique_typed | +| | ON PropertyFields (ObjectType, GroupID, TargetType, TargetID, Name) | +| | WHERE DeleteAt = 0 AND ObjectType != ''; | +| | | +| | --- 165 | +| | DO $$ | +| | BEGIN | +| | IF NOT EXISTS (SELECT * FROM pg_type typ | +| | INNER JOIN pg_namespace nsp ON nsp.oid = typ.typnamespace | +| | WHERE nsp.nspname = current_schema() | +| | AND typ.typname = 'permission_level') THEN | +| | CREATE TYPE permission_level AS ENUM ('none', 'sysadmin', 'member'); | +| | END IF; | +| | END; | +| | $$ | +| | LANGUAGE plpgsql; | +| | | +| | ALTER TABLE PropertyFields | +| | ADD COLUMN IF NOT EXISTS Protected BOOLEAN NOT NULL DEFAULT FALSE, | +| | ADD COLUMN IF NOT EXISTS PermissionField permission_level, | +| | ADD COLUMN IF NOT EXISTS PermissionValues permission_level, | +| | ADD COLUMN IF NOT EXISTS PermissionOptions permission_level; | +| | | +| | --- 166 | +| | CREATE TABLE IF NOT EXISTS Views ( | +| | Id VARCHAR(26) PRIMARY KEY, | +| | ChannelId VARCHAR(26) NOT NULL, | +| | Type VARCHAR(32) NOT NULL, | +| | CreatorId VARCHAR(26) NOT NULL, | +| | Title VARCHAR(256) NOT NULL, | +| | Description TEXT, | +| | SortOrder INTEGER NOT NULL DEFAULT 0, | +| | Props jsonb, | +| | CreateAt BIGINT NOT NULL, | +| | UpdateAt BIGINT NOT NULL, | +| | DeleteAt BIGINT NOT NULL DEFAULT 0 | +| | ); | +| | | +| | --- 167 | +| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_views_channel_id_delete_at ON Views(ChannelId, DeleteAt); | +| | | +| | --- 171 | +| | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 34801a676f541557db338a82e6d2bb0a129e1bbb Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Tue, 28 Apr 2026 08:55:10 +0300 Subject: [PATCH 48/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 5e34dd06ad8..fa93870bc59 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -31,7 +31,7 @@ New setting options were added to ``config.json``. Below is a list of the additi - **Changes to Enterprise plans:** - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require a minimum of 14 characters for passwords and for atmos/camo proxy and shared channel secrets. - **Changes to all plans:** - - Under ``DatabaseSettings`` in ``config.json``, added ``AnalyticsQueryTimeout`` configuration setting for use when running long analytics queries in the background. + - Under ``DatabaseSettings`` in ``config.json``, added ``AnalyticsQueryTimeout`` configuration [setting](https://docs.mattermost.com/administration-guide/configure/environment-configuration-settings.html#query-timeout) for use when running long analytics queries in the background. - Under ``TeamSettings`` in ``config.json``, added ``EnableManagedChannelCategories`` configuration setting to enable managed channel categories for Channel Admins to enforce sidebar organization across teams. ### Compatibility From cedb22d1099a802f1b908b2a00eccadfad070384 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 09:30:27 +0300 Subject: [PATCH 49/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index fa93870bc59..f3730cf27f7 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -23,6 +23,7 @@ - The following schema changes are included in the v11.7 release. No database downtime is expected for this upgrade. See the [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html) for more details. - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. - The ``PropertyFields`` and ``PropertyValues`` tables were modified, and a new ``Views`` table was created. + - Scoped the ``role_updated`` WebSocket events to the affected team/channel instead of broadcasting globally. #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. From eefd5ba304894f2244a14ec66ed45c531e4fb6fc Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 09:38:12 +0300 Subject: [PATCH 50/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 4e874930a89..28bd6427188 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -134,6 +134,51 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | | | | --- 171 | | | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Scoped the ``role_updated`` WebSocket events to the affected team/channel instead of broadcasting globally. To scope the events properly, we needed a way to | +| | efficiently look up a role’s associated scheme. Large-dataset testing was not performed for this migration. The only table touched is ``roles``, which is a | +| | small bounded table with well under 10k rows on large installations. That table is not affected by a large number of posts, reactions, etc. ``roles`` receives | +| | a brief access exclusive lock when adding a column, a row exclusive lock when backfilling data, and a share update exclusive when creating the new index. | +| | The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | -- Pre-upgrade schema changes for MM-67741 (Mattermost 11.7). | +| | -- | +| | -- Run in psql's default autocommit mode. Do NOT wrap these statements in | +| | -- BEGIN/COMMIT: it would hold ACCESS EXCLUSIVE on `roles` across the backfill, | +| | -- and the final CREATE INDEX CONCURRENTLY cannot run inside a transaction block. | +| | | +| | -- 1. Add the column (catalog-only; nullable, no default). | +| | ALTER TABLE roles ADD COLUMN IF NOT EXISTS schemeid VARCHAR(26); | +| | | | +| | -- 2. Backfill schemeid for pre-existing rows. | +| | UPDATE roles | +| | SET schemeid = match.scheme_id | +| | FROM ( | +| | SELECT DISTINCT ON (role_name) id AS scheme_id, role_name | +| | FROM ( | +| | SELECT id, unnest(ARRAY[ | +| | defaultteamadminrole, | +| | defaultteamuserrole, | +| | defaultteamguestrole, | +| | defaultchanneladminrole, | +| | defaultchanneluserrole, | +| | defaultchannelguestrole, | +| | defaultplaybookadminrole, | +| | defaultplaybookmemberrole, | +| | defaultrunadminrole, | +| | defaultrunmemberrole | +| | ]) AS role_name | +| | FROM schemes | +| | ) expanded | +| | WHERE role_name IS NOT NULL AND role_name <> '' | +| | ORDER BY role_name, scheme_id | +| | ) match | +| | WHERE roles.name = match.role_name; | +| | | +| | -- 3. Create the supporting index without blocking writes. | +| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_roles_scheme_id ON roles(schemeid); | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From c070215c383a853960220eacb966f81bb458cbd0 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 12:12:48 +0300 Subject: [PATCH 51/83] Update release-policy.md --- source/product-overview/release-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/release-policy.md b/source/product-overview/release-policy.md index bdc6c2db178..94b9063dcbd 100644 --- a/source/product-overview/release-policy.md +++ b/source/product-overview/release-policy.md @@ -65,7 +65,7 @@ gantt **Timeline Legend:** The chart above shows both release dates and end-of-life dates for each version. ESRs provide longer-term stability for organizations preferring less frequent updates. - 🔵 **Blue bars**: Regular feature releases (monthly releases with standard support lifecycle) -- 🔴 **Red bars**: Extended Support Releases (ESRs) - Released every 6-9 months with extended 9-12 month support +- 🔴 **Red bars**: Extended Support Releases (ESRs) - Released every 9 months with extended 12 month support (esr-notifications)= ### ESR Notifications From 2a78c071d7d7c5f68bf594fe8cc1b64be333b924 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 12:18:54 +0300 Subject: [PATCH 52/83] Update important-upgrade-notes.rst --- source/administration-guide/upgrade/important-upgrade-notes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 28bd6427188..a135877ce91 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -151,7 +151,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | | | | -- 1. Add the column (catalog-only; nullable, no default). | | | ALTER TABLE roles ADD COLUMN IF NOT EXISTS schemeid VARCHAR(26); | -| | | | +| | | | | -- 2. Backfill schemeid for pre-existing rows. | | | UPDATE roles | | | SET schemeid = match.scheme_id | From 9a51d7dedde53d6248906042db20f4208b194d78 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:43:02 +0300 Subject: [PATCH 53/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 3ef9f19d4f4..0efb7dd4ab5 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -66,7 +66,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Improved autocomplete while typing in Korean and using Firefox. - Updated license renewal and expiry notification emails with refreshed branding, copy, and layout. - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. - - Dropped support for JS features required by browsers over three years old. + - Dropped support for JS features required by browsers over three years old (reported on webapp and Safari browser). - Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. - Added the ability to handle from which remotes a channel is shared from the channel settings user interface. @@ -98,10 +98,10 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Improved response handling for outgoing webhook requests. ### Bug Fixes - - Fixed a crash when native app download links were malformed. + - Fixed a crash when native app download links were malformed (reported on web browser). - Fixed an issue where premade themes were hidden when custom themes were disabled. - Fixed an issue where importing files with Japanese dakuten/handakuten characters (e.g., ガ, パ, べ) failed on macOS due to Unicode normalization mismatch (NFC/NFD). - - Fixed an issue that caused profile pictures to be incorrectly rotated on upload, as their EXIF rotation tag was ignored. + - Fixed an issue that caused profile pictures to be incorrectly rotated on upload, as their EXIF rotation tag was ignored (reported on iOS). - Fixed a nil pointer dereference in ``UpdateUser`` when the user update operation returned an unexpected nil result (Sentry VF, 14 events). - Fixed an issue with the date picker not being able to overflow interactive dialogs properly. - Fixed an issue where fetching a newly created channel could fail with "channel not found" on deployments with database read replicas. From 7f5549d9ffc5068f6002121cacfd98859cab7557 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:50:48 +0300 Subject: [PATCH 54/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 0efb7dd4ab5..5cf465347c5 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -63,7 +63,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Substring matching is now allowed when searching channel members in the member sub-panel in a channel. - Improved accessibility of thread list menus. - Channel banners are now shown in thread views. - - Improved autocomplete while typing in Korean and using Firefox. + - Improved autocomplete while typing in Korean and using Firefox (reported on desktop app and web browser). - Updated license renewal and expiry notification emails with refreshed branding, copy, and layout. - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. - Dropped support for JS features required by browsers over three years old (reported on webapp and Safari browser). @@ -111,10 +111,10 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed styling issues in the **Browse Channels** modal when there were long channel purpose values present. - Fixed an issue where shared channel invites were silently dropped in High Availability clusters when the API request landed on a non-leader node. - Fixed an issue where message attachment titles would render encoded special characters as-is. - - Fixed an issue with the **Invite to Team** modal ignoring the most recent key pressed when suggesting users. + - Fixed an issue with the **Invite to Team** modal ignoring the most recent key pressed when suggesting users (reported on desktop app and web browser). - Fixed an issue where a "Don't have an account" link showed up on the login page even when signups were disabled. - Fixed issues with interactive dialogs - dynamic select lookups, radio values, and field refresh. - - Fixed an issue where desktop notifications still triggered for a channel or thread that was focused in a popout window. + - Fixed an issue where desktop notifications still triggered for a channel or thread that was focused in a popout window (reported on desktop app). - Fixed an issue where the ``remote_id`` field on user objects could be set via the user patch API. - Fixed an issue where keyboard navigation didn't work in the channel header and sidebar channel menus. - Fixed an issue where the Workspace Optimization page appeared in the System Console on Mattermost Cloud workspaces. From 78511e6b3f1c1ed2c20ab3f51c80dae0e7973cb0 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 29 Apr 2026 13:53:32 +0300 Subject: [PATCH 55/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 5cf465347c5..2dc39ba09b4 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -63,7 +63,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Substring matching is now allowed when searching channel members in the member sub-panel in a channel. - Improved accessibility of thread list menus. - Channel banners are now shown in thread views. - - Improved autocomplete while typing in Korean and using Firefox (reported on desktop app and web browser). + - Improved autocomplete while typing in Korean and using Firefox (reported on Desktop App and web browser). - Updated license renewal and expiry notification emails with refreshed branding, copy, and layout. - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. - Dropped support for JS features required by browsers over three years old (reported on webapp and Safari browser). @@ -111,10 +111,10 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed styling issues in the **Browse Channels** modal when there were long channel purpose values present. - Fixed an issue where shared channel invites were silently dropped in High Availability clusters when the API request landed on a non-leader node. - Fixed an issue where message attachment titles would render encoded special characters as-is. - - Fixed an issue with the **Invite to Team** modal ignoring the most recent key pressed when suggesting users (reported on desktop app and web browser). + - Fixed an issue with the **Invite to Team** modal ignoring the most recent key pressed when suggesting users (reported on Desktop App and web browser). - Fixed an issue where a "Don't have an account" link showed up on the login page even when signups were disabled. - Fixed issues with interactive dialogs - dynamic select lookups, radio values, and field refresh. - - Fixed an issue where desktop notifications still triggered for a channel or thread that was focused in a popout window (reported on desktop app). + - Fixed an issue where desktop notifications still triggered for a channel or thread that was focused in a popout window (reported on Desktop App). - Fixed an issue where the ``remote_id`` field on user objects could be set via the user patch API. - Fixed an issue where keyboard navigation didn't work in the channel header and sidebar channel menus. - Fixed an issue where the Workspace Optimization page appeared in the System Console on Mattermost Cloud workspaces. From c999d0bc2a5b9af7af5b75b41cd773655ddc8f24 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 09:15:30 +0300 Subject: [PATCH 56/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 2dc39ba09b4..883be31f979 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -55,7 +55,8 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Pre-packaged GitHub plugin version [v2.7.0](https://github.com/mattermost/mattermost-plugin-github/releases/tag/v2.7.0). - Pre-packaged Jira plugin version [v4.6.0](https://github.com/mattermost/mattermost-plugin-jira/releases/tag/v4.6.0). - Pre-packaged Zoom plugin version [v1.13.0](https://github.com/mattermost/mattermost-plugin-zoom/releases/tag/v1.13.0). - - Pre-packaged Agents plugin version [v2.0.0](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.0). + - Pre-packaged Agents plugin version [v2.0.2](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.2). + - Pre-packaged Playbooks plugin version [v2.8.1](https://github.com/mattermost/mattermost-plugin-playbooks/releases/tag/v2.8.1). - Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. - Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. - Channel membership changes are now reliably synchronized between connected workspaces, even when a remote server is temporarily offline. Previously, membership removals could be missed during outages. @@ -142,7 +143,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added new audit logs ``AuditEventCreateTeamAccessPolicy``, ``AuditEventUpdateTeamAccessPolicy``, ``AuditEventDeleteTeamAccessPolicy``, ``AuditEventAssignTeamAccessPolicy``, ``AuditEventUnassignTeamAccessPolicy``, and ``AuditEventTriggerTeamPolicySync`` for team-level ABAC membership policies. ### Go Version - - v11.7 is built with Go ``v1.25.8``. + - v11.7 is built with Go ``v1.25.9``. ### Contributors - TBD From b1c2fcadf8baca682297ce7c44d45c0128085d02 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 12:33:53 +0300 Subject: [PATCH 57/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 883be31f979..aa85c76cf79 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -146,7 +146,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - v11.7 is built with Go ``v1.25.9``. ### Contributors - - TBD + - [abhijit-singh](https://github.com/abhijit-singh), [agarciamontoro](https://github.com/agarciamontoro), [amyblais](https://github.com/amyblais), [andrleite](https://github.com/andrleite), [angeloskyratzakos](https://github.com/angeloskyratzakos), [Aryakoste](https://github.com/Aryakoste), [asaadmahmood](https://github.com/asaadmahmood), [avasconcelos114](https://github.com/avasconcelos114), [axilleas](https://github.com/axilleas), [BenCookie95](https://github.com/BenCookie95), [bgardner8008](https://github.com/bgardner8008), [Br1an67](https://github.com/Br1an67), [calebroseland](https://github.com/calebroseland), [carlisgg](https://github.com/carlisgg), [Combs7th](https://github.com/Combs7th), [cpoile](https://github.com/cpoile), [crspeller](https://github.com/crspeller), [ctlaltdieliet](https://github.com/ctlaltdieliet), [cursor[bot]](https://github.com/cursor[bot]), [DannyDaemonic](https://github.com/DannyDaemonic), [davidkrauser](https://github.com/davidkrauser), [devinbinnie](https://github.com/devinbinnie), [DHaussermann](https://github.com/DHaussermann), [edgarbellot](https://github.com/edgarbellot), [enahum](https://github.com/enahum), [esarafianou](https://github.com/esarafianou), [esethna](https://github.com/esethna), [ewwollesen](https://github.com/ewwollesen), [fmartingr](https://github.com/fmartingr), [frankps](https://translate.mattermost.com/user/frankps), [ggrossetie](https://github.com/ggrossetie), [grubbins](https://github.com/grubbins), [hanzei](https://github.com/hanzei), [harshilsharma63](https://github.com/harshilsharma63), [hmhealey](https://github.com/hmhealey), [isacikgoz](https://github.com/isacikgoz), [jgheithcock](https://github.com/jgheithcock), [jprusch](https://translate.mattermost.com/user/jprusch), [kayazeren](https://translate.mattermost.com/user/kayazeren), [krotesk](https://translate.mattermost.com/user/krotesk), [KuSh](https://github.com/KuSh), [larkox](https://github.com/larkox), [lieut-data](https://github.com/lieut-data), [M-ZubairAhmed](https://github.com/M-ZubairAhmed), [marianunez](https://github.com/marianunez), [maruTA-bis5](https://translate.mattermost.com/user/maruTA-bis5), [master7](https://translate.mattermost.com/user/master7), [matthewbirtch](https://github.com/matthewbirtch), [Maty556677](https://translate.mattermost.com/user/Maty556677), [mgdelacroix](https://github.com/mgdelacroix), [NAM-MAN](https://github.com/NAM-MAN), [nang2049](https://github.com/nang2049), [NARSimoes](https://github.com/NARSimoes), [nickmisasi](https://github.com/nickmisasi), [pavelzeman](https://github.com/pavelzeman), [pvev](https://github.com/pvev), [Rajat-Dabade](https://github.com/Rajat-Dabade), [Reinkard](https://translate.mattermost.com/user/Reinkard), [Ricky-Tigg](https://translate.mattermost.com/user/Ricky-Tigg), [RinSkywarp](https://translate.mattermost.com/user/RinSkywarp), [sadohert](https://github.com/sadohert), [saturninoabril](https://github.com/saturninoabril), [sbishel](https://github.com/sbishel), [Sharuru](https://translate.mattermost.com/user/Sharuru), [svelle](https://github.com/svelle), [ThrRip](https://translate.mattermost.com/user/ThrRip), [tnir](https://translate.mattermost.com/user/tnir), [Umeaboy](https://translate.mattermost.com/user/Umeaboy), [Victor-Nyagudi](https://github.com/Victor-Nyagudi), [wiersgallak](https://github.com/wiersgallak), [wiggin77](https://github.com/wiggin77), [Willyfrog](https://github.com/Willyfrog), [yasserfaraazkhan](https://github.com/yasserfaraazkhan) (release-v11.6-feature-release)= ## Release v11.6 - [Feature Release](https://docs.mattermost.com/product-overview/release-policy.html#release-types) From 832f070f410ca8d48e7650d40e285ec2f770667d Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 12:41:59 +0300 Subject: [PATCH 58/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index aa85c76cf79..a105c1a0bff 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -37,7 +37,6 @@ New setting options were added to ``config.json``. Below is a list of the additi - Under ``PasswordSettings`` in ``config.json``, added ``​​PasswordFIPSMinimumLength`` configuration setting to require a minimum of 14 characters for passwords and for atmos/camo proxy and shared channel secrets. - **Changes to all plans:** - Under ``DatabaseSettings`` in ``config.json``, added ``AnalyticsQueryTimeout`` configuration [setting](https://docs.mattermost.com/administration-guide/configure/environment-configuration-settings.html#query-timeout) for use when running long analytics queries in the background. - - Under ``TeamSettings`` in ``config.json``, added ``EnableManagedChannelCategories`` configuration setting to enable managed channel categories for Channel Admins to enforce sidebar organization across teams. ### Compatibility - Updated minimum Edge and Chrome versions to 146+. From e0e1e0b505255a504d7ba70fb077220bef79a15e Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 12:45:42 +0300 Subject: [PATCH 59/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index a105c1a0bff..fb3d4199c6d 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -72,7 +72,6 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab #### Administration - Updated dependency versions for server and public services. - - Added managed channel categories for Channel Admins to enforce sidebar organization across teams. - Migrated access control policies from v0.2 to v0.3, replacing the wildcard action with explicit action types to support multi-action policies. - Added team-level ABAC membership policies, allowing Team Admins to create and manage attribute-based access policies for private channels within their team directly from a new Membership Policies tab in the Team Settings Modal. - Added permission policies to manage file attachment download/upload actions. From 7c2b36d86ea6ffecc3bd4329b5c94801dcc35810 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 18:24:58 +0300 Subject: [PATCH 60/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 - 1 file changed, 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index fb3d4199c6d..981bb4b9a36 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -58,7 +58,6 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Pre-packaged Playbooks plugin version [v2.8.1](https://github.com/mattermost/mattermost-plugin-playbooks/releases/tag/v2.8.1). - Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. - Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. - - Channel membership changes are now reliably synchronized between connected workspaces, even when a remote server is temporarily offline. Previously, membership removals could be missed during outages. - Added an "Open in new tab" button to the **Product Switcher** menu. - Substring matching is now allowed when searching channel members in the member sub-panel in a channel. - Improved accessibility of thread list menus. From 447998595f88c8e91d83054f1f3d42f2781a4f70 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 18:25:18 +0300 Subject: [PATCH 61/83] Update ui-ada-changelog.rst --- source/product-overview/ui-ada-changelog.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/product-overview/ui-ada-changelog.rst b/source/product-overview/ui-ada-changelog.rst index 5b3001dfa97..6ae61b6f67e 100644 --- a/source/product-overview/ui-ada-changelog.rst +++ b/source/product-overview/ui-ada-changelog.rst @@ -16,8 +16,6 @@ Changelog - (UI) Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. * - v11.7 - (UI) Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. - * - v11.7 - - (UI) Channel membership changes are now reliably synchronized between connected workspaces, even when a remote server is temporarily offline. Previously, membership removals could be missed during outages. * - v11.7 - (UI) Added an "Open in new tab" button to the **Product Switcher** menu. * - v11.7 From 8432a56ae91861528818d091f884ef1959c69d63 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 4 May 2026 18:27:53 +0300 Subject: [PATCH 62/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 981bb4b9a36..64f096e8976 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -123,6 +123,9 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed an issue where removing a remote could leave channels in a "shared" state, even if not shared with any remote. - Fixed an issue where OpenSearch/Elasticsearch reindex jobs could report success even when bulk writes were silently rejected by the search backend, causing silent data loss in the search index. +#### Performance + - Benchmarking test results showed no significant difference: a -0.90% decrease in the number of supported users for the new release, which lies within the ``[-5%, +5%]`` prediction interval. View the full raw data and methodology in our [Performance Reports repository](https://github.com/mattermost/performance-reports/tree/main/performance-comparisons/v11.7). + ### API Changes - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. - Added new API endpoints for the Property System Architecture v2. From 2d56c5415f05df9d9b7bd93f8bde91dcd18db524 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Tue, 5 May 2026 09:08:32 +0300 Subject: [PATCH 63/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 64f096e8976..5a2912fc83f 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -54,7 +54,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Pre-packaged GitHub plugin version [v2.7.0](https://github.com/mattermost/mattermost-plugin-github/releases/tag/v2.7.0). - Pre-packaged Jira plugin version [v4.6.0](https://github.com/mattermost/mattermost-plugin-jira/releases/tag/v4.6.0). - Pre-packaged Zoom plugin version [v1.13.0](https://github.com/mattermost/mattermost-plugin-zoom/releases/tag/v1.13.0). - - Pre-packaged Agents plugin version [v2.0.2](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.2). + - Pre-packaged Agents plugin version [v2.0.3](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.3). - Pre-packaged Playbooks plugin version [v2.8.1](https://github.com/mattermost/mattermost-plugin-playbooks/releases/tag/v2.8.1). - Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. - Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. From cb3219aceaddcaa26e2a3933d51105c849824541 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Tue, 5 May 2026 09:29:09 +0300 Subject: [PATCH 64/83] Update important-upgrade-notes.rst --- source/administration-guide/upgrade/important-upgrade-notes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index a135877ce91..d90434ffda2 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -143,7 +143,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | | | | .. code-block:: sql | | | | -| | -- Pre-upgrade schema changes for MM-67741 (Mattermost 11.7). | +| | -- Pre-upgrade schema changes (Mattermost 11.7). | | | -- | | | -- Run in psql's default autocommit mode. Do NOT wrap these statements in | | | -- BEGIN/COMMIT: it would hold ACCESS EXCLUSIVE on `roles` across the backfill, | From e0210c69cf1ddc20dfbedc950981aee1f00a77ed Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 6 May 2026 08:51:37 +0300 Subject: [PATCH 65/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 5a2912fc83f..9b776f7bb7c 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -87,6 +87,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added a ``--workers`` flag to the mmctl import process to control concurrency. - Added support for listing user roles through mmctl. - In the access control table editor, multi-select user attributes can now only use the "in" operator; changing the attribute on a row no longer resets the operator when both attributes are non-multi-select. + - Tightened authorization on the group syncable link and patch endpoints. - Added new permissions to back Self Service Agent Creation in Mattermost Agents: - ``manage_own_agent``: Allows users to create and manage their own agents. - ``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. From 6c0c5fe215bfe99bffa481a1478a3018e31e157d Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 6 May 2026 10:45:12 +0300 Subject: [PATCH 66/83] Update important-upgrade-notes.rst --- .../administration-guide/upgrade/important-upgrade-notes.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index d90434ffda2..0a66df5865b 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -15,6 +15,11 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | v11.7 | FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users | | | will no longer be valid and require a password reset. Non-FIPS builds are unaffected. | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | v11.7 includes Agents plugin v2. Please see `this guide `__ on | +| | how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported version path, the migrations that run automatically on first | +| | start of v2.0.0, the breaking changes and default-behavior flips that admins should know about before the upgrade window, and the verification steps to confirm | +| | the upgrade succeeded. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to | | | ``WHERE Type = 'parent'``. Before creating the index, duplicate parent policy names are resolved by appending the policy ID to all but the oldest entry. This | | | enforces uniqueness of parent policy names and prevents future duplicates from being created. The migration takes < 1 second. The migration targets | From 959c16ffe7b88f86a805bc924d2cb2f2a3a2c0bb Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 6 May 2026 10:47:53 +0300 Subject: [PATCH 67/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 9b776f7bb7c..c6401bb96a8 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -21,6 +21,7 @@ Platform and OS scope reflects reported and tested environments and may not repr ```{Attention} **Breaking Changes** - FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users will no longer be valid and require a password reset. Non-FIPS builds are unaffected. + - v11.7 includes Agents plugin v2. Please see [this guide](https://github.com/mattermost/mattermost-plugin-agents/blob/master/docs/upgrading_to_2.0.md‎.md) on how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported version path, the migrations that run automatically on first start of v2.0.0, the breaking changes and default-behavior flips that admins should know about before the upgrade window, and the verification steps to confirm the upgrade succeeded. ``` #### Database Schema Changes From 89e14be4c6bfd211ed3d72245ef94f05dba1e96e Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Wed, 6 May 2026 12:12:59 +0300 Subject: [PATCH 68/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 0a66df5865b..c9adbc294b0 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -15,10 +15,9 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | v11.7 | FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users | | | will no longer be valid and require a password reset. Non-FIPS builds are unaffected. | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | v11.7 includes Agents plugin v2. Please see `this guide `__ on | -| | how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported version path, the migrations that run automatically on first | -| | start of v2.0.0, the breaking changes and default-behavior flips that admins should know about before the upgrade window, and the verification steps to confirm | -| | the upgrade succeeded. | +| | v11.7 includes Agents plugin v2. Please see `this guide`_ on how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported | +| | version path, the migrations that run automatically on first start of v2.0.0, the breaking changes and default-behavior flips that admins should know about | +| | before the upgrade window, and the verification steps to confirm the upgrade succeeded. | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to | | | ``WHERE Type = 'parent'``. Before creating the index, duplicate parent policy names are resolved by appending the policy ID to all but the oldest entry. This | @@ -2086,6 +2085,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> .. _000141_add_remoteid_channelid_to_post_acknowledgements.down.sql: https://github.com/mattermost/mattermost/blob/release-10.10/server/channels/db/migrations/postgres/000141_add_remoteid_channelid_to_post_acknowledgements.down.sql .. _000141_add_remoteid_channelid_to_post_acknowledgements.up.sql: https://github.com/mattermost/mattermost/blob/release-10.10/server/channels/db/migrations/postgres/000141_add_remoteid_channelid_to_post_acknowledgements.up.sql +.. _this guide: https://github.com/mattermost/mattermost-plugin-agents/blob/master/docs/upgrading_to_2.0.md‎.md Additional upgrade notes ------------------------ From 6df1313751ba86b882bac061146a0faffb6af79e Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 10:56:38 +0300 Subject: [PATCH 69/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 85 ++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index c9adbc294b0..e0d5673a6b7 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -182,7 +182,90 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | WHERE roles.name = match.role_name; | | | | | | -- 3. Create the supporting index without blocking writes. | -| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_roles_scheme_id ON roles(schemeid); | +| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_roles_scheme_id ON roles(schemeid); | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000001 introduces a new plugin-owned key/value configuration table, ``Agents_System`` (``SKey VARCHAR(64) PRIMARY KEY``, ``SValue TEXT)``. This is a | +| | brand-new table created from scratch with no existing rows. No existing tables, columns, or indexes are modified. The only lock acquired is ``ACCESS EXCLUSIVE`` | +| | on the new table during ``CREATE TABLE``, which has no impact on concurrent operations as the table does not yet exist. Large-dataset testing was not performed | +| | for this migration as the table is empty at creation with nothing to seed. The migrations are fully backwards-compatible and no database downtime is expected | +| | for this upgrade. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | CREATE TABLE IF NOT EXISTS Agents_System ( | +| | SKey VARCHAR(64) PRIMARY KEY, | +| | SValue TEXT | +| | ); +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000002 introduces a new plugin-owned table, `LLM_PostMeta` (`RootPostID TEXT PRIMARY KEY`, `Title TEXT NOT NULL`), to store post metadata. This is a | +| | brand-new table created from scratch with no existing rows. Additionally, this migration defensively drops the legacy FK constraint `llm_threads_rootpostid_fkey`| +| | on `LLM_Threads` (if present) as a cleanup of an undesired constraint from older plugin versions. Both statements are guarded with `IF [NOT] EXISTS`. The only | +| | locks acquired are `ACCESS EXCLUSIVE` on the new `LLM_PostMeta` table during `CREATE TABLE` (no contention possible) and a brief `ACCESS EXCLUSIVE` on | +| | `LLM_Threads` during the `DROP CONSTRAINT` (metadata-only, negligible impact). Large-dataset testing was not performed for this migration as `LLM_PostMeta` is | +| | empty at creation and the FK drop is metadata-only regardless of `LLM_Threads` row count. Note: the down migration drops `LLM_PostMeta` but does not restore the | +| | dropped FK on `LLM_Threads` — re-adding a FK during a downgrade would itself be unsafe, and the constraint removal is intentional. Also note that `LLM_PostMeta` | +| | is a transitional table dropped in migration 000007. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL| +| | queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | -- No foreign keys: consistent with Mattermost conventions. | +| | -- IF NOT EXISTS is safe for existing installs that already have this table. | +| | CREATE TABLE IF NOT EXISTS LLM_PostMeta ( | +| | RootPostID TEXT NOT NULL PRIMARY KEY, | +| | Title TEXT NOT NULL | +| | ); | +| | | +| | -- Clean up FK constraint from old LLM_Threads table if it exists | +| | ALTER TABLE IF EXISTS LLM_Threads DROP CONSTRAINT IF EXISTS llm_threads_rootpostid_fkey; | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000003 introduces a new plugin-owned table, `Agents_ConfigHistory` (`ID VARCHAR(26) PRIMARY KEY`, `Config TEXT`, `CreateAt BIGINT`, `Active BOOLEAN`), | +| | for tracking configuration snapshots. This is a brand-new table created from scratch with no existing rows. A partial unique index, | +| | `idx_agents_confighistory_active`, is created on `Active WHERE Active = true`, enforcing at most one active config row at a time. Plain `CREATE UNIQUE INDEX` | +| | (without `CONCURRENTLY`) is safe here as the table is empty and unreachable by concurrent writers at creation time, and `CONCURRENTLY` is incompatible with | +| | transactional execution. The only locks acquired are `ACCESS EXCLUSIVE` during `CREATE TABLE` and `CREATE INDEX`, against an object no other session can see. | +| | Large-dataset testing was not performed for this migration as the table is empty at creation with nothing to seed. The migrations are fully backwards-compatible | +| | and no database downtime is expected for this upgrade. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | CREATE TABLE IF NOT EXISTS Agents_ConfigHistory ( | +| | ID VARCHAR(26) PRIMARY KEY, | +| | Config TEXT NOT NULL, | +| | CreateAt BIGINT NOT NULL, | +| | Active BOOLEAN NOT NULL DEFAULT false | +| | ); | +| | | +| | CREATE UNIQUE INDEX IF NOT EXISTS idx_agents_confighistory_active ON Agents_ConfigHistory(Active) WHERE Active = true; | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000004 introduces two new plugin-owned tables for user-authored prompts and per-user pin relationships. `LLM_CustomPrompts` (`ID TEXT PRIMARY KEY`, | +| | `CreatorID TEXT`, `Name TEXT`, `Description TEXT`, `Template TEXT`, `IsShared BOOLEAN`, `CreatedAt BIGINT`, `UpdatedAt BIGINT`, `DeletedAt BIGINT`) stores | +| | user-authored prompts with a soft-delete pattern via `DeletedAt`. `LLM_CustomPromptPins` (`UserID TEXT`, `PromptID TEXT`, composite | +| | `PRIMARY KEY (UserID, PromptID)`) stores per-user pin relationships. Both tables are empty on creation. No explicit foreign key is declared between | +| | `LLM_CustomPromptPins.PromptID` and `LLM_CustomPrompts.ID`, consistent with project conventions; orphaned pins are mitigated by the soft-delete pattern on | +| | `LLM_CustomPrompts` and expected application-level cleanup. The only locks acquired are `ACCESS EXCLUSIVE` on the new tables during `CREATE TABLE`, with no | +| | contention possible. Large-dataset testing was not performed for this migration as both tables are empty at creation with nothing to seed. The migrations are | +| | fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | CREATE TABLE IF NOT EXISTS LLM_CustomPrompts ( | +| | ID TEXT NOT NULL PRIMARY KEY, | +| | CreatorID TEXT NOT NULL, | +| | Name TEXT NOT NULL, | +| | Description TEXT NOT NULL DEFAULT '', | +| | Template TEXT NOT NULL DEFAULT '', | +| | IsShared BOOLEAN NOT NULL DEFAULT FALSE, | +| | CreatedAt BIGINT NOT NULL DEFAULT 0, | +| | UpdatedAt BIGINT NOT NULL DEFAULT 0, | +| | DeletedAt BIGINT NOT NULL DEFAULT 0 | +| | ); | +| | | +| | CREATE TABLE IF NOT EXISTS LLM_CustomPromptPins ( | +| | UserID TEXT NOT NULL, | +| | PromptID TEXT NOT NULL, | +| | PRIMARY KEY (UserID, PromptID) | +| | ); | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 00e407a2c5962e3cc62c1bb6e856fadf84e623fa Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 11:05:39 +0300 Subject: [PATCH 70/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 75 ++++++++++++++++++- 1 file changed, 71 insertions(+), 4 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index e0d5673a6b7..7fee16bb10c 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -15,10 +15,6 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | v11.7 | FIPS builds require a minimum of 14 characters for passwords, atmos/camo proxy configuration, and shared channel secrets. Shorter passwords for existing users | | | will no longer be valid and require a password reset. Non-FIPS builds are unaffected. | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | v11.7 includes Agents plugin v2. Please see `this guide`_ on how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported | -| | version path, the migrations that run automatically on first start of v2.0.0, the breaking changes and default-behavior flips that admins should know about | -| | before the upgrade window, and the verification steps to confirm the upgrade succeeded. | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to | | | ``WHERE Type = 'parent'``. Before creating the index, duplicate parent policy names are resolved by appending the policy ID to all but the oldest entry. This | | | enforces uniqueness of parent policy names and prevents future duplicates from being created. The migration takes < 1 second. The migration targets | @@ -184,6 +180,10 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | -- 3. Create the supporting index without blocking writes. | | | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_roles_scheme_id ON roles(schemeid); | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | v11.7 includes Agents plugin v2. Please see `this guide`_ on how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported | +| | version path, the migrations that run automatically on first start of v2.0.0, the breaking changes and default-behavior flips that admins should know about | +| | before the upgrade window, and the verification steps to confirm the upgrade succeeded. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Migration 000001 introduces a new plugin-owned key/value configuration table, ``Agents_System`` (``SKey VARCHAR(64) PRIMARY KEY``, ``SValue TEXT)``. This is a | | | brand-new table created from scratch with no existing rows. No existing tables, columns, or indexes are modified. The only lock acquired is ``ACCESS EXCLUSIVE`` | | | on the new table during ``CREATE TABLE``, which has no impact on concurrent operations as the table does not yet exist. Large-dataset testing was not performed | @@ -266,6 +266,73 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | PromptID TEXT NOT NULL, | | | PRIMARY KEY (UserID, PromptID) | | | ); | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000005 introduces a new plugin-owned table, `Agents_UserAgents`, for storing admin-configured agent definitions. The table includes: | +| | `ID VARCHAR(26) PRIMARY KEY`, `BotUserID VARCHAR(26)`, `CreatorID VARCHAR(26)`, `DisplayName VARCHAR(256)`, `Username VARCHAR(64)`, `ServiceID VARCHAR(36)`, | +| | `CustomInstructions TEXT`, `ChannelAccessLevel INT`, `ChannelIDs TEXT`, `UserAccessLevel INT`, `UserIDs TEXT`, `TeamIDs TEXT`, `AdminUserIDs TEXT`, | +| | `EnabledTools TEXT`, `AutoEnableNewMCPTools BOOLEAN`, `CreateAt BIGINT`, `UpdateAt BIGINT`, and `DeleteAt BIGINT`. The table is empty on creation. Three | +| | secondary indexes are created alongside the table: `idx_useragents_creator` (partial on `CreatorID WHERE DeleteAt = 0`), `idx_useragents_active` (on `DeleteAt`),| +| | and `idx_useragents_bot_user_id_active` (partial unique on `BotUserID WHERE DeleteAt = 0`), enforcing one active agent per bot user while allowing soft-deleted | +| | rows to reuse a `BotUserID`. Plain `CREATE INDEX` (without `CONCURRENTLY`) is safe here as all indexes are built on a freshly-created empty table within the | +| | same transaction, and `CONCURRENTLY` would be incompatible with transactional execution. The only locks acquired are `ACCESS EXCLUSIVE` on the new table during | +| | `CREATE TABLE` and `CREATE INDEX`, with no contention possible. Large-dataset testing was not performed for this migration as the table is empty at creation | +| | and typical production population is bounded to a handful of admin-configured agents. The migrations are fully backwards-compatible and no database downtime | +| | is expected for this upgrade. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | CREATE TABLE IF NOT EXISTS Agents_UserAgents ( | +| | ID VARCHAR(26) PRIMARY KEY, | +| | BotUserID VARCHAR(26) NOT NULL, | +| | CreatorID VARCHAR(26) NOT NULL, | +| | DisplayName VARCHAR(256) NOT NULL DEFAULT '', | +| | Username VARCHAR(64) NOT NULL, | +| | ServiceID VARCHAR(36) NOT NULL, | +| | CustomInstructions TEXT NOT NULL DEFAULT '', | +| | ChannelAccessLevel INT NOT NULL DEFAULT 0, | +| | ChannelIDs TEXT NOT NULL DEFAULT '[]', | +| | UserAccessLevel INT NOT NULL DEFAULT 0, | +| | UserIDs TEXT NOT NULL DEFAULT '[]', | +| | TeamIDs TEXT NOT NULL DEFAULT '[]', | +| | AdminUserIDs TEXT NOT NULL DEFAULT '[]', | +| | EnabledTools TEXT NOT NULL DEFAULT '[]', | +| | AutoEnableNewMCPTools BOOLEAN NOT NULL DEFAULT false, | +| | CreateAt BIGINT NOT NULL, | +| | UpdateAt BIGINT NOT NULL, | +| | DeleteAt BIGINT NOT NULL DEFAULT 0 | +| | ); | +| | | +| | CREATE INDEX IF NOT EXISTS idx_useragents_creator ON Agents_UserAgents(CreatorID) WHERE DeleteAt = 0; | +| | CREATE INDEX IF NOT EXISTS idx_useragents_active ON Agents_UserAgents(DeleteAt); | +| | CREATE UNIQUE INDEX IF NOT EXISTS idx_useragents_bot_user_id_active ON Agents_UserAgents(BotUserID) WHERE DeleteAt = 0; | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000006 adds 8 new columns to the existing `Agents_UserAgents` table (introduced in 000005): `Model VARCHAR(512)`, `EnableVision BOOLEAN`, | +| | `DisableTools BOOLEAN`, `EnabledNativeTools TEXT`, `ReasoningEnabled BOOLEAN`, `ReasoningEffort VARCHAR(32)`, `ThinkingBudget INT`, and | +| | `StructuredOutputEnabled BOOLEAN` — all `NOT NULL` with explicit constant defaults. All 8 columns are added in a single `ALTER TABLE` statement, sharing one | +| | `ACCESS EXCLUSIVE` lock acquisition; on PostgreSQL 11+ this is metadata-only and constant-time with no table rewrite. A follow-up `UPDATE` backfills existing | +| | live rows (`WHERE DeleteAt = 0`) to explicitly set `EnableVision = false`, `DisableTools = false`, and `ReasoningEnabled = true` to match prior implicit | +| | defaults. The `UPDATE` acquires a `ROW EXCLUSIVE` lock and permits concurrent `SELECT`s; impact is negligible as `Agents_UserAgents` is an admin-managed table | +| | bounded to typically tens of rows. Large-dataset testing was not performed for this migration given the bounded, admin-configured nature of the table. The | +| | migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | ALTER TABLE Agents_UserAgents | +| | ADD COLUMN IF NOT EXISTS Model VARCHAR(512) NOT NULL DEFAULT '', | +| | ADD COLUMN IF NOT EXISTS EnableVision BOOLEAN NOT NULL DEFAULT false, | +| | ADD COLUMN IF NOT EXISTS DisableTools BOOLEAN NOT NULL DEFAULT false, | +| | ADD COLUMN IF NOT EXISTS EnabledNativeTools TEXT NOT NULL DEFAULT '[]', | +| | ADD COLUMN IF NOT EXISTS ReasoningEnabled BOOLEAN NOT NULL DEFAULT true, | +| | ADD COLUMN IF NOT EXISTS ReasoningEffort VARCHAR(32) NOT NULL DEFAULT '', | +| | ADD COLUMN IF NOT EXISTS ThinkingBudget INT NOT NULL DEFAULT 0, | +| | ADD COLUMN IF NOT EXISTS StructuredOutputEnabled BOOLEAN NOT NULL DEFAULT false; | +| | | +| | -- Backfill existing rows to match prior implicit defaults (vision off, tools on, reasoning on). | +| | UPDATE Agents_UserAgents SET | +| | EnableVision = false, | +| | DisableTools = false, | +| | ReasoningEnabled = true | +| | WHERE DeleteAt = 0; | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 24c4c38428a695f62ffb507f07796005aa2d1731 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 11:07:20 +0300 Subject: [PATCH 71/83] Update important-upgrade-notes.rst --- source/administration-guide/upgrade/important-upgrade-notes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 7fee16bb10c..44ac8c57810 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -195,7 +195,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | CREATE TABLE IF NOT EXISTS Agents_System ( | | | SKey VARCHAR(64) PRIMARY KEY, | | | SValue TEXT | -| | ); +| | ); | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | Migration 000002 introduces a new plugin-owned table, `LLM_PostMeta` (`RootPostID TEXT PRIMARY KEY`, `Title TEXT NOT NULL`), to store post metadata. This is a | | | brand-new table created from scratch with no existing rows. Additionally, this migration defensively drops the legacy FK constraint `llm_threads_rootpostid_fkey`| From d31a93462c43f3cb1588d19e01f0f827dc646678 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 11:18:21 +0300 Subject: [PATCH 72/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 99 ++++++++++++++++--- 1 file changed, 83 insertions(+), 16 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 44ac8c57810..eac713cbf3b 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -197,15 +197,15 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | SValue TEXT | | | ); | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000002 introduces a new plugin-owned table, `LLM_PostMeta` (`RootPostID TEXT PRIMARY KEY`, `Title TEXT NOT NULL`), to store post metadata. This is a | -| | brand-new table created from scratch with no existing rows. Additionally, this migration defensively drops the legacy FK constraint `llm_threads_rootpostid_fkey`| -| | on `LLM_Threads` (if present) as a cleanup of an undesired constraint from older plugin versions. Both statements are guarded with `IF [NOT] EXISTS`. The only | -| | locks acquired are `ACCESS EXCLUSIVE` on the new `LLM_PostMeta` table during `CREATE TABLE` (no contention possible) and a brief `ACCESS EXCLUSIVE` on | -| | `LLM_Threads` during the `DROP CONSTRAINT` (metadata-only, negligible impact). Large-dataset testing was not performed for this migration as `LLM_PostMeta` is | -| | empty at creation and the FK drop is metadata-only regardless of `LLM_Threads` row count. Note: the down migration drops `LLM_PostMeta` but does not restore the | -| | dropped FK on `LLM_Threads` — re-adding a FK during a downgrade would itself be unsafe, and the constraint removal is intentional. Also note that `LLM_PostMeta` | -| | is a transitional table dropped in migration 000007. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL| -| | queries included are: | +| | Migration 000002 introduces a new plugin-owned table, ``LLM_PostMeta`` (``RootPostID TEXT PRIMARY KEY``, ``Title TEXT NOT NULL``), to store post metadata. This | +| | is a brand-new table created from scratch with no existing rows. Additionally, this migration defensively drops the legacy FK constraint | +| | ``llm_threads_rootpostid_fkey`` on ``LLM_Threads`` (if present) as a cleanup of an undesired constraint from older plugin versions. Both statements are guarded | +| | with ``IF [NOT] EXISTS``. The only locks acquired are `ACCESS EXCLUSIVE` on the new ``LLM_PostMeta`` table during ``CREATE TABLE`` (no contention possible) and | +| | a brief ``ACCESS EXCLUSIVE`` on ``LLM_Threads`` during the ``DROP CONSTRAINT`` (metadata-only, negligible impact). Large-dataset testing was not performed for | +| | this migration as ``LLM_PostMeta`` is empty at creation and the FK drop is metadata-only regardless of ``LLM_Threads`` row count. Note: the down migration drops | +| | ``LLM_PostMeta`` but does not restore the dropped FK on ``LLM_Threads`` — re-adding a FK during a downgrade would itself be unsafe, and the constraint removal | +| | is intentional. Also note that ``LLM_PostMeta`` is a transitional table dropped in migration 000007. The migrations are fully backwards-compatible and no | +| | database downtime is expected for this upgrade. The SQL queries included are: | | | | | | .. code-block:: sql | | | | @@ -219,13 +219,13 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | -- Clean up FK constraint from old LLM_Threads table if it exists | | | ALTER TABLE IF EXISTS LLM_Threads DROP CONSTRAINT IF EXISTS llm_threads_rootpostid_fkey; | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000003 introduces a new plugin-owned table, `Agents_ConfigHistory` (`ID VARCHAR(26) PRIMARY KEY`, `Config TEXT`, `CreateAt BIGINT`, `Active BOOLEAN`), | -| | for tracking configuration snapshots. This is a brand-new table created from scratch with no existing rows. A partial unique index, | -| | `idx_agents_confighistory_active`, is created on `Active WHERE Active = true`, enforcing at most one active config row at a time. Plain `CREATE UNIQUE INDEX` | -| | (without `CONCURRENTLY`) is safe here as the table is empty and unreachable by concurrent writers at creation time, and `CONCURRENTLY` is incompatible with | -| | transactional execution. The only locks acquired are `ACCESS EXCLUSIVE` during `CREATE TABLE` and `CREATE INDEX`, against an object no other session can see. | -| | Large-dataset testing was not performed for this migration as the table is empty at creation with nothing to seed. The migrations are fully backwards-compatible | -| | and no database downtime is expected for this upgrade. The SQL queries included are: | +| | Migration 000003 introduces a new plugin-owned table, ``Agents_ConfigHistory`` (``ID VARCHAR(26) PRIMARY KEY``, ``Config TEXT``, ``CreateAt BIGINT``, | +| | ``Active BOOLEAN``), for tracking configuration snapshots. This is a brand-new table created from scratch with no existing rows. A partial unique index, | +| | ``idx_agents_confighistory_active``, is created on ``Active WHERE Active = true``, enforcing at most one active config row at a time. Plain | +| | ``CREATE UNIQUE INDEX`` (without ``CONCURRENTLY``) is safe here as the table is empty and unreachable by concurrent writers at creation time, and | +| | ``CONCURRENTLY`` is incompatible with transactional execution. The only locks acquired are ``ACCESS EXCLUSIVE`` during ``CREATE TABLE`` and ``CREATE INDEX``, | +| | against an object no other session can see. Large-dataset testing was not performed for this migration as the table is empty at creation with nothing to seed. | +| | The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | | | | | | .. code-block:: sql | | | | @@ -333,6 +333,73 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | DisableTools = false, | | | ReasoningEnabled = true | | | WHERE DeleteAt = 0; | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Migration 000007 introduces two new plugin-owned tables, `LLM_Conversations` and `LLM_Turns`, and retires `LLM_PostMeta` (introduced in 000002). | +| | `LLM_Conversations` (`ID TEXT PRIMARY KEY`, `UserID TEXT`, `BotID TEXT`, `ChannelID TEXT`, `RootPostID TEXT`, `Title TEXT`, `SystemPrompt TEXT`, | +| | `Operation TEXT`, `CreatedAt BIGINT`, `UpdatedAt BIGINT`, `DeleteAt BIGINT`) stores AI conversation records. `LLM_Turns` (`ID TEXT PRIMARY KEY`, | +| | `ConversationID TEXT`, `PostID TEXT`, `Role TEXT`, `Content JSONB`, `TokensIn BIGINT`, `TokensOut BIGINT`, `Sequence INTEGER`, `CreatedAt BIGINT`) stores | +| | individual turns within those conversations. Both tables are empty on creation. Four secondary indexes are created: `idx_llm_conversations_thread_bot_user` | +| | (partial unique on `(RootPostID, BotID, UserID) WHERE RootPostID IS NOT NULL AND DeleteAt = 0`), `idx_llm_conversations_userid` (partial on | +| | `(UserID, UpdatedAt DESC) WHERE DeleteAt = 0`), `idx_llm_turns_conversation_sequence` (unique on `(ConversationID, Sequence)`), and `idx_llm_turns_post` | +| | (partial on `(PostID) WHERE PostID IS NOT NULL`). Plain `CREATE INDEX` (without `CONCURRENTLY`) is safe as all indexes are built on freshly-created empty tables | +| | within the same transaction. A backfill `UPDATE` migrates titles from `LLM_PostMeta` into `LLM_Conversations` for existing installs; this is a no-op on fresh | +| | installs as both tables are empty at this point. `LLM_PostMeta` is then dropped — any open transactions still referencing that table will block the `DROP` | +| | until they finish. Plugin deployments must be upgraded atomically with this migration, as older plugin code querying `LLM_PostMeta` after this migration has | +| | applied will encounter "relation does not exist" errors. Large-dataset testing was not performed for this migration as all new tables are empty and | +| | `LLM_PostMeta` is bounded by AI thread count. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL | +| | queries included are: | +| | | +| | .. code-block:: sql | +| | | +| | CREATE TABLE IF NOT EXISTS LLM_Conversations ( | +| | ID TEXT PRIMARY KEY, | +| | UserID TEXT NOT NULL, | +| | BotID TEXT NOT NULL, | +| | ChannelID TEXT, | +| | RootPostID TEXT, | +| | Title TEXT NOT NULL DEFAULT '', | +| | SystemPrompt TEXT NOT NULL DEFAULT '', | +| | Operation TEXT NOT NULL DEFAULT '', | +| | CreatedAt BIGINT NOT NULL, | +| | UpdatedAt BIGINT NOT NULL, | +| | DeleteAt BIGINT NOT NULL DEFAULT 0 | +| | ); | +| | | +| | CREATE UNIQUE INDEX IF NOT EXISTS idx_llm_conversations_thread_bot_user | +| | ON LLM_Conversations(RootPostID, BotID, UserID) | +| | WHERE RootPostID IS NOT NULL AND DeleteAt = 0; | +| | | +| | CREATE INDEX IF NOT EXISTS idx_llm_conversations_userid | +| | ON LLM_Conversations(UserID, UpdatedAt DESC) WHERE DeleteAt = 0; | +| | | +| | CREATE TABLE IF NOT EXISTS LLM_Turns ( | +| | ID TEXT PRIMARY KEY, | +| | ConversationID TEXT NOT NULL, | +| | PostID TEXT, | +| | Role TEXT NOT NULL, | +| | Content JSONB NOT NULL, | +| | TokensIn BIGINT NOT NULL DEFAULT 0, | +| | TokensOut BIGINT NOT NULL DEFAULT 0, | +| | Sequence INTEGER NOT NULL, | +| | CreatedAt BIGINT NOT NULL | +| | ); | +| | | +| | CREATE UNIQUE INDEX IF NOT EXISTS idx_llm_turns_conversation_sequence | +| | ON LLM_Turns(ConversationID, Sequence); | +| | | +| | CREATE INDEX IF NOT EXISTS idx_llm_turns_post | +| | ON LLM_Turns(PostID) WHERE PostID IS NOT NULL; | +| | | +| | -- Backfill titles from LLM_PostMeta into LLM_Conversations for existing installs. | +| | -- No-op on fresh installs since both tables are empty at this point. | +| | UPDATE LLM_Conversations | +| | SET Title = pm.Title, | +| | UpdatedAt = EXTRACT(EPOCH FROM NOW())::BIGINT * 1000 | +| | FROM LLM_PostMeta pm | +| | WHERE LLM_Conversations.RootPostID = pm.RootPostID | +| | AND (LLM_Conversations.Title = '' OR LLM_Conversations.Title IS NULL); | +| | | +| | DROP TABLE IF EXISTS LLM_PostMeta; | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 9e45f46f70651bae62bc05e91d450d4e75ae5fcf Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 11:24:36 +0300 Subject: [PATCH 73/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index eac713cbf3b..f4c1c1edf42 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -238,13 +238,13 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | | | | CREATE UNIQUE INDEX IF NOT EXISTS idx_agents_confighistory_active ON Agents_ConfigHistory(Active) WHERE Active = true; | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000004 introduces two new plugin-owned tables for user-authored prompts and per-user pin relationships. `LLM_CustomPrompts` (`ID TEXT PRIMARY KEY`, | -| | `CreatorID TEXT`, `Name TEXT`, `Description TEXT`, `Template TEXT`, `IsShared BOOLEAN`, `CreatedAt BIGINT`, `UpdatedAt BIGINT`, `DeletedAt BIGINT`) stores | -| | user-authored prompts with a soft-delete pattern via `DeletedAt`. `LLM_CustomPromptPins` (`UserID TEXT`, `PromptID TEXT`, composite | -| | `PRIMARY KEY (UserID, PromptID)`) stores per-user pin relationships. Both tables are empty on creation. No explicit foreign key is declared between | -| | `LLM_CustomPromptPins.PromptID` and `LLM_CustomPrompts.ID`, consistent with project conventions; orphaned pins are mitigated by the soft-delete pattern on | -| | `LLM_CustomPrompts` and expected application-level cleanup. The only locks acquired are `ACCESS EXCLUSIVE` on the new tables during `CREATE TABLE`, with no | -| | contention possible. Large-dataset testing was not performed for this migration as both tables are empty at creation with nothing to seed. The migrations are | +| | Migration 000004 introduces two new plugin-owned tables for user-authored prompts and per-user pin relationships. ``LLM_CustomPrompts`` (``ID TEXT PRIMARY KEY``,| +| | ``CreatorID TEXT``, ``Name TEXT``, ``Description TEXT``, ``Template TEXT``, ``IsShared BOOLEAN``, ``CreatedAt BIGINT``, ``UpdatedAt BIGINT``, | +| | ``DeletedAt BIGINT``) stores user-authored prompts with a soft-delete pattern via ``DeletedAt``. ``LLM_CustomPromptPins`` (``UserID TEXT``, ``PromptID TEXT``, | +| | composite ``PRIMARY KEY (UserID, PromptID)``) stores per-user pin relationships. Both tables are empty on creation. No explicit foreign key is declared between | +| | ``LLM_CustomPromptPins.PromptID`` and ``LLM_CustomPrompts.ID``, consistent with project conventions; orphaned pins are mitigated by the soft-delete pattern on | +| | ``LLM_CustomPrompts`` and expected application-level cleanup. The only locks acquired are ``ACCESS EXCLUSIVE`` on the new tables during ``CREATE TABLE``, with | +| | no contention possible. Large-dataset testing was not performed for this migration as both tables are empty at creation with nothing to seed. The migrations are | | | fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | | | | | | .. code-block:: sql | @@ -267,17 +267,17 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | PRIMARY KEY (UserID, PromptID) | | | ); | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000005 introduces a new plugin-owned table, `Agents_UserAgents`, for storing admin-configured agent definitions. The table includes: | -| | `ID VARCHAR(26) PRIMARY KEY`, `BotUserID VARCHAR(26)`, `CreatorID VARCHAR(26)`, `DisplayName VARCHAR(256)`, `Username VARCHAR(64)`, `ServiceID VARCHAR(36)`, | -| | `CustomInstructions TEXT`, `ChannelAccessLevel INT`, `ChannelIDs TEXT`, `UserAccessLevel INT`, `UserIDs TEXT`, `TeamIDs TEXT`, `AdminUserIDs TEXT`, | -| | `EnabledTools TEXT`, `AutoEnableNewMCPTools BOOLEAN`, `CreateAt BIGINT`, `UpdateAt BIGINT`, and `DeleteAt BIGINT`. The table is empty on creation. Three | -| | secondary indexes are created alongside the table: `idx_useragents_creator` (partial on `CreatorID WHERE DeleteAt = 0`), `idx_useragents_active` (on `DeleteAt`),| -| | and `idx_useragents_bot_user_id_active` (partial unique on `BotUserID WHERE DeleteAt = 0`), enforcing one active agent per bot user while allowing soft-deleted | -| | rows to reuse a `BotUserID`. Plain `CREATE INDEX` (without `CONCURRENTLY`) is safe here as all indexes are built on a freshly-created empty table within the | -| | same transaction, and `CONCURRENTLY` would be incompatible with transactional execution. The only locks acquired are `ACCESS EXCLUSIVE` on the new table during | -| | `CREATE TABLE` and `CREATE INDEX`, with no contention possible. Large-dataset testing was not performed for this migration as the table is empty at creation | -| | and typical production population is bounded to a handful of admin-configured agents. The migrations are fully backwards-compatible and no database downtime | -| | is expected for this upgrade. The SQL queries included are: | +| | Migration 000005 introduces a new plugin-owned table, ``Agents_UserAgents``, for storing admin-configured agent definitions. The table includes: | +| | ``ID VARCHAR(26) PRIMARY KEY``, ``BotUserID VARCHAR(26)``, ``CreatorID VARCHAR(26)``, ``DisplayName VARCHAR(256)``, ``Username VARCHAR(64)``, | +| | ``ServiceID VARCHAR(36)``, ``CustomInstructions TEXT``, ``ChannelAccessLevel INT``, ``ChannelIDs TEXT``, ``UserAccessLevel INT``, ``UserIDs TEXT``, | +| | ``TeamIDs TEXT``, ``AdminUserIDs TEXT``, ``EnabledTools TEXT``, ``AutoEnableNewMCPTools BOOLEAN``, ``CreateAt BIGINT``, ``UpdateAt BIGINT``, and | +| | ``DeleteAt BIGINT``. The table is empty on creation. Three secondary indexes are created alongside the table: ``idx_useragents_creator`` (partial on | +| | ``BotUserID WHERE DeleteAt = 0``), enforcing one active agent per bot user while allowing soft-deleted rows to reuse a ``BotUserID``. Plain ``CREATE INDEX`` | +| | (without ``CONCURRENTLY``) is safe here as all indexes are built on a freshly-created empty table within the same transaction, and ``CONCURRENTLY`` would be | +| | incompatible with transactional execution. The only locks acquired are ``ACCESS EXCLUSIVE`` on the new table during ``CREATE TABLE`` and ``CREATE INDEX``, with | +| | no contention possible. Large-dataset testing was not performed for this migration as the table is empty at creation and typical production population is | +| | bounded to a handful of admin-configured agents. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL | +| | queries included are: | | | | | | .. code-block:: sql | | | | From 134f57fecb06bf786c9b574475d2320181be1e08 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 11:27:48 +0300 Subject: [PATCH 74/83] Update important-upgrade-notes.rst --- source/administration-guide/upgrade/important-upgrade-notes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index f4c1c1edf42..45f68d751f0 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -200,7 +200,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | Migration 000002 introduces a new plugin-owned table, ``LLM_PostMeta`` (``RootPostID TEXT PRIMARY KEY``, ``Title TEXT NOT NULL``), to store post metadata. This | | | is a brand-new table created from scratch with no existing rows. Additionally, this migration defensively drops the legacy FK constraint | | | ``llm_threads_rootpostid_fkey`` on ``LLM_Threads`` (if present) as a cleanup of an undesired constraint from older plugin versions. Both statements are guarded | -| | with ``IF [NOT] EXISTS``. The only locks acquired are `ACCESS EXCLUSIVE` on the new ``LLM_PostMeta`` table during ``CREATE TABLE`` (no contention possible) and | +| | with ``IF [NOT] EXISTS``. The only locks acquired are ``ACCESS EXCLUSIVE`` on the new ``LLM_PostMeta`` table during ``CREATE TABLE`` (no contention possible) and| | | a brief ``ACCESS EXCLUSIVE`` on ``LLM_Threads`` during the ``DROP CONSTRAINT`` (metadata-only, negligible impact). Large-dataset testing was not performed for | | | this migration as ``LLM_PostMeta`` is empty at creation and the FK drop is metadata-only regardless of ``LLM_Threads`` row count. Note: the down migration drops | | | ``LLM_PostMeta`` but does not restore the dropped FK on ``LLM_Threads`` — re-adding a FK during a downgrade would itself be unsafe, and the constraint removal | From 4365e5f21acc8b127f73f165c9d7fa6198e06c87 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 11:29:36 +0300 Subject: [PATCH 75/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index c6401bb96a8..ad23ce30d05 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -29,6 +29,13 @@ Platform and OS scope reflects reported and tested environments and may not repr - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. - The ``PropertyFields`` and ``PropertyValues`` tables were modified, and a new ``Views`` table was created. - Scoped the ``role_updated`` WebSocket events to the affected team/channel instead of broadcasting globally. + - Created a new ``Agents_System`` key/value configuration table for the plugin. + - Created a new ``LLM_PostMeta`` table for post metadata, and removed the legacy ``llm_threads_rootpostid_fkey`` foreign key constraint from ``LLM_Threads`` if present. + - Created a new ``Agents_ConfigHistory`` table for tracking configuration snapshots, with a partial unique index enforcing at most one active config row at a time. + - Created two new tables, ``LLM_CustomPrompts`` and ``LLM_CustomPromptPins``, for user-authored prompts and per-user pin relationships. + - Created a new ``Agents_UserAgents`` table for admin-configured agent definitions, with three secondary indexes including a partial unique index enforcing one active agent per bot user. + - Added eight new columns (``Model``, ``EnableVision``, ``DisableTools``, ``EnabledNativeTools``, ``ReasoningEnabled``, ``ReasoningEffort``, ``ThinkingBudget``, ``StructuredOutputEnabled``) to the ``Agents_UserAgents`` table. + - Created two new tables, ``LLM_Conversations`` and ``LLM_Turns``, for storing AI conversation records and their individual turns, and dropped the transitional ``LLM_PostMeta`` table. #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. From 6d1bfd5b006d03cc78cac855080fd9d57d813cde Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 14:44:24 +0300 Subject: [PATCH 76/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 45f68d751f0..af9b6ac5e0d 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -306,14 +306,14 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | CREATE INDEX IF NOT EXISTS idx_useragents_active ON Agents_UserAgents(DeleteAt); | | | CREATE UNIQUE INDEX IF NOT EXISTS idx_useragents_bot_user_id_active ON Agents_UserAgents(BotUserID) WHERE DeleteAt = 0; | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000006 adds 8 new columns to the existing `Agents_UserAgents` table (introduced in 000005): `Model VARCHAR(512)`, `EnableVision BOOLEAN`, | -| | `DisableTools BOOLEAN`, `EnabledNativeTools TEXT`, `ReasoningEnabled BOOLEAN`, `ReasoningEffort VARCHAR(32)`, `ThinkingBudget INT`, and | -| | `StructuredOutputEnabled BOOLEAN` — all `NOT NULL` with explicit constant defaults. All 8 columns are added in a single `ALTER TABLE` statement, sharing one | -| | `ACCESS EXCLUSIVE` lock acquisition; on PostgreSQL 11+ this is metadata-only and constant-time with no table rewrite. A follow-up `UPDATE` backfills existing | -| | live rows (`WHERE DeleteAt = 0`) to explicitly set `EnableVision = false`, `DisableTools = false`, and `ReasoningEnabled = true` to match prior implicit | -| | defaults. The `UPDATE` acquires a `ROW EXCLUSIVE` lock and permits concurrent `SELECT`s; impact is negligible as `Agents_UserAgents` is an admin-managed table | -| | bounded to typically tens of rows. Large-dataset testing was not performed for this migration given the bounded, admin-configured nature of the table. The | -| | migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | +| | Migration 000006 adds 8 new columns to the existing ``Agents_UserAgents`` table (introduced in 000005): ``Model VARCHAR(512)``, ``EnableVision BOOLEAN``, | +| | ``DisableTools BOOLEAN``, ``EnabledNativeTools TEXT``, ``ReasoningEnabled BOOLEAN``, ``ReasoningEffort VARCHAR(32)``, ``ThinkingBudget INT``, and | +| | ``StructuredOutputEnabled BOOLEAN`` — all ``NOT NULL`` with explicit constant defaults. All 8 columns are added in a single ``ALTER TABLE`` statement, sharing | +| | one ``ACCESS EXCLUSIVE`` lock acquisition; on PostgreSQL 11+ this is metadata-only and constant-time with no table rewrite. A follow-up ``UPDATE`` backfills | +| | existing live rows (``WHERE DeleteAt = 0``) to explicitly set ``EnableVision = false``, ``DisableTools = false``, and ``ReasoningEnabled = true`` to match | +| | prior implicit defaults. The ``UPDATE`` acquires a ``ROW EXCLUSIVE`` lock and permits concurrent ``SELECT``s; impact is negligible as ``Agents_UserAgents`` is | +| | an admin-managed table bounded to typically tens of rows. Large-dataset testing was not performed for this migration given the bounded, admin-configured nature | +| | of the table. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | | | | | | .. code-block:: sql | | | | @@ -334,20 +334,20 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | ReasoningEnabled = true | | | WHERE DeleteAt = 0; | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000007 introduces two new plugin-owned tables, `LLM_Conversations` and `LLM_Turns`, and retires `LLM_PostMeta` (introduced in 000002). | -| | `LLM_Conversations` (`ID TEXT PRIMARY KEY`, `UserID TEXT`, `BotID TEXT`, `ChannelID TEXT`, `RootPostID TEXT`, `Title TEXT`, `SystemPrompt TEXT`, | -| | `Operation TEXT`, `CreatedAt BIGINT`, `UpdatedAt BIGINT`, `DeleteAt BIGINT`) stores AI conversation records. `LLM_Turns` (`ID TEXT PRIMARY KEY`, | -| | `ConversationID TEXT`, `PostID TEXT`, `Role TEXT`, `Content JSONB`, `TokensIn BIGINT`, `TokensOut BIGINT`, `Sequence INTEGER`, `CreatedAt BIGINT`) stores | -| | individual turns within those conversations. Both tables are empty on creation. Four secondary indexes are created: `idx_llm_conversations_thread_bot_user` | -| | (partial unique on `(RootPostID, BotID, UserID) WHERE RootPostID IS NOT NULL AND DeleteAt = 0`), `idx_llm_conversations_userid` (partial on | -| | `(UserID, UpdatedAt DESC) WHERE DeleteAt = 0`), `idx_llm_turns_conversation_sequence` (unique on `(ConversationID, Sequence)`), and `idx_llm_turns_post` | -| | (partial on `(PostID) WHERE PostID IS NOT NULL`). Plain `CREATE INDEX` (without `CONCURRENTLY`) is safe as all indexes are built on freshly-created empty tables | -| | within the same transaction. A backfill `UPDATE` migrates titles from `LLM_PostMeta` into `LLM_Conversations` for existing installs; this is a no-op on fresh | -| | installs as both tables are empty at this point. `LLM_PostMeta` is then dropped — any open transactions still referencing that table will block the `DROP` | -| | until they finish. Plugin deployments must be upgraded atomically with this migration, as older plugin code querying `LLM_PostMeta` after this migration has | -| | applied will encounter "relation does not exist" errors. Large-dataset testing was not performed for this migration as all new tables are empty and | -| | `LLM_PostMeta` is bounded by AI thread count. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL | -| | queries included are: | +| | Migration 000007 introduces two new plugin-owned tables, ``LLM_Conversations`` and ``LLM_Turns``, and retires ``LLM_PostMeta`` (introduced in 000002). | +| | ``LLM_Conversations`` (``ID TEXT PRIMARY KEY``, ``UserID TEXT``, ``BotID TEXT``, ``ChannelID TEXT``, ``RootPostID TEXT``, ``Title TEXT``, ``SystemPrompt TEXT``, | +| | ``Operation TEXT``, ``CreatedAt BIGINT``, ``UpdatedAt BIGINT``, ``DeleteAt BIGINT``) stores AI conversation records. ``LLM_Turns`` (``ID TEXT PRIMARY KEY``, | +| | ``ConversationID TEXT``, ``PostID TEXT``, ``Role TEXT``, ``Content JSONB``, ``TokensIn BIGINT``, ``TokensOut BIGINT``, ``Sequence INTEGER``, | +| | ``CreatedAt BIGINT``) stores individual turns within those conversations. Both tables are empty on creation. Four secondary indexes are created: | +| | ``idx_llm_conversations_thread_bot_user`` (partial unique on ``(RootPostID, BotID, UserID) WHERE RootPostID IS NOT NULL AND DeleteAt = 0``), | +| | ``idx_llm_conversations_userid`` (partial on ``(UserID, UpdatedAt DESC) WHERE DeleteAt = 0``), ``idx_llm_turns_conversation_sequence`` (unique on | +| | ``(ConversationID, Sequence)``), and ``idx_llm_turns_post`` (partial on ``(PostID) WHERE PostID IS NOT NULL``). Plain ``CREATE INDEX`` | +| | (without ``CONCURRENTLY``) is safe as all indexes are built on freshly-created empty tables within the same transaction. A backfill ``UPDATE`` migrates titles | +| | from ``LLM_PostMeta`` into ``LLM_Conversations`` for existing installs; this is a no-op on fresh installs as both tables are empty at this point. | +| | ``LLM_PostMeta`` is then dropped — any open transactions still referencing that table will block the ``DROP`` until they finish. Plugin deployments must be | +| | upgraded atomically with this migration, as older plugin code querying ``LLM_PostMeta`` after this migration has applied will encounter "relation does not | +| | exist" errors. Large-dataset testing was not performed for this migration as all new tables are empty and ``LLM_PostMeta`` is bounded by AI thread count. The | +| | migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | | | | | | .. code-block:: sql | | | | From 0f1d9e7e552a8f9d0cde9b61a1c7b7dd52683574 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Thu, 7 May 2026 14:51:34 +0300 Subject: [PATCH 77/83] Update important-upgrade-notes.rst --- source/administration-guide/upgrade/important-upgrade-notes.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index af9b6ac5e0d..219c9c488fc 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -311,7 +311,7 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | ``StructuredOutputEnabled BOOLEAN`` — all ``NOT NULL`` with explicit constant defaults. All 8 columns are added in a single ``ALTER TABLE`` statement, sharing | | | one ``ACCESS EXCLUSIVE`` lock acquisition; on PostgreSQL 11+ this is metadata-only and constant-time with no table rewrite. A follow-up ``UPDATE`` backfills | | | existing live rows (``WHERE DeleteAt = 0``) to explicitly set ``EnableVision = false``, ``DisableTools = false``, and ``ReasoningEnabled = true`` to match | -| | prior implicit defaults. The ``UPDATE`` acquires a ``ROW EXCLUSIVE`` lock and permits concurrent ``SELECT``s; impact is negligible as ``Agents_UserAgents`` is | +| | prior implicit defaults. The ``UPDATE`` acquires a ``ROW EXCLUSIVE`` lock and permits concurrent ``SELECTs``; impact is negligible as ``Agents_UserAgents`` is | | | an admin-managed table bounded to typically tens of rows. Large-dataset testing was not performed for this migration given the bounded, admin-configured nature | | | of the table. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | | | | From a73bcefe42c1645dd63bd7d857efffefb989189f Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 8 May 2026 10:57:08 +0300 Subject: [PATCH 78/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 217 ------------------ 1 file changed, 217 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index 219c9c488fc..d9358512e33 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -183,223 +183,6 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | v11.7 includes Agents plugin v2. Please see `this guide`_ on how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported | | | version path, the migrations that run automatically on first start of v2.0.0, the breaking changes and default-behavior flips that admins should know about | | | before the upgrade window, and the verification steps to confirm the upgrade succeeded. | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000001 introduces a new plugin-owned key/value configuration table, ``Agents_System`` (``SKey VARCHAR(64) PRIMARY KEY``, ``SValue TEXT)``. This is a | -| | brand-new table created from scratch with no existing rows. No existing tables, columns, or indexes are modified. The only lock acquired is ``ACCESS EXCLUSIVE`` | -| | on the new table during ``CREATE TABLE``, which has no impact on concurrent operations as the table does not yet exist. Large-dataset testing was not performed | -| | for this migration as the table is empty at creation with nothing to seed. The migrations are fully backwards-compatible and no database downtime is expected | -| | for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | CREATE TABLE IF NOT EXISTS Agents_System ( | -| | SKey VARCHAR(64) PRIMARY KEY, | -| | SValue TEXT | -| | ); | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000002 introduces a new plugin-owned table, ``LLM_PostMeta`` (``RootPostID TEXT PRIMARY KEY``, ``Title TEXT NOT NULL``), to store post metadata. This | -| | is a brand-new table created from scratch with no existing rows. Additionally, this migration defensively drops the legacy FK constraint | -| | ``llm_threads_rootpostid_fkey`` on ``LLM_Threads`` (if present) as a cleanup of an undesired constraint from older plugin versions. Both statements are guarded | -| | with ``IF [NOT] EXISTS``. The only locks acquired are ``ACCESS EXCLUSIVE`` on the new ``LLM_PostMeta`` table during ``CREATE TABLE`` (no contention possible) and| -| | a brief ``ACCESS EXCLUSIVE`` on ``LLM_Threads`` during the ``DROP CONSTRAINT`` (metadata-only, negligible impact). Large-dataset testing was not performed for | -| | this migration as ``LLM_PostMeta`` is empty at creation and the FK drop is metadata-only regardless of ``LLM_Threads`` row count. Note: the down migration drops | -| | ``LLM_PostMeta`` but does not restore the dropped FK on ``LLM_Threads`` — re-adding a FK during a downgrade would itself be unsafe, and the constraint removal | -| | is intentional. Also note that ``LLM_PostMeta`` is a transitional table dropped in migration 000007. The migrations are fully backwards-compatible and no | -| | database downtime is expected for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | -- No foreign keys: consistent with Mattermost conventions. | -| | -- IF NOT EXISTS is safe for existing installs that already have this table. | -| | CREATE TABLE IF NOT EXISTS LLM_PostMeta ( | -| | RootPostID TEXT NOT NULL PRIMARY KEY, | -| | Title TEXT NOT NULL | -| | ); | -| | | -| | -- Clean up FK constraint from old LLM_Threads table if it exists | -| | ALTER TABLE IF EXISTS LLM_Threads DROP CONSTRAINT IF EXISTS llm_threads_rootpostid_fkey; | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000003 introduces a new plugin-owned table, ``Agents_ConfigHistory`` (``ID VARCHAR(26) PRIMARY KEY``, ``Config TEXT``, ``CreateAt BIGINT``, | -| | ``Active BOOLEAN``), for tracking configuration snapshots. This is a brand-new table created from scratch with no existing rows. A partial unique index, | -| | ``idx_agents_confighistory_active``, is created on ``Active WHERE Active = true``, enforcing at most one active config row at a time. Plain | -| | ``CREATE UNIQUE INDEX`` (without ``CONCURRENTLY``) is safe here as the table is empty and unreachable by concurrent writers at creation time, and | -| | ``CONCURRENTLY`` is incompatible with transactional execution. The only locks acquired are ``ACCESS EXCLUSIVE`` during ``CREATE TABLE`` and ``CREATE INDEX``, | -| | against an object no other session can see. Large-dataset testing was not performed for this migration as the table is empty at creation with nothing to seed. | -| | The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | CREATE TABLE IF NOT EXISTS Agents_ConfigHistory ( | -| | ID VARCHAR(26) PRIMARY KEY, | -| | Config TEXT NOT NULL, | -| | CreateAt BIGINT NOT NULL, | -| | Active BOOLEAN NOT NULL DEFAULT false | -| | ); | -| | | -| | CREATE UNIQUE INDEX IF NOT EXISTS idx_agents_confighistory_active ON Agents_ConfigHistory(Active) WHERE Active = true; | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000004 introduces two new plugin-owned tables for user-authored prompts and per-user pin relationships. ``LLM_CustomPrompts`` (``ID TEXT PRIMARY KEY``,| -| | ``CreatorID TEXT``, ``Name TEXT``, ``Description TEXT``, ``Template TEXT``, ``IsShared BOOLEAN``, ``CreatedAt BIGINT``, ``UpdatedAt BIGINT``, | -| | ``DeletedAt BIGINT``) stores user-authored prompts with a soft-delete pattern via ``DeletedAt``. ``LLM_CustomPromptPins`` (``UserID TEXT``, ``PromptID TEXT``, | -| | composite ``PRIMARY KEY (UserID, PromptID)``) stores per-user pin relationships. Both tables are empty on creation. No explicit foreign key is declared between | -| | ``LLM_CustomPromptPins.PromptID`` and ``LLM_CustomPrompts.ID``, consistent with project conventions; orphaned pins are mitigated by the soft-delete pattern on | -| | ``LLM_CustomPrompts`` and expected application-level cleanup. The only locks acquired are ``ACCESS EXCLUSIVE`` on the new tables during ``CREATE TABLE``, with | -| | no contention possible. Large-dataset testing was not performed for this migration as both tables are empty at creation with nothing to seed. The migrations are | -| | fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | CREATE TABLE IF NOT EXISTS LLM_CustomPrompts ( | -| | ID TEXT NOT NULL PRIMARY KEY, | -| | CreatorID TEXT NOT NULL, | -| | Name TEXT NOT NULL, | -| | Description TEXT NOT NULL DEFAULT '', | -| | Template TEXT NOT NULL DEFAULT '', | -| | IsShared BOOLEAN NOT NULL DEFAULT FALSE, | -| | CreatedAt BIGINT NOT NULL DEFAULT 0, | -| | UpdatedAt BIGINT NOT NULL DEFAULT 0, | -| | DeletedAt BIGINT NOT NULL DEFAULT 0 | -| | ); | -| | | -| | CREATE TABLE IF NOT EXISTS LLM_CustomPromptPins ( | -| | UserID TEXT NOT NULL, | -| | PromptID TEXT NOT NULL, | -| | PRIMARY KEY (UserID, PromptID) | -| | ); | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000005 introduces a new plugin-owned table, ``Agents_UserAgents``, for storing admin-configured agent definitions. The table includes: | -| | ``ID VARCHAR(26) PRIMARY KEY``, ``BotUserID VARCHAR(26)``, ``CreatorID VARCHAR(26)``, ``DisplayName VARCHAR(256)``, ``Username VARCHAR(64)``, | -| | ``ServiceID VARCHAR(36)``, ``CustomInstructions TEXT``, ``ChannelAccessLevel INT``, ``ChannelIDs TEXT``, ``UserAccessLevel INT``, ``UserIDs TEXT``, | -| | ``TeamIDs TEXT``, ``AdminUserIDs TEXT``, ``EnabledTools TEXT``, ``AutoEnableNewMCPTools BOOLEAN``, ``CreateAt BIGINT``, ``UpdateAt BIGINT``, and | -| | ``DeleteAt BIGINT``. The table is empty on creation. Three secondary indexes are created alongside the table: ``idx_useragents_creator`` (partial on | -| | ``BotUserID WHERE DeleteAt = 0``), enforcing one active agent per bot user while allowing soft-deleted rows to reuse a ``BotUserID``. Plain ``CREATE INDEX`` | -| | (without ``CONCURRENTLY``) is safe here as all indexes are built on a freshly-created empty table within the same transaction, and ``CONCURRENTLY`` would be | -| | incompatible with transactional execution. The only locks acquired are ``ACCESS EXCLUSIVE`` on the new table during ``CREATE TABLE`` and ``CREATE INDEX``, with | -| | no contention possible. Large-dataset testing was not performed for this migration as the table is empty at creation and typical production population is | -| | bounded to a handful of admin-configured agents. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL | -| | queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | CREATE TABLE IF NOT EXISTS Agents_UserAgents ( | -| | ID VARCHAR(26) PRIMARY KEY, | -| | BotUserID VARCHAR(26) NOT NULL, | -| | CreatorID VARCHAR(26) NOT NULL, | -| | DisplayName VARCHAR(256) NOT NULL DEFAULT '', | -| | Username VARCHAR(64) NOT NULL, | -| | ServiceID VARCHAR(36) NOT NULL, | -| | CustomInstructions TEXT NOT NULL DEFAULT '', | -| | ChannelAccessLevel INT NOT NULL DEFAULT 0, | -| | ChannelIDs TEXT NOT NULL DEFAULT '[]', | -| | UserAccessLevel INT NOT NULL DEFAULT 0, | -| | UserIDs TEXT NOT NULL DEFAULT '[]', | -| | TeamIDs TEXT NOT NULL DEFAULT '[]', | -| | AdminUserIDs TEXT NOT NULL DEFAULT '[]', | -| | EnabledTools TEXT NOT NULL DEFAULT '[]', | -| | AutoEnableNewMCPTools BOOLEAN NOT NULL DEFAULT false, | -| | CreateAt BIGINT NOT NULL, | -| | UpdateAt BIGINT NOT NULL, | -| | DeleteAt BIGINT NOT NULL DEFAULT 0 | -| | ); | -| | | -| | CREATE INDEX IF NOT EXISTS idx_useragents_creator ON Agents_UserAgents(CreatorID) WHERE DeleteAt = 0; | -| | CREATE INDEX IF NOT EXISTS idx_useragents_active ON Agents_UserAgents(DeleteAt); | -| | CREATE UNIQUE INDEX IF NOT EXISTS idx_useragents_bot_user_id_active ON Agents_UserAgents(BotUserID) WHERE DeleteAt = 0; | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000006 adds 8 new columns to the existing ``Agents_UserAgents`` table (introduced in 000005): ``Model VARCHAR(512)``, ``EnableVision BOOLEAN``, | -| | ``DisableTools BOOLEAN``, ``EnabledNativeTools TEXT``, ``ReasoningEnabled BOOLEAN``, ``ReasoningEffort VARCHAR(32)``, ``ThinkingBudget INT``, and | -| | ``StructuredOutputEnabled BOOLEAN`` — all ``NOT NULL`` with explicit constant defaults. All 8 columns are added in a single ``ALTER TABLE`` statement, sharing | -| | one ``ACCESS EXCLUSIVE`` lock acquisition; on PostgreSQL 11+ this is metadata-only and constant-time with no table rewrite. A follow-up ``UPDATE`` backfills | -| | existing live rows (``WHERE DeleteAt = 0``) to explicitly set ``EnableVision = false``, ``DisableTools = false``, and ``ReasoningEnabled = true`` to match | -| | prior implicit defaults. The ``UPDATE`` acquires a ``ROW EXCLUSIVE`` lock and permits concurrent ``SELECTs``; impact is negligible as ``Agents_UserAgents`` is | -| | an admin-managed table bounded to typically tens of rows. Large-dataset testing was not performed for this migration given the bounded, admin-configured nature | -| | of the table. The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | ALTER TABLE Agents_UserAgents | -| | ADD COLUMN IF NOT EXISTS Model VARCHAR(512) NOT NULL DEFAULT '', | -| | ADD COLUMN IF NOT EXISTS EnableVision BOOLEAN NOT NULL DEFAULT false, | -| | ADD COLUMN IF NOT EXISTS DisableTools BOOLEAN NOT NULL DEFAULT false, | -| | ADD COLUMN IF NOT EXISTS EnabledNativeTools TEXT NOT NULL DEFAULT '[]', | -| | ADD COLUMN IF NOT EXISTS ReasoningEnabled BOOLEAN NOT NULL DEFAULT true, | -| | ADD COLUMN IF NOT EXISTS ReasoningEffort VARCHAR(32) NOT NULL DEFAULT '', | -| | ADD COLUMN IF NOT EXISTS ThinkingBudget INT NOT NULL DEFAULT 0, | -| | ADD COLUMN IF NOT EXISTS StructuredOutputEnabled BOOLEAN NOT NULL DEFAULT false; | -| | | -| | -- Backfill existing rows to match prior implicit defaults (vision off, tools on, reasoning on). | -| | UPDATE Agents_UserAgents SET | -| | EnableVision = false, | -| | DisableTools = false, | -| | ReasoningEnabled = true | -| | WHERE DeleteAt = 0; | -| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Migration 000007 introduces two new plugin-owned tables, ``LLM_Conversations`` and ``LLM_Turns``, and retires ``LLM_PostMeta`` (introduced in 000002). | -| | ``LLM_Conversations`` (``ID TEXT PRIMARY KEY``, ``UserID TEXT``, ``BotID TEXT``, ``ChannelID TEXT``, ``RootPostID TEXT``, ``Title TEXT``, ``SystemPrompt TEXT``, | -| | ``Operation TEXT``, ``CreatedAt BIGINT``, ``UpdatedAt BIGINT``, ``DeleteAt BIGINT``) stores AI conversation records. ``LLM_Turns`` (``ID TEXT PRIMARY KEY``, | -| | ``ConversationID TEXT``, ``PostID TEXT``, ``Role TEXT``, ``Content JSONB``, ``TokensIn BIGINT``, ``TokensOut BIGINT``, ``Sequence INTEGER``, | -| | ``CreatedAt BIGINT``) stores individual turns within those conversations. Both tables are empty on creation. Four secondary indexes are created: | -| | ``idx_llm_conversations_thread_bot_user`` (partial unique on ``(RootPostID, BotID, UserID) WHERE RootPostID IS NOT NULL AND DeleteAt = 0``), | -| | ``idx_llm_conversations_userid`` (partial on ``(UserID, UpdatedAt DESC) WHERE DeleteAt = 0``), ``idx_llm_turns_conversation_sequence`` (unique on | -| | ``(ConversationID, Sequence)``), and ``idx_llm_turns_post`` (partial on ``(PostID) WHERE PostID IS NOT NULL``). Plain ``CREATE INDEX`` | -| | (without ``CONCURRENTLY``) is safe as all indexes are built on freshly-created empty tables within the same transaction. A backfill ``UPDATE`` migrates titles | -| | from ``LLM_PostMeta`` into ``LLM_Conversations`` for existing installs; this is a no-op on fresh installs as both tables are empty at this point. | -| | ``LLM_PostMeta`` is then dropped — any open transactions still referencing that table will block the ``DROP`` until they finish. Plugin deployments must be | -| | upgraded atomically with this migration, as older plugin code querying ``LLM_PostMeta`` after this migration has applied will encounter "relation does not | -| | exist" errors. Large-dataset testing was not performed for this migration as all new tables are empty and ``LLM_PostMeta`` is bounded by AI thread count. The | -| | migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | CREATE TABLE IF NOT EXISTS LLM_Conversations ( | -| | ID TEXT PRIMARY KEY, | -| | UserID TEXT NOT NULL, | -| | BotID TEXT NOT NULL, | -| | ChannelID TEXT, | -| | RootPostID TEXT, | -| | Title TEXT NOT NULL DEFAULT '', | -| | SystemPrompt TEXT NOT NULL DEFAULT '', | -| | Operation TEXT NOT NULL DEFAULT '', | -| | CreatedAt BIGINT NOT NULL, | -| | UpdatedAt BIGINT NOT NULL, | -| | DeleteAt BIGINT NOT NULL DEFAULT 0 | -| | ); | -| | | -| | CREATE UNIQUE INDEX IF NOT EXISTS idx_llm_conversations_thread_bot_user | -| | ON LLM_Conversations(RootPostID, BotID, UserID) | -| | WHERE RootPostID IS NOT NULL AND DeleteAt = 0; | -| | | -| | CREATE INDEX IF NOT EXISTS idx_llm_conversations_userid | -| | ON LLM_Conversations(UserID, UpdatedAt DESC) WHERE DeleteAt = 0; | -| | | -| | CREATE TABLE IF NOT EXISTS LLM_Turns ( | -| | ID TEXT PRIMARY KEY, | -| | ConversationID TEXT NOT NULL, | -| | PostID TEXT, | -| | Role TEXT NOT NULL, | -| | Content JSONB NOT NULL, | -| | TokensIn BIGINT NOT NULL DEFAULT 0, | -| | TokensOut BIGINT NOT NULL DEFAULT 0, | -| | Sequence INTEGER NOT NULL, | -| | CreatedAt BIGINT NOT NULL | -| | ); | -| | | -| | CREATE UNIQUE INDEX IF NOT EXISTS idx_llm_turns_conversation_sequence | -| | ON LLM_Turns(ConversationID, Sequence); | -| | | -| | CREATE INDEX IF NOT EXISTS idx_llm_turns_post | -| | ON LLM_Turns(PostID) WHERE PostID IS NOT NULL; | -| | | -| | -- Backfill titles from LLM_PostMeta into LLM_Conversations for existing installs. | -| | -- No-op on fresh installs since both tables are empty at this point. | -| | UPDATE LLM_Conversations | -| | SET Title = pm.Title, | -| | UpdatedAt = EXTRACT(EPOCH FROM NOW())::BIGINT * 1000 | -| | FROM LLM_PostMeta pm | -| | WHERE LLM_Conversations.RootPostID = pm.RootPostID | -| | AND (LLM_Conversations.Title = '' OR LLM_Conversations.Title IS NULL); | -| | | -| | DROP TABLE IF EXISTS LLM_PostMeta; | +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v11.6 | Single-channel guests are no longer counted toward the primary licensed seat count and are permitted free up to a 1:1 ratio with licensed seats. A new stat card,| | | license row, and admin banner provide visibility into single-channel guest usage and overage warnings. | From 6a40c03b24c0cb303f51d1fcbf7d4aa527d5d1e3 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Fri, 8 May 2026 10:58:13 +0300 Subject: [PATCH 79/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index ad23ce30d05..c6401bb96a8 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -29,13 +29,6 @@ Platform and OS scope reflects reported and tested environments and may not repr - Added a new partial unique index (``idx_accesscontrolpolicies_name_type``) to the ``AccessControlPolicies`` table on (Name, Type) filtered to ``WHERE Type = 'parent'``. - The ``PropertyFields`` and ``PropertyValues`` tables were modified, and a new ``Views`` table was created. - Scoped the ``role_updated`` WebSocket events to the affected team/channel instead of broadcasting globally. - - Created a new ``Agents_System`` key/value configuration table for the plugin. - - Created a new ``LLM_PostMeta`` table for post metadata, and removed the legacy ``llm_threads_rootpostid_fkey`` foreign key constraint from ``LLM_Threads`` if present. - - Created a new ``Agents_ConfigHistory`` table for tracking configuration snapshots, with a partial unique index enforcing at most one active config row at a time. - - Created two new tables, ``LLM_CustomPrompts`` and ``LLM_CustomPromptPins``, for user-authored prompts and per-user pin relationships. - - Created a new ``Agents_UserAgents`` table for admin-configured agent definitions, with three secondary indexes including a partial unique index enforcing one active agent per bot user. - - Added eight new columns (``Model``, ``EnableVision``, ``DisableTools``, ``EnabledNativeTools``, ``ReasoningEnabled``, ``ReasoningEffort``, ``ThinkingBudget``, ``StructuredOutputEnabled``) to the ``Agents_UserAgents`` table. - - Created two new tables, ``LLM_Conversations`` and ``LLM_Turns``, for storing AI conversation records and their individual turns, and dropped the transitional ``LLM_PostMeta`` table. #### config.json New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. From 7092866c9b78599f770934f4ad43201a0ae97ae0 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 11 May 2026 09:55:52 +0300 Subject: [PATCH 80/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index c6401bb96a8..1409c696057 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -55,7 +55,7 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Pre-packaged GitHub plugin version [v2.7.0](https://github.com/mattermost/mattermost-plugin-github/releases/tag/v2.7.0). - Pre-packaged Jira plugin version [v4.6.0](https://github.com/mattermost/mattermost-plugin-jira/releases/tag/v4.6.0). - Pre-packaged Zoom plugin version [v1.13.0](https://github.com/mattermost/mattermost-plugin-zoom/releases/tag/v1.13.0). - - Pre-packaged Agents plugin version [v2.0.3](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.3). + - Pre-packaged [Agents](https://docs.mattermost.com/end-user-guide/agents.html) plugin version [v2.0.3](https://github.com/mattermost/mattermost-plugin-agents/releases/tag/v2.0.3). - Pre-packaged Playbooks plugin version [v2.8.1](https://github.com/mattermost/mattermost-plugin-playbooks/releases/tag/v2.8.1). - Message attachment footers now support full Markdown rendering, including bold, italic, links, and emoji. - Changed the **Browse Channels** modal and ``~channel`` autocomplete to prioritize channels with a matching display name. @@ -68,15 +68,15 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Added the ability to open channels in a separate popout window, with full channel and right-hand side functionality. - Dropped support for JS features required by browsers over three years old (reported on webapp and Safari browser). - Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. - - Added the ability to handle from which remotes a channel is shared from the channel settings user interface. + - Added the [ability to handle](https://docs.mattermost.com/administration-guide/onboard/connected-workspaces.html) from which remotes a channel is shared from the channel settings user interface. #### Administration - Updated dependency versions for server and public services. - Migrated access control policies from v0.2 to v0.3, replacing the wildcard action with explicit action types to support multi-action policies. - - Added team-level ABAC membership policies, allowing Team Admins to create and manage attribute-based access policies for private channels within their team directly from a new Membership Policies tab in the Team Settings Modal. - - Added permission policies to manage file attachment download/upload actions. + - Added [team-level](https://docs.mattermost.com/administration-guide/manage/admin/attribute-based-access-control.html) ABAC membership policies, allowing Team Admins to create and manage attribute-based access policies for private channels within their team directly from a new Membership Policies tab in the Team Settings Modal. + - Added [permission policies](https://docs.mattermost.com/administration-guide/manage/admin/attribute-based-access-control.html) to manage file attachment download/upload actions. - Policy editor is improved for "Multi Select" attribute types to use more intuitive operators. - - Added support for Elasticsearch v9 alongside v8. Elasticsearch v7 is no longer supported. + - Added support for [Elasticsearch v9](https://docs.mattermost.com/administration-guide/scale/enterprise-search.html#elasticsearch) alongside v8. Elasticsearch v7 is no longer supported. - Fail-fast requests are now done to the Elasticsearch/Opensearch cluster when it is down. - Added a new ``mattermost_search_engine_status`` metric that reports whether the Elasticsearch/Opensearch cluster is healthy (value = 1) or not (value = 0). If the cluster is not enabled, its value is reported as 1. - Added [logic](https://docs.mattermost.com/administration-guide/scale/common-configure-mattermost-for-enterprise-search.html) to monitor the health of Elasticsearch/Opensearch clusters to implement a retry mechanism. From dc5fbad8dae4ef253a55b35eba6afe72d376770f Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 11 May 2026 09:56:27 +0300 Subject: [PATCH 81/83] Update ui-ada-changelog.rst --- source/product-overview/ui-ada-changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/product-overview/ui-ada-changelog.rst b/source/product-overview/ui-ada-changelog.rst index 6ae61b6f67e..17b903bfd59 100644 --- a/source/product-overview/ui-ada-changelog.rst +++ b/source/product-overview/ui-ada-changelog.rst @@ -33,7 +33,7 @@ Changelog * - v11.7 - (UI) Renamed user-visible references from "Custom Profile Attributes" to "User Attributes" across the admin console, error messages, and server translations. * - v11.7 - - (UI) Added the ability to handle from which remotes a channel is shared from the channel settings user interface. + - (UI) Added the `ability to handle `__ from which remotes a channel is shared from the channel settings user interface. * - v11.7 - (UI) Channel banners are now shown in thread views. * - v11.6 From d8f2e3dda6f72e3275d1e9a055d970b13b344dff Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 11 May 2026 13:22:26 +0300 Subject: [PATCH 82/83] Update mattermost-v11-changelog.md --- source/product-overview/mattermost-v11-changelog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/product-overview/mattermost-v11-changelog.md b/source/product-overview/mattermost-v11-changelog.md index 1409c696057..e70e83aa684 100644 --- a/source/product-overview/mattermost-v11-changelog.md +++ b/source/product-overview/mattermost-v11-changelog.md @@ -93,6 +93,9 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - ``manage_own_agent``: Allows users to create and manage their own agents. - ``manage_others_agent``: Allows users to create and manage agents they didn't create, even if that user isn't one of the administrator users assigned to the agent by the creator. +#### Performance + - Benchmarking test results showed no significant difference: a -0.90% decrease in the number of supported users for the new release, which lies within the ``[-5%, +5%]`` prediction interval. View the full raw data and methodology in our [Performance Reports repository](https://github.com/mattermost/performance-reports/tree/main/performance-comparisons/v11.7). + #### Plugins - Added a pluggable AI Actions Menu to the text editor formatting bar with cascading submenus. Plugins can register custom action items via ``registerAIActionMenuItemComponent``. The existing Rewrite feature is now accessed through this menu. - Improved response handling for outgoing webhook requests. @@ -125,9 +128,6 @@ See [this blog post](https://mattermost.com/blog/mattermost-v11-7-is-now-availab - Fixed an issue where removing a remote could leave channels in a "shared" state, even if not shared with any remote. - Fixed an issue where OpenSearch/Elasticsearch reindex jobs could report success even when bulk writes were silently rejected by the search backend, causing silent data loss in the search index. -#### Performance - - Benchmarking test results showed no significant difference: a -0.90% decrease in the number of supported users for the new release, which lies within the ``[-5%, +5%]`` prediction interval. View the full raw data and methodology in our [Performance Reports repository](https://github.com/mattermost/performance-reports/tree/main/performance-comparisons/v11.7). - ### API Changes - Added a new API endpoint ``GET /api/v4/channels/{channel_id}/views/{view_id}/posts`` to retrieve paginated posts for a specific view. Card posts are temporarily excluded from search results. Card posts now use collaborative permissions — any channel member can edit or delete any card without needing ``edit_others_posts/delete_others_posts`` permissions. - Added new API endpoints for the Property System Architecture v2. From 95cb755be3ea193019397da7bd9a3228c5e83364 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 11 May 2026 18:24:59 +0300 Subject: [PATCH 83/83] Update important-upgrade-notes.rst --- .../upgrade/important-upgrade-notes.rst | 52 +++---------------- 1 file changed, 8 insertions(+), 44 deletions(-) diff --git a/source/administration-guide/upgrade/important-upgrade-notes.rst b/source/administration-guide/upgrade/important-upgrade-notes.rst index d9358512e33..aa8662451fb 100644 --- a/source/administration-guide/upgrade/important-upgrade-notes.rst +++ b/source/administration-guide/upgrade/important-upgrade-notes.rst @@ -135,50 +135,14 @@ We recommend reviewing the `additional upgrade notes <#additional-upgrade-notes> | | --- 171 | | | DROP INDEX CONCURRENTLY IF EXISTS idx_propertyfields_protected; | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| | Scoped the ``role_updated`` WebSocket events to the affected team/channel instead of broadcasting globally. To scope the events properly, we needed a way to | -| | efficiently look up a role’s associated scheme. Large-dataset testing was not performed for this migration. The only table touched is ``roles``, which is a | -| | small bounded table with well under 10k rows on large installations. That table is not affected by a large number of posts, reactions, etc. ``roles`` receives | -| | a brief access exclusive lock when adding a column, a row exclusive lock when backfilling data, and a share update exclusive when creating the new index. | -| | The migrations are fully backwards-compatible and no database downtime is expected for this upgrade. The SQL queries included are: | -| | | -| | .. code-block:: sql | -| | | -| | -- Pre-upgrade schema changes (Mattermost 11.7). | -| | -- | -| | -- Run in psql's default autocommit mode. Do NOT wrap these statements in | -| | -- BEGIN/COMMIT: it would hold ACCESS EXCLUSIVE on `roles` across the backfill, | -| | -- and the final CREATE INDEX CONCURRENTLY cannot run inside a transaction block. | -| | | -| | -- 1. Add the column (catalog-only; nullable, no default). | -| | ALTER TABLE roles ADD COLUMN IF NOT EXISTS schemeid VARCHAR(26); | -| | | -| | -- 2. Backfill schemeid for pre-existing rows. | -| | UPDATE roles | -| | SET schemeid = match.scheme_id | -| | FROM ( | -| | SELECT DISTINCT ON (role_name) id AS scheme_id, role_name | -| | FROM ( | -| | SELECT id, unnest(ARRAY[ | -| | defaultteamadminrole, | -| | defaultteamuserrole, | -| | defaultteamguestrole, | -| | defaultchanneladminrole, | -| | defaultchanneluserrole, | -| | defaultchannelguestrole, | -| | defaultplaybookadminrole, | -| | defaultplaybookmemberrole, | -| | defaultrunadminrole, | -| | defaultrunmemberrole | -| | ]) AS role_name | -| | FROM schemes | -| | ) expanded | -| | WHERE role_name IS NOT NULL AND role_name <> '' | -| | ORDER BY role_name, scheme_id | -| | ) match | -| | WHERE roles.name = match.role_name; | -| | | -| | -- 3. Create the supporting index without blocking writes. | -| | CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_roles_scheme_id ON roles(schemeid); | +| | The ``role_updated`` WebSocket events are scoped to the affected team/channel instead of broadcasting globally, improving performance and | +| | reducing unnecessary network traffic. No manual action is required from administrators as the migration runs automatically during the upgrade. No downtime is | +| | expected, and no special planning is needed for the upgrade as the migration can run during normal operations. All installations are affected by this change, | +| | but the impact is minimal since the ``roles`` table is small with well under 10k rows even on large installations. The upgrade includes automatic database | +| | migrations to add a ``schemeid`` column to the ``roles`` table for efficient role-scheme lookups. The migrations use PostgreSQL's non-blocking techniques: first | +| | adding the column with a brief ACCESS EXCLUSIVE lock (catalog-only operation), then backfilling existing data with a ROW EXCLUSIVE lock, and finally creating | +| | an index concurrently with a SHARE UPDATE EXCLUSIVE lock that doesn't block other operations. The ``roles`` table size is bounded and unaffected by posts, | +| | reactions, or other high-volume data. The migrations are fully backwards-compatible. | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | | v11.7 includes Agents plugin v2. Please see `this guide`_ on how to upgrade the Mattermost Agents plugin from a v1.x release to v2.0.0. It covers the supported | | | version path, the migrations that run automatically on first start of v2.0.0, the breaking changes and default-behavior flips that admins should know about |