Feat/优化 图标规范+生spiritsheet 提示词 #137

Closed
k88936 wants to merge 0 commits from feat/better-icon-spiritsheet into master
Member
  • 输入框用户提示词原地一键优化 (实现: 后端为每个字段新增endpoint)

前端 UI:
shotmd-1786010383.jpg

  • 图标规范需要llm根据用户输入做推断, 新增了external job id, 让llm推断在worker里进行,确保llm调用在参数余额校验之后

  • 最终生成图标需要 图标规范携带一些元数据用于动态调整提示词, 将其放在generation_input_json.fields[] 里, 生图标时查询获得, 兼容lagacy,对不存在特殊处理.
    查询需要稳定的resourceID, 更改了相关接口,类型(原来前后端传递的都是obj key)

依然有 #134 持久化与画布完成操作不具备原子性的问题

历史遗留问题与pr无关, 标注TODO,未处理:

  • 并发切片上传失败后可能遗留 OSS 对象
  • 处理 deadline 没有覆盖 PUT / HEAD / 持久化
  • ...
- 输入框用户提示词原地一键优化 (实现: 后端为每个字段新增endpoint) 前端 UI: ![shotmd-1786010383.jpg](/attachments/be76e609-aaa6-44c2-9712-f178fd658e52) - 图标规范需要llm根据用户输入做推断, 新增了external job id, 让llm推断在worker里进行,确保llm调用在参数余额校验之后 - 最终生成图标需要 图标规范携带一些元数据用于动态调整提示词, 将其放在generation_input_json.fields[] 里, 生图标时查询获得, 兼容lagacy,对不存在特殊处理. 查询需要稳定的resourceID, 更改了相关接口,类型(原来前后端传递的都是obj key) 依然有 #134 持久化与画布完成操作不具备原子性的问题 历史遗留问题与pr无关, 标注TODO,未处理: - 并发切片上传失败后可能遗留 OSS 对象 - 处理 deadline 没有覆盖 PUT / HEAD / 持久化 - ...
k88936 self-assigned this 2026-08-05 15:58:04 +08:00
k88936 added this to the 美术画布 project 2026-08-05 15:58:04 +08:00
k88936 marked the pull request as ready for review 2026-08-06 19:40:50 +08:00
kdletters requested changes 2026-08-06 20:47:26 +08:00
kdletters left a comment
Member

当前 head 仍有以下阻塞,暂不建议合并:

  1. [P1] 图标规范上传入口与后端类型合同不一致。 “图标规范 → 上传图片”仍复用通用图片上传,持久化为 assetKind=image;本 PR 新增的图集引用解析只接受 icon-spec,因此用户可见入口得到的引用会被稳定拒绝。请让该入口登记正确的权威类型,并补从上传到提交图集生成的回归测试。
  2. [P2] 权威文档仍保留已废止合同。 三份专题文档仍写 editor_image_generationreferenceImageSrc / objectKey 与“不新增独立任务类型”,而当前实现已经改为独立 editor_icon_spec_generation 及仅接受正式 referenceId。请在同一 PR 内统一更新。
  3. [P1] 提交历史不符合仓库门禁。 468dc1c1a2b275382 使用英文 feat/fix 前缀;806333a310cef9b1 使用英文 merge 标题;另有 559f4edc690b649641a7182d 等只有标题、没有逐行变更正文。请在合并前 squash/reword,使每个最终提交使用中文标题,并在标题后逐行写明各项修改。
当前 head 仍有以下阻塞,暂不建议合并: 1. **[P1] 图标规范上传入口与后端类型合同不一致。** “图标规范 → 上传图片”仍复用通用图片上传,持久化为 `assetKind=image`;本 PR 新增的图集引用解析只接受 `icon-spec`,因此用户可见入口得到的引用会被稳定拒绝。请让该入口登记正确的权威类型,并补从上传到提交图集生成的回归测试。 2. **[P2] 权威文档仍保留已废止合同。** 三份专题文档仍写 `editor_image_generation`、`referenceImageSrc` / objectKey 与“不新增独立任务类型”,而当前实现已经改为独立 `editor_icon_spec_generation` 及仅接受正式 `referenceId`。请在同一 PR 内统一更新。 3. **[P1] 提交历史不符合仓库门禁。** `468dc1c1`、`a2b275382` 使用英文 `feat/fix` 前缀;`806333a3`、`10cef9b1` 使用英文 merge 标题;另有 `559f4edc`、`690b6496`、`41a7182d` 等只有标题、没有逐行变更正文。请在合并前 squash/reword,使每个最终提交使用中文标题,并在标题后逐行写明各项修改。
@@ -117,0 +120,4 @@
- 图标规范的 `playSetting / artStyle` 单字段上限统一为 `200` 个 Unicode 字符。浏览器原生 `maxLength` 按 UTF-16 码元计数,与该业务口径不一致,因此图标规范文本域不设置 `maxLength`,只通过按 Unicode 字符截断的 `onChange` 和提交校验限制输入;非法恢复态禁用优化与生成。editor client 在优化请求、优化响应和最终生成提交前再次拒绝超长值;api-server 对两个优化入口和最终图标规范生成入口都执行同一上限校验。LLM 优化请求固定 `1024` 输出 token 上限,容纳推理开销同时限制最多三次调用的输出成本;平台层返回 `EmptyResponse` 时按瞬态空结果进入同一有界重试。LLM 优化结果必须是无标题、解释、Markdown 或 JSON 的可直接使用纯文本,允许分段和换行;非法格式与空文本、超长文本一样作为非法模型输出重试,第三次仍非法返回 `502`
- 上述两个 refine 调用与生成前的 `ExtraParam` 补全均最多执行 3 次完整 LLM 尝试;空文本、格式非法或补全结果非法 JSON 在次数内重试。调用错误只对 timeout、connectivity、transport、上游 `408 / 429 / 5xx` 重试,配置、请求、上游其它 `4xx` 等永久错误立即返回。业务层执行重试时关闭 `LlmClient` 自身的内层重试,避免配置重试与业务重试相乘。
- `ExtraParam` 补全 prompt 只把 `playSetting / artStyle` 作为待分析数据,要求 LLM 直接返回且只返回 `{ genre, theme, useCase, targetUser }` JSON 对象。`genre` 必须取 `GameGenre::as_slug()` 定义的 19 个中文值之一,`GameGenre` 的自定义 Serde 也统一按该中文值读写,不接受英文枚举名;`theme` 是可组合、可扩展的中文题材;`useCase` 表示 `PC / mobile / console / Web / handheld` 等实际调用平台;`targetUser` 为结合玩法与美术推断的自由中文用户描述。四项均为非空且不超过 `200` 个 Unicode 字符的字符串,解析后去除首尾空白,不接受 Markdown、数组、`null` 或额外字段。
- `POST /api/editor/icon-specs/generations`:业务字段只有 `playSetting / artStyle`;参考图、项目、素材文件夹和 `canvasCompletion` 继续使用统一生成包络。前端不得提交最终 prompt、`kind``assetKind`。api-server 必须先补全 `ExtraParam`,再构造最终 prompt,随后固定以 `kind=spec / assetKind=icon-spec / gpt-image-2 / 16:9·2K` 调用既有图片生成分发;队列仍只使用 `editor_image_generation`。服务端重建 `generationInputs.fields[]` 为「玩法设定 / 美术风格 / 游戏类型」,其中游戏类型保存 `GameGenre::as_slug()` 返回的中文值;`theme / useCase / targetUser` 只参与 prompt,不进入 metadata。
Member

[P2] 同步独立任务类型和引用字段的新合同

本 PR 后续实现已经把图标规范生成迁到独立 editor_icon_spec_generation,图标图集主规范也收紧为正式 referenceId;这里新增的文字仍声明队列只用 editor_image_generation,下一条仍写 referenceImageSrc。这会让后续实现与排障继续按已废止合同工作。请把本节统一更新为当前 job kind、referenceId 及只接受项目资源 ID / 素材 ID 的边界。

**[P2] 同步独立任务类型和引用字段的新合同** 本 PR 后续实现已经把图标规范生成迁到独立 `editor_icon_spec_generation`,图标图集主规范也收紧为正式 `referenceId`;这里新增的文字仍声明队列只用 `editor_image_generation`,下一条仍写 `referenceImageSrc`。这会让后续实现与排障继续按已废止合同工作。请把本节统一更新为当前 job kind、`referenceId` 及只接受项目资源 ID / 素材 ID 的边界。
k88936 marked this conversation as resolved
@@ -43,2 +43,2 @@
10. 图片快速编辑不展示额外参考图入口;原图或绘制了红框和序号的标注图始终作为 `/api/editor/images/edits``sourceImageSrc` 直接提交,不作为 `referenceImageSrcs`
11. 快速编辑打开后,画布视口应调整到原图完整展示,且面板位于原图下方并不遮挡原图;原图右侧显示竖向框选工具,支持矩形、椭圆和画笔自由框选。快速编辑进入时不默认启用框选工具,点击工具后出现选中态并保持高亮,再点同一工具取消启用;红色圈选框使用细描边。每完成一次框选,红色圈选框按完成顺序标注 `1 / 2 / 3...`,并在快速编辑提示词中追加一行 `对N号红色圈选框里的内容做以下修改:`
10. 图标规范只使用 `specType="icon"`,历史 `specType="ui"` 快照在恢复边界迁移为 `icon`。表单字段使用 `playSetting / artStyle`,界面标题继续使用「玩法设定 / 美术风格」。两项初始为空且必填,客户端提交前统一 trim 并拒绝空白值;每项独立支持一键优化、处理中锁定自身、成功后单次撤销,操作行最右侧按 Unicode 字符实时显示 `当前数/200`。撤销必须恢复优化前的原始输入(包括首尾空白);手工编辑后立即清除该字段已经失效的撤销快照,失败只保留当前文本与仍然有效的旧撤销快照。LLM 返回空文本、超长文本、Markdown / 结构化内容,或 finish reason 明确表示截断、过滤、失败时,后续有界重试必须携带上次无效输出和对应修正要求,不能把未完成前缀当作成功结果。优化请求必须绑定发起时的生成对象 ID 和请求代次;活动对象身份只在 React effect 提交后更新,并在 cleanup 中失效,丢弃的并发 render 不得改变请求归属;对象切换或新请求取代旧请求后,旧成功或失败结果都不得更新当前面板。任一项处理中或任一项为空时禁用生成。字段标题使用真实 label 关联 textarea,不得把优化 / 撤销按钮包进 label。控件继续使用平台默认样式,不新增图标规范专属 CSS
11. 图标规范最终生成改走 `POST /api/editor/icon-specs/generations`。前端只提交业务字段和统一参考图 / 项目完成包络,不拼最终 prompt,不提交 `kind / assetKind / ExtraParam`;后端固定图片参数。HTTP handler 先调用可复用的图片请求预检,完成参考图稳定性、owner 授权、Provider 配置和运行时定价校验;全部通过后才调用文本 LLM 补齐 `ExtraParam` 和最终 prompt,再把完整图片请求交给既有 `editor_image_generation` inline / queue 分流。不得为图标规范新增独立外部任务类型;最终 worker 仍按执行时事实重新校验,避免排队期间状态变化产生 TOCTOU
Member

[P2] 这里仍描述已被本 PR 取代的队列架构

当前代码与本 PR 的最新决策已经使用独立 editor_icon_spec_generation,不再复用 editor_image_generation。这里却明确写“不得新增独立外部任务类型”,与实现直接冲突。请同步为现行队列、计费和 worker 语义,避免这份统一改造方案继续成为错误权威来源。

**[P2] 这里仍描述已被本 PR 取代的队列架构** 当前代码与本 PR 的最新决策已经使用独立 `editor_icon_spec_generation`,不再复用 `editor_image_generation`。这里却明确写“不得新增独立外部任务类型”,与实现直接冲突。请同步为现行队列、计费和 worker 语义,避免这份统一改造方案继续成为错误权威来源。
k88936 marked this conversation as resolved
@@ -41,2 +41,4 @@
- 前端提交到 `POST /api/editor/icon-spritesheets/generations`
- inline 与持久队列入口共用同一份 `iconDescriptions` prompt 合同:去除空白项后必须保留 `1..100` 条,单条最多 `200` 个 Unicode 字符,以换行拼接后合计最多 `2000` 个 Unicode 字符且不超过 `6144` 个 UTF-8 字节。请求边界校验成功后生成 `ValidatedEditorIconSpritesheetPrompt`,后续 prompt builder 不接受裸字符串。队列入口必须在引用解析、定价和任务持久化前同步拒绝可预测错误,不能把无效任务留给 worker 延迟失败。
- worker 解析主 `referenceImageSrc` 时必须通过 `spacetime-client` 的通用窄查询 `resolve_editor_reference` 在同一事务快照内完成引用解析和 owner 校验:资源 ID / 素材 ID 走主键,对象键按规范化 `image_src="/<objectKey>"` 索引定位单条资源或素材,并通过 `asset_object(bucket, object_key)` 复合索引校验对象 owner。同一 ID 若同时命中项目资源和素材必须按协议歧义拒绝,不得静默偏向任一表。procedure 复用既有 `EditorProjectResourceSnapshot``EditorAssetSnapshot` 返回唯一已验证行,不接收图标业务类型参数、不新建图标专属快照,也不得拉取当前用户的完整工程列表或素材库。`assetKind="icon-spec"``genre` 都由图标图集业务代码从返回行校验和提取。引用不存在、owner 不匹配、asset object 不存在或数据库调用失败时 procedure 直接失败;业务类型不符或保存的游戏类型无效时 API 失败;合法规范没有已保存游戏类型时允许 `genre=None`
Member

[P2] 主规范引用文档仍允许已禁止的 objectKey / referenceImageSrc

当前实现的窄查询只接收 reference_id,图集请求字段也已经改为 referenceId,仅允许当前 owner 的项目资源 ID 或素材 ID;这里新加的段落仍按 referenceImageSrc 解析 objectKey / image_src 索引,后面的请求字段与上传说明也沿用同一旧合同。请统一改为 referenceId,并删掉 objectKey、URL / 临时 key 可作为主规范引用的表述;普通附加参考图的 referenceImageSrcs 边界可单独保留。

**[P2] 主规范引用文档仍允许已禁止的 objectKey / `referenceImageSrc`** 当前实现的窄查询只接收 `reference_id`,图集请求字段也已经改为 `referenceId`,仅允许当前 owner 的项目资源 ID 或素材 ID;这里新加的段落仍按 `referenceImageSrc` 解析 objectKey / `image_src` 索引,后面的请求字段与上传说明也沿用同一旧合同。请统一改为 `referenceId`,并删掉 objectKey、URL / 临时 key 可作为主规范引用的表述;普通附加参考图的 `referenceImageSrcs` 边界可单独保留。
k88936 marked this conversation as resolved
@@ -10950,0 +9479,4 @@
(asset.object_key, asset.generation_inputs, asset.asset_kind)
}
};
if asset_kind.as_deref().map(str::trim) != Some("icon-spec") {
Member

[P1] 修复上传入口与这里的 icon-spec 强校验不匹配

这里收紧为只接受 asset_kind=icon-spec,但 useImageCanvasUploadWorkflow.tsaddIconSpecReferenceFiles 仍走通用 createPersistedReference;后者在第 333 行对图片固定调用 resolveUploadedAssetKind('image'),最终把该上传保存成 assetKind=image。因此用户点击“图标规范 → 上传图片”后得到的 referenceId 必然在这里被 400 拒绝。请让这个专用上传目标登记为权威 icon-spec(同时覆盖 project resource 与 asset 两条分支),并补一条上传后真实提交图集生成的回归测试。

**[P1] 修复上传入口与这里的 `icon-spec` 强校验不匹配** 这里收紧为只接受 `asset_kind=icon-spec`,但 `useImageCanvasUploadWorkflow.ts` 的 `addIconSpecReferenceFiles` 仍走通用 `createPersistedReference`;后者在第 333 行对图片固定调用 `resolveUploadedAssetKind('image')`,最终把该上传保存成 `assetKind=image`。因此用户点击“图标规范 → 上传图片”后得到的 `referenceId` 必然在这里被 400 拒绝。请让这个专用上传目标登记为权威 `icon-spec`(同时覆盖 project resource 与 asset 两条分支),并补一条上传后真实提交图集生成的回归测试。
k88936 marked this conversation as resolved
k88936 added 33 commits 2026-08-07 13:06:20 +08:00
新增 refine_game_play 与 refine_art_style 提示词优化接口
实现图标规范游戏类型解析与提示词构建契约
集成 API 路由并补充校验与 LLM 行为测试
- 将所有相关工作流从 "ui-spec" 迁移至 "icon-spec"。
- 优化 `playSetting` 和 `artStyle` 的输入处理逻辑。
- 更新编辑器提示词、提交模型及测试用例以适配 "icon-spec"。
- 在 UI 及后端调用中集成 `EDITOR_ICON_SPEC_PROMPT_MAX_LENGTH` 及相关校验。
- 新增 "icon-spec" 生成与微调的专用 API 路径。
- 移除旧版 "ui-spec" 相关定义及提示词构建器。
将图片画布接入方案对齐 icon-spec 数据结构与专用生成链路
补充图标规范字段、优化接口、生成路由与校验约束
同步生成类面板的图标规范交互说明
迁移旧版 ui 规范快照并隔离跨对话框优化结果。

关闭非幂等图标规范生成重试并统一参考图解析逻辑。

限制 LLM 重试范围并严格校验优化文本与补全参数。

修正图集键色、数量与素材间距提示约束并补充行为测试。

同步图片画布与生成面板技术文档。
按主键或图片地址索引解析单个工程资源与素材
校验运行时身份、资源归属及关联对象归属并失败关闭
复用现有完整资源快照并生成客户端绑定
同步更新SpacetimeDB索引与图集引用文档
在文本模型调用前完成图片引用、Provider与定价参数预检
补齐最终提示词后复用现有图片生成内联与队列分流
在图集业务层校验图标规范类型并解析游戏类型
补充执行顺序、任务契约与失败关闭回归测试
同步更新生成链路文档与长期决策记录
将 editor_agent_llm_client 重命名为 vector_engine_llm_client
更新图标生成、角色动画、美术 Agent 与应用状态调用
同步排障文档中的客户端名称
为图标规范优化与参数补全请求指定默认模型
将两类请求切换为 OpenAI Chat 协议
统一 VectorEngine LLM 客户端读取与未配置错误信息
同步主线的智能体运行时、画布编辑器与后端生成链路更新
解决图标规范面板、编辑器客户端与长期决策文档冲突
保留图标规范分支的字段合同与生成入口
- 优化输入框样式,与画布编辑器一致。
- 调整按钮布局,添加间距和微调样式以提升一致性。
- 替换按钮文本为动态图标及文本组合,优化用户体验。
同步 Runner 客户端与 External MCP 修复
同步智能体应用方案、外部编辑器接口方案与共享记忆
保留图标规范生成面板的交互与样式调整
统一转义图标规范与图集提示词中的不可信 XML 保留字符
补充恶意闭合标签回归测试并覆盖分析、润色与图集提示词
同步后端架构文档中的提示词数据边界约束
为图标规范、视频和音频补齐项目快照缺失时的提前返回
恢复生成对话框状态并避免前端重复创建本地图层
补充 canvasCompletion 回归测试和图片画布技术文档
支持参考图解析
优化提示词结构
同步游戏创作运行时、资源依赖画布与像素编辑链路更新
保留图标规范参考图解析与提示词结构调整
补齐合并后的前后端合同、文档与测试
后端在调用 LLM 前按模型上限拒绝超限参考图。
前端在请求发送前限制图标规范参考图数量。
补充超限零请求回归测试与预检顺序断言。
空响应纳入有界重试,并为优化请求设置输出 token 上限。
修复题材提示词括号并补充回归测试。
将优化请求身份更新移入已提交 effect,避免并发渲染污染。
移除冗余类型注释并同步编辑器文档。
新增图标规范独立队列任务并将参数补全纳入统一计费操作
将图标图集生成和手工拆分迁入独立图标模块并复用公共生图能力
将图标规范引用收紧为项目资源或素材 ID
同步 SpacetimeDB 引用解析契约、External OpenAPI、前端与 Agent 提交链路
补充相关回归测试和长期架构约定
图标规范输出校验失败时携带无效响应和修正指令重试。
图标图集队列在定价和持久化前归一化描述数量。
手工编辑规范字段后清除失效撤销快照。
收口项目生成对话框的重复复位逻辑并补充测试和文档。
新增独立的 spritesheet prompt 单项字符、聚合字符和 UTF-8 字节上限。

以已验证类型约束 prompt builder,并覆盖 inline、队列与 worker 执行边界。

同步画布校验、Editor Agent 工具合同、External v1 OpenAPI、文档和边界测试。
标注并发上传失败后的对象补偿生命周期缺口。

标注 PUT、HEAD 与批量持久化尚未纳入统一处理期限。
保留图标规范与图集生成独立模块边界

融合主分支角色动画与图片序列字段
在一键优化与撤销操作行右侧实时显示 Unicode 字符数和 200 字符上限。

补充计数更新、emoji 截断和右对齐布局测试,并同步编辑器方案文档。
解决简单冲突
校验 LLM 完成原因并规范化 Agent 图标描述
统一前后端图标规范输入、错误返回和精确撤销行为
收紧图集拆分授权并拒绝引用 ID 歧义
修正快照映射诊断和表单标签可访问性
补充定向测试与编辑器设计文档
确认计费提交早于持久化的边界继承自 master,并补充可对账状态 TODO
确认编码与上传共用并发槽继承自 master,并补充有界流水线 TODO
保留既有 OSS 清理历史 TODO,本提交不改变运行行为
更新图标规范生成逻辑:调整资源引用为 `resourceId`
统一后端 LLM 客户端接口
更新图标图集用户提示词隔离门禁以匹配规范化输入
调整背景音乐同步回退用例以避开项目权威快照路径
为自动预览权限检查断言增加 2500 毫秒等待预算
保持权限拒绝文案与禁止启动预览断言不变
图标规范上传在项目资源与账号素材分支统一登记为 icon-spec。

补充上传后提交图集生成及两条持久化分支回归测试。

同步编辑器设计文档、外部 API Skill 与 Python helper 的 referenceId 合同。
更新图标规范独立队列、计费与 worker 语义
收紧主规范引用为 referenceId 与正式资源或素材 ID
保留普通附加参考图边界并移除客户端价格字段
修复图标生成引用与提示词校验
Project CI / Frontend tests (pull_request) Successful in 2m41s
Project CI / Native shell tests (pull_request) Successful in 12m9s
Project CI / Repository checks (pull_request) Failing after 7s
Project CI / Backend tests (pull_request) Failing after 8s
21209910dd
修复外部 API 参数覆盖与图标描述数组边界

提前校验 Agent 正式引用并收紧 SpacetimeDB 对象一致性

修正自然语言提示词转义与纯文本格式校验

移除图标规范占位提示词并避免重复下载参考图

补充定向测试与对应架构文档
合并主分支
Project CI / Frontend tests (pull_request) Successful in 3m29s
Project CI / Backend tests (pull_request) Successful in 3m47s
Project CI / Repository checks (pull_request) Successful in 1m6s
Project CI / Native shell tests (pull_request) Successful in 12m4s
6725ee1b8c
解决简单合并冲突
k88936 force-pushed feat/better-icon-spiritsheet from a0b55eda52 to 6725ee1b8c 2026-08-07 13:06:20 +08:00 Compare
k88936 requested review from kdletters 2026-08-07 14:41:55 +08:00
Member

复审当前 head 6725ee1b8c:上轮提出的三项阻塞均已关闭。

  1. 图标规范上传现在通过 authoritativeAssetKind: icon-spec,项目资源和账号素材两条持久化分支都会登记为权威 icon-spec,并已补上传后真实提交图集生成的回归测试。
  2. 三份编辑器权威文档已经统一为独立 editor_icon_spec_generation、正式 referenceId 以及仅接受当前 owner 项目资源 ID / 素材 ID 的合同。
  3. 当前 33 个 PR 提交均使用中文标题且正文非空,提交历史门禁已通过。

当前 head 的 Repository、Frontend、Backend、Native shell 四项 CI 均为绿色,git diff --check 通过且无合并冲突;本轮未发现新的代码阻塞。仓库分支保护仍要求当前 head 获得 1 个有效批准,本条为普通复审评论,不替代 APPROVE。

复审当前 head `6725ee1b8c`:上轮提出的三项阻塞均已关闭。 1. 图标规范上传现在通过 `authoritativeAssetKind: icon-spec`,项目资源和账号素材两条持久化分支都会登记为权威 `icon-spec`,并已补上传后真实提交图集生成的回归测试。 2. 三份编辑器权威文档已经统一为独立 `editor_icon_spec_generation`、正式 `referenceId` 以及仅接受当前 owner 项目资源 ID / 素材 ID 的合同。 3. 当前 33 个 PR 提交均使用中文标题且正文非空,提交历史门禁已通过。 当前 head 的 Repository、Frontend、Backend、Native shell 四项 CI 均为绿色,`git diff --check` 通过且无合并冲突;本轮未发现新的代码阻塞。仓库分支保护仍要求当前 head 获得 1 个有效批准,本条为普通复审评论,不替代 APPROVE。
k88936 added 1 commit 2026-08-07 20:06:31 +08:00
接入编辑器生成结果 durable receipt、稳定指纹和 SpacetimeDB 原子事务
保留图标规范与图集生成分模块实现并纳入原子提交和计费边界
统一队列 lease fencing、未知结果重放、画布 CAS 与失败退款语义
同步 schema、bindings、架构文档与回归测试
k88936 added 1 commit 2026-08-07 20:46:30 +08:00
同步外部编辑器项目选择与 MCP 工具契约
同步外部 v1 OpenAPI、API 实现及相关测试
同步 CI 容器网络韧性配置
k88936 force-pushed feat/better-icon-spiritsheet from 626baa8d17 to 5140d82ff4 2026-08-07 20:46:30 +08:00 Compare
k88936 removed review request for kdletters 2026-08-07 21:47:44 +08:00
k88936 requested review from kdletters 2026-08-07 21:47:45 +08:00
k88936 removed review request for kdletters 2026-08-08 12:19:45 +08:00
k88936 requested review from kdletters 2026-08-08 12:19:47 +08:00
kdletters requested changes 2026-08-08 15:17:08 +08:00
kdletters left a comment
Member

当前 head f9485b91ff 仍需修改,暂不建议合并:

  1. [P1] 画布 Agent 的图集主规范合同没有在确认前闭合。 Agent 当前只验证图片带非空 referenceId,工具提示仍允许“图标规范或风格参考图”;普通已登记风格图会通过规划和用户确认,随后被图集入队接口的 assetKind=icon-spec 强校验稳定拒绝。请把权威素材类型带入 Agent 图片上下文,在确认前只允许合法 icon-spec,并补普通图片拒绝与 icon-spec 成功的贯通测试。详见行内评论。
  2. [P1] 当前分支已与最新 master 发生内容冲突。 live master 已前进到 676bd524eegit merge-tree --write-treeImageCanvasIconSpritesheetComposerView.tsxImageCanvasIconSpritesheetComposerView.test.tsxImageCanvasSpecGenerationPanelView.tsxImageCanvasSpecGenerationPanelView.test.tsx 检出冲突;Gitea 当前 mergeable=false。请同步最新 master、按现役输入框/滑动条公共实现解决冲突,并重新运行当前 head CI。
  3. [P1] 提交历史再次违反仓库门禁。 当前 39 个 PR 提交中,5140d82ff 调整图标优化按钮样式 没有正文;请在合并前 reword 或 squash,确保中文标题后逐行说明本次修改。

当前 head 的 CI run 868 四项均成功,但它只绑定冲突前的 f9485b91ff,不能替代最新 master 合并结果与上述业务合同验证。

当前 head `f9485b91ff` 仍需修改,暂不建议合并: 1. **[P1] 画布 Agent 的图集主规范合同没有在确认前闭合。** Agent 当前只验证图片带非空 `referenceId`,工具提示仍允许“图标规范或风格参考图”;普通已登记风格图会通过规划和用户确认,随后被图集入队接口的 `assetKind=icon-spec` 强校验稳定拒绝。请把权威素材类型带入 Agent 图片上下文,在确认前只允许合法 `icon-spec`,并补普通图片拒绝与 icon-spec 成功的贯通测试。详见行内评论。 2. **[P1] 当前分支已与最新 master 发生内容冲突。** live master 已前进到 `676bd524ee`,`git merge-tree --write-tree` 在 `ImageCanvasIconSpritesheetComposerView.tsx`、`ImageCanvasIconSpritesheetComposerView.test.tsx`、`ImageCanvasSpecGenerationPanelView.tsx`、`ImageCanvasSpecGenerationPanelView.test.tsx` 检出冲突;Gitea 当前 `mergeable=false`。请同步最新 master、按现役输入框/滑动条公共实现解决冲突,并重新运行当前 head CI。 3. **[P1] 提交历史再次违反仓库门禁。** 当前 39 个 PR 提交中,`5140d82ff 调整图标优化按钮样式` 没有正文;请在合并前 reword 或 squash,确保中文标题后逐行说明本次修改。 当前 head 的 CI run `868` 四项均成功,但它只绑定冲突前的 `f9485b91ff`,不能替代最新 master 合并结果与上述业务合同验证。
@@ -727,1 +727,4 @@
.map_err(|error| EditorAgentToolError::invalid_args(error.to_string()))?;
self.context
.image_metadata(&args.reference_image_id)
.and_then(|metadata| metadata.reference_id.as_deref())
Member

[P1] 在确认前校验主规范的权威 assetKind

这里把“存在非空 referenceId”当作合法图标主规范,但 ImageMetadata / EditorToolContext 没有携带权威 assetKind,现役工具提示还明确允许“图标规范或风格参考图”。因此普通已登记风格图会通过规划、展示和用户确认,prepare_job 随后把它作为 referenceId 入队,而 enqueue_editor_icon_spritesheet_generation_for_owner 会因它不是 icon-spec 返回 400。当前 TODO 已承认这个缺口,不能延后到合并后处理;请把权威类型带入附件/工具上下文,在确认前拒绝或正确引导非 icon-spec 引用,并补普通图片失败、icon-spec 成功的贯通测试。

**[P1] 在确认前校验主规范的权威 `assetKind`** 这里把“存在非空 `referenceId`”当作合法图标主规范,但 `ImageMetadata` / `EditorToolContext` 没有携带权威 `assetKind`,现役工具提示还明确允许“图标规范或风格参考图”。因此普通已登记风格图会通过规划、展示和用户确认,`prepare_job` 随后把它作为 `referenceId` 入队,而 `enqueue_editor_icon_spritesheet_generation_for_owner` 会因它不是 `icon-spec` 返回 400。当前 TODO 已承认这个缺口,不能延后到合并后处理;请把权威类型带入附件/工具上下文,在确认前拒绝或正确引导非 `icon-spec` 引用,并补普通图片失败、`icon-spec` 成功的贯通测试。
k88936 marked this conversation as resolved
k88936 added 5 commits 2026-08-08 15:41:59 +08:00
将图标规范字段的一键优化按钮字号从 9px 调整为 12px
将对应撤销优化按钮字号同步调整为 12px
处理合并冲突
解决编辑项目后端、SpacetimeDB 客户端与前端生成流程冲突

保留图标规范及图集链路并接入场景生成与统一目标预检

同步合并运行时、钱包、契约、文档与测试改动
解决合并冲突
合并主分支并适配图标精灵图编辑
Project CI / Repository checks (pull_request) Successful in 1m35s
Project CI / Frontend tests (pull_request) Successful in 3m18s
Project CI / Backend tests (pull_request) Successful in 4m14s
Project CI / Native shell tests (pull_request) Successful in 16m18s
d1562ab65f
合入统一 Lexical 文本编辑器与滚动条样式调整
保留图标规范字段优化、字符限制与提交门禁
补齐图标生成及画布集成测试的 Lexical 交互适配
k88936 force-pushed feat/better-icon-spiritsheet from c663514da7 to d1562ab65f 2026-08-08 15:41:59 +08:00 Compare
k88936 added 1 commit 2026-08-08 16:03:44 +08:00
修正图标规范主参考权威校验
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
3451c17142
规划与确认时从 SpacetimeDB 重建工具上下文
仅允许 icon-spec 作为精灵图主规范并完善提示
补充普通图片拒绝与图标规范通过测试
同步后端数据契约文档
k88936 added 1 commit 2026-08-08 16:04:24 +08:00
合并主分支
Project CI / Repository checks (pull_request) Successful in 59s
Project CI / Frontend tests (pull_request) Successful in 3m10s
Project CI / Backend tests (pull_request) Successful in 3m46s
Project CI / Native shell tests (pull_request) Successful in 16m15s
6d1937e6ff
解决合并冲突
kdletters requested changes 2026-08-08 18:38:25 +08:00
kdletters left a comment
Member

请求修改。当前复审绑定 head d19792f692ee011f6e5dd9de3d9eb266048362bf、base 6cb13b3884e66460885d78bbc672b0f145e954a0。此前的 icon-spec 上传类型、三份编辑器文档合同和 Agent 权威 assetKind 校验均已修复,merge-tree 与 git diff --check 通过。

当前仍有两个 P1 阻塞:

  1. External v1 与服务端已把图标图集主规范改成必填 referenceId,但现役 AI Game Creator 仍发送 referenceImageSrc,其请求会在入队前因缺少必填字段失败。请在同一变更中更新正式调用方及测试,并为 External v1 选择兼容字段/弃用期或新版本方案,不能只替换现役 v1 字段。
  2. run 905 的 Backend required CI 稳定失败:every_provider_inline_route_defers_billing_until_durable_completion 期望 editor_project.rs 命中 3 次,实际为 4 次(845/846 通过)。请修正门禁期望并重新跑绿当前 head。

提交历史也再次出现英文空正文 merge commit 48bbaede99,以及 e93f30ebead19792f692 等空正文提交,不符合仓库提交规范。

请求修改。当前复审绑定 head `d19792f692ee011f6e5dd9de3d9eb266048362bf`、base `6cb13b3884e66460885d78bbc672b0f145e954a0`。此前的 `icon-spec` 上传类型、三份编辑器文档合同和 Agent 权威 `assetKind` 校验均已修复,merge-tree 与 `git diff --check` 通过。 当前仍有两个 P1 阻塞: 1. External v1 与服务端已把图标图集主规范改成必填 `referenceId`,但现役 AI Game Creator 仍发送 `referenceImageSrc`,其请求会在入队前因缺少必填字段失败。请在同一变更中更新正式调用方及测试,并为 External v1 选择兼容字段/弃用期或新版本方案,不能只替换现役 v1 字段。 2. run 905 的 Backend required CI 稳定失败:`every_provider_inline_route_defers_billing_until_durable_completion` 期望 `editor_project.rs` 命中 3 次,实际为 4 次(845/846 通过)。请修正门禁期望并重新跑绿当前 head。 提交历史也再次出现英文空正文 merge commit `48bbaede99`,以及 `e93f30ebea`、`d19792f692` 等空正文提交,不符合仓库提交规范。
@@ -3651,3 +3651,3 @@
"type": "object",
"required": [
"referenceImageSrc",
"referenceId",
Member

[P1] 不能只替换 External v1 字段而漏掉现役 AGC 调用方

这里把 referenceId 改为必填,Rust DTO 的 reference_id: String 也会在缺失时直接拒绝请求;但现役 apps/ai-game-creator-shell/src-tauri/src/agent/generation/canvas_generation.rs 仍发送 referenceImageSrc,对应测试也锁定旧字段,因此真实 AI Game Creator 图集生成会在入队前返回 400。请同 PR 更新调用方、提示/测试,并为仍命名为 v1 的外部契约提供兼容迁移或新版本方案。

**[P1] 不能只替换 External v1 字段而漏掉现役 AGC 调用方** 这里把 `referenceId` 改为必填,Rust DTO 的 `reference_id: String` 也会在缺失时直接拒绝请求;但现役 `apps/ai-game-creator-shell/src-tauri/src/agent/generation/canvas_generation.rs` 仍发送 `referenceImageSrc`,对应测试也锁定旧字段,因此真实 AI Game Creator 图集生成会在入队前返回 400。请同 PR 更新调用方、提示/测试,并为仍命名为 v1 的外部契约提供兼容迁移或新版本方案。
k88936 marked this conversation as resolved
@@ -929,3 +929,3 @@
fn every_provider_inline_route_defers_billing_until_durable_completion() {
for (source, expected_calls) in [
(include_str!("editor_project.rs"), 4),
(include_str!("editor_project.rs"), 3),
Member

[P1] 修正 durable billing 门禁的错误期望值

当前 editor_project.rs 实际仍有 4 处 with_editor_generation_durable_billing_boundary(,这里改成 3 后使 run 905 的 Backend CI 稳定失败:845 项通过、仅此断言 left=4 / right=3 失败。请恢复与当前源码一致的期望,并保留 editor_project_icon.rs 新增入口的独立覆盖后重跑 required CI。

**[P1] 修正 durable billing 门禁的错误期望值** 当前 `editor_project.rs` 实际仍有 4 处 `with_editor_generation_durable_billing_boundary(`,这里改成 3 后使 run 905 的 Backend CI 稳定失败:845 项通过、仅此断言 `left=4 / right=3` 失败。请恢复与当前源码一致的期望,并保留 `editor_project_icon.rs` 新增入口的独立覆盖后重跑 required CI。
k88936 marked this conversation as resolved
k88936 added 14 commits 2026-08-08 19:39:03 +08:00
为Stdb、API、Web与数据库导出任务精确授权产物消费者
增加Copy Artifact Production模式权限静态门禁
补充跨任务产物复制排障与生效流程文档
为 inline 图标规范生成初始化稳定 operation。

使用 durable billing 边界包裹共享执行器。

补充调用顺序回归测试与图标生成契约说明。
入队前预检并回写规范化项目与素材目录。

worker 执行前再次预检最终写入目标。

补充默认目录及副作用顺序的回归测试和契约说明。
共享原子持久化成功后 worker 直接返回成功。

移除仅用于二次 completion 的响应包装 helper。

补充 lease 完成职责回归测试与契约说明。
在参考资源解析和定价前校验项目与素材目录。

将预检返回的规范化目标写入队列任务。

拆分本地字段与远端引用校验并补充顺序回归测试。
抽取图标规范 metadata-only 解析器。

队列提交只校验 owner、类型、对象元数据与游戏类型。

worker 执行阶段复用元数据校验后单次读取 OSS 正文。

补充无正文读取回归测试与契约说明。
统一AGC开发端口分配与旧注册记录迁移逻辑
修复AGC实时清单测试竞态
补齐相关测试、开发文档与共享记忆
调整开发端口与启动栈模块的导入顺序
保持启动脚本符合ESLint导入顺序规则
角色图片生成在入队与同步执行预检前恢复 project 默认目录

UI 设计素材提取在入队与 worker 执行预检前恢复 project 默认目录

新增默认目录策略及四条调用路径回归测试
worker 优先读取任务 billing context 中的入队价格

扣费与 generationCostMudPoints 共用同一有效价格

新增冻结价格显式数据流回归测试
图标规范元数据解析统一检查 OpenAI Chat finish_reason

length 与 content_filter 结果进入既有重试循环

新增完整 JSON 仍被不完整原因拒绝的回归测试
场景 inline 路由建立稳定 operation 身份并延迟退款决策至持久化完成

更新图标图集与场景路由的生产调用计数

静态计数排除测试模块并校验场景调用顺序
AI游戏创作图集请求改用External v1必填referenceId
持久生成账本兼容回读旧本地sidecar并补充请求断言
同步Agent提示合同与项目文档
补齐图标规范生成持久化白名单
Project CI / Repository checks (pull_request) Successful in 1m21s
Project CI / Frontend tests (pull_request) Successful in 2m49s
Project CI / Backend tests (pull_request) Successful in 3m46s
Project CI / Native shell tests (pull_request) Successful in 13m17s
02b4b6955d
SpacetimeDB生成结果白名单加入独立图标规范任务
新增icon-spec durable result shape回归测试
同步后端数据契约与长期决策记录
k88936 force-pushed feat/better-icon-spiritsheet from 262698f5b9 to 02b4b6955d 2026-08-08 19:39:03 +08:00 Compare
k88936 requested review from kdletters 2026-08-08 19:56:27 +08:00
k88936 added 1 commit 2026-08-08 21:51:04 +08:00
修复图标规范内联引用校验
Project CI / Repository checks (pull_request) Failing after 13s
Project CI / Backend tests (pull_request) Failing after 13s
Project CI / Frontend tests (pull_request) Successful in 2m35s
Project CI / Native shell tests (pull_request) Has been cancelled
c188accafb
在共享执行入口转换 referenceId 前校验引用 ID 与 owner。

新增调用顺序回归测试并同步决策记录。
k88936 added 1 commit 2026-08-08 21:59:12 +08:00
合并远端主分支更新
Project CI / Repository checks (pull_request) Failing after 54s
Project CI / Frontend tests (pull_request) Successful in 3m30s
Project CI / Backend tests (pull_request) Successful in 4m21s
Project CI / Native shell tests (pull_request) Has been cancelled
bb16c41938
同步主分支音效生成与External v1契约更新
保留图标规范与图集生成链路
适配VectorEngine LLM客户端命名并解决前端提交语义冲突
k88936 added 2 commits 2026-08-08 22:08:42 +08:00
同步主分支音效生成与External v1契约更新
保留图标规范与图集生成链路
适配VectorEngine LLM客户端命名并解决前端提交语义冲突
修复编辑器客户端测试导入排序
Project CI / Repository checks (pull_request) Successful in 1m3s
Project CI / Native shell tests (pull_request) Successful in 15m17s
Project CI / Frontend tests (pull_request) Failing after 2m1s
Project CI / Backend tests (pull_request) Successful in 4m0s
badb886790
按 simple-import-sort 规则调整合并后的导入顺序
保留远端合并提交历史并避免强制推送

# Conflicts:
#	src/services/image-editor/editorProjectClient.test.ts
Member

已与 PR #135 一并手工集成到 master。master 提交:2412700e665ecb90e93575670399a46f72a728d7;已保留本 PR 最新 head badb886790 的完整历史,并在集成分支解决与 #135、master 的冲突。

已与 PR #135 一并手工集成到 master。master 提交:2412700e665ecb90e93575670399a46f72a728d7;已保留本 PR 最新 head badb8867901c4256b167122b1d32b9f565cbec76 的完整历史,并在集成分支解决与 #135、master 的冲突。
kdletters closed this pull request 2026-08-08 22:15:12 +08:00
Some checks are pending
Project CI / Repository checks (pull_request) Successful in 1m3s
Project CI / Native shell tests (pull_request) Successful in 15m17s
Project CI / Frontend tests (pull_request) Failing after 2m1s
Project CI / Backend tests (pull_request) Successful in 4m0s

Pull request closed

Sign in to join this conversation.