From 1905d32053e044eb9dfbc7b98f8b3849f1dbba3d Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sat, 24 Oct 2026 12:58:40 +0800 Subject: [PATCH] =?UTF-8?q?docs(kernelboot):=20ID:14=20=E5=B7=B2=E5=AE=8C?= =?UTF-8?q?=E6=88=90=EF=BC=8C=E5=90=8C=E6=AD=A5=20registry=5Ftest.go=20?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=9D=A2=E7=AC=AC=204=20=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 为什么改 bootgraph_test.go(原 internal/kernelboot/modules/registry_test.go)文件头 「失败面」一节第 4 条是**历史实测记录**,原文结句写着: 要"红得干净"得让 kernelboot.Run 对 nil 依赖显式报错 —— 那是业务改动, 不在本线权限内,已记入待办。 ID:14(e70c2b5)做完之后这句成了**假信息**:留着比删掉更有害 —— 下次有人照着它判断「Run 不拦 nil 依赖」,会得出与事实相反的结论。 同时 kernelstate.go 的注释已改成「Run 会显式拦」,两边口径不一致更要命。 ## 改了什么(纯注释,**零行为改动**) - 原记录的「崩在业务代码里」形态**保留**,但明确标注为「ID:14 之前的形态, 作为为什么需要执行期校验的原始证据」 - 新增「已完成(ID:14,提交 e70c2b5)」小节,写清现在的行为与**实测**结果 - 指向专用回归判据(runtime_dep_test.go / runtimedep_test.go) ## 注释里那句「换成可读报错」是实测过的(非声称) 用真实登记表 kernelmod.Registered() 算 plan 后注入两种变异,均得 *DependencyNotReadyError,**无 panic / SIGSEGV**: · 整层逆序 ⇒ 第 0 层拒(produced 为空) 模块 agent 缺设施 [docmem knowledge llm memory stagehost textmem tracker]; 模块 plugin-host 缺设施 [config docmem kernel-io knowledge lua memory stagehost supervisor textmem tracker] · 跳过第 2 层 ⇒ 第 2 层拒 模块 stage-host 缺设施 [knowledge llm textmem] (初稿写成「第 1 层 … 模块 llm 缺设施 [lua]」,与实测不符,已按实际输出改正。) ## 校验 git diff 中非注释行改动 = 0(grep 计数) go build ./... = 0 error,go vet ./... = 0 warning go test ./internal/kernelboot/ ./internal/kernelmod/all/ = ok --- internal/kernelmod/all/bootgraph_test.go | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/internal/kernelmod/all/bootgraph_test.go b/internal/kernelmod/all/bootgraph_test.go index 1b0bc01e..91171b4f 100644 --- a/internal/kernelmod/all/bootgraph_test.go +++ b/internal/kernelmod/all/bootgraph_test.go @@ -87,13 +87,29 @@ package all // // 4. 把 Run 的层执行顺序改成逆序 // ⇒ 判据 1/2/3/4 红,但**红在装配失败**(第 4 层模块拿到 nil 依赖: -// 「agent 依赖的设施 "memory" 对应的数据为 nil」), +// 「agent 依赖的设施 “memory” 对应的数据为 nil」), // 不是「层间顺序断言」咬的 —— 装配先于断言就炸了。 // ⇒ 把某一层整个跳过:**内核 panic**(llm.buildProviderManager 拿到 // 0x0 的 LuaVM,SIGSEGV)。仍是红的,但形态是崩溃不是可读断言。 -// ★ 结论:这两种改动确实能被发现,但报错可读性差(崩在业务代码里)。 -// 要"红得干净"得让 kernelboot.Run 对 nil 依赖显式报错 —— 那是业务改动, -// 不在本线权限内,已记入待办。 +// ★ 以上是 **ID:14 之前**的形态(2026-10-24 实测记录,保留下来 +// 作为“为什么需要执行期校验”的原始证据)。 +// +// ✅ **已完成(ID:14,提交 e70c2b5)**:kernelboot.Run 现在在**每层 Init +// 之前**先校“本层依赖 ⊆ 此前真跑完的层实际产出的设施”,缺就返回 +// *DependencyNotReadyError(指名模块名 + 缺哪些设施),**本层一个 +// Init 都不调**。用真实登记表实测,同一个变异变成可读报错: +// · 逆序 ⇒ 第 **0** 层就拒(produced 为空): +// 「模块 agent 缺设施 [docmem knowledge llm …]; +// 模块 plugin-host 缺设施 [config docmem …]」 +// · 跳过第 2 层 ⇒ 第 **2** 层拒: +// 「模块 stage-host 缺设施 [knowledge llm textmem]」 +// **两种都不再是 panic / SIGSEGV**。 +// +// ⇒ 下次看到本条,请不要据此认为“Run 不拦 nil 依赖”;它现在拦。 +// 另:该行为的专用回归判据在 internal/kernelmod/all/runtime_dep_test.go +// (A 正序不误报 / B 交换两层 / C 删提供者整层)与 +// internal/kernelboot/runtimedep_test.go(纯逻辑四形状 + 防预填自检)—— +// 那两组比在本节做整机变异快得多,改代码时优先跑它们。 // // 5. 某层不再登记关闭函数(模块忘调 AddCloser / 层边界钩子丢了) // ⇒ 判据 3 红(哨兵数量不符)。与第 7 条同支路,实测由第 7 条覆盖。