# 社交展示与登录手机号要求

当前展示和操作规则以 2026-10-12 的产品确认及前端实现为准。

## 展示与操作

- 未绑定手机号的已登录账号完整显示导航、私聊/群聊/团队对话、官方开发团队入口、快速添加和转发对象。世界列表、作者主页、帖子正文、图片、评论、通话历史均按既有权限正常读取，不按手机号隐藏或替换页面。
- 只有明确提交社交操作时检查绑定并提示：世界发布、评论/回复、世界表态、私聊/群聊/团队发送、添加联系人、建群/邀请、创建/加入团队或社群、发起通话、声纹邀请、向他人共享/转发录音。浏览、已读、撤回/取消、删除、个人记录、录音和 AI 保持原规则。
- 提交社交操作时复用当前账号已确认的本地绑定状态，不等待完整资料刷新。缓存过期后台重新获取，查询失败保留原状态和成功确认时间；首次没有缓存时才等待有限时读取，失败不等同于未绑定或已绑定。缓存按账号/环境隔离，账号切换中断检查，旧响应不得向新账号提交。缓存只用于 UI 提示，不替代业务服务端权限校验。
- 提示复用现有确认弹窗，提供“去绑定”和“暂不绑定”。取消后保留原页面和草稿；去绑定打开现有账号设置。完成绑定后由用户再次提交，不自动重放发布/发送。
- 绑定/解绑命令确认成功后立即更新绑定快照，不等待后续资料展示刷新；同源窗口通过持久快照同步。前台刷新调度与并发读取共享同一 UI store，后台页面不轮询。
- 世界发布在上传图片前检查；消息在消费草稿前检查。所有限制均为插件 UI 操作反馈，不增加 Host/SDK/Tool 权限接口。

## 后端对接边界

本次没有修改或部署后端。客户端提示不能代替服务端权限校验；如果需要跨 App、SDK、Agent 一致执行，后端同事应在明确的社交写接口校验手机号，并保留合法浏览接口和个人数据操作。建议统一返回可识别的“需绑定手机号”错误，同时验证已有的官方团队消息接口对未绑定账号可正常读取。线上接口的实际部署与真实账号读写验收仍需独立确认。

## 登录要求

登录与社交展示分别处理。插件登录是否必须绑定手机号，由账号服务既有 `get-user-info.phone_binding_policy.mode` 决定，浏览器不再按“手机号为空”重复裁决。

启用后端既有强绑配置时，注册时间早于 `effective-at` 的未绑定账号返回 `none`，正常登录后可浏览全部功能，仅在提交社交操作时按上述规则提示绑定；注册时间不早于分界的未绑定账号返回 `required`。已绑定账号正常登录。`deadline-at` 保留既有响应及配置校验兼容，不再把分界日前的老账号转为强绑。配置关闭时登录不要求绑定，但客户端社交写操作仍按真实绑定情况提示。

后端不可用或响应缺少策略不能被解释为“已绑定”。已绑定且存在既有资料缓存的账号保留原有离线启动路径。绑定成功后的确认检查真实手机号事实，而非仅检查登录是否允许。

## 能力面

| 能力面 | 处理 |
| --- | --- |
| UI | 完整展示、提交时核对绑定和操作提示，沿用既有登录与账号设置入口 |
| Host owner | Auth/Profile 消费账号服务的登录决定，账号切换沿用统一 session owner；无社交 API 拦截 |
| Tools | 无新增工具；原注册、授权与业务执行保持基线，登录状态复用 Host owner |
| SDK | 无新增方法；既有 auth/profile 返回值反映账号服务决定，不暴露凭据 |

## 发布

需要配套合并 `jotmo-backend` 的注册分界修正，以及 Flutter、插件和治理文档分支。建议先部署账号服务，再发布客户端。生产分界应核对既有 `phone-binding.effective-at` 为 2026-09-10，且 `enabled` 已开启；本任务没有新增配置项、表、集合、索引或数据迁移。

插件版本沿用基线，本任务不手动升版。正式包验收、真实测试服 UI 验收、短信供应商与各原生平台验收分别记录，不互相替代。
