games-development-ai/docs/agent-specs/_archive/2026-06-10-真实鉴权与匿名玩家-e2e报告.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

6.5 KiB
Raw Blame History

真实鉴权与匿名玩家 · e2e 验收报告

  • 编号: HJ-PASSPORT-E2E-001 | 2026-06-10 | ✅ 验收通过(E1-E13 全过,E10 留部署轨注记)
  • 被验对象: HJ-PASSPORT-EXEC-001 鉴权建设波(提交链 b0850a2→f0c4e81→7e84021→4dbbc06)
  • 环境: staging(mini-desktop :48080,V11 已迁移;前端 :4173 staging 模式)
  • 方法: 两轮多代理取证(一轮 10 组并行+独占 / 二轮 8 组)+ 三次部署窗口 + 主 agent 终验;全部判定带「命令+输出+DB 行」三重证据(原始档在两轮 workflow 转写目录)

1. 终判表(对照 execution §11)

# 用例 终判 关键证据
E1 真 token 创作者全链 ✅ sms-login→set-creator→草稿→生成 succeeded→发布→admin 审核→分区流匿名可发现;归属列=真实 userId
E2 匿名零门槛 ✅ 14 端点读写全链 code:0;DB:player_user_id NULL ∧ anon_id 透传 ∧ creator='0' ∧ process_status=1
E3 互动触发登录 ✅ UI Vant 弹窗(截图)+ 直连 401 信封(信任边界在后端)
E4 邀请码注册 ✅ register_channel='invite' / invite_code_id 关联 / used_count+1 / 互动落库 user_id=真实
E5 负路径四码+并发 ✅ 1002091000/001/002/003 四错误码精确;并发双发恰 1 成功(条件更新原子性实证),败方零残留行
E6 白名单 ✅ 5 创作写入口全 1002090003 拒 → set-creator 置位后建草稿 code:0
E7 身份衔接 ✅ first_anon_id=X;user_login 双带落库(user_id=3∧anon_id=X,终验补:见 §3-3);互动 user_id=真实(1001/1 错位消除)
E8 mock 并存 ✅ test1 生成→succeeded→取包→feed 全链零变化(@PermitAll 只放宽不收紧实证)
E9 旁路退役开关 ✅ 关→1002091 段「旁路已退役」∧ sms 主路径不受影响→恢复→happy-path(E5⑤ 充当)
E10 生产负路径 📌 部署轨注记 生产 profile 未建立(spec §1.2 既定),部署落地后补测 Bearer test1→401
E11 安全基线 ✅ 修复后新日志无手机号/验证码明文;token 中段 16 字符 grep=0;refresh 实测 30d(spec 7d/30d 中 7d 未配置,如实记录)
E12 admin 不回归 ✅ admin-api 列表/审核链冒烟过,game-admin 零改动
E13 剔除桩 ✅ 105 条原始照落∧聚合截流 ≤100∧剔除中文日志∧anonExceeded=false 直证 anon 维零误伤(对照「+1」失败=同源 IP 取证设计缺陷,恰证 IP 维反刷在岗,见 §4-3)

完成条件 §14 对账:1 契约三件 ✅ / 2 后端全量 ✅ / 3 前端 build ✅ / 4 用例全过留证 ✅ / 5 三类单测绿 ✅ / 6 文档回写 ✅(本报告随批落) / 7 R6 本件内两项 ✅+切渠道前两项已入 A1 看板 #3 备注。

2. e2e 逮住的两个 P0(堵在种子用户之前)

P0 根因 修复 提交
匿名/免登写路径全断(session start/end、telemetry batch/beacon、注册两入口、ad 计费) V11 只放宽业务列,漏继承审计列 creator/updater NOT NULL;@PermitAll 无登录态 → DefaultDBFieldHandler 填 null → 约束爆。与 M-b 执行器 updater 雷同根第三现 第一层:5 写点 DO 显式兜底 "0";第二层:telemetry 入口注入系统身份(M-b 范本 Web 线程版)覆盖 stat 累加/feed 回灌/markAggregated 全级联 f0c4e81 + 7e84021
手机号+验证码明文进 app.log ApiAccessLogInterceptor 非 prod 无条件打印原始请求体(不读 @ApiAccessLog 注解,framework 不可改)+ SmsSendConsumer 记 message 含码 两面合围:staging 抬该 logger 至 WARN(控制台面)+ 三端点 sanitizeKeys(持久化面)+ Consumer 脱敏 f0c4e81

修复链中二次逮雷:markAggregated 的 UPDATE SET updater=null 运行时证伪「MP 跳过 null 字段」的静态推断——这是入口注入方案取代逐点 set 的依据。终验 DB:匿名链 creator='0'、登录链 creator=真实 id,两态对照成立。

3. 修复后增补的第三个缺陷

user_login 事件被入口拒收(accepted:0/rejected:1)——契约 events.schema.json 已登记,但后端 TelemetryEventEnum 才是真守门人未同步。修复 4dbbc06(+2 行枚举),终验:accepted=1,DB user_id=3∧anon_id='r2-anon-link'∧creator='3'∧process_status=1。红线蒸馏:契约登记事件必须同步该枚举。

4. 遗留债登记(全部非阻断)

  1. feed 主流翻页桩(既有债重确认):nextCursor 恒空串(FeedServiceImpl 骨架 TODO),新游戏 sort_score=0 排 30 名外则主流不可达——分区流可达成立;种子期 feed≤30 款时无感,内容池>30 前必须实现 cursor。
  2. set-creator 单列更新不写 updater(PlayerMapper wrapper 更新),审计追溯轻微缺口。
  3. 执行器产物 updater='0' 系统哨兵(设计内);若产品要求归因创作者需在执行器更新链注入创作者身份——设计取舍备拍。
  4. /root/game-staging/repo 旧树与运行 jar 来源脱钩:运行 jar=构建树产物(md5 对账过),但部署目录所在 checkout 停在 wave3——溯源性缺口,建议后续把部署产物目录与旧 checkout 解耦。
  5. E13 对 9001 的 stat 污染(+99 like)已如实留档;后续复用 9001 须按快照差值判定。
  6. refresh 7d 档未配置(实测 30d);生产 profile 时按安全基线复核。

5. 操作教训(已蒸馏 .agents)

  • -pl huijing-server 增量重打包会0.5s 假成功(jar 不重建)——重打包必须 clean 联合反应堆 + 产物内嵌 jar grep 核验;telemetry 产物名是定制 finalName(无版本号)。
  • 重启类 ssh 命令与含 jar 名串的命令必须拆会话(start-app.sh 的 pkill -f 会击杀同串 cmdline 的承载 shell,本波两例实证)。
  • system-server 单测必须 SPRING_DATA_REDIS_PORT=26379(宿主 16379=staging redis 撞 huijing 嵌入式测试口,catch(ignore) 静默连错库)。
  • e2e 多代理并发写同库时,对账须先排除同轮兄弟代理的写入与探针 DML(本波一次「核销未回滚」误报由此交叉解除)。

6. 证据指针

  • UI 截图:docs/agent-specs/2026-06-10-passport-e2e-evidence/(feed/弹窗/登录页)
  • 两轮取证原始 JSON:会话 workflow 转写目录(wf_69d4028c / wf_db9c00f2)
  • staging 构建日志:mini-desktop /root/build-*.log;jar 备份:huijing-server.jar.bak-{57b2593,b0850a2}