How the docs are organized
The site is Mintlify, configured bydocs/docs.json. Every page is an .mdx file in docs/, and a page only appears in the sidebar once it is listed in a navigation group of docs.json.
The four places a user-facing change goes
When a change affects how humans or agents use Baseline (new, changed, or removed commands, flags, behavior, routes, seed config, or SDK integration), update all four in the same pull request:README.md
The repository front page, including the provider list.
skills/*/SKILL.md
The agent skill for each affected service.
docs/
The Mintlify page, plus its navigation entry in
docs/docs.json.CLI --help
The help text in
packages/cli/src/index.ts.npx @deploybaseline/cli, never npx baseline.
Provider route lists
The API reference generator reads every`METHOD /path` written in a provider page. A bullet line in this form also gives the operation its title and description:
email and…”) gives no title, and the operation is named from its path instead. The rest of the line becomes the description.
The nearest ## or ### heading above a mention becomes the operation’s tag (its group in the sidebar), unless the heading is generic, such as “Routes” or “Endpoints”. Any parameter spelling works (:id, {id}, <id>), and paths may be written relative to the API’s base (/tickets/:id under /api/v2). A relative path gives a title only when it lines up with the route (a parameter for a parameter), and one made only of parameters (/:bucket) never does, since it fits under any prefix. A registered route that the page never mentions still appears in the reference, with a title derived from its path.
Generated content
Conformance
scripts/conformance.mjs writes CONFORMANCE.md and docs/snippets/conformance/<provider>.mdx from the coverage matrices, gate settings, vendored specs, the lockfile, and conformance/verified.json. Provider pages import their snippet:
pnpm conformance, then fails when git diff --exit-code reports any change to CONFORMANCE.md or docs/snippets/conformance. Regenerate after any change to a matrix, gate, vendored spec, or tested SDK version.
API reference
scripts/generate-api-reference.mjs builds packages/@deploybaseline/<provider>/api-reference.json for every provider. The CLI build ships them all, and the console serves them at /docs (see API reference). It is grounded in what the code actually serves, not in what the docs claim:
1
Routes from the plugin
The operations are the routes the plugin registers, read with
pluginRoutes from @deploybaseline/testing. A route that is not registered never appears.2
Titles and tags from the provider page
Titles and tags are parsed from the route lines in
docs/<provider>.mdx (see Provider route lists).3
Response schemas from the vendored spec
When
packages/@deploybaseline/<provider>/spec/openapi.json exists, matching operations get its response schemas.4
Status from the coverage matrix
Each operation carries
x-baseline-status (supported, partial, or not_started) from src/__tests__/coverage.ts.x-baseline-route (the pattern exactly as registered) and, when the vendored spec has it, x-vendor-operation. Route patterns become OpenAPI paths: :id becomes {id}, a regex parameter keeps its pattern, and Microsoft’s alternatives (:mailbox{me|users/[^/]+}) show their first alternative. A trailing /* route under which concrete routes exist is a fallback (it answers unknown paths with the vendor’s not-found error); fallbacks are listed under x-baseline.fallbacks rather than as operations. Only the vendor schemas some operation reaches are kept.
It also writes docs/snippets/providers/<provider>.mdx, the “At a glance” block on each provider page (package, port, config key, operation count, and start commands). The site has no per-provider reference pages: the endpoint reference lives in the CLI.
The script reads built providers, so run make build first. Output depends only on repository content, never on the time of the run. CI runs pnpm api-reference --check, which fails when any generated file is stale or a provider page mentions a route that is not registered. Regenerate whenever you add or remove a route, change a provider page, refresh a vendored spec, or change a matrix status. pnpm api-reference stripe regenerates one provider while you work.
Vendored specs
Where a vendor publishes an OpenAPI document under a license we can use, a trimmed copy lives atpackages/@deploybaseline/<provider>/spec/openapi.json.
-
Sources are declared in
SOURCESat the top ofscripts/vendor-spec.mjswith their repository, branch, file, and license. The header also records why some providers are not vendored (no license, or no usable spec). -
The copy is pinned to an upstream commit and keeps only the operations the emulator registers, with their JSON response schemas and the component schemas they reach. Run
pnpm buildfirst: routes come from the provider’sdist. -
Each file carries its provenance in
x-baseline-source: - The fetch date only changes when the trimmed shapes change, so rerunning is a no-op.
-
A new source needs a license check and a
THIRD_PARTY_NOTICES.mdentry before it lands.
scripts/vendor-graphql-schema.mjs, which writes src/graphql/schema.generated.ts for GitHub, Linear, and Shopify.
Weekly drift checks
TheSpec drift workflow (.github/workflows/spec-drift.yml) runs every Monday and on demand. For each provider in vendor-spec.mjs --list it refreshes the spec, and when the shapes changed it runs the provider’s tests against the new spec and opens or updates a spec-drift/<provider> PR listing the responses that no longer match. A graphql-drift job does the same for vendored GraphQL schemas on schema-drift/<provider> branches.
To resolve a drift PR, fix the emulator, or rerun node scripts/generate-spec-allow.mjs <provider> and give each new allow entry a reason. PRs opened with the workflow token do not trigger CI; close and reopen the PR to run it.
Previewing
http://localhost:3333. Run Mintlify on an LTS Node release. Links between pages use absolute paths without the extension (/configuration, /contributing/architecture), and mint broken-links catches any that do not resolve.