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:
@ -255,10 +255,9 @@ func (p *Process) handshake(timeout time.Duration) error {
|
||||
defer cancel()
|
||||
|
||||
raw, err := p.CallContext(ctx, MethodHandshake, HandshakeParams{
|
||||
Protocol: ProtocolVersion,
|
||||
CoreVersion: meta.Version,
|
||||
PluginName: p.name,
|
||||
ShmVersion: shmVersion,
|
||||
FieldCount: uint32(stageFieldCount),
|
||||
ShmSize: p.shmSize,
|
||||
EvtRingSize: p.evtRingSize,
|
||||
})
|
||||
@ -269,12 +268,13 @@ func (p *Process) handshake(timeout time.Duration) error {
|
||||
if err := json.Unmarshal(raw, &res); err != nil {
|
||||
return fmt.Errorf("proc: %s 握手应答解析失败: %w", p.name, err)
|
||||
}
|
||||
if res.Protocol != ProtocolVersion {
|
||||
return fmt.Errorf("proc: %s 协议版本不匹配(插件 %d,内核 %d)——请用配套 hmapdev 重编",
|
||||
p.name, res.Protocol, ProtocolVersion)
|
||||
// 主版本号是唯一兼容判据:跨主版本必是被破坏性变更分开的两端。
|
||||
if want, got := MajorVersion(meta.Version), MajorVersion(res.SDKVersion); want != got {
|
||||
return fmt.Errorf("proc: %s 主版本不匹配(插件 SDK %s,内核 %s)——请用配套 hmapdev 重编",
|
||||
p.name, res.SDKVersion, meta.Version)
|
||||
}
|
||||
log.Printf("[proc] %s 已建链(pid=%d protocol=%d sdk=%s)",
|
||||
p.name, p.PID(), res.Protocol, res.SDKVersion)
|
||||
log.Printf("[proc] %s 已建链(pid=%d sdk=%s core=%s)",
|
||||
p.name, p.PID(), res.SDKVersion, meta.Version)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user