claudemd-cli 0.23.15 → 0.23.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -8,6 +8,22 @@ All notable changes to the `claudemd` plugin. This changelog tracks plugin artif
8
8
  - **Canonical spec version source**: `spec/CLAUDE.md` top-line title (`# AI-CODING-SPEC vX.Y.Z — Core`) + `spec/CLAUDE-changelog.md` top `##` entry.
9
9
  - **Plugin semver vs spec semver** are independent: plugin patch (0.2.0 → 0.2.1) may ship when spec is unchanged (this release); plugin minor (0.1.9 → 0.2.0) ships when spec minor updates (v0.2.0 shipped spec v6.10.0).
10
10
 
11
+ ## [0.23.17] - 2026-06-10
12
+
13
+ **Patch — §8 SAFETY: `dash -c "rm -rf $X"` and other Bourne-family shells were not unwrapped, bypassing the rm-rf-var / npx gate.** Spec content unchanged (stays v6.14.1). Continues the end-to-end user-test sweep into the §8 hook.
14
+
15
+ ### Fixed — indirect-shell unwrap missed dash / ksh / ash
16
+
17
+ - `hooks/pre-bash-safety-check.sh`: `unwrap_indirect` expands `bash -c '<inner>'` / `sh -c` / `zsh -c` / `eval` so the inner command is re-checked for §8 violations, but the shell set was only `bash|sh|zsh`. `dash` — the Debian/Ubuntu default `/bin/sh` — plus `ksh` and `ash` (busybox) were not unwrapped, so `dash -c "rm -rf $X"` (empty `$X` → `rm -rf /…`) and `dash -c 'npx <unpinned>'` sailed through on the most common CI/server platform. This is distinct from the documented best-effort wrapper exclusions (`sudo` / `timeout` / `xargs` / `nice`, which carry the `[allow-rm-rf-var]` escape and are intentionally not covered) — dash/ksh/ash are in the *covered* indirect-shell class and were simply missed. Fix: widen the shell set to `bash|sh|zsh|dash|ksh|ash` in both unwrap regexes, closing the whole Bourne family rather than one instance. Each name stays separator-anchored, so it never matches inside a longer word (`dashboard`, `stash`). csh/tcsh excluded (different `-c` quoting, rare). Added 7 corpus rows (5 deny incl. `dash -lc` and unpinned-npx, 2 pass FP-guards). Corpus 140 → 147.
18
+
19
+ ## [0.23.16] - 2026-06-10
20
+
21
+ **Patch — cwd→projects-dir encoding silently no-op'd the §11 gate (and 3 more hooks) for paths with a space / `+` / `@`.** Spec content unchanged (stays v6.14.1). Continues the end-to-end user-test sweep.
22
+
23
+ ### Fixed — narrow `tr '/._'` cwd encoding mis-located the per-project dir
24
+
25
+ - `hooks/memory-read-check.sh`, `hooks/memory-prompt-hint.sh`, `hooks/banned-vocab-check.sh`, `hooks/lib/rule-hits.sh`: all four derive `~/.claude/projects/<encoded>/` from the cwd, and all used `tr '/._' '-'`. But Claude Code replaces **every** char outside `[a-zA-Z0-9-]` with `-` (the code comments and `feedback_cc_cwd_encoding_dots` both say so). The narrow three-char transform left a space / `+` / `@` / etc. intact, so for any project path containing one (e.g. a macOS path under `Application Support`), the derived dir was wrong → the memory index / transcript was not found → fail-open. Concretely: the HARD §11 memory-read gate silently no-op'd, the §11 memory-hint went dark, the §10-V transcript-vocab scan mis-located the transcript, and `rule-hits` telemetry attributed rows to the wrong project. Fix: all four now use `tr -c 'a-zA-Z0-9-' '-'`, the exact CC transform. For `/._`-only paths the two forms are byte-identical, so this is a strict superset with no behavior change for common paths. Added memory-read-check Case 8b (space-in-cwd → correct encoding → deny); a `/._`-only fixture passes under both the bug and the fix, so the new fixture deliberately uses a space.
26
+
11
27
  ## [0.23.15] - 2026-06-10
12
28
 
13
29
  **Patch — ship-baseline false-positive: a commit message quoting `&& git push` was denied on red CI.** Spec content unchanged (stays v6.14.1). Continues the end-to-end user-test sweep into the PreToolUse hooks.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudemd-cli",
3
- "version": "0.23.15",
3
+ "version": "0.23.17",
4
4
  "description": "Standalone CLI for §10-V banned-vocab + transcript scanning. Companion to the claudemd Claude Code plugin (github.com/sdsrss/claudemd) for use in git pre-commit hooks, GitHub Actions, and other agents.",
5
5
  "type": "module",
6
6
  "bin": {