交付出件箱

← 返回出件箱

云机会话交接 · 2026-08-19 深夜(结算 25 件 + 核心 1 件全部上 test)

新会话读完本文即可接手。 取代 CLOUD-SESSION-HANDOFF-20260818-v3.md。
长官原话:「每次换新会话就会变傻就会经常犯错,这个一定要教好。」
⚠️ 第 0 节不是客套话,是当天真事故换来的,先读完再动手。


0. 🔴 今天我自己犯的错(下个会话最容易重蹈的)

0.1 grep 影响面有两个盲区 —— 我因此引入 2 个回归,都发到 test 才发现

任务是把库值「待线下付款」的显示名改成「待付款」,要找出所有"拿显示名比对"的地方。

盲区 我怎么栽的 后果 怎么防
目录范围不全 grep 了 admin 和 store,漏了 platform(平台手机端) 审核通过后「驳回资料」按钮消失 一律 grep -rn 'xxx' web/app,不限定子目录
值被拼接藏起来 老词写成 ["待","线下","付款"].join(""),明文 grep 一次都不命中 审核已过的机构顶部误显示「待资料审核」 另扫 \["待" / join("") / 模板拼接

🔴 第二个是怎么抓到的:发版后做 chunk 指纹,「待线下付款」期望 0 实得 1。
我没当噪音放过,顺着压缩代码反查才挖出来。
以后凡"期望 0 实得 1",差 1 处都要追到底。

0.2 静态全过、一跑就 500

给收款接口加筛选时插错位置,写出 stmt = ( ) 空元组把查询覆盖掉。
ast.parse 过了、uvicorn 起来了、/health 200 —— 只有真打业务接口才 500。
⇒ "能启动"什么都不证明,后端改完必须真打接口。

0.3 判断"我改坏没":必须当场开干净基线同期跑

本地库越跑越脏(我一天跑了十几轮全量),早上的失败清单到晚上就不作数。
正确姿势:git worktree add /tmp/baseX origin/test → 跑同样命令 → 逐条 diff。
今天三次靠这招洗清嫌疑(53/56/40 条失败全都与基线逐条一致)。

0.4 后端字段 Optional ≠ 前端不必填

长官问"地址为什么不加",我答"门店端也不强制" —— 错的,那是我看后端 Optional 推断的。
一查前端:review/page.tsx:512 明明白白 errors.address = "请填写机构地址"。
后端可选只因为第一页(先付款那步)不收地址。
⇒ 判断"必填不必填",去看前端表单校验,别看后端字段定义。

0.5 称呼与表情(今天第三次被长官点名)

长官要简体「长官」+ 表情,每条都要。
🔴 触发场景已摸清:一个回合工具调用超过 5 次,人就滑进"技术汇报模式"整个忘掉。
⇒ 发出前专门停一下扫开头。详见 [[changguan-rules]]。


1. 今天做完了什么(26 件,全部在 test 上)

结算系统(分支 feature/signup-v3-prepay-first · MR #464→#475 · settle-test run#218)

长官真机边验边报,25 件:

类 内容
显示名漏改 「待提交资料」→「资料待补充」四端补齐;「待线下付款」→「待付款」四端统一(库值一律不动)
状态错判 🔴 渠道端「有到账确认 ≠ 资料齐了」——「先付款后补资料」打破老前提,资料线优先
五步重排 提交建档 → 完成付款 → 补充资料 → 资料审核 → 账号开通;付款那步只认到账记录
代填 平台手机端加「编辑资料」入口(四类资质各自多选上传);全齐后自动转「资料待审核」
门店端同口径 缺附件能提交、状态不转 + 提示还差哪几类
筛选 三页加「渠道类型」;收款撤「付款方名称」;渠道端摘死项「待确认到账」「付款已驳回」
付款标签 渠道端卡片加付款状态(上机构状态/下付款状态),口径改用与平台端同一个函数
签约页 手机号限 11 位数字;重新进来不再弹授权;「再次购买」「继续查看」文案与尺寸
杂项 收款页统计行重复;驳回态按钮文案「提交」

核心系统(分支 feature/org-search-by-experience-store · MR #476 · test 链 run#527)

  1. 机构管理页加「体验门店名称」检索(与 8-09 席位用户名同一条路),条件带进席位页。

2. 🔴 现在必须知道的项目硬事实

2.1 两条部署链,别搞混

改哪儿 看哪条 命令
settlement/** settle-test sudo release-pipeline-status settle-test
主仓 app/ web/(核心) test sudo release-pipeline-status test

只看 test 线绿就报"发版成功"——8-13 栽过,8-19 又差点。

2.2 状态词:库值 ≠ 显示名

库里存 界面显示
待提交资料 资料待补充
待线下付款 待付款
已停用 已关闭

映射唯一出口:backend/app/services/settlement/store_status_display.py
🔴 前端 store.status 是显示名;status_raw 才是库值。拿显示名比库值 = 判断永远不成立(今天栽了两次)。
⚠️ 渠道侧 channels.profile_status 是另一张表另一列,同名但活着,红线不许动。

2.3 渠道类型不是数据库列

Channel.channel_type 是推导属性(models/settlement.py:176):
一级=层级1 / 平台直签二级=层级≠1且无上级 / 普通二级=层级≠1且有上级。
翻译唯一出口:services/settlement/channel_type_filter.py。

2.4 微信授权两种 scope(动之前必读)

2.5 云机验不了的几件事(如实说,别硬凑)

2.6 发版:git push 说 "Everything up-to-date" 会骗人

origin 的 push 地址(outbox)和 fetch 地址(mirror)是两个仓库。
东西进了 outbox 之后再 push 就一律报"已是最新",哪怕 Codeup 一个字没收到。
- 判据:git ls-remote /srv/git/outbox.git|mirror.git | awk '$2=="refs/heads/<分支>"{print $1}' 分开看
- 桥是 60 秒轮询,tail /var/log/git-sync.log 看到「转发 <分支>」才算过
- 日志时间戳断档 = 服务挂了(8-19 停了 1h45m),等多久都没用,直接找 root


3. 待办 / 待长官验收

3.1 请长官在 test 上验(云机验不了的)

  1. 微信打开签约第一页:手机号只能输 11 位数字、「立即支付」按钮大小
  2. 重新点链接进来 → 点「再次购买」应当不再弹授权(本次重点)
  3. 手机端「编辑资料」代填 + 传附件(五项文字+四类附件全齐才自动转「资料待审核」)
  4. 渠道端 4 项筛选(资料已驳回/待平台开通账号/已支付/已退款)—— 本地库无样本没验到
  5. 核心系统:机构管理页按「体验门店名称」搜(⚠️ test 库若没人填过该字段会是空的,
    先去席位页给某席位填个门店名再回来搜)

3.2 挂着的

3.3 给团队的测试指南(已发)

~/reports/minicup-signup-test-guide.md → https://dev-tokyo.tail3912a6.ts.net/minicup-signup-test-guide.md
(单人独立走完整流程 · 九步 · 每步写了"应该看到什么")


4. 环境速查

# 结算后端(本地真库)
cd settlement/backend
DATABASE_URL="postgresql+asyncpg://postgres@127.0.0.1:5432/doctor_ai_brain" \
SETTLEMENT_SERVICE_TOKEN=dev-test-token SETTLEMENT_JWT_SECRET=dev-secret \
~/venvs/dab/bin/python -m pytest tests/ -q

# 核心后端(主仓根目录)
DATABASE_URL=... JWT_SECRET_KEY="<≥64字节>" ~/venvs/dab/bin/python -m pytest tests/contract tests/api -q

# PG 起法(共享内存段丢了会连不上,重启即可,数据在磁盘)
~/venvs/dab/lib/python3.10/site-packages/pgserver/pginstall/bin/pg_ctl -D ~/pgdata start

# 查 test 库(只读)
sudo db-query test "SQL"

云机环境 · 非验收证据。