新会话读完本文即可接手,不需回溯对话。 取代
CLOUD-SESSION-HANDOFF-20260815.md。🔴 第 0 节必须先读——那是防止"换了会话就变傻"的部分,比进度更重要。
上一会话 15 小时里,我犯的错 90% 是同一类:没查就说、没查就做。逐条列出来,照着防。
| 我犯过的 | 后果 |
|---|---|
| 猜"签约链接一条对应一家机构" | 长官纠正 3 次,浪费半小时 |
猜服务层文件在 services/ 实际在 api/ |
测试 import 失败 |
猜 core_client 路径不带 /internal/settlement 前缀 |
单测测不出来,联调才会 404 |
猜 opening-result 走 serialize_store_signup |
差点改了没效果的地方 |
做法:grep -rn "def 函数名" app/ 找到真实位置 → 读完整函数 → 再开口。
说不准的直接说"我没查",不要用推测冒充事实。
上一会话犯的错全是判据选错:
| 我以为的判据 | 真判据 |
|---|---|
| 发版脚本 exit 0 = 发成功 | 流水线出现新 run 才算(脚本非交互会静默取消) |
cp 失败 = 没权限 |
试过 sg devshare -c 才算 |
| 文件字节相同 = 内容一致 | md 会被服务端渲染成 HTML,要看内容在不在 |
| 测试跑绿 = 功能对 | 要拆掉保护看它是否真会红(反证) |
| 断言写了 = 拦得住 | 我写过 assert A or B 而 B 恒真 = 形同虚设 |
status # 开局:分支/工作区/其他 worktree/流水线/当前卡点,一条命令看全
release-test "标题" # 发版:自动喂 y + 判据内置(MR号/merged/新 run 三重校验)
deliver 文件名 # 交付:类型白名单 + 密码泄露拦截 + URL 编码 + 出公网链接
🔴 sudo release-to-test 不要直接用 —— 它有 read -p y/N 交互,非交互环境会静默取消却 exit 0。
上一会话为此白发了两次版,是查流水线时间戳才识破的。
结算套件有既有的偶发失败,全量跑会随机红 1~2 条。判断方法(避坑指南 C30):
origin/test 基线上跑同一个用例,也失败吗?(失败 → 铁证不是你引入的)判据③ 是唯一铁证。已实测:test_channel_store_profile_view 在基线上单独连跑 4 次红 2 次、
test_revenue_ledger_period_range::test_month_filter... 基线 4 次红 1 次。
基线全量抖动区间:17~18 failed。
page_platform_mobile_payment_vouchers)~/.npm-global/bin/esbuild <文件> --loader:.tsx=tsx --outfile=/dev/null#0b9a7a、错误色 #b42318),禁自造referrerPolicy="no-referrer"(有防盗链,不加 PC 端裂图)changguan-rules)| 项 | 状态 |
|---|---|
| 主线 | 门店签约并行化 v2 · 微信支付版(批 B) |
| 待发 test | 🔴 20 个 commit · 45 文件 · +4386 行 · 工作区干净 |
| 分支 | feature/wechatpay-pay-core(worktree: .claude/worktrees/bridge-cse_01AcGpTe1nKXvLXiYNPAGF53) |
| 后端 | ✅ 全通(授权/下单/支付/回调/资金链/退款/台账/详情/列表) |
| 前端 | ✅ 授权页、支付页、详情支付块、列表状态列 ⬜ 支付记录页、老档案临时授权 |
| 全量测试 | 619 passed / 17 failed,与基线逐条一致 |
| 联调 | ⏸️ 等发版 + 长官手机付 0.01 元(⚠️ 真扣钱,微信无沙箱) |
66fc5d4c 密钥挂载改仓外绝对路径 —— deploy/ 是 CI 同步区,rsync --delete 每次发版清掉密钥(已在 test 实际发生过,root 定位)86ffc0dd JSAPI 调起支付签名(官方黄金向量逐字校验)+ 建支付订单13694d1b 门店支付页改造 + 门店端取价接口9bb8a892 下单端点 + 回调端点(验签/解密/幂等)8d9c0b94 未支付订单复用不是拒绝(方案 §89)580685aa 资金链 7 步 + 下游 4 处凭证连接改外连接(路 B)2e0a028e 退款标记 + 收益三分支冲销(方案 §260)e34b5304 记录「当前不做微信原路退」+ 防线测试d72946bc 核心内部端点 + 结算换身份 + 授权落地页ae2d7d6c 授权接入签约流程(闸门/取号/带身份提交/落库)563d29e8 支付页身份改由后端回传(只靠浏览器缓存的话,换个会话就付不了钱)606ba688 支付记录接口(历史凭证 ∪ 微信订单,两类拼接不重复计数)93a712fc 支付记录分页(1492 KB → 9 KB)+ 稳定排序防串页d64764c7 00c062fb 机构详情支付信息块(列出全部支付 + 开通席位数带出订单数量)434865cf 机构列表付款状态列 + 独立筛选3e7ec515 f00e2e57 治随机 org_id 撞号 + 加渠道隔离(部分缓解,非根治)| # | 拍板内容 |
|---|---|
| 1 | 付款人昵称 + 头像 + openid 三项都要存(头像是长官特别追加的) |
| 2 | 付款人信息存快照 —— 用户日后改微信昵称,历史订单不变 |
| 3 | 审计 actor_role 存 system(沿用现网口径),展示层渲染成「微信支付」 |
| 4 | 当前不做微信原路退(现在不做,后续可能做,不是永久否定);退款=线下退钱+系统标记 |
| 5 | 授权时机 = A 方案:点签约链接/扫码进来第一步就授权 |
| 6 | 拒绝授权 → 不让往下走;只允许微信内打开,其他浏览器给提示 |
| 7 | 一人一份档案:A 发给 B,B 打开就是全新一份,重新授权重新填 |
| 8 | 机构详情列出全部支付记录(不是只显示最近一笔) |
| 9 | 开通账号时席位数默认带出支付订单 quantity(方案 §124) |
/api/admin/payment-vouchers/records 已就绪,分页也有了)store-wx-auth-landing)release-test "标题",等长官现场令)app/api/wx_openid_probe.py、/api/wxpay/self-checkgrep -rn "wx-probe\|self-check" 确认零残留)~/reports/batch-b-production-checklist.md)settle-prod 流水线仍指向旧仓 tongban-settlement.git,而 settle-test 是 doctor-ai-brain.gitmain 流水线连续全红:根因是孤儿容器占着 doctor-web 名字origin/main alembic 2 个头(phase70_001 / store_poster_demo_flag)完整清单:~/reports/batch-b-production-checklist.md(7 节,发版前逐条过)
Wechatpay-Serial 放微信支付公钥 ID,商户证书序列号放 Authorization 的 serial_noWECHATPAY/SIGNTEST/ 前缀),验签失败必须返 4xx/5xxsnsapi_userinfo 必须用户点击才发起 —— 自动跳会进快照页,拿到虚拟 openid8.70*100 浮点会得 869.999…)rate_percent / 增购 expansion_rate_percent / 续费 renewal_rate_percentphase68_001)received_amount > 0 → <> 0(负数冲销要用)channel_amount >= 0UNIQUE(payment_confirmation_id) → 部分唯一(WHERE received_amount > 0)downgrade → upgradeassert A or B 而 B 恒真,等于没断言split 切不干净:split("\n@router") 把后面的函数也包进来 → 改用 ASTreferrerPolicy="no-referrer",PC 端会裂图| 件 | 路径 |
|---|---|
| 本交接件 | ~/reports/CLOUD-SESSION-HANDOFF-20260816.md |
| 生产准备清单 | ~/reports/batch-b-production-checklist.md |
| 批 B 方案与待办 | ~/reports/batch-b-plan-and-todo-20260815.md |
| B-后 施工图 | ~/reports/funds-chain-port-checklist.md |
| 运维手册 | ~/reports/wxpay-ops-runbook.md |
| 方案正本 | ~/reports/门店签约并行化方案v2-微信支付版-20260813.md |
| 台账 | ~/zyai-handbook/CLOUD-WORKLOG-SETTLEMENT.md |
公网取件:deliver <文件> 或 https://dev-tokyo.tail3912a6.ts.net/<文件名>
# 跑结算测试(4 个环境变量缺一不可)
cd settlement/backend
DATABASE_URL="postgresql+asyncpg://postgres@127.0.0.1:5432/doctor_ai_brain" \
SETTLEMENT_SERVICE_TOKEN=t SETTLEMENT_JWT_SECRET=s CORE_API_BASE="http://127.0.0.1:8001" \
~/venvs/dab/bin/python -m pytest tests/ -q
# 基线对比(判断"是不是我改坏的"唯一铁证)
cd /home/dev2/doctor-ai-brain && git worktree add /tmp/base origin/test --detach
# ...跑同一个用例... 完了 git worktree remove /tmp/base --force
# 前端编译
~/.npm-global/bin/esbuild <文件>.tsx --loader:.tsx=tsx --outfile=/dev/null
# 微信支付官方文档(本地知识库)
~/.claude/skills/wechatpay-payment-integration/assets/微信支付官网文档/APIv3/普通商户/
⚠️ 云机测试结果汇报必带标签「云机环境·非验收证据」,验收去 test.tongban.love。