@ssheleg/make-skill 0.21.0 → 0.23.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 CHANGED
@@ -1,5 +1,69 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.23.0 — 2026-08-20 — the ledger said unshipped over the release commit
4
+
5
+ The newest ledger section read *"Unshipped … no release cut"* and *"npm is still 0.21.0"*
6
+ while HEAD **was** the v0.22.0 release commit and the registry served 0.22.0. Re-run against
7
+ the artifact rather than re-graded, and `check_the_ledger_matches_what_shipped` now refuses
8
+ the state: four plants, each watched at exit 1. It refused the row documenting itself once,
9
+ because only `*"…"*` counts as a citation to it — which is now stated where the pattern
10
+ lives rather than learned by whoever trips on it next.
11
+
12
+ **The pile figure was a sample presented as a state.** MS-01 recorded *"1888 abandoned
13
+ directories, 47.3 MB … unchanged by anything this repository ran after the fix"*. Recounted:
14
+ **2688 directories, 83.6 MB** — and split at the fix's own commit time, which is the part
15
+ that matters: **0** `planted/` and **0** `repo/` trees created after it, against **784 of
16
+ 2592** plant-guard trees. So the scoped claim holds, now by timestamp rather than by two
17
+ samples taken a minute apart, and the total carries its measurement date.
18
+
19
+ **The referral is discharged rather than claimed.** MS-01 left three sibling repositories
20
+ shipping the identical leaking fixture. All three fixed it while this ran — the umbrella at
21
+ `b371301`, `seo-aeo-audit` at `c859cba`, `agent-stack` porting `test/residue.py` from here —
22
+ and `grep -c 'tempfile.mkdtemp()'` is now 0 in all four. Recorded as observed, not as work
23
+ this release did.
24
+
25
+ **Left open, and it is the honest kind.** `residue.report()` sees only what `workspace()`
26
+ handed out, so a re-introduced bare `mkdtemp` prints *left nothing* over a live leak. That
27
+ was watched happening in `agent-stack` before its port. The closing mechanism exists there;
28
+ REQ-025 sits at `never` until it comes back here.
29
+
30
+
31
+ ## v0.22.0 — the gate left 47 MB in $TMPDIR and never said what it left
32
+
33
+ **Two suites copied the tree to plant defects into it and never removed the copy.** The
34
+ conformance audit named one; the sweep found the other, and it was the larger half by two
35
+ orders of magnitude. Measured on this machine at the time of the fix: **1904 abandoned
36
+ mkdtemp roots, 47.3 MB** — 60 planted skill dirs and 36 repo copytrees unambiguously this
37
+ repository's, and 1808 plant-guard trees ambiguous, because four family repos ship the
38
+ byte-identical fixture at the same line and nothing in the content distinguishes them.
39
+
40
+ ### `test/residue.py`
41
+
42
+ A shared ledger in this repo's `plant_guard.py` idiom: `workspace()` hands out a
43
+ `make-skill-test-` prefixed mkdtemp, `open_case` / `close_case` bind each tree to a case,
44
+ and `report()` — wired to `atexit`, so no exit path skips it — removes what may go, keeps
45
+ what a failure needs, and **prints one line either way**. A clean run says
46
+ `residue: this run left nothing — N temp tree(s) created, N removed`, because the
47
+ requirement is that completion *records* residue, not merely that there is none. A leak is
48
+ then visible the first time the line changes.
49
+
50
+ **The failure path keeps its tree, by decision and stated in three places.** A planted
51
+ defect here is debugged by reading the copy the plant landed in, and a cleanup that runs
52
+ only on the pass path removes the evidence exactly when you want it. The report names the
53
+ kept path, its owning case, and the `rm -rf` that ends it — a kept tree with no stated
54
+ remedy is a leak with better manners. A tree that refuses to delete is counted as **kept**,
55
+ never as removed: the report does not claim a teardown it did not achieve.
56
+
57
+ `test/residue_test.py` joins the gate with 8 cases, including the one that matters — stash
58
+ the two fixes and it exits 1 naming both suites, then prints
59
+ `residue: 2 of 2 temp tree(s) KEPT` with both paths. The failure path demonstrating itself.
60
+
61
+ ### Not swept
62
+
63
+ The 1904 pre-existing directories were **left in place** and reported. Ownership of 1808
64
+ of them cannot be established from their contents, and deleting state you cannot prove is
65
+ yours is the one thing this kind of cleanup must not do.
66
+
3
67
  ## v0.21.0 — a gate's self-test runs in both directions
4
68
 
5
69
  *"A validator that can't fail is decoration"* has been the rule here since the standard was
package/README.md CHANGED
@@ -261,10 +261,13 @@ plugins/make-skill/
261
261
  cursor/rules/make-skill.mdc # self-contained Cursor rule
262
262
  bin/make-skill.js + package.json # zero-dep npx installer
263
263
  test/validate.py # structural validator
264
+ test/{plant_guard,checker_parity,residue}_test.py # the gate's three suites
265
+ test/{plant_guard,residue}.py # did the plant land · what did the run leave
264
266
  test/evals/ # trigger set + behavioral scenarios (data)
265
267
  .github/workflows/{validate,release}.yml
266
268
  install.sh README.md CHANGELOG.md CONTRIBUTING.md SECURITY.md SKILL-CARD.md LICENSE
267
269
  docs/evidence/{specs,plans}/ # historical design records
270
+ docs/evidence/{backlog,verification}.md # what is owed · what confirmed what
268
271
  ```
269
272
 
270
273
  ## Contributing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/make-skill",
3
- "version": "0.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way — conformance to the Agent Skills open standard AND Anthropic's platform rules (front-matter limits, disclosure budgets, per-surface runtime limits, the Skills API, evals) plus the Claude Code plugin reference (manifest schemas, component layout, claude plugin validate --strict), marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, the review checklist for third-party skills, and MCP / A2A rules for protocol-connected skills. This package is the installer CLI.",
5
5
  "keywords": [
6
6
  "skill",
@@ -45,6 +45,6 @@
45
45
  "node": ">=16"
46
46
  },
47
47
  "scripts": {
48
- "test": "python3 test/validate.py && python3 test/plant_guard_test.py && python3 test/checker_parity_test.py"
48
+ "test": "python3 test/validate.py && python3 test/plant_guard_test.py && python3 test/checker_parity_test.py && python3 test/residue_test.py"
49
49
  }
50
50
  }
@@ -3,7 +3,7 @@
3
3
  "name": "make-skill",
4
4
  "displayName": "Make Skill",
5
5
  "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way: conformance to the Agent Skills open standard, Anthropic's platform rules (surfaces, Skills API, evals) and the Claude Code plugin reference, marketplace repo layout, version sync, validator + CI, multi-channel distribution (plugin, vercel skills CLI, npx, Cursor), npm gotchas, end-to-end first publish, the review checklist for third-party skills, plus MCP / A2A references for protocol-connected skills.",
6
- "version": "0.21.0",
6
+ "version": "0.23.0",
7
7
  "author": {
8
8
  "name": "ssheleg",
9
9
  "url": "https://x.com/sshlg93"
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: Authoring works on any agent. The bundled scripts/ need python3. Publishing steps need git, gh, node and npm; the plugin gates need the claude CLI. Not usable on the Claude API surface, which has no network and no runtime package install.
6
6
  metadata:
7
7
  author: ssheleg
8
- version: "0.21.0"
8
+ version: "0.23.0"
9
9
  homepage: https://github.com/ssheleg/make-skill
10
10
  ---
11
11