diff --git a/deploy/check-relay-counts.sh b/deploy/recount-relay-counts.sh similarity index 89% rename from deploy/check-relay-counts.sh rename to deploy/recount-relay-counts.sh index 63d103c..0439e4c 100755 --- a/deploy/check-relay-counts.sh +++ b/deploy/recount-relay-counts.sh @@ -31,8 +31,30 @@ # · `类` 的判据是 `relay_key` 的**形状**,不是 `kind`(kind 里没有 failure) # · 抑制数给**两种口径**(完整 parent 链 / 只沿 failure 链),因为两者差很多 # -# 用法: deploy/check-relay-counts.sh [--json] +# 用法: deploy/recount-relay-counts.sh [--json] # 退出码: 0 = 全部**不变量**成立;1 = 有不变量不成立 +# +# # ★ 为什么叫 `recount-` 而不是 `check-`(这条是我自己踩出来的) +# +# 本仓 `deploy/check-*.sh` 是**部署门禁族**的命名约定,且由 +# `client/electron/test/criteria-hygiene.test.mjs` 用 +# `readdirSync(DEPLOY).filter(/^check-.*\.sh$/)` **强制**:凡叫 check-*.sh 的, +# 必须被 install.sh / redeploy-*.sh 在**可执行位置**调用("判据在但走不到"是它要拦的形状)。 +# +# 我这个脚本**第一版就叫 check-relay-counts.sh** ⇒ 被那条判据收进门禁族 ⇒ **把它弄红了**。 +# 而按性质它**不该被接线**,两条入口接进去都是错的: +# · 接 `install.sh` ⇒ 它读 `/opt/agentmail/data/agentmail.db`,**新机器没有这个库** ⇒ +# 实测 `AGENTMAIL_DB=/nonexistent` 时 rc=1 ⇒ **每次全新安装假红**; +# · 接 `redeploy-*` ⇒ 它断言的是"库的不变量",而**库是活的**, +# 计数一变就红 ⇒ 会去**回滚一次正确的部署**。 +# ⇒ 所以正确修法是**改名**(进入"按需工具"族:`prune-*` / `archive-*` / `reset-*` 同族), +# 而不是改判据、也不是硬接线。 +# +# ★ 顺带暴露了那条判据的一格: 它的**自称**按性质分("宣称是政策/门禁的 check-*.sh; +# 不管 check-deploy-drift.mjs 这类**按需手动工具**"),而**机制**按**扩展名**分。 +# 两者在"按需工具 + .sh 后缀"这个缝里不一致 —— 我的文件正落在缝里。 +# 反方向也有(真门禁 `check-plugin-snapshot.mjs` 因 .mjs **逃过**该判据)。 +# ⇒ 这是 pi 那条⑬"判据的动作与它被许诺的范围不匹配"的又一实例。 set -euo pipefail