需求:让非专业用户在项目操作区一次提交,运营审核通过后直接发布。 实现:由 Electron Main 完成安全打包、自动版本、幂等重试和状态脱敏;补齐友好失败反馈、唯一提交入口及隔离 Electron E2E fixture。
5.8 KiB
5.8 KiB
Task: 迁移并验收 Makelore 一键发布客户端
Identity
- Task ID: 20260807-makelore-release-client-8c4e
- Mode: Feature
- Branch: codex/20260807-makelore-release-client-8c4e-makelore-release-client
- Worktree: D:\Datas\OthersProjects\makelore-release-client-8c4e
- Base commit:
7b23cce67a - Owner: codex
- Status: Ready for Integration
Scope
- 以
D:\Datas\OthersProjects\makelore为正确客户端仓库,重新核对一键发布实现与 Electron E2E 基线。 - 补齐
tests/e2e/fixtures/electron.ts,恢复现有 Electron E2E 的测试收集和隔离启动能力。 - 在不恢复独立发布/上传工作台的前提下,迁移 Main-owned 安全打包、自动版本、幂等重试和友好失败反馈。
- 用户已确认在现有项目操作区增加唯一“提交审核”动作;不新增发布页面、侧栏入口或发布资源卡。
Intent And Constraints
- 项目文件、ZIP 生成、Works Square Token、幂等键和网络重试均由 Electron Main 持有;Renderer 只调用 Host API。
- 遵守 Makelore 产品边界:不恢复 Works/素材广场、发布上传页面或云部署工作台。
- 保留内部
niancode兼容标识,面向用户的新增文案使用 Makelore。 - 当前主工作区存在未归属的登录、设备预览等改动;所有实现只允许在本任务隔离工作树进行。
- E2E 每个测试使用独立临时 profile,同一测试内重启复用该 profile,结束后关闭 Electron 并清理临时目录。
Outcome
- 已确认此前客户端改动落在错误的 NianCode 工作树,不能计为 Makelore 已完成;服务端发布链路不受此路径更正影响。
- 已确认 Makelore 当前 HEAD 与全部本地 Git 历史都缺少
tests/e2e/fixtures/electron.ts,但 13 个 E2E spec 均导入该模块,因此 Playwright 会在测试收集阶段因模块不可解析而停止。 - 已补齐 fixture 最小契约:
test、expect、launchElectronApp、electronApp、page、getStableWindow、closeElectronApp与completeSetup;每个测试隔离 profile,同测试重启复用,所有 Electron 进程都有有界关闭与强杀兜底;启动环境采用跨平台必要变量白名单,不继承 Works 配置、密钥或开发服务器地址。 - 已在 Electron Main 增加确定性静态项目打包:校验 npm/Vite 根项目、生成兼容
niancode.yml、排除依赖/构建产物和常见云凭据/私钥/密钥状态文件、限制数量与体积,并通过目录祖先 identity 链在扫描、打开和读取前后拒绝符号链接、越界目录与打包期间替换。 - 已将 Works Square 会话 Token、
VERSION.md/时间版本、更新说明、临时 ZIP 和幂等键全部留在 Main;408/502/503/504 与网络异常重试复用同一键和相同字节,新的用户提交生成新键。 - 已为提交和当前项目状态提供无 Renderer Token 的 Host API;成功响应也只投影安全字段并校验必需结构,异常 200、安全失败、上游正文、构建堆栈、路径与未知字段均不会进入 Renderer。
- 已在现有项目配置底部操作区加入唯一“一键提交审核”:自动作品 ID/标题/简介/分类,2 秒轮询云端构建,成功后显示“已提交,等待运营审核”,可恢复失败给出原因和下一步,不确定结果保持锁定以防重复提交。
- 未新增
/publish路由、发布侧栏或发布资源卡;现有 E2E 继续断言这些工作台入口不存在。 - fixture 恢复后暴露的登录按钮旧文案、设置页旧 test id/控件和项目配置旧入口断言已按当前 Makelore 产品行为更新,没有为测试绕开生产登录门禁。
- README 已同步当前产品状态:不恢复独立发布工作台,只在现有项目配置底部提供 Main-owned 一键提交审核。
Verification
- 只读文件检查确认
tests/e2e/fixtures目录不存在。 git ls-tree -r HEAD -- tests/e2e确认当前提交只包含 13 个 spec,不包含 fixture。git log --all -- tests/e2e/fixtures无结果,确认没有可直接 cherry-pick 的本地历史来源。rg确认现有 spec 需要 shared fixture,同时现有 E2E 明确断言发布侧栏和发布资源卡不存在。- 发布链路聚焦 Vitest:6 files / 77 tests passed。
pnpm run typecheck与全部变更 TypeScript/TSX 的 scoped ESLint 通过。pnpm run build:vite的 Renderer、Main、Preload 构建通过;仅保留仓库既有的大 chunk 提示。pnpm exec playwright test --list --reporter=line成功收集 13 files / 21 tests。- 真实 Electron 串行验收覆盖首次设置、跳过后登录门禁、同 profile 重启、俄语设置持久化、创建项目、Superpowers 默认关闭和唯一发布入口:8 passed。
git diff --check通过,构建输出与依赖没有进入未跟踪文件列表。
Follow-ups
- 使用真实 Works Square URL、创作者账号和已部署 Builder/Static Gateway 运行“客户端提交 → 构建/浏览器门禁 → 运营批准 → 公共作品”整链;当前本地验证未冒充生产发布成功。
- 集成时优先合并服务端发布生命周期与门禁,再发布依赖新状态字段和错误码的 Makelore 客户端。
Promotion Candidates
- Target: Makelore
AGENTS.md或发布集成说明。- Proposal: 将“发布入口只存在于现有项目操作区,Renderer 只发 projectId/非敏感元数据,Main 持有文件、Token、版本、ZIP、幂等与重试”记录为长期客户端边界。
- Evidence: 本任务实现、77 项聚焦回归、13/21 E2E 收集和 8 项真实 Electron 验收。
- Future impact: 后续发布状态、失败反馈和真实环境验收不得重新引入发布工作台或 Renderer Token/文件路径。
- Semantic conflicts: 无;与仓库禁止恢复发布/上传工作台的现行约束一致。
- Human confirmation required: 是。