参考手册

状态含义

阶段、状态、子状态与审核结果各表示什么,看到它们时该继续等待还是动手处理。

内测即将开始,CodeDAG 暂未开放安装。可以先加入 Waitlist,邀请会分批通过邮件发出。
在 GitHub 上编辑

cdg status、cdg dag status 和 cdg task status 用阶段、状态、子状态和审核结果描述工作流与任务当前的情况。blocked、working 和 draining 通常只需要等待;on-hold、paused、killed,以及停在 done 等你审核的任务不会自己继续,要你处理,做法见需要处理时。

阶段

阶段表示工作流或任务是否已经提交、是否已经审核,按 planning、submitted、reviewed 的顺序前进。看板按阶段把工作流和任务分组显示。

阶段含义
planning(计划中)还没有提交,不会执行。写好还没提交的工作流处在这个阶段;清除审核记录之后,工作流和任务也回到这里,可以重新提交。
submitted(已提交)已经提交,还没有最终审核结论。工作流在队列中排队、执行或等待审核。只有这个阶段的工作流和任务才有状态与子状态。
reviewed(已审核)已经有了最终审核结论,不再执行。工作流离开队列;任务的结果能否交给下游,由它的审核结果决定。

任务和工作流各有自己的阶段。任务随工作流一起提交,但逐个审核,所以工作流还处在 submitted 时,其中已经审核过的任务就处在 reviewed,cdg dag status 把它们列在 Reviewed Tasks 一组。

reviewed 只说明审核有了结论,不说明结果已经进入主分支:隔离分支模式下,接受的结果留在集成分支 cdg/<工作流名>/integration 上;共享工作区模式下,结果是工作区里还没提交的改动。合入主分支由你来做,见收口、合入主分支与清理。

任务的状态与子状态

任务提交之后、审核之前,它此刻的情况由状态和子状态表示,看板上成对显示,例如 [pending] [blocked],前一个是状态,后一个是子状态。一共有七种组合:

状态子状态含义
pending(等待中)blocked(等待上游)还没开始,条件满足后会自动开始。它在等依赖的上游任务全部完成并通过审核;或者上游都已通过审核,但同时执行的任务已经达到并发上限,例如隔离分支模式下暂时没有空闲的工作区。工作流还在队列中排队时,它的任务也都是这个组合。
pendingon-hold(搁置)被搁置,要你处理后才能继续,原因显示在 cdg task status 的 Reason: 行。它可能发生在开始之前,例如工作区有未提交的改动、合并上游结果的冲突没能自动解决;也可能发生在执行途中,例如 Claude Code 的会话因 API 错误停止,这时任务同样回到 pending。审核上游时选择了搁置下游,下游也会停在这里。
in-progress(执行中)working任务 Agent 正在执行。Agent 在会话里等你批准某个操作时,任务也显示为 working。
in-progressdraining(排空)任务被暂停,但 CodeDAG 不打断正在工作的任务 Agent,等它当前这一轮工作结束后,任务变为 paused。在此之前,Agent 仍可能修改文件。
stopped(已停止)paused被暂停,停在原处,不会自己继续。对还没开始的任务执行 kill,结果也是 paused。
stoppedkilled被中断。任务 Agent 当前的输出被立即打断,会话保留下来,之后可以在原会话中继续。
done(已完成)done执行完成,等待审核。默认自动接受,任务随即进入 reviewed,这个组合一闪而过。任务的审核策略为 none 时,它停在这里等你审核;隔离分支模式下的任务如果没有留下任何改动,即使设了自动接受也会停在这里,cdg dag status 在这一行末尾标注 zero output, awaiting manual review。共享工作区模式下这样的任务照常自动接受,只标注 zero output。

工作流的状态与子状态

工作流的状态概括它所有还没审核的任务:只要还有任务在执行,工作流就是 in-progress;没有任务在执行时,才会显示为 pending、stopped 或 done。所以想知道整个工作流是否已经停下,先看它的状态是不是 in-progress。

部分任务被暂停或中断

下面三个子状态只有工作流才有,出现在你只暂停、中断或恢复了其中一部分任务的时候。它们的状态都是 in-progress,表示工作流还没有完全停下:

状态子状态含义
in-progressdraining-with-working部分任务被暂停,正在收尾;其他任务仍在正常执行。
in-progresspaused-with-active部分任务已经暂停,其他任务仍在执行或收尾。
in-progresskilled-with-active部分任务已被中断,其他任务仍在执行或收尾。

被暂停或中断的任务不会自己继续,其余任务照常执行,它们的下游也会照常开始。等到没有任务还在执行,工作流变为 [stopped] [paused] 或 [stopped] [killed],并一直停在那里,排在它后面的工作流也要等你恢复或审核它。想让整个工作流停下,对工作流使用 cdg dag pause 或 cdg dag kill,两者的区别见控制命令语法与适用状态。

与任务同名的子状态

其余子状态与任务的子状态同名,含义也相同,只是说的是工作流中的任务:例如 [stopped] [paused] 表示没有任务在执行,且至少有一个任务被暂停。其中几种组合在工作流上有额外的含义:

  • [pending] [blocked]:没有任务在执行,还有任务在等待开始。刚提交、在队列里排队的工作流就是这个组合。执行途中,如果剩下的任务都在等一个停在 done、等你审核的上游,工作流同样显示为它,这时它不会自己继续。
  • [pending] [on-hold]:没有任务在执行,且至少有一个任务被搁置;也可能是工作流本身被搁置,例如 CodeDAG 额度不足而无法开始,或者全部任务结束后合并到集成分支时出现了没能自动解决的冲突。工作流本身的搁置原因显示在 cdg dag status 的 Reason: 行,cdg status 也会在工作流文件名后面的括号里列出它。
  • [done] [done]:没有任务在等待开始、执行或停着,但审核不一定结束了。其中可能有任务停在 done 等你审核;所有任务都审核过、整个工作流的审核策略又是 none(dagAutoAccepted: none)时,工作流停在这里,等你对整个工作流给出结论。

工作流的子状态只能反映一类任务。执行中的任务优先于搁置的任务,所以工作流显示 [in-progress] [working] 时,仍可能有任务停在 on-hold;同理,[stopped] [paused] 的工作流里也可能有被搁置的任务。每个任务的实际情况,以 cdg dag status 中各任务的那一行为准。

done 与 reviewed 有什么区别

done 是状态,表示任务 Agent 做完了,结果还没有被认可;reviewed 是阶段,表示审核有了结论。两者之间隔着一道审核门禁:默认情况下它自动通过,所以 done 往往一闪而过;任务或工作流停在 done,说明它在等你给出结论。在此之前,依赖这个任务的下游任务不会开始,[done] [done] 的工作流也仍在队列中,排在后面的工作流不会开始。

在 cdg dag status 里,两者出现在不同的分组:处在 done 的任务仍在 Submitted Tasks 一组,显示为 [done] [done];进入 reviewed 的任务移到 Reviewed Tasks 一组,只显示审核结果。

审核结果

进入 reviewed 的任务和工作流都带有一个审核结果,记录最终的结论:接受的结果可以继续使用,取消或推迟的结果不会交给下游。

结果含义
accepted(已接受)用 accept 接受了结果。任务的结果交给下游;隔离分支模式下,工作流的结果留在集成分支上。
auto-accepted(自动接受)按自动接受的设置,由 CodeDAG 自动接受,效果与 accepted 相同。
cancelled(已取消)用 cancel 取消,不要这个结果。隔离分支模式下,被取消的任务结果不会交给下游,也不会合并到集成分支;被取消的是工作流时,集成分支回到本次工作流的起点。
deferred(已推迟)用 defer 推迟,这一步这次先不完成,留到以后处理。对结果的处理与 cancelled 相同。

审核时如果选择级联处理下游(--downstream cascade),直接或间接依赖它、还没开始的下游任务,或者队列中排在后面的工作流,会得到同样的 cancelled 或 deferred,即使它们从来没有执行过。

对整个工作流给出结论时,已经开始执行、还没审核的任务随工作流得到同样的结果;还没开始的任务没有审核结果:它们随工作流一起进入 reviewed,自身从未被单独审核,cdg dag status 把它们列在 Unreviewed Tasks 一组,cdg task status 的 Disposition: 行显示 unreviewed,两处都保留它们停下时的状态与子状态。

取消或推迟时,任务已经做出的改动怎样处理,在隔离分支模式下由审核时的 --code 选项决定,可以存进快照分支、提交或丢弃;共享工作区模式下没有任务分支,改动留在工作区里,下游照样看得到,由你自己处理。选项的取值与默认值见 --code。

审核结果不能直接改成另一个结果。想改变决定或重新执行,要先清除工作流的审核记录,让它回到 planning,再重新提交,见清除审核记录与重新提交。

需要处理时

blocked、working 和 draining 通常只需要等待,它们会自己进入下一个状态。下面几种情况要你处理,否则任务、工作流乃至排在后面的工作流会一直停着:

你看到的情况怎么处理
任务或工作流处在 on-hold先用 cdg task status <任务 ID> -w <工作流> 查看 Reason: 行,工作流本身被搁置时看 cdg dag status 的 Reason: 行。按原因处理后,执行 cdg task recover 或 cdg dag recover。各种原因的处理步骤见任务或工作流停在 on-hold。
任务处在 paused 或 killed,或工作流处在 stopped 或某个 -with-active 组合用 unpause 或 recover 让停下的任务继续;不再需要它们时,也可以用 cancel 或 defer 直接结束。命令写法见控制与干预,几种操作怎样选择见干预与控制。
任务停在 done,或工作流停在 [done] [done] 等待结论检查结果后,用 cdg task review 或 cdg dag review 给出结论,见审核任务与工作流。任务为什么停在这里,见任务停在 done 不继续。
任务或工作流长时间停在 blocked看它在等谁:任务看它依赖的上游,排队的工作流看队首的工作流。它们停在 done、on-hold 或 stopped 时,处理好它们,等待的一方会自动继续;排队的工作流怎样排查,见队列里后面的工作流不开始。隔离分支模式下,停在 done 等审核的任务还占着自己的工作区,也会让别的任务等不到空闲的工作区。
任务一直是 working,日志却很久没有新输出不一定是卡住了:Agent 可能派出了子 Agent 在后台工作,也可能在会话里等你批准某个操作。判断方法见怎样判断它是不是卡住了。
子状态显示为 working (stale owner)任务仍记录为执行中,但执行它的进程已经不在了,例如机器重启之后。cdg status 的队列视图不显示每个任务,这时只在工作流那一行下面给出 Diagnostic: 行。状态类命令只查看,不会重新拉起调度,要按 Diagnostic: 行的提示恢复,任务才会在原来的会话中继续,见机器重启或进程崩溃之后。

最后更新