docs: rebuild the site as a complete Mintlify suite reference - #23
Merged
Merged
Conversation
The previous tree documented one product with a handful of pages and a set of generated image frames. It is replaced by 173 pages across eight navbar tabs, one per Cortex application plus a shared reference tab, so the navbar is the product switcher and a reader never has to guess which application a page is about. Every claim is sourced from the shipping code rather than from the old copy: the backend crates and api-types for the service surface, and the desktop, CLI, bot and design clients for what a person sees and clicks. Where a value could not be traced the page says so instead of guessing, and a flag that the runtime refuses is documented as refused rather than omitted. There are no images anywhere; every visual is a Font Awesome icon. Adds scripts/check-docs-content.mjs, which checks what is inside a page (vocabulary, description length, unique titles, link resolution, closing section, page length, component balance, card icons, hub card grids), and a test beside it that seeds a throwaway site to prove each rule fires.
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
| // the status page, and the product. | ||
| const anchors = config.navigation.global.anchors.map((anchor) => anchor.href); | ||
| assert.ok(anchors.includes('/changelog')); | ||
| assert.ok(anchors.includes('https://status.cortex.foundation')); |
The docs job ran the structural checker but not the content one added in the previous commit, so nothing on CI enforced the vocabulary list, the description ceiling or the card and hub rules.
Contributor
Author
3 tasks
echobt
added a commit
that referenced
this pull request
Sep 16, 2026
PR #23 removed the last Python file (scripts/generate-docs-frames.py), so the CodeQL language matrix still listing `python` fails the run with "CodeQL could not process any code written in Python" (no-source-code-seen-during-build). Add an explicit advanced-setup workflow so the matrix is pinned in the repo instead of derived from repository settings: `actions` and `javascript-typescript`, the two languages the site actually contains. The comment in the matrix records why `python` is absent and what to do before adding it back.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebuilds this repository as a complete Mintlify documentation site for the Cortex suite, derived from
CortexLM/backendand the desktop, CLI, bot and design clients rather than from the previous copy. The reader picks an application from the navbar and stays inside it; every product gets a full section instead of a single overview page.mainwas force-rolled-back to8a077c7first, so the French commit is no longer reachable there. This branch builds on that commit.What this is
"theme": "mint"), extended rather than replaced: starter colours, top navbar, global anchors and footer are intact.<Card>, a tab, a group or a page's frontmatter. There is no/images/directory and a CI check fails the build if an image tag or asset path reappears.<Card>carriesicon=; every page ends in a## Relatedblock so no page is a dead end.Navigation
The navbar is the product switcher. One tab per application, then a shared reference tab.
rocketcommentscoderobotterminalpen-rulershield-halvedbook-openEach of the 173 pages belongs to exactly one tab, so a page never appears twice in the sidebar and the tab you are in always tells you which product you are reading about.
Also in the chrome: global anchors for Changelog, System status and cortex.foundation; navbar links for Website and Status; a Open Cortex primary button; a three-column footer (Products, Resources, Cortex).
29 redirects keep the old URLs alive, including the whole retired
/api/*tree,/security/overview,/platform,/status,/troubleshooting, and the*/overviewpages that flattened into hub pages.Error reference
/problems/<code>carries one page perErrorCodevariant incrates/cortex-core/src/error.rs— 24 codes, plus an index and the RFC 9457 explainer. Each page states what the code means, whether it is retryable, which extension members the problem document carries, and what to do about it.The seven Cortex Security review failure codes deliberately have no
/problems/page and are never linked as though they did: they are review verdicts, not transport problems. A CI check enforces the distinction.How the content was sourced
Every product claim traces to the shipping code: the backend crates and the
api-typespackage for the service surface, and the desktop, CLI, bot and design clients for what a user actually sees and clicks. Product strings are quoted as the product spells them, including punctuation.Where a value could not be traced, the page says so instead of guessing. That shows up as "Not published" in a table cell, or a sentence telling you where in the product to look — for example the Go plan's image, export, attachment and Library figures on Plans and quotas and Limits, and the Design window's install and sign-in story, which is not published yet and is written as such rather than as installation instructions for something you cannot download.
Things the product displays but does not enforce are labelled.
Parallel agentsis a plan attribute the plan cards show and nothing currently enforces, so the table says that and tells you to handle the matching error code anyway. Bot Rooms controls are drawn in the desktop window but nothing behind them is served on this deployment, so the desktop page documents the controls and then says starting one answersThis deployment does not host bot rooms yet. Nothing was started., pointing at Channels as the multi-bot surface that works today.Nothing in these pages describes sign-in wire protocols, cookies, tokens, session internals, operator configuration keys or named infrastructure. Where a capability needs explaining without those details — account erasure, for instance — the page states what the product's own privacy copy states and stops there.
Checks
All seven gates green on this branch:
check-docs-site.mjsvalidatesdocs.jsonagainst the tree both ways (every nav entry, group root, navbar link and internal href resolves to a real MDX file; no file is orphaned), checks the problem-page contract againsterror.rsanderrors.ts, checks documented/v1/paths againstrouter.rs, and fails on images, sign-in internals and missing frontmatter.check-docs-content.mjsis new here and checks what is inside a page: the forbidden-vocabulary list, the 160-character description ceiling Mintlify renders into meta tags, titles unique across the site, API paths appearing off the API pages, internal links resolving and external ones staying inside the allowlist, the closing## Relatedsection, a 250-word minimum, balanced MDX components,icon=on every card and a<CardGroup>on every hub.Each checker has a test beside it that seeds a throwaway site and proves every rule it claims actually fires, rather than passing because a rule went quietly dead. The content checker's test also pins its two deliberate exemptions: the card-suit block stays outside the emoji range, and the 24 problem pages stay exempt from the icon, closing-section and length rules. Both exemptions are the kind a later edit breaks by accident, and one of them, the hub rule, did go dead once while this script was being written and was caught by counting its own derived hub set against the eight pages it was meant to cover.
Two sweeps ran over the finished tree beyond the gates:
chat/deep-research.mdx,chat/models.mdx(two),chat/streaming.mdxanddesign/desktop.mdx; the sweep now returns zero. It extracted only backticked strings at first, which left the notes' bolded strings outside it; widening it to both and re-running found no further damage. It still cannot catch an em dash replaced by a comma rather than a hyphen. One of those was found by reading, insecurity/troubleshooting.mdx, so the class is not hypothetical and a reviewer who spots another is doing the sweep a favour.Judgement calls worth a reviewer's eye
api.cortex.foundationis named on six pages. The public bounty API paths are printed relative, but five CLI and getting-started pages name the host directly. The note covering that host asks for a docs-owner confirmation before publishing it. It is either right everywhere or wrong everywhere, so please confirm the host and I will leave it or strip it from all six in one change./bot/desktopkeeps the window's own "Agents" vocabulary. The rest of the Bot tab says "bot". The desktop window's rail is labelled Agents, and renaming it on the page would invent a label that does not exist in the product, so the page uses the window's words and the surrounding pages use ours./bot/desktoponly. The desktop notes source that figure to a service code path; the bot notes could not find it and asked for it to be left out./bot/computertherefore describes the behaviour without a figure and/bot/desktopprints the sourced one. If you would rather have one answer in both places, say which.reference/limits.mdxpublishes the 48 tool-round ceiling but withholds the transport rate-limit internals. The tool-round number is a ceiling a user can actually hit while working; the rate-limiter configuration is operator material./cli/hooksdocuments the hook surface that runs, not the one the notes describe. The source notes describe a shell-hook configuration file. The shipping tree disagrees: the hooks crate is compiled and is an engine dependency, but it is only re-exported, never called, and no code path loads such a file. A session asked for the matching command answers that the command is unsupported and that no operation was performed. So the page documents the hook surface plugins actually subscribe to, and the notes' version is not published. Wherever the notes and the code disagreed, the code won./models. The command table registersmodelas canonical, withmodels,m,lmandlist-modelsas aliases, so the reference table leads with/model, lists the aliases, and says in as many words that either spelling works. Pages that describe the picker in passing keep the plural, because that is what most people type.♦ Thought for Xs. The range now excludes that block, with a comment saying why, so the quoted product string stands. The alternative was to damage a real product glyph, which is exactly the class of defect the two sweeps exist to catch.cortex execandcortex runeach declare a set of flags that their own runtime-contract check rejects before a turn is submitted, and the pages had published ten of them as working table rows plus three runnable examples. Sampling,--max-tokens,--retry,--no-cache,--share,--add-dir,--attach,--skip-permissions-unsafeand--auto low/--auto mediumare all in that category. Silence was the other option, since--helpstill lists them; the pages instead name each one and quote the refusal, on the grounds that a reader who has just read--helpneeds to be told which half of it runs. Two smaller cases follow the same rule:trusted_directoriesis parsed and merged from both config layers and then never read by anything, so the tables say so instead of describing a behaviour it does not have, and--systemis documented as its own help text describes it, additional user context rather than a system-prompt override, which is the opposite of what the page previously said. Three inventedcortex configsubcommands were replaced with the real surface, the credential resolution order was corrected on two pages where it was printed backwards, and three of the ten values in the execution-defaults block were wrong.Not included
No images, by design. No public inference API reference: there is no public inference API to document yet, and
reference/platform-apisays so rather than describing one that does not exist. No operator or deployment guide.Test plan
node scripts/check-docs-content.mjsand bothscripts/check-docs-site.mjsruns pass from a clean checkoutbash scripts/tests/check-docs-content.test.shandbash scripts/tests/check-docs-site.test.shpassnode scripts/tests/docs-ui.test.mjspassesnpx mint@4.2.876 validatepasses, andmint devrenders eight tabs with the navbar working as the product switcher/api/*tree and the*/overviewpages that flattened into hubsapi.cortex.foundationshould be published at all