aws-samples / aws-samples/sample-autonomous-cloud-coding-agents

(tooling): astro check pre-commit hook fails under bare Node v20 (not mise-pinned Node 22)

Open Beginner friendly
#652 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
143
Forks
46
Avg merge
3d 9h
Merged PRs (30d)
20

Description

## 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:

```yaml
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

1. In a shell **without** mise activation (or `node -v` showing v20), from the repo (or a worktree):
2. Edit any file under `docs/` so the hook's `files: ^docs/` pattern matches, and `git add` it.
3. `git commit -m "docs: test"`.
4. Observe the `astro check` hook fail with `Node.js v20.x is not supported by Astro`.
5. 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):

```yaml
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.

Contributor guide

Open the contributing guide

Research direction

Locate the pre-commit configuration containing the docs-astro-check entry and compare it with the existing mise-prefixed eslint and agent hooks. Reproduce the failure with an unactivated Node v20 environment, then verify that the hook uses the pinned Node 22 and that a plain commit touching docs passes.

Written by the indexing model from the issue text.

Assessment

Tech stack
bash, node.js
Domain
build-system, tooling
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.