fix(homeagent): 撤回"另一条 SDK 血脉"的错误结论;build.sh 不再猜路径;清单判据改成一致性口径

pi 用只读文件系统逐条反驳了 357662e 的根因,三条我都验证并接受:

1. **"内核链 0.9.x 血脉"不成立 —— 那是我的搜索顺序造出来的事实。**
   本机有 6+ 份 `third_party/homeagent-sdk` checkout:
     /root/ha-test/…(0.9.0,C-ABI 时代,无 plugin.bin 支持)
     /var/tmp/rel-1.3.12/…、/var/tmp/rel-1.3.11/…(1.3.0)
     /var/tmp/release-main/…、/var/tmp/clean-check/…、/var/tmp/homed-p3/…(1.2.0)
   而 build.sh 第一版按候选根目录**第一个命中就算**,命中的正是 ha-test 那份老 checkout。
   内核自己用的是 1.3.0 那份,与钉子 `sdk/v1.3.0`、与 `<SDK_ROOT>/current` **一致**。
   两条教训写进注释了:别用"第一个存在的路径"当权威来源;别把模块版本字符串当身份
   (`replace => local (devel)` 时它只是 require 行的残留)。

2. **"API 不兼容"也是同一个错造成的。** 换成正确的 SDK 之后:
     HOMEAGENT_SDK_DIR=/root/.homeagent/hmapdev/sdk/v1.3.0 bash build.sh
     → hmapdev build 成功,产出 build/plugin.bin(9018271 字节)
   也就是说**这个插件在本机编得出来**,先前的 `SettingsAPI.DataDir` 报错是拿老 checkout 编的产物。

3. **判据把能工作的配置判红**(pi §2):第 4 步原先硬校验"产物 SDK 模块版本 == 内核模块版本",
   而生产上能跑的组合恰恰是"内核 + v1.3.0 编的插件"。已删掉这个相等性判据:
   SDK 源码**只认显式指定**(HOMEAGENT_SDK_DIR),不猜、不试探;
   内核那条 dep/=> 只作为**提示**打印(并且按模块名精确联接、只接受紧跟 SDK dep 行的 `=>`,
   不再取"输出里第一个 =>");身份改记 **realpath + 内容哈希**;
   `meta.Version` 读取先剥注释(注释里的 `Version = "9.9.9"` 不再能赢)。
   真正的不变量是 **wire 协议 protocol=2 + 一次真实握手**,写在脚本末尾(部署后回看日志)。

4. **清单判据改成一致性口径**(pi §5):不再"禁止 sdk 字段"——那会把正在工作的那份清单
   (/home/newqqagent/plugins/homeagent-mail-bridge/plugin.json 声明 sdk=1.3.0,正是 08:30
   那次恢复的处置动作)判红,而我没有"内核不读该字段"的证据。现在:可以不声明;
   声明了就必须与构建机指针一致。
This commit is contained in:
2026-09-14 16:38:28 +08:00
parent 317f3265e3
commit 7e696f9a8c
3 changed files with 112 additions and 65 deletions

View File

@ -8,8 +8,13 @@ require gitcode.com/JianFeeeee/homeagent-sdk v1.3.0
replace gitcode.com/JianFeeeee/homeagent-sdk => /root/.homeagent/hmapdev/sdk/v1.3.0
// 这个 replace 是**构建机的 SDK 指针**,不是源码常量:它必须跟着
// 这个 replace 是**构建机的 SDK 指针**,不是源码常量:它跟着
// `<SDK_ROOT>/current` 走(判据 TestSDKPinMatchesBuildMachinePointer 管)。
// 真正致命的一致性("与**内核**用的是不是同一个版本")在 build.sh 里硬校验 ——
// 那是唯一能拿到内核二进制的时刻2026-09-14 的复发就是"钉子跟 current 一致、
// 内核已经跑到 1.4.0"造成的,只比 current 是抓不到的。
//
// 更正2026-09-14 晚pi 用只读文件系统逐条反驳):我先前写的
// "内核链另一条 SDK 血脉0.9.x"是**错的** —— 本机有 6+ 份
// `third_party/homeagent-sdk` checkout而 build.sh 当时按候选根目录"第一个命中就算"
// 命中的是 /root/ha-test 那份 C-ABI 时代的老 checkout。内核自己用的是 1.3.0 那份,
// 与这里的钉子**一致**。两点教训:① 别用"第一个存在的路径"当权威来源;
// ② 别把模块版本字符串当身份(`replace => local (devel)` 时它只是 require 行的残留)。
// 真正的不变量是 wire 协议protocol=2+ 一次真实握手,不是版本号相等。