fix: treat check_list_files stderr as informational, not an error#425
Merged
fix: treat check_list_files stderr as informational, not an error#425
Conversation
Change check_list_files to only treat non-zero exit with no files as an error. Previously, stderr output was treated as an error even when the command exited successfully, which was overly strict. Problem: - check_list_files with exit 0 + stderr was treated as an error - This prevented tools from outputting warnings/info to stderr - The only real error case is: non-zero exit with no files (tool failure) Solution: - When exit 0: stderr is logged as debug only (informational) - When exit 0 with files in stdout: warn about misconfiguration - When exit non-zero with no files: error (tool failed) - When exit non-zero with files: run fixer on those files - Regular check commands continue to work as before Changes: - src/step.rs: Removed stderr error checks, added warning for exit 0 + files - test/check_list_files_empty_with_stderr.bats: Updated all test cases and added new test for the misconfiguration warning All tests pass with both HK_LIBGIT2=0 and HK_LIBGIT2=1. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Merged
jdx
added a commit
that referenced
this pull request
Nov 19, 2025
## [1.21.1](https://github.com/jdx/hk/compare/v1.21.0..v1.21.1) - 2025-11-19 ### 🐛 Bug Fixes - **(ruff)** Make `ruff` respect user config `exclude` by [@thejcannon](https://github.com/thejcannon) in [#421](#421) - **(ruff_format)** Pass `--force-exclude` to `ruff format` (as well) by [@thejcannon](https://github.com/thejcannon) in [#428](#428) - Fix --check docstring by [@thejcannon](https://github.com/thejcannon) in [#423](#423) - Configuration Read Support YML File Extension by [@hcoona](https://github.com/hcoona) in [#427](#427) - treat check_list_files stderr as informational, not an error by [@jdx](https://github.com/jdx) in [#425](#425) ### 🚜 Refactor - Enable `trailing-whitespace` in this repo by [@thejcannon](https://github.com/thejcannon) in [#429](#429) ### 📚 Documentation - Don't suggest configuring hk in config env by [@thejcannon](https://github.com/thejcannon) in [#424](#424) ### New Contributors - @thejcannon made their first contribution in [#428](#428) - @hcoona made their first contribution in [#427](#427) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Bump to 1.21.1 with updated docs/templates, corrected --check help text, and minor dependency refresh. > > - **Release/versioning**: > - Bump crate to `1.21.1` in `Cargo.toml`, `Cargo.lock`, `hk.usage.kdl`, and docs (`docs/cli/index.md`, `docs/cli/commands.json`). > - Update all `pkl` package URLs and examples to `v1.21.1` (init template in `src/cli/init.rs`, docs, examples). > - Add `CHANGELOG.md` entry for `1.21.1`. > - **CLI/help text**: > - Fix `--check` help to “Run check command instead of fix command” across CLI specs and docs (`docs/cli/*`, `hk.usage.kdl`, `docs/cli/commands.json`). > - **Code/messages**: > - Refresh Pkl error example version in `src/config.rs`. > - **Dependencies**: > - Update `clap`/`clap_builder` to `4.5.52` and `unit-prefix` to `0.5.2` in `Cargo.lock`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3ed921a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: mise-en-dev <[email protected]>
tmeijn
pushed a commit
to tmeijn/dotfiles
that referenced
this pull request
Nov 21, 2025
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [hk](https://github.com/jdx/hk) | minor | `1.20.0` -> `1.22.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>jdx/hk (hk)</summary> ### [`v1.22.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1220---2025-11-19) [Compare Source](jdx/hk@v1.21.1...v1.22.0) ##### 🚀 Features - Add `stdin` to step config by [@​thejcannon](https://github.com/thejcannon) in [#​435](jdx/hk#435) ##### 🐛 Bug Fixes - save patch backup files when using git as stash method by [@​jdx](https://github.com/jdx) in [#​434](jdx/hk#434) ##### 📚 Documentation - Clarify `stash` default (behavior) by [@​thejcannon](https://github.com/thejcannon) in [#​431](jdx/hk#431) - Clarify hook fix default by [@​thejcannon](https://github.com/thejcannon) in [#​433](jdx/hk#433) ### [`v1.21.1`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1211---2025-11-19) [Compare Source](jdx/hk@v1.21.0...v1.21.1) ##### 🐛 Bug Fixes - **(ruff)** Make `ruff` respect user config `exclude` by [@​thejcannon](https://github.com/thejcannon) in [#​421](jdx/hk#421) - **(ruff\_format)** Pass `--force-exclude` to `ruff format` (as well) by [@​thejcannon](https://github.com/thejcannon) in [#​428](jdx/hk#428) - Fix --check docstring by [@​thejcannon](https://github.com/thejcannon) in [#​423](jdx/hk#423) - Configuration Read Support YML File Extension by [@​hcoona](https://github.com/hcoona) in [#​427](jdx/hk#427) - treat check\_list\_files stderr as informational, not an error by [@​jdx](https://github.com/jdx) in [#​425](jdx/hk#425) - remove trailing whitespace in ruff\_format.pkl by [@​jdx](https://github.com/jdx) in [9f4abdc](jdx/hk@9f4abdc) ##### 🚜 Refactor - Enable `trailing-whitespace` in this repo by [@​thejcannon](https://github.com/thejcannon) in [#​429](jdx/hk#429) ##### 📚 Documentation - Don't suggest configuring hk in config env by [@​thejcannon](https://github.com/thejcannon) in [#​424](jdx/hk#424) ##### New Contributors - [@​thejcannon](https://github.com/thejcannon) made their first contribution in [#​428](jdx/hk#428) - [@​hcoona](https://github.com/hcoona) made their first contribution in [#​427](jdx/hk#427) ### [`v1.21.0`](https://github.com/jdx/hk/blob/HEAD/CHANGELOG.md#1210---2025-11-15) [Compare Source](jdx/hk@v1.20.0...v1.21.0) ##### 🚀 Features - **(dprint)** new builtin by [@​scop](https://github.com/scop) in [#​402](jdx/hk#402) - **(mypy,ruff,ruff\_format)** associate with .pyi by [@​scop](https://github.com/scop) in [#​404](jdx/hk#404) - **(prettier)** support Vue files by [@​minusfive](https://github.com/minusfive) in [#​388](jdx/hk#388) - **(terraform,tofu)** include .tftest.hcl in glob by [@​scop](https://github.com/scop) in [#​397](jdx/hk#397) - **(tflint)** add fix command by [@​scop](https://github.com/scop) in [#​401](jdx/hk#401) - **(typos)** new builtin by [@​scop](https://github.com/scop) in [#​400](jdx/hk#400) - use recursive glob patterns in all builtins by [@​jdx](https://github.com/jdx) in [#​383](jdx/hk#383) - shfmt improvements by [@​scop](https://github.com/scop) in [#​410](jdx/hk#410) - add content-based file type matching by [@​jdx](https://github.com/jdx) in [#​416](jdx/hk#416) - add clap-sort unit test and sort CLI flags alphabetically by [@​jdx](https://github.com/jdx) in [#​419](jdx/hk#419) - Add alternate config directory support with tests by [@​jdx](https://github.com/jdx) in [#​407](jdx/hk#407) ##### 🐛 Bug Fixes - **(golangci-lint)** check with --fix=false by [@​scop](https://github.com/scop) in [#​399](jdx/hk#399) - **(shfmt)** don't pass -s by [@​scop](https://github.com/scop) in [#​398](jdx/hk#398) - **(tf\_lint)** don't pass filenames by [@​scop](https://github.com/scop) in [#​396](jdx/hk#396) - Import elixir builtins by [@​arthurcogo](https://github.com/arthurcogo) in [#​390](jdx/hk#390) - Add warning for existing Git hooks path by [@​jdx](https://github.com/jdx) in [#​409](jdx/hk#409) - prevent untracked files from being staged with \<JOB\_FILES> by [@​jdx](https://github.com/jdx) in [#​408](jdx/hk#408) ##### 📚 Documentation - Add Elixir builtins to docs by [@​arthurcogo](https://github.com/arthurcogo) in [#​389](jdx/hk#389) - glossary grammar fix by [@​scop](https://github.com/scop) in [#​395](jdx/hk#395) - fix link to Pkl language docs by [@​scop](https://github.com/scop) in [#​394](jdx/hk#394) ##### 📦️ Dependency Updates - update anthropics/claude-code-action digest to [`8a1c437`](jdx/hk@8a1c437) by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​391](jdx/hk#391) - update jdx/mise-action digest to [`be3be22`](jdx/hk@be3be22) by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​392](jdx/hk#392) - update github artifact actions (major) by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​393](jdx/hk#393) - update rust crate infer to 0.19 by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​418](jdx/hk#418) - update jdx/mise-action digest to [`9dc7d5d`](jdx/hk@9dc7d5d) by [@​renovate\[bot\]](https://github.com/renovate\[bot]) in [#​417](jdx/hk#417) ##### New Contributors - [@​scop](https://github.com/scop) made their first contribution in [#​410](jdx/hk#410) - [@​arthurcogo](https://github.com/arthurcogo) made their first contribution in [#​390](jdx/hk#390) - [@​minusfive](https://github.com/minusfive) made their first contribution in [#​388](jdx/hk#388) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Change
check_list_filesto only read files from stdout and treat stderr as informational output (warnings, debug info, etc.). The only error condition is when the command exits non-zero with no files in stdout, which indicates a tool failure rather than "files need fixing".Problem
Previously,
check_list_fileshad overly strict error handling:This prevented tools from outputting warnings or debug information to stderr, and incorrectly flagged some legitimate scenarios as errors.
Solution
Updated error handling to be more permissive:
Key changes:
Changes
src/step.rs:
checkcommands continue to work as beforetest/check_list_files_empty_with_stderr.bats:
Test Plan
HK_LIBGIT2=0HK_LIBGIT2=1output_summary_check_first.bats,check_fix_suggestion.bats,stage_job_files.bats🤖 Generated with Claude Code
Note
Make
check_list_filesread files only from stdout and treat stderr as informational, refine error handling (incl. diff fallback) and add warnings; update tests accordingly.src/step.rs:stderras informational for bothcheck_list_filesandcheck_diff; read files only fromstdout.check_firstfails:check_diff: if no parseable files, keep all original files.check_list_files: if files list is empty, treat as error only when the command failed; log stderr and return original error.stderr; warn whencheck_list_filesexits 0 but outputs files (possible misconfiguration).test/check_list_files_empty_with_stderr.bats:stderras success and not run fixes.Written by Cursor Bugbot for commit 015a485. This will update automatically on new commits. Configure here.