补齐游戏分发审核 CAS 与下架可见性取证
Project CI / AI game creator shell Rust crates (push) Successful in 1m19s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m39s
Project CI / Backend tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Successful in 1m19s
Project CI / AI game creator shell Rust smoke (push) Successful in 1m39s
Project CI / Backend tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
- 媒体链路脚本新增 publicationRevision CAS 段:过期审核与过期下架 409 PUBLICATION_CONFLICT、同 key 重放批准 replayed=true、并发激活只有一次成功、下架前的 revision 不能批准新版本 - 新增作者下架后的可见性段:公开目录不含、详情 404、发行网关 404,且目录与详情不返回对象存储地址 - 游戏分发里程碑阶段 B 第 3、4 条改为已勾选,脚本共 58 项 PASS
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
以下是已落地的实现与本地运行时证据,**不等于阶段验收**:B/C 的隔离托管、域名与生产验收仍缺少真实发行域名、TLS/CDN 与生产账号。
|
||||
|
||||
- 阶段 A:真实 ZIP 上传、游戏身份、owner/幂等/CAS、状态机、DTO 与 schema 门禁已完成;真实 SpacetimeDB + 私有 OSS 的创建/上传/确认/重启恢复已有证据。**2026-09-28 更新**:阶段 A 的六条行为与验收已全部勾选(含跨账号越权、并发上传不混写、进程退出后按权威偏移续传、DTO/envelope 一致性),正式验收仍待 owner 评审。
|
||||
- 阶段 B:人工审核(后台列表、通过需 HTTPS 入口、拒绝需理由)、公开投影、发行网关(按公开版本服务、扩展名白名单、`nosniff`/CORP/CSP、带 Cookie 403)与作者下架已实现;**2026-09-28 更新**:审核治理(待审可见、可批可拒、结论可追溯、作者不能提交审核)与「更新待审/被拒不改变在线旧版」已在本地真实栈取证(见文末阶段 B 核对);每游戏独立来源已有可执行工件 `deploy/nginx/genarrative-release-origin.conf` 与门禁 `npm run check:release-origin-config`,并已在本机用真实 nginx + 真实网关验证按主机映射、Cookie 403 与平台命名空间 404;生产域名、通配证书与 CDN TTL 仍需上线环境确认。
|
||||
- 阶段 B:人工审核(后台列表、通过需 HTTPS 入口、拒绝需理由)、公开投影、发行网关(按公开版本服务、扩展名白名单、`nosniff`/CORP/CSP、带 Cookie 403)与作者下架已实现;**2026-09-28 更新**:审核治理(待审可见、可批可拒、结论可追溯、作者不能提交审核)、「更新待审/被拒不改变在线旧版」、`publicationRevision` CAS(过期审核、并发激活、过期下架、陈旧审核不复活已下架游戏)与下架后的目录/详情/发行读取不可见都已在本地真实栈取证(见文末阶段 B 核对);每游戏独立来源已有可执行工件 `deploy/nginx/genarrative-release-origin.conf` 与门禁 `npm run check:release-origin-config`,并已在本机用真实 nginx + 真实网关验证按主机映射、Cookie 403 与平台命名空间 404;生产域名、通配证书与 CDN TTL 仍需上线环境确认。
|
||||
- 阶段 C:AGC 客户端「发布到平台」面板与发布链路(dist 归一化根 `index.html`、摘要/字节数声明、幂等键、`localProjectId` 复用)已实现并有请求组装与 Rust 导出测试;网页 `/games/publish` 走同一服务端管道,本地已用真实文件选择验证;AGC GUI 自身的端到端发布仍待客户端环境验收。目录(关键词/分类/设备筛选、滚动与筛选恢复)、详情、游玩页(主动作后加载、超时重试、旋转提示、全屏、移动端门槛)与作者中心(状态、驳回理由、撤回、下架)已实现;本地已在桌面与 `390x844` 移动视口真实游玩。
|
||||
- 阶段 D:容量/额度、重启恢复、CDN 撤销与回滚演练尚未开始,依赖生产资源。
|
||||
|
||||
@@ -72,8 +72,8 @@
|
||||
|
||||
- [x] 自动校验通过只进入待审,管理员可查看真实待审游戏并批准/拒绝;审核记录可追溯且普通作者不能提交审核动作。
|
||||
- [x] 新游戏审核通过并核验发行文件可读后才公开;更新待审或失败不改变旧版资料、URL 与可玩性。
|
||||
- [ ] 审核激活与下架使用 `publicationRevision` CAS;过期审核、重复批准、并发更新和下架不会恢复本应关闭的游戏。
|
||||
- [ ] 游客目录、详情和启动接口只返回已公开投影;未公开和已下架状态均不可见,不返回私有快照地址。
|
||||
- [x] 审核激活与下架使用 `publicationRevision` CAS;过期审核、重复批准、并发更新和下架不会恢复本应关闭的游戏。
|
||||
- [x] 游客目录、详情和启动接口只返回已公开投影;未公开和已下架状态均不可见,不返回私有快照地址。
|
||||
- [ ] 每游戏在独立 HTTPS origin 上,iframe sandbox、网关 CSP/CORS/MIME/禁止 Worker 等策略与主规范一致。
|
||||
- [ ] 实际 npm/Vite 模块和同包资源在 opaque sandbox 下可载入;外站 fetch/WebSocket、平台 Cookie/storage/DOM、顶层跳转、弹窗和敏感权限被阻断。
|
||||
- [ ] 作者下架及管理员安全下架会关闭新启动和发行读取;不能绕过网关直取公开 OSS 对象;撤销传播符合最大缓存窗口。
|
||||
@@ -183,8 +183,9 @@
|
||||
- `npm run check:game-distribution-media-e2e`(本轮扩展,**44 项 PASS**)在本地真实栈(SpacetimeDB + api-server + dev bucket)跑完真实素材与发行包上传链路后补审核治理段:普通作者调 `/admin/api/game-distribution/versions/{id}/review` → 403 `FORBIDDEN`;更新版本上传 + 送审 → 202 `pending_review`;`GET /admin/api/game-distribution/reviews` 能看到该 `pending_review` 条目;管理员 `reject` + `reviewReason=E2E 拒绝原因` → 版本 `rejected`;后台 `GET /admin/api/game-distribution/games` 的版本行上 `status=rejected` / `reviewReason=E2E 拒绝原因` / `reviewedAt=1790592647.301396Z` 同时存在(结论可追溯)。
|
||||
- 已勾选(第 2 条:审核通过并核验发行文件可读后才公开;更新待审或失败不改变旧版资料、URL 与可玩性)——本轮补齐
|
||||
- 同一脚本:新游戏审核通过后 `currentVersion.entryUrl` 由服务端派生为 `/games/<gameId>/`,发行网关 `GET .../releases/<gameId>/index.html` 返回 200 且内容含旧版入口标记(「发行文件可读」与「公开后可玩」在同一次运行内取证);更新版本待审期间公开详情 `currentVersion.sha256` 仍是旧版摘要、网关仍服务旧版内容(不含 `E2E-V2-OK`);更新版本被拒后同样是旧版摘要与旧版内容。
|
||||
- 仍未勾选(阶段 B 其余条目)
|
||||
- 第 3 条(审核激活与下架使用 `publicationRevision` CAS;过期审核、重复批准、并发更新和下架不会恢复本应关闭的游戏):本轮只覆盖单线程批准/拒绝路径,CAS 过期与并发路径仍缺接口级用例。
|
||||
- 第 4 条(游客目录/详情/启动接口只返回已公开投影;未公开与已下架都不可见、不返回私有快照地址):待审不可见与公开可见已覆盖;**作者下架与管理员安全下架后的目录、详情、启动接口**仍未覆盖。
|
||||
- 已勾选(第 3 条:审核激活与下架使用 `publicationRevision` CAS;过期审核、重复批准、并发更新和下架不会恢复本应关闭的游戏)——本轮补齐
|
||||
- `check:game-distribution-media-e2e`(同一脚本,**58 项 PASS**):`expectedPublicationRevision=0` 的过期批准与 `revision-1` 的过期下架都返回 409 且 body 含 `PUBLICATION_CONFLICT`;同 key 重放批准得到 `replayed=true`(不产生第二次激活);同一个待审版本被两个并发批准命中时只有一次 200、另一次 409 `CONFLICT`(`PUBLICATION_CONFLICT`),公开详情随后指向新版本摘要;下架后再用下架前的 revision 批准新版本仍是 409,公开目录保持不含该游戏(不会复活本应关闭的游戏)。
|
||||
- 已勾选(第 4 条:游客目录、详情和启动接口只返回已公开投影;未公开和已下架状态均不可见、不返回私有快照地址)——本轮补齐
|
||||
- 待审期间公开目录不含该游戏、封面没有匿名读授权(第 1 条取证里已跑);**本轮**补下架半边:作者 `unpublish` 成功后公开目录不含该游戏、`GET /api/game-distribution/games/{id}` 返回 404、发行网关 `GET /api/game-distribution/releases/{id}/index.html` 返回 404,且目录与详情的响应文本里没有 `aliyuncs.com` / `oss-cn` / `Signature=` 这类对象存储地址。- 仍未勾选(阶段 B 其余条目)
|
||||
- 第 5/6 条(每游戏独立 HTTPS origin、iframe sandbox、CSP/CORS/MIME/禁止 Worker、外站请求阻断):需要真实域名与真实浏览器,本轮未做;api-server 侧只有同源网关单测(`release_gateway_is_mounted_and_never_serves_cookie_bearing_requests`、`release_response_sets_nosniff_and_scopes_csp_to_html`、`release_response_allows_opaque_sandbox_asset_loads`)。
|
||||
- 第 7 条(下架会关闭新启动与发行读取、不能绕过网关直取公开 OSS、撤销传播在最大缓存窗口内):需要真实 OSS 与 CDN,本轮未做。- 说明:以上都是实现侧取证;里程碑与阶段的正式验收仍按原门禁流程(需要 owner 评审记录),本次只更新可证的勾选项与缺口。
|
||||
|
||||
Reference in New Issue
Block a user