Skip to content

chore(ci): remove Vale in favor of the prose linter - #7916

Open
jstirnaman wants to merge 10 commits into
masterfrom
chore/remove-vale
Open

jstirnaman wants to merge 10 commits into
masterfrom
chore/remove-vale

Conversation

@jstirnaman

@jstirnaman jstirnaman commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Closes #7470 and #7899.

Based on master; #7903 is merged. Updated through 889a262b3 with conflicts resolved.

What changed

  • Delete Vale:
    • Configs: .vale.ini, .vale-instructions.ini, and the five product .vale.ini files.
    • .ci/vale/ (styles, vocabulary, and the vale.sh wrapper).
    • The Vale workflow, vale-check.sh, and resolve-shared-content.sh, which only the Vale workflow used.
    • The Vale commit hooks in lefthook.yml.
    • The vale-linting and vale-rule-config skills.
  • Delete check-pinned-deps.yml. Vale was the only dependency it updated.
  • Replace Vale comments in 70 content files with prose-lint comments:
    • vale off and vale on become prose-lint off and prose-lint on.
    • InfluxDataDocs.v3Schema maps to V3Terms, and Google.Ordinal maps to Ordinal.
    • Vale.Terms comments are removed. No config enabled that rule.
  • The plugin port script (port_to_docs.js) now writes prose-lint comments.
  • Drop the linter's temporary vale off and vale on alias.
  • Preserve the jts* branch gate for the prose-lint workflow.
  • Handle GFM recovery nodes without source positions by reparsing affected blocks as CommonMark. This fixes the commit-hook crash on a malformed contributor link in Telegraf release notes while preserving adjacent findings and source locations.
  • Remove Vale from the dev container, VS Code settings, Claude settings, agent files, skills, DOCS-CONTRIBUTING.md, and DOCS-TESTING.md.
  • Rewrite SPELL-CHECK.md to cover only manual Codespell runs.

Why

#7903 has merged the Vale rules worth keeping into the prose linter. Vale cost more to configure and work around than it found, and cloud sessions can't run it.

Impact

  • No style check blocks a merge. The prose linter reports warnings and notices only.
  • Hooks and CI no longer check spelling.
  • Contributors no longer need Vale or Docker for style checks.

Verification

  • yarn test:lint-prose: 92 pass, including malformed-link regressions for paragraphs, lists, tables, and multiline blocks.
  • yarn test:sync-plugins: 80 pass.
  • yarn test:verify-changed: 4 pass.
  • npx hugo --quiet --destination /private/tmp/remove-vale-merge-build: passes; 6,454 index pages rendered.
  • Code-block lint passes across all 70 changed content files, with existing nonblocking JavaScript, Python, and shell warnings.
  • Agent adapter generation and validation, npx lefthook validate, actionlint, formatting, and commit hooks pass.
  • The prose-lint hook completes on the Telegraf release notes that previously crashed.
  • No active Vale references remain in source, configuration, or contributor instructions. The historical execution-plan reference to this branch remains.
  • GitHub reports the updated branch as mergeable. Fresh CI checks are running.

Checklist


Generated by Claude Code

What changed:
- Add scripts/ci/lint-prose.mjs and scripts/lib/prose-lint.mjs. The
  linter parses Markdown with remark and checks only paragraphs,
  headings, and table cells. Code, front matter, HTML, URLs, paths, and
  shortcodes are never checked; {{% product-name %}} reads as InfluxDB.
- Port the Vale rules that matter to scripts/ci/prose-lint/rules.yml:
  InfluxData terms, cross-product names, v3 terms, the Google rules
  that were enabled, the trimmed Google word list, repeated words, and
  cliches. Spelling and heading capitalization aren't ported.
- Every rule carries flag and pass examples; the tests run each one.
- Add the lint-prose pre-commit hook, yarn lint:prose,
  yarn test:lint-prose, and the Prose Lint workflow.
- Document prose linting in DOCS-TESTING.md.

Why:
Vale costs more to configure and work around than it finds. A Markdown
parser removes the scope workarounds (TokenIgnores, IgnoredScopes), and
the linter runs anywhere Node runs, including cloud sessions.

Impact:
Findings are warnings or notices and never block a commit or merge.
Vale still runs unchanged; a follow-up removes it.

Verification:
- yarn test:lint-prose: 89 pass. The tests failed before the linter
  existed.
- Ran on all content files in 53 seconds. Sampled findings per rule and
  fixed false positives (dotted identifiers, package names, table data).
- npx lefthook validate passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NiFuxdSqYvtMpAhNfWBbM
What changed:
- <!-- prose-lint off --> and <!-- prose-lint on --> on their own lines
  turn checks off and back on. Rule IDs after off or on limit the switch
  to those rules.
- <!-- vale off --> and <!-- vale on --> work the same way until the
  Vale removal migrates the 49 files that use them.
- Document the comments in rules.yml and DOCS-TESTING.md.

Why:
Generated plugin docs and intentionally wrong examples already opt out of
Vale. Without an equivalent, the prose linter reports findings nobody
should fix.

Impact:
Content wrapped in vale off and on comments gets no prose findings.

Verification:
yarn test:lint-prose: 92 pass. The three new tests failed first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NiFuxdSqYvtMpAhNfWBbM
What changed:
- Delete the Vale configs (.vale.ini, .vale-instructions.ini, and five
  product .vale.ini files), .ci/vale/, the Vale workflow and its
  scripts, and the Vale commit hooks.
- Delete check-pinned-deps.yml. Vale was its only dependency.
- Delete the vale-linting and vale-rule-config skills.
- Replace 68 files' Vale comments with prose-lint comments. Map
  v3Schema to V3Terms and Google.Ordinal to Ordinal; drop Vale.Terms,
  which no config enabled. The plugin port script now writes
  prose-lint comments.
- Drop the linter's vale off and on alias.
- Remove Vale from the dev container, editor settings, agent files,
  skills, DOCS-CONTRIBUTING.md, DOCS-TESTING.md, and SPELL-CHECK.md.
  SPELL-CHECK.md now covers only manual Codespell runs.
- Change py fences to python in the three get-started write pages, as
  the commit hook requires for touched files.

Why:
The prose linter covers the Vale rules worth keeping, runs anywhere Node
runs, and doesn't block merges. Vale cost more to maintain than it found.

Impact:
No style check blocks a merge. Spelling isn't checked in hooks or CI.

Verification:
- yarn test:lint-prose: 91 pass.
- Plugin port tests pass with prose-lint comments.
- yarn validate:agent-instructions and npx lefthook validate pass.
- git grep finds no remaining Vale references outside static downloads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NiFuxdSqYvtMpAhNfWBbM
# Conflicts:
#	.github/workflows/pr-vale-check.yml
#	.vale.ini
#	content/influxdb/v2/.vale.ini
#	content/influxdb3/cloud-dedicated/.vale.ini
#	content/influxdb3/cloud-serverless/.vale.ini
#	content/influxdb3/clustered/.vale.ini
#	content/influxdb3/core/.vale.ini
@jstirnaman
jstirnaman requested a review from a team as a code owner October 17, 2026 15:26
@jstirnaman
jstirnaman requested review from sanderson and removed request for a team October 17, 2026 15:26
@github-actions github-actions Bot added product:chronograf Chronograf documentation product:explorer InfluxDB 3 Explorer product:flux Flux language documentation product:kapacitor Kapacitor documentation product:shared Shared content across products product:telegraf Telegraf documentation product:v1 InfluxDB v1 OSS product:v1-enterprise InfluxDB Enterprise v1 product:v2 InfluxDB v2 (Cloud TSM, OSS) product:v2-cloud InfluxDB Cloud (TSM) product:v3-distributed InfluxDB 3 Cloud Serverless, Cloud Dedicated, Clustered product:v3-monolith InfluxDB 3 Core and Enterprise (single-node / clusterable) labels Oct 17, 2026
What changed:
DOCS-TESTING.md and the docs-testing skill send checks that need
judgment, such as sentence-case headings, to the gdd-style skill from
influxdata/docs-skills. .claude/settings.json already enables it.

Why:
The prose linter checks patterns only. Vale's heading capitalization
rule isn't ported, so the skill covers it.

Impact:
Agents and contributors know where judgment-based style checks live.

Verification:
yarn validate:agent-instructions passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018NiFuxdSqYvtMpAhNfWBbM
@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot added the product:v3-cloud InfluxDB 3 Cloud (hosted Enterprise) label Nov 1, 2026
jstirnaman pushed a commit that referenced this pull request Nov 2, 2026
What changed: Added PLAN.md, which merges the CI optimization analysis,
the dependency-hardening plan from claude/hugo-dependency-management-h7v86e,
and the prepare-release.yml handover. Removed HANDOVER.md; its content is
section 1.4 of the plan. The plan also says which open CI PRs to merge
(#7897, #7903, #7916, #7898) and in what order.

Why: Several CI branches and PRs overlapped, and nothing recorded how they
interact or in what order they should land.

Impact: None on the site or CI. Remove PLAN.md before merging;
block-ephemeral-docs.yml blocks it on the default branch.

Verification: Checked each PR's check runs, reviews, and mergeability.
Tested pairwise merges with git merge-tree. Checked the plan's file and
workflow references against this branch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8dDksVqLwKNcXsjXWuyy2
Base automatically changed from chore/prose-lint to master November 3, 2026 22:21
@jstirnaman jstirnaman added the waiting:product Waiting for product/PM decision label Nov 3, 2026
@jstirnaman jstirnaman self-assigned this Nov 3, 2026
@jstirnaman
jstirnaman removed the request for review from sanderson November 3, 2026 23:17
What changed:
- Merge master at 889a262 into chore/remove-vale and resolve seven conflicts.
- Retain the jts branch gate for the prose-lint workflow and the prose-only
  suppression syntax from the Vale-removal branch.
- Preserve current agent and release guidance, regenerate adapters, and migrate
  suppression comments on the two newly added MQTT publisher pages.
- Keep the obsolete Vale wrapper deleted and retain prose lint hooks.
- Reparse malformed-link blocks as CommonMark when GFM recovery nodes lack
  source positions, preserving adjacent findings and their locations.

Why:
PR #7916 conflicted with changes merged since its original prose-linter stack,
including updated Vale tooling, agent guidance, and new generated plugin pages.

Impact:
Existing Vale-removal commits remain intact. Current deployment and plugin
validation fixes from master are included. Unrelated installer deletions are
excluded from this commit.

Verification:
- 92 prose-lint, 80 plugin-sync, and 4 changed-file verifier tests pass.
- Regression coverage exercises malformed links in paragraphs, lists, tables,
  and multiline blocks; Telegraf release-note prose lint completes.
- Hugo build passes and renders 6454 index pages.
- Code-block lint passes across all 70 changed content files, with existing
  nonblocking JavaScript, Python, and shell warnings.
- Agent adapter generation and validation, lefthook validation, actionlint,
  formatting, and targeted gate/suppression checks pass.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

product:chronograf Chronograf documentation product:explorer InfluxDB 3 Explorer product:flux Flux language documentation product:kapacitor Kapacitor documentation product:shared Shared content across products product:telegraf Telegraf documentation product:v1-enterprise InfluxDB Enterprise v1 product:v1 InfluxDB v1 OSS product:v2-cloud InfluxDB Cloud (TSM) product:v2 InfluxDB v2 (Cloud TSM, OSS) product:v3-cloud InfluxDB 3 Cloud (hosted Enterprise) product:v3-distributed InfluxDB 3 Cloud Serverless, Cloud Dedicated, Clustered product:v3-monolith InfluxDB 3 Core and Enterprise (single-node / clusterable) waiting:product Waiting for product/PM decision

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Claude Code cloud sessions can't run Vale (Docker unavailable, binary install blocked) and yarn lint leaves jsconfig.json dirty

2 participants