chore(ci): retire the StackBlitz demo and the npm lockfile it existed for - #1469
Merged
Conversation
… for `package-lock.json` was a second lockfile derived from the same `package.json` as `pnpm-lock.yaml`, kept only so the StackBlitz demo could install with npm. Dependabot updates `package.json` and `pnpm-lock.yaml` and has no knowledge of the npm one, so every npm-ecosystem PR opened with that lockfile already stale and died at `check-stackblitz-lock.mjs`, the first step after install. Delete `.stackblitzrc`, `package-lock.json`, `scripts/check-stackblitz-lock.mjs` and the CI step that ran it, plus the two references the gate left behind: its `.stackblitzrc` entry in `scripts/lib/source-hygiene-surface.mjs` (a listed root file that vanishes fails that gate by name) and the `package-lock.json` glob in `.github/labeler.yml` (a glob matching nothing fails `test/labeler-config.test.ts`). The README badge and the paragraph describing the WebContainer boot go with them. The demo could not simply switch to pnpm: `engines.pnpm: ">=10.0.0"` with `engine-strict=true` refuses any older pnpm before the lockfile is read, and `pnpm-lock.yaml` is lockfileVersion 9.0, which pnpm 8 cannot parse at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Z7RPTnPnXsb8RUBr4yDjE
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This was referenced Sep 3, 2026
hotlong
marked this pull request as ready for review
September 3, 2026 01:20
This was referenced Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1231
Retires
package-lock.json, the StackBlitz demo it existed for, and the gate that watched it — the 2026-08-31 ruling's branch 2.Step-1 measurement: what the ruling asked for, and what was actually possible
The ruling's step 1 is "实测 WebContainers 能否以 pnpm 跑本仓". That measurement could not be performed from this container, and no weaker reading is being passed off as it. The egress gateway denies CONNECT to every host that could answer it:
stackblitz.comdeveloper.stackblitz.comwebcontainers.ioregistry.npmjs.orgSo no WebContainer could be booted and StackBlitz's live documentation of its bundled toolchain could not be read.
What was measured instead, locally and for real:
1. The claim in
.stackblitzrcand the README is confirmed on its measurable half — and it has grown a second, newer blocker. Against a scratch copy of this repo'spackage.json+pnpm-lock.yaml+.npmrc:npx pnpm@8.15.9 install --frozen-lockfile --prod --no-optional --ignore-scriptsfails before the lockfile is opened:package.jsondeclaresengines.pnpmat 10 or above, and.npmrcsetsengine-strict=true. pnpm's own prescribed remedy is a global install — the operation the README recorded WebContainers as forbidding.pnpm-lock.yamlislockfileVersion: '9.0'. The only escape pnpm offers is to recreate the lockfile, i.e. exactly the cold full re-resolve the current arrangement exists to avoid.2. Even granting a pnpm 10 inside the sandbox, the demo's install shape does not port. The demo ran
npm install --omit=dev --omit=optional; the--omit=optionalhalf is there becausebetter-sqlite3cannot compile in the sandbox. With this repo's own pinned pnpm 10.33.0:pnpm install --frozen-lockfile --prod— succeeds (432 packages).pnpm install --frozen-lockfile --no-optional— fails:ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY Broken lockfile: no entry for 'lightningcss-android-arm64@1.33.0' in pnpm-lock.yaml.vitest@4.1.10.3. StackBlitz's own documentation, read from source rather than from memory. Their public docs repos were cloned over the anonymous git lane (
stackblitz/docsate45067ef,stackblitz/webcontainer-docsat4770ebe5). They confirm pnpm is supported ("WebContainers natively support all the major package managers including npm, pnpm, and yarn v1") but state no version anywhere, and record that the Node version is locked with multi-version support still on the roadmap. Nothing on a reachable channel establishes a pnpm 10 or newer in the sandbox.Which branch that selects, stated with its residue
Branch 2. Everything measurable points one way and nothing measurable points the other, but the residue is named plainly: the one fact that would flip this — whether today's StackBlitz bundles pnpm 10 or newer — is exactly the fact this container cannot reach. Shipping branch 1 on it would put an unverifiable claim behind a README badge, and unverifiability is the mechanism that produced this card in the first place:
package-lock.json's only guardian was a hand-written gate, and the tree it described rotted anyway. Branch 2 is the only outcome that rests on no unverifiable premise. A maintainer with a browser can reverse it in one measurement and a small revert.The gate had three references, not one
The card and the ruling name the CI step. There were two more, and both are load-bearing — each was ablated by putting the reference back and watching the gate go red:
.github/workflows/ci.ymlstepscripts/lib/source-hygiene-surface.mjsROOT_TEXT_FILESentry for.stackblitzrc✗ source hygiene: scanned root file(s) missing: .stackblitzrc, exit 1.github/labeler.ymlglob forpackage-lock.json— not named anywheretest/labeler-config.test.ts:dependencies → package-lock.json: expected [ 'dependencies → package-lock.json' ] to deeply equal [], exit 1Each ablation proved the mutation on disk (anchored grep count plus a changed
git hash-object) before reading any result, and proved the restore by hash equality with the HEAD blob;git diff HEADis empty afterwards. The same file also carried a prose paragraph namingpackage-lock.jsonand pointing at the retired gate as its dedicated guardian; that is corrected, and the byte figures it quoted were dropped because they had already drifted (221KB/320KB written against 260KB/397KB measured).Verification
Run at
2a545293with a clean tree, joined with&&so one verdict covers all of it:✓ source hygiene clean✓ source token ratchet clean✓ Validation passed✓ i18n lint gate: 0 i18n/missing-* issues✓ Build completeTest Files 154 passed (154)·Tests 3259 passed | 1 skipped (3260)That is this repo's whole
pnpm verifychain, so nothing is narrowed.Scope
package.jsonwas not touched — it belongs to #1376's chain, and neither branch of the ruling required it. The five stalled dependabot PRs (#585, #658, #1058, #1178, #1179) were not merged, rebased, re-run, commented on or relabelled. #1225 tracks advisories in the StackBlitz install tree; under this branch that tree ceases to exist, and that card is left untouched for the seat to redirect..github/labeler.ymlis outside the file surface this was dispatched with. It is included because the deletion makestest/labeler-config.test.tsfail without it — a required consequence, ablated above, not a discretionary tidy-up.Generated by Claude Code
Generated by Claude Code