Component
Documentation — repo tooling (prek astro check hook)
Describe the bug
The docs-astro-check pre-commit hook invokes ./node_modules/.bin/astro check via a bare bash -lc, which resolves node from the login shell's PATH. When mise's shell hook isn't active in that shell (non-interactive shells, spawned/agent shells, and any environment where mise activation hasn't run), node is an older system version (e.g. v20), and the hook fails:
astro check (docs)....Failed
- hook id: docs-astro-check
- exit code: 1
Node.js v20.20.2 is not supported by Astro!
Please upgrade Node.js to a supported version: ">=22.12.0"
The repo pins Node 22 via mise (node = "22" in the root and docs/mise.toml), so the intended Node is fine — the hook just doesn't guarantee it's the one on PATH at commit time.
Expected behavior
git commit runs the astro check hook with the mise-pinned Node 22 regardless of whether the invoking shell has mise activated, so it passes in CI, interactive, and non-interactive/agent shells alike.
Current behavior
The hook:
entry: bash -lc 'cd "$(git rev-parse --show-toplevel)/docs" && ./node_modules/.bin/astro check'
bash -lc sources the login profile but does not necessarily activate mise (mise activation is a shell hook, not part of every profile). So the node that runs astro check is whatever's first on PATH — system v20 in a plain shell — and Astro rejects it (>=22.12.0 required). Committing succeeds only when the invoking process already has mise's Node 22 on PATH (e.g. running the commit through mise exec -- git commit).
Reproduction steps
- In a shell without mise activation (or
node -v showing v20), from the repo (or a worktree):
- Edit any file under
docs/ so the hook's files: ^docs/ pattern matches, and git add it.
git commit -m "docs: test".
- Observe the
astro check hook fail with Node.js v20.x is not supported by Astro.
- Compare:
mise exec -- git commit -m "docs: test" passes the same hook (Node 22 on PATH).
Possible solution
Pin the hook to the mise-managed Node so it doesn't depend on ambient shell activation, e.g. run the command under mise exec (mirroring how the eslint/agent hooks already invoke mise tasks):
entry: bash -lc 'cd "$(git rev-parse --show-toplevel)/docs" && mise exec -- ./node_modules/.bin/astro check'
or route it through a mise task (e.g. mise //docs:astro-check) as the other language-specific hooks do (mise //cli:eslint, mise run quality). The eslint and agent hooks already prefix with mise, so this is a consistency gap in the docs hooks specifically.
Node version
System node v20.20.2 (bare shell); mise-pinned v22.23.1 when activated.
mise version
2026.7.13
Additional context
Surfaced while committing from a worktree via the standard AGENTS.md workflow. The docs-sync hook in the same repo has a separate worktree-specific failure (filed separately). Both mean a plain git commit touching docs/ currently needs mise exec -- to succeed.
Component
Documentation — repo tooling (prek
astro checkhook)Describe the bug
The
docs-astro-checkpre-commit hook invokes./node_modules/.bin/astro checkvia a barebash -lc, which resolvesnodefrom the login shell'sPATH. When mise's shell hook isn't active in that shell (non-interactive shells, spawned/agent shells, and any environment where mise activation hasn't run),nodeis an older system version (e.g. v20), and the hook fails:The repo pins Node 22 via mise (
node = "22"in the root anddocs/mise.toml), so the intended Node is fine — the hook just doesn't guarantee it's the one onPATHat commit time.Expected behavior
git commitruns theastro checkhook with the mise-pinned Node 22 regardless of whether the invoking shell has mise activated, so it passes in CI, interactive, and non-interactive/agent shells alike.Current behavior
The hook:
bash -lcsources the login profile but does not necessarily activate mise (mise activation is a shell hook, not part of every profile). So thenodethat runsastro checkis whatever's first onPATH— system v20 in a plain shell — and Astro rejects it (>=22.12.0required). Committing succeeds only when the invoking process already has mise's Node 22 onPATH(e.g. running the commit throughmise exec -- git commit).Reproduction steps
node -vshowing v20), from the repo (or a worktree):docs/so the hook'sfiles: ^docs/pattern matches, andgit addit.git commit -m "docs: test".astro checkhook fail withNode.js v20.x is not supported by Astro.mise exec -- git commit -m "docs: test"passes the same hook (Node 22 onPATH).Possible solution
Pin the hook to the mise-managed Node so it doesn't depend on ambient shell activation, e.g. run the command under
mise exec(mirroring how the eslint/agent hooks already invokemisetasks):or route it through a mise task (e.g.
mise //docs:astro-check) as the other language-specific hooks do (mise //cli:eslint,mise run quality). The eslint and agent hooks already prefix withmise, so this is a consistency gap in the docs hooks specifically.Node version
System
nodev20.20.2 (bare shell); mise-pinned v22.23.1 when activated.mise version
2026.7.13
Additional context
Surfaced while committing from a worktree via the standard
AGENTS.mdworkflow. Thedocs-synchook in the same repo has a separate worktree-specific failure (filed separately). Both mean a plaingit committouchingdocs/currently needsmise exec --to succeed.