diff --git a/README.en.md b/README.en.md
index f5d4e74..17ed0de 100644
--- a/README.en.md
+++ b/README.en.md
@@ -125,6 +125,9 @@ adaptive choice, remove the last three entries of `cordis.patch.yml` (the
node scripts/build-client.mjs # generates client.js from src/panel.js + src/qrcode.js
node scripts/smoke.mjs # host forwarding contract (HTTP/WS/Host/Origin/cookie/bind failure)
node scripts/test-qr.mjs # module-by-module comparison against the npm qrcode reference
+# test-qr.mjs compares against a reference implementation (test-only, never a runtime dep):
+# mkdir -p /tmp/qr-oracle && cd /tmp/qr-oracle && npm init -y && npm i qrcode@1.5.4
+# elsewhere: QR_ORACLE_DIR=
node scripts/test-qr.mjs
node scripts/test-client.mjs # browser contract (slot registration, render, route agreement)
```
diff --git a/README.md b/README.md
index ee5686b..d621be2 100644
--- a/README.md
+++ b/README.md
@@ -126,6 +126,9 @@ DSH 官方把「持久化设置」限制在回环页面:客户端由 `location
node scripts/build-client.mjs # 由 src/panel.js + src/qrcode.js 生成 client.js
node scripts/smoke.mjs # 宿主端转发契约(HTTP/WS/Host/Origin/cookie/绑定失败)
node scripts/test-qr.mjs # 与 npm qrcode 参考实现逐模块比对
+# test-qr.mjs 需要一个“参考实现”作为对照(仅测试用,不是运行时依赖):
+# mkdir -p /tmp/qr-oracle && cd /tmp/qr-oracle && npm init -y && npm i qrcode@1.5.4
+# 放在别处就用 QR_ORACLE_DIR= node scripts/test-qr.mjs
node scripts/test-client.mjs # 浏览器端契约(槽位注册、渲染、路由一致)
```
diff --git a/scripts/test-qr.mjs b/scripts/test-qr.mjs
index d8bede5..7f04d30 100644
--- a/scripts/test-qr.mjs
+++ b/scripts/test-qr.mjs
@@ -16,6 +16,9 @@ try {
oracle = requireFromOracle('qrcode')
} catch (error) {
console.error(`cannot load the qrcode oracle from ${oracleDir}: ${error.message}`)
+ console.error('prepare it once with:')
+ console.error(` mkdir -p ${oracleDir} && cd ${oracleDir} && npm init -y && npm i qrcode@1.5.4`)
+ console.error(`or point QR_ORACLE_DIR at a directory that already has it.`)
process.exit(2)
}