新会话读完本文即可接手,不需回溯对话。 取代
CLOUD-SESSION-HANDOFF-20260817.md。🔴 第 0 节必须先读完再动手 —— 长官原话:「每次换新会话就会变傻就会经常犯错,这个一定要教好。」
你不是不知道,是手边没有上一会话查过的事实,于是用推测填空 ——
推测听起来跟事实一模一样,长官分不出来,只能等踩坑才发现。
每一行右边那列,都是拿真事故换来的。带 🆕 的是 8-16/17 这一夜新交的学费。
| 事情 | ❌ 假判据 | ✅ 真判据 |
|---|---|---|
| 后端改动没问题 | 静态检查 / import ok / py_compile | 本地真库真跑(🔴 CI 不跑 pytest) |
| 🆕 migration 没问题 | 本地 alembic upgrade 成功 |
本地是 postgres 超级用户,权限比 test 大。碰核心表(users/organizations)的操作先停 —— 8-17 加个 FK 就把 test 部署干失败了 |
| 🆕 判据本身有效 | 我跑了对比 | 先证明"撤掉修复会红"。8-17 用 git stash 做基线,可工作区本来就干净 → stash 是空操作,那次"基线"其实带着改动,结论无效 |
| 🆕 我 grep 到了/没到 | grep -c 返回数字 |
对照组 + 查法本身要验:sed -n '/^function X/,/^}/p' 在多行函数签名上会截断;用文案当锚会命中自己写的注释 |
| 降级保护有效 | 写了 try/except | 注入必错 SQL,看主流程还活不活(PG 里语句失败会让整个事务 aborted,不 rollback = 假降级) |
| 🆕 外部系统的状态 | 拿本地字段推测 | 对着外部系统的真实反应做。8-16 拿"本地金额变没变"猜微信记着多少 → 治不了脱节的存量单,白发一版 |
| 接口能用 | service 层单测全绿 | 真打 HTTP |
| 前端改动生效 | 页面返回 200 | 抓 JS chunk 比对指纹 / 真渲染 |
| 🆕 测试红了是不是我干的 | 看名字像不像 | 单跑 + 撤改动再跑。本套件在全量下天然不稳(共享真库、顺序相关),同代码连跑结果都不同 |
| 🆕 效果图没问题 | 我渲染出来了 | 用 Read 把图看一遍。8-17 表格并排半栏 → 列被挤窄、文字全换行,与真实页面不符 = 失真 |
| 🆕 溢出自查 0 | 脚本报 0 | 先把绝对定位装饰藏起来再量 —— 「新增」标签这类会把父容器 scrollWidth 顶大,报假阳性 |
| 长官能打开链接 | 我自己 curl 通了 | 给公网域名 |
| 数据是真实的 | 库里有 N 行 | 看创建时间 / 是不是测试渠道(🆕 本地库 8-17 已清空,现在要自己造数据) |
| 功能做完了 | 后端接口+测试都绿 | 前端有没有渲染 |
| 发版成功 | 脚本 exit 0 | 流水线出现新 run + SUCCESS(🆕 8-17 run#167 就是 FAIL) |
| 没破坏别的 | 全量跑绿 | 与基线逐条比对失败清单 |
closed_by 加了指向 users 的外键。本地超级用户跑得通,test 上 permission denied → 整支回滚 → 三列一个没加,而新代码已上线 → 机构详情 500。git stash 撤改动做基线对比,但工作区干净时 stash 是空操作 —— 那次比对完全无效,差点把自己打穿的测试当成"既有红灯"。sqlalchemy asyncpg greenlet fastapi httpx pytest alembic dotenv reportlab apscheduler passlib;本地 PG 在 127.0.0.1:5432/doctor_ai_braincd settlement/backend && SETTLEMENT_JWT_SECRET=local-test-secret python3 -m pytest tests/contract/settlement -qDATABASE_URL='postgresql+asyncpg://postgres:postgres@127.0.0.1:5432/doctor_ai_brain' python3 -m alembic upgrade head~/backups/db-20260817-0303/sudo test-inspect ps|health|trace|ls|envkeystrace settlement-api = 异常类型/消息/出错位置(源码行已剥离)。刻意不给 logs~/render-env/browse.js(--script 要 module.exports = async (page, log) => {},URL 要 file://)--noproxy)copy_from_query 导 CSV)status # 开局:分支/工作区/流水线/卡点
release-test "标题" # 发版(判据内置)。🔴 不要用 sudo release-to-test
deliver 文件名 # 交付:公网链接
sudo test-inspect trace settlement-api # 看 test 异常
⚠️ release-test 有个已知坑:推完只等 75 秒,桥没同步完会报「跟 test 一致·无需发版」。
发版前先确认:git ls-remote /srv/git/mirror.git refs/heads/<分支> 的 SHA == 本地 HEAD。
| 项 | 状态 |
|---|---|
| 主线 | 门店签约并行化 v2 · 微信支付(批 B) |
| test | ✅ 已全量发(最新 MR #419 / settle-test run#168 SUCCESS,08-17 04:00) |
| 待发 | 0(分支与 test 一致) |
| 分支 | feature/wechatpay-pay-core |
| worktree | /home/dev2/doctor-ai-brain/.claude/worktrees/bridge-cse_01AcGpTe1nKXvLXiYNPAGF53 |
| 生产 | 未动。发生产:sudo release-to-prod --mr <编号> |
| 数据库 | 结算独立 alembic(alembic_version_settlement),head = phase68_003_store_closed |
接手第一件事:等长官验收反馈,别自己发版。
price_name / 机构详情 product_name(⚠️ 两个接口字段名不同,既有现状,统一要动前端,未做)is_out_trade_no_conflict)rate/update、service-rates/update,PC+手机端共用);并加反方向 —— 一级不许调到比名下二级还低,报错一次列全所有踩线的二级detail)service_order_id,库里实查为 NULL)→ 走「同机构 + 首次开通」约定关联DialogFrame 加限高 + 内容区滚动(标题栏和关闭按钮固定)已过:① 老机构显示已支付 ② 修改资料收起付款卡 ③ 付款页价目/席位加减 ④ 渠道预填 50/30 + 409 拦截 ⑤ 退款操作人 ⑥ 商品名 ⑦ 微信支付能付成功
还剩(完整清单:~/reports/batchB-acceptance-checklist-20260817.md):
1. 手机端机构列表筛选
2. 收款管理:筛选是全量筛、操作后有提示条
3. 机构详情:撤掉支付块后没别的问题
4. 服务管理:金额列 + 详情里支付明细(在合同下边)
5. 真付一笔 → 渠道收益按新口径(一级只拿差额)
6. 关闭机构全流程 + 详情顶部两行红条
7. 详情弹框内容长时能竖着滚
price_name / product_name)统一test_channel_management 13 条是最大头,都是基线就红,CI 不跑 pytest 所以长期没人管 → 建议专门清一天IN(全部 id) 没分批 —— 8-17 本地库撑爆时暴露的真隐患(生产渠道量远达不到,但值得单独立项)settlement_statements.total_amount 与红字冲销)settle-prod 流水线源 + 支付授权目录填 https://chat.tongban.love/(必须 https)git stash 对干净工作区是空操作 → 假基线,差点误判sed 截取多行函数签名会截断 → 误报"没改到"📌 共同点:判据选错、或没查就说。第 0 节那张表就是这么来的。