修复游戏创作工作流与UI图集事务
将固定图片规则降为默认合同并允许Supervisor持久委派扩展UI图集 修复条件Graph路由、终态投影、steer窗口和manifest只读刷新 将UI主图、切片、manifest与Agent DB审计收口为可恢复事务 加固跨平台句柄、journal重放、残留隔离和Agent DB容量门禁 补充工作流、事务恢复、Provider与项目夹具回归 同步技术方案与团队共享决策
This commit is contained in:
@@ -1,5 +1,39 @@
|
||||
# 决策记录
|
||||
|
||||
## 2026-08-07 UI 图集固定输出续跑与跨平台整组回滚
|
||||
|
||||
- 背景:UI 图集 durable 续跑在主图已经安装后仍会把同一 cohort 当成“初次覆盖”拒绝;进程若中断在 cohort 的 backup / publish 边界,`.previous / .replacement` 没有 UI 专用恢复入口。live rollback 又复用原事务 suffix,在 Windows 已存在 `.previous.<suffix>` 时会因目标存在而无法恢复主图。最后一条 `canvas.asset_generate` 审计追加错误也曾被 UI 分支吞掉,留下已登记但无完整审计的半成功合同。
|
||||
- 决策:`ui-spritesheet + outputPath` 在项目写锁内扫描与该输出一一对应的 cohort 残留;canonical cohort 存在时,先完整校验同源清单、连续切片、稳定身份、PNG 尺寸和双摘要,再清理至多一组可信残留;canonical 缺失时只允许恰好一组可信 previous 恢复,多组、replacement-only 或任一不可信目录 / 文件失败关闭。恢复和清理还必须匹配项目 manifest 已登记主图的 `resourceId`,并把校验、删除和 no-replace 恢复绑定到同一目录句柄,不能在 pathname 复核后操作可能已被外部进程替换的目录。durable 主图已安装后,只有当前 cohort 与同一次结果的 source、resourceId、清单和全部 PNG 字节完全一致时才按幂等成功继续登记。
|
||||
- 原子性:UI 首次本地写入前即要求主图具有非空 `resourceId / assetObjectId`、切片非空,且每片具有非空唯一身份、PNG 格式、有效尺寸、内容摘要和规范像素摘要。live rollback 使用新的唯一 rollback suffix 恢复快照,成功后再安全清理原事务残留;UI 的 `asset.register / asset.update` 与 `canvas.asset_generate` 审计共享同一 `transactionId`。后续环节失败时外层事务恢复主图、cohort 和项目资产登记,并向 append-only Agent DB 追加使用 terminal reserve 的 `canvas.asset_generate.rollback` 终态补偿;本地恢复或补偿审计失败必须进入 reconciliation。
|
||||
- durable journal:事务先在同一锚定 `.agent/runtime` parent 下创建 `.preparing`,完整冻结旧主图 / manifest、目标 manifest、asset audit 和 canvas audit 后,以 no-replace 原子发布为 active。已有 journal 不能信任自身派生字段:恢复时重新计算目标登记、assetId、recordType、两条审计、旧快照摘要和存在性,并按 prepared / committed / rollback-requested / rolled-back 状态验证精确允许 child 集合;未知 child、内部矛盾、active / preparing 并存或终态组合冲突全部进入 reconciliation。committed 后的清理中断只继续清理并做 terminal replay,不重新安装或追加 `asset.update`。
|
||||
- 句柄与残留:previous cohort 的已验证目录句柄跨 publish 错误、rollback 和 cleanup 保留;目录 residue 先退休为事务私有名称再删除,文件型 previous / replacement / discard 先通过 retained parent 做 no-replace 隔离并复核冻结字节,再清理 retired 叶子。Windows 的目录创建、child 读写、rename、CAS 与删除都逐级使用相对 retained handle,避免回到绝对 pathname。
|
||||
- Agent DB:终态精确审计在 append lock 内运行;先修复可确认的 torn tail,再对全文件执行物理字节和记录数上限并做精确记录匹配。32 MiB 尾窗只适用于普通有界读取,不能作为 committed / rolled-back 的 durable 证明。
|
||||
- 验证:定向 Rust 回归覆盖 Windows destination-exists 模拟、单组 previous 恢复、已发布 canonical 清理残留、文件删除竞态、retired residue、未知 journal child、preparing 部分创建、五个 rollback 崩溃阶段、未登记 / 他源身份拒绝、父目录 pathname 替换、多组 / 损坏残留拒绝、已安装同源 cohort 续跑、首次身份与切片元数据拒绝、成功审计同事务、最终审计失败后的整组回滚补偿,以及 Agent DB 超尾窗、torn tail 和物理容量门禁。
|
||||
- 关联文档:`docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`。
|
||||
|
||||
## 2026-08-06 额外 UI 图集主图、切片 cohort 与资产登记整组提交
|
||||
|
||||
- 背景:额外 UI 图集的主图曾先于切片安装和登记;cohort 发布失败又被降级为 `sliceWarning`,会把新主图与旧切片留在同一项目。repair 只核对清单 schema/source,也无法证明旧 cohort 真正属于当前已登记主图。
|
||||
- 决策:`ui-spritesheet` 的主图、与该主图一一对应的切片 cohort 和项目 manifest 资产登记作为一个外层事务。UI 切片写入失败不再降级告警;切片发布、资产登记或后续审计失败时整组恢复旧主图、旧 cohort 与旧登记。repair 前必须证明旧清单 `sourceResourceId` 等于当前 Canvas 主图登记,`slices` 非空、路径连续且身份唯一,并逐文件核对普通文件类型、尺寸、内容摘要和规范像素摘要。
|
||||
- 路径边界:额外 UI 图集输出继续允许精确委派的独立 PNG,但不得覆盖 `assets/art-spec.png`、`assets/ui-prototype.png`、`assets/art-spritesheet.png` 或核心/UI 派生切片目录。Runtime 从项目 manifest 枚举每一张已登记 `ui-spritesheet`,推导其专属切片目录,并在请求前与 durable 结果提交前对输出路径执行 ASCII 大小写不敏感的双向祖先 / 后代冲突检查,避免额外主图通过任意文件名的派生目录覆盖既有 cohort。
|
||||
- 验证:定向 Rust 回归覆盖外层资产登记失败后三类状态整组恢复,cohort 发布失败恢复,缩容 repair 清理旧尾部,错误主图身份、空/不连续清单、摘要不符和非普通文件拒绝,以及固定路径的大小写别名拒绝。
|
||||
- 关联文档:`docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`。
|
||||
|
||||
## 2026-08-06 待确认账本区分任务上下文路径与真实工具输入
|
||||
|
||||
- 背景:Supervisor 任务正文可明确写出当前项目绝对路径;当 Provider 同轮返回两个以上只读动作时,durable action batch 会把原始任务正文复制进每个 pending record。旧校验对整个 record 搜索项目根路径,导致相对路径的 `asset.list / project.search / file.list` 也在批次预检阶段被误报为“工具输入包含项目绝对路径”,根 Run 在第一次实际动作前失败。
|
||||
- 决策:敏感字段、API Key 与 secret token 继续检查完整 pending record 和任务上下文;项目绝对路径校验只豁免 pending record 中复制的原始 `task` 字段,`plan`、`thinking`、`observations`、`action.reason / action.input` 及其它 pending 字段仍检查。任务正文可以标识当前项目,但工具 reason / input 仍必须使用项目相对路径。Provider batch、恢复、确认与 action fingerprint 合同不变。
|
||||
- 验证:覆盖“只有原始任务正文包含项目根、其余 pending 字段与工具输入均为相对路径”通过,以及 `plan`、`thinking`、`observations` 或工具 action 自身包含项目绝对路径时继续拒绝;保留全部敏感信息拒绝回归。
|
||||
- 关联文档:`docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`。
|
||||
|
||||
## 2026-08-06 图片固定合同作为默认值,Supervisor 可通过 durable 委派扩展 UI 图集槽位
|
||||
|
||||
- 背景:`art-asset-plan` 能正确理解 Supervisor 要求的额外运行时 UI 图集,但 `canvas.asset_generate` 仍按 Agent ID 强制改写为 `assets/art-spritesheet.png`,导致语义决策被静态规则替代;直接复用核心图集切片提交还会覆盖玩家、目标、场景和反馈四张玩法切片。
|
||||
- 决策:三类 canonical 图片合同继续作为默认值且无委派时失败关闭。只有运行中的 Project Supervisor 通过 durable static delivery 委派 `art-asset-plan`,`expectedArtifacts` 同时保留 canonical `assets/art-spritesheet.png` 并精确声明额外 PNG 路径,父子 task、session、run、action 派生 delegationId、source 和 delivery 状态全部闭合时,才允许以 `assetKind=ui-spritesheet` 扩展输出槽位。授权在外部请求前和 durable 结果本地提交前各复核一次;替换仍要求原 delivery 已认领且只有唯一 repair。
|
||||
- 产物边界:`ui-spritesheet` 复用 External Editor icon-spritesheet、`art-spec` 稳定资源引用、透明 Alpha 与 PNG 校验,但使用独立 UI 组件描述;canonical 主图 `assets/ui-spritesheet.png` 的切片清单保持为 `assets/ui-spritesheet-slices/manifest.json`,其它额外主图使用与主图同目录、由完整主图文件名确定的 `<主图文件名>-slices/manifest.json`。每个主图只拥有自己的切片 cohort;初次生成不得替换既有 cohort,只有已通过 durable repair 授权且旧清单 `source` 精确绑定同一路径时才整体替换。任何 UI cohort 都不得进入 game-chat 核心四切片严格合同或写入 `assets/art-spritesheet-slices/*`。普通专业 Agent 直调、伪造 `delegated-*`、未声明路径、终态父 run 或 canonical 路径非 canonical 参数继续拒绝。
|
||||
- 验证:正向覆盖 durable Supervisor 委派解析、UI kind/catalog、18 类 UI 组件描述、真实透明图集路由和独立切片 manifest;负向覆盖无委派固定合同、canonical 四切片隔离与父 run 终态撤权,并保留既有 art-spritesheet 确定性路由回归。
|
||||
- 关联文档:`docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`。
|
||||
|
||||
## 2026-08-03 资源管理阶段七以完整 CI 与可重复界面合同收口
|
||||
|
||||
- 背景:飞书资源管理需求的阶段零至阶段六已经分别完成资源卡禁拖、固定资源投影、中央聚焦、安全文档 / 媒体预览、依赖深度与正式版本只读模型;最后需要统一复核需求边界并用当前主分支完整门禁排除集成回归。
|
||||
|
||||
@@ -93,7 +93,11 @@ cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml struc
|
||||
npm run test -- apps/ai-game-creator-shell/tests/agentRuntimeModel.test.ts apps/ai-game-creator-shell/tests/appSurface.test.ts
|
||||
```
|
||||
|
||||
game-chat 条件快车道仍采用七任务口径,但执行顺序由持久合同控制。父 Run 与全部 child Run 共用 4200 秒软预算和 4500 秒累计硬上限;Supervisor 首轮先调用 `agent.route_manifest`,决策前零 child。`audit-existing-first` 的首波仅为 `design-director + code-director`,已登记但无效的旧派生视觉不得阻断这两项审计启动;code-director 必须先 `asset.list`,读取 Supervisor 已持久化的 authoritative 决策,再提交正式资产覆盖合同。覆盖完整时跳过图片生成,存在缺口时只开放缺口对应 owner,`regenerate-art` 才强制重新开放两个美术 owner;已登记但校验失败的固定资产只允许当前路由绑定的 canonical owner 原位替换。新生成仍按 `art-spec.png -> art-spritesheet.png + 独立切片` 推进,最后才允许 code-prototype 写入或局部修复入口。软预算后只允许使用已登记图集、当前 resourceId 对应切片清单的确定性本地 fallback、`game.static_smoke` 和 `preview.validate`;不得退回普通生图、猜测 atlas 网格或纯代码核心画面。完成门要求活动 Canvas 分别绘制 player、blocks-and-targets、obstacles-and-scene、feedback-effects 四类不同切片;整图 `<img>`、CSS background、完整图集直绘、单个猜测裁切和路径诱饵均失败。对应定向测试至少包括:决策前零 child、旧无效视觉不阻断首波、首波无美术 child、code-director 收到真实持久策略、完整覆盖零生成、仅缺图集只运行 `art-asset-plan`、无效已登记资产由 owner 原位替换、art spec 缺失导致引用合同失效时同时补齐两个槽位、显式重做原位替换两个正式资产、旧 root/fingerprint/缺口或重复路由失败关闭,以及补齐后恢复 code-prototype。
|
||||
game-chat 条件快车道仍采用七任务口径,但执行顺序由持久合同控制。父 Run 与全部 child Run 共用 4200 秒软预算和 4500 秒累计硬上限;Supervisor 首轮先调用 `agent.route_manifest`,决策前零 child。`audit-existing-first` 的首波仅为 `design-director + code-director`,已登记但无效的旧派生视觉不得阻断这两项审计启动;code-director 必须先 `asset.list`,读取 Supervisor 已持久化的 authoritative 决策,再提交正式资产覆盖合同。`code-director` 的 manifest 任务仍是只读协调合同,但 `agent.route_manifest` 是该角色唯一额外允许的持久路由动作;只读动作门禁不得拒绝它并与完成门形成重复规划死循环,其他只读专业 Agent 仍不得调用。覆盖完整时跳过图片生成,存在缺口时只开放缺口对应 owner,`regenerate-art` 才强制重新开放两个美术 owner;已登记但校验失败的固定资产只允许当前路由绑定的 canonical owner 原位替换。新生成仍按 `art-spec.png -> art-spritesheet.png + 独立切片` 推进,最后才允许 code-prototype 写入或局部修复入口。软预算后只允许使用已登记图集、当前 resourceId 对应切片清单的确定性本地 fallback、`game.static_smoke` 和 `preview.validate`;不得退回普通生图、猜测 atlas 网格或纯代码核心画面。完成门要求活动 Canvas 分别绘制 player、blocks-and-targets、obstacles-and-scene、feedback-effects 四类不同切片;整图 `<img>`、CSS background、完整图集直绘、单个猜测裁切和路径诱饵均失败。对应定向测试至少包括:决策前零 child、旧无效视觉不阻断首波、首波无美术 child、code-director 收到真实持久策略、完整覆盖零生成、仅缺图集只运行 `art-asset-plan`、无效已登记资产由 owner 原位替换、art spec 缺失导致引用合同失效时同时补齐两个槽位、显式重做原位替换两个正式资产、旧 root/fingerprint/缺口或重复路由失败关闭,以及补齐后恢复 code-prototype。
|
||||
|
||||
项目状态刷新必须是纯读:`get_local_game_manifest` 不得通过 `read_manifest_for_project` 无条件回写整份 `.agent/manifest.json`。否则 GUI 在专业任务终态投影前读到的 `running` 快照,可能在 Runtime 已写入 `completed` 后再次覆盖任务状态,导致 scheduler 重复恢复同一终态 child。seed-task 规范化读取也只在内容确实变化时落盘;正式 manifest mutation 继续由持有项目写锁的 Runtime 路径负责。
|
||||
|
||||
运行中追加 steer 恰好打断上下文窗口边界时,`continuation_for_game_creator_agent_runtime_steer` 必须把该边界视为新窗口起点,清零窗口轮次与观察指纹后再继续。否则跳过的 checkpoint 会让 `windowCompletedLoops` 跨窗口累加;后续 Provider retry 恢复会把 Runtime 自己写出的 context bundle 判为无效并错误终止同一 Run。
|
||||
|
||||
失败续跑还必须覆盖同 Session 同 source 继承、跨 Session / 跨 source 不继承、首次与连续 successor 的 effective task / contract / scheduler 一致性,以及中英文纯继续短语使用同一识别函数。非占位入口的新 `code-prototype` 必须先产生本人 mutation 再 smoke;连续只读 smoke 不得收束。占位 fallback 只允许显式支持的真实玩法模板,俄罗斯方块必须验证棋盘、下落、旋转、锁定和消行语义,未知玩法必须失败关闭。
|
||||
|
||||
|
||||
@@ -857,6 +857,9 @@ game-project/
|
||||
- 自动验收现在严格要求 manifest 恰好包含固定 16 个不重复 task ID 且全部为 `completed`,并逐任务核对当前父 Run 下唯一 logical run、一次 started、一次 completed、零 failed / cancelled 和一次 manifest projection;七份基础正式产物存在并满足文件 / JSON / 非占位入口检查,配置画布 API Key 时再增加 `art-spec / ui-prototype / art-spritesheet` 三张图片。PNG 验收不止检查 magic / IHDR / 比例,还会校验 chunk CRC、zlib 解压、scanline 长度、索引色 PLTE 和未知 critical chunk。Runtime 根 Supervisor 的完成合同已升级为 `game-creator-autonomous-completion-contract.v2`,`baselineArtifacts` 必填并纳入指纹,旧 v1 或缺基线合同失败关闭;最终门禁要求最后一次验证工具是 `game.static_smoke`、状态通过且 `verifiedRevision == currentRevision`。`preview.validate` 回执必须绑定同一 Agent、run、current revision、当前 `game/index.html` 摘要、固定试玩场景、持久浏览器报告以及 desktop / mobile 两张截图的路径、摘要和 PNG 身份,任一证据缺失、变化、过期或来自其它 run / revision 都阻止最终回复。旧两图合同的确定性证据不替代新三图 DAG 验收;新合同实现后必须新起独立单轮。
|
||||
- `design-foundation` 已增加专属职责边界:项目文件只允许写 `memory/project.md` 与 `game/game_design.md`;配置 External Editor API Key 且合同要求界面原型时,只额外允许固定 `assets/ui-prototype.png`。它不得创建、修改、删除或补丁 `game/index.html`,不得改动其它程序实现、发布、音频或美术素材,也不得调用 `preview.start`、`preview.validate`、`game.static_smoke`,或借 `command.exec / command.start / command.run_limited` 启动预览服务、浏览器、Playwright 和桌面 / 移动试玩。程序和质量 Agent 的共享 Runtime 工具合同不因此缩减;有 / 无画布配置和其它 Agent 不受影响的聚焦回归为 `3/3` 通过。
|
||||
- `canvas.asset_generate.replaceExisting` 默认并必须保持 `false`;只有静态专业 Agent 的 `delegated-*` 唯一 repair run 才能申请 `true`。Runtime 要求当前 delivery 带 `repairOfDelegationId`,原 delivery 已被同一父 Agent / 父 run 认领,原始与返工合同的目标 Agent 和精确 `expectedArtifacts` 路径一致;普通 run、未声明路径、错误 Agent、未认领原交付或缺失原图都失败关闭。图片生成仍服从 `art-director` / `design-foundation` / `art-asset-plan` 的固定输出路径、比例、尺寸、kind 和 label,禁止先删除正式图片;请求前记录旧文件 SHA-256,外部生成返回后在项目写锁内复核,旧图在网络请求期间变化即拒绝覆盖。授权替换先写私有临时文件,再以备份 / rename 切换;落盘或 manifest 登记失败时恢复旧图,不把新旧文件并存状态当作成功。
|
||||
- 2026-08-06 补充图集委派扩展合同:上述固定图片参数是专业 Agent 的 canonical 默认值,不替代 Project Supervisor 对新增素材缺口的语义决策。仅当运行中的 Supervisor 通过 durable static delivery 委派 `art-asset-plan`,父子 task 与 delivery 身份完全闭合,且 `expectedArtifacts` 同时包含 canonical `assets/art-spritesheet.png` 和精确的额外 UI PNG 路径时,Agent 才可用 `1:1 / 1K / assetKind=ui-spritesheet` 生成该额外图集;无委派、伪造 runId、未声明路径、终态父 run 或试图改变 canonical 主图语义均失败关闭。授权在 External Editor 请求前和 durable 结果本地提交前各复核一次,后验撤权进入 reconciliation。`ui-spritesheet` 继续调用 icon-spritesheet API、引用当前 `art-spec` 并要求真实透明 PNG,但使用独立 UI 组件 descriptions;canonical `assets/ui-spritesheet.png` 继续使用 `assets/ui-spritesheet-slices/manifest.json`,其它 UI 主图则使用与主图同目录、由完整文件名确定的 `<主图文件名>-slices/manifest.json`,避免不同委派共享或替换同一个切片 cohort。初次生成不得替换任何既有 cohort;只有已验证的同源 repair 才能在旧清单 `source` 精确等于当前主图路径、`sourceResourceId` 精确等于当前 Canvas 主图登记,且非空连续唯一的每个切片路径都在对应 cohort 内并与普通 PNG 文件的尺寸/内容摘要/规范像素摘要一致时,才能整体替换对应 cohort。UI 主图、对应 cohort 与项目 manifest 资产登记同属一个外层事务;UI 切片发布失败不得降级为 `sliceWarning`,任一环节失败都恢复旧三者。额外图集输出不得指向 `assets/art-spec.png`、`assets/ui-prototype.png`、`assets/art-spritesheet.png` 或任何已登记 UI 主图的派生切片目录;Runtime 在 External Editor 请求前和 durable 结果提交前均从 manifest 推导全部专属目录,并按 Windows 所需的 ASCII 大小写不敏感语义执行双向祖先 / 后代冲突检查。所有 UI cohort 均绝不进入或覆盖 `assets/art-spritesheet-slices/*` 的核心四切片合同;主图原位替换仍完整继承唯一 repair 规则。
|
||||
- 2026-08-07 补充 UI 图集 durable 固定输出恢复:首次写入 UI 主图前必须已经取得非空 `resourceId / assetObjectId` 和非空切片;每个切片必须具有非空唯一 `resourceId / assetObjectId`、真实 PNG、与待写字节一致的有效尺寸、内容 SHA-256 和规范像素 SHA-256,使任一次成功提交都具备后续 repair / recovery 所需身份。项目写锁内恢复除核心图集事务外,还按 `assetKind=ui-spritesheet + outputPath` 定位唯一 cohort:canonical 存在时先校验完整同源合同再清理至多一组可信 `.previous / .replacement`;canonical 缺失时只恢复恰好一组可信 previous,多个 suffix、replacement-only、符号链接、非目录、损坏、未登记或跨源身份全部失败关闭。manifest 主图 `resourceId` 是允许处理残留的外部身份锚点;文件校验、删除和 no-replace 恢复还必须绑定同一目录 / 父目录句柄,pathname 在操作期间被替换时失败关闭。主图已由同一 durable 结果安装时,当前 cohort 只有在 source、sourceResourceId、完整清单及全部 PNG 字节与待提交结果一致时才作为幂等续跑接受。live rollback 不复用原事务 suffix,而用新 rollback suffix 恢复内存快照,成功后再清理原 residue,避免 Windows destination-exists;UI 的 `asset.register / asset.update` 与 `canvas.asset_generate` 审计共享 `transactionId`。后续任一步失败时先整组恢复主图、cohort 与项目登记,再向 append-only Agent DB 写入 terminal-reserve `canvas.asset_generate.rollback` 补偿;恢复或补偿失败必须进入 reconciliation。journal 先在同一锚定 `.agent/runtime` parent 下写入 `.preparing`,冻结旧主图 / manifest、目标 manifest 和两条精确审计后,以 no-replace 原子发布为 active;恢复时重新计算登记合同、旧快照摘要、assetId、recordType 和精确 child 集合,未知 child、内部字段矛盾或 active / preparing 并存都进入 reconciliation。committed / rollback-requested / rolled-back 只按各自允许终态续跑,terminal replay 不再次产生 `asset.update`。cohort previous 句柄跨 publish / rollback / cleanup 保留;目录 residue 先退休,文件 residue 先原子隔离并复核后再删除,Windows 的创建、读写、rename、CAS 和删除均使用逐级相对 retained handle。Agent DB 终态精确验证在 append lock 内先修复可确认的 torn tail,再全量扫描并执行物理字节 / 记录数上限;不得用 32 MiB 尾窗代替 durable 终态证明。
|
||||
- 2026-08-06 补充 pending action 路径校验边界:用户原始任务正文可以用绝对路径明确当前项目,durable Provider action batch 不得因 pending record 复制了该 `task` 字段而误判工具越界;敏感字段与 secret token 仍检查完整任务和 pending record。项目绝对路径校验仅豁免复制的原始 `task` 字段,`plan`、`thinking`、`observations`、`action.reason / action.input` 及其它 pending 字段仍全部检查;因此 `file.* / project.* / asset.*` 等工具输入继续强制使用项目相对路径,批次持久化、恢复、确认和 action fingerprint 语义不变。
|
||||
- 2026-07-28 起,在既有 16-task manifest 内固定正式视觉 DAG,不新增平行任务系统:`art-director` 先通过 `/api/external/v1/editor/images/generations` 的 `kind=spec` 生成 `assets/art-spec.png`,并登记为 `assetKind=icon-spec`;`design-foundation` 使用该规范图的 External Editor 稳定资源 ID 作为 `referenceImageSrcs` 中的视觉规范参考,再通过同一 images 接口的 `kind=ui-design` 生成完整 `assets/ui-prototype.png`;`art-asset-plan` 以同一 `assets/art-spec.png` 资源 ID 作为必填 `referenceImageSrc` 调用 `/api/external/v1/editor/icon-spritesheets/generations`,传入具体 `iconDescriptions`、`screenColor=auto`、同名画布 / 素材库与 `canvasCompletion`,生成透明 `assets/art-spritesheet.png`。`generationInputs.artSpec` 只是辅助结构化上下文,不能代替真实 `art-spec.png`;严禁把 `assets/ui-prototype.png` 当作图集规范图。规范图缺失、未登记为当前画布的 `icon-spec` 或缺少稳定资源 ID 时,两个下游任务均等待 `art-director`,不得退回普通生图。UI extraction 只适用于已有且带红框标注的 UI 设计图,不用于生成完整 UI,也不进入本次 canonical DAG。单波最多 `3` 个静态职责的资源上限保持不变,只调整现有任务的依赖边与就绪顺序。图集返回 `warning` 时以 `postprocess-failed-source-preserved` 源图保留语义失败关闭,不把不透明源图登记为正式 spritesheet,也不自动重试;仅有 `sliceWarning` 时完整透明图集仍可登记,但必须原样保留切片失败原因。客户端下载后还要解码 PNG 并确认至少存在一个 alpha 小于 255 的像素,未形成真实透明像素时拒绝落盘和 manifest 登记。
|
||||
- 旧项目已有同路径派生图但缺少上述 provenance 时,一律标记为 legacy,不得只因文件、kind 或通用视觉检查存在就完成。原位替换仍走显式 repair:`design-foundation` 与 `art-asset-plan` 先在同一 Supervisor 批次分别建立 owner 精确原合同并交付 `needs-repair`,父 run 认领后再在同一批次分别发起各自唯一 repair;两个 repair 合称一个显式视觉返工阶段。`art-director` 不得跨 owner 声明或替换 UI / spritesheet,Runtime 在委派落盘前就拒绝这类合同,不再等到生图阶段才失败。
|
||||
- 2026-07-27 新起的“16 任务正式产物 + 两张真实画布图片 + current revision 静态 / 双视口浏览器 / PNG 证据 + 受限 repair 替换”独立外部 Provider 验收,使用 `npm run agc:test:chat -- --timeout-minutes 75`,约 `59m50s` 后以退出码 `0` 完整 **PASS**。同一轮真实生成并登记 `assets/ui-prototype.png`(`2829418` bytes)与 `assets/art-spritesheet.png`(`1361906` bytes),固定 `16` 个 manifest task 均为当前父 Run 下唯一 logical run、一次 started、一次 completed、零 failed / cancelled 和一次 manifest projection;七份基础正式产物、两张 PNG、当前 revision 的 `game.static_smoke`、desktop / mobile `lane-defense-v1` playtest、浏览器报告与截图全部通过。`turn.report=settled` 且唯一 assistant,busy / pending / running / confirmation / user-input / reconciliation 均为 `0`;隔离 Runner、一次性项目和隔离 AppData 已自动清理。此前失败轮继续独立保留,不与本轮拼接;未来合同变化仍须新起完整轮次复验。
|
||||
|
||||
Reference in New Issue
Block a user