Public beta 发布前 checklist
这份清单是 P9 后的发布收口,不等同于继续扩展引擎功能。目标是让用户第一次打开 site / 安装包时不会踩到明显断点。
Blocking
- [x] Mask 状态定稿:P6-04 API / 像素路径已由 browser 测试覆盖;P6-06 默认用户 UI 已发布 lock alpha / clipping / mask controls。
- [x] 文档同步:
README、docs/guide/、site文案统一到saier/@saier/*,旧pixi-painter只保留为 legacy alias 说明。 - [x] 自定义笔刷说明:已补 Custom Brushes,覆盖
createCustomPreset()/registerPreset()/.myb映射,并说明当前是运行时自定义,持久化需由宿主保存 preset 数据。 - [x] 发布 alias 策略:正式发布主包
saier;旧 npm 包pixi-painter仅作为 deprecated compatibility alias 处理。发布步骤:先发布同版本saier,再发布/更新pixi-painteralias 包或执行npm deprecate pixi-painter@"<目标版本范围>" "pixi-painter has moved to saier; install saier instead";文档与站点不再推荐旧包名。 - [x] 完整 gate:2026-07-01 已通过
eslint .、tsc --noEmit、vitest、unbuild(core / pixi / saier)、Nuxt production build、VitePress build。Codex runtime 的pnpm包装器会先触发非 TTY dependency purge 并失败;项目门禁用等价本地二进制验证。 - [x] 手动 smoke:2026-07-01 已用生产构建 + Playwright 覆盖 site 新建画布、画笔、橡皮、图层、工程保存/读取、PNG 预览/下载、触控双指事件、压感事件抽样。
- [x] YunLeFun 云同步前端 / 规则 gate:2026-07-02 已切到 YunLeFun 统一云空间:普通用户 100MiB、会员 1GiB、单文件 200MiB,Saier 新上传走
user-storage-api的reserveStorageUpload -> uploadFile -> finalizeStorageUpload,删除走deleteStorageFile;本地规则补齐user_storage_quotas/user_storage_files只读、avatars/10MiB 兼容、user-storage/200MiB、legacysaier/projects/过渡访问。 - [x] YunLeFun
user-storage-api后端 gate:2026-07-03 已上线独立user-storage-api,不把 Saier 项目文件或笔刷库动作放进account-api;通用 shared storage 动作支持kind/slotKeypolicy:listStorageFiles可按kind: 'brush-library'+slotKey: 'default'过滤,reserveStorageUpload按 app/kind 限制brush-library为 JSON 且不超过 256KiB,finalizeStorageUpload支持同一userId + appId + kind + slotKey的 singleton replacement;getStorageQuota并发冲突已读回同步结果兜底;下载走通用downloadStorageFile,后端只校验 owner / active / maxBytes,不解析 Saier 业务格式。 - [x] YunLeFun 云同步真实账号 smoke:使用真实普通账号验证 50MiB 上传成功、120MiB 因 100MiB 配额失败;使用真实会员账号验证 150MiB 上传、刷新列表、下载导入、删除;使用绕过前端的请求验证
>200MiB、伪造storageKey、伪造fileID均被后端拒绝;确认www.yunle.fun头像上传仍可用。2026-07-03 P10 scoped 浏览器 smoke 通过:用https://saier.yunle.fun代理本地 production build,真实账号完成项目上传 / 刷新 / 下载导入 / 删除,笔刷库保存 / 清本地缓存后刷新拉回 / 删除后刷新不再出现,且项目列表未混入 brush library。2026-07-03 真实普通账号大文件 / 权限 smoke 通过:>200MiB预留拒绝,伪造storageKey/fileIDfinalize 拒绝,50MiB 上传 finalize 成功,随后 120MiB 因 100MiB 普通配额拒绝,删除 50MiB 文件后 quota 回到基线。2026-07-03www.yunle.fun头像回归改为后端account-api.uploadAvatar上传并通过真实 Web Auth smoke,测试文件已清理。2026-07-03 已后台创建专用会员测试账号ylfmembertest(uid2073046148889456642,不在文档记录密码),会员 quota 懒同步为 1GiB;真实浏览器完成 150MiB project reserve / upload / finalize,列表可见 active 文件,downloadStorageFile返回下载 URL,随后删除释放配额,最终usedBytes/reservedBytes回到 0。 - [x] YunLeFun 测试账号机制:2026-07-08 建立 YunLeFun Test Accounts 规范,固定
ylf_test_用户名前缀、owner/editor/viewer/member 四个槽位、yunlefun.test-account.v1marker、yunlefun_test_accountsbackend-private registry、E2E secret 环境变量和重置策略;legacyylfmembertest仅保留为过渡会员 smoke 账号。 - [x] 云存储路线定稿:当前 beta 使用 CloudBase Storage +
user-storage-api后端预留 / 确认 / 删除状态机,不直接接裸 COS;扩容购买以后再做,quota 文档预留addonQuotaBytes。 - [x] 笔刷云同步路线定稿:自定义笔刷库作为
saier.brush-library.v1JSON 文件进入 YunLeFun shared storage,共用项目文件 quota,单个笔刷库额外限制 256KiB;前端使用通用 storage actions +kind: 'brush-library'+slotKey: 'default',项目列表按kind: 'project'过滤,避免笔刷库混入工程文件列表。
Should
- [x] 笔刷持久化示例:site 已提供账号级 localStorage fallback;2026-07-03 真实账号浏览器 smoke 已验证 YunLeFun shared storage 路径:保存自定义笔刷后上传 brush library,清本地缓存刷新可从云端拉回;删除后同步空库,清缓存刷新不再出现。
- [x] 浏览器兼容矩阵:已补 Browser compatibility matrix,覆盖 Chrome / Edge / Safari / iPadOS Safari 当前可用性、自动化覆盖边界、发布前手动 smoke 要求与已知限制。
- [x] 性能基线截图 / 留档:2026-07-06 已通过
pnpm perf:baseline生成并提交docs/design/performance-baseline/latest.{json,md,png},覆盖 1024² / 4096² 下 dab throughput、tile 数、内存估算与长时间绘画稳定性曲线;自动化同时覆盖 4096² 稀疏 tile + 内存估算、tile buffer / GPU texture 内存快照、同帧多 dab 合并上传、5000 dab 下 tile sprite / upload 不随 dab 数线性增长。 - [x] 错误提示:backend 不支持 sampler 时,涂抹 / 水彩类 preset 会提示需要取色采样 / tile 后端;外部 engine 未加载时提示对应引擎缺失;项目导入失败区分文件读取失败、JSON 无效、非 Saier 工程。
Experimental
- [ ] 真实
MyPaintBrushEngineWasm。 - [ ]
.myb像素级 parity。 - [ ] PSD 完整兼容。
- [x] 多人协作 v1 gate:进入 P13 cloud rooms,
saier-room-api已部署到yunlefun-8g7ybcxc7345c490;P13-06 真实双账号验收已覆盖 snapshot join、committed stroke sync、layer command sync、只读 guard、第三会话 snapshot+ops replay 和 canvas hash。低延迟 ghost preview、owner 管理 UI 和语义 replay 优化作为后续增强。