# 内容归并：保留追剧、进度与观看记录

2026-10-04。实现已写入「短剧库」的 platform、Payload 后台和 Web，以及「juku-mobile」的播放进度模块。CF 站点仍是在线文档与设计预览，业务服务未发布。

## 本轮实现

- 后台逐集核对后，可明确勾选“同一剪辑，迁移追剧与进度”。默认不勾选，有用户状态的普通改绑继续拒绝。
- 仅接受旧剧一个版本、两端完整且一一对应的分集映射。不同剪辑、缺集和多版本内容需要另行核对；不会按剧名自动合并。
- 同版本的全部来源一起改绑，保留来源编号和原播放入口。追剧爱心合并；逐集完成事实保留，位置采用最近有效记录，支持两边集号不同。
- 最近仍有效的播放上报会话继续记录当前位置。较旧会话到期，不能抢回记录；删除历史和注销的限制保持有效。
- 原观看账本、解锁、预留和离线资产保留原始 ID 与内容。受审核的剧/集别名用于识别同一内容，当天重播不重复扣次。合并不返还以前已经消耗的额度，也不重置设备预算。
- 邀请的有效观看按归并后的唯一集统计，不用旧、新两个 ID 充当两集。不复制其他来源的离线资格或延长缓存许可。
- Web/App 上报继续携带打开时的身份，由服务端解析审核过的别名。普通改绑无法让旧页面自动记录另一部剧。Web 收到新身份后清除旧列表项，并重新读取实际集号。
- 后台可依据原操作编号撤销。若之后已有进度、追剧、订单等变化，则拒绝自动撤销，避免覆盖新状态；提交响应丢失时重试原编号可恢复结果。

## 权限与隐私

沿用 Payload 官方会话、当前管理员角色、既有事务、表锁和普通操作 UUID，没有新增发布门禁或另一套任务系统。游客和普通运营不能执行归并或撤销；浏览器看不到消费者快照或内部 token。

撤销所需的个人状态副本最多保留7天，复用现有会话清理任务删除。用户清除相关历史或注销时立即移除这些副本，此后不能用撤销恢复已删除记录。最小操作审计及别名保留。

## 验证

| 范围 | 最新结果 | 说明 |
| --- | --- | --- |
| platform 全量 | 212/212 | 真实隔离 RAM PostgreSQL、官方认证与业务回归；本模块9个子测试加1个外层测试 |
| Payload 全量 | 77/77 | 官方身份、角色撤销、真实管理接口、丢失响应与重试 |
| Web 全量 | 164/164 | 实际页面逻辑；含归并后的进度身份与本地历史清理 |
| App 全量 | 270/270，类型检查通过 | 实际 RN 模块；原生、网络和存储部分使用明确的测试适配器 |
| 生产构建后台 + Chrome | 5组通过 | Next/Payload、真实 Go 元数据导入、真实 core 事务与 RAM PostgreSQL，390/1280宽度 |
| Web/RN进度联合验证 | 4组通过 | 实际双端控制器直接调用真实 core/PG：当前播放、下一集、删除与未审核改绑 |

测试媒体元数据和邮箱使用本地适配器，没有访问真实上游视频、SMTP 或生产数据库。联合进度检查没有执行实体设备、解码器或实际网络。

一次早期全量运行邀请 HTTP 场景的注册后绑定为空，导致210/212通过。单项5/5与随后全量212/212通过，但尚未定位那次失败的原因；保留原始失败日志，不称为已修复。

## 升级与下一步

显式调用现有 `migrateCatalog` 增加审计迁移字段、剧/集别名及对应函数；不是新增 Payload 迁移。先备份元数据并在隔离环境验证，再安排真实升级。本轮没有迁移既有数据库、提交/推送或发布 API、App/OTA。

下一步继续广告、收费与通知关闭态的运行接线。真实渠道、观看签发、离线许可、邮箱和实体设备验收仍需完成。

[主 Agent 复核](dramivio-content-merge-review.md) · [实际后台390宽度](merge-preview/merge-payload-390.png) · [撤销入口](merge-preview/merge-undo-390.png)

可导入检查：[runMergeBrowserFixture](dramivio-content-merge-check.mjs) 与 [runMergeProgressFixture](dramivio-content-merge-progress-check.mjs)。使用本机现有项目、依赖和 RAM 测试数据库；函数结束会清理测试服务。迁移机器时需调整绝对路径。
