Skip to content

keel v0.5.0:M5 索引收敛

Choose a tag to compare

@shiftu shiftu released this 11 Sep 02:04
· 3 commits to main since this release

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