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:
JianFeeeee
2026-10-13 09:39:34 +08:00
parent 31de3921ed
commit ceb8a7b165
18 changed files with 184 additions and 88 deletions

View File

@ -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:])