@ssheleg/make-skill 0.13.0 → 0.14.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,36 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.14.0
4
+
5
+ ### Fixed
6
+
7
+ - **`LINK_ESCAPE` fired on every cross-skill link and called them all broken.** The
8
+ check rejected any `../` target on the stated grounds that "packagers ship that
9
+ directory alone, so it arrives broken on every agent." Measured against the packager:
10
+ `npx skills add ssheleg/task-pipeline --skills evidence-docs` installed the sibling
11
+ too, laid both under one `skills/` directory, and **all eleven** of `evidence-docs`'s
12
+ outbound links resolved. The rationale was false for the case it fired on most.
13
+
14
+ An escape that lands on a sibling in the same tree is a cross-skill link inside one
15
+ plugin, and `evidence-docs` is deliberately built that way — it says so in its own
16
+ body: *a navigator, not a second copy*. Twelve permanent findings nobody could ever
17
+ close is how an auditor teaches people to ignore it.
18
+
19
+ The check now fires only when the target resolves to **nothing**, which is the defect
20
+ it was always for. Probed both ways: a dangling `../nonexistent-skill/nope.md` is
21
+ still caught; the eleven real ones are not. Family-wide the count went 22 → 11 GAP,
22
+ and no repository gained a finding.
23
+
24
+ ## v0.13.1
25
+
26
+ ### Fixed
27
+
28
+ - **`scripts/__pycache__/` shipped in v0.13.0.** Every other repository in the family
29
+ carries a `__pycache__/` rule in `.gitignore`; this one did not, so a byte-compile run
30
+ left an artifact and `git add -A` took it. The auditor's own `BUNDLE_NESTED` check
31
+ caught it — on the release that changed the auditor, which is the most useful moment
32
+ for a check to fire on its author.
33
+
3
34
  ## v0.13.0
4
35
 
5
36
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/make-skill",
3
- "version": "0.13.0",
3
+ "version": "0.14.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",
@@ -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.13.0",
6
+ "version": "0.14.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.13.0"
8
+ version: "0.14.0"
9
9
  homepage: https://github.com/ssheleg/make-skill
10
10
  ---
11
11
 
@@ -377,8 +377,16 @@ def _check_links(a, skill_dir, skill_text, rel):
377
377
  if target.startswith(("http://", "https://", "mailto:", "#")):
378
378
  continue
379
379
  if target.startswith("../") or "/../" in target:
380
- a.gap("LINK_ESCAPE", "link %r escapes the skill directory — packagers "
381
- "ship that directory alone, so it arrives broken on every agent"
380
+ # An escape that lands on a sibling skill in the same tree is a
381
+ # cross-skill link inside one plugin, and every packager measured
382
+ # ships those siblings together — `npx skills add <repo> --skills
383
+ # <one>` installed the sibling too, and all eleven links resolved.
384
+ # An escape that lands nowhere is the defect this check is for.
385
+ out = os.path.normpath(os.path.join(skill_dir, target.split("#")[0]))
386
+ if os.path.exists(out):
387
+ continue
388
+ a.gap("LINK_ESCAPE", "link %r leaves the skill directory and resolves "
389
+ "to nothing — a sibling would ship alongside, this will not"
382
390
  % target, rel, i)
383
391
  bad = True
384
392
  continue