claudemd-cli 0.59.0 → 0.60.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 +19 -0
- package/README.md +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,25 @@ 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.60.0] - 2026-07-27
|
|
12
|
+
|
|
13
|
+
Ships spec v6.24.0. One clause, one pointer, one runbook line — and the thing they encode: a rule being loaded is not a rule being followed.
|
|
14
|
+
|
|
15
|
+
- **spec: `Gated = missing` closes the third missing-capability mode in §EXT §12.** That section's detection enumerated two — a call that fails, and a skill absent from the session listing (v6.21.0). Claude Code's own session instructions carry a third shape (`Do not call the AgentTool unless the user requested it`): the capability is listed and would succeed if called, so neither detector fires. At ship this lands on `Author ≠ reviewer (HARD)`, whose fallback rows route back through a fresh subagent — with the Agent tool gated there is nothing to degrade to, and the substitute gets improvised. The clause makes it one ASK before starting; refused → L2 `[PARTIAL: no independent review]`, L3 not executable, escalate.
|
|
16
|
+
- **spec: pointer added at `Author ≠ reviewer` → Detection.** The rule and the detection that governs it sat 45 lines apart. This release exists because the rule text was loaded, and quoted verbatim, while being violated.
|
|
17
|
+
- **spec: Appendix B + §13.1 relocation notes compressed** — removal archaeology from v6.11.14 / v6.13.0, paired with the addition per §0.1. Extended lands at 49890/50000 (110 bytes headroom); core unchanged at 24574/25000. The next extended addition of any size must pair with a trim.
|
|
18
|
+
|
|
19
|
+
No hook or script behavior changes: `hard-rules.json` bumps `spec_version` only, partition unchanged at 6 hook / 16 self / 2 both / 1 external.
|
|
20
|
+
|
|
21
|
+
## [0.59.1] - 2026-07-26
|
|
22
|
+
|
|
23
|
+
Hotfix for a macOS CI regression shipped in 0.59.0. Tests only — no hook, script, or spec behavior changes.
|
|
24
|
+
|
|
25
|
+
- **fix: the ARCH-2 encoder-parity locale probe now tests BEHAVIOR instead of parsing `locale -a`.** 0.59.0 replaced an inherited locale with an explicit pin, and got it wrong twice in a row: the first form asked whether *either* candidate was listed and then kept the first regardless (pinning a `C.UTF-8` macOS does not ship, caught in pre-tag review); the corrected form matched `locale -a` lines exactly, found nothing on the macOS runner, and **hard-failed** the suite — taking `env-hygiene` case 5 with it, since that case runs this suite under a polluted environment and expects it to pass. What actually matters is whether bash slices by codepoint under the candidate, so that is now measured directly on a known 3-codepoint string.
|
|
26
|
+
- **fix: no usable UTF-8 locale is a loud SKIP, not a failure.** With byte-wise slicing the parity property is genuinely unassertable, and `rule-hits.sh` already documents that degradation as accepted. Same posture as `upgrade-lifecycle`'s unreachable-tag skip: the operator sees it, rather than being blocked by it.
|
|
27
|
+
|
|
28
|
+
The lesson generalizes past this fixture: a portability probe that parses a tool's *output format* inherits that format's platform variance. Probing the behavior you actually depend on does not.
|
|
29
|
+
|
|
11
30
|
## [0.59.0] - 2026-07-26
|
|
12
31
|
|
|
13
32
|
Clears the audit's deferred queue: all 17 items from `tasks/audit-2026-07-26-deferred.md` A+B, in one release. Minor bump: two instruments change what they report and one hook gains a banner on a path where it previously stayed silent. No §8 verdict moves — the differential against the pre-fix hook is still 0 changes across all 330 baseline corpus rows.
|
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.24**, 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.24 — 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
|
| 15 shell hooks | `banned-vocab-check` · `pre-bash-safety-check` · `ship-baseline-check` · `residue-audit` · `memory-read-check` · `memory-prompt-hint` · `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.24 | `~/.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.
|
|
@@ -352,7 +352,7 @@ claudemd/
|
|
|
352
352
|
├── commands/ # 16 slash-command markdown files
|
|
353
353
|
├── bin/ # standalone CLI entrypoint (claudemd-lint.js → `npx claudemd-cli` on npmjs.org)
|
|
354
354
|
├── scripts/ # 18 Node.js scripts + scripts/lib/ (single-source registry, lint, etc.)
|
|
355
|
-
├── spec/ # shipped v6.
|
|
355
|
+
├── spec/ # shipped v6.24.0 CLAUDE*.md trio + OPERATOR.md + hard-rules.json manifest
|
|
356
356
|
├── tests/ # hook shell tests + Node.js tests + integration + fixtures
|
|
357
357
|
├── docs/ # ADDING-NEW-HOOK.md + RULE-HITS-SCHEMA.md + superpowers/
|
|
358
358
|
└── .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.60.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": {
|