合并客户端一键发布链路

需求:将 Main-owned 打包提交、状态轮询和安全错误投影并入登录集成候选。

实现:合并已验证的发布功能提交,冲突保留登录续期与发布安全边界。

# Conflicts:
#	README.md
This commit is contained in:
2026-08-08 17:59:33 +08:00
18 changed files with 3056 additions and 31 deletions

View File

@@ -0,0 +1,66 @@
# 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: 7b23cce67a1b9e61a48d89dedbd088d37b10ecd4
- 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 和幂等键全部留在 Main408/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 明确断言发布侧栏和发布资源卡不存在。
- 发布链路聚焦 Vitest6 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: 是。