新会话读完本文即可接手,不需回溯对话。 取代
CLOUD-SESSION-HANDOFF-20260816.md。🔴 第 0 节必须先读完再动手 —— 长官原话:「每次换新会话就会变傻就会经常犯错,这个一定要教好。」
你不是不知道,是手边没有上一会话查过的事实,于是用推测填空——
而推测听起来跟事实一模一样,长官分不出来,只能等踩坑才发现。
上一场会话(15 小时)犯的错 90% 是同一类:没查就下结论。
这张表是拿真事故换来的,每一行右边那列都是唯一能信的信号。
| 事情 | ❌ 假判据(我犯过) | ✅ 真判据 |
|---|---|---|
| 接口能用 | service 层单测全绿 | 真打 HTTP(14 条用例全绿,接口却因路由遮蔽 422 调不通) |
| 前端改动生效 | 页面返回 200 | 抓 JS chunk 比对指纹(首屏是 CSR 骨架,grep 页面搜不到文案) |
| 长官能打开链接 | 我自己 curl 通了 | 给公网域名(内网那条要 tailscale,同一个错犯了两次) |
| 数据是真实的 | 库里有 1.5 万行 | 看创建时间/是否全挂测试渠道(15981 行全是测试垃圾,我当真数据写进报告被戳穿) |
| 功能做完了 | 后端接口+测试都绿 | 前端有没有渲染(付款列后端全绿、前端 0 处引用,运营根本看不见) |
| 并发安全 | 有唯一约束/加了锁 | 真并发跑一遍(5 次连点 4 次抛 500) |
| 权限拦得住 | 代码里有 Depends(require_xxx) |
真发无 token 请求看是不是 401/403 |
| 保护在起作用 | 测试跑绿 | 拆掉保护看它是否真会红(反证) |
| 没破坏别的 | 全量跑绿 | 与基线逐条比对失败清单 |
| 偶发不是我的锅 | 单独跑通过 | 基线上跑同一用例也失败(唯一铁证) |
| 发版成功 | 脚本 exit 0 | 流水线出现新 run + 部署步骤 SUCCESS |
云机没有浏览器(无 Chromium、内存装不起 node_modules)。以下 curl 一万次也碰不到,
别声称验过,老实说"须真机验":
history.state📌 但能连 test 就别偷懒:走出网代理直接 curl https://test.tongban.love/...。
--noproxy "*" 只用于内网服务,套到外网会一律返 000 然后误判成"连不上"(我栽过两次)。
发版后的标准动作:① 打改动的端点看响应码 ② 前端抓 chunk 验指纹。别等长官来报错。
status # 开局:分支/工作区/其他worktree/流水线/卡点
release-test "标题" # 发版:判据内置(MR号/merged/新run 三重校验)
deliver 文件名 # 交付:类型白名单+密码拦截+公网链接
🔴 sudo release-to-test 不要直接用(有交互,非交互环境会静默取消却 exit 0)。
| 项 | 状态 |
|---|---|
| 主线 | 门店签约并行化 v2 · 微信支付(批 B) |
| test 状态 | ✅ 已真机付款成功(长官 8-15 晚实测通过) |
| 本地待发 | 🔴 37 个 commit · 工作区干净 · 长官说"先等等,还有别的要改" |
| 分支 | feature/wechatpay-pay-core |
| worktree | /home/dev2/doctor-ai-brain/.claude/worktrees/bridge-cse_01AcGpTe1nKXvLXiYNPAGF53 |
| 全量测试 | 658 passed / 17 failed,与基线逐条一致、0 新增 |
接手第一件事:别发版,等长官提新问题。
| # | 现象 | 根因 |
|---|---|---|
| 1 | 授权后「链接已失效」 | 隐私脱敏把 token 从地址栏抹掉存 history.state,整页跳转必丢 |
| 2 | 调不起支付「缺少参数 total_fee」 | jsapi_prepay 返回整个字典被当字符串塞进 package |
| 3 | 调不起支付「URL未注册: /signup」 | 客户端路由 → 微信按首次加载的 URL 判定当前页 |
| 4 | 调不起支付「URL未注册: /payment」 | 商户平台支付目录写成 http://,站点是 https(长官改后成功) |
| 5 | 并发下单抛 500 | rollback 后用了过期 ORM 对象 |
⚠️ 第 2、3、5 是代码 bug,第 4 是配置。报错文案会指错方向——
total_fee 指向参数实际是 package 格式;URL未注册 指向目录实际是路由/协议。
排查顺序见记忆 [[wxpay-invoke-troubleshooting]]。
| 项 | 结论 |
|---|---|
| 5 个回调并发 | ✅ 只入账 1 次,¥2380 没算多(行锁 + 唯一约束) |
| 5 次连点下单 | ✅ 复用同一订单号,只建 1 笔(修完不再抛 500) |
| 越权 | ✅ 拿 A 会话塞 B 的 org_id → 仍记 A 名下(payload 无 org_id 字段) |
| 金额篡改 | ✅ body 塞 0.01 → 按单价重算 2380(库层 CHECK 再焊一道) |
| 回调验签 | ✅ 验签在写库之前;微信 SIGNTEST 探测按失败应答 |
| 自检口 | ✅ 已加鉴权(长官定:保留当运维工具,不删) |
settle-prod 流水线源(仍指旧仓)+ 支付授权目录填https://chat.tongban.love/ 🔴 必须 httpsservice/page.tsx 一行都别碰(实查:微信支付调用 0 处、线下凭证 5 处,动了就弄坏在用的功能)| 记忆 | 什么时候必看 |
|---|---|
new-session-dont-get-dumb |
开局就读,防呆总则 |
parallel-payment-design |
改付款/审核任一侧之前 |
wxpay-invoke-troubleshooting |
支付调不起时(含 7 步顺序) |
wechatpay-batch-b-facts |
动微信支付代码前 |
cloud-can-reach-test-via-proxy |
想验证线上时 |
cloud-local-db-is-all-test-data |
想拿库里数据下结论时 |
mockup-standard + ~/reports/PROTOTYPE-STANDARD.md |
出图/改 UI 时 |
--noproxy 用错地方 → 误判"云机连不上 test",同一个错说了两次assert '...' or True(恒真,等于没断言)📌 共同点:都是判据选错或没查就说。第 0 节那张表就是这么来的。