环境记忆刷新机制
wesgine L1 环境记忆的刷新策略与 per-Cell 层叠设计。
刷新策略
环境记忆不是一次性写入——它需要定期刷新以反映宿主变化。
RefreshEnvironment 使用"页到空"策略:
while hasMore:
batch = list(scope=system, namespace=env, limit=500)
if len(batch) == 0:
break
for entry in batch:
delete(entry.ID)
progressed = true // 有删除发生
// 删除完旧数据后写入新快照
for fact in newSnapshot:
save(fact)
progressed 判定
RefreshEnvironment 带 progressed 判定:
- 删除失败时检查是否有进展
- 无进展则停止循环(防止空转)
- 对齐 INV-MEM-34 的循环至清空策略
共享快照机制
宿主环境感知是进程级共享的(INV-ENV-01):
| 组件 | 入口 | TTL |
|---|---|---|
memenv.SharedSnapshot(ctx) | 环境事实 | 5 min |
capenv.SharedSurface(ctx) | 能力发现 | 5 min |
每包只有一个构造点——包外任何 alias 都不得构造。
Per-Cell 层叠
共享快照是进程级的,但 Cell 可以有自己的运行时覆盖:
共享进程快照(所有 Cell 相同)
+ Cell 运行时覆盖(Loader.WithRuntimeOverrides)
= 该 Cell 看到的环境事实
探测方式
| 探测类型 | 方法 |
|---|---|
| 工具在不在 PATH 上 | exec.LookPath(不 fork) |
| 工具版本 | fork --version(首次时) |
| 包列表 | fork pip list / npm ls -g(首次时) |
探测预算
| 探测 | 预算 |
|---|---|
| 环境事实 | envSeedBudget 15s |
| 能力发现 | capabilitySurfaceBudget 25s |
| Provider 探测 | providerProbeBudget 10s |
父 ctx 剩余时间更短时取较短值。
ctx 已死则不缓存、跟随者不另起一趟。
不进感知器的内容
感知器不得出现 CellID / Actor / Tenant(INV-ENV-02)。
per-Cell 事实通过 WithRuntimeOverrides 在消费者层叠加。
clone 安全
EnvSnapshot.clone() 必须逐字段深拷:
- 共享缓存的唯一防线是调用方拿到副本
- 漏拷新增 map / slice 会穿透共享
- 反射校验测试保证覆盖所有引用字段
相关不变量
- INV-ENV-01:主机每进程感知一次
- INV-ENV-02:感知器不认识租户
- INV-ENV-03:
exec.LookPath不 fork - INV-MEM-34:循环至清空
相关文档
- 环境记忆自动感知 →
memory-environment-sensing.md - 记忆层模型 →
memory-layer-overview.md - Cell 温度转换 →
cell-temperature-transitions.md