补强静态发布安全边界
This commit is contained in:
@@ -46,6 +46,11 @@
|
||||
- 内置 skill 清单把 `deploy-publish-check` 标记为 retired,客户端启动时会清理已安装副本;课程、开发和营销提示统一改为“用户一键提交、平台安全打包与云端验收”,不再要求 Dockerfile、Compose、ZIP 或服务器信息。
|
||||
- 项目进度同步改用已提交版本绑定识别服务端项目,不再依赖 AI 生成的 `works-publish.json`。README 已同步静态 Release、`play_url` 和兼容边界。
|
||||
- 保留一般 OpenCode/Monaco 的 Dockerfile 语法支持、AI 设计能力、会话运行时清理和打包器对历史控制文件的安全排除;这些能力不属于旧 Compose 发布协调链。
|
||||
- 补强 Main 边界:`/api/works/projects/publish-source` 必须携带 Renderer capability,缺失或错误时在读取发布凭据、查询项目和打包前直接返回 403,OpenCode 子进程不能只凭 Host token/base 绕过 UI 发起发布。
|
||||
- 抽取共享播放 URL 校验器供 ProjectPublic 投影和设备预览复用:只接受与 Works Square base 同源的 HTTPS、禁止 userinfo/loopback、限制长度,公共作品必须精确落在 `/apps/{encodeURIComponent(app_id)}/` 且无 query/fragment;只有 `playable === true`、版本名非空且首选 `play_url`(字段缺失时才兼容 `runtime_url`)可信时才对 Renderer 标记可播放。
|
||||
- 上传云端成功但本机版本绑定落盘失败时,Main 返回固定、无磁盘路径的结构化 `binding_warning`;Renderer 显示“已提交云端,但本机预览绑定保存失败;可重新打开项目/重新提交”,同时继续轮询云构建,避免把本地辅助状态失败误报为上传失败。
|
||||
- schema v2 读取改为逐字段验证,约束 submitted/legacy_retired 的状态专属字段,并在按项目读取时校验绑定内 `project_id` 与当前项目一致,拒绝复制或串项目的绑定文件。
|
||||
- Electron E2E 增加用户可见入口断言:新建小游戏后只展示一个“一键提交审核”按钮,旧“自动部署/部署发布检查”入口不可见。
|
||||
|
||||
## Verification
|
||||
|
||||
@@ -58,6 +63,11 @@
|
||||
- `pnpm run build:vite`:Renderer、Electron Main、Preload 均构建成功;仅有仓库既有 dynamic-import/chunk-size 提示。
|
||||
- `pnpm exec playwright test --list --reporter=line`:成功收集 13 个 Electron E2E 文件、21 条用例,当前仓库不存在“缺少 Electron E2E fixture”问题。
|
||||
- `git diff --check`:通过;仅有 Git 的 LF/CRLF 工作区提示。
|
||||
- 安全补强聚焦回归:`pnpm exec vitest run tests/unit/works-play-url.test.ts tests/unit/works-submission-binding.test.ts tests/unit/device-preview-routes.test.ts tests/unit/project-progress-sync.test.ts tests/unit/works-routes.test.ts tests/unit/works-square.test.ts tests/unit/project-publish-action.test.tsx tests/unit/works-project-publish.test.ts tests/unit/project-packager.test.ts tests/unit/opencode-routes.test.ts`:10 files / 227 tests passed;覆盖 capability 先行拒绝、公共 URL fail-closed 投影、绑定告警继续轮询、schema v2 状态字段与 project_id 一致性。
|
||||
- 对本次补强涉及的全部 TS/TSX 文件执行 scoped ESLint:0 errors / 0 warnings。
|
||||
- 安全补强后再次执行 `pnpm run typecheck` 与 `pnpm run build:vite`:均通过;构建仅有既有 dynamic-import/chunk-size 提示。
|
||||
- `pnpm exec playwright test tests/e2e/project-superpowers-toggle.spec.ts --reporter=line`:1 passed;实际 Electron 启动、创建小游戏、一键提交入口和旧自动部署入口消失均通过。
|
||||
- 安全补强后再次执行 `pnpm exec playwright test --list --reporter=line`:成功收集 13 个 Electron E2E 文件、21 条用例。
|
||||
|
||||
## Follow-ups
|
||||
|
||||
@@ -69,7 +79,7 @@
|
||||
|
||||
- Target: `.project-docs/20-architecture/system-overview.md`、`.project-docs/40-domain/business-rules.md` 与 README 当前产品状态。
|
||||
- Proposal: 客户端发布唯一链路是 Main 安全生成静态包并提交服务端 Builder;客户端只持久化成功提交的精确版本绑定,不再拥有 Compose runner、自动 watcher/arm/upload 或手工 ZIP 入口。
|
||||
- Evidence: 本任务删除 3,000 余行旧协调代码与测试,新增 schema v2 迁移及 216 项聚焦回归,typecheck、Vite 构建和 Electron E2E 收集通过。
|
||||
- Evidence: 本任务删除 3,000 余行旧协调代码与测试,新增 schema v2 迁移、安全播放 URL 投影和 Renderer capability 门禁;补强后的 227 项聚焦回归、typecheck、Vite 构建、实际 Electron E2E 与 E2E 收集均通过。
|
||||
- Future impact: 后续发布功能必须建立在 immutable static Release、`play_url` 和服务端审核发布状态之上;不得重新要求非专业用户准备 Docker/Compose/ZIP/服务器凭证。
|
||||
- Semantic conflicts: 落盘文件名 `works-cloud-deploy.json` 仅为已安装数据兼容,不代表仍存在 cloud deployment coordinator;`runtime_url` 仅为一个客户端版本的临时兼容字段。
|
||||
- Human confirmation required: 是;用户已明确要求一步到位移除旧 runtime-cleaner/runner 方向并统一到 Builder -> OSS -> CDN -> App,canonical promotion 仍由 Integration Gate 执行。
|
||||
|
||||
Reference in New Issue
Block a user