presubmit's shellcheck lane silently skips on the sandbox box — the exe is installed but not on PATH nf-5wkn ← Beads

open priority 2 task unassigned

Twinned from https://github.com/cfsh/ninefold/issues/504 by tools/beads/import_github.py's reconcile pass.

Found while running ./presubmit.py --all for #503. Filed unclaimed.

What happens

``` ── shellcheck ─── ShellCheck over every tracked script shellcheck not installed — 15 shell script(s) UNCHECKED ○ shellcheck skip 0.0s ```

But it *is* installed, exactly where CLAUDE.md says:

``` $ ls C:/Tools/shellcheck/ LICENSE.txt shellcheck.exe ```

The directory is not on git-bash's PATH. CLAUDE.md claims the opposite — *"with that directory on the user PATH"* … *"the sandbox box has it, so the lane really gates there"*. It does not.

Why it matters more than a missing linter

The lane is optional by design so a box without ShellCheck degrades to a loud skip rather than a hard failure. That is the right call. But the same design means a box that *should* gate and silently stopped is indistinguishable from one that never had it — and presubmit.py is the only gate in this repo (no CI, design 001 §7). merge_pr.sh runs --all and merges on a PASS that skipped a third of the lanes.

Same shape as #389: nothing ran the check, so nobody noticed it had stopped running.

Worth considering

The second and third are not exclusive; the second is what stops the next tool inheriting the same blind spot.

Related: #389 (a gate that rotted unnoticed), design 001 §5.1.

Dependencies

None.

Comments

No comments.

Add a comment