@stacksjs/stx@0.2.383 is the latest dist-tag and its tarball returns 404, so no fresh install of stx (or of anything that depends on it, which includes the whole Stacks framework) can resolve.
The version exists in registry metadata and even records its tarball URL. Only the file is missing:
$ npm view @stacksjs/stx dist-tags --json
{ "latest": "0.2.383" }
$ npm view @stacksjs/stx@0.2.383 dist.tarball
https://registry.npmjs.org/@stacksjs/stx/-/stx-0.2.383.tgz
$ curl -o /dev/null -w "%{http_code}\n" https://registry.npmjs.org/@stacksjs/stx/-/stx-0.2.383.tgz
404Three clients, same answer, so it is not one tool's cache:
$ npm install @stacksjs/stx
npm error 404
$ bun add @stacksjs/stx
error: GET https://registry.npmjs.org/@stacksjs/stx/-/stx-0.2.383.tgz - 404
$ npm pack @stacksjs/stx@0.2.383
npm error 404Neighbouring versions are fine, so it is this one publish:
| version | tarball |
|---|---|
| 0.2.383 | 404 |
| 0.2.382 | 200 |
| 0.2.381 | 200 |
| 0.2.380 | 200 |
| 0.2.379 | 200 |
It takes the Stacks framework down with it
Every Stacks package declares "@stacksjs/stx": "^0.2.378", which resolves to the newest matching version, so a clean install picks 0.2.383 and fails:
$ bun add @stacksjs/buddy
Resolved, downloaded and extracted [292]
error: GET https://registry.npmjs.org/@stacksjs/stx/-/stx-0.2.383.tgz - 404That is buddy new and any first install of the framework, on a machine with no lockfile and no cache. Existing checkouts are unaffected: stacksjs/stacks pins @stacksjs/stx@0.2.378 in bun.lock, so --frozen-lockfile keeps working and CI stays green. The breakage is invisible from inside the repository, which is how it can sit unnoticed.
This is the same shape as the v0.74.4 outage, where published packages pointed at versions whose publish had failed and buddy new was broken for six hours. The lesson recorded then was that a release is not done when the version numbers appear, only when the tarballs are fetchable.
Fix
Needs registry credentials, so I am not doing it:
- Republish the 0.2.383 tarball if the artifact still exists, which keeps the version line intact; or
- Move
latestback to 0.2.382 (npm dist-tag add @stacksjs/stx@0.2.382 latest) and deprecate 0.2.383 so resolvers skip it, then cut 0.2.384 from the same source.
Option 2 is the faster unblock, and it works even while the 404 persists, because a range of ^0.2.378 will then resolve to 0.2.382.
Worth adding either way
A post-publish check that fetches every tarball it just announced before the release is called done. The registry accepting a version is not the same as the file being downloadable, and that gap is exactly what both this and the v0.74.4 outage were.