12 KiB
客户端与 Web 收尾验收(2026-10-22)
结论和边界
本次完成服务端“完结”保护和 Web 只读体验修正。真实产品已跑通资料、两批卖点、方案确认、三屏生成、改字、撤销重做、导出、草稿/完结同步、新客户端恢复和 Web 查看;独立测试副本通过双端删除。
第二屏经历真实连接中断,曾按未知结果保留。18:49 后根据 98k 提供的原请求号,通过原 Key 的 GET 取回成功图片,未重发第二屏;随后只生成尚未派发的第三屏。全部成功后才将原项目标记完结。旧未知请求 6986651c-dff8-4af9-8870-2eefed8df21d 继续保留,不在本次恢复范围。
本轮改动
- 服务端完结提交与任务登记使用相同账户锁、项目锁顺序;事务内核查持久任务、有效租约及原有/传入的未决摘要。有排队、运行、待应用或未知任务时返回
409 task_busy,不能省略摘要绕过。 - 草稿仍可同步未决任务原身份。原请求只读恢复后,先同步已处理的草稿摘要,再标记完结;不清除真实未知任务。
- Web 产品资料折叠入口增加至少 44px 的操作区和键盘焦点;只读画布的读屏及错误提示不再指向编辑功能。
- 更新原生客户端说明,反映已实现的云同步、草稿/完结和删除联动。
不改数据库结构、迁移、存储策略或模型开放范围;其他知识库、旧 Electron 与本机 Docker 清理改动不在本次提交内。完整创作流程使用已核对的本地 portable;随后另补原图片任务的请求号绑定保护和公开幂等键定位路径,仍只读恢复、不重发。
真实产品和请求记录
产品为素材库顾家 GBGJ-CYJ0056 穿衣镜,素材编号 0f824cf5-e798-41a4-ba70-cfc794655869。从同产品八张资料图中选择三张,品牌采用该素材的实际顾家目录与企业规则快照,不以图片外观推断品牌、尺寸、基材或性能。
grok-4.7:真实提取九项可观察事实,缺失尺寸、材质、承重、旋转能力等列为待确认;生成两批卖点,跨批选择后生成三屏方案;用户侧确认后才开始生图。nano-banana-2首屏:任务fb4696a5-16d1-4510-85b3-6c91b6c62d19,客户请求号e7e55032-2d82-4b45-9e60-8558c254ba84,图片已保存。此前用户手动新建/切换/关闭文档,生成被接手保护停止;离线打开原项目恢复首屏,未重发。- 继续缺失屏时的第二屏:幂等键
42e84e04-4738-48c0-b3c0-31ee097b7a35,2026-10-22 18:16:51(UTC+8)附近派发,客户端退出前未留存响应。98k 核查提供客户请求号cc6a9ed9-863b-419f-bd1a-b126833227fb。先备份两份本地任务记录,只补上此原请求号,再由原生creation-recover使用原 Key 执行 GET,取回原图并载入原项目;任务 ID、幂等键、首屏身份不变,没有生成 POST。 - 第三屏:仅在第二屏确认成功后首次派发,任务
18bf9f4e-ebcf-451e-bd32-3f775837bfe3已成功。 - 旧未知请求
6986651c-dff8-4af9-8870-2eefed8df21d未重发、未改写。其本地任务 SHA25664091f2b78b83124f3d22bf2075878f79c343c656692b5cc9b96dea380e4ffcd,线上原未知队列指纹84528fce5928dc3fae11b70ed9c682392015436331f7044fe12999c56cfdefe4已只读复核一致。
仅使用本项目素材库授权和 98k 对外调用;不读取 98k 源码、数据库或服务器。
已成功部分的实际验收
原三屏项目 df8c6689-a053-4918-ad2b-0166f4622d3e 先以待核查草稿同步到另一客户端,验证原任务、阶段和首屏哈希保留;取回第二屏并完成第三屏后,正常同步为完结。保留该成品作为验收样张,不删除。
从成功首屏另建独立 QA 副本,没有复制未知任务到新副本,也没有伪造缺失屏:
| 检查 | 结果 |
|---|---|
| 编辑与撤销 | “照见日常”改为“照见生活”,完整图层树撤销/重做一致,无模型调用 |
| 导出 | Pcraft、PNG、JPG、PSD;1440×2336 |
| PSD 独立解析 | ag-psd 检出一组、两个中文可编辑文字层,NotoSansSC-Bold/Regular;未使用 Photoshop 打开 |
| 云同步 | 同一独立云 ID 从 draft 转 completed;文件和预览实际上传 |
| 新设备恢复 | 空 profile B 通过原账户授权恢复,图像/中文/字体一致,不伪造撤销历史;重开和自动保存保持完结 |
| 卡片 | 真实首屏封面、云关联 2 个物理像素蓝框;草稿/完结不同角标 |
| 未知草稿恢复 | B 恢复原草稿后仍显示待核查,第二屏 UUID/阶段/空请求号和首屏图像哈希保留,没有生成或恢复 POST |
| Web 桌面/手机 | 首屏封面、完结状态、只读图像;原草稿事实/两批卖点/屏幕可查看,无编辑或生成入口;390px 无横向溢出 |
| 删除 | 仅新建独立 QA,通过提示、默认取消、确认删除和另一端刷新验证,保留原未知项目和素材库源文件 |
Web 摘要不展示内部任务请求号;不能声称 Web 已提供该未知请求的恢复入口。
完整三屏进一步验收:画布 1440×6519,三张不同真实生成结果,三组、六个 Noto Sans SC 可编辑中文层。首屏标题改为“照见生活”,撤销/重做图层树一致。Pcraft、PNG、JPG、PSD 已导出,ag-psd 独立解析三组和六个文字层,未使用 Photoshop 打开。全新 profile C 恢复三屏完结项目,确认不伪造撤销历史、重开/自动保存不降为草稿。Web 桌面/手机实际查看全部三张图片、两批卖点和完结状态。逐张检查可见产品结构、暖棕木纹外观、米色空间与柔光保持一致;源图分辨率分别为 896×1200、1024×1024、896×1200,1440px 是排版画布和导出宽度。
本地 Application 错误事件 1000/1001 在 18:16—18:21 未检出 PhotoCraft 崩溃记录;旧进程退出码未留存,无法判定退出原因。98k 源站写出 HTTP200 不等于桌面已完整消费响应,不把原因归咎于用户或中转。
服务端发布验收
服务端实际发布版本为 c7309f17da9ba656f96a4e12810b524590a16241,镜像 config 为 sha256:283117e254afd3ccade51325f7e8cbbc957ce69d4ad12e01579954dbdd1220a5。部署后容器、镜像内版本和公网版本一致,数据库与 Redis 正常;上传、私有工程目录仍挂载原路径,没有执行 DDL。
首次候选发布因部署环境重复保留旧 worker 实例字段而未通过能力检查,已自动回退。修正部署器负责的字段过滤与能力有界等待后重新发布成功,未放宽门禁。七项运行字段均唯一,双能力标记匹配新实例;reconcile timer 和 service 已恢复原状态,旧未知队列及本地旧任务文件哈希不变。定向部署脚本回归 26 项通过。
上线后的 Web 桌面和 390px 手机均实际打开保留样例:三张不同真实预览加载成功,显示完结,保留产品资料与两批卖点,无编辑或生成入口、无横向溢出;资料折叠入口两种宽度均实测 44px。此次复验无模型调用和删除操作。
回执:postdeploy-readonly-c7309f17da9ba656f96a4e12810b524590a16241-2026-10-22T11-15-18.496Z.json、web-final-deployed-readonly-receipt.json。
新客户端原请求恢复验收
通过原 Key 实测 GET /api/external/requests/by-idempotency-key,以第二屏原任务 UUID 作为 Idempotency-Key 请求头,公开接口返回原客户请求号、成功状态和可取回结果。客户端使用固定公开域名和严格相对结果路径,先持久化原请求号,再 GET 原结果;查询不成功不授权生成重试。
新原生 Release 的图片恢复源码 SHA256 为 213992e81a8b6ababb5e5bb76a159358546b63d3e327269f79eee8ef31a2a274,与七项定向 Rust 单测的实际函数一致;隔离 clippy 无警告,完整离线锁定 Release 编译通过,Windows 项目图标和版本资源实际嵌入。新 exe SHA256 为 04e717753fee35106ef432fb82243e0f39ec7c6b3cf5781273880f5ac6db84e7。
使用该 exe 的全新 profile D 恢复三屏完结云项目,确认 1440×6519、三组和六个可编辑 Noto Sans SC 中文层。只在 D 的隔离副本移走第二屏响应、清空原请求号并设为待核查,保留任务 UUID、原 Key 指纹、原参考资料和三屏结果。恢复时不提供人工请求号,实际定位并取回原图;两份任务记录最终完全一致,三屏的任务号和源图哈希全部保持不变,已修改的“照见生活”保留。A、C 和原云项目未执行修改;验收脚本没有生成、同步或删除动作,恢复分支经源码复核只有 GET。
所有“跨设备”恢复采用同一台 Windows 上的独立客户端配置验证,没有把它描述为第二台实体电脑测试。新候选的 Agent 与许可目录复用本机旧包的目录联接,不是可离线分发到另一台电脑的完整安装包。桌面现有快捷方式沿用原用户配置目录,仅更新程序目标,并排除隔离验收实例。
回执:new-binary-restored-report.json、new-binary-recovery-report.json、image-recovery-lookup-validation.json、native-image-recovery-package.json、native-image-recovery-executable-resource-report.json;原生构建专用缓存在候选通过后精确清理,工程、素材、授权、Key、运行资产和回执保留。
回归与交付身份
- 精确
419602a1基线加本次七个文件构建隔离候选,排除工作树其他 WIP;逐文件校验。 - 后端七套 37 项、UI 两套 12 项、TypeScript 检查、已提交迁移闭包 25 项均通过;部分套件覆盖重叠,不合计为互不重复的总数。
- 独立本地 PostgreSQL 四组真实事务核查:任务登记与完结竞争锁、未知摘要保留、账户隔离、完结状态保持和限定合成项目删除。
- 创作验收 portable SHA256:
334de3d5ec40c7c6f6c9f6ebcde4f28043a6fda4fe3b3425cf629a88c358398c。新设备共用同一程序文件;后续人工请求号绑定修复的构建与验收另存回执,不与该旧 portable 混称。 - 本轮应用发布不运行 DDL、品牌导入或修复 SQL;精确 Git 源码本机构建 runner,仅传成品镜像。现有 direct 流程为短暂停机替换并带回退,不承诺零停机;切换前须复核上传、转码和队列空闲。
本地证据:output/native-final-acceptance-20261022/ 中的 candidate-verification.json、known-first-report.json、known-first-native-delete-report.json、web-dual-delete-receipt.json、recovered-second-original-report.json、post-generation-edit-sync-report.json、three-screen-offline-report.json、post-generation-restore-b-report.json(实际使用新设备 C)、web-three-screen-readonly-receipt.json;事务证据在 output/native-closeout-recheck-20261022/。最终提交、镜像身份和部署健康回执按该 SHA 保存至本轮 release-<SHA>/,不以候选测试代替部署证据。
后续原生重启恢复与窗口收尾
晚间补充客户端启动只读恢复、原项目补屏、B 编辑隔离、有界生命周期及已应用终态保护。最终 exe ff0397e2f23196f053c801d7ebbc628f7eaf1f0267a2d889f000208b13282cb3 已实际通过首次自动补屏、再次重启不重复应用、B 改字保存后正常打开 A 三项 GUI 验收。全部测试窗口正常退出,只留用户原 PID 51704;桌面启动器指向新包且沿用原 profile,下次用户重开生效。
必须区别历史人工 GET 取回和本轮自动恢复:本轮公开接口定位及结果 GET 均 200,但原图公网下载为 404,保留待核查,不重发。正向自动恢复使用客户此前已保存、哈希一致的原图缓存及真实原任务,不能称为新的网络下载成功。历史退出原因仍未知,旧未知任务文件不变;本次没有 Web 构建或重新部署。
详细身份、测试范围、账务只读核查归属及缓存收尾见原生客户端重启恢复验收。本轮清理约 3.791 GiB 专用构建与测试产物,原运行包、数据库、素材、项目和草稿保留;另有自动审批拒绝删除的 201.5 MiB 测试缓存如实保留。