Skip to content

Chore(CI): repair spell checking and fix the typos it finds - #765

Open
matthewmcneely wants to merge 2 commits into
mainfrom
ci-repair-spellcheck
Open

Chore(CI): repair spell checking and fix the typos it finds#765
matthewmcneely wants to merge 2 commits into
mainfrom
ci-repair-spellcheck

Conversation

@matthewmcneely

@matthewmcneely matthewmcneely commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

Makes spell checking able to run, and fixes the 36 real typos it turns up.

This PR alone does not switch spell checking back on. GitHub Actions is disabled repository-wide (actions/permissions reports "enabled": false), and ci-spell-checking is additionally marked disabled_manually. Both are repository settings, not files, so they need an admin to flip them. See "Before this takes effect" below, which includes a hazard worth reading first.

The problem

Three separate things were wrong, and each one alone was enough to make the check vacuous.

The path filters pointed at a directory that no longer exists. Both workflows filtered on ./content/, which has not existed since the Docusaurus migration. any_changed was therefore always false and every step was skipped. The runs still reported success, which is why this went unnoticed. The last real run of ci-spell-checking was 2025-11-05.

Actions was later disabled entirely. The last run of any of these workflows was 2025-12-04. Nothing has run since.

Repointing the paths is still not enough, because the check then fails immediately on existing content. Two further causes:

Vale.Terms was reading the vocabulary as a casing authority. .github/styles/config/vocabularies/Dgraph/accept.txt is a spelling accept-list, but Vale.Terms enforces the exact casing of every entry it finds there. Because the file lists both GraphQL and graphql, and lists Cluster without cluster, the result was 1,378 error-level false positives across the corpus:

Message Count
Use 'graphql' instead of 'GraphQL'. 652
Use 'Cluster' instead of 'cluster'. 287
Use 'Dgraph' instead of 'dgraph'. 118
...and 12 more patterns 321

write-good was enabled. Its E-Prime rule flags every use of "is", "are", and "be", which is unworkable for reference documentation: 25 alerts in a 3-file sample. It is a prose-style linter covering ground documentation-style-guide.md already covers, by a different standard.

What changed

  • .github/workflows/ci-spell-checking.yml — paths repointed at the four next-content directories, *.md and *.mdx. Also pins the Vale version so a new release cannot silently change what CI accepts, moves to actions/checkout@v4 with the history changed-files needs, and passes the file list through the environment rather than interpolating it into the shell.
  • .github/workflows/deployments.yml — deleted. It ran reviewdog misspell, which Vale supersedes, and its filename described a deployment it never performed. CloudFlare Pages handles deployment through its GitHub integration, not a workflow.
  • .github/.vale.iniVale.Terms off with a comment explaining why, write-good dropped, mdx added to the file glob.
  • accept.txt — 145 entries added and the file sorted, so future diffs stay readable. The additions are identifiers (backupId, forceFull, taskId), technical terms (backpressure, linearizability, snapshotting, varints), product names, abbreviations (PVCs, SSTs, vCPUs), and a few deliberate oddities in sample data: goe and sourc are stemmer-output fragments in a tokenizer example, and Un nouvel is French sample data in an RDF example.

The typos it found

20 misspellings, including AplhaAlpha in the glossary, transactoinstransactions, RetreiveRetrieve, prediatepredicate, forfullfulfill, wouildwould, parcticespractices, attriubutesattributes, and MinmizesMinimizes in two link labels.

16 duplicated words, including will lead the the declarationto the, must be equal the the JWT claimto the, and what your app needs to toto do.

All are fixed in docs/, docs-graphql/, and docs-learn/, and backported to version-v25.4 in both versioned trees, since those are live on the site today. Older snapshots are left as the historical record they are.

Scope

Linting covers docs/, docs-graphql/, docs-ratel/, and docs-learn/ only. The *_versioned_docs/ snapshots are frozen copies that are not edited in place, and a version cut copies the next content forward already checked, so linting them would double every alert for no benefit. It also means a release PR like #763 will not drag 227 snapshot files through the linter.

Before this takes effect

Re-enable Actions for the repository (Settings → Actions → General), then re-enable the ci-spell-checking workflow, which is separately marked disabled_manually. Both are repository settings rather than files, so neither can be changed by this PR.

Stale bot, handled here

stale.yml runs nightly at 01:30 UTC and had no exempt labels configured, so re-enabling Actions after this long a quiet period would have marked a backlog of still-wanted work as stale. This PR adds exempt lists:

  • Issues: bug, accepted, RFC, help wanted, good first issue, investigate, triage:delayed, reviewing
  • PRs: accepted, RFC, reviewing, triage:delayed, cherry-pick

Dependabot PRs are deliberately left unexempt. The next bump supersedes them, so closing is the right outcome.

Measured against the open backlog, every item that would currently qualify as stale is now handled:

Category Count Outcome
Issues labelled bug (#700, #707, #713, #730) 4 Exempt
Contribution PRs (#755, #728, #708, #699) 4 Labelled reviewing, now exempt
Dependabot PRs 12 Marked stale, as intended

The four contribution PRs carried no labels, so no exempt list could reach them. They have been labelled reviewing separately from this PR.

Testing

Since CI cannot run yet, this was verified locally with Vale 3.7.1, the version the workflow now pins:

  • All four content directories: 0 errors, 0 warnings, and 0 suggestions in 293 files, exit code 0.
  • The CI invocation simulated against this PR's own 30 changed files: also clean, exit code 0.
  • npm run build passes, confirming the two corrected link labels still resolve.

The workflow YAML parses, but it has not executed. That is the one thing here I could not verify end to end.

Both spellcheck workflows filtered on ./content/, a directory that has
not existed since the Docusaurus migration, so neither has run against
any documentation. Repointing them exposed two further problems.

Vale.Terms treats every Vocab entry as a casing rule, but the Dgraph
vocabulary is a spelling accept-list. That mismatch produced 1,378 false
positives, including "use 'graphql' instead of 'GraphQL'" 652 times.
Terms is now disabled and the vocabulary keeps its intended role.

write-good was also enabled, and its E-Prime rule flags every use of
"is", "are", and "be". It is a prose-style linter that duplicates
documentation-style-guide.md, so this drops it and keeps Vale core.

With the check working, Vale.Spelling and Vale.Repetition found 36 real
typos that had gone unnoticed: 20 misspellings (Aplha, transactoins,
Retreive, prediate, forfull, wouild, and others) and 16 duplicated
words. All are fixed in the next content and backported to
version-v25.4, the version served as latest.

deployments.yml is removed. It ran reviewdog misspell, which Vale
supersedes, and its name described a deployment it never performed.

Lint scope is the four next-content directories. The versioned
snapshots are frozen copies, and a version cut carries this content
forward already checked.

Verified with Vale 3.7.1: 0 errors, 0 warnings, and 0 suggestions across
293 files. npm run build passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
stale.yml has run with no exempt labels, so re-enabling Actions after a
long quiet period would mark a backlog of still-wanted work as stale.
Exempts the labels that denote deliberate, open work for issues and PRs.

Dependabot PRs are deliberately left unexempt, since the next bump
supersedes them and closing is the right outcome.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant