Files
makelore/.project-docs/00-brief/success-criteria.md
T
brother7 2eaf0450b8
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled
fix: integrate updater downgrade guard
2026-08-26 16:41:53 +08:00

41 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Success Criteria
## Project Success
- {observable project-level success condition}
## Task Completion Standard
- 可发布小游戏/小程序的一键提交必须由 Electron Main 对安全源码快照执行固定 npm 11.6.2 的 `npm ci --ignore-scripts`,并调用项目 `package-lock.json` 锁定的 Vite 生成静态产物。
- Electron 双视口预检必须检查与最终 `built_archive` 相同的内存文件字节;预检失败不得上传,预检成功不得被表述为可信审核凭据。
- 上传协议必须同时携带源码归档、构建归档和严格版本化 artifact contract;服务端独立重算摘要、校验合同并固化不可变 Release。
- Renderer 不得获得发布凭据、归档、临时目录、构建 origin 或任意本地路径;旧客户端和旧 sandbox/browser 任务必须提示升级后重新构建提交。
- Works Project 首次 create 必须用单一 multipart 合同原子提交文字资料与必选的 PNG/JPEG/WebP 封面;创建失败或冲突不得继续上传版本。已有项目保持 version-only;在没有 metadata revision/条件写前,客户端不得通过无条件 PATCH 修改已有资料。
- Learning 必须保持登录和 `module_access.learning` 门禁,并只呈现服务端已发布的分页项目列表、README 详情和下载动作;旧课程生成、进度、本地库、播放器、Agent/ASR/runtime 代码和打包依赖不得继续存在。
- Learning README 必须禁用原始 HTML;远程 HTTPS raster 图片由 Works Square 在发布时校验、镜像并改写为固定媒体路径,Main 以 Bearer 代理并限制可信 MIME 和 10 MiB,Renderer 不获得任意网络代理能力。
- Learning 项目下载必须由 Main 打开原生保存窗口并写入临时文件,不按 `Content-Length`、`archiveBytes`、实际流字节数或客户端上限阻断;最多五跳同源重定向,校验 SHA-256 和 ZIP 签名后再原子落盘。Renderer 只能获得 `saved` 或 `cancelled`,不得获得 Token、上游 URL 或本地路径。
- 历史课程数据不得被新逻辑读取或迁移,也不得在没有独立用户确认与恢复策略时自动删除。
- Robot Guided Hotspot Binding 必须保持固件零改动、Main-owned default-on capability、精确环境值 `0` 回滚、固定系统浏览器 Portal 和现有六位 Binding facade。Windows/macOS 页面内只能扫描开放 `Xiaozhi-*` 短效候选并连接用户明确选择的项;Makelore 不得接触家庭 Wi-Fi 凭据,也不得把热点发现或 Binding 成功等同于可信身份/在线。
- 用户模块入口策略必须由 Electron Main 将 Works `/api/auth/me` 安全投影为四个布尔值;缺失对象/字段默认开启,`design` 映射 `painting`,Renderer 不获得 Token 或原始 profile。
- 被关闭模块必须在卡片和根/深层/别名路由两层均无法进入,且在 `MainLayout`/模块初始化前阻断;Code provider 等待 policy hydration,全局 `/settings` 仍可访问,终止性 `401` 清理 Main/Renderer 会话。该客户端入口策略不能代替 API 授权。
- Makelore Code 必须只使用精确 pin 的 Pi `0.84.2` production runtime;产品源码、安装包和资源根不得保留 OpenCode runtime/package/plugin/fallback/双路径。上游 Pi Provider adapter 的精确静态文件例外必须单列,不能误报为产品旧 runtime。
- 新 project/Agent/Conversation 必须本地原子创建,Composer 在 worker 准备期间仍可编辑。每条 active/warm Conversation 独立绑定 persistent worker/session;Snapshot/Patch、model/thinking、queue、interaction、subagent 和 recovery 不得跨 Conversation 泄漏。
- prompt/compact 的 `202` acceptance 与 uncertain 状态必须保持 request/run/process/background ownership,禁止自动重放;迟到 terminal 事件必须 exactly-once 收敛并重新解锁 Composer。手动 compact 在 Pi `0.84.2` 缺少 `agent_settled` 时必须由 correlated RPC 结果正确结束。
- Provider secret 只能进入目标 worker env。未解析 Conversation 必须 validate → persist resolved model → prepare;确定性 Works user-context 缺失必须失效缓存凭据、停止 Pi 自动重试并投影固定 Provider-auth 错误,而不是表现为 runtime crash、永久 submitting 或不可恢复的 Conversation。
- top-level worker 并发 4、child 并发 4、warm idle LRU 4、parent/child 总进程预算 8 与同项目 write lease 必须在正常、abort、crash、timeout、rebuild 和 app quit 路径全部归零;运行中的 Conversation 不得因页面隐藏而被停止。
## Quality Checks
- 发布安装包前运行 `pnpm verify:publish-runtime`,并对最终 Windows 产物运行 `pnpm verify:artifact:win`;固定 npm 闭包缺失或版本不符时 fail closed。
- 至少覆盖 release builder/静态产物服务/发布路由/Renderer 状态的聚焦测试、typecheck、scoped lint、Vite 构建和真实 Electron 双视口 production-seam E2E。
- 真实生产发布仍需成组验证服务端合同、不可变 Release、运营审核、CDN/App 播放;客户端本地验证不能替代该整链验收。
- Learning 上线前必须部署 Works Square 项目管理、对象存储、README HTTPS URL 校验和 list/detail/media/archive API,并使用真实账号和正式安装包验证发布/下架、分页、README 图片、下载取消、缺失或错误 `Content-Length`、损坏/摘要不匹配 ZIP,以及 Windows 与签名 macOS 保存行为。
- Robot 默认引导路径必须通过聚焦 Renderer/Main/native 测试并保留 `NIANCODE_AI_HARDWARE_GUIDED_HOTSPOT_BINDING=0` 回滚。真实 Host API/native seam Electron E2E、Windows Robot 真机、签名 macOS x64/arm64、指定固件镜像与六位码发行契约未完成前,不得宣称完整双平台硬件兼容或端到端配网已经验收。
- 四模块入口策略发布前必须部署 Works migration/API、重新打包客户端,并以真实账号对 Code、Canvas、Learning、Robot 分别执行关闭 smoke;客户端自动化不得代替服务端 API 授权验收。
- Windows 最终安装包必须通过 Pi production closure、最终 `app.asar` Main、真实 extension/ephemeral child、4 parent + 4 child live-PID、prompt/compact uncertainty、late-settle 和零残留进程验证。loopback/provider-shaped smoke 只能证明协议序列化与本地隔离,`realTurnVerified=false` 时不得宣称真实 Provider Pass。
- macOS x64/arm64 与 native non-WSL Linux desktop/compositor 的最终安装产物仍是 cross-platform release gate;Windows 或 WSL2/WSLg 通过不能替代这些平台证据。
## Last Reviewed
2026-08-26