diff --git a/client/electron/test/CRITERIA.md b/client/electron/test/CRITERIA.md index 13787de..45989e1 100644 --- a/client/electron/test/CRITERIA.md +++ b/client/electron/test/CRITERIA.md @@ -324,3 +324,34 @@ git worktree add /tmp/attr HEAD # (这也是为什么 `BUILD_INFO.json` 要记 `gitRev`/`gitDirty`:产物自带来源,比事后猜强)。 **一句话**:归因手段的选择标准是"**会不会让别人的东西处于危险里**",不是"哪条命令最快"。 + +## 9. 已知限制(登记处) + +判据的**能力边界**必须写在这里,否则它的长期结局只有两个:被当成"它就是全能的"而误用, +或者被反复问"为什么它读不懂"。 + +**9.1 标识符只解析一层**(pi 2026-09-14;实现见 `appearance-defaults.test.mjs`) + +需要比对"某个常量两边是否一致"时,判据会跟一层标识符(例如 `const R = TOKENS.radius`)。 +**再深就不跟了**:那不是"读一个常量",而是"执行 Go/TS",判据会直接报"读不懂"并要求人看一眼。 +后果:如果常量经过两层以上转发,判据会红(而不是误判为不一致)—— 这是有意的取向: +**宁可报读不懂,也不猜**。要覆盖两层,正解是把值写进一个显式的契约文件,而不是加强解析。 + +**9.2 静态判据的到期前提是"本工作区能装能点设备"** + +5 条鸿蒙侧的判据只能验形态(`RESULT static=5`)。前提一旦成立,套件**自动变红** +(探针三值:可用 / 不可用 / 拿不准→红)。到期报文里会列出需要放行的目录(在工作区外)。 + +## 10. 缺省语义登记处(不是"默认值",是"缺了意味着什么 + 谁批准") + +pi 2026-09-14 提的形状:**不是无条件 fail-closed** —— 缺字段可以是"宽"也可以是"窄", +**不可接受的只有"缺了却没人知道它意味着什么"**。所以这里登记的是缺省**语义与方向**。 +理由要带上:反例来自 HomeAgent 内核自己的 `PluginManifest.Capabilities`, +它的注释写明"省略或为空 = **不受限**",因为 17 个存量清单都没有这个字段, +若把空声明当最小权限,它们会全部静默失去 IO 注入与记忆读写。 + +| 字段 | 缺省语义 | 方向 | 谁批准 / 依据 | +| --- | --- | --- | --- | +| 邮件的 `permission_mode` | **不写、不改档**(不是写默认档) | 窄(fail-closed) | 本仓 2026-09-14:缺字段被 `\|\| 'workspace'` 兜成窄档,等于"一个 bug 以正常形态活着";守卫见 `plugins/*/lib/permission-mode.js` 的 `modeForStateWrite` | +| HomeAgent `plugin.json` 的 `sdk` | **内核不读**(字段只对人有效) | 无(不是语义,是文档) | 内核 `internal/plugin/manifest.go` 的结构体里没有该字段;`registry.go` 的 `loadOne` 只用 `NameZh/NameEn` | +| HomeAgent `plugin.json` 的 `capabilities` | **不受限** | 宽(fail-open) | 内核注释明写理由:17 个存量清单都没有它,空声明当最小权限会让它们**静默降级** | diff --git a/plugins/homeagent-mail-bridge/build.sh b/plugins/homeagent-mail-bridge/build.sh index 29ae908..df8377d 100755 --- a/plugins/homeagent-mail-bridge/build.sh +++ b/plugins/homeagent-mail-bridge/build.sh @@ -101,11 +101,22 @@ BIN="build/plugin.bin" [[ -f "$BIN" ]] || die "没找到产物 $BIN" echo "[build] 产物:$BIN($(stat -c%s "$BIN") 字节)" echo "[build] 本次身份:SDK=$SDK_DIR hash=$SDK_HASH version=${SDK_VER:-未知}" +# 原始证据与结论放在一起(pi 2026-09-14):这场争论的全部内容就是 +# "`dep` 行与 `=>` 行该怎么读",把两行原文贴进来,下一个人不必重演。 cat > build/BUILD_INFO.txt < vX.Y.Z\` 后面若跟着 \`=> (devel)\`,那个 vX.Y.Z 只是 require 行 +# 的**文本残留**,不代表实际编译用的代码;本次的 SDK 源码以上面的 sdkDir/sdkHash 为准。 +# · \`=>\` 必须按**模块名联接**读取(先定位 SDK 的 dep 行,只接受紧跟其后那条), +# 不能取"整份输出里第一个 =>"。 EOF echo "[build] 已写 build/BUILD_INFO.txt —— 部署后请回看内核日志确认握手:" echo " grep -a 'mail-bridge' /home/newqqagent/log/homed_*.log | tail -5"