# 邀请活动后台独立复审

复审日期：2026-10-03。复审员独立于本轮后台作者，只读业务代码，并在隔离真实 PostgreSQL 与 Payload 请求处理器中验证。本报告与 I00 邀请领域、Web 邀请页报告分别计证据。

结论：**限定范围通过，未发现可实证 P1/P2。** 原有邀请后台测试独立重跑 **11/11**，补充 **6 组真实 PG/Payload 接口边界**均通过。没有将主 Agent 的全后台测试、Next 浏览器联调或此前控件子 Agent 测试合并为本轮独立数量。

## 实际验证

使用 Payload **3.90.2** 的 `getPayload`、官方 `handleEndpoints`、JWT 认证、持久会话、CSRF/access 与官方迁移，连接独立 PostgreSQL 18 RAM 容器。后台库与 core 库分开创建；没有 schema push、生产数据库、外部邮件或线上活动。REST 请求以实际 Request/Response 交给官方处理器，未启动 Next HTTP 监听，不属于本次新增浏览器端到端验证，也未占用 3008、18091 或 18092。

| 独立场景 | 实际结果 |
| --- | --- |
| 官方注销与旧令牌 | 同一管理员登录两次，实际 `admins_sessions` 为 2；官方 logout 后为 1。被撤销令牌发布新操作、恢复旧已提交操作均 403；另一仍有效会话可恢复原收据，不产生新政策版本。 |
| 撤销管理员角色 | 已签发令牌的账号改为 editor 后，旧收据重放与伪造 authority 的新发布均 403。该令牌仍能读取活动草稿，保存草稿 403；活动政策不变。验证的是撤权后新请求，不声称能取消已授权进入提交阶段的请求。 |
| 跨 Origin／伪 authority | 外部 Origin 和字符串 `null` 均 403。匿名和 editor 在 body 内伪造 user、admin authority、input 仍 403。真实管理员提交伪造 input/coreDatabase/authority 时，结果来自已保存草稿，审计 actor 是真实框架管理员。 |
| 原请求重放 | 首次发布后保存无效的新草稿，再故障注入使活动 draft 读取抛错。相同操作及规范化后的同一说明仍返回首次收据，命令仅 1 条；不同实际管理员或不同说明返回 409。未把这项故障注入称为实际网络响应丢包。 |
| 并发胜者恢复 | 两个实际 Payload REST 请求读取不同草稿，暂停旧草稿请求，后请求先提交新草稿；放行旧请求后，两者均 200 且收据完全相同，core 仅一条命令、一次政策。两个不同管理员竞争同一操作时，恰好一个 200、一个 409，不能确认对方收据。 |
| 官方迁移与关闭 | 官方 migrations 执行邀请 schema，migration 记录 1 条，后台库含活动及版本表、无 core 表；core 库无 Payload 活动表。明确关闭返回 `enabled:false`、空 UUID/规则及递增版本，原政策规则仍保存。 |

脚本、结果和日志保存为 `work/existing-project/referral-admin-independent.mjs`、`referral-admin-independent-results.json`、`referral-admin-independent.log`；原 11 项回归日志为 `referral-admin-author-regression.log`。隔离容器、数据库连接均已关闭，未修改业务文件。

## 只读核对

阅读 `src/referral-policy.mjs`、`src/config.mjs`、`src/components/PublishReferral.jsx`、官方邀请迁移及 snapshot/index、`tests/referral-policy.test.mjs`，对照实际 core 的 `campaign_published` 命令与规范化 request。

- 发布前调用既有 `currentAdministrator`，实时读取管理员记录；API 只取 operationId 与说明，不接收客户端 authority 或活动 input。框架会话校验和成熟 access 继续承担身份、草稿读写权限。
- 旧操作先严格匹配命令种类、真实 actor 和规范化说明，再恢复其原 request；并发 `operation_mismatch` 只恢复同一命令，不改为发布当前新草稿。
- 草稿、Payload 文档版本和 core 活动发布分离。官方 `components.elements.PublishButton` 指向空的 `DocumentPublishButton`，保留 Save Draft 与有审计的活动发布入口；没有改动额度控件。此项为源码/已有回归核对，不新增整套控件穷举。
- 邀请 pending 使用独立管理员/站点命名空间；迟到响应须匹配当前组件身份，畸形成功 DTO 不确认，401/403 保留未知操作，明确 400/409 清理。既有独立控件审查结果作为背景，未计入本报告亲测场景。
- 迁移字段与后台 11 项规则、draft/版本表一致；core 继续检查交叉约束与当前 App 额度可达性。关闭活动只影响新绑定，不删除旧版本。

本轮只验收邀请活动配置、RBAC、发布与恢复桥接。真实观看证明、发奖 worker、人工审核、申诉结案和生产吞吐不在该结果内；选择低风险自动审核不代表这些运行能力已经上线。没有新增 gate、契约 hash 或生产操作。
