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:
@ -34,8 +34,7 @@ import (
|
||||
|
||||
const (
|
||||
// unifiedMagic 标识统一共享内存区域。
|
||||
unifiedMagic uint32 = 0x554D5352 // "UMSR" — Unified Memory Shared Region
|
||||
unifiedVersion uint32 = 1
|
||||
unifiedMagic uint32 = 0x554D5352 // "UMSR" — Unified Memory Shared Region
|
||||
|
||||
superBlockSize = 64 // SuperBlock 占前 64 字节
|
||||
)
|
||||
@ -43,7 +42,7 @@ const (
|
||||
// SuperBlock 布局:64 字节,所有偏移相对区域起始。
|
||||
//
|
||||
// [0,4) magic
|
||||
// [4,8) version
|
||||
// [4,8) reserved(原 version,已废:SuperBlock 靠 magic + capacity 自描述)
|
||||
// [8,16) generation(atomic uint64,resize 时 bump)
|
||||
// [16,20) capacity(区域总字节数)
|
||||
// [20,24) ctxOff(StageContext segment 偏移)
|
||||
@ -55,7 +54,7 @@ const (
|
||||
// [44,64) reserved
|
||||
const (
|
||||
sbOffMagic = 0
|
||||
sbOffVersion = 4
|
||||
sbOffReserved0 = 4 // 保留(原 version 槽位,布局不变以免动其余偏移)
|
||||
sbOffGeneration = 8
|
||||
sbOffCapacity = 16
|
||||
sbOffCtxOff = 20
|
||||
@ -133,7 +132,6 @@ func initUnifiedRegion(data []byte, ctxTotal, evtTotal int) (*unifiedRegion, err
|
||||
arenaCap := cap - arenaOff
|
||||
|
||||
putU32(data[sbOffMagic:], unifiedMagic)
|
||||
putU32(data[sbOffVersion:], unifiedVersion)
|
||||
putU64(data[sbOffGeneration:], 0)
|
||||
putU32(data[sbOffCapacity:], cap)
|
||||
putU32(data[sbOffCtxOff:], ctxOff)
|
||||
@ -163,10 +161,8 @@ func attachUnifiedRegion(data []byte) (*unifiedRegion, error) {
|
||||
if magic != unifiedMagic {
|
||||
return nil, fmt.Errorf("unified: 魔数不匹配(0x%x,期望 0x%x)", magic, unifiedMagic)
|
||||
}
|
||||
ver := getU32(data[sbOffVersion:])
|
||||
if ver != unifiedVersion {
|
||||
return nil, fmt.Errorf("unified: 版本不匹配(%d,期望 %d)", ver, unifiedVersion)
|
||||
}
|
||||
// 不自描述校验版本号:SuperBlock 靠 magic + capacity + 各段越界检查把关
|
||||
//(这些是结构的派生事实,不存在“忘同步一个人工号”的失效模式)。
|
||||
ctxOff := getU32(data[sbOffCtxOff:])
|
||||
ctxSize := getU32(data[sbOffCtxSize:])
|
||||
evtOff := getU32(data[sbOffEvtOff:])
|
||||
|
||||
Reference in New Issue
Block a user