claudemd-cli 0.23.2 → 0.23.4

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.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,36 @@ 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.4] - 2026-06-03
12
+
13
+ **Patch — ships spec v6.14.1: §2.1 skill-MUST-invoke override clarified.** Resolves the instruction-collision surfaced by the v0.23.3 cross-project impact audit (audit item #5): superpowers / gstack `MUST invoke` skill wording vs §2.1's L0–L2 proceed-without default.
14
+
15
+ ### Changed
16
+
17
+ - **`spec/CLAUDE.md` §2.1** (core, Δ +136B → 24553B; 447B headroom, 98.21%): the existing "this spec wins for L0–L2" clause is now **bolded** and carries a concrete example — `sp:test-driven-development` ("before writing implementation code") / `gs:investigate` ("do NOT debug directly") MUST-invoke wording does NOT force a clear-scope L1 bug out of fix→test-direct into TDD / investigate ceremony. No rule added or removed (`[clarify]` only); the precedence was already stated, just buried mid-paragraph.
18
+ - Spec version **v6.14.0 → v6.14.1** (patch). Cascade per `feedback_spec_version_bump_cascade_grep.md`: `spec/CLAUDE-extended.md` (title + Recent-changes entry + Sizing line), `spec/CLAUDE-changelog.md` (new entry), `spec/hard-rules.json` (`spec_version`), `tests/integration/upgrade-lifecycle.test.sh` + `tests/scripts/spec-structure.test.js` (version assertions), `README.md`. Manifest `description` fields unchanged (major.minor still `v6.14` per the v0.2.1 versioning policy).
19
+
20
+ Run `/claudemd-update` to sync the new spec into `~/.claude/CLAUDE*.md` (the current session keeps the old copy until then).
21
+
22
+ ## [0.23.3] - 2026-06-03
23
+
24
+ **Patch — three false-positive / telemetry-hygiene fixes surfaced by a cross-project impact audit (daagu + sibling-plugin sessions). All are bugfixes restoring intended hook behavior; spec unchanged at v6.14.0.**
25
+
26
+ ### Fixes
27
+
28
+ 1. **`pre-bash-safety-check.sh` — npx resolution now follows a leading `cd <subdir>`.** CC's PreToolUse event `.cwd` is the shell cwd *before* the command runs, so `cd frontend && npx vue-tsc` in a monorepo (tool installed in `frontend/`, `.cwd` reported as the repo root or `backend/`) resolved `node_modules` against the wrong directory and false-denied a locally-installed tool. Observed 5x on the daagu frontend/backend monorepo (05-12, 05-12, 05-22, 05-25, 06-01) — the single most frequent real-work interruption from the plugin. New `effective_npx_cwd()` walks the `cd` targets preceding the first `npx ` token and resolves the effective cwd via subshell `cd` (relative / absolute / `..` / semicolon-chained). Cannot weaken the gate: it only ever *allows* when a genuine local install exists at the composed path; unresolvable targets (`$VAR` / glob / `~` / failed `cd`) keep the conservative deny. +6 corpus cases.
29
+
30
+ 2. **`memory-read-check.sh` — tag match no longer fires on path/URL tokens.** A tag word appearing only inside a filesystem path (e.g. `~/.claude/projects/...` matching the `projects` tag of an unrelated memory) triggered a §11 read-the-file deny on commands unrelated to the memory's topic. Live-reproduced twice during the audit itself. `sanitize_for_tagmatch()` now strips slash-containing tokens before tag matching (same intent as the v0.9.28 quoted-title fix); bare-word tags are unaffected. +2 cases (FP guard + surgical-scope regression).
31
+
32
+ 3. **`rule-hits.sh` — reserved test sentinel `t` no longer writes to the production log.** The fixture `session_id:"t"` used across the hook suite was leaking into `~/.claude/logs/claudemd.jsonl` via ad-hoc *manual* hook invocations in the real `$HOME` — 309 rows (11.5% of all telemetry), inflating banned-vocab deny counts ~2x and obscuring real signal in `/claudemd-audit`. `rule_hits_append` now drops `session_id == "t"` before writing. Real CC session_ids are UUIDs; the `test` sentinel (used by transcript-*-scan row assertions) is intentionally left writable. +2 cases.
33
+
34
+ ### Audit notes (scope reconciliation)
35
+
36
+ Two audit-flagged items did **not** become fixes — verified against the source rather than transcript narration (per `feedback_diagnosis_against_real_artifact.md`):
37
+
38
+ - **"banned-vocab deny resets git staging"** — misdiagnosis. `banned-vocab-check.sh` only calls `hook_deny`; it never touches the git index. The denied commit in the cited daagu session used `git commit -F -` (heredoc) so it never ran — staging was intact; the agent re-ran `git add` out of its own confusion and *narrated* a reset that did not happen. No code change; the `"robust"` catch is working as intended (`[allow-banned-vocab]` or rephrase).
39
+ - **"deregister opt-in-OFF PostToolUse hooks"** — wontfix. `transcript-vocab-scan.sh`'s early `exit 0` is the runtime env-gate (`TRANSCRIPT_VOCAB_SCAN`); deregistering it from `hooks.json` would break the documented opt-in. The per-call spawn is the intended cost of a toggleable hook.
40
+
11
41
  ## [0.23.2] - 2026-05-24
12
42
 
13
43
  **Patch — `ship-baseline-check.sh` chained-commit-with-marker reachability. v0.23.1 closed the heredoc-body FP class but missed the *actual* user case: a chained `git commit -m "...known-red baseline: x" && git push origin main` still denied because PreToolUse fires before the commit runs → HEAD has no marker → deny → trapped. v0.23.2 also scans the CMD payload for the marker. Spec unchanged at v6.14.0.**
package/README.md CHANGED
@@ -329,7 +329,7 @@ claudemd/
329
329
  ├── commands/ # 12 slash-command markdown files
330
330
  ├── bin/ # standalone CLI entrypoint (claudemd-lint.js → `npx claudemd-cli` on npmjs.org)
331
331
  ├── scripts/ # 16 Node.js management scripts + scripts/lib/ (single-source registry, lint, etc.)
332
- ├── spec/ # shipped v6.14.0 CLAUDE*.md trio + OPERATOR.md + hard-rules.json manifest
332
+ ├── spec/ # shipped v6.14.1 CLAUDE*.md trio + OPERATOR.md + hard-rules.json manifest
333
333
  ├── tests/ # hook shell tests + Node.js tests + integration + fixtures
334
334
  ├── docs/ # ADDING-NEW-HOOK.md + RULE-HITS-SCHEMA.md + superpowers/
335
335
  └── .github/workflows/ # ci.yml (ubuntu+macOS × node 20) + npm-publish.yml (tag-triggered)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudemd-cli",
3
- "version": "0.23.2",
3
+ "version": "0.23.4",
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": {