diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4913bd1..8407dc1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -20,3 +20,13 @@ docs: trim local setup to the essentials
## Build outputs
`imagediff.js` and `imagediff.min.js` are generated by `npm run build` and committed for releases. Rebuild and commit them only when preparing a release; ordinary PRs change `js/imagediff.js` and leave the built files alone. `npm test` runs against the source, including the CLI, so nothing needs rebuilding to test a change.
+
+## Releasing
+
+On the release PR, after `npm run build` and committing the build outputs, run:
+
+```sh
+npm run test:release
+```
+
+It rebuilds, runs `npm test` against the built `imagediff.js` and `imagediff.min.js` (through `require` in Node and in a page, along with the CLI specs), and then fails if the fresh build differs from the committed build outputs. Publish only once it passes.
diff --git a/README.md b/README.md
index b8eb422..9d79a79 100644
--- a/README.md
+++ b/README.md
@@ -92,6 +92,8 @@ npm test
* `npm run test:node` runs the specs, including a smoke test of the `imagediff` CLI, in Node.js against [node-canvas](https://github.com/Automattic/node-canvas) (the optional `canvas` dependency, which `npm ci` installs from prebuilt binaries on common platforms).
* `npm run test:browser` runs the specs in headless Chromium with Playwright.
* `npm run test:serve` serves the specs at http://localhost:8085/spec/ to watch them run in a browser.
+* `IMAGEDIFF_LIBRARY=imagediff.min.js npm test` runs the same specs against a built file (a path from the repository root) instead of the source: through `require` in Node and as a `
-
+