ワークフローの実行
ワークフローを実行しても、実行がワークフローを指すわけではありません。公開された設計が新しいワークフロー実行へ写され、以後その実行はそのレコードの中で進みます。
| 実行に写されるもの | 写し元 |
|---|---|
| 名前と実効的なプロンプト | 最後の公開版。まだ draft のワークフローの場合、および Developer が modified のワークフローの未公開の編集内容を選んだ場合は現在の内容 |
タスク(すべて pending)と、その依存とツールバインディング | 同じ設計のタスクテンプレート |
| 実行が従うエージェントスキルのリビジョン | その時点でスキルが公開しているリビジョン |
| 選ばれたツールモック(値のまま) | その時点でのモックの内容 |
この一覧のどれも、あとから写し元を読み直すことはありません。ワークフローを編集しても、スキルを Pull しても、どちらかを削除しても、すでに始まっている実行には届きません。そして終わった実行は、元のワークフローが消えたあとも読めるままです。
実行の進み方
ワークフローセッションは決まったキックオフメッセージで開き、実行エージェントはすでに動いています。計画の承認は公開の時点で済んでいるので、始める前に確認することはありません。
次にどのタスクへ進むかを、エージェントは選びません。タスクの依存がすべて完了した時点で、A2Flow がそのタスクを担当するセッションに割り当て、エージェントは自分に割り当てられたタスクだけを進めます。それ以外のタスク、つまり別のセッションに割り当てられたタスクや依存がまだ終わっていないタスクを始めようとすると、拒否されます。
すべてのタスクが終端ステータスに達し、その中に失敗がなければ実行は completed で終わります。1 つでも失敗していれば failed です。ステータスは実行の読み取り専用のタスク画面で、表としても依存グラフとしても、その場で追えます。
タスクが失敗すると、それを待っているタスク — 直接でも連鎖の先でも — はすべて skipped になります。もう動けないからです。これが、決して始まらないタスクを永遠に待つのではなく、実行を failed として確定させる仕組みです。失敗したタスクに依存していない別ブランチのタスクは、これまでどおり動き続けます。
並列ブランチ
タスクグラフが分岐していると、ブランチどうしは互いを待ちません。実行は最初、1 つのメインセッションで進みます。タスクの準備が整ったとき、それを担当するはずのセッションがまだ別のタスクで手一杯なら、A2Flow はそのタスクのためにブランチセッションをフォークします。ブランチセッションはその時点までにメインセッションが知っていたことをすべて写した状態で始まり、メインセッションと並行して自分のタスクの連なりを進めます。あるブランチが承認を待っていても、止まるのはそのブランチだけです。
| 状況 | タスクの行き先 |
|---|---|
| ルートタスク、または依存をメインセッションが担当したタスク | メインセッション。メインセッションが別のタスクで手一杯なら、新しいブランチセッションをフォークします |
| 依存を、まだ動いている 1 つのブランチセッションが担当したタスク | そのブランチセッション。手一杯なら同じようにフォークします |
| 依存を、終わったブランチセッションが担当したタスク | メインセッション |
| 合流 — 依存を 2 つ以上のセッションが担当したタスク | メインセッション。流れ込むブランチがすべて終わってから |
- 担当するタスクがなくなったブランチセッションは、やったことの短い要約を残して終わります。メインセッションは合流を進める前にその要約を読みます。
- 承認を待っているセッションからは、相談セッションもフォークされます。そのセッションで誰かが質問すると開き、タスクは担当せず何も変更せず、承認が判断されると閉じます。下で述べる同時セッション数の上限には数えられず、そこで話した内容は実行に戻りません(相談セッション)。
- ブランチからさらにフォークすることもできますが、同時に動くセッションの数には上限があります。上限に達すると、準備の整ったタスクは担当セッションの手が空くのを待ちます。つまり実行は 1 つずつ順に進む形に戻ります。
- タスクが失敗して止まるのは、その連なりだけです。それを待つタスクと、それが流れ込む合流は上で述べたとおり
skippedになり、ほかのブランチは最後まで作業を続けます。そのうえで実行はfailedとして確定します。
in_progress であることの意味
タスクを in_progress にするのは帳簿づけではありません。それがそのタスクのツールの鍵です。ゲートウェイは、呼ぼうとしているツールが「実行がいま進行中にしているタスク」に束ねられているときだけ通します。終わったタスクはもう動けませんし、まだ始まっていないタスクは最初から動けません。
実行のタスク一覧と各タスクのツールバインディングは、実行の開始時に — 公開されたワークフローの設計からコピーされて — 固定され、エージェントはステータスを進めるだけです。タスクの追加も削除も再バインドもできません。だからこそ承認も、肝心のときにタスクのバインディングを読み直しません。承認者が決めた瞬間に見えていた集合のほうに署名するので、あとからワークフローを変更しても、いちど与えた許可は広がりません。