mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-15 12:15:16 +00:00
refactor(proc)!: 版本身份只由版本号本身承载,删除全部自定版本号
内核侧配合 SDK 仓 b2872f3:兼容性不再依赖任何自造版本号。
删除三处自造号:
- ProtocolVersion(协议号)→ 改为比对主版本段(MajorVersion)
- shmVersion(共享段 header)→ 改为校验描述符个数(field_count)
- unifiedVersion(SuperBlock)→ 结构自描述,不再校验
握手契约随之调整:
HandshakeParams: protocol(int) → core_version(string)
HandshakeResult: protocol(int) → sdk_version 承担判据
内核比对 MajorVersion(meta.Version) == MajorVersion(res.SDKVersion),
跨主版本即拒并提示重编(主版本跃迁 = 破坏性变更的定义)。
为什么废除:额外的号需要人去记得升,而它没有任何结构性约束兜底,
必然腐烂。实证:ProtocolVersion 常量在多次布局变更里只升过一次,
对应的守卫测试长期失败无人察觉(期望 18/1,实际 19/2)。
新增判据:
- TestProcess_MajorVersionMismatchRejected:跨主版本被拒(testdata/badproto)
- TestProcess_SameMajorDifferentMinorAccepted:同主版本放行(新增 testdata/oldminor)
后者是 §七「1.x 内纯追加、不调新面不用重编」规约的落地 —— 若误用全等
比较,未重编的存量插件会被无谓地全部拒绝。
两条均经变异验证:改成全等比较 → 前者过/后者挂;删掉校验 → 前者挂。
This commit is contained in:
@ -496,12 +496,20 @@ GITCODE_REPO=JianFeeeee/homeagent-sdk ASSET_DIR=<sdk>/dist/release \
|
||||
测试替身(`fakeCoreSDK`、`injectCapture`、`capability_test.go` 的手工方法清单)。
|
||||
还要同步 `yaegi/mocksdk`——它没有任何代码对着编译,漂移**不会被编译器抓到**。
|
||||
|
||||
### 4. 「接口纯追加」不等于「无需重编」
|
||||
### 4. 兼容性只认主版本号(不再有独立的协议号)
|
||||
|
||||
插件运行协议版本(`ProtocolVersion`)与 SDK 接口版本是**两件事**。
|
||||
协议升级(如 1.2.0 的 fd3 布局变更,不支持滚动升级)时,`ProtocolVersion` 不匹配
|
||||
会在握手时被明确拒绝并提示用配套 `hmapdev` 重编。
|
||||
必须把两者分开说,否则会被误读成"既然纯追加就还能用旧产物"。
|
||||
**不自定协议版本号**:兼容性由双方版本号的**主版本段**表态
|
||||
(内核 `meta.Version` ↔ 插件 `sdk_version`)。主版本相同即兼容,跨主版本则
|
||||
在握手时被拒绝并提示用配套 `hmapdev` 重编。
|
||||
|
||||
为什么不要独立协议号:语义版本变动频繁(修 bug、加字段),额外的号必然被
|
||||
漏升而腐烂(历史实证:曾有一个 `ProtocolVersion` 常量,多次布局变更里只升过
|
||||
一次,而对应守卫测试长期失败无人察觉)。兼容性只挂在**始终会被发的那个号**上,
|
||||
就不存在「忘同步」这个失效模式。
|
||||
|
||||
布局一致性(如 1.2.0 的 fd3 → 统一共享区)另由**结构派生事实**把关:
|
||||
统一区魔数 + `field_count`(描述符个数)在握手上显式校验。
|
||||
它们是二进制里的实际值,不需人去维护,也不同“谁记得升号”。
|
||||
|
||||
### 5. 合回 main 前要同步的东西
|
||||
|
||||
|
||||
Reference in New Issue
Block a user