docs(weixin): update confirmed image reference recovery

This commit is contained in:
Steel Dan (AIOS)
2026-07-12 01:18:25 +08:00
parent c8a3251834
commit 8374c6b1c7
@@ -2,7 +2,7 @@
## 结论
本次事故已经按最新备份链路回滚并收口。当前文档只记录证据、回滚和验收边界,不把“真实 inbound 已完成”写成结论。
本次事故已经按最新备份链路回滚并完成第二轮评审修复。`3d9782fc346d1e7defde090ab8637e62ab28ab8a` 进一步修复了英文诊断文本和未确认引用文本误入图片路径的问题。当前文档只记录证据、部署和验收边界,不把“真实 owner inbound 已完成”写成结论。
## 现象
@@ -19,29 +19,33 @@
## 护栏不变量
- 没有明确图片 follow-up 语义的纯文本,不能进入 `handleHermesImplicitImage()`。
- 只有真实图片 follow-up 且缓存仍有效时,才允许走 `resolveHermesCachedImageEntry()` 的 `cached_image_matched` 路径。
- 图片处理上下文必须来自当前消息图片、已确认的引用图片,或精确匹配的缓存图片 ID;缺少这三类证据时,纯文本不能进入 `handleHermesImplicitImage()`。
- 未确认的引用文本不能继承 sender 级旧图缓存,必须返回 `referenced_image_not_confirmed`。
- 只有精确缓存图片 ID 命中且缓存仍有效时,才允许走 `resolveHermesCachedImageEntry()` 的 `cached_image_matched` 路径。
- `/hermes` 这类 slash 路径保持原有分流,slash/channel 面不变。
- 这次修复的守卫目标,就是把“文本诊断”与“图片缓存回退”拆开,避免再把普通文本提升成图片意图。
- 这次修复的守卫目标,是把中英文诊断文本、未确认引用文本与图片缓存回退拆开,避免再把普通文本提升成图片意图。
## TDD 与幂等性
- `66d637fc0364a617c7b9fd8cd9baa68fb0368675`(`fix(weixin): isolate text from stale image cache`)引入了隔离修复和 `tests/test_weixin_image_followup_intent.py`。
- `2de29c59bb946cc3db3e14e8a06270391ede8401`(`fix(weixin): add process-only runtime patch mode`)继续收紧 process-only 运行模式,保持回放幂等。
- 相关测试证据已写入 `reports/codex/UCC_WECHAT_SEND_BACKEND_OWNER_TEST_20260707.md:27`,其中本地测试记录为 `Ran 7 tests ... OK`。
- 生产 npm 分发侧本身缺少 `tsconfig/tests`,baseline 与 patched 共享这一限制,所以这里不把分发目录的缺口当成回归点;验收以 node check 和 7 tests 为准。
- `3d9782fc346d1e7defde090ab8637e62ab28ab8a`(`fix(weixin): require confirmed image reference context`)补齐英文诊断文本和未确认引用文本用例,并把图片引用收紧到已确认上下文。
- 第二轮回归结果为 `8 PASS`;node check 同样通过,重复应用补丁保持幂等。
- 生产 npm 分发侧本身缺少 `tsconfig/tests`,baseline 与 patched 共享这一限制,所以这里不把分发目录的缺口当成回归点;验收以 node check 和 8 tests 为准。
## 回滚与备份
- 回滚按最新备份执行,基线指向 `/data/aios-gitops/runtime/latest-backup-dir.txt` 所示的最新备份目录。
- 备份路径链路按供给证据记录为 `T064506Z`、`T074212Z`、`T081658Z`。
- 本次恢复后,部署过程哈希记录为 `e9625d12` 和 `c00c58f8`,slash/channel 口径保持不变。
- 第一轮恢复后的部署过程哈希记录为 `e9625d12` 和 `c00c58f8`。
- v2 部署备份为 `/var/backups/aios/weixin-text-cache-isolation-20260711T094908Z`。
- v2 部署文件哈希为 TS `024c6498284d1871b048f6157d5d3dbd4d34e54b53a05afd744b00458ceeb79f`、JS `d73b15d6752056192a1d1939b04107334419785b41175b39f1cbc1132ac65c47`;slash/channel 口径保持不变。
## 运行态验证
- gateway PID 由 `4025932` 变为 `1723576`,当前活跃监听仍在 `18789`。
- 现场/供给证据显示 `journal plugin errors = 0`、`channel lastError = false`、`cache preserved`。
- 这说明回滚后运行态没有再冒出新的插件错误,缓存状态也仍然保留。
- 第一轮 gateway PID 由 `4025932` 变为 `1723576`;v2 部署后由 `1723576` 变为 `1876713`。
- v2 现场/供给证据为 `active`、监听 `18789`、`error_count=0`、`channel gate pass`、`cache preserved`。
- 最终 read-only gate 通过,说明部署后运行态未出现新的插件错误,channel 状态和缓存均保持预期。
## 未完成的真实验收
@@ -49,9 +53,9 @@
- diagnostic text
- genuine image-followup message
以上三类消息仍需要真实到达,才能把这次“文本隔离”结论升格为完整的线上接受;本报告不把它们伪装成已经完成。
以上三类消息仍需要由 owner 真实 inbound 到达,才能把这次“文本隔离”结论升格为完整的线上接受;本报告明确保留该项为 pending,不把它们写成已经完成。
## 安全说明
- 本次仅新增文档,没有修改代码、runtime、services 或 secrets。
- 本次仅更新本报告,没有修改代码、runtime、services 或 secrets。
- 报告里没有任何凭据、密钥或原始敏感 ID。