fix(deploy-drift): 结论区那行命令跑不起来(node → bash)+ 写明判据 ① 的量纲
两处,都在 `deploy/check-deploy-drift.mjs`: 1. 结论区打印的修复命令是 `node deploy/redeploy-plugin.sh <host>`, 而它是 **bash** 脚本 —— 照抄的人会拿到 `SyntaxError: Invalid or unexpected token`(脚本第 2 行 `#` 被当 JS 解析)。 这个坑的源头就是这一行:pi 在 2026-09-14 那轮部署请求里抄的就是它打印的输出, 抄错不是阅读问题,是判据自己印错了。改成 `bash …`。 2. 判据 ① 的注释写明它比的是**仓库工作区当前内容**,不是 git HEAD。 实证(同一天):`plugins/pi-mail-bridge/src/pool.mjs` 里一行未提交的 `let missingSessionCount = 0;`(模块顶层、无人读)被 17:20 那次 **从脏工作区做的**快照原样带进了生产,而判据 ① 当时报的是「逐字节一致」—— 工作区与快照确实一致,只是两者都不等于 HEAD。 判据没错,是量纲只覆盖「仓库→快照」这一跳,覆盖不到「HEAD→工作区」那一跳; 想连那一跳一起判得单独比 `git diff --stat`。 (那条死代码本身已由 pi 的补丁 A 从工作区删掉,pool.mjs 工作区已回到 HEAD 内容; 下次部署后 `current/src/pool.mjs` 里的它才消失 —— 在此之前判据 ① 会因此报一处 pool.mjs 漂移,那是"待部署",不是新问题。)
This commit is contained in:
@ -238,7 +238,15 @@ function checkHost(spec) {
|
||||
if (!existsSync(repoDir)) return fail('仓库插件目录存在', repoDir), result;
|
||||
if (!existsSync(linkPath)) return fail('已部署(current 存在)', `未部署:${linkPath}`), result;
|
||||
|
||||
// ① 内容:快照 vs 仓库(四个宿主同一套)
|
||||
// ① 内容:快照 vs **仓库工作区当前内容**(四个宿主同一套)
|
||||
//
|
||||
// ★ 比的是工作区**当前**内容,不是 git HEAD —— 仓库脏(未提交的改动)时
|
||||
// 这条判据照样会绿。实证(2026-09-14):`pool.mjs` 里有一行未提交的
|
||||
// `let missingSessionCount = 0;`(模块顶层、无人读),被 17:20 那次
|
||||
// 「从脏工作区做的」快照原样带进了生产,而这条判据当时报的是「逐字节一致」
|
||||
// —— 工作区与快照确实一致,只是两者都不等于 HEAD。判据没错,是它的**量纲**
|
||||
// 只覆盖「仓库→快照」这一跳,覆盖不到「HEAD→工作区」那一跳。
|
||||
// 想连那一跳一起判,得单独比 `git diff --stat`,别指望这一条。
|
||||
const d = diffTrees(collectFiles(repoDir), collectFiles(linkPath));
|
||||
const { runtimeDrift, docDrift } = diffSummary(d);
|
||||
if (runtimeDrift === 0) {
|
||||
@ -567,7 +575,7 @@ function main() {
|
||||
for (const c of layout) console.log(` ${c.ok ? '通过' : '失败'} ${c.name}${c.note ? ' — ' + c.note : ''}`);
|
||||
const stale = results.filter(r => r.stale);
|
||||
console.log(`\n 结论:${stale.length === 0 ? '四个宿主都在跑当前代码' : `${stale.length} 个宿主需要重新部署/重启`}`);
|
||||
for (const r of stale) console.log(` ✗ ${r.host}:node deploy/redeploy-plugin.sh ${r.host}`);
|
||||
for (const r of stale) console.log(` ✗ ${r.host}:bash deploy/redeploy-plugin.sh ${r.host}`);
|
||||
}
|
||||
process.exit(results.some(r => r.stale) || layoutBad.length ? 1 : 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user