| name | baton-doctor |
| description | Baton 项目健康诊断与能力自检(版本/漂移/骨架/发布面/凭据清单)。只读,不修改任何文件。触发:用户要求体检、诊断、看 Baton 状态、为什么口令没反应时使用。 |
baton-doctor(只读健康诊断)
检查清单
- 版本事实分层:先判断当前目录是否为 Baton 框架源码仓库(
package.json.name=@kakadeka/dsh-baton)。若是,源码版本只取本地 package.json.version + 本地 HEAD;再单列项目/三端 version.json 的安装镜像版本与来源 SHA。npm latest(npm view @kakadeka/dsh-baton version)和公开库 SHA/tag 只列为发布面证据。安装锚滞后只能报告“镜像/锚待刷新”,不得说本地源码过低;公开 staging SHA 与私有源码 HEAD 不作相等性新旧判断。普通业务项目无源码层,才用安装镜像与已发布版本判断是否需要升级。
- Skill 漂移:四份 SKILL(canonical + 三端镜像)内容一致?项目内可用
node scripts/check-drift.mjs(有脚本时)。
- 骨架完整:
docs/ai_memory/ 关键文件存在且含【归档分卷索引】+【修订记录】两区块;.baton/config.json 可解析。
- Git 状态:分支/HEAD/工作区干净/远端同步(
git fetch 只读检查 ahead/behind;不做任何写入)。
- 单写入者锁:
git show-ref refs/baton/ownership-lock 是否存在、state.ownership 状态。
- 发布面(框架仓库场景):公开库 CI(GitHub Actions)最近 run 结论、npm latest 与 tag 对齐、公开库历史连续(
git log --oneline)。
- 凭据红线自检:最近 diff 与待提交文件扫描(
git status --porcelain + 敏感模式)——报告命中清单,绝不显示命中正文。
- Codex Windows ACL 兼容:仅在 Windows 读取当前进程身份与项目根、
.agents 的 Owner/显式 deny ACE;当前进程身份只作诊断上下文,不单独判项目失败。仅当 .agents Owner 命中 CodexSandboxOffline/CodexSandbox、关键 ACE 明确异常,或 Codex sandbox 日志出现该项目的 SetNamedSecurityInfoW ... error 5 时报告 FAIL,并给出唯一下一步“由 AI 申请宿主级授权后运行官方安装/精确 ACL 修复”。Doctor 不改 Owner/ACE、不移动/重建目录,也不把 Grok/业务代码判为根因。
输出格式
## Baton doctor 报告 <时间>
- 版本:源码 vX @ <本地HEAD> / 安装镜像 vY @ <来源SHA> / npm vZ / 公开 tag+SHA(分别报告,禁止混称)
- Skill:四份一致 / 漂移点名
- 骨架:完整 / 缺失清单
- Git:分支 / HEAD / 干净 / ahead/behind
- 锁:holding(<owner 前 8 位>) / released / 无 ref
- 发布面:CI 最近 <成功/失败> / tag 对齐 / 历史连续
- 凭据:命中 N 处(只列文件名)/ 零命中
- Codex Windows ACL:正常 / FAIL(当前身份、项目根 Owner、.agents Owner;不展示 SID 以外的敏感 ACL 正文)
- 建议:<唯一下一步>
边界
- 只读:不修改、不 commit、不 push、不抢锁。
- 诊断结论标注证据来源(命令 → 结果);无法验证的写「未验证」,不得 PASS。
- 修复动作(补锚/同步镜像/修复骨架)必须回到 Baton 正常口令流程,doctor 不越权执行。