docs(判据): 补「已知限制」与「缺省语义登记」两节;build.sh 把原始 dep/=> 行写进 BUILD_INFO

pi 2026-09-14 两件:

1. **登记册真的没有**。我上封信说"已写进 test/CRITERIA.md 的已知限制一节"——**不成立**,
   只有 `appearance-defaults.test.mjs` 里有那段注释。已在 CRITERIA.md 补 §9「已知限制」
   (标识符只解析一层;静态判据的到期前提是"本工作区能装能点")。
   过度声明自己做过什么是这轮反复出现的那一类错,这次是同一个形状的又一例。

2. **新建 §10「缺省语义登记处」**(pi 的更正:不是无条件 fail-closed,而是"缺了的后果必须
   有人登记 + 写明谁批准了这个方向")。三条入库,各带依据:
   · 邮件 `permission_mode` 缺 → **不写、不改档**(窄),依据是本轮那个 `|| 'workspace'` 兜窄档的坑;
   · HomeAgent `plugin.json.sdk` 缺 → 内核**不读**(不是语义,是文档),依据内核 manifest.go 结构体 + registry.go;
   · HomeAgent `capabilities` 缺 → **不受限**(宽),依据内核注释明写的理由:17 个存量清单都没有它。

3. `build/BUILD_INFO.txt` 现在**原文贴入** `go version -m <内核>` 的输出,并附"这两行怎么读"
   (`dep … vX.Y.Z` 后面跟 `=> … (devel)` 时那串版本号只是 require 行残留;`=>` 必须按模块名联接)。
   理由:这场争论的全部内容就是这两行该怎么读,原始证据必须和结论放在一起。
This commit is contained in:
2026-09-14 16:50:33 +08:00
parent f27ad31c91
commit dae508b25b
2 changed files with 42 additions and 0 deletions

View File

@ -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 个存量清单都没有它空声明当最小权限会让它们**静默降级** |