diff --git a/.vscode/settings.json b/.vscode/settings.json index bd5dc4422..73c2654bd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -307,9 +307,6 @@ // Enable / Disable compound words like 'errormessage'. "cSpell.allowCompoundWords": true, - // Words to be ignored and not suggested. - "cSpell.ignoreWords": ["behaviour"], - // Specify paths/files to ignore. "cSpell.ignorePaths": [".git/", "node_modules/"], diff --git a/_assets/styles/_about.scss b/_assets/styles/_about.scss index 9b3eb22f3..dc7c78cfd 100644 --- a/_assets/styles/_about.scss +++ b/_assets/styles/_about.scss @@ -1,8 +1,8 @@ // The about page: the question the project started from, how the community -// is organised, and where things stand. +// is organized, and where things stand. // It reads at the same 1200px width as docs and home, and sets its own -// offset under the fixed navbar. Colours come from _sublime-theme.scss; +// offset under the fixed navbar. Colors come from _sublime-theme.scss; // $about-muted matches the tone _home.scss and _docs.scss give secondary // copy, so all three pages read alike. @@ -118,7 +118,7 @@ $about-hairline: rgb(167 151 139 / 55%); text-wrap: balance; } -// The four verbs recur sitewide, coloured here as home colours them in its +// The four verbs recur sitewide, colored here as home colors them in its // masthead. .about-question em { font-style: normal; @@ -169,7 +169,7 @@ $about-hairline: rgb(167 151 139 / 55%); // A rule between the columns rather than above each: the three are parallel // and carry equal weight. Spacing comes from padding rather than a column -// gap, so the rule sits centred between two columns and the outer edges stay +// gap, so the rule sits centered between two columns and the outer edges stay // flush with the heading above. .about .tenet { padding-inline: clamp(1rem, 2.2vw, 2rem); diff --git a/_assets/styles/_docs.scss b/_assets/styles/_docs.scss index b67f80c75..1951d36c0 100644 --- a/_assets/styles/_docs.scss +++ b/_assets/styles/_docs.scss @@ -3,7 +3,7 @@ // The docs index: what is written, and what is still open. // This page reads wider than the 48ch column the rest of the site uses, so it -// sets its own width and its own offset under the fixed navbar. Colours come +// sets its own width and its own offset under the fixed navbar. Colors come // from _sublime-theme.scss; $docs-muted is the tone _home.scss gives secondary // copy, so the two pages read alike. @@ -291,7 +291,7 @@ $docs-flag-text: shade-color($quaternary, 25%); line-height: 1.6; } -// The chip carries the state in text, so it does not rest on colour alone. +// The chip carries the state in text, so it does not rest on color alone. .docs-index .rule-flag { padding: 0.0625rem 0.4375rem; font-family: $font-family-monospace; diff --git a/_assets/styles/_home.scss b/_assets/styles/_home.scss index 066da7382..9625858fc 100644 --- a/_assets/styles/_home.scss +++ b/_assets/styles/_home.scss @@ -110,9 +110,9 @@ pointer-events: none; opacity: 0.14; - // Up by a fifth, not a third. At a third the circle's centre sits behind + // Up by a fifth, not a third. At a third the circle's center sits behind // the fixed navbar on a phone, so all that shows is the cap below its - // widest point, and a cap reads as an oval. A fifth keeps the centre clear + // widest point, and a cap reads as an oval. A fifth keeps the center clear // of the navbar at every width, so the curve is legible as a circle. transform: translate(30%, -20%); } diff --git a/_assets/styles/_nav.scss b/_assets/styles/_nav.scss index 65e63c572..9815609c2 100644 --- a/_assets/styles/_nav.scss +++ b/_assets/styles/_nav.scss @@ -39,7 +39,7 @@ bento-sidebar { margin-block: calc(var(--bs-navbar-padding-y) * -1); } -// Marks the current page beside `aria-current`, so it is not colour alone. +// Marks the current page beside `aria-current`, so it is not color alone. .navbar-dark .nav-link.active { border-bottom: 2px solid $primary; } diff --git a/_assets/styles/_news-item.scss b/_assets/styles/_news-item.scss index 556f055c6..b9068d8bd 100644 --- a/_assets/styles/_news-item.scss +++ b/_assets/styles/_news-item.scss @@ -2,7 +2,7 @@ // the same 1200px width as the rest of the site; the prose between them sits // at a reading measure instead, because this page is for reading. -// Colours come from _sublime-theme.scss and match the tone _news.scss gives +// Colors come from _sublime-theme.scss and match the tone _news.scss gives // the archive, so the two pages agree on what a category and a date look // like. $news-item-wrap: 1200px; @@ -70,7 +70,7 @@ $news-item-hairline: rgb(167 151 139 / 55%); margin: 0; } -// The same flat, opaque chip as the archive's, recoloured for the ink it +// The same flat, opaque chip as the archive's, recolored for the ink it // sits on: ink text on the light accent. .news-item .entry-cat { display: inline-block; @@ -213,7 +213,7 @@ $news-item-hairline: rgb(167 151 139 / 55%); } /* --- Foot: prev/next ---------------------------------------------------- - Only rendered when a neighbour exists (see the layout's own condition), so + Only rendered when a neighbor exists (see the layout's own condition), so it never shows on a lone post. */ diff --git a/_assets/styles/_news.scss b/_assets/styles/_news.scss index 59d5ec2df..f52133e6e 100644 --- a/_assets/styles/_news.scss +++ b/_assets/styles/_news.scss @@ -4,7 +4,7 @@ // earlier as a plain list. Reads at the same 1200px width as home, docs, and // about, with its own offset under the fixed navbar. -// Colours come from _sublime-theme.scss. $news-muted matches the tone the +// Colors come from _sublime-theme.scss. $news-muted matches the tone the // other pages give secondary copy; $news-link doubles as the category chip's // fill, so the chip and every link on the page draw from one dark teal. $news-wrap: 1200px; @@ -120,7 +120,7 @@ $news-quiet-bg: color.mix($tertiary, $body-bg, 12%); } /* --- Category chip --------------------------------------------------- - Flat and opaque: one fixed pair of colours, so it reads the same in the + Flat and opaque: one fixed pair of colors, so it reads the same in the featured band and in the list below. */ diff --git a/_assets/styles/_sublime-theme.scss b/_assets/styles/_sublime-theme.scss index 136bcde2b..a43a66e20 100644 --- a/_assets/styles/_sublime-theme.scss +++ b/_assets/styles/_sublime-theme.scss @@ -10,7 +10,7 @@ $spacer: 1rem; $body-color: #1d1916; // The navbar is `bg-dark`, which until now meant Bootstrap's own #212529: a -// colour this palette never chose. Against parchment nobody could tell, but +// color this palette never chose. Against parchment nobody could tell, but // a page with a dark section under the navbar puts a cool grey directly on // our warm ink and it reads as a mistake. Our dark is the ink. $dark: $body-color; diff --git a/build/shared/commit-message.mts b/build/shared/commit-message.mts index 9a18ad157..6f7c89a63 100644 --- a/build/shared/commit-message.mts +++ b/build/shared/commit-message.mts @@ -12,7 +12,7 @@ * * Each is spelt so that it is drawn as an emoji and no more: the characters * that would otherwise come out as flat text carry U+FE0F, and the ones - * already drawn in colour do not carry one they have no use for. A test holds + * already drawn in color do not carry one they have no use for. A test holds * the list to that. */ export const CATEGORIES: Record = { @@ -107,14 +107,14 @@ const countGraphemes = (text: string) => [...SEGMENTER.segment(text)].length; /** * A trailer is `Token: value` with no whitespace in the token. Written out * rather than taken from a list of known tokens, so that a line *meant* as a - * trailer is recognised as one and can be reported as misspelt. + * trailer is recognized as one and can be reported as misspelt. */ const TRAILER_LINE = /^(?[A-Za-z][\w-]*):[ \t]*(?.*)$/; /** * `Assisted-by` names a tool, not a person, and so takes neither a name nor an * address: the Linux kernel defines it as `AGENT_NAME:MODEL_VERSION` followed - * by any specialised analysis tools, and nodejs/node lands it that way. Basic + * by any specialized analysis tools, and nodejs/node lands it that way. Basic * development tools are left out. */ const ASSISTED_BY_VALUE = /^[^\s:]+:\S+( \S+)*$/; diff --git a/build/shared/commit-message.test.mts b/build/shared/commit-message.test.mts index 7c928c391..639a6a423 100644 --- a/build/shared/commit-message.test.mts +++ b/build/shared/commit-message.test.mts @@ -287,7 +287,7 @@ describe('validateCommitMessage: against what landed', () => { describe('readTrailers', () => { test('agrees with git about where the trailers are', () => { - // The rules describe git's behaviour, so git is the thing to check them + // The rules describe git's behavior, so git is the thing to check them // against. Every disagreement found in review is in this table. const messages = [ '🏗️🔧:fix it', @@ -323,8 +323,8 @@ describe('readTrailers', () => { describe('the vocabulary', () => { test('is spelt so that every entry is drawn as an emoji, and no more', () => { // Two ways to get this wrong, and both leave a second spelling of one - // symbol: a character that needs U+FE0F to be drawn in colour and does - // not carry it, and one drawn in colour already that carries a selector + // symbol: a character that needs U+FE0F to be drawn in color and does + // not carry it, and one drawn in color already that carries a selector // it has no use for. for (const emoji of [...Object.keys(CATEGORIES), ...Object.keys(ACTIONS)]) { const [base = ''] = [...emoji]; diff --git a/build/tasks/compile/siteify-health-files.mts b/build/tasks/compile/siteify-health-files.mts index 7e3701e29..5756a0a55 100644 --- a/build/tasks/compile/siteify-health-files.mts +++ b/build/tasks/compile/siteify-health-files.mts @@ -59,7 +59,7 @@ const getHealthFileContents = (file: string) => { }; /** - * Add site metdata to document frontmatter and copy to collection dir. + * Add site metadata to document frontmatter and copy to collection dir. * @param {string} file * @param {string} destDir * @param {!(Object | undefined)} frontmatterOverrides diff --git a/build/tasks/verify/verify-filenames.mts b/build/tasks/verify/verify-filenames.mts index 6c1677f0f..8630e35e7 100644 --- a/build/tasks/verify/verify-filenames.mts +++ b/build/tasks/verify/verify-filenames.mts @@ -17,7 +17,7 @@ const KEBAB_CASE = /^_?[a-z0-9]+(?:-[a-z0-9]+)*$/; /** * The shouted names convention reserves for metadata that sits beside the * work rather than being part of it: `README.md`, `AUTHORS`, `LICENSE/`, and - * the licence identifiers inside it, such as `CC-BY-SA-4.0.txt`. + * the license identifiers inside it, such as `CC-BY-SA-4.0.txt`. */ const METADATA_CASE = /^[A-Z][A-Z0-9_-]*$/; diff --git a/build/tasks/verify/verify-md.mts b/build/tasks/verify/verify-md.mts index 95858a752..8c6d63378 100644 --- a/build/tasks/verify/verify-md.mts +++ b/build/tasks/verify/verify-md.mts @@ -27,7 +27,6 @@ const scripts = [ `prettier --check ${markdownFiles.join(' ')}`, `markdownlint-cli2 ${markdownFiles.join(' ')}`, `remark -f --silently-ignore ${markdownFiles.join(' ')}`, - `cspell lint ${markdownFiles.join(' ')}`, ]; for (const element of scripts) { diff --git a/build/tasks/verify/verify-spelling.mts b/build/tasks/verify/verify-spelling.mts new file mode 100644 index 000000000..05b5c7462 --- /dev/null +++ b/build/tasks/verify/verify-spelling.mts @@ -0,0 +1,33 @@ +/** + * @file Verify prose everywhere is spelt the way this project spells it. + * @author The OpenINF Authors & Friends + * @license MIT OR Apache-2.0 OR BlueOak-1.0.0 + * @module {type ES6Module} build/tasks/verify/verify-spelling + */ + +import { exec, glob } from '@openinf/portal/build/utils'; + +// Comments and template prose are read as often as the documentation is, and +// cspell's `en` dictionary is the American one, so this is also what holds the +// project to American spelling: a British variant is an unknown word to it. +const files = await glob([ + '**/*.{md,html,liquid,scss,mts,mjs,json,yml,yaml,sh}', + '!node_modules/', + '!_site/', + '!.pnpm-store/', + // Other people's words, reproduced verbatim: a license is not ours to edit, + // and a lockfile is not prose. + '!**/COPYING.md', + '!**/LICENSE/**', + '!pnpm-lock.yaml', + // Generated by compile.siteifyHealthFiles from the OpenINF/.github + // repository. Fixes applied here are overwritten on the next build; the + // source files are the place to change them. + '!collections/_docs/code-of-conduct.md', + '!collections/_docs/contributing.md', + '!collections/_docs/security.md', + '!collections/_docs/support.md', + '!collections/_pages/vision.md', +]); + +process.exitCode = await exec(`cspell lint ${files.join(' ')}`); diff --git a/collections/_pages/about.html b/collections/_pages/about.html index 174e0e123..8b9281aac 100644 --- a/collections/_pages/about.html +++ b/collections/_pages/about.html @@ -3,7 +3,7 @@ layout: default permalink: /about/ description: - The question OpenINF formed around, how the work is organised, and where + The question OpenINF formed around, how the work is organized, and where things currently stand. body_classes: - about @@ -29,7 +29,7 @@

About

diff --git a/collections/_pages/home.html b/collections/_pages/home.html index 36ac03bb3..8f50c9448 100644 --- a/collections/_pages/home.html +++ b/collections/_pages/home.html @@ -242,7 +242,7 @@

How we work

>

- Open issues across the organisation marked as suitable to pick up. + Open issues across the organization marked as suitable to pick up. See also