A small patch release fixing two notable rough edges: fail_on_fix=true no longer silently re-stages the fixer's output over your git add, and hk's text-mode progress output is finally readable in CI logs.
Fixed
-
fail_on_fix=trueno longer overwrites your staged changes with the fix (@jdx) #892. Previously, when a hook hadfail_on_fix = true, the step's auto-staging would silently merge the fixer's output into the index over your explicitgit addchoices. After the failed commit, the fix was no longer visible as an unstaged change for review, and a re-commit would silently succeed with the fix baked in — defeating the entire point offail_on_fix.should_stageis now forced off forRunType::Fixruns whenfail_on_fixis set, so the fixer's output stays in the worktree as an unstaged change for you to inspect, and the commit keeps failing until you accept it. Fixes #888. -
Text-mode progress output is usable in CI again (@jdx) #890. hk's output in GitHub Actions and other piped-stderr environments was a mess: raw
[9A[80D[0Jcursor-control escapes leaked into the log, every status change was duplicated, failure stderr was suppressed, and a step matching hundreds of files dumped ~4KB of paths into every progress line. This release fixes the lot:- Bumps
clxto 2.0.1, which makesrefresh_once()a no-op in text mode (no more leaked UI escape codes) and dedupes consecutive identical job lines per job. - Failure summaries are now emitted in text mode by default. Successful steps stay quiet (their output already streamed during execution), but failed steps get a full diagnostic block at the end so you can see the failure in one place.
HK_SUMMARY_TEXT=1still forces every step's summary to print. - Per-step progress messages are bounded. A new display-only tera context truncates
files/workspace_filestofirst_file …when more than one file matches, and the rendered message itself is capped at 2048 printable chars (ANSI-aware). The execution command is rendered against the full file list as before — only the human-readable progress line is truncated. - Stops truncating text-mode messages at 60 chars. The previous
truncate_textfilter clamped toterm_width - 20, which is 60 in non-TTY environments — exactly enough to hide the diagnostic detail you actually need to debug a CI failure.
A typical
dbgstep matching 98.rsfiles now reads:dbg – 98 files – **/*.rs – ! rg -e 'dbg!' bin/generate_docs.rs …instead of unrolling all 98 paths on every prop update.
- Bumps
Full Changelog: v1.44.2...v1.44.3
💚 Sponsor hk
hk is developed by @jdx at en.dev — a small independent studio behind developer tools like mise, aube, hk, and more. Work on hk is funded by sponsorships.
If hk has sped up your pre-commit loop or made linting feel less painful, please consider sponsoring at en.dev. Sponsorships are what keep hk moving and the project independent.