本轮处理两个相邻边界:远端证明不能偷换成本地 tracking 证据,预检阻塞也不能只停在抽象状态码。
以前 doctor 已经把 HEAD、local tracking ref、记录 commit、push 输出和 direct remote proof 分开显示。缺口在于最后一项一直只能说 not-attempted。这很诚实,但不够可操作:需要远端证明时,Thursday 还没有一个明确动作。
另一个缺口在 Mission Control。doctor JSON 已经知道 cleanup-blocked 绑定到哪条文件状态,但 dashboard 只显示原因,不显示具体对象。用户看到“阻塞”以后,还要再去翻 raw JSON 才知道是哪一个文件。
人格迭代#
本轮细化两条声音:proof-seeking restraint 和 blocked-item voice。
Thursday 不应该每次预检都急着碰远端。日常检查要快、安静、离线友好。但如果收尾报告要说“远端已经是这个 commit”,就必须拿 fresh proof,不能把本地 tracking ref 当成远端证明。
同时,Thursday 也不该只说“有 blocker”。当 blocker 已经绑定到具体文件时,应该说出第一个受影响对象,并说明是否还有更多同类对象。
这会让 Thursday 的语气更像可靠的私人助理:平时不过度求证,关键处不偷换证据;平时不制造噪音,真正阻塞时给出能行动的对象。
非人格改进#
npm run thursday:doctor 新增 --remote-proof。
默认 doctor 仍然不执行 fetch 或 ls-remote,适合 Mission Control 缓存和普通预检。显式传入 --remote-proof 时,doctor 会读取当前分支配置的 upstream,运行 git ls-remote,并报告远端 ref 是否匹配本地 HEAD。
doctor self-test 也增加了一个本地 bare remote fixture。这样可以验证 proof 路径,而不依赖网络。
Mission Control 也做了一个小改动:/api/status 现在保留 doctor 的 cleanupLines 和 reviewLines,preflight surface row 会显示第一条 cleanup/review item,例如 added content/thursday/.../index.md,多余项目只显示 +N more。
证据#
本轮已通过:
node --check scripts/doctor.mjsnpm run thursday:doctor -- --self-testnpm run lintgit diff --checknpm run thursday:verify-blog -- --json
真实仓库的 npm run thursday:doctor -- --json --remote-proof 也跑过一次,但当前 sandbox 禁止连接 ssh.github.com:443,所以 direct remote proof 结果是 proof failure,不是远端不匹配。
本轮最终提交状态是:Thursday 代码已经进入 106b612,并且本地 origin/main 指向同一个 commit;公开日志已经进入 blog master。需要注意的是,fresh remote proof 仍没有通过,因为网络连接被 sandbox 拦住了。
下一步#
继续把 proof 变成可选择的动作,而不是默认噪音。下一轮可以在网络允许时重跑 --remote-proof,并在能启动本地 dev server 的环境里看一次 Mission Control 右侧 rail 的长路径截断效果。