# Dramivio 分阶段开发任务卡

2026-10-02 · 配套 PRD v3.3 与工程路线 · 当前是开发计划，尚未执行真实系统测试。

## 使用方法

一次交给开发模型一张卡，验收后再选下一张。先完成基础与播放器验证，再开发业务；不要把全部卡一次交付为一个大任务。每张卡提交代码、锁定版本、可复现测试、实际结果、未验证项与回滚方法。模拟服务只用于可重复测试，不能替代真机播放或真实认证集成验收。

可直接复制以下指令，并替换任务编号：

> 本次仅执行 Dxx。先阅读 dramivio-prd.md、dramivio-engineering-plan.md 和本卡，检查仓库已有实现与约束。按卡内依赖实现，复用成熟组件，不另写认证、验证码或视频解码内核。对业务状态和边界执行本卡测试；失败先修复。交付代码位置、版本、测试命令和实际结果、设备与网络条件、未验证项及回滚步骤。不得把模拟结果写成真机通过。完成本卡即停止，不自动实施下一卡。

## 顺序与依赖

| 卡 | 单项交付 | 前置 |
|---|---|---|
| D00 | 最小工程和兼容矩阵 | 无 |
| B00 | Payload后台框架接入，见后端复用方案 | D00 |
| D01 | 服务端邮箱 OTP | D00 |
| D02 | Web 登录 | D01 |
| D03 | App 登录 | D01 |
| D04 | App 原生单集播放验证 | D00 |
| D05 | Web 单集播放验证 | D00 |
| D06 | App 离线资产播放可行性 | D04 |
| D07 | 剧库与统一查询 | D00、B00 |
| D08 | 原子播放授权与额度 | D01、D07 |
| D09 | App 播放控制与长按倍速 | D04、D08 |
| D10 | Web 正式播放控制 | D05、D08 |
| D11 | 逐集进度与跨端续播 | D08、D09、D10 |
| D12 | 首页与查询列表 | D02、D03、D07 |
| D13 | 追剧及登录后续办 | D11、D12 |
| D14 | App 缓存任务 | D03、D06、D08、D11 |
| D15 | 邀请关系接入 | D01 |
| D16 | 邀请资格与奖励账本 | D08、D11、D15 |
| D17 | 改邮箱、清历史与注销 | D01、D11、D14、D16 |
| D18 | 后台配置及发布回滚 | D07、D08、D16 |
| D19 | 发布前综合验收 | 所有上线功能 |
| E01 | 普通广告 | D19后按需 |
| E02 | 激励广告 | E01、D16后按需 |
| E03 | 付费权益 | D19后按需 |

D04–D06是选型关口，必须在缓存完整开发前完成。无可用媒体或真机时先完成独立模块，播放器兼容和性能保留未验证状态。

## 基础与认证

### D00 最小工程

建立独立 App、Web、API 包；共享类型与业务纯函数，Web不能导入原生播放器。新项目采用能本地构建的 Expo development build；已有 RN 项目先沿用原结构。API用 Hono、PostgreSQL；暂不引入微服务和仅为认证增加的 ORM。

验收：iOS/Android Release样例可启动，Web可构建，数据库迁移可从空库执行与回滚；记录 RN/Expo、React、播放器、手势库、Better Auth 的兼容版本、许可证和锁文件。确认开发构建与生产构建配置分离，仓库无凭证。

### D01 服务端邮箱 OTP

接入 Better Auth 官方 emailOTP；完成SMTP发送适配、账号自动创建、条款版本记录和业务账户映射。验证码哈希存储、轮换重发、有效期与尝试次数按工程路线；多维限流由服务端执行。开发邮件捕获工具仅用于测试。

验收：新邮箱首次成功验证只建一个账户；老邮箱登录复用身份；验证码过期、旧码、重复提交、错码上限、并发重发、邮件失败均可恢复；响应不泄露邮箱是否注册。两实例同时验证不重复建账；限流跨实例一致；测试使用共享数据库限流或Valkey，不能用各进程内计数宣称通过。同IP多个正常用户不会仅因同IP被永久封禁。认证路由不能绕过业务动作所需权限。

### D02 Web 登录

仅Logo、剧库名、“欢迎登录”、邮箱输入与必要提示。使用官方客户端与同源安全会话；保留登录前的有效业务动作，无额外宣传页。

验收：刷新保持会话，退出撤销访问；过期会话提示并可恢复；OTP错误/重发倒计时/邮件延迟状态完整；非法跳转地址被拒绝，Cookie/CSRF/CORS配置验证；浏览器后退不重复提交业务动作。中英文与键盘可用。

### D03 App 登录

用官方 Expo 集成和 SecureStore，不把会话存在普通持久化存储中。业务请求携带框架要求的会话凭据；用户界面缓存不承担服务端授权。

验收：冷启动恢复、会话过期、主动退出、远端撤销、重装与系统备份恢复符合PRD；锁屏返回与网络切换不重复创建账户；被篡改本地登录状态不能追剧/缓存/领次数。登录取消保留页面，不执行待办动作。

## 播放器关口

### D04 App 原生单集播放

接入 react-native-video 稳定版本候选，通过 AVPlayer/ExoPlayer 播放真实 HLS 测试资产。实现独立 Adapter 和单播放器生命周期；先验证加载、暂停、seek、倍速、异常、释放，不做推荐流。

验收：区分 metadata-ready 与可显示画面；海报只在画面就绪后消失；快速切源迟到回调无污染；连续切换50次无音频残留、旧画面、持续内存增长；后台/来电/音频焦点恢复正确。记录正常与弱网首帧代理指标、缓冲和真实录屏；不把 onLoad 视为首帧。验证 Android SurfaceView 上控件叠层和手势。

### D05 Web 单集播放

原生HLS优先，MSE环境懒加载 hls.js；仅在播放器路由加载相关代码。完成浏览器 video adapter、资源销毁与 play Promise 拒绝恢复。

验收：真实 Safari 和 Chrome 至少各一条路径；首页不请求视频分片或hls.js；自动播放被拒后点击可继续；清晰度切换、seek、缓冲、退出释放有效；320/390/768/1280适配，无长按手势；弱网与低内存浏览器不挂死。Playwright WebKit通过不能替代真实Safari通过。

### D06 离线播放可行性

验证实际首发授权源的下载格式，不做完整队列；至少覆盖生产HLS切片、密钥、字幕及平台下载产物由同一RN引擎播放，按source capability逐项放行。不得用MP4样例代替生产HLS兼容验证。分别验证iOS/Android本地文件或平台支持的离线HLS路径、存储与过期删除。授权内容要求DRM时单独验证许可证能力；不以普通MP4通过替代DRM通过。

验收：飞行模式冷启动可播、seek与倍速可用；文件不完整不可播放；失效许可不可播；无授权下载格式明确禁用缓存。输出每平台支持矩阵与失败原因；不支持的资产不能进入后续下载承诺。

## 内容与播放业务

### D07 剧库与查询

实现 canonical_drama、canonical_episode、source映射与审核合并；聚合只接授权源。公开响应屏蔽营销渠道名，但不删除权利方要求的署名。稳定排序/游标分页，10条剧卡为一页。

验收：同名不同剧不误合并、改名同剧可合并；不同剪辑版本不错误映射集号；失效源不返回可播放承诺；分页无重复/漏项，查询变化取消旧请求；后台标签发布必须恰好10个有效双语标签。

### D08 原子授权与额度

实现服务端 grant、日额度账本、幂等键、同集当日去重和签名媒体访问。Web10/App50共享消费记录，非相加60；服务端可信端能力检查，不能靠请求字段自称App。游客策略沿用PRD，游客与账号合并按PRD防止重复领取。

验收：Web先看10集后App仅余40个基础新集；App先看11集后Web不能再解锁新集，同日已解锁重播允许；100并发请求不超扣，重试不双扣；切午夜、过期grant、撤权内容、配置降额、余额不足均正确。媒体源拿不到合法grant不可播放，客户端伪造余额无效；缺可信平台证明时记录App仿冒残余风险并验证共享设备/账号/总成本限额，不能把自报请求头或安装密钥当绝对证明；失败补偿只按PRD可确证条件发生。

### D09 App 控制与长按倍速

接入D08授权；选集、基础倍速、seek、同剧下一集；空白画面按住约350ms临时2×，松开/取消恢复原速度。使用与当前RN兼容的成熟手势库，控制区不响应长按。

验收：从1×/1.5×/2×开始分别长按，结束恢复各自基础速度；滑出、第二指、切集、选集面板、后台、来电、手势取消、组件卸载均不残留2×。暂停/广告不触发；缓冲中的用户暂停不被恢复逻辑覆盖；100次混合手势与快速切集无旧事件修改新播放器。预加载仅下一集元数据/海报，不预扣或建立第二解码器。

### D10 Web 控制

复用授权业务，不复用App手势层。实现选集、倍速菜单、进度、明确点击播放和单播放器释放。

验收：触屏正常滚动、文本和按钮不被长按劫持；授权等待导致play拒绝后重试不重复扣次；手机Safari、Android Chrome、桌面键鼠流程完整；页面隐藏暂停、返回页面保持用户播放意图；源错误和额度错误分开提示。

### D11 历史与续播

按用户+统一集ID保存位置、时长、完成状态、修订与history_epoch。短周期本地记录，服务端按节流及关键事件同步；不按每个播放器进度事件请求网络。广告与缓冲时间不计内容观看时间。

验收：跨端续播正确；旧设备、旧集回调、离线重放不能覆盖新修订；主动回看可降低当前位置而完成状态不误取消；尾部完成判定符合PRD；清历史后旧epoch不复活；倍速资格按可信规则计算，不信任客户端上报完整观看。退出/换号后的旧上传仍绑定原user/session/epoch，不迁移到当前账号。

## 用户功能

### D12 首页与查询

实现10标签横向滚动、右固定筛选、两列推荐、查看更多复用查询页；二级页返回+标题+可编辑输入+综合筛选。按PRD区分刷新和加载下一页动作，不倒置平台常规手势。

验收：每页10部；旧搜索迟到不覆盖新词；反复加载不重复；空/错/尾页状态完整；免费游客触发需登录的组合筛选按PRD续办；中英文长标签不挡筛选；Web列表与RN列表分别测试滚动和图片开销。

### D13 追剧与待办

封面右下角快速追剧，登录后执行一次，追剧页续播引用D11。待办有类型、目标、有效期和幂等标识。

验收：快速双击一致，登录取消不追剧；登录后内容下架不追不存在的目标；切账号不串待办；取消与重新追剧无重复记录；Web缓存待办登录后仍只引导下载，不变成浏览器下载。

### D14 App 缓存队列

基于D06已支持矩阵，实现选集、容量估算、预留/提交、校验、暂停重试、过期与账号隔离；沿用PRD的下载订单状态机和失败补偿。Web只提供下载App入口。

验收：空间不足、后台中断、进程杀死、断网、部分文件、许可证未知、注销与切账号均正确；同集重复任务不重复扣；离线播放不重复耗费当日额度；缓存仍不能突破授权和PRD离线有效期。真实飞行模式验证，不只关闭API模拟离线；补PRD I03/I22/I24：首次可播交付前后取消、已发许可响应丢失、在线/下载同集100并发、task_id越权、续许可不延长原到期。

### D15 邀请关系

先验证成熟开源 referral 插件与邮箱OTP的注册时序；未验证兼容不得默认采用。框架只承担已验证的关系能力，奖励不由插件直接发放。若不兼容，使用简单邀请关系表，不另造登录系统。

验收：老用户不能重新绑定，新用户只能绑定一次；自邀、循环、过期/伪造码拒绝；并发注册/绑定无双关系；规则版本与来源保留；邀请链接跳转安全；同IP风险进入可解释审核，不自动认定两个账户同一人。

### D16 邀请资格与账本

实现后台规则快照、有效观看资格、风险审核、待发/已发/撤回/过期账本与Outbox。所需集数、时长、奖励量与上限可配置；不信任客户端观看完成或邀请人数。

验收：重放事件、并发回调、跨午夜、改规则、账号删除/重新注册、相同内容重播不重复资格/发奖；外部失败可对账，未知结果不释放后重复发奖；IP共享用户可申诉；默认不开广告/付费权益。覆盖PRD奖励总余额和到期消耗顺序。

### D17 账户敏感操作

复用框架改邮箱和删除账户能力；需要近期验证的动作绑定具体账户、用途和一次性证明。先执行业务终止、媒体授权/缓存撤销、删除任务与审计，再按PRD处理身份。删除入口统一校验，不能另一路由绕开。

验收：改邮箱新旧邮箱验证正确；普通登录OTP不能跨账号/跨用途删除；敏感意图由服务端创建，新OTP会话核对当前账号与时间；证明消费与terminal同事务或稳定操作ID幂等，清理失败继续原操作；一次性证明不可重放；认证删除与业务清理中途故障可重试，不出现仍可用旧会话或奖励重建。清历史后在线/离线旧数据及备份恢复不复活；删除重新注册不取回旧奖励。

### D18 后台配置

基于Payload现成Admin、Collections、Versions与Access Control配置字段和薄业务命令页面，不重新开发管理后台CRUD。配置标签、邀请资格、Web/App额度、广告与收费开关；权限分级、草稿校验、发布版本、审计和回滚。客户端配置不作为授权依据。

验收：9/11标签不可发布，缺英文不可发布；旧客户端与未知配置安全降级；上线奖励机会保留已承诺版本；降额不负扣；未授权后台用户不能发布；关闭广告/付费后不再产生新机会或订单，已有结果仍完成对账。

## 发布与扩展

### D19 综合验收

执行工程路线性能场景和PRD测试矩阵；记录版本、真机、浏览器、媒体、网络、样本量和统计定义。完成日志脱敏、grant/缓冲/异常监控、备份恢复、灰度开关与回滚演练。

验收：基础账本与去重没有并发漏洞；正常网络首帧与缓冲达到路线目标或列出实测差距和阻塞；长按取消无泄漏；Web首页无播放资源下载；旧会话和被撤权内容不可访问。不可用录屏/截图替代服务端与真实浏览器证据。未通过的上线必要项不能标全功能通过。

### E01 普通广告

仅启用设计预留槽位：App首页/查询列表、我的me_card及默认关闭的集间位；Web仅首页/查询列表/我的，不开放集间位。不覆盖搜索、播放主控、选集、登录OTP。广告不占每页10部剧数量；只可使用经核验开源的接入组件，供给无可用适配时保持关闭。

验收：无填充/超时不阻塞内容；广告布局不跳动、不计播放额度或历史；点击与曝光幂等；中英文广告标识可见；频控、隐私开关、撤权与紧急关闭有效；会员免广告生效。按PRD验证跨端60秒冷却、直投合计20次/日、集间3次/日，以及关闭同页slot后不立即替换广告。

### E02 激励广告

按PRD offer/机会/证明/奖励状态接入；必须有可信服务端完成证明、幂等查询及未知结果对账。仅客户端播放完成事件无法安全发奖，供给不具备能力则功能保持关闭。

验收：伪造完成、重复回调、断网、过期机会、结果未知、关闭开关、余额上限和人工对账均按PRD；广告中App长按禁用；拒绝观看不影响已有权益。

### E03 付费权益

只按PRD开关接入订单、服务端权益和平台允许的支付路径；不靠前端隐藏按钮完成收费改造。客户端支付库需开源，交易服务/平台能力单独记录；首版不开启。

验收：重复通知、待定订单、退款、续订失败、撤销、权益到期、跨端恢复、历史免费额度迁移正确；展示金额币种来自可信平台商品，服务端验证并冻结交易快照；商品与配置不一致重新确认，后台不能单独改平台实际价格；关闭入口不丢弃已存在订单对账。不要求免费首版提前交付支付代码。

端证明验收必须列出iOS、带Google服务Android、不带Google服务Android的能力矩阵。签名挑战和安装钥匙仅提供连续性；无Google服务的低风险合法App仍按PRD提供50集，不能一律降到Web10集。可完整模拟握手的攻击者仍可能仿冒，按成本/带宽限流、共享预算与审核控制；媒体访问始终需要合法grant。
