claudemd-cli 0.52.0 → 0.54.0
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 +22 -0
- package/README.md +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,28 @@ 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.54.0] - 2026-07-24
|
|
12
|
+
|
|
13
|
+
Ships spec **v6.21.1** (patch) plus the detector repairs and closures that the same labeling pass produced. Two detectors changed behavior; six stopped presenting themselves as pending calibration work.
|
|
14
|
+
|
|
15
|
+
**What changes for users**: `/claudemd-sampling-audit` stops counting file paths as banned vocabulary, stops counting "继续" as a §11 violation when the agent had just asked a question, and now reports six of its eight detectors as `closed` with a stated reason instead of a permanent `collecting`. Nothing blocks that did not block before — every one of these detectors is retrospective and advisory.
|
|
16
|
+
|
|
17
|
+
- **fix(§10-V): `scanVocab` sanitizes identifier/path spans, restoring parity with the hook it mirrors.** `hooks/transcript-vocab-scan.sh` has stripped fenced blocks / backtick spans / slashed paths / bare `name.ext` since v0.23.19 (its lines 92-94); `scripts/sampling-audit.js` did not, so `\bcomprehensive\b` fired inside `docs/comprehensive-audit-….md`. That single class was 7 of the 8 §10-V hits in the 30d self-stratum and 51 more in the external stratum. Labeled precision on the flagged set was 0/8. **The header claimed fixtures pinned the node scanner and the bash hooks to the same counts — no test ever ran the hook**, which is why the drift survived. Closed by the join test below, not by the one-line flip.
|
|
18
|
+
- **test: the parity gate the header promised** (`tests/scripts/sampling-audit.test.js`) — one transcript, both engines, verdicts must match, with a control arm asserting a bare-word value claim still fires on both sides so "sanitize everything" cannot pass. Against the pre-fix code it fails with `parity broken: node=true bash=false`. New fixture `vocab-path-only.jsonl`.
|
|
19
|
+
- **fix(§11-turn-yield): the tell now carries the spec's new precondition.** `yieldTellSuppressed()` suppresses the tell when the prior assistant turn asked a question, closed with a four-section report, or produced no text at all (turn cut off externally — not attributable to the agent). New fixture `turn-yield-asked.jsonl`; unit arms cover ask / closed / empty / control.
|
|
20
|
+
- **change: six detectors CLOSED** (`§iron-law-2`, `§10-four-section-order`, `§10-honesty`, `§7-bugfix-anchor`, `§11-post-compaction`, `§5-hard-auth`). Each keeps running and keeps emitting counts, but reports `status: "closed"` with a `closedReason` instead of `collecting`. Grounds, jointly: opportunity denominators of 3–87 across all 151 transcripts; FP roots that need command-vs-string-data semantics (`('npm install',"ALLOW")` inside a heredoc read as a real install) or per-project plan-file naming (`PLAN_SPEC_RE` hardcodes `tasks/*.md|plan*.md`, so `docs/*优化路线图.md` counted as "never re-read the plan" in 23 of 39 windows) rather than a regex patch; and their only consumer, the §13.2 demote queue, is empty. Precision upper bounds: hard-auth ≤0.16, bugfix-anchor ≤0.25, post-compaction ≤0.41.
|
|
21
|
+
- **`§10-V` and `§11-turn-yield` return to `collecting` with the series re-baselined** — both detectors changed this release, so counts before 2026-07-24 are not comparable with counts after. The A1 2026-07-10 raw-text series ends here by design.
|
|
22
|
+
- **A4 gate held.** Every one of these detectors was broken and not one bad rate reached a dashboard: the pre-registered `precision ≥ 0.8` admission gate withheld all eight. The failure mode this release fixes is the instrument, not the guard.
|
|
23
|
+
|
|
24
|
+
## [0.53.0] - 2026-07-24
|
|
25
|
+
|
|
26
|
+
Ships spec **v6.21.0** (minor) plus the drift test that pins it. No hook, script, or command behavior changes.
|
|
27
|
+
|
|
28
|
+
**What changes for users**: the §EXT §12 fallback table now covers `gs:/qa` / `gs:/qa-only`, and its Detection clause no longer assumes a missing skill announces itself by failing. Agents routed at a skill that is disabled via `skillOverrides` (or absent from the install) are told to check the session skill list first, take the documented fallback, and say which substitution they made — instead of either calling a skill that is not there or silently improvising. Manifest descriptions move to the `v6.21` family per the versioning policy above.
|
|
29
|
+
|
|
30
|
+
- **spec v6.21.0** (minor): `§EXT §12` Fallback table gains `gs:/qa, /qa-only` → `gs:/browse` pass over the changed user-facing surface, report per §7 L2 evidence, repair via §12 Review-finding repair. It was the only §4 Routing primary without a fallback row while §4's `ship L2` row routes user-facing ships at it. Detection premise widened to **absent-from-listing = missing**: `skillOverrides: "off"` produces no failing call, so call-failure auto-degrade never fired for it. Trigger: 2026-07-24 `/doctor` found 6 §4 Routing primaries off in `~/.claude/settings.json#skillOverrides` (`office-hours` `freeze` `benchmark` `qa` `canary` `design-consultation`) — 5 already had fallback rows. SHOULD-level spec text: `hard-rules.json` bumps `spec_version` only, no rule added to the manifest and no hook touched.
|
|
31
|
+
- **test: `§12: every §4 Routing primary has a §12 Fallback-table row`** (`tests/scripts/spec-structure.test.js`) closes the drift class rather than just the one gap — it joins the §4 Routing table's Primary column against the §12 Fallback table's Missing column, resolving family globs (`/design-*`, `sp:*-code-review`) and the `sp:TDD` / `sp:finishing` shorthands. Against the pre-change spec it fails with exactly `gs/qa, gs/qa-only`; suite 689 → 690.
|
|
32
|
+
|
|
11
33
|
## [0.52.0] - 2026-07-24
|
|
12
34
|
|
|
13
35
|
Fix batch from the 2026-07-24 production-readiness audit (`docs/2026-07-24-production-readiness-audit.md`) — items 1-3 and 5-10 of its action table, plus the restocked core net-delete candidate pool (C7-C12, item 4 core-side). Ships spec **v6.20.1** (patch). Minor bump: the curl-sh gate's deny surface widens (user-visible default behavior change).
|
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# claudemd
|
|
2
2
|
|
|
3
|
-
> A **personal AI-coding discipline harness**: one developer's opinionated **AI-CODING-SPEC v6.
|
|
3
|
+
> A **personal AI-coding discipline harness**: one developer's opinionated **AI-CODING-SPEC v6.21**, encoded as Claude Code shell hooks and shipped with the plugin. Built and dogfooded on my own repos — fork and adapt, don't adopt wholesale.
|
|
4
4
|
|
|
5
5
|
[](https://github.com/sdsrss/claudemd/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/claudemd-cli)
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
|
|
9
|
-
claudemd plugs into the Claude Code hook system to **block commits, pushes, and bash commands** that violate AI-CODING-SPEC v6.
|
|
9
|
+
claudemd plugs into the Claude Code hook system to **block commits, pushes, and bash commands** that violate AI-CODING-SPEC v6.21 — banned vocabulary in commit messages, `rm -rf $VAR` without variable validation, ship-on-red-CI, unread `MEMORY.md` entries during release flows, and more. The spec itself (`CLAUDE.md` + `CLAUDE-extended.md` + `CLAUDE-changelog.md` + `OPERATOR.md`) ships with the plugin and installs into `~/.claude/`, so the rules Claude Code reads at session start match the rules the hooks enforce. (`OPERATOR.md` is the human-only spec-maintenance handbook — Agent-loaded files are the CLAUDE trio.)
|
|
10
10
|
|
|
11
11
|
A standalone CLI (`npx claudemd-cli`) reuses the same `banned-vocab.patterns` source for git pre-commit hooks, GitHub Actions, and other agents that don't run inside Claude Code.
|
|
12
12
|
|
|
@@ -60,7 +60,7 @@ Verify in one command (Linux): `node --version && jq --version && gh --version &
|
|
|
60
60
|
| 16 shell hooks | `banned-vocab-check` · `pre-bash-safety-check` · `ship-baseline-check` · `residue-audit` · `memory-read-check` · `memory-prompt-hint` · `mid-spine-yield-scan` · `sandbox-disposal-check` · `session-start-check` · `session-extended-read` · `session-summary` · `session-end-check` · `transcript-vocab-scan` · `transcript-structure-scan` · `version-sync` · `mem-audit` |
|
|
61
61
|
| 16 slash commands | `/claudemd-install` · `/claudemd-status` · `/claudemd-update` · `/claudemd-refresh` · `/claudemd-audit` · `/claudemd-toggle` · `/claudemd-doctor` · `/claudemd-analyze` · `/claudemd-uninstall` · `/claudemd-rules` · `/claudemd-clean-residue` · `/claudemd-sparkline` · `/claudemd-sampling-audit` · `/claudemd-bypass-audit` · `/claudemd-design-adopt` · `/claudemd-statusline` |
|
|
62
62
|
| 1 standalone CLI | `claudemd-cli lint` · `claudemd-cli audit` ([npm: `claudemd-cli`](https://www.npmjs.com/package/claudemd-cli)) |
|
|
63
|
-
| Spec v6.
|
|
63
|
+
| Spec v6.21 | `~/.claude/CLAUDE.md` · `CLAUDE-extended.md` · `CLAUDE-changelog.md` · `OPERATOR.md` (backup-before-overwrite) |
|
|
64
64
|
| StatusLine (opt-out) | PS1-style line — `user@host:dir (branch) Model [ctx:N% · 5h:N% · 7d:N%]` (`dir` = cwd basename; context / 5-hour quota / weekly quota, all **used %**, read from Claude Code's `rate_limits` payload; quota segments auto-hide when the data is absent, or force-hide with `DISABLE_STATUSLINE_QUOTA=1`) — wired into `~/.claude/settings.json` on install **only when the slot is empty**; an existing statusline is left untouched. Skip entirely with `CLAUDEMD_NO_STATUSLINE=1`. Manage via `/claudemd-statusline`. |
|
|
65
65
|
|
|
66
66
|
Install backs up a hand-written `~/.claude/CLAUDE.md` (any file without the `# AI-CODING-SPEC` H1) to `~/.claude/backup-<ISO>/` before overwriting (last 5 kept automatically). An already-installed claudemd spec is overwritten **without** a backup — deliberate (v0.23.11): the sole backup is always your own content, so `restore` can never return a stale spec instead. Uninstall offers `keep / restore / delete`; `delete` requires an extra confirmation.
|
|
@@ -353,7 +353,7 @@ claudemd/
|
|
|
353
353
|
├── commands/ # 16 slash-command markdown files
|
|
354
354
|
├── bin/ # standalone CLI entrypoint (claudemd-lint.js → `npx claudemd-cli` on npmjs.org)
|
|
355
355
|
├── scripts/ # 18 Node.js scripts + scripts/lib/ (single-source registry, lint, etc.)
|
|
356
|
-
├── spec/ # shipped v6.
|
|
356
|
+
├── spec/ # shipped v6.21.1 CLAUDE*.md trio + OPERATOR.md + hard-rules.json manifest
|
|
357
357
|
├── tests/ # hook shell tests + Node.js tests + integration + fixtures
|
|
358
358
|
├── docs/ # ADDING-NEW-HOOK.md + RULE-HITS-SCHEMA.md + superpowers/
|
|
359
359
|
└── .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.
|
|
3
|
+
"version": "0.54.0",
|
|
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": {
|