Files
JianFeeeee f27ad31c91 fix(判据/部署): 探针不再假设清单穷尽;broken≠red;到期报文自带"要放行什么";部署加 --check 干跑
pi 2026-09-14(两封)提的六条,能做的都做了。

1. **`[Empty]` 不是"没有设备",是第三态**(pi §1)。改了,而且不是改成"一律红",
   是**去证服务端健康**:探针现在读 `/proc/<pid>/cmdline` 找 `hdc -m`(server 模式),
   服务端在 → 空集才是可判的"确实没有目标"(false);服务端找不到 → `unknown`(红)。
   本机实测:`hdc -m -s ::ffff:127.0.0.1:8710` 在跑 → 空集可信。
   这条用机制而不是用嘴回答"我检查过了"。

2. **硬编码候选清单**(pi §2):候选来源写清(`/opt/huawei/command-line-tools` 是文档安装根),
   `hdc` 也走 PATH;**工具链根在、里面却没有 hdc → `unknown`**("装了但长得不一样"不是"没装")。
   这与 build.sh 那次"第一个命中就算"是同一形状 —— 今天各咬一次。

3. **前提改成"本工作区能装能点"**(pi §2):原前提"设备存在"会让 5 条判据在**我修不了**的时候同时红
   (模拟器要写 /run、/var/log)。现在前提是工作区能力,`need` 逐条写清,
   并且**到期报文会把这些门槛打出来** —— 第一次真红不能被当成噪音消掉。

4. **broken ≠ red**(pi §3):跑不起来(语言级崩痕:SyntaxError/ReferenceError/…)单列
   "跑不起来的判据(N)—— 不是红,也不算过",红是"判据说不成立",broken 是"判据没说话"。
   变异验证:注入未定义标识符 → 报 broken ✓;绿基线 → exit 0 ✓。
   第一版我用"输出里有没有 `not ok`"判,当场误判(node:test 把导入期 ReferenceError 也报成 `not ok`),
   已改成语言级崩痕 —— 判据自己的第一版就得被现实修一次。

5. **标签要有消费点**(pi §4):`release-linux.sh --release` 遇脏树**拒绝**(`--allow-dirty` 才放行),
   不加参数是自用打包(只出声)。"出声≠拒绝"这条说得对。

6. **`deploy/install.sh --check` 干跑**(pi §6):跑全部门禁、不写系统目录,末尾列出正式安装会写什么、
   需要哪里的权限。干跑立刻抓到两个真缺陷:
   · `set -u` 下 `$HOME` 未设 → `HOME: unbound variable`(cron/env -i/某些 sudo 下就是没有),
     而它发生在**所有门禁跑完之后**——最贵的位置(这轮第三次同形状,前两次在 homeagent build.sh)。
   · **packaging 这条门在部署路径上永远过不去**:install.sh 先 `npm test`(含 packaging),
     而 packaging 要求"安装包里的 dist == 当前 dist",部署路径却不重新打包 →
     前端一改,install.sh 就卡在这条门上(第二条"挂在部署路径上却恒红"的门,第一条是 check-shared-libs)。
     这条需要决定:部署路径要么重新打包、要么把 packaging 排除在部署门禁外。**我没有擅自改口径。**
2026-09-14 16:49:08 +08:00
..