Testing a change
SkillDev toolsLets your agent pick and run the right tests, rebuilds, and end-to-end checks for a change in the verdaccio monorepo.
Use Testing a change in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Testing a change and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Testing a change skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Select and run the checks that actually cover a change in the verdaccio monorepo, rebuild the touched packages, run their tests and their dependents' tests, the api integration suite, the e2e CLI battery or the Cypress UI suite when the change is client- or UI-visible, and recognise the cases wher
What this skill tells your AI
The instructions your AI receives, as published by verdaccio/verdaccio in .agents/skills/testing-changes/SKILL.md and read by ahel’s review.
Run what the change affects. CI runs the full pipeline (lint, format, build, tests on
Node.js 24 and 26, Docker build, the e2e CLI matrix, Cypress) on a ready PR whose diff
matches ci.yml's paths: filter — packages/**, tests/**, docker-examples/**,
package.json, pnpm-workspace.yaml, vite.lib.config.mjs, .changeset/**, or the
workflow file itself. A docs-only or .agents//.claude/-only PR does not trigger CI
at all; don't cite a green check that never ran. The local job is fast, honest feedback
either way, not a second full gate. What matters is that the run you choose exercises
the code you changed.
The one rule: rebuild before you test
Packages import each other through build/ (exports in every package.json), not
src. A test in packages/api that imports @verdaccio/store runs against
packages/store/build/. After editing store, an api run that skips the rebuild
tests the old build and passes without touching your change.
pnpm build # everything, once per checkout
pnpm --filter @verdaccio/store build # the package you edited
pnpm --filter "@verdaccio/store..." build # it plus what it depends on
Selecting the run
Find the packages the diff touches, then test them and their dependents:
git diff --name-only origin/master...HEAD | cut -d/ -f1-3 | sort -u
pnpm --filter "[origin/master]" build # packages changed since master
pnpm --filter "...[origin/master]" test # those packages and everything that depends on them
Narrower runs, once the touched packages are rebuilt:
pnpm --filter @verdaccio/store test # one package
pnpm --filter @verdaccio/store test test/versions.spec.ts # one file
pnpm --filter @verdaccio/store test test/versions.spec.ts -t 'tag' # one case
pnpm --filter @verdaccio/store test -- --coverage=false # faster
Always go through the package's test script, not bare vitest: some packages set
environment the tests rely on (TZ=utc for logger, ui-theme, ui-components;
NODE_ENV=test for memory; a longer timeout for store).
Map the change to the suites that prove it:
| Change touches | Run |
|---|---|
A helper in core, config, url, tarball, ... | That package, then pnpm --filter "...@verdaccio/<pkg>" test for the dependents |
A route in packages/api or packages/web | @verdaccio/api integration tests (test/integration, supertest against initializeServer) |
store, local-storage, proxy (packument, tarball) | Those packages, @verdaccio/api, then the e2e CLI battery for the affected client flow |
auth, htpasswd, auth-memory, tokens, 2FA | Those packages, @verdaccio/api (login, token, tfa, profile specs), e2e for login/publish |
config, cli, node-api, verdaccio | Those packages, then start the server (pnpm start or node packages/verdaccio/bin/verdaccio) |
UI (ui-theme, ui-components, web) | @verdaccio/ui-components, @verdaccio/ui-theme, then pnpm e2e:ui:local |
| Anything a package manager observes | ./scripts/e2e-cli-local.sh <pm> for each client the change can affect |
Plugin interfaces in @verdaccio/types | pnpm type-check across the workspace, the bundled plugins' tests |
Always finish with pnpm lint and pnpm format:check; the pre-commit hook enforces
them on staged files, CI on everything.
End-to-end
The CLI battery is @verdaccio/e2e-cli (repository verdaccio/e2e-tests). Locally:
pnpm build
./scripts/e2e-cli-local.sh npm@11 # also npm@10, npm@12, pnpm@10, pnpm@11, yarn-classic, yarn-modern@4, bun, deno
It starts a fresh registry on port 4873, runs the client scenarios, and cleans up. CI
runs the whole matrix; run at least the client the reporter used and npm@11 when a
change touches publish, install, tarballs, dist-tags, search, or auth.
The UI battery is Cypress: pnpm e2e:ui:local (headless) or pnpm e2e:ui:local:open.
Docker-based flows (pnpm docker, e2e/docker) need a running Docker daemon.
Gotchas that make a run lie
- Stale build (above). If a test passes when you expected a failure, rebuild the package you changed and run again.
- Network is blocked.
vitest.setup.mjsdisallows every host except localhost vianock.Nock: Disallowed net connectmeans the code under test reached the network; mock the uplink, do not widen the allow-list. - A port left behind. A killed e2e run can leave a registry on port 4873
(check with
lsof -i :4873), and the next run then tests the wrong process. - Global package-manager settings. A user-level
minimumReleaseAgeor registry override changes whatpnpm installand the e2e clients do; a failure that only happens on your machine usually comes from~/.npmrcor the global pnpm config. fail-fastin CI. A test job failing on Node.js 26 cancels the Node.js 24 job; read the failed log, not the cancelled one.- Disabled tests. Files named
*.__disabled__.tsanddisabled_test/folders are not run; a pass there proves nothing.
Reporting
Name what you ran and what you did not. "Rebuilt store, ran store and api
integration tests plus the e2e battery with npm@11; did not run the UI suite" is an
honest report. "Tests pass" after one package's run is not.
Signals
- GitHub stars
- 18k
- Forks
- 1k
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
testing-changes-verdaccio- Source
- github.com/verdaccio/verdaccio
github.com/verdaccio/verdaccio
Related picks
Skill · mattpocock
The pick for TypeScripttypescript-pro
Skill · jeffallan
The pick for TypeScriptnodejs-backend-patterns
Skill · wshobson
The pick for Noderun-node-tests
Skill · hiroro-work
The pick for Nodeteach
Skill · mattpocock
More in Dev toolsponytail
Skill · dietrichgebert
More in Dev tools