@ssheleg/sheleg-dev 0.11.2 → 0.11.4

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
@@ -4,6 +4,79 @@ All notable changes to this project are documented here.
4
4
  Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
  Versioning: [SemVer](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## v0.11.4 — the registry card stopped lagging what ships
8
+
9
+ `SKILL-CARD.md` carries the fields Anthropic's Skills-for-enterprise guidance asks every
10
+ organisation to keep — *"written so somebody who did not build this can decide"*. It said
11
+ `0.10.3` while this package shipped `0.11.3`.
12
+
13
+ **Nothing read it, so it could only drift.** The version moves in `package.json`,
14
+ `plugin.json` and `marketplace.json` on every release; the card was in no list. Measured
15
+ 2026-09-01 across the family: **four of nine cards were behind** — `agent-stack` by ten
16
+ minor releases, `sheleg-design` by six, `super-ux` by four, this one by one.
17
+
18
+ The same check now sits in each of them, which is this family's own rule that a class
19
+ seen twice becomes a script. It refuses a card whose `Version` row disagrees with
20
+ `package.json`, and refuses a card that states no version at all: one a reader cannot see
21
+ go stale is worse than one that lags visibly. Watched failing before it shipped.
22
+
23
+ Checks 25 → **26**, and `REQ-001`'s quoted gate line moves with it — the ledger's own
24
+ guard caught the restated output before this entry was written, which is what that guard
25
+ is for.
26
+
27
+ ## v0.11.3 — the schema address was fixed in a position nothing reads
28
+
29
+ v0.11.2 corrected the `$schema` **name** in both manifests and left the marketplace's
30
+ declaration where it already sat: inside `plugins[0]`, one level below the document
31
+ root. Nothing reads it there. Measured before changing anything, which is how it was
32
+ confirmed rather than assumed:
33
+
34
+ ```
35
+ $ python3 -c "import json; print(list(json.load(open('.claude-plugin/marketplace.json')).keys()))"
36
+ ['name', 'owner', 'description', 'plugins'] # no $schema at all
37
+ ```
38
+
39
+ So the pack shipped a release whose whole subject was a `$schema` address, and ended it
40
+ with a marketplace document that had **no effective declaration** — reading, from the
41
+ outside, exactly like the release that fixed it. Found by `telegram-dev`'s family-wide
42
+ sweep on 2026-08-31, not by re-reading v0.11.2.
43
+
44
+ - **The declaration moved to the document root** of `.claude-plugin/marketplace.json`,
45
+ with the marketplace schema, and the inert nested copy is gone. Root keys are now
46
+ `['$schema', 'name', 'owner', 'description', 'plugins']`. The plugin manifest's own
47
+ root declaration was already present and already the *manifest* schema — checked, not
48
+ presumed.
49
+ - **Both documents were validated against the schema each one declares**, fetched from
50
+ the address it names: marketplace → 200 `'Claude Code Plugin Marketplace'`, manifest →
51
+ 200 `'Claude Code Plugin Manifest'`, both validating clean under `jsonschema` 4.26.0.
52
+ The shapes genuinely differ, so the wrong schema is its own defect: a marketplace
53
+ requires `['name', 'owner', 'plugins']` and each `plugins[]` entry requires
54
+ `['name', 'source']`; a manifest requires `['name']` and has no `source` key.
55
+ - **A guard, so the inert position cannot come back** — `test/validate.py` check 25
56
+ reads `$schema` from the **root** and refuses four ways: absent, the dead
57
+ `claude-code-plugin.json` name, the wrong document type, and a declaration nested in a
58
+ `plugins[]` entry. Its shape is adopted from `telegram-dev`'s check 14 and
59
+ `test/check_schemas.py` (its `0263b89`), with credit in both files.
60
+ - **`test/check_schemas.py`** is the half that looks: it resolves every declared address
61
+ and validates the document against what is served. Deliberately outside `npm test`,
62
+ which stays offline and stdlib-only. Both halves import one `SCHEMA_FOR` map, so the
63
+ addresses have a single home — which required putting `validate.py`'s verdict block
64
+ under `if __name__ == "__main__"`, since importing it previously ran the suite and
65
+ exited the importer.
66
+
67
+ **Two things measured while doing this, and they are why the guard pins addresses
68
+ instead of just validating.** The served marketplace schema lists `$schema` among the
69
+ permitted properties of a `plugins[]` entry — so v0.11.2's inert declaration was
70
+ schema-**legal**, and no conformance run could ever have rejected it. And this
71
+ repository's marketplace checked against the *manifest* schema raises **zero** errors,
72
+ because that schema requires only `name` and neither root sets
73
+ `additionalProperties: false`; the reverse raises two. For the direction that mattered
74
+ here, validating proves nothing — only a guard that reads the root can.
75
+
76
+ Four planted defects, each watched failing by name; the negatives floor is re-derived
77
+ by `python3 test/negatives.py --list` (43 → 47) and the verdict moves 24 → 25 checks.
78
+ No behavioural change to any skill.
79
+
7
80
  ## v0.11.2 — the schema address the manifests declared returns 404
8
81
 
9
82
  A sibling repository's wave-3 run (agent-stack) measured that
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssheleg/sheleg-dev",
3
- "version": "0.11.2",
3
+ "version": "0.11.4",
4
4
  "description": "Seven integration skills for the layer a product reaches once it has users: Stripe subscription billing and cancellation retention, crypto payments, ad and conversion tracking under Consent Mode v2, Google sign-in and the wider Google auth surface, error tracking, and Core Web Vitals. This package is the installer CLI.",
5
5
  "bin": {
6
6
  "sheleg-dev": "bin/sheleg-dev.js"
@@ -45,6 +45,7 @@
45
45
  "scripts": {
46
46
  "test": "python3 test/validate.py && node test/moneygate_test.js && node test/fixtures_test.js && node test/installer_test.js",
47
47
  "test:negatives": "python3 test/negatives.py",
48
+ "test:schemas": "python3 test/check_schemas.py",
48
49
  "test:all": "python3 test/validate.py && node test/moneygate_test.js && node test/fixtures_test.js && node test/installer_test.js && python3 test/negatives.py"
49
50
  }
50
51
  }
@@ -3,7 +3,7 @@
3
3
  "name": "sheleg-dev",
4
4
  "displayName": "Sheleg Dev",
5
5
  "description": "The integration layer a product needs once it has users: Stripe subscription billing reconciled into your own database, crypto payments that survive over-payment and duplicate webhooks, ad and conversion tracking under Consent Mode v2, Google sign-in with the account-linking guards, the wider Google auth surface, and Core Web Vitals work that moves the score, and Sentry error tracking wired so it does not forward your own credentials to a third party and so a stack trace names the commit that caused it.",
6
- "version": "0.11.2",
6
+ "version": "0.11.4",
7
7
  "author": {
8
8
  "name": "ssheleg",
9
9
  "url": "https://x.com/sshlg93"