Cell 身份连续性

wesgine 的 Cell 注册表(Cell Registry)维护 Cell ID 到实例的映射,并通过一组不变量保证 Cell 身份在进程生命周期内的连续性。


核心不变量

INV-CELL-06:身份连续性

registry 有 ID ⇔ 内存必有骨架(Stopped 除外)。Get 未命中必须 hydrate;restore/Create 失败不得把仍注册的目录当孤儿改名。

含义:

INV-CELL-07:孤儿目录改名时机

孤儿目录改名仅在 registry.Create 成功之后。

含义:

INV-CELL-08:Cell 启动条件

Cell.Start/WarmUp 的合法输入 = 身份 + 已 Bind 的进程 hook。live-token 且 ProviderLiveKeyFn==nil 时 fail-loud。

含义:


水化(Hydrate)流程

Get(cellID)
  → 内存查找
    → 命中 → 返回
    → 未命中 → 查注册表
      → 注册表有 → 从磁盘 hydrate 骨架(Cool 态)→ 返回
      → 注册表没有 → 返回 ErrCellNotFound

水化出的 Cell 是 Cool 态(无 goroutine、无 DB 连接),首次请求到达时自动 WarmUp。


事故案例

2026-09 teleclaw 事故:旧版二进制读新格式 spec → decode 失败 → Get 返回 404 → 自动创建触发 → 旧目录被当孤儿归档 → 部门会话/记忆/知识库消失。

修复后:


相关 API

操作行为
Cells().Create(spec)注册 + 初始化目录 + 持久化 spec
Cells().Get(cellID)内存查找 → 必要时 hydrate
Cells().GetOrCreate(spec)Get → 命中则 merge spec → 未命中则 Create
Cells().Delete(cellID)registry 行 + 磁盘字节,二者都删

相关文档