games-development-ai/docs/agent-specs/_archive/2026-06-10-真实鉴权与匿名玩家-review.md
zizi 7f24a344d0 docs(agent-specs): B2 归档——64 个闭线工作记录移入 _archive/,热目录顶层 90→26
承接目录治理:上轮只压缩内容未减文件数,闭线工作记录仍平铺致目录看着仍一堆(创始人指出)。本次执行 B2 归档。

64 个 ≤06-15 闭线档(25 压缩桩 + 闭线 review/report/纪要/edit-plan)git mv 入 docs/agent-specs/_archive/(文件名不变、仍 git 跟踪可查)。热目录 ≤06-15 仅留 13 活档(决策/纲领/SoT/活spike)+13 个 06-16 在飞。

活资产 20 处旧路径引用(.agents/docs/memory/_index)同步改 _archive/,引用断裂复测=0;_index 活地图 + 治理档状态收口。约束:0 个 06-16 被移、orchestrator 等未跟踪在飞档零误纳。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:26:19 +00:00

29 KiB
Raw Blame History

真实鉴权与匿名玩家身份 — 评审版(创始人拍板用)

文档类型:Review(结论先行,供拍板;定稿后另出 execution 版) 日期:2026-06-10 | 状态:✅ 已拍板(2026-06-10 创始人七项全拍,结果见 §9.1)→ 待出 execution 版排建设(建议 M-b 之后) | 作者:架构 Agent 关联:docs/agent-specs/2026-06-09-下一阶段路线-plan.md:79("真实鉴权…建显式 backlog"——本文即该 backlog 落实);A 轨种子名单(A2)到位即卡此件 修订记录:2026-06-10 双镜头评审(CEO+Eng)11 条意见全部采纳落稿——①拆准入拍板项(玩家注册 vs 创作白名单)并在漏斗图标明非白名单去向;②如实摊开"报备前玩家侧注册转化不可用"时序阻塞+短信报备今天进 A 轨闸门看板;③登录方式选项补全 B 权衡并增 C 混合项;④依赖改两级(短信=硬闸门/隐私文案=软前置)+P-ACC-02 口径调整声明;⑤⑨"与 glossary 完全对齐"改为显式变更声明;⑥保留期降为既定假设;⑦新增 §5A 匿名身份安全边界(伪造/刷量/bot 排除三联);⑧新增 R6 发码端点滥用;⑩计数口径修为 app 28 处/7 文件;⑪生产 profile 未建立注记;⑫平迁断言标注推断。意见原文核验:所有代码/文档引用均经本仓复读证实。


0. 结论先行

推荐方案乙:不复活 member 模块,在 huijing system 基座上做"最小玩家身份"——匿名免登读路径(刷 feed/试玩零门槛)+ 手机验证码登录发真 OAuth2 token(userType=MEMBER)+ 创作/发布种子期限 A2 白名单(玩家注册是否开放为独立拍板项);staging 的 mock(test1) 与真实鉴权天然并存、批跑不断,生产环境关死 mock。

  • 体量:后端薄层 + 前端登录页/守卫,AI 压缩后约 3–5 个有效工作日(推断),远小于复活 member(约 1.5–2 周,含裁剪与装配返工)。
  • 外部依赖分两级:硬日历闸门 = 生产短信签名报备(影响通道切换与玩家转化,今天即加入 A 轨闸门看板,行动项见 R2);软前置 = 隐私政策/用户协议文案(可占位文案过渡,正式拉新前须法务定稿,挂 A 轨;P-ACC-02 口径调整声明见 §3)。
  • 时序如实摊开:短信报备完成前,Debug 短信通道(验证码落库、后台查码、人工下发)只对 5 个已知种子创作者可运营;分享链路来的陌生玩家,运营不知道把码发给谁——玩家侧"互动触发一键登录→注册"在报备前实质不可用。种子期是否需要在报备前激活玩家转化漏斗,是本件最尖锐的拍板项(§9-2,与登录方式 §9-1 联动)。
  • 报备完成后切真实渠道≈配置切换、无二次改造,但有安全前置:发码端点必然免登,须先补按 IP/设备限频与图形验证码开关(现状为上游 TODO + captcha 关闭,见 R6)——不要把"切渠道"理解为纯配置动作。
  • 需创始人拍板的产品方向问题见 §9:登录方式与漏斗激活时机(联动)/ 准入语义(玩家注册、创作白名单分开拍)/ 游客转正机制 / 实名收集时点 / 匿名身份机制。

1. 背景与现状(亲核事实,标注出处)

1.1 mock 鉴权怎么 mock 的

事实 出处
huijing 框架原生 mock:mock-enable=true 时,token 以 test 开头即直造登录态,test1→userId=1;撤 mock=改一行配置,无代码改动 game-cloud/huijing-framework/huijing-spring-boot-starter-security/.../TokenAuthenticationFilter.java:117-129、SecurityProperties.java:34-40
校验顺序=先查真 OAuth2 token,查不到才走 mock——真实鉴权与 mock 天然可并存 TokenAuthenticationFilter.java:60-65
staging/local 均 mock-enable: true;tenant.enable: false(单租户);验证码关 huijing-server/.../application-staging.yaml:152-157
userType 按 URL 前缀推导:/app-api→MEMBER(1)(创作者/玩家),/admin-api→ADMIN(2)(运营) WebFrameworkUtils.java:105-122、UserTypeEnum.java:17-18
staging 批跑(黄金闭环 e2e、agent 化生成 QA 闭环)全依赖 Bearer test1 记忆 golden-loop-b1-done、game-studio/.env.staging:5

1.2 既有能力盘点(都在,不用新造轮子)

能力 现状 出处
C 端账号模块 member 已整体裁剪(11 个 demo 模块之一),无目录、server 引用被注释 game-cloud/pom.xml:16、huijing-server/pom.xml:96
OAuth2 token 服务 system 基座完备,user-type 无关:可直接发 userType=MEMBER 的真 token,框架过滤器原生校验 OAuth2TokenApiImpl.java:28、OAuth2AccessTokenCreateReqDTO.java:23
短信验证码 场景化验证码 API(MEMBER_LOGIN 场景已内置)+ 5 个渠道客户端(阿里云/腾讯/华为/七牛/Debug钉钉) system/api/sms/SmsCodeApi.java、SmsSceneEnum.java:19、framework/sms/core/client/impl/
管理端登录 game-admin 原生 Login.vue + system 账密/短信登录端点齐备,staging 已实证可用(20 真实用户) game-admin/src/views/Login/、AuthController.java、记忆 m1-runtime-bringup-state
前端匿名 ID ensureAnonId() localStorage 持久化;遥测上报已带 user:{userId, anonId} 双身份 game-studio/src/store/user.ts:10-24、src/telemetry/index.ts:143-160
遥测契约匿名位 UserVO{userId, anonId}("匿名 token 派生的稳定匿名 ID")契约已锁定 EnvelopeReqVO.java:61-66、contracts/events.schema.json
既定设计意向 "匿名玩家通过 framework 层扩展的匿名 Token 机制接入,只能浏览试玩、不能发布/收藏/进后台" .agents/knowledge/glossary.md:40

1.3 缺口与既有错位

  • app-api 无任何登录端点(member 裁剪后 C 端鉴权整体缺位);**app 控制器 28 处 getLoginUserId()(7 文件)**全靠 mock 喂身份,另有 admin 控制器 3 处(3 文件:AdminProjectController/ComplianceBanController/TradeAdminController)——admin 侧自 M1 起有真实登录,不在撤 mock 的 C 端回归面内(grep 实证,合计 31 处/10 文件)。
  • app-api 全部强制登录:feed/runtime/telemetry 无一处 @PermitAll(grep 0 命中)——今天"匿名刷 feed"实际不可能,靠 test1 掩盖。
  • 身份错位既有 bug:前端固定 userId='1001'(store/user.ts:30)vs 后端 mock test1→userId=1——同一行为遥测记 1001、互动落库记 1,数据归属已错位。这是 mock 的真实危害样本,真实登录后自然消除。
  • 前端无登录 UI、无路由守卫(views/ 无 login,router 无 beforeEach;setLogin/logout 已预留空挂点 store/user.ts:44-57)。
  • 产品口径:MVP 黄金链路第一步="创作者登录"(.agents/knowledge/mvp-scope-and-milestones.md:11);账号 owner=system 基座(需求模块映射.md:237,258);安全基线=OAuth2+JWT+Refresh 轮换 7d/30d、手机号脱敏、隐私政策注册前展示(.agents/rules/security-and-reliability.md:15,113,151)。

2. 目标

  1. 种子创作者真实登录:手机号验证码登录→创作→发布全链真 token,支撑 A2 种子名单到位即可试用(白名单只限创作/发布、内容风险可控;玩家注册是否开放为独立拍板项,见 §9-3/§9-4——两者语义不同,勿混)。
  2. 匿名玩家零门槛:不注册即可刷 feed、试玩、被遥测(短视频式体验);互动/创作才要求身份。
  3. 身份数据可衔接:匿名 anonId ↔ 登录 userId 可关联(登录事件绑定),点赞收藏归属真实 userId,为后续支付实名留好挂点。
  4. staging 批跑零中断:mock 与真实鉴权并存;生产关死 mock 并有负路径验证。

3. 非目标(明确不做)

  • 第三方社交登录(微信/抖音/小程序授权):MVP 不做;渠道版与小游戏提审闸门联动时再评。
  • 多租户:维持 tenant.enable=false 单租户;数据行保留 tenant_id=1 兼容,不开租户拦截。
  • 生产短信供应商采购与签名报备:属 A 轨日历闸门(记忆 mvp-binding-constraint-calendar-gates),不在本设计内,但是切真实短信通道的前提。
  • 防沉迷/学生账号(P-BIZ-11)、适龄分级展示(P-ACC-03):均 v2.0(产品需求清单.md:216,239)。
  • member 式运营包袱:积分/等级/签到/标签/分组;账号全功能(找回密码/换绑/注销)只留最小集(验证码登录天然免密码体系)。

口径调整声明(P-ACC-02 提前):隐私政策/用户协议展示(P-ACC-02)在产品需求清单中原排 v2.0(产品需求清单.md:238),但安全基线要求"隐私政策注册前展示"(.agents/rules/security-and-reliability.md)——本件验收标准 5 实质把它以占位文案形式提前到 MVP。处理方式:占位文案随注册页一并上线(软前置);正式文案法务定稿挂 A 轨隐私协议项,不视为 P-ACC-02 的 v2.0 全功能整体提前,避免与产品清单排期打架。


4. 方案对比(2 个可行 + 1 个反例)

维度 甲:复活 huijing-module-member 全量 乙:system 基座最小玩家身份(推荐) 丙:纯匿名 + 创作者借用 ADMIN 体系
做法 从上游恢复 member 模块(用户表/AppAuth/profile),裁掉积分等级等无关件 新增 game_player 表 + app 端登录端点;复用 system 的 SmsCodeApi+OAuth2TokenApi 发 MEMBER 真 token;读路径 @PermitAll+anonId 玩家全匿名;创作者用 system 账号走 ADMIN token
体量(推断) ~1.5–2 周:恢复+裁剪+M1 装配教训重走(repackage/Flyway/CommonApi @Primary,记忆 m1-runtime-bringup-state) ~3–5 天:后端薄层 + 前端登录页/守卫 + e2e ~1–2 天
单租户契合 member 自带租户/多端包袱,逆向裁剪 原生贴合,表带 tenant_id=1 即可 —
演进性 微信小程序登录等开箱(远期优势) 实名/转正/三方登录挂点预留;真需要 member 时迁移路径存在(推断:平迁成立条件=member_user 表从未启用、ID 段不冲突,且 OAuth2 token 内 userId 语义切换需迁移映射——成本待执行版评估) 死路:ADMIN token 调 app-api 被 userType 校验拒(TokenAuthenticationFilter.java:92-95),要么破坏 API 约定要么放宽安全边界
风险 大块外来代码引入审计面;MVP 窗口占用 fork 侵入面小(新增包路径隔离) 身份模型畸形:互动无归属、实名无挂靠,违背 glossary 既定意向
结论 远期备选(需要会员运营体系时再评) 采纳 仅作反例,否决

推荐乙的核心理由:①账号 owner=system 是三文档套件既定口径(Doc C:258),扩展落点与文档一致、零跨模块 RPC;②OAuth2/SMS/过滤器全是现成基座能力,新写的只有"一张表+三个端点+一个登录页";③匿名行为边界与 glossary 既定意向一致(只能浏览试玩、不能发布/收藏/进后台),但实现机制是对既定意向的显式变更——由"framework 层匿名 Token"简化为免登读+anonId(更克制;变更声明、安全代价与待回写文档清单见 §5 关键设计点 1 与 §5A),属文档级返工(glossary 词条+契约 anonId 描述需同步修订),无代码级返工。 落点工程细节(system 内扩展 vs 新薄模块 passport)不需创始人拍板,执行版评审定稿;倾向 system 内扩展(口径一致+零 RPC),备选新模块(fork 零侵入)。


5. 推荐方案乙:身份模型与关键设计

flowchart LR
  subgraph P[玩家侧(匿名优先,短视频式)]
    A["打开 game-studio<br/>本地 anonId(已有)"] -->|免登录| B["刷 feed / 试玩 / 遥测上报<br/>读路径 @PermitAll + anonId 透传"]
    B -->|点赞·收藏·支付 触发| C{"一键登录<br/>手机号+验证码"}
    C --> W{"准入判定<br/>(§9-3 玩家注册 / §9-4 创作白名单<br/>两个独立拍板项)"}
    W -->|"推荐语义:玩家注册开放<br/>任意手机号可注册"| PD["注册成真实玩家<br/>可点赞/收藏,不能创作/发布"]
    W -.->|"若拍'注册整体限 A2 白名单':<br/>非白名单手机号被拒<br/>=玩家转化漏斗第一跳即断"| X["流失(反例去向,<br/>仅当放弃种子期玩家增长才可接受)"]
  end
  subgraph CRE[创作者侧(创作/发布限 A2 白名单 §9-4)]
    PD -->|"手机号 ∈ A2 白名单"| D["game_player 创作者身份<br/>OAuth2 真 token (userType=MEMBER)"]
    D --> E["创作 / 发布 / 钱包<br/>app-api 默认强制登录(不动)"]
    E -->|提现前| F["实名收集<br/>挂 A 轨支付进件闸门"]
  end
  subgraph OPS[运营侧(现状即可用)]
    G["game-admin 原生登录<br/>system AdminUser (userType=ADMIN)"] --> H["admin-api 审核/运营"]
  end
  B -. anonId .-> I[("telemetry<br/>双身份可关联")]
  PD -. "登录事件绑定 anonId↔userId" .-> I

图注:白名单语义拆分——推荐语义为"玩家注册开放(漏斗存活)+ 创作/发布限 A2 白名单(内容风险收口)";非白名单手机号用户的去向=可注册、可互动、不能创作/发布。若创始人改拍"注册整体白名单",则虚线分支生效、匿名玩家转化漏斗在第一跳被设计性切断——该后果必须有意识地拍,不能默认。另:报备前该漏斗还受短信通道时序阻塞(见 §0 与 §9-2),与准入语义是两个独立断点。

关键设计点:

  1. 匿名玩家=免登读路径,不发匿名 token——对 glossary 既定意向的显式变更声明。feed 流/分享页/runtime 取包/遥测上报等约 7–10 个读端点加 @PermitAll,身份用前端既有 anonId 透传(契约已留位);广告曝光是计费链上游,是否进免登清单单独评审(见 §5A)。行为边界与 glossary 一致(只能浏览试玩、不能发布/收藏/进后台),但机制偏离既定意向"framework 层扩展匿名 Token"(glossary.md:40):偏离理由=免去匿名 token 签发/存储/续期厚度(token 存储量=真实登录用户,容量可控);安全代价=anonId 纯客户端生成、身份不可信,防伪造/刷量责任转嫁聚合侧(机制备选与归属见 §5A,§9-7 拍板);定稿后需同步修订的文档=glossary.md:40 匿名条目 + contracts/events.schema.json 与 EnvelopeReqVO 的 anonId 描述(现仍写"匿名 token 派生的稳定匿名 ID"),防止后续 agent 按旧意向去造匿名 token 机制。若 §9-7 拍 A(服务端匿名票据),机制回归 glossary 原意向、本变更声明作废。
  2. 互动是身份转化点。点赞/收藏(AppFeedController.interact,其注释已预埋"匿名互动 anon_id 为后续对接点")默认弹一键登录;是否做"匿名影子账号+转正合并"由创始人拍板(§9-5)。
  3. 登录方式一次成型,短信通道分级——但 Debug 通道只对创作者侧可运营。UI/API 首发即手机号+验证码(C 端习惯,复用 MEMBER_LOGIN 场景);种子期走 Debug 渠道(验证码落库,运营后台查码人工下发给 5 个已知种子创作者)。对分享链路来的陌生玩家该通道完全不可运营(运营不知道把码发给谁)——报备前玩家侧注册转化实质不可用,是否需要提前激活见 §9-2(选 B 账密或 C 邀请码旁路可绕开短信依赖)。短信报备闸门完成后切渠道≈配置切换、无二次改造,但须先落安全前置(IP/设备限频+验证码开关,R6),不是纯配置动作。
  4. telemetry 身份衔接。登录成功补发一条登录事件携带 anonId+userId;此后上报双带(前端已实现)——离线归因可把登录前行为串回同一人。
  5. 创作者实名链。game_player 预留 mobile/real_name/id_card_no(加密) 字段;MVP 注册只收手机号,实名收集后置到提现前(降低注册摩擦,与 A 轨 LLM 实名/支付进件闸门节奏对齐,拍板项 §9-6)。
  6. 单租户立场。维持 tenant.enable=false;新表带 tenant_id 默认 1,将来开租户无需改表。
  7. 既定假设(不进拍板表):匿名数据保留期默认 180 天。这是合规参数而非产品方向决策——默认值写入隐私政策草案,随 A 轨隐私协议法务复核时一并定稿;法务若调整,仅改清理任务配置与政策文案,不影响架构。

5A. 匿名身份安全边界(伪造 / 刷量 / bot 排除三联)

现状亲核(不粉饰):anonId 为前端 localStorage 随机串(game-studio/src/store/user.ts:10-24),可任意伪造、可批量铸造;telemetry 入口对它的全部"校验"只有 traceId 的 @NotBlank 存在性校验 + (traceId,event,ts) 幂等键(EnvelopeReqVO.java:41、TelemetryEventConsumer.java:12)——对变造 ts/traceId 的批量刷量无任何约束;game-module-telemetry/feed 现无任何 bot 排除/反作弊代码(grep 0 命中),技术架构与模块.md 亦无对应技术项。

利害关系(为什么不能含糊):遥测事件直接喂 quality_score→feed 推荐排序(数据回路已通,黄金闭环 B2);广告曝光事件后接 trade T+1 分账。伪造匿名事件可操纵推荐排序与未来真金分成——免登读路径放开前,这条边界必须先写明。

机制备选(§9-7 拍板):

维度 A:服务端签发签名匿名设备票据 B:纯客户端 anonId + 聚合侧异常剔除(建议种子期)
做法 首访由服务端签发带签名的匿名设备票据,anonId 服务端派生;可限频、可撤销、可加签发难度 维持现状 anonId 透传;聚合侧按 anonId/IP 维度做异常剔除
身份可信度 可信(伪造需破签名) 不可信(任意铸造),靠事后剔除兜底
实现厚度 +签发端点/密钥管理/前端改造(推断 +1–2 天) 最薄(前端零改动),种子期挂"聚合侧按 anonId/IP 异常剔除"最小桩即可
与 glossary 既定意向 贴合(即"匿名 Token"原意向,§5-1 变更声明作废) 偏离(需按 §5-1 走显式变更声明)

防刷归属(边界与 owner,拍板前即写明):

  • quality_score 喂入事件的异常剔除 → telemetry 聚合侧(owner=telemetry 模块);种子期最小桩=按 anonId/IP 维度异常剔除(阈值可粗暴),桩可薄、归属边界必须先立。
  • 广告曝光计费事件的反作弊 → compliance/ad 反作弊项(owner=compliance;技术架构与模块.md 现无此技术项,定稿后补列)。

广告曝光单独标注:它是计费链上游(T+1 分账依据),不是普通读路径——是否进免登 @PermitAll 清单单独评审;若进,必须同时挂聚合侧剔除桩+曝光校验(执行版定细节)。

落地依赖(执行版注明):@RateLimiter 所在 huijing-spring-boot-starter-protection 仅 huijing-server/system/bpm 引入,game-module-* 的 pom 均未依赖(grep 实证)——限频落地需先补该依赖。


6. 影响面

端 改动 说明
后端 game-cloud 新增:game_player 表(Flyway 新版本)+ app 端 3 端点(发验证码/验证码登录/我的信息)+ 准入开关(按 §9-3/§9-4 拍板语义配置);存量:读端点加 @PermitAll 注解与 anonId 入参(每处 1–2 行) 创作/交易/项目端点不动(默认强制登录即正确行为)。发验证码端点必然 @PermitAll:切真实短信渠道前须补 IP/设备限频+验证码开关(R6);限频依赖 protection starter,game 模块 pom 需补(§5A)
前端 game-studio 新增登录页(Vant)+ 路由守卫(创作/互动需登录,feed/play 放行)+ 401 统一拦截跳登录;store/user.ts.setLogin 已预留挂点 .env.staging 与 mock 回退逻辑保留不动
前端 game-admin 零改动(原生登录已可用) —
契约 contracts 新增 passport.yaml(登录/验证码/匿名约定);telemetry/events 契约已含 anonId 不动 契约先行(§6 工作协议)
staging mock-enable=true 保持:过滤器"真 token 优先、mock 兜底"天然并存,批跑 test1 零中断;新增一条"真 token 黄金闭环 e2e"并行验证 出处 §1.1
生产 mock-enable=false + mockSecret 随机化(防 test 前缀默认值);上线验收含负路径 框架注释明示"线上一定要关"(TokenAuthenticationFilter.java:110)。前置未点明项:huijing-server 现仅有 dev/local/staging 三份 profile(grep 实证),生产 profile 尚未建立——"生产关死 mock 负路径实测"挂生产环境部署轨,部署项落地后补测

7. 风险与兼容

# 风险 等级 缓解
R1 撤 mock 回归面:app 控制器 28 处 getLoginUserId(7 文件)依赖登录态(admin 侧 3 处自 M1 有真实登录,不在面内) 中 staging 不撤 mock,新增真 token e2e 并行跑;生产负路径验收(test1→401,挂部署轨见 §6)
R2 短信报备闸门延误(1–2 周不可压缩);且报备完成前玩家侧注册转化整体不可用(Debug 通道只对 5 个已知创作者可运营,陌生玩家无法拿码) 高 行动项(今天执行):短信签名报备加入 A 轨闸门看板——plan(2026-06-09 §2.A)看板枚举现无此项;含其自身前置:企业主体资质、部分供应商要求已备案域名(可能与 ICP 串联)。创作者侧 Debug 通道先行;玩家侧是否报备前激活走 §9-2 拍板(选 B/C 可绕开短信依赖)
R3 匿名读路径放开后的伪造/刷量:anonId 可任意铸造;telemetry 入口仅 traceId 存在性校验+(traceId,event,ts) 幂等键,对变造刷量无约束;伪造事件可操纵 quality_score 推荐与未来广告分账 中 限频:@PermitAll 端点接 huijing RateLimiter+Nginx 限频(呼应 T-CMP-31"登录安全与限频";game 模块需补 protection starter 依赖);身份机制与防刷归属见 §5A(种子期最小桩=聚合侧按 anonId/IP 异常剔除,机制 §9-7 拍板)
R4 前端 userId 1001/后端 1 错位(既有) 低 真实登录后 userId 以登录响应为准,错位自然消除;mock 路径维持现状不动(批跑兼容)
R5 fork 侵入(system 落点) 低 新增代码隔离在独立包路径,上游合并冲突面小;备选新模块零侵入
R6 切真实短信渠道后的发码端点滥用(短信轰炸/费用滥用——手机验证码登录经典攻击面):发码端点必然 @PermitAll;现状仅按手机号频控+日上限,按 IP 的每日/每小时限制是上游 TODO(SmsCodeServiceImpl.java:65-66),且 staging captcha.enable=false(application-staging.yaml:155) 中 切渠道的安全前置(与"配置切换"绑定排期,不可省):按 IP/设备限频 + 图形/行为验证码开关(需可一键启用);种子期 Debug 渠道+白名单下风险≈0,前置随切渠道一并落地,列入执行版

兼容性:API 前缀/userType 约定不变;既有契约零破坏;game-admin 零改动;所有新表带 tenant_id 兼容将来多租户。

8. 验收标准

  1. 真 token 全链:种子创作者验证码登录→创作→发布→审核→feed 可见,全程无 test1(staging 真 token e2e 证据)。
  2. 匿名零门槛:无登录刷 feed/试玩成功,遥测 anonId 落库;点赞触发登录引导。
  3. 身份衔接:登录事件含 anonId+userId;互动归属真实 userId(1001/1 错位消除)。
  4. mock 并存:staging 既有批跑(Bearer test1)零中断;生产 profile Bearer test1→401(负路径实测。注:生产 profile 尚未建立,此条挂生产环境部署轨,部署落地后补测,不阻塞本件其余验收)。
  5. 安全基线:refresh 轮换 7d/30d 生效;日志手机号/token 脱敏抽查;隐私政策注册前展示占位文案(P-ACC-02 原 v2.0 提前的口径调整见 §3 声明,正式文案挂 A 轨法务定稿)。
  6. 运营不回归:game-admin 原生登录链路冒烟通过。

9. 待创始人拍板项

表已按评审意见收敛与拆分:移除"匿名数据保留期"(合规参数,降为 §5 既定假设 7);原"种子期注册准入"因语义混淆拆为 #3/#4 两个独立项;新增 #2 漏斗激活时机(最尖锐)与 #7 匿名身份机制。#1 与 #2 联动拍,#3 与 #4 分开拍。

# 决策 选项与建议
1 首发登录方式(与 #2 联动) A=手机号+验证码(C 端习惯、一次成型;但报备前玩家侧转化不可用,种子创作者后台查码过渡);B=账密+邀请码(包袱:后续二次改造+密码找回体系;核心优势此前漏列:对玩家转化也零短信依赖,匿名→注册漏斗在短信报备闸门完成前即可激活);C=验证码为主+邀请码旁路(混合:创作者走验证码 Debug 通道,陌生玩家凭邀请码/口令注册,报备后旁路自然退役)。若 #2 拍"需要激活"→建议 C(或 B);拍"不需要"→建议 A
2 种子期是否需要在报备前激活玩家转化漏斗(最尖锐,决定 #1 走向) 是=分享拉来的路人在报备前就能注册互动,提前验证"创作者分享→玩家转化"假设 → #1 必须选 B 或 C;否=种子期只验证创作者闭环,玩家转化等报备落地(漏斗数据晚 1–2 周以上)→ #1 选 A 即可
3 玩家注册是否开放(影响匿名转化漏斗存活) A=开放注册(建议:匿名玩家点赞→一键登录→注册成玩家,漏斗不断;内容风险不在注册侧,在发布侧);B=注册整体限 A2 白名单(约 5 个手机号——非名单路人被拒,玩家转化漏斗第一跳被设计性切断,仅当种子期明确放弃玩家增长才可选)
4 创作/发布是否限 A2 白名单(影响内容风险) A=限 A2 名单(建议:内容上架风险收口在 5 个已知创作者,审核压力可控);B=开放创作(流量大但审核压力前置,种子期不建议)
5 游客转正机制 A=互动即弹一键登录(建议:MVP 最简,转化点清晰);B=匿名影子账号+转正数据合并(体验最顺滑,但合并逻辑贵,建议 v2.0 再评)
6 创作者实名收集时点 A=提现前(建议:注册零摩擦,与支付进件闸门对齐);B=注册即收(合规最保守,但伤种子转化)
7 匿名身份机制(安全边界,详见 §5A) A=服务端签发签名匿名设备票据(身份可信、可限频可撤销,贴合 glossary 原意向;+1–2 天);B=纯客户端 anonId+聚合侧异常剔除(建议种子期:实现最薄、前端零改动;代价=身份不可信、靠事后剔除兜底,并接受 §5-1 的 glossary 变更声明)

9.1 拍板结果(创始人 2026-06-10,七项全拍,均采推荐项)

# 决策 拍板结果
1 首发登录方式 C:验证码为主 + 邀请码旁路(创作者走验证码 Debug 通道;陌生玩家凭邀请码/口令注册零短信依赖;短信报备完成后旁路自然退役、全量切验证码)
2 报备前是否激活玩家转化漏斗 是·受限激活(邀请码旁路实现,与审计 R2「自有端=邀请制内测」定性自洽,提前拿「分享→转化」漏斗数据)
3 玩家注册是否开放 开放注册(受限激活期体现为凭邀请码注册;报备落地后转全开放,漏斗第一跳不断)
4 创作/发布是否限白名单 限 A2 白名单(内容上架风险收口在 ~5 个已知种子创作者)
5 游客转正机制 互动即弹一键登录(影子账号+转正合并留 v2.0 再评)
6 创作者实名收集时点 提现前收(注册只收手机号,与支付进件/LLM 实名闸门节奏对齐)
7 匿名身份机制 B:纯客户端 anonId + 聚合侧异常剔除(种子期最小桩,owner=telemetry;接受 §5-1 glossary 显式变更声明——glossary/contracts 描述已同步修订;广告曝光是否进免登清单留执行版单独评审)

执行版待办(出 execution 版时落):邀请码旁路的发码/核销机制与退役开关、passport.yaml 契约、Flyway 版本、R6 切渠道安全前置、§5A 聚合侧剔除最小桩 + protection starter 依赖、EnvelopeReqVO anonId 注释同步。


出处均为本仓实读核验(2026-06-10);体量与"+1–2 天"类估算为推断,以执行版排期为准。下一步:拍板后出 execution 版(含落点定稿/端点清单/Flyway 版本/e2e 用例/§5A 聚合侧剔除最小桩与 protection starter 依赖补齐/R6 切渠道安全前置),并同步回写文档:glossary.md:40 匿名条目、contracts/events.schema.json 与 EnvelopeReqVO 的 anonId 描述(若 §9-7 拍 B)、技术架构与模块.md 补广告反作弊技术项。