dev2 · 2026-08-20 · 分支
feature/signup-fixes-5items· 5 个 commit · 工作区干净
所有证据均为本机真跑输出 · 云机环境·非验收证据
| 项 | 结果 |
|---|---|
| 全量结算测试(我的分支) | 828 passed / 8 failed / 17 skipped |
与 origin/test 基线逐条 diff |
🔴 零新增失败,反而修好了基线的 2 条 |
前端类型检查 tsc --noEmit |
0 错误 |
| 迁移真跑 | ✅ alembic upgrade head 通过 + SQL 真查列已建 |
| 工作区 | 0 未提交 · 领先 origin/test 5 个 commit |
基线 10 条红 → 我的 8 条,diff 只有减少、没有增加:
1,2d0
< test_channel_management.py::test_admin_can_create_channel_with_main_account_and_one_time_password
< test_channel_management.py::test_reset_password_invalidates_old_password_and_requires_next_change
⚠️ 这 2 条为什么在基线上红,要说清:结算测试打的是真核心 API,
而我起的那个核心服务跑的是我改过的 6 位密码代码。基线的测试仍断言「≥12 位且含字母」,
所以对着新核心必红。不是基线本身坏了,是"新核心 + 旧断言"的组合。
我的分支两边都改了,所以绿。
剩余 8 条全部在基线红清单内(结算调度 3 条 / 二级渠道 2 条 / 菜单权限 2 条 / 安全 1 条),
与本次改动无关。
df9b5ee7真因(实锤):2026-08-17 后端给 review-exchange 加了 contact_phone 必填
(store_signup.py:256-261),调用方 signup/page.tsx 没跟着补 ⇒ 每次刷新必 401
⇒ 被 if (!ok) return entry 静默吞掉 ⇒ 状态永远停在提交那一刻。
🔴 影响面比长官报的大:不只「已关闭」显示错,资料通过 / 驳回 / 已开通全都不刷新。
改法:
- 补传 contact_phone(entry 里本来就存着,页面上也显示)
- Promise.all 并发 → 串行;400(号对不上)/409(库里没留号)写进 localStorage,本机不再重试
—— 防 review_link_failed_attempts 累加撞 REVIEW_LINK_MAX_ATTEMPTS=5 把门店自己锁 10 分钟;
429 不记(它在加计数前就 raise,10 分钟自愈)
- 已关闭 → 按钮置灰;刷不出来的如实标注,不装作状态是新的
- 反查:另一处调用方 store-link-guard.tsx:102 本来就传了,无第二处漏网
1e50c611没直接改公共 class。store-progress-foot 两端共用,渠道端
store-progress/page.tsx:625 靠 channel-h5.css:872 的 display:flex + space-between
做卡片底行 —— 那条 flex 正是这行没居中的真因(text-align 管不到 flex 项位置)。
单加 --center 修饰类,渠道端 0 改动(已 verify)。
49c8753f长官定:纯展示、后台手填、没填不显示括号、只在签约第一页。
不实现自动涨价、不做自动计算。
phase72_000_price_seat_labels(手写,非 autogenerate)price_changed 判定 —— 只改席位数不该记一笔"改价历史"null(= 清空),不发 0(0 会显示成「余0席」)迁移真验:
alembic_version_settlement = phase72_000_price_seat_labels
current_price_seats | integer | YES
original_price_seats | integer | YES
存量 2443 行 unit_price 未受影响,新列按设计留空(留空=不显示,无需 backfill)
808af269🔴 核心侧必须动(第一版方案说"不用动"是错的):密码有两条产生路径,
建号那条结算侧能传明文进去,重置那条传不了(ChannelPasswordOpPayload 的
reset 分支没有可传密码的字段)。只改建号 ⇒ 重置仍发 14 位,自相矛盾。
改核心 _generate_one_time_password 一个函数即可,全仓仅 2 个调用点、都是渠道专用,
不影响席位/平台/门店。
⚠️ 原实现是 while True + "必须含字母",纯数字下该条件永不成立会死循环 → 整体重写。
细节:后端逐字符比 ASCII、前端用 /^\d{6}$/ —— str.isdigit() 对全角
「123456」和上标「²」返 True,存得下却未必输得回来。已加断言钉住。
连带修的测试(不修就打穿):建号断言 / 重置断言 / 改密用例的新密码
(validate_channel_password 在函数第一行跑,早于旧密码比对,给不合规值就
测不到「旧密码不正确」那条路)。
e5fe7fdc前置条件实测已满足:test(已完成 105/已取消 6/待付款 5)与生产(已完成 10/已取消 2)
都没有「待确认金额」;结算迁移已到 phase71 > phase70。
摘 4 文件 5 类。全仓残留 0(对照组:基线仓同串 9 处命中,证明查法有效)。
JSX 闭合带基线对照:section 基线 2/2 → 现 1/1(正是摘掉的那个),div 差值两边同为 0。
doctor_ai_brain),而 test_channel_management.pyservice_prices 有 2443 行(测试污染累积),与生产 1 行不同,按长官令:已完工,未发版。 说发我再发 test。
云机环境 · 非验收证据。