记忆 GC 豁免规则

wesgine 记忆系统中某些 Kind 的条目免于垃圾回收淘汰,但仍计入配额。


豁免列表

以下三种 Kind 的条目不会被 GC 的 retentionScore 淘汰:

Kind说明豁免原因
KindConstraint行为约束用户设定的硬性指令,删除会改变 Agent 行为
KindInstruction操作指令用户给出的持久指令,GC 不应自行决定是否保留
KindEnvironment宿主环境系统感知产出,随 boot 刷新,不走 GC

仍然计入配额

GC 豁免不等于配额豁免:

CellQuotas.MemoryMaxEntries = 5000

即使 500 条 Constraint + 200 条 Instruction 免于 GC,它们仍占用 700 个配额槽位。当总条目达到 5000 时,GC 只能从剩余的非豁免条目中淘汰。


与 TTL 的关系

GC 豁免的条目同样不受 TTL 过期删除:


与自动注入的关系

豁免条目中 KindConstraint 和 KindInstruction 始终通过 Eager 系统提示词索引自动注入。RecallQualityOK 门控对 IsGCExempt() 返回 true 的条目是惰性的——这些条目永远不会被 Conflicted 或 stale 标记阻挡。

但 KindCollective(部门共识)不是 GC 豁免的——一条已被判为被取代的部门共识,如果恰好是 ScopeGlobal 且无 actor,在 Eager 面的表现与 Lazy 面不同(INV-MEM-50)。


设计原理

豁免列表极短且封闭,原因是:


相关文档