完美像素既有结果应在源图处理前进入权威对账 #160

Closed
opened 2026-08-10 22:02:42 +08:00 by kdletters · 0 comments
Member

背景

PR #155 将完美像素算法升级为 perfect-pixel-v2,并为同一稳定 operation 已存在旧结果的情况增加 operationResultAlreadyExists=true,让前端转入 GET-only 权威项目对账。

本 Issue 是低频跨版本恢复边界,不阻断 PR #155。

当前问题

api-server 从 owner-scoped 项目快照中已经识别到同一稳定 result resource 后,仍继续:

  1. 解析并下载源图;
  2. 校验静态图片;
  3. 执行完整像素规整;
  4. 生成 candidate object key;
  5. 最后才比较既有 object key 并返回 operationResultAlreadyExists

因此,当旧版结果其实已经持久化,但旧响应和随后对账都未被客户端观察到,新版 exact retry 又遇到源对象已删除、OSS 临时故障或处理预算耗尽时,请求会先返回源图/处理错误。前端拿不到 operationResultAlreadyExists,不会进入已有结果的 GET-only 收口。

该问题不导致重复扣费、数据丢失或越权;主要影响是极端恢复场景下错误优先级不准确,以及一次不必要的 OSS 下载和 CPU 处理。

期望行为

只要 owner + project + operation 对应的稳定结果记录已存在,应在源图下载和 CPU 规整之前进入“读取权威项目事实”的收口路径。既有记录损坏或与 dialog/layer 不一致时,仍由权威项目 verdict 明确报告冲突,不重新执行 POST 副作用。

验收标准

  • 既有稳定 result resource 的检测发生在源图下载与 snap_editor_pixel_art_strict 之前。
  • 该分支不执行 OSS GET、像素规整、preflight 或 OSS PUT。
  • 返回值能让首次提交与人工重试两条前端 catch 进入同一 GET-only 对账。
  • 不附加 resultPersistenceStarted=true;本次请求尚未开始持久化。
  • 覆盖“旧结果存在 + 源对象缺失/下载失败”回归,证明仍优先进入权威对账。
  • 覆盖既有结果完整、dialog missing、记录冲突/损坏三类 verdict。
  • 不新增 SpacetimeDB schema,不扩大到普通生成任务或其它历史兼容。

相关位置

  • server-rs/crates/api-server/src/editor_project.rs:既有稳定资源识别、源图下载、像素规整及 operationResultAlreadyExists 护栏。
  • src/components/image-editor/useImageCanvasGenerationWorkflow.ts:首次提交与人工重试的 GET-only 对账。

关联:PR #155。

## 背景 PR #155 将完美像素算法升级为 `perfect-pixel-v2`,并为同一稳定 operation 已存在旧结果的情况增加 `operationResultAlreadyExists=true`,让前端转入 GET-only 权威项目对账。 本 Issue 是低频跨版本恢复边界,不阻断 PR #155。 ## 当前问题 `api-server` 从 owner-scoped 项目快照中已经识别到同一稳定 result resource 后,仍继续: 1. 解析并下载源图; 2. 校验静态图片; 3. 执行完整像素规整; 4. 生成 candidate object key; 5. 最后才比较既有 object key 并返回 `operationResultAlreadyExists`。 因此,当旧版结果其实已经持久化,但旧响应和随后对账都未被客户端观察到,新版 exact retry 又遇到源对象已删除、OSS 临时故障或处理预算耗尽时,请求会先返回源图/处理错误。前端拿不到 `operationResultAlreadyExists`,不会进入已有结果的 GET-only 收口。 该问题不导致重复扣费、数据丢失或越权;主要影响是极端恢复场景下错误优先级不准确,以及一次不必要的 OSS 下载和 CPU 处理。 ## 期望行为 只要 owner + project + operation 对应的稳定结果记录已存在,应在源图下载和 CPU 规整之前进入“读取权威项目事实”的收口路径。既有记录损坏或与 dialog/layer 不一致时,仍由权威项目 verdict 明确报告冲突,不重新执行 POST 副作用。 ## 验收标准 - 既有稳定 result resource 的检测发生在源图下载与 `snap_editor_pixel_art_strict` 之前。 - 该分支不执行 OSS GET、像素规整、preflight 或 OSS PUT。 - 返回值能让首次提交与人工重试两条前端 catch 进入同一 GET-only 对账。 - 不附加 `resultPersistenceStarted=true`;本次请求尚未开始持久化。 - 覆盖“旧结果存在 + 源对象缺失/下载失败”回归,证明仍优先进入权威对账。 - 覆盖既有结果完整、dialog missing、记录冲突/损坏三类 verdict。 - 不新增 SpacetimeDB schema,不扩大到普通生成任务或其它历史兼容。 ## 相关位置 - `server-rs/crates/api-server/src/editor_project.rs`:既有稳定资源识别、源图下载、像素规整及 `operationResultAlreadyExists` 护栏。 - `src/components/image-editor/useImageCanvasGenerationWorkflow.ts`:首次提交与人工重试的 GET-only 对账。 关联:PR #155。
lhk229 was assigned by kdletters 2026-08-10 22:04:33 +08:00
kdletters referenced this issue from a commit 2026-08-13 13:28:46 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#160