Skip to content

v0.12.1 — 锚点可改写、体检写回

Choose a tag to compare

@Max-Null Max-Null released this 22 Sep 19:54
· 23 commits to main since this release

[0.12.1] - 2026-09-23

0.12.0 上线当天实测暴露的两处缺口,都是一行级改动;连带把 anchor 投影给模型。

Fixed

  • memory_sweep 调用后刷新注入里的失效提示:lastSweep 原先只在会话启动维护里赋值,于是「本次校验发现 N 条失效」那句整个会话内不再变化,可能一直挂着一条已经被删掉的记录(实测:报的两条早已 forget 并重建,提示照旧)。改为 sweep() 自己写回最近一次报告,工具调用因此也能刷新它。只写实例字段——不落盘、不改记忆,「只读」的承诺不变。
  • anchor 从来没有投影给模型:memory_save 能写锚点,但工具返回的 record 与 memory_list 里都看不见它——写对没有、当前绑的是什么值,只能猜;memory_sweep 只在失效时顺带带出锚点名。在本版之前这只是一处不便,加上「改锚点」之后就成了硬伤:改完看不见结果。现在 anchor 进 RECORD_SCHEMA 与 recordValue(仅在有锚点时出现)。

Added

  • memory_update 支持改写 / 清除锚点:新增 anchor 参数——省略保持、给值改写、null 清除。给值会当场重新探测并同步 stale:新锚点成立就撤掉旧锚点留下的失效标记(不必等下次会话维护),不成立就立刻标失效并撤下常驻,探测不到(未校验)则不动状态。清除锚点时只清「因该锚点而标的失效」——「被取代」「被撤回」两种来源不动,解除约束与撤销作废是两件事。参数用 oneOf: [对象, null],与 MemoryPatch.anchor?: MemoryAnchor | null 逐字对应。
  • 自述补一句(self.ts):锚点可以用 memory_update 改写或清除。此前模型读得到锚点的作用,却没有任何改它的手段,读起来像一条只能写死一次的东西。

内部

  • 锚点失效的原因文案抽成 MemoryEngine.anchorStaleReason(verifyAnchorsInner 与 update 共用)。「清除锚点时认得出这条失效是不是它标的」要求两处逐字相同——各写一份就会认错,把撤回、被取代标的失效一起抹掉。
  • 测试 161 → 166(含工具层一例:anchor: null 与对象形态都要真过 schema 校验,另加一条反向断言——非法形态必须被拒,否则前两条只测到了引擎、没测到 schema)。scripts/mutate-check.mjs 补两条守卫(体检写回、改锚点当场校验),现共 5 条,全部如期变红。