# 手机号注册禁用号码复用开发方案 ## 1. 需求结论 手机号注册流程中,手机号是账号主身份,不应进入普通号码复用、白嫖复用、自动白嫖复用、优先号码等复用链路。邮箱注册流程中的手机接码才是附加验证资源,才允许复用。 本次开发目标: 1. 手机号注册模式下,复用相关功能自动显示为关闭并禁止修改。 2. 切回邮箱注册模式后,恢复用户原本保存的复用偏好。 3. 后台运行时必须有硬约束,不能只依赖 UI 禁用。 4. 手动白嫖保存入口必须阻断手机号注册身份,避免绕过 UI。 5. 测试覆盖普通复用、白嫖复用、优先号码、设置保存和消息入口。 ## 2. 设计边界 ### 2.1 符合要求的部分 - 手机号注册时禁用复用符合身份模型:手机号是账号标识,不是后续 add-phone 验证资源。 - 邮箱注册时恢复复用符合用户预期:用户原本的复用配置不应因为临时切到手机号注册而丢失。 - 后台硬约束是必要的:自动运行、导入配置、消息入口都可能绕过侧边栏状态。 ### 2.2 需要避免的缺陷 1. 只改 UI 不改运行时:仍会被自动运行或消息入口绕过。 2. 切到手机号注册时把配置永久写成 false:切回邮箱注册后用户偏好丢失。 3. 只禁用普通复用,不禁用白嫖复用:白嫖复用优先级更高,仍会污染手机号身份。 4. 只禁用白嫖开关,不禁用手动记录按钮:用户仍可把手机号注册订单写成白嫖资源。 5. 忽略优先号码:优先号码本质上也是复用,应在手机号注册模式下不参与。 6. 清空复用池:这会破坏邮箱注册模式下的历史资源;本次只做有效禁用,不主动清空。 ## 3. 开发清单 ### 阶段 1:后台运行时复用边界硬约束 目标: - 新增统一判断:当前状态是否为手机号注册身份流程。 - 手机号注册身份下跳过普通复用和优先号码。 - 手机号注册成功后不写入普通复用池。 - 手机号注册身份下不触发白嫖复用保存、白嫖终态跳过、自动白嫖 handoff。 自检项: - `prepareSignupPhoneActivation` 不会复用旧号码。 - `finalizeSignupPhoneActivationAfterSuccess` 仍会正常完成接码订单,但不保存为复用资源。 - Step9 边界场景即使状态误带手机号身份,也不会走普通/白嫖复用。 - 不清空原有邮箱模式复用资源。 - 无拼写错误、无乱码、无无关重构。 ### 阶段 2:侧边栏 UI 有效禁用与偏好保留 目标: - 手机号注册模式下普通号码复用、白嫖复用、自动白嫖复用显示关闭并禁用。 - 优先号码和白嫖号码运行态入口在手机号注册模式下不可修改。 - 切回邮箱注册时恢复 `latestState` 中保存的原始偏好。 - 保存设置时不把手机号模式下的 UI 强制 false 写回持久配置。 自检项: - 手机号注册切换时控件不会闪回可用。 - 邮箱注册切回后复用偏好恢复。 - 自动运行锁和手机号注册锁不互相覆盖。 - 变更不影响 provider 切换、价格区间、接码展开折叠。 - 无 UI 文案乱码。 ### 阶段 3:消息入口与手动白嫖保存拦截 目标: - `SET_FREE_REUSABLE_PHONE` 在手机号注册身份下返回明确错误。 - `SAVE_SETTING` 在手机号注册有效模式下忽略复用开关改动,保留历史偏好。 - 后台约束与 UI 约束一致。 自检项: - 侧边栏按钮和外部消息都无法在手机号注册身份下保存白嫖号。 - 邮箱注册模式下原行为保持。 - 不影响清除白嫖号码能力。 - 不影响导入旧配置的兼容读取。 ### 阶段 4:测试覆盖 目标: - 补充 phone verification flow 测试。 - 补充 sidepanel 设置保存测试。 - 补充 message router 保存拦截测试。 自检项: - 手机号注册不读取普通复用。 - 手机号注册不读取白嫖复用。 - 手机号注册不自动保存白嫖资源。 - 手机号注册保存设置不会覆盖邮箱模式复用偏好。 - 邮箱注册复用路径不回归。 ### 阶段 5:全面审查与提交 目标: - 运行相关测试。 - `git diff` 审查每个改动点。 - 检查中文文档和 UI 字符串没有乱码。 - 检查没有误改无关文件。 - 使用中文提交信息提交代码。 自检项: - 相关测试通过。 - 没有遗留调试代码。 - 没有破坏当前工作区的其他改动。 - 提交内容只包含本需求相关文件。 ## 4. 完成标准 本需求只有同时满足以下条件才算完成: 1. 手机号注册模式下所有复用链路运行时失效。 2. 手机号注册模式下侧边栏无法修改复用相关控件。 3. 切回邮箱注册后原复用偏好恢复。 4. 白嫖复用不能通过手动消息入口绕过。 5. 单元测试覆盖新增边界。 6. 全面审查无设计缺陷、边界遗漏、乱码和无关改动。 7. 最终使用中文提交信息完成 commit。