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 →