Skip to content

[Maintenance] Tool-version drift #511

Description

@github-actions

Tool-version drift detected

One or more reviewed tool or image pins differ from upstream stable.

  • shfmt (mvdan/sh): pinned 3.13.1, upstream latest 3.14.0
  • typos (crate-ci/typos): pinned 1.49.0, upstream latest 1.50.0
  • editorconfig (editorconfig-checker/editorconfig-checker): pinned 3.11.1, upstream latest 3.11.2
  • lefthook-validate (evilmartians/lefthook): pinned 2.1.10, upstream latest 2.1.12
  • ruff (astral-sh/ruff): pinned 0.16.3, upstream latest 0.16.5
  • biome (@biomejs/biome): pinned 2.5.9, upstream latest 2.5.11
  • Runtime Node.js: pinned 24.19.0, reviewed line latest 24.20.0
  • zizmor: pinned 1.29.0 (digest dd96df044a6e8538d5f423790f453bdd03d49e5b2bcc38214acc41a2f1297839), upstream latest 1.30.0 (digest ec8c95cd800845abb9bbc5f377ec7c57d2eb8e2386a00a201d3a74ee4092e5ed)
  • golangci-lint: pinned 2.13.1, upstream latest 2.13.2

Absorb procedure

Bump the version: (or analyzer-version:) default in the listed
.github/actions/<name>/action.yml. For binary-install lanes (shellcheck,
shfmt, typos, editorconfig, gitleaks, actionlint, lefthook-validate,
lychee-offline) ALSO recompute
the paired sha256: default from the new release asset. The uvx/npx lanes (ruff,
pyright, check-jsonschema, markdown, biome, tsc) and PSScriptAnalyzer carry no
checksum. For OSV, update .github/osv-scanner-pin.json only after reviewing
the release, verifying the official Linux asset checksum and SLSA provenance,
and updating the pinned verifier when required. Consumers pick the new
default up when they re-pin this repository. For golangci-lint, verify both
official linux-amd64 and windows-amd64 archive checksums before changing the
embedded version and hashes. For govulncheck, verify the official Go proxy
version, sum.golang.org module sum, origin tag, and commit before changing the
exact module pin. For Playwright, bump the PLAYWRIGHT_VERSION env value in
.github/workflows/claude-e2e-verify.yml (an npm lane, no checksum).
For zizmor, bump .github/workflows/zizmor.yml's version and sha256
defaults together after verifying the GitHub-reported release-asset digest
(same absorb shape as OSV), and only after raising the fleet pin in
dotfiles .chezmoidata/uv-tools.yaml first.
For runtime drift, update every action's matching exact-patch
input default (and the root global.json plus the dotnet actions' fallback
pins together) only after reviewing the stable patch. Never auto-merge these
updates.

Fleet-led pins absorb in a fixed order

ruff, pyright, check-jsonschema, golangci-lint, and the Python and
Node runtimes are ALSO pinned by the fleet inventory in
melodic-software/dotfiles — .chezmoidata/uv-tools.yaml for the uv tools and
the interpreter, .chezmoidata/golangci-lint.yaml for golangci-lint, and
.node-version for Node — which is what installs every developer's local
toolchain. Raise the fleet pin there FIRST, then bump this repository to
match — never past it. Bumping here alone puts CI on a version no developer
has, which is how CI came to lint with a ruff nobody ran
(#372).

biome is caller-derived at runtime (#377): an exact @biomejs/biome pin
in the caller's root package.json wins; otherwise the reviewed
fallback-version default applies. This drift row monitors that fallback
only (pin-less callers / fixture lanes). Absorb npm latest into
fallback-version like any single-authority npm tool — do not treat a
consumer Dependabot bump as a second authority to chase.

markdown is standards-led: absorb .github/actions/markdown/action.yml's
version default to match melodic-software/standards' markdownlint-cli2 pin
(package.json / $schema), never past it. This report flags npm latest, which
can lead that pin — do not absorb past standards. SHA-pinned consumers pick
the new default up only on their next re-pin of this repository
(#394).

zizmor is fleet-led too — pinned here in .github/workflows/zizmor.yml
and there in .chezmoidata/uv-tools.yaml. Raise the fleet pin in dotfiles
FIRST, then bump this repository's version+sha256 defaults together to match
— never past the fleet (#379).

Everything else above has a single authority, and absorbing upstream latest
for it is correct as written. melodic-software/dotfiles reports a consumer
that lags the fleet, or one bumped ahead of it, on its own schedule.

Why advisory

Dependabot cannot bump these — its github-actions ecosystem updates only
uses: SHAs (see .github/dependabot.yml). A new tool release can ship
checks that break unrelated PRs; binary and image lanes also need reviewed
checksums/digests, so bumps are absorbed deliberately rather than auto-merged.


Updated automatically by .github/workflows/tool-version-drift-check.yml.
Closing this issue without absorbing the bump reopens it on the next run.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: mechanicalDeterministic, trivially reversible maintenance: dependency bumps, lint/format, sync.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions