Repository navigation
Conversation
… not have
scripts/cli-command-tree.ts loads every command module that cli.ts's
commandLoaders registers and prints the citty command tree (subcommands,
flags, aliases, value types, hidden and deprecated markers) as JSON. It reads
the real definitions, not --help text, so it sees exactly what citty parses.
scripts/check-docs-cli-references.mjs scans docs/**/*.mdx (fenced blocks with
backslash continuations, inline code, and the catalog's InstallCommand
command props) for `hyperframes ...` / `npx hyperframes ...` invocations and
resolves each one the way citty does: the first non-flag word that is not a
string flag's value names the subcommand. Unknown commands, subcommands and
flags are errors with a "did you mean"; deprecated commands and flags and
hidden flags are warnings. Placeholders (<dir>, [opts], {id}, $VAR, ...),
comments, `--`, other tools (`npx skills add heygen-com/hyperframes`,
`npm i -g hyperframes`) and the release logs are left alone. Quoted CLI
output opts out with {/* cli-references: ignore */}.
The Docs workflow runs it on docs and CLI source changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ocs or say why not scripts/check-docs-impact.mjs compares the merge base with HEAD on two surfaces and fails when one changed and nothing under docs/ did: - CLI: every visible command, subcommand, flag, alias and flag value type, from scripts/cli-command-tree.ts. The base tree is built in a temporary worktree (bun install + core build), only when packages/cli/src changed outside tests and fixtures. - Public exports: for every package.json that is not private and declares exports (package-subpaths.mjs's rule), its exports subpaths, bin names and the names its root entry exports through `export *` chains, read from git with the TypeScript parser (scripts/public-api-surface.mjs). A PR opts out with the docs-not-needed label or a `docs-impact: none` line in its body, passed in as PR_LABELS / PR_BODY. --dry-run prints the verdict and exits 0; --base-tree/--head-tree take prebuilt trees. The Docs impact workflow runs it on every PR to main, including label and body edits, so changing the opt-out re-runs it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…to the workflow tests Splits codeSpans, the flag and subcommand walk, the export walker and the docs-impact entry point into small functions so fallow's audit passes, adds scripts/cli-command-tree.test.ts (cli.ts's loader block and a citty command described end to end), and lists docs-impact.yml among the workflows that read the PR body on an edit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… clean The Studio download page hands Linux browsers the .deb by default and the AppImage only on request, so the install steps now match what people get. models and clean had full sections but no row in the command finder. The quoted auto-update line is output, not a command, so the CLI-references check skips it, and its versions now look current. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
Contributor
Edit accuracy: accurate 271 (base branch 271), smooth 150 of thoseThe gate passes. Quarantined, measured but not gated (0) Unstable (1)
|
This was referenced Oct 20, 2026
Collaborator
Author
|
Closing. The doc fixes moved to #5946. The two CI checks are parked: the docs-impact gate would add a rule to every engineer's PRs, which needs a team conversation first, and the CLI-references check is ~900 lines for what can be pitched lean if the team wants it. The branch stays for reference. |
This branch was successfully deployed
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.
What
Two CI checks so the docs can't quietly drift from the code, plus the stale facts they found.
docs.yml, jobcli-references): everyhyperframes <command> --flagshown indocs/**/*.mdxmust exist in the real CLI. The source of truth is the CLI's own command modules (scripts/cli-command-tree.ts: 88 commands, 668 flags), not--helptext. Unknown commands or flags fail with a "did you mean"; deprecated or hidden ones warn. Quoted CLI output can opt out with{/* cli-references: ignore */}.docs-impact.yml): a PR that changes CLI commands, flags or public package exports must touchdocs/, or carry thedocs-not-neededlabel, or adocs-impact: noneline in the PR body.modelsandclean, and the update-notice example shows current versions.Why
The docs had drifted in small ways nobody noticed (Linux install, missing commands). Agents read these pages too, so a stale command becomes a failed run.
How
\continuations), inline code and<InstallCommand>props; handlesnpx/bunx/env prefixes, placeholders (<x>,...,$X) and anything after--; flag spelling followsreject-unknown-flags.ts.packages/cli/srcchanged; exports are read from git with the TypeScript parser (no build). Measured on the last 149 main commits: 6 changed exports, 1 touched docs.docs-impact.yml(no path filter; reruns on edited/labeled/unlabeled), not onmerge_groupbecause a merge group has no PR body.Test plan
bun run test:scripts781/781 node + 109/109 vitesttypecheck:scripts,oxlint(0),oxfmt --check,check-test-reachability,fallow audit --base origin/mainc0636d0(addedsnapshot --keep, touched docs) passes;d5162beb5(3 new core exports, no docs) fails, passes with the label🤖 Generated with Claude Code