docs(dev-tooling): 第 21 条 —— 夹具把生产形状简化掉的那一角(一天内第二个实例:agentDir 与首回合 cwd)

This commit is contained in:
2026-09-15 06:33:54 +08:00
parent 99e6560122
commit 28a6bd282a

View File

@ -268,7 +268,17 @@ bash deploy/prune-deploy-artifacts.sh --self-check # 判据自检(16 项,
修法:进窗口前 `trap … INT TERM HUP`、出窗口摘掉,trap 只在"确实还停着"时动手
(否则会多起一次服务)。判据可喂:用 stub `systemctl` + 探针脚本,给自己发 `SIGINT`,
断言"停着 ⇒ 调了 start、退出码 130"与"没停 ⇒ 不调 start"。
21. **注释里的数字无法被判据守住。** —— 而不是只落到你想到的那一个。**
21. **夹具把生产形状简化掉的那一角,恰好就是出问题的那一角。**
同一个形状在**一天之内出现两次**(都是 pi 用读代码找出来、而我这边全绿):
· `sandbox-launch.test.mjs` 手写 `fsWith([…, '.pi/agent/sessions', …])`,
**只列 sessions、不列 agentDir** ⇒ "agentDir 在不在 rw 里"永远测不出来;
生产里 hub 的凭据存储把 `auth.json.lock` 写在 `agentDir` **直下**,
后果是那个 agent **整个不工作**(不是某次工具调用失败)。
· `fsRealShape()` 里 cwd 总是存在的 ⇒ "兜底目录由 worker 自己建"这条测不出来;
生产里无 path 新会话的首回合因此**不套沙箱**,`guardDecision` 退化成 `ask`。
⇒ 写夹具时问一句:**"生产里这个值是本来就有的,还是被谁建出来的?"**
凡"由被测代码自己建出来的东西",夹具都不能预先给好,否则测的是另一半。
22. **注释里的数字无法被判据守住。** —— 而不是只落到你想到的那一个。**
实例(pi 评审 2026-09-14):我在 `env-defaults.sh` 的 `HOME` 上写了两条规则
("`mkdir -p` 对已存在的不可写目录会返回成功 ⇒ 必须单独判 `-w`"、"判据落在能不能写、
不落在路径像不像"),**同一条规则没落到紧邻的 `TMPDIR` 上** —— 而 ENOSPC 正是这条链的