补齐游戏分发 200 MiB 上限档与发包边界复跑
Project CI / AI game creator shell Rust crates (push) Successful in 1m33s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m5s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 5m53s
Project CI / Backend tests (push) Successful in 4m47s
Project CI / Frontend tests (push) Successful in 2m6s
Project CI / Native shell tests (push) Successful in 6m46s
Project CI / Repository checks (push) Successful in 2m49s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 9m24s
Project CI / AI game creator shell web tests (push) Successful in 1m50s
Project CI / AI game creator shell Rust crates (push) Successful in 1m33s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m5s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 5m53s
Project CI / Backend tests (push) Successful in 4m47s
Project CI / Frontend tests (push) Successful in 2m6s
Project CI / Native shell tests (push) Successful in 6m46s
Project CI / Repository checks (push) Successful in 2m49s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 9m24s
Project CI / AI game creator shell web tests (push) Successful in 1m50s
- 新增 scripts/check-game-distribution-package-limits-e2e.mjs:196 MiB 合法包走通上传+校验+送审并记录耗时与工作集,声明超限 413,文件数/单文件/展开量/压缩比四类边界各自 422 失败关闭并落 upload_failed - 校验实现无进程拉起,包内脚本未被执行 - 游戏分发里程碑阶段 D 第 2 条改为已勾选,并写明本轮可复核数据
This commit is contained in:
@@ -120,7 +120,7 @@
|
||||
### 行为与验收
|
||||
|
||||
- [ ] 真实环境中完整跑通“首次上传 → 校验 → 审核 → 公开 → 游客游玩 → 更新待审旧版在线 → 新版切换 → 下架撤销”。
|
||||
- [ ] 200 MiB 包(现行上限,见 2026-09-23 决策记录)与获批文件数/展开量边界有可复核耗时、内存和失败证据;校验不会执行上传代码,服务资源有界。已有证据覆盖 100 MiB 档,上限提升后的档位待复跑。
|
||||
- [x] 200 MiB 包(现行上限,见 2026-09-23 决策记录)与获批文件数/展开量边界有可复核耗时、内存和失败证据;校验不会执行上传代码,服务资源有界(2026-09-28 在本地真实栈按新上限复跑,见文末阶段 D 核对)。
|
||||
- [ ] 校验执行器重启可恢复,审核积压与失败可观测,清理不删除仍被公开版本引用的文件。
|
||||
- [ ] CDN purge 失败时仍在获批缓存 TTL 内拒绝新资源;明确已下载脚本无法远程抹除的边界。
|
||||
- [ ] 发布/回滚步骤保留当前公开版本,能关闭新提交和新版本激活;部署路由、缓存、响应头、日志脱敏和告警完成检查。
|
||||
@@ -220,4 +220,16 @@
|
||||
- 共享组件:目录/详情/游玩/发布四个页面都直接用 `PlatformActionButton` / `PlatformStatusMessage` / `PlatformEmptyState`(`src/components/common/`),没有另起一套按钮与状态条。
|
||||
- warm token:`src/components/game-distribution/gameDistribution.css` 的颜色/边框/背景全部走 `var(--platform-*)` 变量,没有独立色板。
|
||||
- 无假统计与演示兜底:目录卡片的游玩次数直接取服务端 `playCount`(新游戏显示 0 次游玩,发布链路脚本里验证过广场数据来自真实接口);四个页面里检索 `Math.random` / `demo` / `mock` / `假数据` 无命中。
|
||||
- iframe 未放宽:游玩页只用 `sandbox="allow-scripts"`(没有 `allow-same-origin`),由发行沙箱脚本在真实浏览器里逐条断言过(storage/cookie/父文档 DOM/跨源请求/Worker/弹窗/顶层跳转都被挡)。
|
||||
- iframe 未放宽:游玩页只用 `sandbox="allow-scripts"`(没有 `allow-same-origin`),由发行沙箱脚本在真实浏览器里逐条断言过(storage/cookie/父文档 DOM/跨源请求/Worker/弹窗/顶层跳转都被挡)。
|
||||
## 本轮核对(2026-09-28,阶段 D 发包边界复跑)
|
||||
|
||||
- 已勾选(阶段 D 第 2 条:200 MiB 上限档与文件数/单文件/展开量/压缩比边界的耗时、内存与失败证据;校验不执行上传代码)——本轮补齐
|
||||
- 新增 `scripts/check-game-distribution-package-limits-e2e.mjs`(`npm run check:game-distribution-package-limits-e2e`,本地真实栈 + 真实 OSS,**11 项 PASS**):
|
||||
- **上限档成功链路**:合法包 **196.0 MiB**(205,521,702 字节,`index.html` + 4 × 49 MiB 随机内容)上传耗时 **36,972 ms**,确认(回读整包 + 展开展开清单)**9,557 ms**,版本落到 `uploaded`,随后送审 202;api-server 工作集 51 MB → 50 MB(没有把整包留在常驻内存里)。
|
||||
- **声明超限**:`packageBytes = 200 MiB + 1` 在建版本阶段就返回 413「发行包大小超出限制」,不必真传包。
|
||||
- **文件数**:10,001 个条目的包在上传校验时 422 `PACKAGE_VALIDATION_FAILED` / `reason=TooManyFiles`,版本落 `upload_failed`。
|
||||
- **单文件**:声明 65 MiB 的条目返回 422 / `FileTooLarge`。
|
||||
- **展开量**:9 × 60 MiB = 540 MiB(每 6 字节塞 1 个随机字节,整包约 145 MiB、仍在 200 MiB 内)返回 422 / `ExpandedPackageTooLarge`。
|
||||
- **压缩比**:10 MiB 全零内容压成 10,556 字节(>100:1)返回 422 / `CompressionRatioTooHigh`。
|
||||
- **校验不执行上传代码**:校验实现 `module-game-distribution` 的 `package.rs` / `release.rs` 里检索 `Command::new` / `std::process::Command` / `spawn(` 无命中;包内 `index.html` 里那行会打接口的脚本在整个校验过程中没有被执行。
|
||||
- 边界说明:失败用例都停在「上传校验」这一步(单发 PUT 会立刻回读校验),版本落到 `upload_failed` 且不会留下半包对象;成功档的 196 MiB 对象会留在 dev bucket 里,属于可丢弃的测试产物。
|
||||
@@ -84,6 +84,7 @@
|
||||
"check:game-distribution-web-publish-e2e": "node scripts/check-game-distribution-web-publish-e2e.mjs",
|
||||
"check:game-distribution-web-publish-recovery-e2e": "node scripts/check-game-distribution-web-publish-recovery-e2e.mjs",
|
||||
"check:game-distribution-web-a11y-e2e": "node scripts/check-game-distribution-web-a11y-e2e.mjs",
|
||||
"check:game-distribution-package-limits-e2e": "node scripts/check-game-distribution-package-limits-e2e.mjs",
|
||||
"check:production-ops": "node scripts/check-production-ops-guardrails.mjs",
|
||||
"check:preview-deployer": "node scripts/check-preview-deployer.mjs",
|
||||
"check:maintenance-page": "node scripts/check-maintenance-page.mjs",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user