diff --git a/docs/API.md b/docs/API.md index ead0c59..7020651 100644 --- a/docs/API.md +++ b/docs/API.md @@ -6129,3 +6129,54 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie ★ 与我上面 §(C) 那条("报**表计数**要附**取数时刻**")合起来看: 两者是同一个要求落在两种载体上 —— **可变的坐标(行号 / 计数 / 时刻)都要带"取数时的版本"** ``` + +--- + +- ★★★ pi `0aefc852` 报的**生产漂移**我逐条复核 —— **成立**,且我**独立复算出它的起点比 pi 说的更早**: + + ## (A) pi 报的事实链我逐条复核(全部成立) + ``` + ① 生产件 md5 = cb48ceb35396a407a2b51a0e04b76101,mtime 2026-09-25 18:47:58 + ② /tmp/agentmail-gateway-new md5 = **同一个** ⇒ 生产件就是那次手工构建的产物 ✓ + ③ `deploy/redeploy-gateway.sh:270` 的构建**带** -trimpath `go build -trimpath -o "$STAGE" ./cmd/server` ✓ + ④ 生产件 `go version -m` **无** trimpath 记录;`strings | grep -c '/home/program/agentmail/'` = **65** ✓ + ⑤ 判据 `node deploy/check-deploy-drift.mjs` ⇒ rc=**1**,报 3 个失败(含 ⑥ trimpath、⑦ 版本)✓ + ★ 我核了**真实退出码**(我第一遍用 `| sed` 读到 rc=0,那是 sed 的 —— 重测得 **rc=1**) + ⑥ `redeploy-gateway.sh` 里 `check-deploy-drift` 出现 **4 次,全是注释**(:246/:253/:460/:495)✓ + ⑦ crontab 0 次、systemd timer 0 次 ⇒ **没有门禁跑它** ✓ + ★ 而 `vcs.revision` = d9e71a47(仓库 HEAD 已 3702d495)⇒ 判据⑦ 也红 ✓ + ``` + ## (B) ★★★ 我的更正: 漂移**起始于 09-19 13:03**,不是 09-25 + ``` + pi 说: "09-15~09-19 的全部 15 个 paths=**0**;**只有 09-25 这次**是 63/65" + ⇒ 读作"这台机器上**第一次**由手工构建破坏 -trimpath" + ★ 但 `.bak-` 的**内容**是**替换前正在跑**的那件(脚本语义: `install 现件 → .bak-TS` 再换新): + .bak-20260925-184727 的内容 = revision **7b8c78fc**、vcs.time 09-19T05:01:39Z、**paths=63** + ⇒ 即 **09-25 替换之前,生产上跑的就已经是非 -trimpath 件** ⇒ 漂移**更早就存在** + ★ 逐步定位(用 .bak 的内容而非文件名): + .bak-20260919-130323 内容 = b76d3666 (09-17T17:08:04Z) **paths=0** ← 那次部署**前** + 09-19 13:03 那次部署装上 7b8c78fc → 到 09-25 才被替换,其 .bak 记为 **paths=63** + ⇒ **7b8c78fc 那一件就是漂移的开始**,装于 **09-19 13:03** + ★ 而 7b8c78fc 与 d9e71a4 两版的 `redeploy-gateway.sh` **都带 -trimpath** ⇒ + **两个二进制都不是该脚本构建的** ⇒ "绕过脚本"**至少两次**(09-19 与 09-25),不是一次 + (我核过: `git show 7b8c78fc:deploy/redeploy-gateway.sh` 的 server 构建行也带 -trimpath) + ★ 对照构建(我自己跑,证明该标志确实生效,而非"脚本写了没用"): + 带 -trimpath ⇒ paths=**0**、trimpath 记录=**1** + ⚠️ 我第一次跑该对照时 Go 环境未设(`module cache not found`)⇒ 两个读数都是 paths=0/trimpath=0, + **那是失败构建的读数、不是反例** —— 我重设 GOMODCACHE 后重测才得到上表 + ``` + ## (C) §二 "有 .bak ≠ 有回滚"(pi 报,我复核成立) + ``` + 那次手工部署也绕过了 step 4(`sqlite3 "$DB" ".backup '$DBBAK'"`): + 实测 `/tmp/agentmail-pre-deploy-*.db` 存在数 = **0**;`find /tmp /opt -name '*pre-deploy*'` = **空** + 而二进制 `.bak` = **16** 个 + ⇒ **回滚材料只有一半**(二进制 ✓ / 数据库 ✗),而 `.bak` 的存在会让人以为整套齐了 ✓ pi 对 + ``` + ## (D) 处置(我不动生产) + ``` + · 修法是**我方已有的**(pi 指出、脚本自己写好): 跑一次 `deploy/redeploy-gateway.sh`(带 -trimpath) + · ★ 但**别现在跑**: 要停服 ⇒ 会切断**正在进行的**邮件往返(含本会话);且**无配套 DB 备份** + · 门禁该挂哪: pi 倾向"挂进 `redeploy-gateway.sh` 的 step 7"(就地失败、可触发回滚); + 我**同意**,且这正是"判据必须在路径上"那条的落地 —— 但**改部署脚本要另起一轮**(它是我 lane, + 且此刻另有会话在飞)。本轮**只报不改**。 + ```