keel v0.5.0:M5 索引收敛
M5 = 索引收敛。一句话:索引是视图,淘汰是显式动作。
起因是一个具体问题:commit 到了成百上千之后,.keel/knowledge/INDEX.md 会不会跟着暴涨。
索引长度跟 commit 数无关,跟对象数有关。真正单调增长的是三类「不再声称适用」的对象——
被替代的决策、被撤回的规则、被归档的记忆。它们一条都不能删,于是现行结论会被历史淹掉。
变更
- 知识索引分两层。 主表只出现行对象;历史退到一张最多四行的计数表,跟历史有多少条无关。
knowledge.index_history: true才展开逐条清单。历史一条都没删,keel why --history查得到。 - 新增
keel archive <M-…> --reason。 记忆退场的显式入口,与keel retire对称。
原因写进正文,文件留在.keel/memory/;有derived_from指向它时提示但不代劳。 keel review新增两个候选。memory_archive_candidate(过了复查日期且从来没有过证据)
与index_pressure(现行对象超过knowledge.index_soft_limit,默认 200)。IsHistory()统一到三个状态机上,why --history与索引口径一致。
两条边界
不做自动淘汰。 状态转换只有两个入口:keel verify 真跑完一次验证器,或人显式改。
「超过 N 天没验证就自动归档」是第三个入口,它在没有任何新证据的前提下改变结论的效力。时间不是证据。
index_pressure 不做门禁。 只出现在 review 里,不进 check,更不进 pre-commit。
现行对象太多不是错误,是体检结果。做成门禁会产生「为了过门禁而删记忆」的反向激励。
顺带修的 bug
keel why 原先用 !IsActive() 判断历史,proposed 决策因此默认查不到。一个正在等人拍板的
方案比大多数已生效结论更该被看见。现在默认可见。
升级说明
这一版给 keel.yaml 加了两个字段(knowledge.index_history / knowledge.index_soft_limit)。
keel.yaml 是严格解析:仓库里写了新字段之后,旧版 keel 会直接报解析失败,协作者需要一并升级。
反过来是安全的——新版读缺字段的旧配置,由默认值兜底,不需要重新 keel init。
安装
curl -fsSL https://raw.githubusercontent.com/shiftu/keel/main/install.sh | bash🤖 Generated with Claude Code