Dramivio项目文档下载文档包 ↗
2026.10.03 · 设计实施与自动回退修订本地实现与复审进展 · 真实服务尚未发布Markdown

视觉按最新原型,业务按已确认PRD。现有代码为满足设计而改造。执行见按设计实施与任务卡;当前代码与验证范围见消费者功能页。

Dramivio RN A03 账号生命周期独立复审

本页目录已验证的行为已修复的独立发现独立测试证据验证范围与剩余限制

评审对象为 juku-mobile 当前工作区的 A03 前半段:账号会话列表、单会话撤销、邮箱变更、认证隔离与本机清理;后续增加 useConsumerProgress.ts 与 PlayerScreen.tsx 的身份撤销处理。模型与 reasoning effort 继承主 Agent / max。

结论:当前复验无剩余 RN 阻断项。 独立复审发现 1 个 P2,主代理修复后原失败用例转绿。作者已有的 11 组相关测试独立重跑通过;另外编写的 16 组独立替代测试全部通过。未修改业务代码、未连接真实 API、未发送邮件、未删除账号。

已验证的行为

边界 独立证据与源码位置
官方 SDK 方法与 options 实际 BetterAuth + Expo 1.7.7 客户端经过本地 HTTP 替代响应。listSessions 为 GET,revokeSession / revokeOtherSessions 为 POST,三个邮箱步骤使用官方 EmailOTP 方法;AbortSignal 与两个禁用缓存/续期参数进入实际请求。account.ts:25、client.ts:92。
同账号更换会话 新登录使旧请求中止;旧列表的迟到 Set-Cookie 无法覆盖新凭据,也不会追加账号 GET。账号操作核对 user ID 和 session ID,账号面板按两者重挂载。client.ts:103、AccountScreen.tsx:26。
切换 origin 旧 origin 请求中止,其迟到 cookie 被 generation 拦截。两个 origin 的官方 cookie 各留在自己的 SecureStore 命名空间。React 面板切换后不保留旧邮箱、OTP 或会话显示。client.ts:30、client.ts:68。
权威 null 与桥接失败 官方 null 删除当前 origin 凭据。实际身份查询先 forget 旧 viewer,即使桥接失败也返回 null;实际 Gate 清旧 owner 的 progress。有效会话遇到桥接故障则隐藏 linked 身份,未误判为服务端撤销。client.ts:141、queries.ts:15、ConsumerAuthGate.tsx:21。
账号终态 官方 account_terminal 阻止账号操作并清凭据;实际 Gate 和账号页错误分支清旧 viewer、progress 与查询。替代测试未出现撤销成功文案。ConsumerAuthGate.tsx:27、AccountScreen.tsx:45。
撤销结果未知 丢失 POST 响应后只读会话列表与身份;目标仍在列表时拒绝成功,未自动重发撤销。account.ts:31。
邮箱提交结果未知 旧、新邮箱 OTP 使用不同官方用途;提交丢响应后,必须读到同 owner/session 的新 verified email 才确认。React 页面清空 OTP,进入“确认结果”,后续只调用 GET 对账。account.ts:45、account.ts:62。
邮箱已提交、桥接失败 实际页面保留“确认结果”;再次确认先只读账号身份,再重试桥接,未重复邮箱 POST。成功文案仅在桥接 owner 一致后出现。AccountScreen.tsx:73。
会话过旧 SDK SESSION_NOT_FRESH 保留明确错误;实际页面清列表、提供重新登录入口,未把它当作账号终态。AccountScreen.tsx:50。
旧播放活动与身份变化 实际 progress hook 关闭旧 reporter,已确认 null/terminal/owner/session 变化保留在当前活动内,后续 503 不解除阻止状态;普通首次网络故障只关闭报告,未声称已撤销。useConsumerProgress.ts:19。
播放器撤销处理 实际 PlayerScreen 测试中,VideoStage 子组件被卸载,plan/prefetch 禁用,旧播放回调失效;继续播放、换集无法恢复,重试返回选集。PlayerScreen.tsx:153、PlayerScreen.tsx:184、PlayerScreen.tsx:457。

会话列表 token 只存在页面内存与撤销命令中,未写入查询键、导航参数或持久化存储;OTP 提交后清空。SecureStore 写入仍由官方 Expo cookie 管理完成;本次确认列表 token、OTP、登录响应中的原始 token 没有额外落盘。App 的查询持久化仅允许 library,见 App.tsx:85。

导航入口与中英文文案已接入 MyScreen.tsx:35、types.ts:25、RootNavigator.tsx:141 与 src/i18n/resources.ts。本轮未引入独立账号 store、hash 或 gate。

已修复的独立发现

P2:已确认的身份变化可能被下一次 503 抹掉。 原 useConsumerProgress.ts 只根据当前 render 计算 accountBlocked。先观察到新的 owner 或 session 后为 true;随后身份查询失败但保留最后成功 data,linked=false 使 owner 变为空值,结果恢复为 false。播放器因此可能再次允许旧活动的播放源或 plan 请求。

独立 actual hook 用例分别复现 owner 和 session 两条转移,原结果均为 false !== true。主代理在现有 capturedAccount ref 中保存已确认 blocked 状态,当前活动不再被网络故障解除;重开播放页面创建新活动。两条原用例未改预期,最终均通过。原失败记录保存在 /Users/alienmu/Documents/Codex/2026-10-02/bang/work/app-account-review/progress-red-evidence.txt;测试在 progress.test.cjs。

后续 Gate 同时复用 clearConsumerAccount(client, previousOwner) 清确切旧 owner 的队列、viewer 与旧 scope 查询,见 ConsumerAuthGate.tsx:11。实际 query + Gate 独立用例也已在这次修改后重新通过。

独立测试证据

独立测试保存于聊天工作目录,仅作为复审证据,未写入业务仓库:

  • /Users/alienmu/Documents/Codex/2026-10-02/bang/work/app-account-review/sdk.test.cjs:5 组实际 SDK 测试,同 owner 新会话、origin 切换、撤销未知响应、429、权威 null。
  • /Users/alienmu/Documents/Codex/2026-10-02/bang/work/app-account-review/react.test.cjs:6 组实际 AccountScreen React 测试,业务服务与 native 组件替代。
  • /Users/alienmu/Documents/Codex/2026-10-02/bang/work/app-account-review/identity.test.cjs:3 组实际身份查询 + ConsumerAuthGate React 测试,服务器读取、桥接与本机 progress 接口替代。
  • /Users/alienmu/Documents/Codex/2026-10-02/bang/work/app-account-review/progress.test.cjs:2 组实际 progress hook 的已知 owner/session 变化后再遇 503 的回归用例。

最后一次独立用例合并执行结果:16 tests、16 pass、0 fail。另独立重跑仓库 tests/account-api.test.cjs 的 8 组、tests/account-identity.test.cjs 的 2 组,以及 tests/player-screen.test.cjs:433 的撤销组件用例 1 组,均通过。合计 27 组相关检查通过,其中 16 组为本次独立新增;此数字未把参数循环当作额外测试数量。

验证范围与剩余限制

这些证据验证实际 TypeScript/React 控制逻辑及已安装 SDK 的请求、cookie 与错误处理;HTTP 与 SecureStore native 实现使用替代对象。未进行 Android/iOS 真机运行、native 编译、系统 Keychain/Keystore 故障或后台杀进程恢复测试;不代表生产邮件送达、服务端数据库事务或账号删除能力已验收。

会话撤销依赖服务端列表完整性与真实会话删除。另一个后端审核曾发现 BetterAuth 默认 100 条快照的问题;最新只读源码已在 services/platform/src/auth.mjs:94 设置完整查找上限并加入批量撤销前置回调。本轮未重新运行该后端数据库证据,后端验收由其独立评审负责。

旧本机下载仍没有 owner/session/license 字段,离线播放器直接播放本机 URI。本轮没有扩展 O00,也没有声称撤销会话会即时收回离线文件;账号页提示与此边界一致。