Skip to content

Release 2.1.46 (2026-10-28)

Bug fixes

  • fail closed when a hook script can't parse its input (#777) Every PreToolUse gate now reads stdin through a shared reader, hooks/scripts/lib/hook-input.sh. Empty stdin, invalid or non-object JSON, a missing jq, or a missing tool_input.command (tool_input.file_path for block-worktree-bypass-write) is refused with exit 2 and a stderr message naming the problem. Previously jq failed under set -e with a non-blocking exit code and the call went through. Scope matches vrg-hook-guard (vergil-tooling#3773): gated hooks still allow everything outside a managed repo, falling back to the hook process's working directory when the input names no cwd. Well-formed input behaves as before.

block-raw-git-commit now checks its input before delegating to vrg-hook-guard and exits with the guard's status. Its exec ran in a pipeline subshell, so the regex fallback also ran and a raw git commit got two JSON documents on stdout.

detect-deprecation-warnings is unchanged: it is an advisory PostToolUse hook and has no call to refuse.

Adds hooks/tests/hook-input.test.sh, covering malformed, empty, non-object and missing-field input plus the well-formed allow and deny paths for every gate. Adds a test helper that masks a tool from PATH by mirroring its directory, so the command-matchers suite also runs where vrg-hook-guard is installed in /usr/bin.

Ref vergil-project/vergil-claude-plugin#776

Documentation

  • say the task or tasks that fix it in the advisory handoff (#775) Replace the parenthesised plural task(s) in the advisory-handoff text of the skills catalogue and epic-create step 9, matching the planning hold note wording. Refs vergil-project/vergil-claude-plugin#774.

CI Evidence: All gates passed — full audit bundle available. Download →