新会话读完本文即可接手,不需回溯对话。 取代
CLOUD-SESSION-HANDOFF-20260817-v2.md。🔴 第 0 节必须先读完再动手 —— 长官原话:「每次换新会话就会变傻就会经常犯错,这个一定要教好。」
你不是不知道,是手边没有上一会话查过的事实,于是用推测填空 ——
推测听起来跟事实一模一样,长官分不出来,只能等踩坑才发现。
每一行右边那列都是真事故换来的。带 🆕 的是 8-17 白天到深夜这一轮新交的学费。
| 事情 | ❌ 假判据 | ✅ 真判据 |
|---|---|---|
| 后端改动没问题 | 静态检查 / import ok | 本地真库真跑(🔴 CI 不跑 pytest) |
| 🆕 跑全量测试 | 直接 pytest | 先起核心服务 8010,否则 13 条必红(见 0.4) |
| 🆕 没弄坏别的 | ~~与基线失败清单比对~~ | 全绿(8-17 已把 25 条老红灯清零,基线现在是 0 红 760 绿) |
| migration 没问题 | 本地 upgrade 成功 | 本地是超级用户权限比 test 大。碰核心表(users/organizations)或建外键先停 |
| 🆕 探针打对了地方 | 页面返回 200 | 必须带 /settlement/ 前缀。少前缀的 URL 也返 200,但那是主仓死页面、装着几天前的旧代码 |
| 🆕 chunk 指纹 0 命中 = 没上线 | 新串查不到就下结论 | 先查对照组(改前就存在的串)。对照组也 0 = 探针打错地方,不是发版失败 |
| 🆕 用函数名做 chunk 指纹 | grep 函数名 | 生产构建会压缩函数名 → 用中文文案或 chunk hash 变化 |
| 🆕 改了 nginx conf 就生效 | 流水线绿了 | CI 不 reload nginx!要 root 跑 nginx -t && nginx -s reload(test/生产各一次) |
| 降级保护有效 | 写了 try/except | 注入必错 SQL 看主流程活不活(PG 里语句失败会让整个事务 aborted) |
| 🆕 测试红了是不是我干的 | 看名字像不像 | 单跑 + 撤改动再跑。撤改动要先 grep 确认真撤掉了(git stash 对干净工作区是空操作) |
| 🆕 删干净了 | grep 关键词 0 命中 | 剥注释的正则会被 JSX 的 image/* 咬掉整页 → 断言标识符就用原文匹配 |
| 🆕 大段连删安全 | 编译过了 | 逐块精准删,每块删完立刻 tsc/esbuild(连删会误伤夹在中间的常量) |
| 🆕 功能删干净了 | 按钮/接口都处理了 | 连引导文案一起查:摘了按钮却留着"请重新上传",用户照做必失败 |
| 🆕 效果图没问题 | 我渲染出来了 | 用 Read 把图看一遍 + 结构必须扒现网代码(凭印象画的支付卡被长官当场退回) |
| 🆕 溢出自查 0 | 脚本报 0 | 先把绝对定位装饰藏起来再量;帧宽压窄会造成失真,宁可换 2×2 布局也别压窄 |
| 长官能打开链接 | 我自己 curl 通了 | 给公网域名 https://dev-tokyo.tail3912a6.ts.net/<文件名>(内网 8812 那条长官打不开) |
| 功能做完了 | 后端接口+测试都绿 | 前端有没有渲染 |
| 发版成功 | 脚本 exit 0 | 流水线出现新 run + SUCCESS |
changguan-rules 记忆。127.0.0.1:5432/doctor_ai_brainbash
cd 仓库根 && source /tmp/core-env.sh # 丢了就重建,内容见 cloud-machine-facts 记忆
nohup python3 -m uvicorn app.main:app --host 127.0.0.1 --port 8010 > /tmp/core-8010.log 2>&1 &cd settlement/backend && SETTLEMENT_JWT_SECRET=local-test-secret \
CORE_API_BASE=http://127.0.0.1:8010 SETTLEMENT_SERVICE_TOKEN=local-core-bridge-token \
python3 -m pytest tests/contract/settlement -q -p no:randomlysudo test-inspect ps|health|trace|ls|envkeys(刻意不给 logs)~/render-env/browse.js(--script 要 module.exports = async (page, log) => {})--noproxy)· 前端类型检查:settlement/web 下 npx tsc --noEmitstatus # 开局:分支/工作区/流水线/卡点
release-test "标题" # 发版(判据内置)。🔴 必须长官现场令
deliver 文件名 # 交付:公网链接
sudo test-inspect trace settlement-api # 看 test 异常
⚠️ release-test 已知坑:推完只等 75 秒,桥没同步完会误报「无需发版」。
发版前先确认:git ls-remote /srv/git/mirror.git refs/heads/<分支> 的 SHA == 本地 HEAD。
| 项 | 状态 |
|---|---|
| 主线 | 门店签约并行化 v2 · 微信支付 |
| 批次 | A/B/C/D 全完成,只剩 批 E |
| test | ✅ 最新 MR #428 / settle-test run#177 SUCCESS(08-17 20:58) |
| 待发 test | 0(分支与 test 一致) |
| 生产 | 🔴 未动,42+ 个 MR 压着(#381~#428) |
| 分支 | feature/refund-status-and-dup-pay-guard |
| worktree | /home/dev2/doctor-ai-brain/.claude/worktrees/bridge-cse_01RoE2gnThW8Ly5QCNpU2hCY |
| 测试基线 | 0 红 / 760 绿 / 12 跳过 |
| 数据库 | 结算独立 alembic,head = phase69_000_review_guard |
batch-bcd-hard-facts 记忆product_name42+ 个 MR(#381~#428)。前置三件:
1. 切 settle-prod 流水线源(root)
2. 微信支付授权目录填 https://chat.tongban.love/(必须 https)
3. 🔴 生产 nginx reload(root)—— 台账 SOP 已设门禁,发版会提醒
工具:sudo release-to-prod --mr <编号>,必须逐个点名,禁止直接 MR test→main
拿真机数字(现有 200 并发数据是云机本机模拟的)
IN(全部 id) 未分批(一条 SQL 塞全部渠道编号,上限 32767;生产量级暂达不到)/settlement/ 前缀),差点误判发版失败 —— 靠对照组救回📌 共同点:判据选错、或没查就说、或授权外推。第 0 节那张表就是这么来的。