From 72b6147668b399527cb4b31deeb4e1807279ae42 Mon Sep 17 00:00:00 2001 From: Teffen Ellis Date: Mon, 3 Aug 2026 18:27:41 +0100 Subject: [PATCH 1/3] root: switch cspell to typo-only reporting cSpell's default mode reports every word it does not recognize, so each new integration name or identifier needed a dictionary entry. Switch to unknownWords: report-common-typos, which matches CodeSpell's behavior: only known misspellings (reported with a suggested fix) and flagWords fail the check. Remove the per-topic dictionaries and word-shape ignore regexes this makes unnecessary, fix the 18 typos the old allowlists were masking, and document the new workflow. Claude-Session: https://claude.ai/code/session_014ZuquWGxU5ReaXR5D3NmwW --- AGENTS.md | 4 +- authentik/lib/utils/reflection.py | 2 +- authentik/outposts/signals.py | 2 +- cspell.config.jsonc | 165 ++------------- locale/en/dictionaries/golang.txt | 20 -- locale/en/dictionaries/idp.txt | 9 - locale/en/dictionaries/ignore.txt | 27 --- locale/en/dictionaries/integrations.txt | 91 -------- locale/en/dictionaries/overrides.txt | 4 + locale/en/dictionaries/people.txt | 16 -- locale/en/dictionaries/python.txt | 13 -- locale/en/dictionaries/rust.txt | 16 -- locale/en/dictionaries/software-terms.txt | 198 ------------------ .../src/tokio/proxy_protocol/header.rs | 2 +- packages/geo/test/labels.test.ts | 2 - scripts/node/utils/node.mjs | 10 +- ...26-06-18-How-CSS-Is-Made-And-Next-Steps.md | 2 +- .../radius/RadiusProviderFormForm.ts | 2 +- web/src/admin/users/UserListPage.ts | 2 +- web/src/elements/LicenseNotice.ts | 4 +- web/src/styles/global/locales/ja/globals.css | 4 - web/src/styles/global/locales/zh/globals.css | 4 - .../unit/unescape-locale-entities.test.ts | 1 - web/types/dom.d.ts | 2 - web/types/rapi-doc/index.d.ts | 2 - website/AGENTS.md | 13 +- .../developer-docs/frontend/cascade-layers.md | 1 - .../frontend/css-architecture.md | 1 - website/docs/releases/2022/v2022.12.md | 2 +- website/docs/releases/2024/v2024.2.md | 2 +- website/docs/releases/2024/v2024.4.md | 1 - website/docs/releases/2025/v2025.12.md | 3 +- website/docs/releases/2026/v2026.2.md | 1 - website/docs/releases/2026/v2026.5.md | 3 +- website/docs/security/cves/CVE-2026-49443.md | 1 - .../grommunio/index.md | 1 - 36 files changed, 51 insertions(+), 582 deletions(-) delete mode 100644 locale/en/dictionaries/golang.txt delete mode 100644 locale/en/dictionaries/idp.txt delete mode 100644 locale/en/dictionaries/ignore.txt delete mode 100644 locale/en/dictionaries/integrations.txt create mode 100644 locale/en/dictionaries/overrides.txt delete mode 100644 locale/en/dictionaries/people.txt delete mode 100644 locale/en/dictionaries/python.txt delete mode 100644 locale/en/dictionaries/rust.txt delete mode 100644 locale/en/dictionaries/software-terms.txt diff --git a/AGENTS.md b/AGENTS.md index 22b156d89281..05b8a86f7626 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -30,7 +30,7 @@ packages/ # Shared workspace packages, polyglot: web/ # TypeScript web UI (own AGENTS.md) website/ # Docs / integrations / API sites (own AGENTS.md) blueprints/ # YAML declarative config (default/ system/ example/) applied at startup -locale/ # Backend translations (.po) + shared cspell dictionaries (en/dictionaries/) +locale/ # Backend translations (.po) + cspell overrides dictionary (en/dictionaries/) tests/ # Cross-cutting test support: e2e/, integration/, geoip/, openid_conformance/ schemas/ # Third-party XSD/JSON schemas (SAML, WS-*, SCIM) used at runtime scripts/ # Repo automation (schema build, compose generation, node setup, semver) @@ -106,7 +106,7 @@ make web-test # Web UI tests (delegates to web/) ```bash make lint-fix # Auto-fix: black + ruff (Python) and rustfmt (Rust) make lint # Check: bandit, mypy --strict, golangci-lint, cargo deny/machete -make lint-spellcheck # cspell across the repo (shared dictionaries in locale/en/dictionaries/) +make lint-spellcheck # cspell across the repo (typo-only mode: reports known misspellings and forbidden British spellings, not unknown words) make lint-catalogs # pnpm catalog pins in sync across the root/web/website workspaces ``` diff --git a/authentik/lib/utils/reflection.py b/authentik/lib/utils/reflection.py index 57ba00dcd8ae..a40af32a651e 100644 --- a/authentik/lib/utils/reflection.py +++ b/authentik/lib/utils/reflection.py @@ -16,7 +16,7 @@ def all_subclasses[T: type](cls: T, sort=True) -> list[T] | set[T]: - """Recursively return all subclassess of cls""" + """Recursively return all subclasses of cls""" classes = set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c, sort=sort)] ) diff --git a/authentik/outposts/signals.py b/authentik/outposts/signals.py index b0086a3fa275..29bdc1ba70ff 100644 --- a/authentik/outposts/signals.py +++ b/authentik/outposts/signals.py @@ -118,7 +118,7 @@ def outpost_related_post_save(sender, instance: OutpostServiceConnection | Outpo def outpost_reverse_related_post_save(sender, instance: CertificateKeyPair | Brand, **_): for field in instance._meta.get_fields(): - # Each field is checked if it has a `related_model` attribute (when ForeginKeys or M2Ms) + # Each field is checked if it has a `related_model` attribute (when ForeignKeys or M2Ms) # are used, and if it has a value if not hasattr(field, "related_model"): continue diff --git a/cspell.config.jsonc b/cspell.config.jsonc index da90b518a7c1..bb0fff787948 100644 --- a/cspell.config.jsonc +++ b/cspell.config.jsonc @@ -5,6 +5,13 @@ "version": "0.2", "readonly": true, "language": "en-US", + // Only report words that are known misspellings (with a suggested fix) or + // explicitly forbidden via `flagWords`. Unknown-but-plausible words — project + // jargon, identifiers, integration names — pass silently, so new terms do not + // require dictionary entries. This mirrors CodeSpell's behavior, which checks + // against a curated list of common misspellings rather than flagging every + // word absent from a dictionary. + "unknownWords": "report-common-typos", "cache": { "useCache": true, "cacheLocation": "./.cspellcache", @@ -19,68 +26,18 @@ } ] ], + // In typo-only mode, a dictionary entry is needed only when a legitimate term + // collides with the common-misspellings list. Record such collisions here + // rather than reviving per-topic dictionary files. "dictionaryDefinitions": [ { - "name": "en-x-authentik-software-terms", - "path": "./locale/en/dictionaries/software-terms.txt", - "description": "English software-related terms", + "name": "en-x-authentik-overrides", + "path": "./locale/en/dictionaries/overrides.txt", + "description": "Legitimate terms that collide with the common-misspellings list", "addWords": true - }, - { - "name": "en-x-authentik-idp", - "path": "./locale/en/dictionaries/idp.txt", - "description": "English IdP words", - "addWords": true - }, - { - "name": "en-x-authentik-python", - "path": "./locale/en/dictionaries/python.txt", - "addWords": true - }, - { - "name": "en-x-authentik-rust", - "path": "./locale/en/dictionaries/rust.txt", - "addWords": true - }, - { - "name": "en-x-authentik-golang", - "path": "./locale/en/dictionaries/golang.txt", - "addWords": true - }, - { - "name": "en-x-authentik-people", - "path": "./locale/en/dictionaries/people.txt", - "description": "People names relevant to authentik", - "addWords": true - }, - { - "name": "en-x-authentik-integrations", - "path": "./locale/en/dictionaries/integrations.txt", - "description": "English integration names", - "addWords": true - }, - { - "name": "en-x-authentik-ignore", - "path": "./locale/en/dictionaries/ignore.txt", - "description": "English ignore list for authentik", - "addWords": true, - "noSuggest": true } ], - "dictionaries": [ - "en-x-authentik-software-terms", - "en-x-authentik-idp", - "en-x-authentik-ignore", - "en-x-authentik-people", - "en-x-authentik-integrations", - "node", - "softwareTerms", - "software-tools", - "computing-acronyms", - "companies", - "cpp-compound-words" - ], - "allowCompoundWords": true, + "dictionaries": ["en-x-authentik-overrides"], // British spellings to reject in favor of American variants. The `->` form // forbids the left word and offers the right word as the suggested fix. "flagWords": [ @@ -162,75 +119,25 @@ "name": "EncodedURI", "description": "Encoded URIs, which are common in authentik's codebase and often contain many false positives.", "pattern": "[a-zA-Z]+%3A%2F%2F.+" - }, - { - "name": "ConfSuffix", - "description": "Variables with `conf` or `config` suffix", - "pattern": ["\\w+(conf|config)\\b", "\\b(conf|config)\\w+"] } ], + // Only content-scoping patterns belong here (encoded blobs, upstream + // identifiers spelled the British way) — not word allowlists. Unknown words + // are no longer reported, so shape-of-word escapes are unnecessary. "ignoreRegExpList": [ - // DB Migrations - "authentik_c_\\w+_[0-9a-fA-F]+_idx", - // Google Analytics - "/G-[0-9A-Z]+/", - // Github Usernames - "@[a-zA-Z0-9_-]+", - // GitHub repositories - "github\\.com/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+", - // Docker images - "docker\\.io/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+", - // Suffix "change", which is common in migration files - "\\w+change\\b", - // Prefix "on", which is common in event handlers - "\\bon\\w+\\b", - // Prefix "pg", which is common in PostgreSQL-related code - "\\bpg\\w+\\b", - // Prefix "pf", which is common in PatternFly-related code - "\\bpf\\w+\\b", - // Prefix "ws", which is common in WebSocket-related code - "\\bws\\w+\\b", - // Suffix "propertymapping" - "\\w+propertymapping\\b", - // Words that end with "source", "provider", "user", "group", or "connection", - // which are common in authentik's codebase and often contain many false positives. - "\\w+(source|provider)(user|group|connection)\\b", - "\\w+(source|provider)(user|group|connection)", + // Encoded URIs + "EncodedURI", // Basic auth header "Basic [a-zA-Z0-9+/=]+", - // "ify" suffix, e.g. "stringify", "classify". - "\\w+l?ify\\b", - // "ified" suffix, e.g. "stringified", "classified". - "\\w+l?ified\\b", - // "ifying" suffix, e.g. "stringifying", "classifying". - "\\w+l?ifying\\b", // PatternFly's grey label modifier is spelled the British way upstream. "pf-m-grey", - // Other terms we needed - "AKQL", - "Base64", - "Email", - "EncodedURI", - "FOUC", // Flash Of Unstyled Content - "HashStrings", - "PublicKey", - "RsaCert", - "SpellCheckerIgnoreInDocSetting", - "SshRsa", - "UnicodeRef", - "Urls", - "analyse-phase", // UK Spelling - "href", - "lit-analyse" // UK Spelling + // lit-analyzer's CLI and its build phase are spelled the British way upstream. + "analyse-phase", + "lit-analyse" ], "languageSettings": [ { "languageId": "markdown,mdx", - "dictionaries": [ - "en-x-authentik-python", - "en-x-authentik-rust", - "en-x-authentik-golang" - ], "ignoreRegExpList": [ // Fenced code blocks "/^\\s*```[\\s\\S]*?^\\s*```/gm", @@ -242,16 +149,6 @@ { "languageId": "typescript,javascript,typescriptreact,javascriptreact,mdx,astro", "ignoreRegExpList": [ - // Event handlers e.g. onClick, onmouseover - "\\bon\\w+\\b", - // Custom web component tags e.g. , - " { /// Contains the host name value passed by the client, as an UTF-8 encoded string. In case of /// TLS being used on the client connection, this is the exact copy of the `server_name` /// extension as defined by RFC3546, section 3.1, often referred to as SNI. There are probably - /// other situations where an authority can be mentionned on a connection without TLS being + /// other situations where an authority can be mentioned on a connection without TLS being /// involved at all. Authority(Cow<'a, str>), diff --git a/packages/geo/test/labels.test.ts b/packages/geo/test/labels.test.ts index 8a7e22af4705..8e0a71112796 100644 --- a/packages/geo/test/labels.test.ts +++ b/packages/geo/test/labels.test.ts @@ -37,7 +37,6 @@ test("normalizePlace accepts legacy pmap:-prefixed names", () => { }); test("normalizePlace rejects unwanted kinds and nameless places", () => { - // spellchecker:disable-next-line expect(normalizePlace({ kind: "neighbourhood", name: "Mitte" }, 0, 0)).toBe(null); expect(normalizePlace({ kind: "locality" }, 0, 0)).toBe(null); }); @@ -99,7 +98,6 @@ test("country reveal zoom is tiered by population, not the dump's min_zoom", () normalizePlace( { "kind": "country", - // spellchecker:disable-next-line "name": "Österreich", "name:en": "Austria", "min_zoom": 4, diff --git a/scripts/node/utils/node.mjs b/scripts/node/utils/node.mjs index bec68ed91ae6..7fa19e087577 100644 --- a/scripts/node/utils/node.mjs +++ b/scripts/node/utils/node.mjs @@ -67,7 +67,7 @@ export function loadJSON(jsonPath) { }); } -const PackageJSONComparisionFields = /** @type {const} */ ([ +const PackageJSONComparisonFields = /** @type {const} */ ([ "name", "dependencies", "devDependencies", @@ -77,14 +77,14 @@ const PackageJSONComparisionFields = /** @type {const} */ ([ ]); /** - * @typedef {typeof PackageJSONComparisionFields[number]} PackageJSONComparisionField + * @typedef {typeof PackageJSONComparisonFields[number]} PackageJSONComparisonField */ /** * Extracts only the dependency fields from a package.json object for comparison purposes. * * @param {PackageJSON} data - * @returns {Pick} + * @returns {Pick} */ export function pluckDependencyFields(data) { /** @@ -92,13 +92,13 @@ export function pluckDependencyFields(data) { */ const result = {}; - for (const field of PackageJSONComparisionFields) { + for (const field of PackageJSONComparisonFields) { if (data[field]) { result[field] = data[field]; } } - return /** @type {Pick} */ (result); + return /** @type {Pick} */ (result); } //#region Versioning diff --git a/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md b/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md index 3aa301c8fa6d..a7fa1387f2f8 100644 --- a/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md +++ b/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md @@ -5,7 +5,7 @@ This document describes how the CSS is built in our current system, and what we can do to make that process less challenging and fraught with difficulties: -## styleLoaderPlugin (./bundler/style-loader-pluging/node.js) +## styleLoaderPlugin (./bundler/style-loader-plugging/node.js) All of our CSS is complied together by this ESBuild plug. diff --git a/web/src/admin/providers/radius/RadiusProviderFormForm.ts b/web/src/admin/providers/radius/RadiusProviderFormForm.ts index cd59e22c2197..eba34089eade 100644 --- a/web/src/admin/providers/radius/RadiusProviderFormForm.ts +++ b/web/src/admin/providers/radius/RadiusProviderFormForm.ts @@ -32,7 +32,7 @@ const mfaSupportHelp = msg( ); const clientNetworksHelp = msg( - "List of CIDRs (comma-seperated) that clients can connect from. A more specific CIDR will match before a looser one. Clients connecting from a non-specified CIDR will be dropped.", + "List of CIDRs (comma-separated) that clients can connect from. A more specific CIDR will match before a looser one. Clients connecting from a non-specified CIDR will be dropped.", ); export interface RADIUSProviderFormProps { diff --git a/web/src/admin/users/UserListPage.ts b/web/src/admin/users/UserListPage.ts index 2893219e0d4e..c37edf2c4bdd 100644 --- a/web/src/admin/users/UserListPage.ts +++ b/web/src/admin/users/UserListPage.ts @@ -204,7 +204,7 @@ export class UserListPage extends WithLicenseSummary( [msg("Actions"), null, msg("Row Actions")], ]; - //#region Renderering + //#region Rendering protected override renderToolbarSelected(): TemplateResult { const disabled = this.selectedElements.length < 1; diff --git a/web/src/elements/LicenseNotice.ts b/web/src/elements/LicenseNotice.ts index a0753bc9686f..6ef85dd38150 100644 --- a/web/src/elements/LicenseNotice.ts +++ b/web/src/elements/LicenseNotice.ts @@ -9,7 +9,7 @@ import { css, html, nothing } from "lit"; import { customElement, property } from "lit/decorators.js"; @customElement("ak-license-notice") -export class AKLicenceNotice extends WithLicenseSummary(AKElement) { +export class AKLicenseNotice extends WithLicenseSummary(AKElement) { public static styles = [ css` ::part(container) { @@ -44,6 +44,6 @@ export class AKLicenceNotice extends WithLicenseSummary(AKElement) { declare global { interface HTMLElementTagNameMap { - "ak-license-notice": AKLicenceNotice; + "ak-license-notice": AKLicenseNotice; } } diff --git a/web/src/styles/global/locales/ja/globals.css b/web/src/styles/global/locales/ja/globals.css index 4ad83206926b..d2fbcf4929b5 100644 --- a/web/src/styles/global/locales/ja/globals.css +++ b/web/src/styles/global/locales/ja/globals.css @@ -4,16 +4,12 @@ html[lang="ja"], html[lang^="ja-"] { - /* spellchecker:disable */ - --ak-font-family-sans-serif: "M PLUS 2", "Noto Sans JP", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", メイリオ, Meiryo, "MS Pゴシック", var(--ak-generic-sans-serif); --ak-font-family-serif: "Noto Serif JP", var(--ak-generic-serif); - /* spellchecker:enable */ - --ak-font-family-heading: var(--ak-font-family-sans-serif); --pf-c-content--h1--FontWeight: 500; diff --git a/web/src/styles/global/locales/zh/globals.css b/web/src/styles/global/locales/zh/globals.css index 4df99813329d..5ea39a0eb741 100644 --- a/web/src/styles/global/locales/zh/globals.css +++ b/web/src/styles/global/locales/zh/globals.css @@ -3,8 +3,6 @@ */ html[lang^="zh"] { - /* spellchecker:disable */ - --ak-font-family-sans-serif: "Noto Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif, var(--ak-generic-sans-serif); @@ -15,8 +13,6 @@ html[lang^="zh"] { "Noto Sans SC", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; - /* spellchecker:enable */ - --pf-c-content--h1--FontWeight: 500; body { diff --git a/web/test/unit/unescape-locale-entities.test.ts b/web/test/unit/unescape-locale-entities.test.ts index bfe02c103384..251e3c1a2ba2 100644 --- a/web/test/unit/unescape-locale-entities.test.ts +++ b/web/test/unit/unescape-locale-entities.test.ts @@ -1,4 +1,3 @@ -// cspell:ignore bearbeiten Versuche Beispielsweise nichts sehen Avaa import { sanitizeLocaleModule } from "../../scripts/unescape-locale-entities.mjs"; import { describe, expect, it } from "vitest"; diff --git a/web/types/dom.d.ts b/web/types/dom.d.ts index 2967ea987295..667ca960d458 100644 --- a/web/types/dom.d.ts +++ b/web/types/dom.d.ts @@ -2,8 +2,6 @@ * @file Global DOM-related types. */ -/* spellchecker:ignore closedBy */ - export {}; declare global { diff --git a/web/types/rapi-doc/index.d.ts b/web/types/rapi-doc/index.d.ts index db60955d6e35..c47cd01a29cd 100644 --- a/web/types/rapi-doc/index.d.ts +++ b/web/types/rapi-doc/index.d.ts @@ -2,7 +2,6 @@ declare module "rapidoc" { // eslint-disable-next-line @typescript-eslint/no-unused-vars type Booleanish = "true" | "false"; - // spellchecker:disable /** * Web Component based Swagger & OpenAPI Spec Viewer * @@ -73,7 +72,6 @@ declare module "rapidoc" { * @attr {string} api-key-value - Value of the API key (can be overwritten from UI). * @attr {"omit" | "same-origin" | "include"} fetch-credentials - Credentials mode for cross-domain calls. */ - // spellchecker:enable class RapiDoc extends HTMLElement { /** * Programmatically load a spec. diff --git a/website/AGENTS.md b/website/AGENTS.md index 02915fa9d8ab..7fd449210958 100644 --- a/website/AGENTS.md +++ b/website/AGENTS.md @@ -128,15 +128,14 @@ Avoid renaming/moving pages unless necessary; better organization rarely justifi ## Spell checking -Spell checking uses **cspell** (`make lint-spellcheck`, config `../cspell.config.jsonc`). Custom dictionaries live in `../locale/en/dictionaries/` (`software-terms.txt`, `integrations.txt`, `idp.txt`, language-specific lists, `people.txt`, `ignore.txt`). Add genuinely new product/service/technology terms to the appropriate dictionary rather than rewording correct prose; never disable the checker for a whole page. +Spell checking uses **cspell** (`make lint-spellcheck`, config `../cspell.config.jsonc`) in typo-only mode (`unknownWords: "report-common-typos"`): it reports only words on the common-misspellings list (always with a suggested fix) and forbidden British spellings. Unknown words — product names, jargon, identifiers — pass silently, so a new integration or technology term needs **no** dictionary entry. -For a genuine one-off that does not belong in a dictionary (a deliberate misspelling in an example, an opaque token), use an inline cspell comment scoped as tightly as possible: +If the checker flags a word whose spelling is intentional (a third-party API member, a deliberate misspelling in an example), either: -- `` in Markdown/MDX, or `// spellchecker:ignore ...` in code — allow specific words for the rest of the file. -- `` / `// spellchecker:disable-next-line` — skip just the following line. -- `` … `` — skip a bounded region (avoid; prefer the narrower forms). +- add it to `../locale/en/dictionaries/overrides.txt` if it may recur across files, or +- use an inline comment scoped as tightly as possible for a true one-off: `` in Markdown/MDX (`// spellchecker:ignore ...` in code), or `` for a single line. -Reach for a dictionary entry first — inline ignores are for the rare case the term is truly local to one page. +Never disable the checker for a whole page. ## Deployment @@ -161,6 +160,6 @@ Every PR gets a Netlify Deploy Preview — use it to verify rendering, links, an | Build runtime | Node ≥ 24, npm ≥ 11 (run via `corepack`) | | Package layout | NPM Workspaces (`docs`, `integrations`, `api`, `docusaurus-theme`) | | Lint / format | ESLint 9 (`@goauthentik/eslint-config`) + Prettier (`@goauthentik/prettier-config`) | -| Spell check | cspell + shared dictionaries | +| Spell check | cspell (typo-only mode) | | Types | TypeScript (`tsc -b`) | | Hosting | Netlify + GitHub Actions | diff --git a/website/docs/developer-docs/frontend/cascade-layers.md b/website/docs/developer-docs/frontend/cascade-layers.md index 28db34a436e8..4f2d1eff6ce1 100644 --- a/website/docs/developer-docs/frontend/cascade-layers.md +++ b/website/docs/developer-docs/frontend/cascade-layers.md @@ -4,7 +4,6 @@ sidebar_label: Cascade layers description: How authentik's web UI orders its CSS with @layer, and where each kind of rule belongs. --- - authentik's document CSS is ordered with [cascade layers](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@layer). Layers make the ordering explicit, so a rule's precedence comes from the layer it is assigned to rather than from where it happens to be imported or how specific its selector is. diff --git a/website/docs/developer-docs/frontend/css-architecture.md b/website/docs/developer-docs/frontend/css-architecture.md index a392f030ca12..4f549a9f07ff 100644 --- a/website/docs/developer-docs/frontend/css-architecture.md +++ b/website/docs/developer-docs/frontend/css-architecture.md @@ -4,7 +4,6 @@ sidebar_label: CSS architecture description: How authentik's runtime CSS and design tokens fit together across the theme package, the document cascade, and Lit components. --- - authentik's UI is a customized PatternFly 4 system wrapped in Lit web components. Treat PatternFly as a compatibility layer, not the public API to build on: the stable surface is the `--ak-*` token set. diff --git a/website/docs/releases/2022/v2022.12.md b/website/docs/releases/2022/v2022.12.md index 3265c97aab20..a54285e40490 100644 --- a/website/docs/releases/2022/v2022.12.md +++ b/website/docs/releases/2022/v2022.12.md @@ -137,7 +137,7 @@ image: - web/admin: rework outpost health - web/elements: add grouping and descriptions to search select - web/elements: make ak-search-select limited in height and scroll -- web/elements: render ak-seach-select dropdown correctly in modals +- web/elements: render ak-search-select dropdown correctly in modals - web/user: fix user settings stuck loading ## Fixed in 2022.12.2 diff --git a/website/docs/releases/2024/v2024.2.md b/website/docs/releases/2024/v2024.2.md index b0de6219fc45..1602ad24096a 100644 --- a/website/docs/releases/2024/v2024.2.md +++ b/website/docs/releases/2024/v2024.2.md @@ -213,7 +213,7 @@ helm upgrade authentik authentik/authentik -f values.yaml --version ^2024.2 - enterprise: add full audit log (#8177) - enterprise: fix system task missing set_status (#8455) - enterprise: rework license summary caching (#8501) -- enterrpise: exclude inactive users from license (#8294) +- enterprise: exclude inactive users from license (#8294) - events: add ASN Database reader (#7793) - events: add better fallback for sanitize_item to ensure everything can be saved as JSON (#7694) - events: add graph for event volume (#7639) diff --git a/website/docs/releases/2024/v2024.4.md b/website/docs/releases/2024/v2024.4.md index f510fdcb7b9a..44b185c8354c 100644 --- a/website/docs/releases/2024/v2024.4.md +++ b/website/docs/releases/2024/v2024.4.md @@ -3,7 +3,6 @@ title: Release 2024.4 slug: /releases/2024.4 --- - ## Highlights diff --git a/website/docs/releases/2025/v2025.12.md b/website/docs/releases/2025/v2025.12.md index a2a957d084e4..f50232f5e600 100644 --- a/website/docs/releases/2025/v2025.12.md +++ b/website/docs/releases/2025/v2025.12.md @@ -3,7 +3,6 @@ title: Release 2025.12 slug: "/releases/2025.12" --- - ## Highlights @@ -459,7 +458,7 @@ helm upgrade authentik authentik/authentik -f values.yaml --version ^2025.12 - providers/proxy: move search path to query instead of runtime parameter (cherry-pick #20662 to version-2025.12) (#20692) - providers/radius: fix message authenticator validation (cherry-pick #21824 to version-2025.12) (#21827) - providers/saml: Fix redirect for saml slo (cherry-pick #21258 to version-2025.12) (#21283) -- proviers/ldap: avoid concurrent header writes in API Client (cherry-pick #21223 to version-2025.12) (#21227) +- providers/ldap: avoid concurrent header writes in API Client (cherry-pick #21223 to version-2025.12) (#21227) - root: do not rely on npm cli for version bump (cherry-pick #20276 to version-2025.12) (#20320) - root: fix compose generation for patch releases release candidates (cherry-pick #21353 to version-2025.12) (#21354) - root: update django to 5.2.14 (cherry-pick #22064 to version-2025.12) (#22065) diff --git a/website/docs/releases/2026/v2026.2.md b/website/docs/releases/2026/v2026.2.md index c8ded4a47d6a..eb429cb270fa 100644 --- a/website/docs/releases/2026/v2026.2.md +++ b/website/docs/releases/2026/v2026.2.md @@ -3,7 +3,6 @@ title: Release 2026.2 slug: "/releases/2026.2" --- - ## Highlights diff --git a/website/docs/releases/2026/v2026.5.md b/website/docs/releases/2026/v2026.5.md index bc5b2601a45d..2dd964ac047d 100644 --- a/website/docs/releases/2026/v2026.5.md +++ b/website/docs/releases/2026/v2026.5.md @@ -3,7 +3,6 @@ title: Release 2026.5 slug: "/releases/2026.5" --- - ## Highlights @@ -400,7 +399,7 @@ helm upgrade authentik authentik/authentik -f values.yaml --version ^2026.5 - tasks: threads instead of forks (#19476) - tenants: add option to mark flag as deprecated (#22063) - tenants: fix default schema in initial migration (#21114) -- tenants: fix system flags removeable (cherry-pick #22163 to version-2026.5) (#22182) +- tenants: fix system flags removable (cherry-pick #22163 to version-2026.5) (#22182) - tests: add mixin to launch traefik for tests requiring SSL (#22011) - tests: refactor test harness to split apart a single file (#21391) - translate: Updates for project authentik and language bg_BG (#22112) diff --git a/website/docs/security/cves/CVE-2026-49443.md b/website/docs/security/cves/CVE-2026-49443.md index dec302ea657e..8d8da463f982 100644 --- a/website/docs/security/cves/CVE-2026-49443.md +++ b/website/docs/security/cves/CVE-2026-49443.md @@ -1,4 +1,3 @@ - # CVE-2026-49443 / GHSA-xp7f-xjjx-gwm8 diff --git a/website/integrations/chat-communication-collaboration/grommunio/index.md b/website/integrations/chat-communication-collaboration/grommunio/index.md index 12140aa00849..a09b733a0b36 100644 --- a/website/integrations/chat-communication-collaboration/grommunio/index.md +++ b/website/integrations/chat-communication-collaboration/grommunio/index.md @@ -6,7 +6,6 @@ support_level: community import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; - ## What is grommunio? From eed3544673de84c359875cd950383efe23c8ae5c Mon Sep 17 00:00:00 2001 From: Teffen Ellis Date: Mon, 3 Aug 2026 18:39:40 +0100 Subject: [PATCH 2/3] web/docs: fix style-loader-plugin path and wording in CSS architecture doc Claude-Session: https://claude.ai/code/session_014ZuquWGxU5ReaXR5D3NmwW --- web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md b/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md index a7fa1387f2f8..3cfcf966ff36 100644 --- a/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md +++ b/web/docs/arch/2026-06-18-How-CSS-Is-Made-And-Next-Steps.md @@ -5,9 +5,9 @@ This document describes how the CSS is built in our current system, and what we can do to make that process less challenging and fraught with difficulties: -## styleLoaderPlugin (./bundler/style-loader-plugging/node.js) +## styleLoaderPlugin (./bundler/style-loader-plugin/node.js) -All of our CSS is complied together by this ESBuild plug. +All of our CSS is compiled together by this ESBuild plugin. ## ./scripts/build-web.mjs From 471e194baa6844681b33c30e9045d754b18f7b98 Mon Sep 17 00:00:00 2001 From: Teffen Ellis Date: Mon, 3 Aug 2026 18:44:04 +0100 Subject: [PATCH 3/3] website: remove stray blank lines left by ignore-comment removal Claude-Session: https://claude.ai/code/session_014ZuquWGxU5ReaXR5D3NmwW --- website/docs/developer-docs/frontend/cascade-layers.md | 1 - website/docs/developer-docs/frontend/css-architecture.md | 1 - website/docs/releases/2024/v2024.4.md | 1 - website/docs/releases/2025/v2025.12.md | 1 - website/docs/releases/2026/v2026.2.md | 1 - website/docs/releases/2026/v2026.5.md | 1 - website/docs/security/cves/CVE-2026-49443.md | 1 - .../chat-communication-collaboration/grommunio/index.md | 1 - 8 files changed, 8 deletions(-) diff --git a/website/docs/developer-docs/frontend/cascade-layers.md b/website/docs/developer-docs/frontend/cascade-layers.md index 4f2d1eff6ce1..e98fc9c152f2 100644 --- a/website/docs/developer-docs/frontend/cascade-layers.md +++ b/website/docs/developer-docs/frontend/cascade-layers.md @@ -4,7 +4,6 @@ sidebar_label: Cascade layers description: How authentik's web UI orders its CSS with @layer, and where each kind of rule belongs. --- - authentik's document CSS is ordered with [cascade layers](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@layer). Layers make the ordering explicit, so a rule's precedence comes from the layer it is assigned to rather than from where it happens to be imported or how specific its selector is. ## The layer order diff --git a/website/docs/developer-docs/frontend/css-architecture.md b/website/docs/developer-docs/frontend/css-architecture.md index 4f549a9f07ff..079e78a575f9 100644 --- a/website/docs/developer-docs/frontend/css-architecture.md +++ b/website/docs/developer-docs/frontend/css-architecture.md @@ -4,7 +4,6 @@ sidebar_label: CSS architecture description: How authentik's runtime CSS and design tokens fit together across the theme package, the document cascade, and Lit components. --- - authentik's UI is a customized PatternFly 4 system wrapped in Lit web components. Treat PatternFly as a compatibility layer, not the public API to build on: the stable surface is the `--ak-*` token set. ## The pieces diff --git a/website/docs/releases/2024/v2024.4.md b/website/docs/releases/2024/v2024.4.md index 44b185c8354c..1af33bddeb08 100644 --- a/website/docs/releases/2024/v2024.4.md +++ b/website/docs/releases/2024/v2024.4.md @@ -3,7 +3,6 @@ title: Release 2024.4 slug: /releases/2024.4 --- - ## Highlights - **OAuth/SAML as authentication factor** :ak-enterprise Use an external provider as part of an MFA authentication flow, including custom implementations diff --git a/website/docs/releases/2025/v2025.12.md b/website/docs/releases/2025/v2025.12.md index f50232f5e600..187ac34a4403 100644 --- a/website/docs/releases/2025/v2025.12.md +++ b/website/docs/releases/2025/v2025.12.md @@ -3,7 +3,6 @@ title: Release 2025.12 slug: "/releases/2025.12" --- - ## Highlights - **Endpoint Devices**: :ak-enterprise :ak-preview Endpoint Devices is a new feature set for Windows, macOS, and Linux devices that enables SSH authentication, local device login, and more, all with authentik credentials. See the [Endpoint Devices docs](../../endpoint-devices/index.mdx) for more details. diff --git a/website/docs/releases/2026/v2026.2.md b/website/docs/releases/2026/v2026.2.md index eb429cb270fa..247f751cc08b 100644 --- a/website/docs/releases/2026/v2026.2.md +++ b/website/docs/releases/2026/v2026.2.md @@ -3,7 +3,6 @@ title: Release 2026.2 slug: "/releases/2026.2" --- - ## Highlights - **Object Lifecycle Management**: :ak-enterprise :ak-preview Admins can now automatically schedule periodic reviews of authentik objects (applications, groups, roles) for compliance and auditing purposes. diff --git a/website/docs/releases/2026/v2026.5.md b/website/docs/releases/2026/v2026.5.md index 2dd964ac047d..9361b397101f 100644 --- a/website/docs/releases/2026/v2026.5.md +++ b/website/docs/releases/2026/v2026.5.md @@ -3,7 +3,6 @@ title: Release 2026.5 slug: "/releases/2026.5" --- - ## Highlights - **Account Lockdown**: :ak-enterprise A new panic button for compromised accounts that can immediately cut off access, revoke tokens, end sessions, and leave an audit trail. diff --git a/website/docs/security/cves/CVE-2026-49443.md b/website/docs/security/cves/CVE-2026-49443.md index 8d8da463f982..e7235aab37f8 100644 --- a/website/docs/security/cves/CVE-2026-49443.md +++ b/website/docs/security/cves/CVE-2026-49443.md @@ -1,4 +1,3 @@ - # CVE-2026-49443 / GHSA-xp7f-xjjx-gwm8 ## SourceStage bypass via empty POST diff --git a/website/integrations/chat-communication-collaboration/grommunio/index.md b/website/integrations/chat-communication-collaboration/grommunio/index.md index a09b733a0b36..cc8d950c99d0 100644 --- a/website/integrations/chat-communication-collaboration/grommunio/index.md +++ b/website/integrations/chat-communication-collaboration/grommunio/index.md @@ -6,7 +6,6 @@ support_level: community import RedirectURI20265Note from "../../\_redirect-uri-2026-5-note.mdx"; - ## What is grommunio? > grommunio is an open-source groupware server and collaboration platform offering email, calendar, contacts, tasks, video conferencing, and file sync. It is fully compatible with Microsoft Outlook via MAPI/RPC, EWS, and ActiveSync.