Commit Graph
30 Commits
Author SHA1 Message Date
Eva SarafianouandCursor 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 (`![alt](/images/x.png)`) — 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>
2026-07-27 12:40:43 +03:00
Eva SarafianouandCursor 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>
2026-07-27 09:58:43 +03:00
Eva SarafianouandCursor 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>
2026-07-24 16:56:13 +03:00
Eva SarafianouandCursor 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>
2026-07-23 10:27:27 +03:00
Eva SarafianouandCursor 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>
2026-07-22 13:53:43 +03:00
Eva SarafianouandCursor 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>
2026-07-21 14:56:11 +03:00
Eva SarafianouandCursor 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 7e915c99f8 content-drift port:

- mattermost-v11-changelog.mdx: blog link slug had an erroneous "-0"
  (mattermost-v11-9-0-is-now-available -> mattermost-v11-9-is-now-available),
  likely copy-pasted from the v11.8.0 entry above it.
- mobile-app-changelog.mdx: the 2.42.0 release entry's "Open Source
  Components" subsection (voximplant/react-native-foreground-service
  removal) was dropped entirely during the RST->MDX port.

#### Release Note
```release-note
NONE
```

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(fix): remove standalone SQL comment line breaking MDX parse

A lone "--" comment line inside a <pre><code> SQL block was parsed by
remark as a setext heading underline, splitting the surrounding
paragraph and leaving the <code> tag unclosed. CI caught this in the
docusaurus build. Merge the comment into the surrounding paragraph.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(fix): escape curly braces in JSONB path literal breaking SSG render

'{options}' inside a SQL <pre><code> block was parsed by MDX as a JSX
expression referencing an undefined "options" identifier, causing
"ReferenceError: options is not defined" during static site
generation. Escape the braces the same way already done for other
JSONB path literals elsewhere in this file. Verified with a full local
docusaurus build.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(sidebar): reuse the landing-file resolver for nested category sorting/labels

The prior fix only applied the index.md(x) / *-index.md(x) fallback to
a category's own link resolution. Nested category sort keys and the
category label fallback still assumed a literal index.mdx, so a
sub-directory using the *-index.md(x) naming convention would sort by
its default position (9999) instead of its declared sidebar_position,
and its category label would fall back to a humanized directory name
instead of the landing page's title. Factor the resolver into a shared
findIndexFile() helper and use it in both places.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 13:40:08 +03:00
Eva SarafianouandCursor 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>
2026-07-21 10:29:56 +03:00
Eva SarafianouandCursor 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>
2026-07-20 16:48:40 +03:00
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>
2026-07-20 15:13:14 +02:00
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>
2026-07-17 14:29:44 -04:00
Eva SarafianouandCursor 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>
2026-07-16 19:08:12 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:19:20 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:18:58 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:18:48 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:18:37 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:18:26 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:18:16 +03:00
Eva SarafianouandCursor 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>
2026-07-14 12:14:12 +03:00
Eva SarafianouandCursor 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>
2026-07-14 11:42:37 +03:00
Eva SarafianouandCursor 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>
2026-07-13 15:54:27 +03:00
Eva SarafianouandCursor 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>
2026-07-10 14:50:13 +03:00
Eva Sarafianou d4fdff72cc Remove internal only pages from develop (#37436) 2026-07-10 14:10:10 +03:00
cursor[bot] 6619448fec [MM-69589] Remove ExperimentalAuditSettingsSystemConsoleUI feature flag (#37385) 2026-07-10 07:11:14 -03:00
Eva SarafianouandCursor 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>
2026-07-09 22:01:40 +03:00
Eva SarafianouandCursor 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>
2026-07-09 18:13:08 +03:00
Eva SarafianouandCursor 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>
2026-07-09 12:32:39 +03:00
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>
2026-07-08 16:00:49 -03:00
Nick MisasiandCursor 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>
2026-07-07 14:34:08 +00:00
Eva SarafianouandCursor 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>
2026-07-02 18:42:57 +03:00