修正画布改造工具恢复链路 #158
Reference in New Issue
Block a user
Delete Branch "fix/redraw-fallback-to-quickedit"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
在文档中明确改造特殊情况的处理
修复fallback到快速编辑的行为:
旧版图片按 assetKind 与 mediaType 选择工具,未知图片回落默认生成工具并保留旧版告警,而不是all in fallback到快速编辑
清理冗余代码:
移除 QuickEditPanelState 的 redraw 模式、旧提交分支及无调用结果层构造器
98b943745ato00785fc0c7请求修改。当前 head 的核心恢复路由和 4 项 CI 已通过,但同一份权威方案仍同时保留新的“改造”语义与已经删除的旧“重绘”语义;新 legacy 图片默认生成路径也只覆盖了打开面板,没有验证实际提交和落图闭环。请统一文档合同并补齐提交级回归。另 master 已前进到 a4ead1a,本分支当前落后 2 个提交;修复后请同步最新 master、重新跑完整 CI 再请求 review。
@@ -22,3 +22,3 @@- 生成类产物的工具栏动作 `改造` 不在原产物上原地修改,而是把当次生成输入恢复到对应面板,允许编辑后生成新产物。按钮显隐只按 action capability 判断:确定性派生等不支持改造的 action 隐藏;支持改造的 action 即使参数损坏或必需来源丢失也保留按钮,点击后再显示准确错误,禁止用恢复状态静默隐藏入口。`image.edit` 明确不属于可改造 action:图片快速编辑使用 `targetLayerId` 原位替换画布层,结果层就是被覆盖后的原层,其配方 source 指向替换前的编辑目标,不能再可靠恢复为“改造”新产物;这类结果继续显示“快速编辑”,不显示“改造”。- V2 恢复严格按顶层 `action`、`fields[].id` 和 `references[].id/refType/refId` 定位,`title` / `label` 只是展示快照,不作为参数键。引用只在当前已 hydrate 的画布图层中按 `refType/refId` 匹配,媒体类型取匹配图层的运行时数据,不重复写入 `generationInputs.references`,也不新增 owner-only 工程资源 / 素材库查询。面板直接上传的参考素材不进入素材库、不是画布图层,因此改造时不恢复;原参考图层已移出画布时同样不恢复。**引用在提交时是否必填,不是恢复时拒绝打开面板的依据**:凡目标面板提供重新选择入口的槽位,无论可选还是必填,缺失时都必须 best effort 打开面板、留空槽位并提示用户重新选择,最终由提交门禁校验;例如角色生成缺少必填角色规范、图标生成缺少必填图标规范、普通图片 / 视频缺少参考图时,都必须打开原 action 面板让用户补选。只有已支持改造但目标面板没有手动替换入口、缺少 source 就无法构造请求时才允许拒绝,当前严格限定为两个例外:`character-animation.generate` 的 source 决定角色动作面板绑定的原角色图层,面板内部不能换角色;`ui-design.extract-assets` 的 source 同时决定框选覆盖层的坐标系,素材提取面板不能改绑另一张设计图。两个例外仍按 action capability 保留改造按钮;source 缺失时点击按钮才显示“无法改造”并分别说明不可替换原因,点击后 source 变化也必须在恢复路径再次校验并拒绝;该失败规则不得用于任何可手动补选的槽位。- 改造恢复顺序为:有效 V2;完整的历史生成对话框;按 `assetKind/mediaType`、历史中英文标题别名、资源模型 / 尺寸 / 时长 / `sourceResourceId` 的 legacy adapter,最后缺失值使用当前默认值并显示旧版恢复告警;一旦识别为有效 V2,即使引用缺失也不得降级到 legacy adapter。禁止从中文标题、产物尺寸或 prompt 反推 V2 参数;legacy fallback 除外,但不得回退展示 `actualPrompt` 中的后端拼接 Prompt。当前 BGM 是字段语义上的例外:其新记录中的 `prompt` 与 `actualPrompt` 必须等于输入框已经写回的 canonical `gpt_description_prompt`,不得包含隐藏内容;但改造输入仍只从 `generationInputs.fields` 恢复,不能因此放宽为从资源审计字段回退。- 改造恢复顺序为:有效 V2;完整的历史生成对话框;按 `assetKind/mediaType`、历史中英文标题别名、资源模型 / 尺寸 / 时长 / `sourceResourceId` 的 legacy adapter,最后缺失值使用当前默认值并显示“已按旧版数据恢复,部分参数可能使用当前默认值。”。legacy adapter 必须先按 `assetKind/mediaType` 映射角色、图标、UI、场景、视频、音频等原工具;只有图片族且 `assetKind` 为空或未知时才使用默认的普通图片生成工具。无法映射到可用工具时准确提示无法改造。一旦识别为有效 V2,即使引用缺失也不得降级到 legacy adapter。禁止从中文标题、产物尺寸或 prompt 反推 V2 参数;legacy fallback 除外,但不得回退展示 `actualPrompt` 中的后端拼接 Prompt。当前 BGM 是字段语义上的例外:其新记录中的 `prompt` 与 `actualPrompt` 必须等于输入框已经写回的 canonical `gpt_description_prompt`,不得包含隐藏内容;但改造输入仍只从 `generationInputs.fields` 恢复,不能因此放宽为从资源审计字段回退。[P1] 请清理同一权威文档里的旧 redraw 契约
这里把 legacy 图片改造定义为按
assetKind/mediaType恢复原生成器,未知图片回到普通generate;但本文件第 26、200、207–208 行仍要求“重绘”携带源图、按quick-edit/character提交、在右侧新增结果并保持面板打开。当前实现的普通生成只读取generationReferences,不会因为存在sourceLayerId就自动携带源图,所以两套合同不能同时成立。请明确正式语义并直接改掉所有冲突旧描述:若以“按原 action / 工具恢复”为准,应清理旧重绘、源图引用和面板常驻表述;若旧源图重绘才是正式口径,则需恢复对应提交链路及测试。@@ -1593,3 +1593,3 @@});it('opens image redraw as a new canvas generator next to the source layer', () => {it('opens image remodel without an origin action in the default image tool', () => {[P2] 请覆盖 legacy 图片改造的真实提交闭环
这个新增用例只断言默认
generate面板被打开。此次同时删除了旧 redraw 的提交和结果层分支,因此请求路由、参考图、配方和落图任一处漂移都可能在当前断言下继续通过。请把用例扩展到点击提交,并校验generateEditorImage的 prompt / model / references、generationInputs.action === "image.generate"、canvasCompletion或结果位置,以及生成后 dialog / composer 终态;已知assetKind的恢复路径也应至少有一条同级闭环。