Repository navigation
Conversation
Vitest 3 to 4.1.12, the version the vitest and @vitest/mocker alerts name. Vitest 4 drops tinypool and runs on our own vite 8, so tinypool and the two vite 7 copies leave the lockfile. @types/estree stays at 1.0.9: rollup's exact pin went with it, and the newer one isn't this change's business. The consistency suite's pause after each test was for Vitest 3's 60-second message limit. On Vitest 4 a slowed part passes without it; the comment and README say so, and the pause stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Try it: https://digitalcredentials.github.io/verifier-plugin/pr-41/ Updates on every push to this PR, and goes away when it closes. The browser tests run against this copy too. |
Smoke testThe live demo (main at ae26bf8) against this PR's preview (pr-41 at f745639, which is main plus 961a0a6). Expected, written before running: no case differs, since the built plugin is byte-identical. The code served: the preview's JavaScript is byte-identical to the live demo's once its own address ( Automated, with a local compare script at phone width, comparing every line the verifier-plugin box shows:
CI, three runs: all passed, each with 105,720 unit tests and 60 browser tests (1 skipped), on Node 24. 58 browser tests against the published preview passed (3 skipped). No "Timeout calling onTaskUpdate". By hand, in Safari (a browser the automated runs don't use): live against pr-41 side by side. The Details tab on 11 of the 12 demo buttons (Verified seen in each page's log, |
|
Post-merge check (2 November 2026): the live demo now, against the last build before #39. All expectations, written down before running, were met: no change in behaviour, speed or size.
Method: both builds were served at the real address from gh-pages history (the built plugin refuses local addresses), each round opened both fresh and alternated which went first, and timings were taken inside the page. The timings come from one Mac; Firefox wasn't run; the wallet isn't covered until its verifier-plugin pin is bumped. |
In the wallet: lcw-sandbox.org (9 November 2026)All clear. This PR has now reached the wallet. James deployed lcw-sandbox.org with lcw-front-end
|
Part of #37 (PR 3 of 3). It leaves #37 open: the
@stablelib/ed25519alert waits on digitalcredentials/verifier-core#84.What changes
The test runner, Vitest, goes from 3.2.7 to 4.1.12: the version the
vitestand@vitest/mockeralerts name as fixed. 4.1.12 is the newest 4.x and has been out since 15 October. Vitest 5 is out, but two major versions in one step is a bigger change to the runner the consistency suite depends on, and 5.1.0 was published on the day of this change.package.json:vitest^3.2.4→^4.1.12. Inpackage-lock.json:vitestand its own@vitest/*packages 3.2.7 → 4.1.12;chai5.3.3 → 6.3.0,es-module-lexer1.7.0 → 2.3.2,std-env3.10.0 → 4.3.0,tinyexec0.3.2 → 1.3.1,tinyrainbow2.0.0 → 3.2.0obug2.2.1,@standard-schema/spec1.1.0 (both for Vitest 4);@vitest/mocker4.1.12 moves to the top leveltinypool(Vitest 4 no longer uses it); bothvite7 copies andvite-node(Vitest 4 runs on our ownvite8);esbuildandrollupwith their 52 per-platform binaries, which onlyvite7 needed; eight small Vitest 3 helpersThat's 3 added, 67 removed, 12 updated, and nothing else: no package outside Vitest's tree moved. One entry is held on purpose: rollup pinned
@types/estreeto exactly 1.0.9, and with rollup gone npm picked 1.0.10, published four days earlier. It's type definitions only, unrelated to this change, so it stays at 1.0.9 (npm installleaves it there).Vitest's own packages are published by its GitHub Actions, with npm provenance; the other new versions by their usual publishers, all at least four weeks old. Every changed entry's checksum matches the npm registry.
This should close the last 5 dev-tool alerts:
tinypool#5, #6 (critical),vitest#3,@vitest/mocker#2, #20. Only@stablelib/ed25519#1 stays open.Nothing ships (verified)
dist/built on this branch is byte-identical todist/built on main: all 12 files. Vitest only runs the tests.What was exposed
Developer machines and CI only. Read against our setup (reasoned from the advisories and our code; not tested):
tinypool(critical): needs something else in the test process to have pollutedObject.prototypefirst, through a separate bug fed attacker-controlled input. Our tests run on fixtures in this repo.@vitest/mocker: needs a dev server using itsmockerPluginorinterceptorPluginthat an attacker can reach. Nothing here uses either, or Vitest's browser mode; the browser tests use Playwright.The tests still mean the same thing
The risk in a test-runner upgrade is that tests quietly stop catching mistakes. Checked against Vitest 3 on main:
src/outcomes.ts(reassurance in a "couldn't check", naming an unconfirmed issuer, addressing a nameless issuer by identifier, a green "Expired") fail the same tests in the same numbers on both: 34,004, 1, 24 and 1,823.The 60-second limit
The consistency suite pauses after each test because Vitest 3 fails a run, every test passing, when a long file's messages wait 60 seconds ("Timeout calling onTaskUpdate"). Vitest 4.1.12 sets no time limit on those messages (its worker connection has
timeout: -1; Vitest 3's had 60 s). Slowing one part to 83–88 s, twice: Vitest 3 without the pause fails with exactly that error; Vitest 4.1.12 passes with and without it.The pause stays in case a later Vitest brings the limit back. It adds about half a second to the suite (7.6 s against 7.1 s). Its comment and the README row now say which version it was for. These are the only changes outside the dependency files.
Checks
git archive,npm ci):npm ciinstalls 468 packages and leaves it untouched, as does a followingnpm install. Re-running the upgrade from main's lockfile gives the same file except the held@types/estree.timeout: -1.tsconfig.jsoncoverssrconly). The same 18 errors appear when they are, on Vitest 3 and 4 alike, so this upgrade added none, but CI wouldn't have caught it if it had.Result: 0 of 21 differ (12 demo buttons, 9 vc-test-fixtures links), after a noise check of the live demo against itself (also 0 of 21). The preview is f745639 (main ae26bf8 + 961a0a6), and once its own address and the file names that follow from it are swapped back, its JavaScript is byte-identical to the live demo's. By hand in Safari, the same on every case compared. CI passed three times out of three (105,720 unit tests, 60 browser tests, 58 against the preview; Node 24).
Reaching the wallet
Nothing. The built plugin doesn't change, so there's nothing for a pin bump to pick up.
🤖 Generated with Claude Code