Files
Lauren Hirata Singh 3c51d3c5af build: pin Vale once in .mise.toml instead of three times
Vale was pinned in four places with three different versions, so prose could
pass locally and fail in CI:

- `.github/workflows/lint-prose.yml` installed 3.17.1
- `.mise.toml` pinned 3.12.0
- `Makefile` defaulted `VALE_VERSION` to v3.9.6
- `scripts/install-vale.sh` fell back to unpinned `brew install vale` on macOS
  and `jdkato/vale:latest` under Docker

A macOS contributor therefore linted with whatever Homebrew last installed
(3.18.0 on the machine this was found on) while CI gated on 3.17.1.

Make `.mise.toml` the only pin. The Makefile, the install script, and the
workflow now read the version from it, so a bump happens in one place. Keep
3.17.1, the version CI already enforces, so no new violations appear; bumping
the engine is a separate decision.

Also fix two latent bugs in `scripts/install-vale.sh`:

- The release tag carries a "v" prefix but the asset filename does not, and the
  script interpolated the same string into both. With its own v3.9.6 default it
  requested `.../download/v3.9.6/vale_v3.9.6_Linux_64-bit.tar.gz`, which 404s.
  The version is now normalized and the two forms are built separately.
- An existing `.bin/vale` short-circuited the install regardless of its version,
  so a stale binary was never replaced. The script now compares `vale --version`
  against the pin, and reuses a matching binary already on PATH rather than
  downloading a second copy.

The unpinned Homebrew and Docker paths are gone; every platform now gets the
pinned tarball, including macOS on both architectures. The version is read from
a config file and interpolated into a download URL, so it is validated against
a bare-semver pattern first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 15:31:28 -04:00
..
2026-07-28 14:47:33 +02:00
2026-04-28 12:41:06 -04:00
2025-10-15 10:34:25 -04:00