Decodie — Flag Stale 模式
用途
Flag Stale 是 verify 模式的快速、CI 友好替代方案。对于每一个带有 verified_sha 的条目,它检查该条目的源文件自该 SHA 以来是否发生过变更,并将发生变更的条目翻转为 stale: true。它不读取源文件,也不重新计算锚点哈希——仅将文件名与 git 历史进行 diff 比对。
该模式只修改 .decodie/index.json。
激活方式
不接受参数,始终作用于完整索引。
前置检查
确认 .decodie/ 目录存在。若不存在,输出“No .decodie/ directory found — nothing to check.”并停止。
确认处于 git 仓库中,执行:
git rev-parse --git-dir
若不是 git 仓库,输出“Not a git repository — flag-stale requires git history. Run verify mode instead.”并停止。
读取 .decodie/index.json。若为空,输出“No entries to check.”并停止。
检测流程
对每个条目依次处理:
跳过没有 verified_sha 的条目,报告为未验证。
跳过没有 sources(且没有 references[].file 回退)的条目,报告为 no-sources。
计算变更文件:
git diff --name-only <verified_sha>..HEAD
如果该 SHA 对 git 而言未知(历史被重写),则视为过期。
将变更文件与该条目的源文件比对。若有任何匹配,该条目即为过期。
更新规则:
新变为过期 → 设置 stale: true,保持 verified_sha 不变。
已经是过期 → 不更改(仍计入统计)。
diff 中不包含源文件 → 保持 stale 原样。不要把 stale 翻转回新鲜——只有 verify 模式才能做这件事。
将更新写回 index.json。
报告输出
Decodie flag-stale Newly stale: N entries Already stale: M entries Fresh: F entries Unverified: U entries (no verified_sha -- run verify mode) No sources: K entries
若有新变为过期的条目,将其列出:
Newly stale:
- entry-1711540000-a1b2 -- src/lib/foo.ts
- entry-1711540123-c3d4 -- src/lib/bar.ts, src/lib/baz.ts
重要说明
单向标记。只会把 stale 翻转为 true。清除过期状态需要运行 verify 模式。
不读取源文件,完全基于 git diff --name-only。这正是它快到足以用于 CI 的原因。
没有退出码策略。过期条目是否阻断 PR 由每个仓库自行决定。
不重写 git 历史。只使用只读 git 命令。