无秩序守卫:/generate 可把已失败的 code-prototype 覆写为 completed
#162
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
B3-set-task-status-issue.md
manifest
set_task_status无秩序守卫:/generate可把已失败的 code-prototype 覆写为 completed分支归属:master 既有行为,与 M0(立项策划 Agent)分支无关。在
feat/five_min_design排查 game-chat manifest 绑定问题时顺带发现,逐字节确认 master 上一致,故单独提出。事实
改写 manifest
task.status的写入路径有两条,秩序保护不对称:set_task_status_if_currentapps/ai-game-creator-shell/src-tauri/src/agent/generation/trace.rs:613-637should_replace_task_status,按status_rank判定是否允许覆盖set_task_statusapps/ai-game-creator-shell/src-tauri/src/project/manifest.rs:580-588task.status = status直接覆写无守卫的那条有实际调用方:
record_draft_task_progress(manifest.rs:387-413)把code-prototype连同其余九个种子任务一起批量置为Completed(清单见manifest.rs:396-407),而该函数由用户可随时触发的game.generate_draft命令调用。因此存在这条时序:某轮
code-prototype被后端合法判定为failed→ 用户触发一次生成草案 → manifest 里该任务被无条件改写为Completed,失败判定被抹除。影响范围(已核实,比初判要窄)
projectGameChatPrimaryProgress,其中main.status === 'failed'会在读 manifest 之前短路返回 failed(apps/ai-game-creator-shell/src/features/agent-runtime/gameChatRuntimeProjection.ts:267-274)。所以这条不会让 game-chat 显示"已完成"。需要确认的产品意图
record_draft_task_progress的命名与语义表明"生成草案确实完成了这些设计类种子任务",把它们置为 Completed 可能是有意设计。真正存疑的只有一点:如果答案是否,最小修复是让
set_task_status复用should_replace_task_status(或在record_draft_task_progress侧改调set_task_status_if_current的等价物),并补一条回归:failed的code-prototype经game.generate_draft后不得变为completed。如果答案是是(草案生成即意味着重置该任务的失败状态),建议在
manifest.rs就近加注释说明该覆写是有意的,避免后续排查者反复怀疑,并把这条不对称记进 pitfalls。相关
排查上下文见
docs/project-memory/shared-memory/pitfalls.md2026-08-12 条(陷阱二):任何给 manifest 补身份字段的方案若只改造update_manifest_task_status_at,会因这条旁路保留旧身份印记而制造"校验通过"的假象。