Skip to content

Commit 090dcbc

Browse files
authored
Most of the shelf no longer installs — measured, charted, and tripwired (#5)
* site: most of the shelf no longer installs, measured This site's promise is the install decision, and until today it only ever asked whether a plugin declares an install path. It never asked whether that path still resolves. It usually does not. ## The measurement `scripts/measure-installability.mjs` reads every npm name in the registry off registry.npmjs.org and tests each `@deepseek-ai/dsh*` range against every published dsh version. No GitHub budget, no clone. Of 1,280 published packages that name a dsh version: - 79 (6%) accept dsh 0.1.2-rc.1, what `npx @deepseek-ai/dsh` gives you - 818 accept nothing newer than the 0.1.0 line - 182 accept no published dsh at all - 138 use a wildcard: never breaks, never protects ## Why npm semver never lets a prerelease satisfy a caret with a different version tuple, and dsh has only ever shipped prereleases. `^0.1.1-rc.1` matches 0.1.1-rc.2 and stops dead; `^0.1.2-alpha.1` matches 0.1.2-rc.1, because the tuple is the same. The rule is the tuple, not the caret, and it is invisible in a diff. The loud failure is ERESOLVE and you would fix that. The quiet one is what reaches people: install a stale plugin alone and npm hoists the old `@deepseek-ai/dsh-*` copies to the root, pushing the harness's own into nested node_modules. The install succeeds and the plugin imports a different harness than the host runs. Measured on one package: 13 harness packages at two versions at once, no warning. Three of our own four plugins were in that column this morning. The section says so. ## Two tripwires, one of which I got wrong first - `check-claims` now fails when the installability census names a different dsh than the ecosystem census does. A census stale by version is not stale by date, and the 14-day rule cannot see it. **It caught one immediately:** data/ecosystem.json still said `npx` gives you 0.1.1-rc.2, three days after 0.1.2-rc.1 took the `latest` tag. Both censuses re-measured. - The first version of that check sat BELOW the `if (fail.length)` gate, so it collected failures nothing ever read — green in both directions. Moved above the gate and mutation-checked: it fails on a wrong version now. - data/installability.json is allowlisted in .gitignore and re-measured in the deploy job. A census the deploy does not re-run is the failure this repo already had once, for twelve days. * data: rebuild against the merged registries (13,381 plugins, 486 themes) 941 entries now say they carry no proof, up from 927: the plugins sweep demoted 84 rows whose only receipt named cordis rather than the harness.
1 parent 4e46598 commit 090dcbc

13,393 files changed

Lines changed: 13800 additions & 12098 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/deploy.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ jobs:
8989
run: |
9090
node scripts/measure-ecosystem.mjs
9191
node scripts/measure-seams.mjs
92+
# Reads registry.npmjs.org only, and its subject moves whenever dsh
93+
# publishes: a census against yesterday's `latest` is not stale by
94+
# date and is still wrong. check-claims fails the build when this
95+
# file and the ecosystem census disagree about what npx installs.
96+
node scripts/measure-installability.mjs
9297
9398
# Fetches both registries over the network. DATA_SOURCE is deliberately
9499
# unset: a `local` build publishes `source: "local checkout"` on

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,8 @@ data/*.json
1919
!data/ecosystem.json
2020
!data/directories.json
2121
!data/seams.json
22+
# and the installability census, which is the receipt for the one claim on the
23+
# front page that is about other people's packages rather than our own rows.
24+
!data/installability.json
2225
!data/sponsors.json
2326
.vinext/

data/ecosystem.json

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
11
{
22
"$comment": "Measured from the GitHub search API. total_count is exact even though the result list caps at 1000. Re-derive with scripts/measure-ecosystem.mjs.",
3-
"measured": "2026-09-01",
3+
"measured": "2026-09-04",
44
"topic": "dsh-plugin",
55
"launch": "2026-08-13",
66
"query": "topic:dsh-plugin created:<DATE",
7-
"total": 13007,
8-
"withStars": 8388,
7+
"total": 13474,
8+
"withStars": 8626,
99
"release": {
10-
"version": "0.1.1-rc.2",
11-
"published": "2026-08-21",
12-
"ahead": [
13-
{
14-
"tag": "alpha",
15-
"version": "0.1.2-alpha.3",
16-
"published": "2026-08-31"
17-
}
18-
]
10+
"version": "0.1.2-rc.1",
11+
"published": "2026-09-03"
1912
},
20-
"beforeFirstDay": 425,
21-
"sinceLaunch": 12423,
13+
"beforeFirstDay": 439,
14+
"sinceLaunch": 12875,
2215
"series": [
2316
{
2417
"date": "2026-08-06",
@@ -42,7 +35,7 @@
4235
},
4336
{
4437
"date": "2026-08-11",
45-
"created": 22
38+
"created": 23
4639
},
4740
{
4841
"date": "2026-08-12",
@@ -54,79 +47,91 @@
5447
},
5548
{
5649
"date": "2026-08-14",
57-
"created": 1891
50+
"created": 1882
5851
},
5952
{
6053
"date": "2026-08-15",
61-
"created": 1580
54+
"created": 1581
6255
},
6356
{
6457
"date": "2026-08-16",
65-
"created": 1515
58+
"created": 1514
6659
},
6760
{
6861
"date": "2026-08-17",
69-
"created": 959
62+
"created": 962
7063
},
7164
{
7265
"date": "2026-08-18",
7366
"created": 683
7467
},
7568
{
7669
"date": "2026-08-19",
77-
"created": 739
70+
"created": 740
7871
},
7972
{
8073
"date": "2026-08-20",
8174
"created": 1302
8275
},
8376
{
8477
"date": "2026-08-21",
85-
"created": 581
78+
"created": 580
8679
},
8780
{
8881
"date": "2026-08-22",
8982
"created": 304
9083
},
9184
{
9285
"date": "2026-08-23",
93-
"created": 304
86+
"created": 305
9487
},
9588
{
9689
"date": "2026-08-24",
97-
"created": 285
90+
"created": 286
9891
},
9992
{
10093
"date": "2026-08-25",
101-
"created": 294
94+
"created": 298
10295
},
10396
{
10497
"date": "2026-08-26",
105-
"created": 267
98+
"created": 276
10699
},
107100
{
108101
"date": "2026-08-27",
109-
"created": 224
102+
"created": 233
110103
},
111104
{
112105
"date": "2026-08-28",
113-
"created": 375
106+
"created": 383
114107
},
115108
{
116109
"date": "2026-08-29",
117-
"created": 187
110+
"created": 191
118111
},
119112
{
120113
"date": "2026-08-30",
121-
"created": 138
114+
"created": 149
122115
},
123116
{
124117
"date": "2026-08-31",
125-
"created": 148
118+
"created": 166
126119
},
127120
{
128121
"date": "2026-09-01",
129-
"created": 11
122+
"created": 145
123+
},
124+
{
125+
"date": "2026-09-02",
126+
"created": 132
127+
},
128+
{
129+
"date": "2026-09-03",
130+
"created": 113
131+
},
132+
{
133+
"date": "2026-09-04",
134+
"created": 14
130135
}
131136
]
132137
}

data/installability.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"measured": "2026-09-04",
3+
"method": "registry.npmjs.org latest manifest per npm name; semver.satisfies over every published @deepseek-ai/dsh version",
4+
"dshLatest": "0.1.2-rc.1",
5+
"dshVersions": [
6+
"0.0.1-rc.1",
7+
"0.0.1-rc.2",
8+
"0.0.1-rc.5",
9+
"0.1.0-rc.2",
10+
"0.1.0-rc.3",
11+
"0.1.0-rc.6",
12+
"0.1.0-rc.7",
13+
"0.1.0-rc.8",
14+
"0.1.1-rc.1",
15+
"0.1.1-rc.2",
16+
"0.1.2-alpha.2",
17+
"0.1.2-alpha.3",
18+
"0.1.2-alpha.4",
19+
"0.1.2-alpha.5",
20+
"0.1.2-rc.1"
21+
],
22+
"npmNames": 2002,
23+
"unreadable": 0,
24+
"declaring": 1280,
25+
"current": 79,
26+
"stuckOn010": 818,
27+
"neverAny": 182,
28+
"wildcard": 138
29+
}

0 commit comments

Comments
 (0)