@ssheleg/make-skill 0.25.2 → 0.25.3

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,50 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.25.3 — the runner we said did not exist, and the date a claim about someone else now carries
4
+
5
+ - **B-122 closed: `references/authoring.md` told authors for four weeks that
6
+ there was no built-in eval runner, and prescribed a home-rolled suite on that
7
+ basis.** `claude plugin eval` had shipped. The section now names it, its case
8
+ format (`evals/<case>/case.yaml`, or `prompt.md` beside `graders/*.md`), and
9
+ the fact that `--ablation with-without` performs steps 3 and 5 of the very
10
+ procedure the paragraph prescribes by hand — plus the detail that it publishes
11
+ its HTML report to claude.ai unless `--no-publish` is passed, which is the
12
+ wrong default for an unreleased skill. **The replacement is a measurement, not
13
+ a correction of one absence into another**: on 2026-08-31, Claude Code 2.1.236,
14
+ every path (`eval`, `eval init`, `eval init --bare`, `eval <target>`) prints
15
+ ``plugin eval` is currently in early access`, writes nothing and exits 1, with
16
+ no settings key, environment variable or feature flag turning it on. That is
17
+ why `test/evals/` remains what runs here, and the paragraph says which day it
18
+ should be migrated. Two derived statements went with it: `distribution.md`'s
19
+ layout comment called the suite *"run by a human"*, and `retrofit.md`'s item 8
20
+ asked only that evaluations *exist* — the state MSK-01 had just spent a whole
21
+ run closing.
22
+ - **The class, not the sentence: `THIRD_PARTY_CLAIMS` in `test/validate.py`.**
23
+ A load-bearing claim about someone else's tool is registered beside the command
24
+ that re-checks it, and the guard fails unless the claim, that command and an
25
+ ISO date still sit within eight lines of each other — and fails equally when a
26
+ registered claim has been deleted from the doctrine but left in the registry,
27
+ so the registry cannot outlive what it describes. The skill's own rule *"No
28
+ time-sensitive statements"* sits 100 lines above the sentence that broke it and
29
+ nothing enforced it; this is the enforcement.
30
+ - **A generic detector was built first, measured, and rejected with the number.**
31
+ Over the shipped doctrine a pattern for absence-claims flagged **10 lines, of
32
+ which roughly half are legitimate** — the fallback rows of
33
+ `host-capabilities.md` ("on any other host there are no subagents") are made of
34
+ that sentence shape on purpose. A guard with a ~50% false-positive rate is the
35
+ over-defense that gets switched off, so the explicit registry replaced it; the
36
+ reasoning is recorded in the code beside the table rather than lost.
37
+ - **The three plants are in CI, and the group count still computes.** Added as
38
+ cases to the existing *claims, budgets and runnable commands* step rather than
39
+ as a new step, so `grep -c 'name: Negative self-test'` stays at **9** and
40
+ `CONTRIBUTING.md`'s *"9 negative self-test groups"* — a claim this validator
41
+ compares against the workflow — remains true. Each case asserts its own
42
+ expected message. The first local run of the guard **passed its plants for the
43
+ wrong reason**: the claim wraps a line break and the check was line-anchored,
44
+ so all three plants tripped the registry-rot branch instead of their own. The
45
+ matcher is whitespace-tolerant now, and every plant in the block asserts it
46
+ changed something before the validator is asked anything.
47
+
3
48
  ## v0.25.2 — the evals have been run, and the discovery check runs somewhere
4
49
 
5
50
  - **MSK-01 closed: the evaluation suite was executed against two models, and the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/make-skill",
3
- "version": "0.25.2",
3
+ "version": "0.25.3",
4
4
  "description": "Create, retrofit, audit, and ship agent skills & Claude Code plugins the proven ssheleg way \u2014 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",
@@ -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.25.2",
6
+ "version": "0.25.3",
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.25.2"
8
+ version: "0.25.3"
9
9
  homepage: https://github.com/ssheleg/make-skill
10
10
  ---
11
11
 
@@ -242,8 +242,24 @@ skill documents imagined problems.
242
242
  4. **Write the minimum** that fixes the gaps.
243
243
  5. **Iterate** — re-run, compare to baseline, refine.
244
244
 
245
- Evaluation record — there is no built-in runner, so keep them in the repo as
246
- data and run them yourself. House layout: `test/evals/triggers.json` (~20
245
+ **The upstream runner exists — check whether it runs for you before building
246
+ around it.** `claude plugin eval <target>` reads `evals/<case>/case.yaml`, or a
247
+ `prompt.md` beside `graders/*.md`, and `--ablation with-without` runs the
248
+ no-plugin arm and reports the delta — steps 3 and 5 above, performed for you.
249
+ It defaults to publishing its HTML report to claude.ai; `--no-publish` keeps it
250
+ local, which is the right default for an unreleased skill.
251
+
252
+ **Measured 2026-08-31 on Claude Code 2.1.236: every path — `eval`, `eval init`,
253
+ `eval init --bare`, `eval <target>` — prints ``plugin eval` is currently in
254
+ early access`, writes nothing and exits 1.** No settings key, environment
255
+ variable or feature flag on that machine turned it on. That is why the layout
256
+ below exists and is what actually runs here; the day `claude plugin eval --help`
257
+ is followed by a run rather than that line, this suite is the one to migrate.
258
+ **Re-check before trusting either half of this paragraph** — an absence is the
259
+ most perishable thing a document can assert, and nothing in this repository
260
+ changes on the day it stops being true.
261
+
262
+ House layout: `test/evals/triggers.json` (~20
247
263
  queries, half near-miss negatives) and `test/evals/scenarios.json` (≥3, the
248
264
  shape below), with any input under `test/evals/fixtures/` — **never named
249
265
  `SKILL.md`**, which would ship as a real skill:
@@ -65,7 +65,7 @@ the shape from `ssheleg/super-ux`:
65
65
  ├── cursor/rules/*.mdc # if agent-rules make sense for Cursor
66
66
  ├── bin/<name>.js + package.json # npx installer (zero-dep Node)
67
67
  ├── test/validate.py # consistency validator (stdlib only)
68
- ├── test/evals/ # triggers.json + scenarios.json (data, run by a human)
68
+ ├── test/evals/ # triggers.json + scenarios.json (driven here; `claude plugin eval` is gated, authoring.md)
69
69
  ├── .github/workflows/validate.yml # validator on push+PR (+ release.yml, off by default)
70
70
  ├── install.sh # POSIX fallback
71
71
  ├── README.md (English-first), CHANGELOG.md, LICENSE (MIT)
@@ -98,11 +98,13 @@ Report the table before changing anything, then fix.
98
98
  7. **Validator**: present, green, and able to fail — run the negative test. CI
99
99
  present, last run `success`, with `claude plugin validate --strict` as its own
100
100
  job so an upstream outage cannot mask a house failure.
101
- 8. **Evaluations** exist in `test/evals/` (`references/authoring.md`): ≥3
101
+ 8. **Evaluations** exist and have been executed (`references/authoring.md`): ≥3
102
102
  behavioral scenarios, a trigger set whose negatives are near-misses, both
103
103
  classes on both sides of the train/validation split, coexistence checked
104
104
  against the skills already installed, and a re-run on every model the skill
105
- claims support for.
105
+ claims support for. Try `claude plugin eval` first and record what it did —
106
+ authored-but-never-executed is the state this item exists to catch, and the
107
+ house layout in `test/evals/` is the fallback for when that runner is gated.
106
108
  9. **README**: badges (npm/CI/license), install + update matrix, English-first
107
109
  prose, and the bundled `references/` listed so a reader sees what ships.
108
110
  10. **Distribution live-checks** (`references/distribution.md`): `npx --yes