mirror of
https://github.com/mattermost/mattermost.git
synced 2026-09-19 02:06:37 +08:00
7a1c7e4b6b997a52213cc00a4614a7a94e745fd7
30
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7a1c7e4b6b |
[Docs Revamp Feedback] Fix content rendering bugs (admonitions, broken images, table wrapping, oversized icons) (#37669)
* Fix leftover RST/malformed MDX admonition syntax Docusaurus/MDX admonitions use `:::type[Title]` for a custom title, not the old Sphinx `.. type::` RST directive or a bare `:::type Title` (which Docusaurus renders as a type with the literal text "Title" appended, not a real title). Fixed 12 files using the malformed `:::type Title` form, plus two leftover `.. image::` RST directives (converted to `<img>` tags, covered in the images commit's file but noted here since it's the same admonition-adjacent cleanup pass) in manage-your-security-preferences.mdx. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix broken images: port missing screenshots from legacy docs repo 26 files referenced screenshots/diagrams via relative paths (`../images/x`, `../../images/x`) that don't resolve anywhere in this repo — the assets were never migrated during the Sphinx-to-Docusaurus conversion, and in one file (ad-ldap-groups-synchronization.mdx) the filenames were also corrupted with a leftover `%0A` (encoded newline) prefix from the conversion. Ported the 46 missing image files from mattermost/docs (source/images/) into docs/site/static/images/ — the location every other working image reference in this repo already resolves against — and rewrote every relative reference to the root-absolute `/images/<file>` form used elsewhere in these same files (e.g. server-logout-indicator.png). Verified via a full scan: all 680 `/images/...` references across docs/main now resolve to a real file on disk. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix oversized/broken checkmark icons in EMM config table The EMM configuration reference table used bare <img src="../../_static/images/check-circle-green.svg" /> for ~24 "supported" checkmarks — a legacy Sphinx path that doesn't exist in this repo (broken image) and, with no explicit size, would render at native SVG size rather than as a small inline checkmark (oversized icon). Replaced with the actual migrated asset (/img/ui/checkmark.svg) plus explicit width/height and alt text. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix wide comparison table wrapping on the plans page The plans/pricing table (7 columns: Feature Category + 5 editions + Available From) had no table-layout or column-width rules, so the first ("Feature Category") column — which holds long, wrapping prose — ended up roughly the same rendered width as the edition columns, which only ever hold a short checkmark or version string. That forced every row onto several wrapped lines. Added `table-layout: fixed` with explicit per-column widths (28% category / 10% per edition / 22% for "Available From") so the category column gets the space it needs. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix images broken on non-root baseUrl deployments (PR previews) Docusaurus only rewrites image URLs for the site's baseUrl when using markdown image syntax (``) — that gets compiled to a webpack require() call. A raw HTML `<img src="/images/x.png" />` tag is left as a literal string, which the browser resolves from the domain root, ignoring baseUrl entirely. On production baseUrl is "/", so this silently worked by coincidence. But PR preview builds set BASE_URL to "/mattermost/pr-<N>/" (.github/workflows/docs-preview-template.yml), so every raw <img src="/images/..."> or src="/img/..."> 404s specifically on preview deployments — which is why images added/fixed earlier in this branch still showed as broken in the PR's docs preview. This is a pre-existing, repo-wide pattern (503 raw <img> tags across 103 files, most untouched by this PR otherwise) rather than something introduced by earlier commits here — those commits just added a few more instances of an existing broken pattern. Fixed all of them by importing @docusaurus/useBaseUrl and wrapping src={useBaseUrl('/images/...')} so the URL is correctly rewritten for whatever baseUrl the site is built with. Verified: all 503 useBaseUrl(...) calls resolve to a real file under docs/site/static, and every modified file was checked with @mdx-js/mdx compile() to confirm no syntax breakage from the added import statements. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix leftover RST list/table markup in notifications docs - mobile-troubleshooting.mdx: replace leading blockquote markers (>) under step 3 with list-content indentation so the nested numbered substeps and screenshots render as part of the ordered list instead of a blockquote. - manage-your-notifications.mdx: replace the mangled blockquote/dl header row (with literal RST separator runs and stray | and + characters) with a proper <thead><th scope="col"> row, and restore the "Icon badge (dot)" row as a normal <tbody> row. Co-authored-by: Cursor <cursoragent@cursor.com> * Rebuild mangled security preferences table from RST source Cross-checked against the legacy RST source to reconstruct the table correctly: proper <thead>/<th scope="col"> header, real ordered/ unordered lists instead of pipe-joined literal text, working internal links in place of unresolved mm-ref: URIs, and a <Note> block for the sign-in method callout (previously rendered as literal ".. note::" text). Also dropped a stray phantom third table column left over from conversion. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix typos and remaining markup issues in collaborate/notifications docs - message-priority.mdx: fix "acknowlegement" typo, add missing "the" before "message" in the acknowledgement description. - organize-conversations.mdx: split the Tip's two bullets onto separate lines and drop the escaped leading hyphen that was preventing the first item from rendering as a list. - organize-using-custom-user-groups.mdx: fix "preferreed" typo and add missing "to" in the archived-group restoration instructions. - schedule-messages.mdx: fix "dislays" typo. - manage-your-notifications.mdx: replace the leftover dl/dt/dd/ line-block markup in the Push notifications row with a plain anchor link, matching the Web/Desktop cells elsewhere in the table. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
f0de1f485b |
[Docs Revamp Feedback] Readability & accessibility fixes (#37665)
* Fix readability & accessibility issues from Docs Revamp feedback Addresses the readability/accessibility batch collected 2026-07-22/23 in the "Docs Revamp - Feedback" channel and Eric Sethna's first-pass review doc: - Dark-mode "note" callout text vs. background contrast (Michael Roberson; Eric Sethna's doc item 8) — pin explicit brand colors for dark-mode admonitions instead of Infima's generic secondary-alert pairing. - Link color/body-text visual distinction, both themes (Vishal Choudhary, Marco Kundt; Eric Sethna's doc item 5) — new link colors that stay far apart in luminance from surrounding body text (not just from the page background), plus default (not hover-only) underlines. - Body text should read darker, like the old docs site (Vishal Choudhary) — wire --ifm-font-color-base to --mm-text-primary instead of Infima's unbranded default. - Main content panel doesn't visually "pop" against the side nav/TOC (Vishal Choudhary) — tint the sidebar/TOC panels with --mm-bg-subtle and leave the reading column on the page background. - Dark-mode inline code contrast (Marco Kundt) — explicit text color via --mm-text-primary. - Bold/color combo hard to read (Ben Cooke) — subtle letter-spacing on bold runs in prose. - Heading/TOC category font not readable, vs. the readable "IME" example (Eric Sethna's doc item 1) — swap the 900-weight display face out of small multi-word TOC category labels for the base sans face at bold weight, matching the same fix already applied to navbar links. - Inline code spans taking up excess vertical space (Eric Sethna's doc item 9) — pin line-height on inline `code` so it stops inheriting the 1.65 paragraph line-height; multi-line fences are unaffected. - Prose max-width too wide on large screens (Rohith Chandran) — cap top-level article prose at ~760px via a `.markdown > `-scoped rule that leaves the OpenAPI 2-column layout (nested deeper) untouched. Full WCAG contrast math for every changed pair is in the PR description. Note: this touches docs/site/src/css/custom.css and tokens.css, which a parallel "remove yellow left border" workstream also touches (callout/ card border styles) — left border/accent-bar colors are deliberately untouched here to minimize overlap, but a merge conflict is still likely. Co-authored-by: Cursor <cursoragent@cursor.com> * Address review feedback on readability/a11y PR - Extend dark-mode admonition background fix from "note" to all five alert types (info/success/warning/danger) — the "hard on the eyes" complaint (item 13) wasn't note-specific. Also pin the alert heading label and icon color explicitly, since Infima's inheritance made the "NOTE"-style label the most visibly low-contrast part of the callout. - Drop the default underline on prose links; use medium weight (600) as the non-color WCAG 1.4.1 cue instead, keeping underline for hover/focus only. - Stop forcing code blocks to our --mm-denim-800 background in dark mode. Docusaurus's dark Prism theme (dracula) has its own background/token contrast pairing; overriding just the background broke that pairing. Letting the theme's own background show through (already applied to the block's container via --prism-background-color) fixes contrast. - Apply the same small/multi-word-heading fix already used for TOC category labels to table column headers, which have the identical problem (multi-word labels in the 900-weight display face). Left footer titles on the heading face since those are short single words, the case that face handles fine — documented why. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix dark-mode contrast for code blocks, inline code, and note callouts Code block, callout, and inline-code backgrounds/borders all sat within ~1:1 contrast of the dark-mode page background (same navy hue family), so they had no visible edge or fill distinct from the page. The unscoped dark-mode `code` background rule also leaked into code blocks' own `<code>` element (beating Infima's `pre code: transparent` on specificity), masking most of the code block fill behind a near-black overlay regardless of the fill color chosen. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix dark-mode contrast for blockquotes, inline code, and table stripes Same root cause as the earlier code-block/callout fixes: --mm-denim-800 and --mm-denim-700 sit within ~1:1 contrast of the dark-mode page background, so blockquotes, inline code chips, and even-row table striping all had no visible fill against the page. Switched them to --mm-bg-surface (+ denim-400 borders where a border exists) to match the surface treatment already used elsewhere. Co-authored-by: Cursor <cursoragent@cursor.com> * Tone down h1 title weight; revert prose max-width cap - h1 page titles were still on the 900-weight Archivo Black poster face after h2-h4 got moved to a normal-weight sans face for the same "too heavy/shouty" reason. Bring h1 in line with the rest so every page title uses one consistent weight. - Revert the 760px max-width cap on top-level markdown prose blocks (added for Rohith Chandran's wide-line-length feedback) — it also squeezed non-article layouts like the homepage's persona cards. Needs more thought before reapplying narrower/more targeted. Co-authored-by: Cursor <cursoragent@cursor.com> * Trim verbose CSS comments introduced in this branch Cut reviewer-name/item-number attributions and repeated exploratory narrative down to the "why" a future reader actually needs, and fixed a couple of comments left stale by later commits (e.g. h1 no longer using the Archivo Black display face). Also dropped a redundant background declaration in the dark-mode .callout override that just re-set the same value the base rule's --mm-bg-surface already resolves to per theme. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
5fbb2a32d6 |
docs: vendor and stage Mattermost Agents docs for Docusaurus build (#37627)
* docs: vendor and stage Mattermost Agents docs for Docusaurus build The migration plan externalized Agents links, but the Docusaurus sidebar generator already declares an `agents` TOP_LEVEL category and stub pages link to `/agents/docs/*` paths with no content behind them. Vendor the mattermost-plugin-agents docs/ folder as a submodule and stage it into main/agents/docs/ at build time (mirroring how Sphinx handles the same submodule via conf.py excludes), so the Agents sidebar category and internal links resolve to real, versioned content instead of dead ends. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: strip leading license comment before MDX-staging Agents docs Three feature pages (channel_summaries.md, custom_prompts.md, managing_agents.md) lead with a raw <!-- Copyright ... --> HTML comment before the # Title line, which broke both title extraction (regex only matched a title at the very start of the file) and the Docusaurus build (MDX doesn't parse bare HTML comments the way Markdown does, so it failed to compile with "Unexpected character '!'"). Strip the license comment before further processing instead of trying to convert it. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: fail loudly on missing Agents submodule, fix usage comment path - A missing/uninitialized vendor/mattermost-plugin-agents submodule previously logged a warning and returned a successful zero-count result, letting CI/prestart/prebuild continue with an empty (or, on a reused workspace, stale) Agents section instead of failing. Now it clears any previously staged output first, then throws so the build fails clearly when the submodule isn't present. - Fixed the usage comment referencing the nonexistent docs-site/scripts path instead of the actual docs/site/scripts. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: checkout submodules in docs-ci.yaml build check This is the third docs-building workflow (alongside docs-cd.yml and docs-preview-template.yml) that runs npm run build on docs/site, and it was missed when submodules: true was added to the other two — its "Build docs site" step failed on this PR because vendor/mattermost-plugin-agents wasn't checked out, which stage-agents-docs.mjs now correctly treats as a hard failure. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: inline Agents content instead of a separate top-level LHS section Sphinx never gives Agents its own top-level nav entry: it `.. include::`s admin_guide.md/user_guide.md directly into the existing curated pages (administration-guide/configure/agents-admin-guide.rst and end-user-guide/agents.rst), and only nests a handful of files (providers, aws_bedrock_setup, sovereign_ai, usage_tips) as small hidden- toctree children of those same two pages. load-testing.md, upgrading_to_2.0.md, and all of features/*.md are never referenced in any Sphinx toctree at all. The previous vendoring approach staged all 12 files as a brand-new, disconnected top-level "Agents" category, so reaching the actual guide meant leaving the curated page, opening an unrelated top-level section, and drilling into "Docs" — the opposite of what Sphinx does today. This reproduces Sphinx's structure instead: - stage-agents-docs.mjs now categorizes the 12 vendored files: admin_guide/ user_guide are staged twice — once as a normal (but `unlisted: true`) doc for direct-link parity with Sphinx's orphan pages, and once as a Docusaurus Markdown partial (leading underscore, auto-excluded from routing/sidebars) for inline import. providers/aws_bedrock_setup/ sovereign_ai/usage_tips are staged as normal listed docs. Everything else is staged unlisted, matching Sphinx never surfacing them in nav. - Added generic relative-markdown-link rewriting (mirroring the existing image-path rewriting) so cross-links between vendored files (`../admin_guide.md#anchor`, `features/channel_summaries.md`, etc.) resolve correctly regardless of nesting depth or where the linking content ends up rendered. - agents-admin-guide.mdx and end-user-guide/agents.mdx now `import` and render the partials inline instead of linking out, and no longer link to a separate "Docs" section. - gen-documentation-sidebar.mjs: removed the standalone `agents` TOP_LEVEL category. Added `{doc: '<full id>'}` support to buildAdminConfigureItem for cross-directory group items, and a new ADMIN_CONFIGURE_GROUPS.agents group nesting providers/aws_bedrock_setup/ sovereign_ai under agents-admin-guide. Added a standalone promoteDocToCategory helper (End User Guide has no full manual-grouping override) to nest usage_tips under end-user-guide/agents. - Documented both patterns (cross-directory group items, Markdown-partial inlining) in docs/site/README.md's "Manual grouping overrides" section. Validated: stage-agents-docs.mjs + gen-documentation-sidebar.mjs both run clean with zero warnings; a scoped @mdx-js/mdx compile check across all 16 affected files (2 curated pages + 12 staged docs + 2 partials) passes with zero failures. Full `docusaurus build` still needs the OpenAPI prebuild's Go toolchain, unavailable in this sandbox — already covered by docs-ci.yaml in CI. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(agents): self-host the plugin-v2 upgrade guide link Now that mattermost-plugin-agents/docs is vendored and staged into /agents/docs/*, point the two "how to upgrade to Agents v2" references (v11 changelog, important upgrade notes) at our own /agents/docs/upgrading_to_2.0 page instead of an external GitHub blob link — the same self-hosting fix already applied to the old dangling sample-file links. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(agents): tighten stage-agents-docs.mjs header comment Same explanation, fewer words — trims the file-level comment from ~45 to ~33 lines without dropping the rationale (why staging instead of a direct submodule checkout, and how the three-way listed/unlisted/ inline-partial split reproduces Sphinx's nav). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
06ddf50323 |
docs: mark scale partial pages as unlisted with proper titles (#37628)
These MDX files are content partials imported into the scale-to-*-users pages, mirroring the :orphan:/:nosearch: Sphinx pages they were migrated from. Without frontmatter, Docusaurus rendered them as full standalone pages with an ugly slug-derived title, breadcrumbs, and pagination. unlisted: true keeps their routes alive (needed by the PDF book builder and legacy redirects) while hiding them from the sidebar, breadcrumbs, pagination, and search indexing. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
d851305b38 |
docs(site): remove What's New in v11 stub page and fix heading typography (#37617)
* docs: remove What's New in v11 stub page The page was scaffolding seeded during the IA-redesign migration (#37330) and never received real content, so it shouldn't be live in the preview. Drops the sidebar entry and cleans up the cross-links from the v11 upgrade guide. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(site): tone down in-body heading weight h2-h4 were rendering in the same 900-weight Archivo Black display face as h1 page titles, making body section headers (e.g. "Buy a subscription") look as loud as the hero title. Reserve the heavy display face for h1 and use Inter at a normal bold weight for h2-h4. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(site): make h1's heavy display weight explicit h1 relied on the shared --ifm-heading-font-weight variable to render at 900. Now that h2-h4 override that variable locally, spell out the weight on h1 directly so it isn't implicitly coupled to a variable other rules no longer use. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(site): shrink oversized titles on the search results page Each hit's title on /search is a plain h2 rendered outside .markdown, so it fell through to the full 1.85rem heading size — as large as an in-article section header. Scope it down via the SearchPage's own wrapper class instead of the plugin's hashed CSS-module class. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
b27f213f4a |
docs(sidebar): restructure sidebar grouping, fix Samples/Recipes stubs, self-host sample downloads (#37591)
* docs(sidebar): group Integrations Guide and Administration Guide > Configure Both sections were flat lists (20 and 34 items respectively) with no logical grouping, unlike Overview/Deployment Guide which already got manual groupings. Adds the same override pattern: - Integrations Guide: group by integration type (Chat & Meeting Interop, ITSM & Dev Tools, No-Code Automation, Built-in Integrations with Webhooks/Slash Commands sub-groups). - Administration Guide > Configure: group the ~12 settings-reference pages under one category, plus Search, Calls, Storage & Database, Email & Notifications, Billing & Account, and Branding groups. AI Agents Configuration stays a standalone top-level entry (3rd, after System Console Settings and Search) rather than being buried in a misc/optional bucket. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sidebar): document the manual grouping override pattern in README Nothing explained how OVERVIEW_GROUPS/DEPLOYMENT_GROUPS (and now ADMIN_CONFIGURE_GROUPS/INTEGRATIONS_GROUPS) work, or what to do when adding a new file to one of these sections. The script already warns on orphaned files, but that warning is easy to miss if you don't know the override mechanism exists in the first place. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sidebar): reorganize gen-documentation-sidebar.mjs, config on top Pure reorganization, no behavior change (verified byte-identical sidebar JSON output before/after). All manual-grouping config (*_GROUPS/*_ROOT_ORDER/*_HIDDEN constants for Overview, Deployment Guide, Administration Guide > Configure, Integrations Guide) now lives together at the top of the file, and all functions (generic helpers, per-section builders, main) live together at the bottom. Previously each section's config and builder functions were interleaved in file order, so adding a page to one section meant scanning past unrelated sections' logic to find where its config lived. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sidebar): remove the empty Samples section Sphinx never had a "Samples" navigation section — source/samples/ in the Sphinx repo is marked :orphan: and deliberately excluded from any toctree; it's a folder of downloadable static assets (JSON/XML/YAML/ CSV/zip) referenced inline via :download: from ~5 unrelated pages (logging, EMM mobile deploy, Grafana/Loki centralized logging, compliance export), never a browsable page. The migrated docs/main/samples/index.mdx was an empty stub (frontmatter only, no content), so it rendered as an empty top-level sidebar category with nothing underneath — the "looks broken, not coming soon" problem. Removed the stub page and the corresponding TOP_LEVEL entry in the sidebar generator. Note: the actual downloadable sample files were never migrated into the new site's static assets — the 4 migrated pages that reference them still link to github.com/mattermost/docs (the old repo) instead of being self-hosted. Tracked as a separate follow-up, not fixed here. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: self-host downloadable sample files instead of linking the old repo Four migrated pages (logging, EMM mobile deploy, Grafana/Loki centralized logging, compliance export) linked their downloadable sample files (JSON/XML/YAML/zip) to github.com/mattermost/docs — the old Sphinx repo — instead of hosting them on the new site. Every other static asset (images) was copied into docs/site/static/ during migration; these were missed. Copies the 8 referenced files into docs/site/static/files/samples/ and repoints all 8 links to the self-hosted /files/samples/... paths, matching the existing /images/... convention used everywhere else in this content tree. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sidebar): remove the Recipes top-level nav section The Sphinx source for this content (recipes/product-vulnerability- incident.rst) is marked :orphan: with an explicit comment: "This page is intentionally not accessible via the LHS" — Sphinx never surfaced it as a navigable section either. The migrated page (docs/main/recipes/product-vulnerability-incident.mdx) was auto-promoted into a full top-level sidebar category by the filesystem-driven generator, at equal visual weight to sections with 10+ items despite having exactly 1. Removing the TOP_LEVEL entry matches Sphinx's original intent — the page stays reachable by direct URL, just not discoverable via the sidebar. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sidebar): regroup Administration Guide > Manage by task Manage had 37 files split into a flat top level (19) plus a nested manage/admin/ sub-folder (18) — a raw filesystem artifact, not a real Sphinx grouping: Sphinx has no manage-index.rst/toctree that groups this content, and the admin/ sub-folder is never surfaced as its own nav level in Sphinx's actual sidebar. Worse, the flat-vs-admin split was internally inconsistent — related pages (monitoring/health, billing, user/access management) were each scattered across both buckets rather than following any coherent theme. Replaces both with task-based groups: User & Access Management (including an Attribute-Based Access Control sub-group), Server Configuration & Maintenance, Monitoring & Diagnostics, Billing & Licensing, Cloud Workspace Management, Notifications & Surveys, Content & Product Governance, and Data Export & Migration. Customize Branding stays a standalone entry (single item, not worth its own group). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(sidebar): harden buildAdminGuideSidebar's category resolution Filter the items-fallback lookup to type === 'doc' before reading .id, matching the same pattern already used in buildDeploymentSidebar (dirNameFromId), instead of relying on category items implicitly lacking an .id field. Also track whether the Configure and Manage sub-categories were actually found and regrouped, and warn if either is missing — so a future filesystem change under Administration Guide (renamed/removed sub-folder) surfaces as a build warning instead of silently leaving the manual grouping override unapplied. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
6417c9342a |
docs: port P13/P14 content drift into monorepo (#37590)
* docs(P13c): add missing manage-plugins.mdx to Administration Guide Configure
source/administration-guide/configure/manage-plugins.rst existed in the
Sphinx repo pre-fork but was never carried over during the initial P2
move or the P13c Configure reconciliation pass. Port it verbatim
(RST -> MDX) with links/anchors verified against the current docs/main
tree (mmctl-command-line-tool, plugins, plugins-configuration-settings,
popular-integrations, environment-configuration-settings#maximum-file-size,
air-gapped-deployment).
#### Release Note
```release-note
NONE
```
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(P13/P14): port remaining content drift into monorepo
Ports outstanding content-only drift identified in docs-experimental
phase-P13/P14: V11.9 docs major release content, Azure Blob Storage
guide, ID-attribute case-sensitivity notes, ranked attribute types and
attribute value masking for ABAC, plugin management guide linkage, and
the P14 markdown action buttons reference page with its
interactive-messages cross-reference. Excludes all automation/workflow
files, which are handled separately.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(sidebar): link top-level category headers to their landing page
buildCategory() only recognized a literal index.md(x) filename as a
category's landing page, but Overview, Deployment Guide, Administration
Guide, Security & Compliance, End User Guide, Integrations Guide, Get
Help, and Use Case Guide all use a *-index.md(x) filename instead (to
avoid collisions when flattening for URL stability). As a result,
clicking most top-level sidebar categories only expanded/collapsed the
list instead of navigating to their overview page. Recognize the
*-index.md(x) convention as a fallback so these categories link
correctly, matching the existing Deployment Guide/Overview behavior.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(P13/P14): fix blog link typo and restore dropped Open Source Components entry
Audit against Sphinx source (docs/source/product-overview/) found two
drops from the
|
||
|
|
fc18ad4e6e |
docs(P13f): reconcile docs drift — Administration Guide: Scale (#37481)
* docs(P13f): reconcile scale/search/monitoring drift from legacy docs repo Ports content drift from mattermost/docs (Sphinx) into the migrated MDX pages under administration-guide/scale: Elasticsearch v9 support and v7.17 deprecation, corrected AWS OpenSearch access policy guidance (open principal instead of an unsupported IAM-principal policy) plus an OpenSearch v1.x deprecation notice, new search-engine outage health-monitor documentation, and plugin-metrics /metrics aggregation notes. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(P13f): update scale-to-N-users Azure DB SKUs to Intel E*ds v5 Replaces the Azure RDS reader/writer instance SKU (E*as v6, Intel "as v6" family) with E*ds v5 (Intel "Eds v5" family) across all nine scale-to-N-users reference architecture pages, matching the upstream correction in mattermost/docs. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
fa92268d47 |
Add Algolia site verification to docs robots.txt (#37578)
* Add Algolia site verification to docs robots.txt Adds an algolia-site-verification comment to prove DNS ownership of the docs.mattermost.com CloudFront distribution for the Algolia Crawler. Co-authored-by: Cursor <cursoragent@cursor.com> * Use Algolia-Crawler-Verif header format Match the exact verification comment key expected by Algolia's crawler. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
9e51e325f5 |
Add --active flag to mmctl user list (#37560)
Mirror the existing --inactive filter so admins can list only active users. Reject using --active and --inactive together, and update unit, e2e, and docs coverage. Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Sven Hüster <svelle@users.noreply.github.com> |
||
|
|
2851af059d |
Add admin-locked profile fields for email users and pre-provisioned names on invites (#37458)
* Add TeamSettings.LockProfileFieldsForEmailUsers with server-side enforcement Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Add API tests for LockProfileFieldsForEmailUsers enforcement Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Hide admin-locked profile fields in user settings and add System Console dropdown Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Support pre-set username and name on team email invites Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Add tests for invite profiles; fix resend worker channel-list parsing Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Add pre-set profile inputs to member invite modal Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Prefill and lock pre-set username on signup page Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Add first/last name editing to System Console user detail and document new setting Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Fix lint issues in invite modal profile inputs Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Fix double outline on invite modal profile inputs inside GenericModal Co-authored-by: Nick Misasi <nick13misasi@gmail.com> * Refactor invite emails to InviteEmailData struct and harden invite profile validation Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Centralize profile-lock permission exemption in app layer and add config coverage Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Per-field name locking in profile settings, typed lock setting, and shared invite profile helpers Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Add Playwright E2E coverage for locked profile fields and pre-set invite profiles Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Sync playwright package-lock with merged workspace versions Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Restore upstream playwright package-lock (fix npm ci drift) Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Assert invite input cleared instead of chip text after adding email Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Fix invite modal scroll, username error layout, and clipped autocomplete Keep the footer pinned while tall profile rows scroll, show username validation full-width after blur, and portal select menus so they are not clipped by the scroll container. Co-authored-by: Cursor <cursoragent@cursor.com> * fixes for autocomplete items not aligning properly * Make invite autocomplete menu portal opt-in and fix modal chrome Confine document.body menu portaling to the invite modal via a menuPortal prop, and restore click-away, slide-in animation, and header alignment for the scrolling invite modal layout. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix eslint lines-around-comment on menuPortal props Co-authored-by: Cursor <cursoragent@cursor.com> * Fix stylelint property order in invitation modal SCSS. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix stylelint property order in invitation_modal.scss Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Adapt invite modal E2E to portaled autocomplete menus Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Simplify locked profile invite implementation Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Fix invite modal review and E2E feedback Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Retry flaky enterprise CI Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Retry Docker image export CI Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Minimize locked profile fields diff Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Fix locked profile E2E documentation Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Address minimized test review feedback Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Fix email test whitespace Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Retry OpenSearch download CI Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Retry flaky Cypress thread navigation Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Preserve legacy invite behavior without profiles Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Clarify invite profile validation Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Retry flaky enterprise E2E Co-authored-by: nick.misasi <nick.misasi@mattermost.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Matthew Birtch <2040554+matthewbirtch@users.noreply.github.com> |
||
|
|
eee6722ef0 |
Fix docs migration rendering issues (Mermaid, tables, callouts, version filter) (#37511)
* Enable Mermaid rendering for release policy Gantt chart.
Docusaurus requires the theme-mermaid plugin and standard ```mermaid fences instead of Sphinx MyST ```{mermaid} syntax.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix clipped text in important upgrade notes table.
Convert the migrated RST grid table to a two-column layout and restore proper table cell display so long upgrade notes wrap instead of being cut off.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix PostgreSQL version policy table formatting.
Replace the broken Sphinx grid-table markup with a standard HTML table so version, release date, and minimum PostgreSQL version render correctly.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix callout rendering in Linux deployment guides.
Replace unrendered ::: admonition syntax with the project's Note, Tip, and Important MDX components in the RHEL and tarball install guides.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Add version filter to important upgrade notes page.
Port the Sphinx version-filter widget to a React component so admins can narrow upgrade notes by source and target version during the docs migration.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix UpgradeNotesFilter TypeScript row element typing.
Use querySelectorAll<HTMLTableRowElement> so table row refs satisfy the RowRef type during docs-site typecheck.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Improve release policy Gantt chart readability.
Port the Sphinx Mermaid styling so done and active bars render blue, ESR bars render red, and task labels use larger bold white text inside the bars.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix upgrade notes filter and table layout.
Wait for the table to mount before collecting versions, hide whole version groups to avoid rowspan breakage, and restore a fixed two-column table layout so note text is no longer clipped.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix markdown table header column alignment.
Restore native table layout for standard docs tables so thead and tbody share column widths; keep the upgrade-notes wrapper for wide tables that need horizontal scroll.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix illegible release policy Gantt chart text.
Mermaid renders the Gantt SVG at a viewBox sized to its own internal
layout, then Docusaurus scales it down (~0.57x) to fit the docs
content column. Task/section labels configured at 14px were rendering
on-screen at ~7px, unreadable without manually zooming the browser.
Scale up the diagram's font size and spacing to compensate.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix header line wrap and cell overflow in upgrade notes table
Force a line break in the header label and constrain header/cell
styling so the two-line header no longer overlaps itself, and long
cell content (including SQL code blocks) wraps within the column
instead of overflowing the table.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Make Mermaid Gantt outside labels readable in light mode.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
d7e14fa123 |
docs(P13a): reconcile docs drift — new pages + images (#37479)
* docs(P13a): add Azure Native VM page, team channel policies page, and azure screenshots Co-authored-by: Cursor <cursoragent@cursor.com> * docs(P13a): use Note/Important JSX components for consistency with directory siblings Co-authored-by: Cursor <cursoragent@cursor.com> * docs(P13a): wire Azure Native VM into Install on Linux sidebar and card grid The new deploy-azure-native-vm.mdx page was orphaned from navigation: the Deployment Guide sidebar's "Install on Linux" grouping and the "Choose an install method" card grid on deploy-linux.mdx are both manually maintained lists, so adding the file alone didn't surface it anywhere. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
7345d1fb90 |
Reconcile Product Overview content drift from docs repo (P13 sub-phase 4.1) (#37476)
* Fix broken checkmark icons and zoom-breaking tables on Plans and Cloud pages The Plans page referenced a Sphinx-era static image path that doesn't exist in the Docusaurus site, rendering broken icons. The Cloud subscriptions comparison table was a mangled RST-to-MDX conversion artifact (nested dl/dt/dd, literal ASCII borders, unresolved checkmark substitutions) with fixed column widths that clipped content on zoom. Both tables now use the site's checkmark.svg icon and scroll horizontally within their own container instead of breaking the page. Co-authored-by: Cursor <cursoragent@cursor.com> * Reconcile Product Overview content drift from docs repo Applies content that landed in mattermost/docs between 2026-05-14 and 2026-07-13 (v11.7/v11.8 server releases, v10.11 dot releases, v6.2/v5.13.7 desktop releases, v2.40-2.41.3 mobile releases, and related subscription/ FAQ/deprecation copy updates) to the corresponding MDX pages in docs/main/product-overview, per phase P13 sub-phase 4.1 of the docs migration plan. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix duplicate changelog bullet and admin console path in Product Overview - Remove duplicate flagged-post-visibility bullet from the v11.7.3 changelog entry. - Correct subscription.mdx admin console path to include the Reporting menu, matching the path used elsewhere in the docs. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
3cf63487ea |
docs(P13c): reconcile docs drift — Administration Guide: Configure (#37483)
* docs(P13c): reconcile Configure content drift — audit log/telemetry cleanup, mobile ephemeral mode, watermarking, plugin/integration defaults, CJK fix Ports content drift from the legacy mattermost/docs Sphinx repo into the Administration Guide > Configure MDX pages (phase P13, sub-phase P13c): - environment-configuration-settings: remove unused ExperimentalAuditSettings file-rotation settings (now handled via AdvancedLoggingJSON), update EnableDiagnostics description to reflect Rudder/telemetry removal (Sentry only), and add the Mobile ephemeral mode settings. - experimental-configuration-settings: remove the same unused audit logging settings, and add the experimental Enable Mobile Watermark setting. - site-configuration-settings: update Report a Problem default behavior and fix the ReportAProblemMail env var name, add Channel category sorting, and add the Classification Markings section. - integrations-configuration-settings: fix OutgoingIntegrationRequestsTimeout key name and default value. - plugins-configuration-settings: fix RequirePluginSignature default (false). - reporting-configuration-settings: rename Site statistics to System statistics, preserving the legacy anchor. - enabling-chinese-japanese-korean-search: fix missing semicolon in the zhparser SQL example. - system-attributes: rename "Custom attributes for user profiles" to "User attributes" to match the v11.7 product rename. authentication-configuration-settings had no net drift to apply: the source commit reviewed (LDAP/SAML ID case-sensitivity notes) was later reverted upstream, and Azure Blob Storage documentation (hinted in the task) was also added then fully reverted upstream, so no Azure content exists in either the source or target repo. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(P13c): fix config.json key for Enable Mobile Watermark setting ExperimentalSettings.EnableMobileWatermark does not exist in config.go; the actual field is ExperimentalSettings.EnableWatermark. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
f898ea3615 |
docs(P13i+P13j): reconcile drift for Integrations Guide, Security Guide, Use Case Guide, Get Help (#37488)
Ports upstream mattermost/docs drift into the Integrations Guide (ServiceNow auth table URL, GitHub org vs. repo webhook guidance, Zapier link fix), Security Guide (Mobile Ephemeral Mode, mobile watermarking), Use Case Guide (Mission-Ready Mobile ephemeral mode references), and Get Help (community chat search bar wording). Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
bf4879433a |
docs(P13g): reconcile drift for Deployment Guide (#37489)
Ports drift from the Sphinx docs repo into 11 of the 12 Deployment Guide MDX pages: K8s builtin DB readiness check, RHEL/tar release version bumps, RHEL 7/8 v12.0 deprecation notice, Elasticsearch v9 support, Intune MAM plan availability fix, mobile /mobile-logs command, mobile watermarking + Ephemeral Mode docs, desktop app version bumps + macOS MDM support, and reference architecture port table restructuring. #### Release Note ```release-note NONE ``` Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
1b33301d75 |
docs(P13h): reconcile drift for End User Guide (#37490)
Ports upstream mattermost/docs content drift (auto-translate rename, channel banner classification markings, membership-policy/ABAC updates, AI Actions rewrite menu, GIF frame limits, and related v11.7/v11.8 end-user copy) into the corresponding docs/main End User Guide MDX pages. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
f88a8b2141 |
docs(P13e): reconcile docs drift — Administration Guide: Onboard + Upgrade + Comply (#37480)
* docs(P13e): reconcile drift for Administration Guide onboard/upgrade/comply pages Ports content changes made in the legacy Sphinx docs repo since the P13 migration fork point (2026-05-14) into the corresponding MDX pages: SAML/SSO Entra ID namespace-matching guidance, granular permissions updates, upgrade notes for v11.7/v11.8, OSS component list, and minor typo/link fixes across onboard, upgrade, and comply sections. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(P13e): fix MDX compile failure from blank lines inside <pre><code> blocks Blank lines inside JSX <pre><code> blocks are parsed as paragraph boundaries by MDX, breaking the enclosing tag matching. Remove the blank lines used for SQL readability while keeping each statement on its own line. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(P13e): fix insecure curl example and legacy absolute doc link - electronic-discovery.mdx: use https for the authenticated curl example, matching the other curl examples in the same page. - important-upgrade-notes.mdx: point the Deprecated Features reference at the local route instead of the legacy docs.mattermost.com URL. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
f091e95e20 |
docs(P13d): reconcile Manage content drift — ABAC updates, telemetry, mmctl, health checks (#37482)
Ports content drift from the legacy Sphinx docs repo (mattermost/docs) since the P13 migration fork point into the corresponding Administration Guide > Manage MDX pages: - ABAC v11.7/v11.8: public channel membership policies (advisory vs. hard-gate behavior), channel-level permission policies, policy simulation, and team-scoped membership policies in Team Settings (abac-channel-access-rules, abac-system-wide-policies, attribute-based-access-control) - User Attributes: separate Display Name/Attribute name fields, backfill note, terminology updates - Content flagging: quarantined message report generation and post deletion report documentation - Autotranslation: translation target language and language-pair clarifications - Generating support packet: sanitize typo fixes, removed stale ElasticsearchSettings.ClientKey reference - Installing license key: Site Statistics -> System Statistics rename - Team/channel members: SetChannelMembers bulk API note - Telemetry: removed Rudder/Segment-specific reporting details following the telemetry stack migration - Statistics: Site Statistics -> System Statistics rename - Health check probes: corrected Go import path example - mmctl: documented --workers flag for import process, renamed Custom Profile Attribute -> User Attribute in cpa command docs - Logging: removed unused audit log file rotation settings from the Cloud defaults note Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
33eb5b1a28 |
ci: add docs PR preview workflows (#37440)
* ci: add docs PR preview workflows (P10) Adds preview builds for PRs touching docs/** or api/**, deployed to the existing mattermost-docs-preview-pulls S3 bucket under a repo-scoped mattermost/pr-<N>/ prefix so they don't collide with mattermost/docs's own previews of the same bucket. Fork PRs are handled via a manual workflow_dispatch since they can't access secrets; previews are cleaned up automatically on PR close for both same-repo and fork PRs. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: use PR author for docs preview TRIGGERING_ACTOR pull_request.head.user.login is the owner of the head repo/branch, not the PR author -- for same-repo PRs (head repo == base repo) this resolves to the org name instead of the contributor who opened the PR. pull_request.user.login is always the actual PR author. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: reword docs preview PR comment Co-authored-by: Cursor <cursoragent@cursor.com> * fix: harden docs preview workflows - docs-preview-fork: add explicit permissions (statuses/pull-requests write, contents read) instead of relying on default token scope. - docs-preview-template: validate PR_NUMBER is digits-only and quote the S3 destination before use in the upload step, guarding against script injection via the fork dispatch's free-text input. - docs-preview-template: add a per-PR concurrency group so an older, slower build can't overwrite a newer upload. - docs-preview/docs-preview-fork: replace secrets: inherit with an explicit secrets mapping, and declare the secrets contract on the reusable template, so only the two AWS preview credentials are passed instead of every repo/org secret. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: align docs preview build/permissions with docs-ci, drop 3rd-party comment action - docs-preview-template: add Set up Go (api/server/go.mod), matching docs-ci -- make -C api build shells out to `go run .` for code sample extraction and needs a pinned toolchain, not whatever happens to be preinstalled on the runner. - docs-preview-template: drop the explicit "Build OpenAPI spec" step; npm run build's prebuild lifecycle script already runs make -C api build, so it was running twice. - docs-preview-template: replace peter-evans/create-or-update-comment with plain `gh pr comment`, dropping a third-party action pin; behavior is unchanged (posts a new comment every run). - docs-preview: add explicit permissions (contents: read, pull-requests: write) so the reusable workflow's requested pull-requests: write isn't silently downgraded by a restrictive default token policy. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: use gh pr comment in docs-preview-cleanup, drop 3rd-party action Same swap already made in docs-preview-template.yml -- gh is preinstalled on the runner, so this drops another third-party action pin. Also quotes the S3 URI via env vars for consistency with the template's upload step. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: replace pull_request_target with pull_request in docs-preview-cleanup zizmor flags pull_request_target as a dangerous trigger by default. Switch to plain pull_request, guarded to skip fork PRs (which don't get secrets on this event) -- fork preview cleanup will be handled by a separate scheduled sweep instead. Also fixes a stray '=' character that had crept into the file. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
f3849f83de |
docs: fix broken path links, anchors, and tab rendering from RST-to-MDX migration (#37433)
* docs: resolve cross-file anchor mismatches from RST-to-MDX migration
The Sphinx-to-Docusaurus migration converted `:ref:`/`{ref}` links using
naive text-slugification, so anchors that pointed to headings in a
different file (e.g. release-summary tables linking into their
respective changelog pages) were emitted as same-page fragments and
silently resolved to nothing.
Built a label registry from the original Sphinx `.. _label:` / `(label)=`
targets to recover the true source file for each cross-reference, then
rewrote the affected links to point at the correct file + heading
anchor. Fixes 282 broken cross-file anchors, primarily in the mobile/
desktop/server release-summary pages, plus assorted same-page anchor
mismatches caught by re-auditing after the prior admonition/anchor fix.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: manually resolve remaining anchor mismatches after cross-file audit
Hand-verified fixes for anchors that fuzzy-matching alone couldn't
safely resolve (confirmed against actual heading text/context, and in a
few cases against the original RST source, before applying):
- Typos and dropped words carried over from the original Sphinx docs
(e.g. "bot-acocunts", "auto-follow-all-new-channel-threads" ->
"follow-all-new-channel-threads").
- Sphinx auto-generated duplicate-heading IDs (#id1/#id3/#id4) resolved
to their real target headings.
- Numbered-step TOC links in enterprise-roll-out-checklist.mdx that
dropped the leading "N. " used in the actual heading slugs.
- Push-notification docs pointing at the wrong file entirely
(environment-configuration-settings instead of
push-notification-server-configuration-settings).
- SAML "saml-enterprise" label resolved to its true cross-file target
(authentication-configuration-settings#saml-2-0), recovered from the
original RST label definition that the automated registry missed
because it sat after an RST transition marker.
- sso-saml-technical references converted from broken same-page/
malformed-path anchors to correct page links.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: fix SAML 2.0 anchor slug (saml-2-0 -> saml-20)
github-slugger strips periods rather than hyphenating them, so "SAML
2.0" slugifies to saml-20, not saml-2-0 as previously fixed.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: fix broken path links found during docs/main migration cleanup
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: convert div.tab blocks to Docusaurus Tabs/TabItem components
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: restore missing Kubernetes deployment architecture diagrams
The RST-to-MDX migration never copied over the AWS/Azure/Oracle
architecture diagrams referenced by the deployment-architecture-at-scale
page, leaving broken images in each Tabs/TabItem.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: fix 7 anchor mismatches from the fragment/heading audit
Covers three root causes from the anchor mismatch breakdown:
- Fragment repeated the target page's own title instead of a real
heading, so the link is simplified to point at the bare page.
- Heading exists verbatim but lives on a sibling settings page
(experimental-configuration-settings, push-notification-server-
configuration-settings) rather than environment-configuration-settings.
- A page path was mistakenly pasted into a same-page #fragment instead
of being used as a real cross-page link.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: fix 8 anchor slugs that were close but didn't match the real heading
Repoints links whose fragment was a plausible guess (typo, reworded
heading, or wrong section) at the actual auto-generated slug of the
target heading, confirmed by inspecting each target page directly.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: merge split Tabs blocks so tabs render horizontally
The div.tab conversion script split some sibling tab groups into
separate single-item Tabs blocks whenever a stray blockquote marker
sat between them, causing them to render stacked instead of as one
horizontal tab bar. Merges the MySQL/PostgreSQL and Team/Enterprise
Edition tab groups back into single Tabs blocks.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: remove Azure tab and restore Kubernetes deploy content
The Mattermost Operator, Azure, and Oracle platform tabs on the
Kubernetes deployment guide were split across two separate Tabs
blocks (rendering stacked instead of as one tab bar) and all three
tab bodies were empty because the migration never flattened the
original RST include directives. Removes the unsupported Azure tab
and restores the Mattermost Operator and Oracle content from the
pre-migration RST sources as a single merged Tabs block.
Co-authored-by: Cursor <cursoragent@cursor.com>
* addresscoderabbitreview
* docs: unify Linux/Kubernetes/Containers deploy pages and fix FIPS/STIG placement
Kubernetes and Containers duplicated full install content across a top-level
page (Tabs) and orphaned sidebar subpages that nothing linked to. Reworked
both to follow the Linux page's pattern: shared content on the landing page,
platform-specific instructions live once in their own subpage.
Also removed configure-fips-at-install-time.mdx, which claimed FIPS is
available for native Linux installs — FIPS/STIG in Mattermost is a container
image property (Chainguard-based build), not available outside Docker/
Kubernetes. Consolidated all FIPS/STIG references onto
containers/fips-stig.mdx and pointed the Mattermost Operator subpage (not
Oracle OKE, which doesn't expose image selection) at it.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: fix review findings — image alt text, Important callout markup, typo
- Replace generic alt="image" on scaling diagrams with descriptive text
identifying cloud provider and user scale.
- Convert raw div.important markup in deploy-containers.mdx to the
repo's <Important> component, matching usage elsewhere in the file.
- Fix "Matermost" typo in manage-your-display-options.mdx.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
d4fdff72cc | Remove internal only pages from develop (#37436) | ||
|
|
6619448fec | [MM-69589] Remove ExperimentalAuditSettingsSystemConsoleUI feature flag (#37385) | ||
|
|
3c9979f551 |
docs: fix broken admonitions and anchors in product-overview changelog pages (#37423)
* docs: fix broken admonitions and anchors in product-overview changelog pages
The Sphinx-to-Docusaurus migration script only converted lowercase
admonition directives (e.g. ```{note}```), so capitalized/indented/
same-line variants (```{Important}```, ```{Attention}```) were left as
literal text, causing whole sections to render as a single broken code
block. Also convert unconverted MyST `.. meta::` blocks and `(label)=`
anchors (as escaped MDX heading ids) so existing cross-reference links
keep resolving.
Affects: v10/v11 server changelogs, server/mobile/desktop releases,
release policy, unsupported legacy releases, mobile/desktop app
changelogs.
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs: fix under-indented Important callouts in v10 changelog
The <Important>/**Critical Fixes**/</Important> blocks nested under
several release-entry bullets were indented with only 1 space instead
of the 2-space list-item content column used by sibling sub-bullets,
risking the callout breaking out of the list item during rendering.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
70b62d9e3f |
docs: fix broken images, cross-links, and layout overflow after docs-experimental migration (#37418)
* docs: restore missing e2e/mobile push-notification images These developer-docs images existed in mattermost-developer-documentation's static assets but were never copied into the monorepo during the docs migration, leaving broken image links in e2e-cheatsheets.md and the mobile push-notification pages. Also fixes e2e-cheatsheets.md's image paths, which used Hugo-style relative paths that don't resolve under Docusaurus. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: fix broken outgoing webhooks screenshot path The image reference used an absolute path left over from the old Hugo site (/integrate/faq/images/...), which doesn't resolve under Docusaurus since no matching file exists under site/static. The image already lives co-located in docs/develop/integrate/faq/images/, so point to it with a relative path instead. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: delete Azure AKS deployment guide page The page's screenshots never made it into the monorepo during migration and don't exist under any known source (docs, docs-experimental, or mattermost-developer-documentation). Remove the page rather than ship broken images; drop it from the PDF book manifest and repoint its legacy redirect to the general Kubernetes deployment guide accordingly. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: fix heading levels on Kubernetes deploy guides deploy-k8s.mdx and deploy-k8s-oke.mdx used H1 (#) for their top-level in-page sections (Installation steps, Common Errors, etc.) instead of H2. Docusaurus' contentTitle extraction grabs the first H1 it finds anywhere in the doc, which stole the page title slot from the actual frontmatter title, so no title rendered at the top of the page. The flat H1/H2 mix also meant TOC entries for install steps rendered as a flat list at the page's TOC root instead of nested under their section, which made the TOC sidebar overflow/misrender on narrower/zoomed viewports. Bump every heading in both files one level (H1->H2->H3->H4) so the page title renders and the TOC nests correctly. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: fix TOC/layout horizontal overflow on wide code blocks The Kubernetes prerequisites page's TOC sidebar overflowed off-screen at higher browser zoom levels. Root cause: `.docMainContainer` has `max-width: none !important` (intentional, so OpenAPI's 2-column layout gets full width), but that removes the container's only width ceiling. Combined with the default flexbox `min-width: auto` on both the main container (in its outer flex row with the left sidebar) and the doc content column (in the inner content/TOC row), a sufficiently wide code block's intrinsic min-content size could drag the whole row wider than the viewport instead of scrolling within itself. Add `min-width: 0` at both flex levels so `overflow-x: auto` on code blocks and tables actually contains overflow locally, and make the responsive table-scroll CSS apply unconditionally instead of only under the 996px breakpoint (zoom shrinks effective layout width without re-triggering the media query). Also shorten the illustrative base64 example values in the AWS Aurora Postgres secret example, which were long enough on their own to be a secondary contributor to the same overflow. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: restore additional missing images found via full static-resolution scan Docusaurus's build-time image validator doesn't reliably warn on every broken absolute-path reference, so npm run build alone missed these. A direct scan of every image reference in docs/develop and docs/main against the filesystem turned up 38 more genuinely missing images (desktop architecture, VPN/Pritunl setup, docker dev environment, i18n-extract tooling, MVP program, onboarding, schema migration guide, plugin best-practices, and interactive-message screenshots) that were never copied over from mattermost-developer-documentation during migration. Two references (interactive-dialog-date.png and interactive-dialog-datetime.png) remain unresolved because no source image exists anywhere in the legacy repo. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: fix broken cross-links after .md to .mdx migration Several Calls admin guide pages and the air-gapped quick-start runbook were renamed from .md to .mdx during migration, but their internal cross-links still pointed at the old .md filenames (and, for setup-tls, the old flattened path), so Docusaurus couldn't resolve them. Found via a full scan of every relative markdown link under docs/main and docs/develop against the filesystem, since the build's own "couldn't be resolved" warnings don't reliably surface every broken link. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: remove broken date/datetime element screenshots These screenshots were never captured before migration (broken on the currently live docs.mattermost.com too), and no source image exists anywhere in the legacy repos to restore. Remove the broken references rather than leave a dead image link. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: move newly-restored desktop architecture images to static/ These 4 images were restored co-located next to their content files, matching an existing (if inconsistent) convention elsewhere in docs/develop. Since these are new additions rather than pre-existing working references, move them to docs/site/static/ instead of perpetuating the co-located pattern. Repo-wide normalization of the other ~70 existing co-located image references is left for a separate follow-up PR. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: remove deleted AKS page from sidebar generator's manual grouping master (#37402) fixed the sidebar generator's SRC path but this branch's deletion of deploy-k8s-aks.mdx still left a dangling reference in the Deployment Guide's manual Kubernetes grouping, which fails Docusaurus's sidebar-doc-id validation at build time. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
dd69d06dc6 |
Migrate docs site: Docusaurus config, Algolia, OpenAPI pipeline, and CI (#37402)
* Align Docusaurus config for monorepo, wire Algolia DocSearch (P6) Fixes projectName/editUrl/path references left over from the docs-unified repo split, adds trailingSlash for predictable CloudFront 404 handling, and wires an Algolia search block into themeConfig that's only included when credentials are present (Docusaurus's schema rejects an empty appId/apiKey, so this keeps builds green with or without them). Also fixes the sidebar/redirect generator scripts, which still pointed at the pre-rename docs/ directory instead of main/, and adds docs/Makefile, .env.local.example, and an updated README for local dev. Co-authored-by: Cursor <cursoragent@cursor.com> * Wire OpenAPI generation to api/v4/source and add docs-ci.yaml (P7) Replaces build-openapi.mjs's custom YAML-merge implementation with a thin wrapper around the canonical `make -C api build` target, keeping only the MDX sanitization step (quote/autolink fixes) that docusaurus-plugin-openapi-docs needs. Adds a "prebuild" npm script so `npm run build` regenerates the spec automatically, and ignores the generated api/v4/html artifacts (narrow form, since ssr_template.hbs and static/favicon.ico under that path are committed). Also adds docs-ci.yaml as a path-scoped PR/master build+typecheck gate for the docs site, replacing the legacy `docs` repo's Sphinx-based ci.yml now that docs live in this monorepo. Co-authored-by: Cursor <cursoragent@cursor.com> * Rename OpenAPI prebuild script for clarity "prebuild" is an npm lifecycle hook name (auto-runs before "npm run build"), not a descriptive name, so `npm run prebuild` didn't signal it's specifically about OpenAPI generation. Split it into "build:openapi" (the actual script, runnable directly and self-explanatory) with "prebuild" now just delegating to it, preserving the automatic pre-build trigger. Co-authored-by: Cursor <cursoragent@cursor.com> * Regenerate sidebars automatically before dev/build (P7 fixup) documentation.generated.json and developers.generated.json are gitignored and nothing produced them on a fresh checkout, so both `npm start` and `npm run build` failed with MODULE_NOT_FOUND outside a working tree that happened to have stale copies lying around. Wire the sidebar generators into `prestart`/`prebuild` so they're always regenerated first. Co-authored-by: Cursor <cursoragent@cursor.com> * Remove docs/site/.env.local.example There's a single Algolia DocSearch app for docs.mattermost.com; credentials aren't distributed to individual developers, so a per-dev .env.local workflow doesn't apply. Credentials are only ever injected in CI/CD via repository variables. Local builds/dev server run fine without them (the Algolia block in docusaurus.config.ts is conditional). Co-authored-by: Cursor <cursoragent@cursor.com> * Wire OpenAPI doc generation into prestart/prebuild, drop unused Makefile docusaurus-plugin-openapi-docs requires a separate `docusaurus gen-api-docs` CLI step to populate docs/api/reference/ (gitignored) — nothing was invoking it, so a fresh checkout's npm start/build failed the same way the sidebar JSONs did. Split build:openapi into build:openapi:spec (slow, runs make -C api build) and build:openapi:docs (fast, generates MDX from the existing spec), and wire prestart to reuse an existing spec instead of rebuilding it every dev-server start. Also drops docs/Makefile: four of its five targets were pure passthroughs to npm scripts, unreferenced by CI or anything else, and there's no repo-wide `make -C <dir>` convention to fit into. Note: a duplicate-doc-id build failure (operationId `status` in the Playbooks OpenAPI spec colliding with the main API's `status` tag) is being fixed separately in mattermost-plugin-playbooks. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix stale docs/ reference in sidebar generator's error message The existence check still hardcoded "docs/" in its error text after SRC was repointed to main/. Use the SRC constant in the message so it can't drift out of sync with the actual path again. Co-authored-by: Cursor <cursoragent@cursor.com> * remove code comment * Drop unused artifact upload from docs-ci.yaml Nothing consumes it: P9's docs-cd.yml will rebuild independently on push to master rather than downloading it via workflow_run (avoids workflow_run trigger footguns for an infrequent, cheap-enough rebuild), and P10's preview build always needs its own independent build anyway (bakes a per-PR BASE_URL). This was carried over from the old docs repo's ci.yml out of habit; that repo's own PR-time uploads had the same unused-artifact issue (only cd.yml's post-merge run ever consumed it). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
7870605fb1 |
[MM-69590] Remove NotificationMonitoring feature flag (#37386)
* [MM-69590] Remove NotificationMonitoring feature flag The NotificationMonitoring feature flag shipped and defaulted true in v9.9. Remove the flag and all conditional gating so notification delivery metrics collection is permanently enabled, gated only by the MetricsSettings.EnableNotificationMetrics admin setting. Co-authored-by: mattermost-code <matty-code@mattermost.com> * [MM-69590] Cover notification metrics client config Assert EnableNotificationMetrics client config prop tracks the MetricsSettings.EnableNotificationMetrics admin setting now that the NotificationMonitoring feature flag gate is removed. Co-authored-by: mattermost-code <matty-code@mattermost.com> * [MM-69590] Cover notification counter gating Add app-layer coverage asserting CountNotification increments the notification counter only when MetricsSettings.EnableNotificationMetrics is set, exercising the un-gated notificationMetricsDisabled path. Co-authored-by: mattermost-code <matty-code@mattermost.com> * [MM-69590] Cover websocket notification counter gating Assert the websocket notification counter increments via the posted-ack broadcast hook only when MetricsSettings.EnableNotificationMetrics is set, exercising the un-gated incrementWebsocketCounter path. Co-authored-by: mattermost-code <matty-code@mattermost.com> * Address PR feedback: 0 answered, 1 resolved, 0 declined Document that MetricsSettings.EnableNotificationMetrics must be set to true for notification monitoring, matching the code gating and the push-notification-health-targets doc. --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: mattermost-code <matty-code@mattermost.com> |
||
|
|
4255e31412 |
Support pluggable channel settings tabs (#35591)
* Support pluggable channel settings tabs Add a schema-with-override plugin hook for Channel Settings tabs, modeled on the User Settings plugin hook. Plugins register either a declarative schema (sections of settings plus an onSave handler; the host renders controls, owns the save bar and change tracking, and calls onSave on save) or a custom component escape hatch (host-owned save bar delegates save/reset to plugin handlers; rendered inside PluggableErrorBoundary for crash isolation). Includes a reusable plugins/settings_schema module (generic types, a defensive validator, controlled radio controls), a dedicated channelSettingsTabs reducer slice + action, value hydration via loadValues(channel), and docs. Follow-up: migrate User Settings onto the shared settings_schema module. * refactor(webapp): migrate User Settings onto shared settings_schema module Re-express the User Settings plugin types, validator, and radio control in terms of the shared plugins/settings_schema module, deleting the duplicated walkers and control. extractPluginConfiguration now delegates to extractSettingsSchema, using a top-level hook for the best-effort action and a new per-section hook (Option A) to preserve onSubmit. Behavior is unchanged for plugins (Calls, MSTeams): the public registerUserSettings contract is intact. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(webapp): include loadValues in registerChannelSettingsTab keyOrder The reArg keyOrder for registerChannelSettingsTab omitted 'loadValues', so any declarative schema registration that supplied it was mis-zipped and rejected by the plugins reducer as an invalid channel settings tab. Add the key (and a matching `loadValues?: never` on the custom-tab type so the discriminated-union keyof stays correct) and add a regression test that drives the real registry path through to the reducer. Co-authored-by: Cursor <cursoragent@cursor.com> * Extract ChannelSettingsPluginTab and simplify channel settings modal Move the plugin tab (schema + custom) and its save bar out of ChannelSettingsModal into a dedicated ChannelSettingsPluginTab component that owns its handler ref and save/reset logic, mirroring the built-in tabs. Stop injecting theme/webSocketClient into custom tab bodies so they receive only the documented plugin contract. Derive the active tab directly from the user's selection instead of syncing it back into state via an effect, and drop the now-redundant getFirstVisibleTab helper. Co-authored-by: nick.misasi <nick.misasi@mattermost.com> * Rename plugin user-settings extraction wrapper for clarity The generic schema extraction now lives in plugins/settings_schema, so rename the user-settings-specific wrapper from plugin_setting_extraction to user_settings_extraction (extractPluginUserSettings) to make its scope explicit, and refresh the stale settings_schema doc comment that still described User Settings as un-migrated. Co-authored-by: nick.misasi <nick.misasi@mattermost.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
1d3bbc638b |
feat(docs): move docs-experimental content into monorepo docs/ (#37330)
* feat(docs): move docs-experimental content into monorepo docs/ Co-authored-by: Cursor <cursoragent@cursor.com> * Remove plan related files and comments * Cleanup comments, remove generated files --------- Co-authored-by: Cursor <cursoragent@cursor.com> |