Release 2.1.3 (2026-06-05)¶
Bug fixes¶
-
match raw-git-commit fallback against quote-stripped text The fallback regex now runs on strip_quoted_segments output with the hardened anchor, so tool names at line start inside quoted multi-line arguments no longer deny legitimate commands. Spec section 3.2. Ref vergil-project/vergil-claude-plugin#450.
-
match pr-create tool-name predicates against stripped text Both invocation predicates now run on quote-stripped text with the hardened anchor; the HTTP-method flag check stays on raw text per spec section 2.3. Ref vergil-project/vergil-claude-plugin#450.
-
match agent-merge tool-name predicates against stripped text All three merge/approve invocation predicates now run on quote-stripped text with the hardened anchor; method-flag greps stay on raw text per spec section 2.3. Ref vergil-project/vergil-claude-plugin#450.
-
match host-container-split loops against stripped text Both routing loops now run on quote-stripped text with the hardened anchor, so tool names mentioned in quoted prose no longer deny or warn. Ref vergil-project/vergil-claude-plugin#450.
-
match deprecation test-command predicate against stripped text The test-runner matcher now runs on quote-stripped text with the hardened anchor; the deprecation scan of tool output is unchanged. Ref vergil-project/vergil-claude-plugin#450.
-
match protected-branch gating predicate against stripped text The commit-detection gate now runs on quote-stripped text with the hardened anchor, so non-commit commands with commit-looking quoted prose are no longer subjected to the worktree check. Directory-extraction greps stay on raw text per spec section 2.3. Ref vergil-project/vergil-claude-plugin#450.
-
anchor autoclose-linkage tool predicate on stripped text Replaces the loose word-boundary match with the canonical command-position anchor on quote-stripped text; the linkage-value check stays on raw text. Ref vergil-project/vergil-claude-plugin#450.
-
match contents-api invocation detection against stripped text Only the api-invocation predicate moves to quote-stripped text; the contents-URL and method greps stay on raw text because those targets are legitimately quoted arguments. Ref vergil-project/vergil-claude-plugin#450.
-
match associative-array predicate against stripped text Prose citing the associative-array flag inside quoted arguments no longer denies the command; the regex shape is unchanged. Ref vergil-project/vergil-claude-plugin#450.
Build¶
- wire hook test suites into vrg-validate via validate-custom Adds the repo-local custom validator that vrg-validate discovers at scripts/bin/validate-custom; it runs every hooks/tests/*.test.sh, bringing the matcher and audit-guard suites into the validation pipeline. Spec section 6.5. Ref vergil-project/vergil-claude-plugin#450.
Documentation¶
-
add command-matcher quoting design (#450) Design for fixing PreToolUse matcher false positives on tool names inside quoted multi-line arguments. Defines one canonical rule (quote-strip, then match at command position) applied to nine plugin hook scripts and to vrg-hook-guard in vergil-tooling, which gets a sub-issue. Approved in brainstorm 2026-06-05. Ref vergil-project/vergil-claude-plugin#450.
-
fold pushback resolutions into command-matcher quoting design Five resolutions from the pushback review: correct the block-protected-branch-work failure direction (over-blocking, not weakening, contra the #450 report) and classify dir-extraction greps as raw-text predicates; confine the bash -c recheck to the extracted argument instead of the whole raw text; add a shared canonical case table both test suites must encode verbatim; document ANSI-C quoting and shell-keyword gaps; add brace groups to the separator class. Ref vergil-project/vergil-claude-plugin#450.
-
verify canonical vectors empirically; correct table verdicts Plan-writing verification ran the stripper and anchor against the section 6.1 table. Three corrections: rows 3-4 need arguments because the (\s|$) tail does not match trailing )/; punctuation (new accepted-gap bullet); row 10 splits into a separator-in-span FP case and a new row 14 where the unstripped quote is not a separator and no match occurs. Ref vergil-project/vergil-claude-plugin#450.
-
add #450 matcher-quoting implementation plan Fourteen TDD tasks: stripper lib with unit tests, a table-driven matcher harness encoding the canonical spec vectors, per-script migration of nine hooks to quote-stripped matching, validate-custom wiring so hook tests run under vrg-validate, hooks-page documentation, the vergil-tooling sub-issue filing, and the final validation handoff. Stripper and anchor were verified empirically before being baked into the plan. Ref vergil-project/vergil-claude-plugin#450.
-
document quote-stripped command matching Adds a hooks-page section explaining that matchers test quote-stripped text at command position, why prose mentions of blocked commands no longer false-deny, and why block-heredoc is exempt. Ref vergil-project/vergil-claude-plugin#450.
-
link the filed vergil-tooling sub-issue in the matcher spec Records the vrg-hook-guard companion issue number (vergil-tooling#1443) in the spec header now that it exists. Ref vergil-project/vergil-claude-plugin#450.
Features¶
- add shared quote-stripping helper for command matchers strip_quoted_segments replaces quoted spans with a placeholder in one leftmost-wins jq gsub pass, multi-line aware, escape-aware for double quotes. Single seam for the false-positive fix; spec section 3.1. Ref vergil-project/vergil-claude-plugin#450.
Testing¶
-
add failing stripper tests for command matchers Table-driven tests for strip_quoted_segments encoding the stripping-relevant canonical vectors from spec section 6.1 (rows 5, 7-10, 14) plus the empty command. RED: the lib does not exist yet. Ref vergil-project/vergil-claude-plugin#450.
-
add failing matcher tests encoding the canonical case table Allow/deny harness feeding hook JSON to the matcher scripts, starting with the spec section 6.1 table against block-raw-git-commit (rows 11-12 excluded as vrg-hook-guard-only). RED: rows 3, 4, 5 fail until the script is migrated. Ref vergil-project/vergil-claude-plugin#450.