dsh-unlag 1.9.120 → 1.9.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/EVIDENCE.md +46 -0
  2. package/README.md +2 -0
  3. package/package.json +2 -1
package/EVIDENCE.md ADDED
@@ -0,0 +1,46 @@
1
+ # 凭什么信这个插件
2
+
3
+ 每一类说法都跟着能自己重跑的证据:先看哪条测试、再看运行中的 App 上哪个输出。运行中的证据用 `npm run live-smoke` 拿,它不按按钮,也从不换代码。
4
+
5
+ ## 按下去真的会生效
6
+
7
+ | 说法 | 测试 | 现场 |
8
+ | --- | --- | --- |
9
+ | 一次按下只请求一次重建,连按只算一次 | `press.test.mjs`(99)、`reload-answer.test.mjs`(26) | `pressPath.ready` 为 `true` 表示此刻放行 |
10
+ | 重建后新文档能起来:清单里每个脚本都能加载、每个插件都注册 | `bundle-shim.test.mjs`(76)、`host-verify.test.mjs`(45) | `verify.sound=ok`、`rehearsal.ok=true` |
11
+ | 坏清单会被拒,不会带着坏字节去开新文档 | `host-verify.test.mjs`(45)、`verify-deadline.test.mjs`(7)、`url-fuzz.test.mjs`(5) | `verify.broken=blocked`、`verify.refuses=true` |
12
+ | 冻结清单里的旧 revision 仍然拿得到现在的字节 | `bundle-shim.test.mjs`(76) | `shim.staleRev` 为 200 且字节数 > 0 |
13
+ | 按钮不会装作在工作:挡住时提示写的是真实原因 | `reason-copy.test.mjs`(6)、`copy.test.mjs`(8)、`client-guard.test.mjs`(123) | 每次拦下都在日志里留一行,带原因与地址 |
14
+
15
+ ## 不会把 App 弄崩
16
+
17
+ | 说法 | 测试 |
18
+ | --- | --- |
19
+ | 任何插件、任何服务、任何路由抛错都只丢一个答案,不往上冒 | `hostile-services.test.mjs`(20)、`route-hostile.test.mjs`(30)、`route-guard.test.mjs`(16)、`hostile-host.test.mjs`(12)、`safety.test.mjs`(22) |
20
+ | 文件监听器出错、日志写不出去、日志爆量都只是少一行记录 | `watch-faults.test.mjs`(11)、`log-faults.test.mjs`(17)、`log-burst.test.mjs`(3)、`log-cap.test.mjs`(9) |
21
+ | 慢插件、卡住的读取、并发按下都不会拖住页面或进程 | `reload-late.test.mjs`(10)、`verify-deadline.test.mjs`(7)、`verify-route.test.mjs`(19) |
22
+ | 卸载插件时半开的定时器、监听、路由全部关掉,且不误关别人的 | `button.test.mjs`(89)、`client-guard.test.mjs`(123) |
23
+ | 8 个历史版本的页面(旧代码)对着新宿主按,都不抛、都只请求一次重建、都不留失败提示 | `old-page.test.mjs`(5) |
24
+
25
+ ## 别人不能替你按
26
+
27
+ | 说法 | 测试 | 现场 |
28
+ | --- | --- | --- |
29
+ | 别的源的页面按不动这个按钮 | `button-origin.test.mjs`(25)、`request-shape.test.mjs`(6) | `contract` 里三条外来源请求全部 403 |
30
+ | 读路由只认读,写路由要那个页面才能带的头 | `report-route.test.mjs`(8)、`route-hostile.test.mjs`(30) | `contract` 里缺头、乱方法全部 403/405 |
31
+ | 域名重绑(Host 与 Origin 一致但都是公网名)不能用,公网名的页面一律 403 | `button-origin.test.mjs`(25) | 手工 curl 复核过一次:403 |
32
+
33
+ ## 证据怎么重跑
34
+
35
+ ```sh
36
+ npm test # 726 项,全绿才算数
37
+ npm run audit # 静态检查
38
+ npm run live-smoke # 对着运行中的 App 复核;输出里 verdict 为 true 才算数
39
+ ```
40
+
41
+ 演练输出里的每一项含义见 README「改完后让运行中的 App 用上」。
42
+
43
+ ## 还没证到的两件事
44
+
45
+ - **人手按下的那一下**:只有人按才会真的换插件代码,这台机器上最后一次真按是 1.9.30。`pressPath.ready` 证明的是「此刻按下去会被接受」,不是「按过了」。
46
+ - **日志轮转在真实 App 里发生**:真实日志还不到上限的一半,轮转只有离线测试(`log-cap.test.mjs`)证过,没在现场触发过。
package/README.md CHANGED
@@ -77,6 +77,8 @@ dsh plugin install dsh-unlag
77
77
  - 状态:`GET /dsh-unlag/state` → `{"version":"<当前版本>","code":"<index.js 写入时间>","plugins":true,"page":true,"shim":{...}}`。`code` 用来分清「版本号没刷」和「旧代码真的还在跑」。
78
78
  - 重建后的日志带起页面代次:`interface rebuilt; the page runs the plugins as served now (page <rev>)`,据此判断新文档加载的是新脚本还是旧脚本。
79
79
 
80
+ 每类说法对应的测试与现场输出整理在 [EVIDENCE.md](EVIDENCE.md),含还没证到的两件事。
81
+
80
82
  ## 与官方文档的对照
81
83
 
82
84
  判定按下后能不能重建,依赖的是 Client Modules 的读接口和它自己公布的路由规则。逐条核对的是 App 内随包发布的文档 `.research/asar-dsh/dsh-client-modules/README.zh.md`(15968 B,sha256 前缀 `33cee13e7b61a151`)。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-unlag",
3
- "version": "1.9.120",
3
+ "version": "1.9.121",
4
4
  "type": "module",
5
5
  "description": "A press applies plugin edits right away and brings a laggy interface back; automatic reloading stays off unless you turn it on, so the press is the only trigger, and nothing restarts.",
6
6
  "license": "MIT",
@@ -17,6 +17,7 @@
17
17
  "locale/*.json",
18
18
  "scripts/live-smoke.mjs",
19
19
  "README.md",
20
+ "EVIDENCE.md",
20
21
  "icon.svg"
21
22
  ],
22
23
  "keywords": [