baton-doctor(只读健康诊断)
检查清单
- 版本事实分层:先判断当前目录是否为 Baton 框架源码仓库(
package.json.name=@kakadeka/baton)。若是,源码版本只取本地package.json.version+ 本地 HEAD;框架仓库的skills/是 canonical 源目录,不把其中的baton-lean-review/baton-debt当业务项目残留。npm latest 与公开库 SHA/tag 只列为发布面证据,不得与私有源码 HEAD 混称新旧。普通业务项目看已跟踪的.baton/config.json、.baton/manifest.json、项目 Skill 与docs/ai_memory/;不再把缺失.baton/version.json当故障。 - Skill 漂移:canonical
skills/baton/SKILL.md与三端镜像逐字节一致?项目内可用node scripts/check-drift.mjs(有脚本时)。默认安装只有baton+baton-doctor;baton-lean-review/baton-debt仅框架仓保留。 - 项目 manifest(仅普通业务项目):
.baton/manifest.json必须存在、是可解析 JSON,且managed至少包含当前默认九项:.cursor/rules/baton.mdc、.baton/runtime/baton-closeout.mjs、.baton/runtime/baton-public-update.mjs,以及.agents/.claude/.cursor/skills/{baton,baton-doctor}/SKILL.md六个项目镜像。逐项读取并用 SHA256 与 manifest 比对;缺失、不可解析、缺项、文件缺失或 hash 不一致都只报告 FAIL,不删除、不修复。项目中的baton-lean-review/baton-debt若存在且未被 manifest 管理,报告为旧默认残留;框架源码的 canonicalskills/目录不适用此条。 - 骨架完整:
docs/ai_memory/关键文件存在且含【归档分卷索引】+【修订记录】;.baton/config.json可解析;.cursor/rules/baton.mdc与三端 Skill 镜像存在且受 manifest 管理。核对主 Skill 含自动语义分卷与即时自动记忆规则。 - Git 状态:分支/HEAD/工作区干净/远端同步(
git fetch只读检查 ahead/behind;不做任何写入)。 - 单写入者锁:
git show-ref refs/baton/ownership-lock是否存在、state.ownership 状态。 - 发布面(框架仓库场景):公开库 CI 最近 run、npm latest 与 tag 对齐。
- 凭据红线自检:最近 diff 与待提交文件扫描——报告命中清单,绝不显示命中正文。
- Codex Windows ACL 兼容:仅当
.agentsOwner 命中CodexSandboxOffline/CodexSandbox或关键 ACE 异常时报告 FAIL。Doctor 不改 Owner/ACE。
输出格式
## Baton doctor 报告 <时间>
- 版本:源码 vX @ <本地HEAD> / npm vZ / 公开 tag+SHA(分别报告,禁止混称)
- Skill:四份一致 / 漂移点名;默认安装=baton+doctor
- 骨架:完整 / 缺失清单
- Git:分支 / HEAD / 干净 / ahead/behind
- 锁:holding(<owner 前 8 位>) / released / 无 ref
- 发布面:CI 最近 <成功/失败> / tag 对齐
- 凭据:命中 N 处(只列文件名)/ 零命中
- Codex Windows ACL:正常 / FAIL
- 建议:<唯一下一步>
边界
- 只读:不修改、不 commit、不 push、不抢锁。
- 诊断结论标注证据来源(命令 → 结果);无法验证的写「未验证」,不得 PASS。
- 修复必须回到 Baton 正常口令(更新 Baton / init);doctor 不越权执行。