fix(hmapdev): mocksdk 补齐 ToolDef 声明项,并加字段/类型一致性判据

## 问题

mocksdk(yaegi 解释执行时的替身 SDK)的 ToolDef 只有 6 个字段,
公共 SDK 已有 10 个 —— 缺 RecallPolicy / ParallelSafe / Serial。

★ 危害不在编译期,而在**调试期**:插件作者用 hmapdev 在本地解释执行时,
写了 ParallelSafe:true 照常跑、不报错;直到编译安装后才发现声明根本没
被内核读到。这类不一致不会让任何现有测试失败。

这正是"黑名单不会自动跟上新执行能力"的又一次复现:主 SDK 每加一个声明项,
替身不会自动跟上。

## 修复

① mocksdk/plugin.go 补齐 RecallPolicy / ParallelSafe / Serial 三个字段,
   注释写明"主 SDK 先加、mocksdk 没跟上"这段历史,避免后人再漂移。

② 新增 yaegi/mocksdk/parity_test.go:
   - TestMockSDKToolDefMatchesSDK  比对**字段名**集合,双向都查
     (少字段 = 声明静默失效;多字段 = 替身比本体还多,必有一方理解错了)
   - TestMockSDKToolDefTypesMatch 比对**字段类型**,逐个断言
     ★ 归一化必须抹掉所有空白:gofmt 打印 "interface{}" 而反射给
       "interface {}",这是打印格式差异。我第一版没抹空白,
       结果每个复合类型都被误报成"类型不符" —— 判据自己制造假警报。

判据放在 tools/hmapdev 模块内(它是独立 module,主模块不包含它),
跑法:cd tools/hmapdev && go test ./yaegi/mocksdk/
This commit is contained in:
JianFeeeee
2026-09-27 15:01:29 +08:00
parent bd73a9b241
commit 1d7c330cfc
2 changed files with 159 additions and 0 deletions

View File

@ -90,6 +90,15 @@ type ToolDef struct {
NoMemory bool `json:"no_memory,omitempty"`
Cleaner func(string) string `json:"-"`
ContextPolicy string `json:"context_policy,omitempty"`
RecallPolicy string `json:"recall_policy,omitempty"`
// ParallelSafe / Serial 与公共 SDK 的同名声明项**逐字对齐**。
//
// ⚠️ 不要只补主 SDK 就以为完事:mocksdk 是 yaegi 解释执行用的**替身**,
// 少一个字段,插件作者在本地调试时"写了声明却不报错",编译安装后才发现
// 声明没生效 —— 这种不一致极难察觉(黑名单不会自动跟上新执行能力)。
// TestMockSDKToolDefMatchesSDK 钉住这一致。
ParallelSafe bool `json:"parallel_safe,omitempty"`
Serial bool `json:"serial,omitempty"`
}
// 上下文策略取值,与公共 SDK 一致。