JianFeeeee
be9bfd3cd1
chore(deploy)★★: 固定端口监听扩展的失效防护 + SSE 投递审计脚本
## 一次真实事故(2026-10-03)
pi-web 会话里**所有**子 agent 都启动失败,报错
Error: listen EADDRINUSE: address already in use 127.0.0.1:14010
这个扩展把端口写死,于是「端口被占」直接变成**全部启动失败**,
没有任何降级路径。这次提交把那条路径变成可测的。
- `check-listen-portability.mjs`(360 行):主判据
- `mutate-listen-portability.py`(124 行):变异体 —— 确认判据抓得住
- `verify-ext-parent-path.mjs` / `verify-ext-port-taken.mjs`:
两条独立路径。**"端口已被占用"那一条之前从没真正跑完过** ——
它原先被塞在一条 `node -e` 里,进程在「await 端口探测」那步被 30s
超时掐断,而它恰恰是唯一会决定「子进程会不会被打死」的分支。
## scripts/sse-delivery-audit.sh(298 行)
从网关 access log 判定「SSE 那批邮件到底投没投出去」,**只读**。
为什么必须进版本库而不是 `.tmp/`:`.tmp/` 在 .gitignore 里,
写在 `.tmp/stress-test.sh` 的判据下一轮就没了 ——
而 `docs/DEBTS.json` 里 `stress-sse-delivered-but-silent-no-assertion`
那笔债会长期挂着。**判据和账本必须同寿命。**
## .gitignore
补 `/tmp/`:blob 阈值测试会生成 13MB 级 .bin
(`client/electron/test/tmp/att-threshold-test/`),可再生,不该进版本库
(本机实测 25MB)。
2026-10-05 09:26:59 +08:00
..
2026-09-25 06:51:25 +08:00
2026-09-14 08:38:33 +08:00
2026-09-13 11:06:01 +08:00
2026-09-15 07:00:35 +08:00
2026-10-03 08:00:14 +08:00
2026-09-24 04:15:30 +08:00
2026-09-18 04:07:26 +08:00
2026-10-05 09:26:59 +08:00
2026-10-03 00:25:28 +08:00
2026-09-12 11:36:25 +08:00
2026-09-26 02:56:26 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 20:35:01 +08:00
2026-09-25 06:51:25 +08:00
2026-10-05 09:26:59 +08:00
2026-09-21 07:14:41 +08:00
2026-09-14 15:51:40 +08:00
2026-09-15 11:21:00 +08:00
2026-09-26 03:43:47 +08:00
2026-10-02 13:58:42 +08:00
2026-09-25 06:51:25 +08:00
2026-09-06 15:18:06 +08:00
2026-09-02 20:05:51 +08:00
2026-09-13 11:06:01 +08:00
2026-09-13 11:06:01 +08:00
2026-10-05 09:26:59 +08:00
2026-10-05 09:26:59 +08:00
2026-10-02 13:58:42 +08:00
2026-09-14 08:38:33 +08:00