修复 AGC 画布生成、卡片展示与布局交互 #412

Merged
suzmii merged 41 commits from feat/agc-canvas-acceptance into master 2026-09-18 15:50:45 +08:00
Member

关联 #411(仍有未完成项,本 PR 不自动关闭 Issue)。

范围与状态

feat/agc-canvas-acceptancemaster;当前提交 2ffccb844,已合入主线 a2e6f205d

本批收口画布验收已有修复、批量追加标签、对话动态计时、初始消息重复及 Agent 游戏居中指引。不是“所有 bug 已修复”,也不是已通过发布验收。

问题、症状、原因与解决方案

问题 症状 原因 解决方案
生成参考素材 工具栏生图无法选择当前项目图片作为参考 表单到原生生成请求缺少用户参考资产身份链路 已接通 @ 选择与真实资产 ID,校验项目/账号归属、文件及格式后进入生成请求;普通生成含规范图最多 5 张参考,图集不接受额外参考
生成入口与占位卡 直接弹窗、画布无占位;缺素材时入口不可用 入口与生成前置条件耦合,缺少草稿到结果的占位生命周期 已改为先建占位再打开关联面板,提交时检查前置;关闭保留草稿,失败按原身份重试,成功接管最新位置
资源卡名称与统一样式 名称难辨识,现有文件名带时间戳且放在卡面底部 当前展示 label 取落盘文件名,并非独立的 assetName;尚未统一顶部名称区和各类预览布局 部分完成:已有名称、省略及完整提示;顶部独立名称行、真实素材名称来源和全类型卡片重设计尚未落地,仅有本地样式预览,不算交付
文档卡 卡面展示无效正文片段 把正文摘要当作缩略图 已改为居中文档图标与名称,全文和 JSON/UI 设计能力保留在独立预览;统一新卡片外观另待完成
整理画布 手动移动的素材整理不动,看起来无效 自动重算保留手动坐标,且与显式整理/历史操作混用 已分开自动重算与显式整理,重排当前栏目全部素材,保留其他栏目;一次撤销恢复坐标和手动标记,并处理在途写回竞争
多选移动 多选后不能整组拖动、保存和撤销 拖动与坐标写回围绕单素材处理 已对可见选中集合使用统一缩放位移,批量保存并记录一次历史;取消/失焦回滚,撤销按项目和排序模式隔离
批量标签 多选仍只操作首项 编辑器与保存链路按单素材设计 已接通画布与资源面板双入口,打开冻结完整目标集,仅追加本次草稿,保留原标签/分类;整批预检后一次写盘,失败不部分保存
对话总耗时与工具耗时 起止时间与“用时”不一致,执行中数字可能停住 整轮起点、局部工具跨度及最后快照时间混用;开始/完成阶段共用条目展示时间 已分离原生阶段时间:组头从用户发送计至回合终态,包含 LLM、工具和等待;单条按自身开始/完成计时。两者运行中每 100ms 刷新、保留一位小数,终态固定;缺失边界不编造
初始消息重复 同一初始消息显示无时间占位与正式气泡两份 初始占位只检查旧消息集合,未覆盖 Direct 正式条目和本地乐观消息 已让正式或乐观用户条目接管占位,分页历史不补初始占位;只控制占位显示,不按文本删除真实重复发送
游戏画面偏右 竖屏画面偏离游戏容器中心 现场游戏同时使用 CSS Grid 居中和 Phaser 自动居中,两次定位叠加 现场游戏已去掉重复 CSS 居中并重建,该项目文件不在本 PR。本 PR 将“同一 canvas 只由一处负责居中”写入 Agent 实际系统提示、开发 Skill 和验收清单,不改 AGC iframe 偏移掩盖问题
生成任务浮层 顶部入口、左侧展开遮挡或脱离画布 现有任务列表采用侧栏布局 未完成:计划改为画布右上角小浮层,进行中/已完成两区、失败置顶标红、内容自适应且限高;任务开始/失败展开,全部成功收起。本次未提交实现

关键边界

  • 不修改数据库或 manifest schema,不新增远程公开 API。时间字段是现有原生生命周期事件的展示元数据,沿用 Thread Manager,不新增回合 ID、计时账本或第二套状态源。
  • 工具优先使用上游明确阶段毫秒时间,缺失时采用宿主观测时间;整轮不用已截断的秒字段伪装十分之一秒精度。重放使用原事件时间;同秒新请求按事件顺序正常开始。
  • 当前会话的终态时间冻结;旧历史/重新打开后缺少完整生命周期边界时隐藏未知耗时,不能把最后工具或正文时间当作整轮完成时间。真实 Provider 内部物理耗时不在本次测量范围。
  • 只在计时叶子组件运行 100ms 时钟,不每 100ms 重建整个 App;工具结束但 LLM 仍运行时,工具冻结、整轮继续增长。
  • 批量标签最多 200 个不同素材,每素材 16 个标签、每标签 32 字符;沿用权限、项目身份、写锁和 revision CAS。重复标签不重复追加,整批无变化不写盘;保存锁定操作、失败保留草稿、跨项目迟到回包丢弃。
  • 复用主线菜单 #410、抠图 #394、背景色 #414、对话状态统一等,不记作本 PR 独立开发。主线持续变化时需重新验证,当前包含的主线基准为 a2e6f205d

验证与 Review

本轮实际执行:

  • 前端 appSurface、聊天 reducer 与回合投影:493 项通过、17 项跳过;最后的初始消息与倒序计时边界补丁另跑 5 项通过
  • AGC TypeScript(使用工作树隔离依赖配置)、skill/config、ESLint、格式、编码、文档索引、diff 检查通过;Skill 包内容指纹已同步。
  • Rust cargo check --all-targets --locked --offline 通过。
  • 原生实现者定向验证:direct_thread 35 项;direct_ 312 项通过、1 跳过;codex_app_server 58 项通过、1 跳过;系统工程提示用例通过。过滤集合有重叠,不相加作独立测试总数。
  • Edge 真实浏览器使用生产组件/reducer和模拟原生事件:无新事件仍动态增长、两组共享整轮边界、单工具完成即冻结、回合完成及重复完成事件不改变最终时间。
  • deepseek-flash 实现及独立 review 后已修复:旧历史误用最新回合终点、同秒新回合被时间守卫误拒、无状态工具开始阶段误显示完成、迟到条目跨轮、乐观用户消息重复、倒序时间被展示舍入掩盖。

历史阶段证据(不冒充本轮全量):原六项定向 424 项、原生 reference_ 17 项;批量标签前端 68 项、原生分类 22 项通过。真实客户端生成/布局、原生 IPC 批量写盘及付费 Provider 联调仍需验收。

CI 与发布边界

  • 上一已推送 SHA 1bd153d7frun 2473:11 项中 10 项成功,Rust shard 2/4 失败,具体为:
    • background_agent_runtime_confirmation_is_bound_to_exact_tool_input
    • background_agent_runtime_loads_same_agent_continuity_through_tool_observation
  • 本地发现共享测试配置可能造成多进程互扰;不能据此断言 CI 根因相同。本次没有删除断言、放宽超时或绕过检查,未把这两条标为已修复。
  • 新提交 2ffccb844 的远程 CI 以实际新轮次为准,尚未确认通过。因此本 PR 仍不是可直接发布的全绿状态。
  • 不合并 PR、不发版、不恢复 CI 定时任务;飞书状态未写回。用户个人未提交的 package-lock.json 保持原样,不纳入提交。

未完成 / 后续处理

  • 全类型卡片重设计与真实 assetName 展示;画布内生成任务浮层:仅有本地设计预览,未计入已实现。
  • 动画生成失败、未完成编辑恢复入口、资源面板多选卡死:待排查。
  • 标签面板查看更多标签、素材替换关系/点选替换、快速编辑名称校验报错:待处理,不以本批修复替代。
  • 聊天拖拽批量 @、复制对话保留有效引用:不在本批范围。
  • 真实客户端切项目、取消后立即重发、重开历史与 Provider 通知链路验收未完成,临时验收计划保留。
关联 #411(仍有未完成项,本 PR 不自动关闭 Issue)。 ## 范围与状态 `feat/agc-canvas-acceptance` → `master`;当前提交 `2ffccb844`,已合入主线 `a2e6f205d`。 本批收口画布验收已有修复、批量追加标签、对话动态计时、初始消息重复及 Agent 游戏居中指引。不是“所有 bug 已修复”,也不是已通过发布验收。 ## 问题、症状、原因与解决方案 | 问题 | 症状 | 原因 | 解决方案 | | --- | --- | --- | --- | | 生成参考素材 | 工具栏生图无法选择当前项目图片作为参考 | 表单到原生生成请求缺少用户参考资产身份链路 | 已接通 @ 选择与真实资产 ID,校验项目/账号归属、文件及格式后进入生成请求;普通生成含规范图最多 5 张参考,图集不接受额外参考 | | 生成入口与占位卡 | 直接弹窗、画布无占位;缺素材时入口不可用 | 入口与生成前置条件耦合,缺少草稿到结果的占位生命周期 | 已改为先建占位再打开关联面板,提交时检查前置;关闭保留草稿,失败按原身份重试,成功接管最新位置 | | 资源卡名称与统一样式 | 名称难辨识,现有文件名带时间戳且放在卡面底部 | 当前展示 label 取落盘文件名,并非独立的 assetName;尚未统一顶部名称区和各类预览布局 | **部分完成**:已有名称、省略及完整提示;顶部独立名称行、真实素材名称来源和全类型卡片重设计尚未落地,仅有本地样式预览,不算交付 | | 文档卡 | 卡面展示无效正文片段 | 把正文摘要当作缩略图 | 已改为居中文档图标与名称,全文和 JSON/UI 设计能力保留在独立预览;统一新卡片外观另待完成 | | 整理画布 | 手动移动的素材整理不动,看起来无效 | 自动重算保留手动坐标,且与显式整理/历史操作混用 | 已分开自动重算与显式整理,重排当前栏目全部素材,保留其他栏目;一次撤销恢复坐标和手动标记,并处理在途写回竞争 | | 多选移动 | 多选后不能整组拖动、保存和撤销 | 拖动与坐标写回围绕单素材处理 | 已对可见选中集合使用统一缩放位移,批量保存并记录一次历史;取消/失焦回滚,撤销按项目和排序模式隔离 | | 批量标签 | 多选仍只操作首项 | 编辑器与保存链路按单素材设计 | 已接通画布与资源面板双入口,打开冻结完整目标集,仅追加本次草稿,保留原标签/分类;整批预检后一次写盘,失败不部分保存 | | 对话总耗时与工具耗时 | 起止时间与“用时”不一致,执行中数字可能停住 | 整轮起点、局部工具跨度及最后快照时间混用;开始/完成阶段共用条目展示时间 | 已分离原生阶段时间:组头从用户发送计至回合终态,包含 LLM、工具和等待;单条按自身开始/完成计时。两者运行中每 100ms 刷新、保留一位小数,终态固定;缺失边界不编造 | | 初始消息重复 | 同一初始消息显示无时间占位与正式气泡两份 | 初始占位只检查旧消息集合,未覆盖 Direct 正式条目和本地乐观消息 | 已让正式或乐观用户条目接管占位,分页历史不补初始占位;只控制占位显示,不按文本删除真实重复发送 | | 游戏画面偏右 | 竖屏画面偏离游戏容器中心 | 现场游戏同时使用 CSS Grid 居中和 Phaser 自动居中,两次定位叠加 | 现场游戏已去掉重复 CSS 居中并重建,**该项目文件不在本 PR**。本 PR 将“同一 canvas 只由一处负责居中”写入 Agent 实际系统提示、开发 Skill 和验收清单,不改 AGC iframe 偏移掩盖问题 | | 生成任务浮层 | 顶部入口、左侧展开遮挡或脱离画布 | 现有任务列表采用侧栏布局 | **未完成**:计划改为画布右上角小浮层,进行中/已完成两区、失败置顶标红、内容自适应且限高;任务开始/失败展开,全部成功收起。本次未提交实现 | ## 关键边界 - 不修改数据库或 manifest schema,不新增远程公开 API。时间字段是现有原生生命周期事件的展示元数据,沿用 Thread Manager,不新增回合 ID、计时账本或第二套状态源。 - 工具优先使用上游明确阶段毫秒时间,缺失时采用宿主观测时间;整轮不用已截断的秒字段伪装十分之一秒精度。重放使用原事件时间;同秒新请求按事件顺序正常开始。 - 当前会话的终态时间冻结;旧历史/重新打开后缺少完整生命周期边界时隐藏未知耗时,不能把最后工具或正文时间当作整轮完成时间。真实 Provider 内部物理耗时不在本次测量范围。 - 只在计时叶子组件运行 100ms 时钟,不每 100ms 重建整个 App;工具结束但 LLM 仍运行时,工具冻结、整轮继续增长。 - 批量标签最多 200 个不同素材,每素材 16 个标签、每标签 32 字符;沿用权限、项目身份、写锁和 revision CAS。重复标签不重复追加,整批无变化不写盘;保存锁定操作、失败保留草稿、跨项目迟到回包丢弃。 - 复用主线菜单 #410、抠图 #394、背景色 #414、对话状态统一等,不记作本 PR 独立开发。主线持续变化时需重新验证,当前包含的主线基准为 `a2e6f205d`。 ## 验证与 Review 本轮实际执行: - 前端 appSurface、聊天 reducer 与回合投影:**493 项通过、17 项跳过**;最后的初始消息与倒序计时边界补丁另跑 **5 项通过**。 - AGC TypeScript(使用工作树隔离依赖配置)、skill/config、ESLint、格式、编码、文档索引、diff 检查通过;Skill 包内容指纹已同步。 - Rust `cargo check --all-targets --locked --offline` 通过。 - 原生实现者定向验证:direct_thread 35 项;direct_ 312 项通过、1 跳过;codex_app_server 58 项通过、1 跳过;系统工程提示用例通过。过滤集合有重叠,不相加作独立测试总数。 - Edge 真实浏览器使用生产组件/reducer和模拟原生事件:无新事件仍动态增长、两组共享整轮边界、单工具完成即冻结、回合完成及重复完成事件不改变最终时间。 - deepseek-flash 实现及独立 review 后已修复:旧历史误用最新回合终点、同秒新回合被时间守卫误拒、无状态工具开始阶段误显示完成、迟到条目跨轮、乐观用户消息重复、倒序时间被展示舍入掩盖。 历史阶段证据(不冒充本轮全量):原六项定向 424 项、原生 reference_ 17 项;批量标签前端 68 项、原生分类 22 项通过。真实客户端生成/布局、原生 IPC 批量写盘及付费 Provider 联调仍需验收。 ## CI 与发布边界 - 上一已推送 SHA `1bd153d7f` 的 **run 2473:11 项中 10 项成功,Rust shard 2/4 失败**,具体为: - `background_agent_runtime_confirmation_is_bound_to_exact_tool_input` - `background_agent_runtime_loads_same_agent_continuity_through_tool_observation` - 本地发现共享测试配置可能造成多进程互扰;**不能据此断言 CI 根因相同**。本次没有删除断言、放宽超时或绕过检查,未把这两条标为已修复。 - 新提交 `2ffccb844` 的远程 CI 以实际新轮次为准,尚未确认通过。因此本 PR 仍不是可直接发布的全绿状态。 - 不合并 PR、不发版、不恢复 CI 定时任务;飞书状态未写回。用户个人未提交的 package-lock.json 保持原样,不纳入提交。 ## 未完成 / 后续处理 - 全类型卡片重设计与真实 assetName 展示;画布内生成任务浮层:仅有本地设计预览,未计入已实现。 - 动画生成失败、未完成编辑恢复入口、资源面板多选卡死:待排查。 - 标签面板查看更多标签、素材替换关系/点选替换、快速编辑名称校验报错:待处理,不以本批修复替代。 - 聊天拖拽批量 @、复制对话保留有效引用:不在本批范围。 - 真实客户端切项目、取消后立即重发、重开历史与 Provider 通知链路验收未完成,临时验收计划保留。
suzmii added 26 commits 2026-09-17 20:04:43 +08:00
统一生成占位与参考、资源卡展示和布局交互的验收要求

补充单里程碑并行实现计划和独立评审门禁
明确参考图片入参、账号绑定与恢复校验

固定栏目整理撤销、多选范围与素材名称来源
普通生成最多五张参考,图集拒绝额外参考

复用现有引用快照并核验恢复校验,明确里程碑验收边界
补齐共享包测试别名以避免复用依赖指向其他工作树

记录工作树依赖复用的解析检查要求
使用独立工作树处理原生引用,固定引用资产ID接缝
新增参考图模型:候选为当前项目已登记图片,用户参考上限普通生成 5 张、带规范前置 4 张、图集为 0
生成浮层复用资源引用输入组件,提示词里的 @ 引用直接产出当前 manifest 资产 ID 作为参考
生成任务与队列新增 referenceAssetIds,派发时以 referenceAssetIds 交给原生侧解析账号绑定
图集入口不呈现参考选择器,超限在提交前给出原因并挡住提交,不做静默截断
补充参考模型、面板接线与队列派发的定向测试
- 资源卡新增卡面名称条,所有类型卡统一显示正式资源 label,长名单行省略、完整名进 title

- 文档卡卡面改为居中图标,不再把正文前几行铺在卡面上,正文只在独立详情浮层读取

- 删除卡面正文摘要的取文本 helper 与行数/长度常量,移除对应 CSS 规则不留墓碑

- 名称条按媒体卡让出右下播放钮位置,替换血缘角标上移避免遮住名称

- 新增资源卡名称与文档卡卡面用例,并同步重命名链路与卡面正文的既有断言
统一卡面名称和文档图标展示要求

明确当前栏目整理与多选移动的撤销边界
- 完整资源名改挂在覆盖整卡、真正命中指针的选中按钮 title 上,名称条自身不再挂悬停不到的 title

- 无障碍名保持原有 aria-label 不变,长名仍是 CSS 单行省略

- 断言改为校验选中按钮 title,并钉住名称条不挂 title

- 文档卡分支注释只写当前行为,去掉旧实现说明
- 整理画布重排目标栏目内全部素材(含手动坐标与被筛选隐藏的卡),「所有资源」页覆盖全部栏目
- 栏外坐标逐值保留:不再把其他栏目的自动坐标丢给重算,避免被顺带规整成规范槽位
- 手动标记纳入历史快照与相等判定,撤销整理恢复原坐标与原手动标记
- 新增批量坐标写入入口:多选拖动与撤销都只排一笔 CAS、只压一条历史
- 多选拖动按同一位移整批跟随,取消 / 捕获丢失 / 失焦回滚,切项目丢弃进行中的位移
- 补测试:栏外自动坐标保留、all 页整理范围、批量撤销与取消边界
新增 referenceAssetIds 原生入参:start_local_project_asset_generation 与 generate_local_project_asset 经 prepare_local_project_asset_generation 统一收口当前项目 manifest 图片素材 id
PlatformArtAssetGenerationOptions 增加 reference_asset_ids,GUI、agent 桥、media 观察与 Direct 运行时构造点显式传空
参考解析固定规范图前置在前、用户参考按给出顺序随后,按远端资源 ID 去重,普通生成总量 5 张、有规范前置 4 张用户参考,图集拒绝额外参考而非静默丢弃
参考素材复用 manifest 到本地文件、图片解码、内容 hash、当前账号 binding 上传的既有通道,历史账号遗留远端 ID 不再复用
retained 阶段与清单校验改为与提交同一套请求合同:icon-spec、ui-prototype、game-background 允许正确引用,art-spritesheet 仍只接受唯一规范引用
修复 Part::file_name 的生命周期错误与 4 处测试构造点少传参考参数
排除不可解码SVG参考并约束上传权限与账号归属判据
- 显式整理与「关系图首次就绪」各占一个队列槽,系统重算不再改写用户已按下的那笔整理
- 资源签名同步覆盖排队中的每一笔资源意图,先落盘的那笔不会把后一笔留成过期签名
- 撤销栈按「项目 + 排序模式」隔离:切模式后不会把另一份 sidecar 的坐标写过去
- 整理的「有没有变化」判据与落盘同源,目标栏目还有在途/排队手动落点时也算一次真实变化
- 删除本次改动退役且已无调用方的 resourceBookAllBandLocalPoint 与布局 dragX/dragY
- 补回归:排队中整理不被覆盖、切模式撤销不跨写、在途拖动后整理照常生效、分类变更后拖动按新栏目落盘
工具点击先在当前栏目创建临时占位卡,生成浮层挂在占位下沿;图片、音效、背景音乐入口一致
占位按项目与草稿 ID 归属宿主临时状态:可拖动、提交绑定任务 ID、成功结果落到占位最新位置
删除占位只隐藏展示,关闭浮层不冒充取消后台任务;失败保留占位与输入引用供重试
生成面板改为非模态浮层:ThemedModal 焦点陷阱曾阻断 portal 到 body 的引用选择器,点选不生效
引用选择器定位加顶边钳制,搜索收窄与键盘选择可用;不再越出视口
参考候选与陈旧引用校验排除 SVG(原生解码不支持),其余 image 类型不额外收窄
任务创建处对参考资产 ID 去重;补浮层真实组件整合、占位模型与拖动、参考模型回归测试
参考解析前增加纯本地预检:清单归属、受控路径与文件、媒体类型、可解码位图全部通过后才允许产生任何上传副作用,避免第一张参考已上传、第二张坏图才失败
明确拒绝 SVG 等矢量参考,媒体类型或文件扩展名任一命中即拒,本次不做矢量转换,坏图同样在本地失败关闭
asset.upload 门禁提前到预检阶段,显式拒绝该命令的项目连第一个上传凭证都不会签发
预检与实际上传共用同一份本地判据 helper,不新建平行流程,上传侧仍按同一判据重新读取与解码
补参考合同与恢复的账本用例:icon-spec 带用户参考、game-background 规范图加用户参考、图集超限、空白引用写入失败
补提交侧用例:拒绝路径、未登记、非图片、缺失文件、超限、SVG 与坏图,并断言零上传凭证与零生成 POST,反向验证同一张合格参考单独提交确实会签发凭证
补 asset.upload 拒绝用例,以及清单校验与 Direct 身份校验接受用户参考、拒绝用户参考顶替规范引用的覆盖
明确切模式后新操作会替换旧撤销栈但不会跨写布局
生成浮层的草稿、错误与占位归属统一按 draftId 判等,动作 ID 已无读取方,删掉避免留下死状态
打开生成浮层时把占位与浮层整块带进安全区(避开顶栏底栏),只做最小视口平移不改缩放
落点意图改为按草稿 ID 的 Map,避免并发完成互相覆盖;坐标在落点时刻取占位最新位置
落点 section 改用资源正式归类后的 category,修复图片落待归类、规范落文档时静默跳过
音频与背景音乐提交绑定占位与 operationId:在途时拒绝再次提交,失败保留输入并可同 operation 重试
宿主记录收起浮层时的草稿与音频提交身份,重开占位接着编辑而不是回到空表单
生成任务新增入口栏目 targetCategory 走原生可选入参,前端不据此伪分类
补可见性平移的定向测试
GUI 生成命令新增可选 targetCategory:generate_local_project_asset 与 start_local_project_asset_generation 经 options 传入完成登记
PlatformArtAssetGenerationOptions 增加 target_category,Agent 与 Direct 路径保持 None,仍按 kind 派生默认分类
新建条目与同 kind 重登记都按显式目标分类写入 manifest 既有 category 字段,不新增字段、不改数据结构
目标分类只接受 GameCreationAppAssetCategory 的六个合法值,version 与 all 等栏目伪值在提交前失败关闭
target_category 刻意不进 standalone 指纹与 durable 请求快照,分类只影响本地 manifest 落点,避免在途账本换槽重复 POST,同任务幂等恢复由调用方继续用同一栏目提交
补用例:kind=image 带 targetCategory=character 落到 character 而不是 unclassified、非法栏目值不产生生成请求、登记入口的显式分类与不传时的原 kind 派生行为
appSurface 图集/图标规范入口的提示词仍是 textarea,helper 不能只走 Lexical 编辑器 API
两种字段分别用原生 change 与编辑器 update,读回同样两种口径
补 targetCategory 随任务保存与恢复的断言
明确原生目标分类、音频幂等及画布浮层可见性
浮层复用模态的面板类:边框圆角底色内边距与 header 排布不再缺失
高度上界按真实画布可用底边算(画布高减退底栏安全区与顶边),空间紧时收紧并内部滚动
提交动作行固定在浮层底部,避免长表单把提交按钮顶到底栏下面
新增浮层高度模型测试、结构 CSS 钉子与浮层 chrome 断言
新增宿主级整合用例:图片按正式归类落点并用占位最新位置、音频失败保留与幂等重试
- 新增测试文件 resourceCanvasGenerationHostLifecycle.test.tsx,渲染真实 ProjectDevelopmentView
- 覆盖音频入口:点工具出占位、提交后占位进入 submitted(后台仍在跑时的中间态)
- 覆盖失败后原请求重试:复用同一 operationId 与幂等键,不会变成新的付费生成
- 覆盖成功后落点:结果卡按占位位置落盘(手动接管),占位随之被撤掉
- 原生命令全部走假实现,不触发任何真实 Provider 调用
补回 transform translateX(-50%):锚点给的是占位卡中心,少了它浮层整体右偏半个面板宽
高度只按画布安全带分配:装得下时挂在卡下面,装不下时与卡顶边对齐盖住占位,不再压成一百多像素
reveal 的面板高度按当前缩放从屏幕 px 折回世界坐标,占位与浮层并集参与可见性
浮层宽度并入可见性并集,靠边卡片不再把浮层切掉一半
新增真实矩形模拟用例(画布高 568)核对浮层高度与落点不越出安全带
- 阶段文案与徽标改用 waitFor:本地队列的「排队中。」先于后端记录合并,同步断言在整套连跑时抢跑
- 用例收尾连等两个 poll 周期(2s)并断言账本读计数不再增长,确认这条轮询链在本用例内退出
- 留在线上的轮询醒来会打进下一个用例的 spy(宿主按调用时读 __TAURI__),故排空放在用例内,未动全局 harness
- 未改生产:后台任务跨面板保活保持原样
记录画布验收修复的验证证据与待验边界
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
45c3780bf5
登记自动化回归和独立评审结论

保留真实客户端与付费生成待验项及远程写入确认边界
suzmii added 1 commit 2026-09-17 20:15:42 +08:00
合并最新主分支并修复画布静态检查问题
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 7m19s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 7m30s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 7m28s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 7m41s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m11s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m10s
Project CI / Native shell tests (pull_request) Failing after 4m28s
Project CI / Frontend tests (pull_request) Failing after 5m12s
Project CI / Backend tests (pull_request) Successful in 7m17s
Project CI / Repository checks (pull_request) Failing after 5m43s
Project CI / AI game creator shell web tests (pull_request) Failing after 4m34s
db5edc948c
合入master的更新摘要、策划运行边界及图集契约调整

保留画布生成引用占位、资源卡展示与批量布局功能

修正导入顺序、未使用项和稳定回调依赖
suzmii added 5 commits 2026-09-17 22:20:30 +08:00
补齐图集切分声明与工具目录字段边界断言

更新原生HTTP权限守卫及稳定空快照发布次数期望

修正末尾空行并记录CI排查证据,保留待远程验证状态
合入PR410的常用操作收纳与卡片信息类型入口

保留本分支资源名称、文档图标、占位生成与批量移动能力

整合引擎结构摘要与当前图集测试契约
限定追加语义、冻结对象、原子保存与类型保留边界

记录已评审里程碑及前后端并行实现计划
复用标签编辑器并冻结整组选中素材,保留原标签与素材类型

原生批量校验后一次保存,覆盖权限、版本冲突与无变化边界

修复保存输入锁和切项目迟到回包,补齐混合选择入口原因

新增前后端回归并记录本地验证及待真实客户端验收事项
合并最新主线抠图链路与开发监听修复
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 6m44s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 6m55s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 7m3s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m9s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m30s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 4m41s
Project CI / Native shell tests (pull_request) Successful in 15m5s
Project CI / Repository checks (pull_request) Successful in 16m54s
Project CI / Backend tests (pull_request) Successful in 19m49s
Project CI / Frontend tests (pull_request) Successful in 23m33s
Project CI / AI game creator shell web tests (pull_request) Successful in 11m6s
20b1fd63de
合入master的抠图账本链路、Vite监听边界及窗口测试更新

保留画布占位参考生成、资源展示与批量标签追加功能

合并态通过137项定向测试、AGC类型检查及Rust全目标编译
lhk229 added 1 commit 2026-09-18 01:04:06 +08:00
Merge branch 'master' into feat/agc-canvas-acceptance
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust smoke (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
f5a333b839
suzmii added 1 commit 2026-09-18 10:46:07 +08:00
合并主线对话状态与抠图背景色更新
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 4m56s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 6m9s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 5m28s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m33s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m23s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 4m39s
Project CI / Repository checks (pull_request) Successful in 4m50s
Project CI / Backend tests (pull_request) Successful in 8m38s
Project CI / Frontend tests (pull_request) Successful in 8m2s
Project CI / AI game creator shell web tests (pull_request) Successful in 8m11s
Project CI / Native shell tests (pull_request) Successful in 15m27s
1bd153d7f2
合入 master a2e6f205d,保留远端功能分支已有合并历史。
融合生成选项的参考素材、目标栏目与抠图背景色字段。
保留主线统一线程状态与重试策略,完成前端及原生定向验证。
suzmii added 1 commit 2026-09-18 12:18:20 +08:00
修复对话动态计时与初始消息重复并补齐游戏居中指引
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 5m51s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 5m45s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 5m31s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m3s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m4s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 4m38s
Project CI / Repository checks (pull_request) Successful in 5m39s
Project CI / Frontend tests (pull_request) Successful in 7m45s
Project CI / Backend tests (pull_request) Successful in 10m3s
Project CI / Native shell tests (pull_request) Successful in 8m54s
Project CI / AI game creator shell web tests (pull_request) Failing after 5m31s
2ffccb844c
区分整轮总耗时与工具实际阶段时间,以百毫秒刷新一位小数并冻结终态。
修复正式与乐观用户消息到达时初始占位重复,保留真实同文多次发送。
在开发 Agent 系统提示与 Skill 明确禁止 Phaser 和 CSS 双重居中。
补齐原生事件、前端回归与验收文档,保留未完成项和远程 CI 风险。
Author
Member

补充 Review 结论(2026-09-18)

审查提交:2ffccb844c790c0e54d644b5a1e0b0bc6236f154;对比主线:a2e6f205d660cfa8a2b2b6e0104bf991021d3d58

由 4 个 deepseek-flash 子 agent 分区只读审查,gpt-6-astra 主 Agent 复核。补审此前缺少最终集成复核的原生事件时间、前端跨回合/历史恢复、生成引用与占位、批量标签及布局并发链路。此次仅报告发现,尚未针对以下问题修复。

P1:切换生成占位时复用旧面板状态

  • 症状:浮层未关闭时切换另一张占位或生成工具,提示词、名称、失败状态和请求身份仍可能沿用上一张;音效切换到背景音乐后,面板仍按旧 kind 提交。
  • 原因:音频浮层没有按 draftId 设置 key;图片浮层 key 只有 action.id 与 fresh/reopened,不能区分同类不同占位。组件 state/ref 仅在挂载时初始化。
  • 定位:apps/ai-game-creator-shell/src/view/project-development/index.tsx:9584-9618,9624-9631apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasGenerationPanelView.tsx:121-166
  • 证据:两个临时组件复现用例确认切换后仍保留旧工具/输入。未调用真实付费 Provider,因此不声称已发生错误扣费。
  • 建议:用 draftId 隔离面板实例及请求/草稿状态,并补真实宿主的跨占位切换回归。

P2:整轮总耗时漏算发送后的初始化等待

  • 症状:正式用户条目到达后,计时起点可能向后移动,thread/MCP 初始化及 turn/start 应答前的等待不计入“总耗时”。
  • 原因:原生用户条目没有携带原始发送时间,投影回退为 turn/start 应答后的宿主时间;前端按同一 messageId 丢弃乐观消息时,也丢掉了其中较早的发送时间。
  • 定位:apps/ai-game-creator-shell/src-tauri/src/agent/codex_app_server/mod.rs:3053-3066apps/ai-game-creator-shell/src/features/project-workspace/directTurnPresentation.ts:188-190,239-259
  • 证据:主 Agent 使用当前源码内存复现,发送与应答相隔 8 秒时,最终起点采用应答时间,漏算 8 秒。
  • 建议:保留同身份用户消息的真实发送时间,正式条目不能用较晚的观测时间覆盖它。底层时间回退行为部分继承主线,但不满足本 PR 新增的“从发送到终态”合同。

P2:live 为空时有权威终态时间,但展示边界丢失

  • 症状:本轮用户条目已进入 history、没有新的 live 条目时,立即失败或取消可能不显示总耗时与结束时间。
  • 原因:收口只给 live 条目盖时间边界,并且只有 live 非空时才尝试给历史开口条目补边界;视图只读条目边界,不读 state 中已有的终态时间。
  • 定位:apps/ai-game-creator-shell/src/features/project-workspace/directThreadChat.ts:295-324apps/ai-game-creator-shell/src/features/project-workspace/directTurnPresentation.ts:250-262
  • 证据:子 agent 与主 Agent 均以内存复现确认 state.turnEndedAt 已有值,但投影后的 turn.endedAt 为 0。
  • 建议:为当前回合保留可明确归属的展示边界,不能依赖 live 非空;不能把最新终点兜底填给所有旧历史回合。

P2:失败重试静默丢弃已删除的参考素材

  • 症状:任务失败后删除参考素材,再打开占位重试,引用数量减少却没有失效提示;后续恢复可能被原生请求一致性校验拒绝。
  • 原因:重建引用时直接过滤清单中找不到的资产,提交前的陈旧引用检查已无法看到这些缺失项。
  • 定位:apps/ai-game-creator-shell/src/view/project-development/index.tsx:8774-8794;原生恢复校验位于 apps/ai-game-creator-shell/src-tauri/src/agent/generation/canvas_generation.rs:3096-3115
  • 证据:前后端静态链路核对;未执行真实 Provider 恢复请求。
  • 建议:保留失效引用占位并明确提示,或在重试入口说明可执行的对账/新请求处理方式,不静默过滤。

P3:不同栏目连续整理会覆盖排队范围

  • 症状:已有布局写入在途时,先整理 A 栏目再整理 B 栏目,A 的整理可能未落盘。
  • 原因:排队 organize 意图查找未区分 sections,第二次请求直接覆盖第一次的 sections。
  • 定位:apps/ai-game-creator-shell/src/view/project-development/useProjectResourceCanvasLayout.ts:1216-1226
  • 建议:不同范围独立排队,或按明确定义合并范围并同步撤销语义。
  • 证据:静态队列时序核对,未做真实客户端窄时序复现。

P3:拖动中布局刷新后,预览和保存使用不同起点

  • 症状:拖动期间布局被异步重建,松手后卡片可能跳位。
  • 原因:预览使用实时 layout 坐标加位移,提交使用 pointerdown 冻结坐标加位移。
  • 定位:apps/ai-game-creator-shell/src/view/project-development/index.tsx:7047-70485813-5819
  • 建议:预览与提交统一使用同一份起点快照。
  • 证据:静态坐标路径核对,未做真实客户端并发时序复现。

尚未证实的风险(不计入确定 bug)

取消后立即重发与迟到终态的竞争:内存状态机可构造出新回合被旧终态收口,但原生 FIFO、IPC 回包与新请求的实际先后尚未验证,需要真实客户端复现后再定性。

本轮验证与边界

  • 批量标签未发现新的阻断项;子 agent 的标签/布局定向测试 175 项通过,主 Agent 补跑卡片、重命名及窗口同步 8 项通过。
  • 已核对 raw function_call/function_call_output 路径可提供起止阶段;Skill 包指纹检查通过。
  • 未重启客户端、未执行真实 Provider/付费请求、未跑完整原生 IPC 端到端;以上测试通过不能替代现场验收。
  • 卡片全面重设计、画布内任务浮层仍是已明确未交付需求,不作为本轮新发现重复计数。

结论:建议先修 P1 与三个 P2,再评估合并/发版。此评论不是“所有 bug 已修复”或发布批准。

## 补充 Review 结论(2026-09-18) 审查提交:`2ffccb844c790c0e54d644b5a1e0b0bc6236f154`;对比主线:`a2e6f205d660cfa8a2b2b6e0104bf991021d3d58`。 由 4 个 deepseek-flash 子 agent 分区只读审查,gpt-6-astra 主 Agent 复核。补审此前缺少最终集成复核的原生事件时间、前端跨回合/历史恢复、生成引用与占位、批量标签及布局并发链路。此次仅报告发现,尚未针对以下问题修复。 ### P1:切换生成占位时复用旧面板状态 - 症状:浮层未关闭时切换另一张占位或生成工具,提示词、名称、失败状态和请求身份仍可能沿用上一张;音效切换到背景音乐后,面板仍按旧 kind 提交。 - 原因:音频浮层没有按 draftId 设置 key;图片浮层 key 只有 action.id 与 fresh/reopened,不能区分同类不同占位。组件 state/ref 仅在挂载时初始化。 - 定位:`apps/ai-game-creator-shell/src/view/project-development/index.tsx:9584-9618,9624-9631`;`apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasGenerationPanelView.tsx:121-166`。 - 证据:两个临时组件复现用例确认切换后仍保留旧工具/输入。未调用真实付费 Provider,因此不声称已发生错误扣费。 - 建议:用 draftId 隔离面板实例及请求/草稿状态,并补真实宿主的跨占位切换回归。 ### P2:整轮总耗时漏算发送后的初始化等待 - 症状:正式用户条目到达后,计时起点可能向后移动,thread/MCP 初始化及 turn/start 应答前的等待不计入“总耗时”。 - 原因:原生用户条目没有携带原始发送时间,投影回退为 turn/start 应答后的宿主时间;前端按同一 messageId 丢弃乐观消息时,也丢掉了其中较早的发送时间。 - 定位:`apps/ai-game-creator-shell/src-tauri/src/agent/codex_app_server/mod.rs:3053-3066`;`apps/ai-game-creator-shell/src/features/project-workspace/directTurnPresentation.ts:188-190,239-259`。 - 证据:主 Agent 使用当前源码内存复现,发送与应答相隔 8 秒时,最终起点采用应答时间,漏算 8 秒。 - 建议:保留同身份用户消息的真实发送时间,正式条目不能用较晚的观测时间覆盖它。底层时间回退行为部分继承主线,但不满足本 PR 新增的“从发送到终态”合同。 ### P2:live 为空时有权威终态时间,但展示边界丢失 - 症状:本轮用户条目已进入 history、没有新的 live 条目时,立即失败或取消可能不显示总耗时与结束时间。 - 原因:收口只给 live 条目盖时间边界,并且只有 live 非空时才尝试给历史开口条目补边界;视图只读条目边界,不读 state 中已有的终态时间。 - 定位:`apps/ai-game-creator-shell/src/features/project-workspace/directThreadChat.ts:295-324`;`apps/ai-game-creator-shell/src/features/project-workspace/directTurnPresentation.ts:250-262`。 - 证据:子 agent 与主 Agent 均以内存复现确认 state.turnEndedAt 已有值,但投影后的 turn.endedAt 为 0。 - 建议:为当前回合保留可明确归属的展示边界,不能依赖 live 非空;不能把最新终点兜底填给所有旧历史回合。 ### P2:失败重试静默丢弃已删除的参考素材 - 症状:任务失败后删除参考素材,再打开占位重试,引用数量减少却没有失效提示;后续恢复可能被原生请求一致性校验拒绝。 - 原因:重建引用时直接过滤清单中找不到的资产,提交前的陈旧引用检查已无法看到这些缺失项。 - 定位:`apps/ai-game-creator-shell/src/view/project-development/index.tsx:8774-8794`;原生恢复校验位于 `apps/ai-game-creator-shell/src-tauri/src/agent/generation/canvas_generation.rs:3096-3115`。 - 证据:前后端静态链路核对;未执行真实 Provider 恢复请求。 - 建议:保留失效引用占位并明确提示,或在重试入口说明可执行的对账/新请求处理方式,不静默过滤。 ### P3:不同栏目连续整理会覆盖排队范围 - 症状:已有布局写入在途时,先整理 A 栏目再整理 B 栏目,A 的整理可能未落盘。 - 原因:排队 organize 意图查找未区分 sections,第二次请求直接覆盖第一次的 sections。 - 定位:`apps/ai-game-creator-shell/src/view/project-development/useProjectResourceCanvasLayout.ts:1216-1226`。 - 建议:不同范围独立排队,或按明确定义合并范围并同步撤销语义。 - 证据:静态队列时序核对,未做真实客户端窄时序复现。 ### P3:拖动中布局刷新后,预览和保存使用不同起点 - 症状:拖动期间布局被异步重建,松手后卡片可能跳位。 - 原因:预览使用实时 layout 坐标加位移,提交使用 pointerdown 冻结坐标加位移。 - 定位:`apps/ai-game-creator-shell/src/view/project-development/index.tsx:7047-7048` 与 `5813-5819`。 - 建议:预览与提交统一使用同一份起点快照。 - 证据:静态坐标路径核对,未做真实客户端并发时序复现。 ### 尚未证实的风险(不计入确定 bug) 取消后立即重发与迟到终态的竞争:内存状态机可构造出新回合被旧终态收口,但原生 FIFO、IPC 回包与新请求的实际先后尚未验证,需要真实客户端复现后再定性。 ### 本轮验证与边界 - 批量标签未发现新的阻断项;子 agent 的标签/布局定向测试 175 项通过,主 Agent 补跑卡片、重命名及窗口同步 8 项通过。 - 已核对 raw function_call/function_call_output 路径可提供起止阶段;Skill 包指纹检查通过。 - 未重启客户端、未执行真实 Provider/付费请求、未跑完整原生 IPC 端到端;以上测试通过不能替代现场验收。 - 卡片全面重设计、画布内任务浮层仍是已明确未交付需求,不作为本轮新发现重复计数。 **结论:建议先修 P1 与三个 P2,再评估合并/发版。此评论不是“所有 bug 已修复”或发布批准。**
suzmii added 6 commits 2026-09-18 15:48:30 +08:00
按占位身份隔离生成面板并保存草稿,阻止改变失败请求输入后伪装重试。
保留用户真实发送时间,按既有用户条目身份恢复空运行态回合的终态边界。
修复跨栏目整理队列覆盖及多选拖动预览起点漂移。
补齐六项 review 发现的回归、原生绑定、交叉审查及浏览器验收记录。
合入 origin/master b137f1759,保留画布验收与计时返修。
同步主线0.1.67版本及Mac随包资源、插件能力和发布目标检查。
合并双方排障说明,不提交个人依赖锁文件改动。
每个工具组只计算自身调用跨度,已完成组立即停止增长与进行中标记。
整轮总耗时仅在回合状态或完成小结显示一次,单工具仍按百毫秒动态更新。
补齐前组已完成后组运行、边界缺失与倒序的回归及浏览器证据。
思考展开复用安全Markdown渲染,折叠显示浅色单行纯文本预览与右侧箭头。
共享过程摘要组件,执行过程按真实操作数显示统计并保留各组独立计时。
工具、整轮、生成任务和策划耗时统一为中文时分秒格式。
补齐格式与Markdown回归、更新已有界面断言并验证窄屏键盘操作。
思考展开时隐藏重复预览并使用灯泡图标,首个响应前显示临时思考提示。
统一分钟内小数和分钟以上整数秒,保持内外过程的紧凑间距与正文层级。
失败工具与分组显示错误色,非零退出码不再误判为成功。
补齐状态、格式、样式和交互回归,本批其余需求留待后续PR。
合并主线项目创建目录选择更新
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Successful in 6m53s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Successful in 6m31s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Successful in 7m12s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m5s
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Successful in 4m54s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m12s
Project CI / Backend tests (pull_request) Successful in 9m37s
Project CI / Native shell tests (pull_request) Successful in 12m21s
Project CI / Repository checks (pull_request) Successful in 11m10s
Project CI / AI game creator shell web tests (pull_request) Successful in 12m51s
Project CI / Frontend tests (pull_request) Successful in 23m14s
deff6319e2
合入 master ee33af7b7 的项目目录选择与模板建项说明。
保留本批画布和对话修复,自动合并无冲突,类型检查通过。
suzmii merged commit 9a21690fe9 into master 2026-09-18 15:50:45 +08:00
Sign in to join this conversation.