# Dramivio 额度后台复审

2026-10-03。范围为 Payload 额度策略的权限、草稿、发布收据及重试；不重复此前注册归因 hooks 审查。

服务端原作者代码由本次复审只读检查。发现页面恢复问题后，主 Agent 授权本复审 Agent 修改发布组件与对应测试；该修补另由独立子 Agent 验证，正式 Next 生产页面验收由主 Agent 负责。模型继承主 Agent、推理强度 max；工具未提供精确模型 SKU。

## 发现与修复

| 问题 | 影响 | 修复与复验 |
| --- | --- | --- |
| P2：管理员数据库临时错误被当成权限拒绝，页面清掉原操作号 | 首次发布已提交但响应丢失时，重试可能生成新操作，重复发布 | 主 Agent 将当前管理员读取的未知错误改为固定 503。官方 JWT 阶段仍可能返回 403；组件保留 401/403 的原操作号，重新登录后由管理员显式重试。真实 Payload、PostgreSQL 故障注入验证原收据恢复，线上版本不增加。 |
| P2：待确认操作只保存在组件内存 | 未知结果后刷新、重新进入，或请求中离开页面，会丢失原操作号 | 使用按实际管理员 ID、同源地址隔离的 sessionStorage，在请求发出前保存原操作号和说明。严格验证恢复记录；旧账号或已卸载页面的迟到结果不清新状态。独立真实 React、Chrome 复验刷新与卸载后重试均为原 UUID、原版本。 |

本报告覆盖的代码与协议回归未发现剩余可实证 P1/P2。新增正式 Next 生产页面刷新验收由主 Agent 单独记录，不能以组件 HTTP 模型替代。

## 确认的边界

- 发布权来自当前数据库中的管理员，客户端传入的角色、actor 或额度值不会覆盖服务端权威数据。撤权后的旧令牌无法发布；跨源、匿名和只读运营请求被拒绝。
- Web 10、App 50 为初始 core 策略。保存 Payload 草稿不会改变 core；未保存表单禁用发布并在处理函数再次拦截。跨端额度关系不合法时保留上一策略。
- 同一 operation 必须匹配 actor、审计说明及 command kind。首次提交后修改草稿，原操作仍返回首次收据；12 个并发重试仅产生一个 command、一个 outbox 和一个新版本。
- 首次查找尚无 command、随后另一请求已提交且草稿改变的交错场景，仍恢复原收据。提交后保存无效草稿也不阻断原收据恢复。
- `200 {}`、503、断连、401/403 保留待确认操作。完整合法收据才确认成功；明确 400/409 后可新建操作。浏览器拒绝存储时退化为同一次挂载内恢复，不承诺刷新后恢复。
- 切换管理员不复用另一个账号的操作。旧账号迟到响应不覆盖新账号的状态、存储或忙碌标记；重试不会自动发出。

## 验证证据

| 检查 | 结果 | 实际环境 |
| --- | --- | --- |
| admin 最终完整测试 | 16/16，2.034 秒 | 实际 Payload 3.90.2、独立 RAM PostgreSQL 18；含额度 11 项 |
| 独立补充发布复验 | 8/8，2.394 秒 | 实际 Payload REST、PostgreSQL，包含并发、actor/kind 冲突及两层数据库故障注入 |
| 独立组件生命周期复验 | 18 场景通过，无页面异常 | 实际 React DOM、Chrome、Payload ModifiedContext；认证提供者及幂等 HTTP 为本地模型 |

组件复验还覆盖：修改发布说明后仍恢复原说明、忙碌状态拦截、损坏记录清理、存储方法与属性访问被拒绝、初次 401 后同账号登录、旧账号请求迟到。

检查源码为 `短剧库/services/admin/src/config.mjs`、`短剧库/services/admin/src/components/PublishQuota.jsx`、`短剧库/services/admin/tests/quota.test.mjs`，并只读核对 core 发布域的事务与收据去重。测试使用本地隔离数据，不连接线上数据库。本报告不证明 App 安装真实性、视频源证明或播放扣次链路已经接入。
