Skip to content

chore(vale): accept upstream Vale 3.21.0 - #333

Merged
thecodedrift merged 1 commit into
mainfrom
vendor/vale/republish
Sep 15, 2026
Merged

thecodedrift merged 1 commit into
mainfrom
vendor/vale/republish

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Upstream Vale is ahead of the version this repository packages.

This updates .github/scripts/vale-manifest.json to the new upstream
version and replaces every platform's SHA256 with the digest from
upstream's vale_<version>_checksums.txt.

Reviewing this is the trust boundary. Merging it authorizes the
publish phase to download those exact archives and package them; a
download that does not match a digest here aborts the run and
publishes nothing. Check the digests against upstream's checksums file
for the release before approving.

Merging this triggers the publish phase, which stamps every platform
package <valeVersion>-<yyyymmddhhmmss> and publishes the set. That
publish is inert on its own: @taskless/cli pins exact versions, so
nothing reaches a consumer until that pin is deliberately bumped.

This pull request rolls: if upstream releases again before it merges,
the branch, title, and body are rewritten to the newer version rather
than a second pull request being opened. Push a commit to the branch
and that stops — the workflow will not force-push over a commit it did
not write.


Upstream release notes — 3.21.0

https://github.com/vale-cli/vale/releases/tag/v3.21.0

doc(...) selections

A scope term that selects document elements by CSS selector, the same way in every format. Headings are wrapped in nested section elements first, so a rule can name a section:

extends: occurrence
message: "An ADR has a Decision section."
level: error
scope: 'doc(section:has(> h2:contains("Decision")))'
token: '(?s).'
min: 1

Alone, the selection is one block. Beside a scope, sentence & doc(...), it narrows that scope to the element. Negated, it excludes it. A metric rule with a scope now measures each block the scope names, so a section can have a word budget.

Docs: Selections, metric

TextFSM Views

A textfsm View reads plain text through a template in the form Google's TextFSM defined, run by Vale itself. What it captures becomes scopes placed at their line and column, so a rule can target a commit's subject or a transcript's turns. A conditional rule's new in key looks for second in another View scope, so a ! in a subject can require a BREAKING CHANGE: trailer.

Docs: TextFSM guide, conditional

Jupyter notebooks

.ipynb is a format: Markdown cells as Markdown, code cells as code in the kernel's language, outputs skipped. Alerts point into the notebook file itself.

Docs: Jupyter

Changelog

  • ed711769 perf: index the walker's context instead of scanning it
  • 252d0963 perf: index rune positions and resume column counts per block
  • 0dfd6e82 chore: accept configs and docstring in vocab
  • 9dfbc902 docs: add GitBook badge
  • 7285105b docs: README
  • 5992ffce docs: update README
  • d0ea8b46 feat: apply BlockIgnores and TokenIgnores to HTML
  • b4e2aa74 fix: keep the source's space between a dash and inline markup (#1177)
  • 4774cedd fix: a sequence rule with a negated scope double-reports every match (#1169)
  • 91af4046 fix: make the CLA bot signable
  • 0f8ed52a feat: lint Jupyter notebooks as a format of their own
  • 4da60aa6 feat: join a selected list into one value, so a notebook cell is one block
  • 683a2f65 feat: let a conditional look for its consequent in another View scope
  • 4c0f64f2 fix: apply a dasel View to any file its section matches
  • 1734e780 feat: give an unfilled textfsm value an empty scope, so min can report it
  • abbf2ec6 test: read past Git's comment lines in the commit View
  • 7ebd026d fix: name the file and both dasel causes when a View selector fails
  • 8aab425a fix: let a raw pattern contain a percent sign
  • 0c35215c fix: place a zero-width match, and report a rule error under a View
  • 1e4f6edc fix: keep a package's StylesPath out of the path list, and let the project's rule settings win
  • c18dcab0 ci: tell the docs about a release
  • e0a2250d feat: validate actions at load, carry their suggestions, and let edit run a pipeline
  • d039c952 feat: read plain text through TextFSM templates as a view engine
  • cfddd62e feat: select document elements with doc(...) and measure any block
  • 42c3ba6f fix: keep a line break after inline markup (#1174)

@github-actions github-actions Bot added the skip-changeset PR intentionally ships no release note (bypasses the changeset requirement) label Sep 15, 2026
@thecodedrift thecodedrift changed the title chore(vale): pin Vale 3.21.0 chore(vale): accept upstream Vale 3.21.0 Sep 15, 2026
@thecodedrift
thecodedrift merged commit b9b48c9 into main Sep 15, 2026
4 checks passed
@thecodedrift
thecodedrift deleted the vendor/vale/republish branch September 15, 2026 06:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changeset PR intentionally ships no release note (bypasses the changeset requirement)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant