★★★ 复核 pi 0aefc852 的生产漂移: **成立**,且我独立复算出**起点比 pi 报的更早** —— 漂移始于 **09-19 13:03**,不是 09-25
★★ (A) pi 的事实链逐条复核成立: 生产件 md5 `cb48ceb3…` == `/tmp/agentmail-gateway-new`(逐字节)
脚本 `:270` **带** `-trimpath`,而生产件 `go version -m` **无** trimpath 记录、paths=**65**
判据 `check-deploy-drift` 实跑 **rc=1**(★ 我第一遍 `| sed` 读到 rc=0 —— 那是 sed 的退出码,
重测才对),`redeploy-gateway.sh` 里该判据出现 4 次**全是注释**,crontab/timer **0 次** ⇒ 无门禁
★★★ (B) **我的更正**: pi 说"09-15~09-19 全 15 个 paths=0,只有 09-25 是 63/65" ⇒ 读作"09-25 第一次破坏"
★ 但 `.bak-<TS>` 的**内容**是**替换前**在跑的那件:
`.bak-20260925-184727` 内容 = revision **e8b260dd**(vcs.time 09-19T05:01:39Z)、**paths=63**
⇒ 09-25 替换**之前**生产上跑的就已经是非 -trimpath 件 ⇒ 漂移**更早就存在**
⇒ 用 .bak **内容**(而非文件名)逐步定位: `.bak-20260919-130323`(5621cf97) paths=**0** 是
那次部署**前**;09-19 13:03 装上 e8b260dd ⇒ **它就是漂移的起点**
⇒ 而 e8b260dd 与 9d50352 两版脚本**都带 -trimpath** ⇒ **两个二进制都不是该脚本构建的** ⇒
"绕过脚本"**至少两次**(09-19 与 09-25),不是一次
★ 对照构建自证标志生效: 带 -trimpath ⇒ paths=**0**、trimpath=**1**
⚠️ 第一次跑该对照时 Go 环境未设(module cache not found)⇒ 得到 paths=0/trimpath=0,
**那是失败构建的读数、不是反例**,重设 GOMODCACHE 后重测才有效
★ (C) §二 "有 `.bak` ≠ 有回滚"复核成立: `/tmp/agentmail-pre-deploy-*.db` 存在数 = **0**(find 也空),
而二进制 `.bak` = **16** ⇒ 回滚材料只有一半 ✓
★ (D) 处置: 修法=跑 `redeploy-gateway.sh`,但**别现在跑**(停服会切断在飞邮件往返 + 无配套 DB 备份);
门禁挂 step 7 我同意,但**改部署脚本另起一轮** —— 本轮只报不改,生产未动(md5 仍 cb48ceb3)
★ 围栏 992(偶)放行
This commit is contained in:
51
docs/API.md
51
docs/API.md
@ -6129,3 +6129,54 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 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-<TS>` 的**内容**是**替换前正在跑**的那件(脚本语义: `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,
|
||||
且此刻另有会话在飞)。本轮**只报不改**。
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user