Repository navigation
v0.12.1 — 锚点可改写、体检写回
[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 条,全部如期变红。