Draft: chore(lint): sync Vale configuration from the gitlab project

Syncs the Vale configuration in this project from the gitlab project, which is the source of truth for those rules. The process is documented at https://docs.gitlab.com/development/documentation/testing/#update-linter-configuration

The source of truth for this sync is gitlab commit 9d9db2d0b2302 on master (2026-08-19).

The existing gitlab_base style directory was deleted and recopied, rather than copied over the top. This ensures rules removed upstream are also removed here. Nothing was removed upstream this time, so no rules were deleted in this MR.

In this project, the Vale styles live in .vale/ at the repository root, not under a docs directory.

Changes

This MR has two commits:

  1. chore(lint): sync Vale configuration from the gitlab project. Files changed:
    • Added .vale/gitlab_base/BoldEmphasis.yml (new rule, error level: flags bold used for simple emphasis, such as **not**).
    • Updated .vale/gitlab_base/AlertFormat.yml. The rule now also flags an italicized or bolded Note: line, not just a plain one.
    • Updated .vale/gitlab_base/OutdatedVersions.yml, OxfordComma.yml, Substitutions.yml, Uppercase.yml, and spelling-exceptions.txt.
  2. docs(lint): exempt internal docs and fix bold emphasis for new Vale rules:
    • The new rules produced 198 error-level findings across 54 files. None were in docs/user/, the surface published to docs.gitlab.com. They were in docs/plans/ (97), docs/specs/ (81), docs/dev/ (10), and .claude/agents/ (10).
    • docs/specs/, docs/plans/, and .claude/agents/ are now exempt in .vale.ini, using the same BasedOnStyles = pattern the file already uses for docs/adr/, .claude/skills/, and docs/dev/documentation/. These are internal working documents and AI agent definitions, not published documentation, and they are not written to the docs style guide. This exemption removes all Vale coverage from those paths, not just the two new rules. It can be narrowed later if the team would rather keep them linted.
    • The 10 findings in docs/dev/ were fixed rather than exempted, since that is developer documentation proper. Removed bold used for simple emphasis in nine places across docs/dev/database-migrations.md, docs/dev/go-secure-coding.md, docs/dev/go-testing.md, and docs/dev/storage.md. Converted a **Note:** paragraph in docs/dev/gitlab-com-infrastructure.md to the > [!note] Markdown alert syntax.

Not changed

These are project-specific and are deliberately left as they are:

  • .vale-user.ini. The stricter configuration for docs/user/ is unchanged.
  • .vale/local/SectionSign.yml. A project-specific rule, not synced from upstream.
  • .markdownlint-cli2.yaml and user.markdownlint-cli2.yaml. No rule changes were needed. This project's deliberate differences from the gitlab project — proper-names: false, its own ignores list, and no custom rules — are kept.
  • The gitlab_docs, gitlab_release_index, and gitlab_release_notes styles, and the .tmpl output templates. These are not used by this project.

Testing

Ran Vale 3.14.1 and markdownlint-cli2 0.22.1 locally, matching the versions in this project's docs lint image. All four lint passes are clean:

  • vale --minAlertLevel error . reports 0 errors across 304 files.
  • vale --config=.vale-user.ini --minAlertLevel error docs/user reports 0 errors across 2 files.
  • markdownlint-cli2 '**/*.md' '!docs/user/**' reports 0 errors across 151 files.
  • markdownlint-cli2 --config user.markdownlint-cli2.yaml 'docs/user/**/*.md' reports 0 errors across 2 files.

Merge request reports

Loading
Loading