diff --git a/docs/external-api/mcp-prompts.mdx b/docs/external-api/mcp-prompts.mdx
index e01b0c986..6c22f4906 100644
--- a/docs/external-api/mcp-prompts.mdx
+++ b/docs/external-api/mcp-prompts.mdx
@@ -24,7 +24,9 @@ Picking `explain_table` from your client's prompt menu makes TablePro read the t
The result is a `description` and one user message. Argument values must be scalars: a number or a boolean is read as its text, an array or object is rejected. An argument the prompt does not declare is rejected with `-32602`, as is a missing required one.
- The read is recorded in the activity log.
+
+
+The read is recorded in the activity log.
## Shared arguments
diff --git a/docs/external-api/mcp-resources.mdx b/docs/external-api/mcp-resources.mdx
index 92388c23f..45d0e0c2b 100644
--- a/docs/external-api/mcp-resources.mdx
+++ b/docs/external-api/mcp-resources.mdx
@@ -5,7 +5,11 @@ description: Read-only resources for connections, schema, tables, and query hist
import MCPGates from "/snippets/mcp-gates.mdx";
-Eight URIs, all read-only, all JSON. A client reads them to find its way around before it calls a tool. Reads count against the caller's [request rate](/external-api/tokens#rate-limits) like anything else.
+Eight URIs, all read-only, all JSON. A client reads them to find its way around before it calls a tool.
+
+
+
+Reads count against the caller's [request rate](/external-api/tokens#rate-limits) like anything else.
## Discovery
diff --git a/docs/faq.mdx b/docs/faq.mdx
index 5c698ab8a..ce08182b1 100644
--- a/docs/faq.mdx
+++ b/docs/faq.mdx
@@ -64,7 +64,9 @@ Its driver is probably not installed yet. The database type chooser badges regis
- Each one must match the SHA-256 checksum in the registry manifest and carry a valid code signature before it loads.
+
+
+Each one must match the SHA-256 checksum in the registry manifest and carry a valid code signature before it loads.
diff --git a/docs/features/change-tracking.mdx b/docs/features/change-tracking.mdx
index cc04110f9..a183d56f0 100644
--- a/docs/features/change-tracking.mdx
+++ b/docs/features/change-tracking.mdx
@@ -5,7 +5,9 @@ description: Queue cell edits, row inserts and deletions, review the SQL, then s
import StagedUntilSave from "/snippets/staged-until-save.mdx";
- The toolbar counts what is pending, modified cells stay highlighted, `Cmd+Shift+P` shows the statements the queue will produce, and `Cmd+S` runs them. The queue belongs to the tab, so switching tabs leaves it alone.
+
+
+The toolbar counts what is pending, modified cells stay highlighted, `Cmd+Shift+P` shows the statements the queue will produce, and `Cmd+S` runs them. The queue belongs to the tab, so switching tabs leaves it alone.
diff --git a/docs/features/plugins.mdx b/docs/features/plugins.mdx
index 936e7b415..de3463e37 100644
--- a/docs/features/plugins.mdx
+++ b/docs/features/plugins.mdx
@@ -5,7 +5,9 @@ description: Install database drivers, import and export formats, and themes fro
import DriverCounts from "/snippets/driver-counts.mdx";
-Pick a database type badged **Not Installed** in the chooser and the download runs before the connection opens, with no restart.
+Pick a database type badged **Not Installed** in the chooser and the download runs before the connection opens, with no restart.
+
+
## Bundled plugins
diff --git a/docs/features/table-structure.mdx b/docs/features/table-structure.mdx
index 3ebbc0e4a..f3c517eaf 100644
--- a/docs/features/table-structure.mdx
+++ b/docs/features/table-structure.mdx
@@ -55,7 +55,9 @@ Right-click a foreign key and choose **Open [table]** to jump to the referenced
## Saving changes
- [Change Tracking](/features/change-tracking) covers the queue, undo (`Cmd+Z`) and redo (`Cmd+Shift+Z`). A save runs on the tab's own connection, database, and schema, the ones it was opened on, and never moves the sidebar or the toolbar.
+
+
+[Change Tracking](/features/change-tracking) covers the queue, undo (`Cmd+Z`) and redo (`Cmd+Shift+Z`). A save runs on the tab's own connection, database, and schema, the ones it was opened on, and never moves the sidebar or the toolbar.
- **Save Changes** (`Cmd+S` or the toolbar checkmark) applies the queue. Changes that can lose data, dropping a column, changing a type, adding NOT NULL, changing the primary key, first show a confirmation listing each one.
- **Preview SQL** (`Cmd+Shift+P`) shows the generated statements without executing them.
diff --git a/docs/scripts/check-links.py b/docs/scripts/check-links.py
index 289286dcc..6cdb1a3ac 100755
--- a/docs/scripts/check-links.py
+++ b/docs/scripts/check-links.py
@@ -29,16 +29,22 @@ def nav_pages(node, out, collecting=False):
IMPORT = re.compile(r'^import\s+(\w+)\s+from\s+"(/snippets/[^"]+)"', re.M)
-CONTINUES = re.compile(r"^[,;:)]|^(and|or|but|so|then|which|while|with)\b")
def check_snippets(path, raw, failures):
- """A snippet may end a line, but the sentence may not carry on past it.
-
- Snippets are block content: several sentences, sometimes a markdown link that wraps. Starting a
- new sentence after one on the same line renders fine. Continuing the same sentence does not:
- `features/query-results.mdx` shipped `, and ...`, which built green under
- `mint validate` and returned HTTP 500 in production.
+ """A snippet has to be the only thing on its line.
+
+ A snippet is block content: several sentences, sometimes a table, sometimes a markdown link
+ that wraps. Mintlify renders it as a block, and any prose sharing the line with it returns
+ HTTP 500 in production while `mint validate` and the Mintlify deploy both report success.
+
+ An earlier version of this check only rejected text that carried the SAME sentence past the
+ snippet, on the premise that "starting a new sentence after one on the same line renders fine".
+ That premise was wrong. `features/table-structure.mdx` was edited to start a new sentence and
+ kept returning 500, and six other pages were down for the same reason: four with a new sentence
+ after the snippet, one with a markdown link after it, and `features/plugins.mdx` with prose
+ BEFORE it, which the old check never looked at. All 24 pages that render put the snippet alone
+ on its line; all 7 that returned 500 did not.
"""
rel = path.relative_to(DOCS)
declared = {}
@@ -58,12 +64,15 @@ def check_snippets(path, raw, failures):
if in_fence:
continue
for match in re.finditer(rf"<({used})\b[^>]*/>", line):
- trailing = line[match.end():].strip()
- if trailing and CONTINUES.match(trailing):
- failures.append(
- f"{rel}:{line_no} carries the sentence on past <{match.group(1)} />; "
- f"a snippet is block content, so start a new sentence or a new line"
- )
+ before = line[: match.start()].strip()
+ after = line[match.end() :].strip()
+ if not before and not after:
+ continue
+ where = "before and after" if before and after else ("before" if before else "after")
+ failures.append(
+ f"{rel}:{line_no} puts prose {where} <{match.group(1)} /> on the same line; "
+ f"a snippet is block content and returns HTTP 500 unless it is alone on its line"
+ )
def main() -> int:
diff --git a/docs/switching.mdx b/docs/switching.mdx
index bf335e99f..4ddc2feaa 100644
--- a/docs/switching.mdx
+++ b/docs/switching.mdx
@@ -102,7 +102,9 @@ Two other routes exist.
## If your database is not supported yet
- A database missing from the connection form may still be one click away in **Settings > Plugins > Browse**.
+
+
+A database missing from the connection form may still be one click away in **Settings > Plugins > Browse**.