v0.3.2 — sk- boundary fix, hardened guards, honest tool failures
A guard that blocked a legitimate commit, several guards that read less of a command than they claimed, and two tools that reported success on failure.
Upgrade with claude plugin update <plugin>@cc-agents-kit, then restart open sessions.
Fixed
staged-secret-guard blocked a real commit over a kebab-case word. Its two sk- key patterns had no left boundary, so any word whose tail cleared the 20-character floor read as an OpenAI key — live-task-status-transitioning contains sk-status-transitioning. Both patterns now require a non-word character or line start before sk-, with regression cases for the slug and for a key at the start of a line.
The guards read less of a command than they claimed to. Git global options, separated long-option globs, dangerous segments after the first, absolute pipeline interpreters, multi-suffix and mixed live dotenv paths, effective commit -a, pathspec candidates, and value-taking rewriter options were all outside what was actually parsed. Each is now covered, and large ShellCheck findings no longer fail on an advisory SIGPIPE.
find-trunk-repos reported an empty success when it had failed. GitHub authentication and repository-list failures now propagate instead of looking like "no repositories found" — the worst shape a discovery tool can take, because the caller cannot tell it apart from a real empty result.
config-gc guessed at which config root was live, and now derives one from CLAUDE_CONFIG_DIR or ~/.claude. setup-trunk selects linters from evidence in the repository before proposing a scoped change, rather than proposing a set and asking.
Changed
CI lints and parses extensionless Bash entries under plugins/*/bin/ as well as *.sh. The 0.3.1 claim that every shipped shell artifact was gated was broader than the gate that had been implemented.
Versions
All three plugins move: guard-hooks 0.2.1 → 0.2.2, context-handoff 0.1.1 → 0.1.2, repo-gate 0.1.1 → 0.1.2.