交接档案

07 · 问题风险与失败经验

原因分级:【已证实】 有日志/复现/文档证据 |【高度可疑】 证据链完整但缺最后一环 |【未查明】 无法复现或无线索。 原则:不把偶发问题直接定性成「代码故障/数据丢失/安全事件」。


一、事故与故障档案

事件 01 · 手绘气泡上线后中文乱码(10-14)【已证实】

事件 02 · 发送键把点击事件当消息(10-17)【已证实】

事件 03 · iPhone 底部布局/键盘连续 6 轮返工(10-22)【已证实】

事件 04 · 部署产物与源码漂移(10-19 前)【已证实】

事件 05 · 国内版请求穿墙打 v2(10-25 凌晨)【已证实,我方引入】

事件 06 · 国内版记录类接口全 403(10-25)【已证实】

事件 07 · 国内版人设丢失、AI 自认 DeepSeek(10-25)【已证实】

事件 08 · v1 页面 401(令牌不匹配)(10-25)【已证实】

事件 09 · 删除后云端「复活」(10-24 前)【已证实】

事件 10 · 「云端删除」其实只是软删(10-25)【已证实】

事件 11 · v1/v2 聊天全部 500(10-25 14:30–22:30)【已证实(主因)】

事件 12 · 国内版「搬迁后不能用了」(10-25 12:58)【部分查明】

事件 13 · pgrep -f 误杀自己(10-19)【已证实】

事件 14 · 沙箱访问不了 workers.dev(长期)【环境限制】


二、当前风险登记(按严重度)

完整版与修复方案见 /workspace/审查报告-三端代码与风险-20261025.md;此处只列结论。

P0(致命,必须马上处理)

ID 风险 后果
P0-1 前端「聊天」走 CONFIG.WORKER_URL,「记忆/档案/删除」走相对路径 一个设置就能让读写分裂到两个后端;「删了 AI 还记得」
P0-2 硬删只删 msg:,不删 mem:(检索读的正是 mem:) 「彻底删除」名不副实,被删内容仍进提示词
P0-3 页面公开 + 令牌随页面下发 拿到 URL 即可读走/删光全部记忆

P1(严重)

ID 风险
P1-1 v1 的 DEEPSEEK_API_KEY 代码不读;v2 无模型 Key → 换设备首聊必失败
P1-2 检索只扫「最旧 1000 个」mem 键,超 1000 后新记忆静默失效
P1-3 国内版数据与快照全在 /tmp;同源基准写死,换域名全 403
P1-4 备份口径三端不一致(v1/v2 只能导本机,云端档案只有国内版能导)
P1-5 跨源响应缺 Access-Control-Allow-Origin(json() 没带)
P1-6 图片不入云,换设备即永久丢失,备份也不含
P1-7 首次云同步 O(n) 写,1000 条一次打满日配额

P2/P3(摘要)


三、不要重复的操作(血泪清单)

  1. 不要手工编辑 cat-chat-all-in-one.js;一律改 worker.js / index.html 后 node build.js。
  2. 不要跳过 build 直接 wrangler deploy --config(会部署旧产物)。
  3. 不要在没备份时 clearAll() / 清 KV / 清 IndexedDB。
  4. 不要用 pkill -f / pgrep -f 匹配 server.js(会杀自己)。
  5. 不要一次硬删超过 200 条(写配额 1000/天;还要留余量给聊天)。
  6. 不要在配额耗尽时反复重试(每次重试都在烧 list/写;新代码已降级,但旧页面会继续打)。
  7. 不要用「沙箱打不开 workers.dev」判断线上故障。
  8. 不要把「v2 空库」当成故障(那是按用户要求新建的)。
  9. 不要在页面里写死后端地址或令牌(v1 401 与国内版穿墙都源于此)。
  10. 不要维护第二份业务逻辑(国内版早期 handleChat 副本导致人设丢失)。
  11. 不要相信「UI 有按钮 = 功能通」(云端删除、全量导入都曾如此)。
  12. 不要只跑 Mock 测试就宣称线上可用。

四、仍然未闭环的三个问题

# 问题 缺什么 怎么补
1 10-25 第一次 500 的确切异常文本 线上日志(wrangler tail 不可用) 下次故障时让用户截图 rid,或接 CF Logpush
2 v1 库在 10-24 之后被谁/何时填充 无部署/同步日志 看 v1 meta_lastTs 时间线 + 用户回忆;或等配额恢复后按 created_at 抽样
3 10-25 12:58 国内版「用不了」的完整原因 当时的服务日志已滚动 保留 /tmp/cat-chat-server.log;下次复现立即抓
本页由交接包内的 Markdown 原样转换;内容未改动。源码与完整包请回目录页下载。