Repository navigation
v1.2.0
1.2.0
plan を「作業の単位」に分けて、単位ごとに、あるいは並べて実装できるようになりました(#343)。単位を書かない plan は、これまでどおり 1 回の実行で進みます。互換性を壊す変更はありません。
足したこと:作業の単位
- plan に
## Unitsの節(yamlの一覧)を書くと、作業を単位に分けられます。単位ごとにname、kind(feature、fix、refactor、docs、test、ci、integration)、files、depends_onを書き、単位ごとに### Unit: <name>の節を置きます units checkは、動かせない単位の分け方を断ります(終了コード 2)。たとえば、並べて動く 2 つの単位がファイルを共有している場合や、共有ファイル(implementation.hub_paths)を integration 以外の単位が触る場合です。問題がなければ、実行の順番を段(wave)ごとに出しますrun implementer --unit <name>で 1 つの単位を実行します。ほかの単位と並べて動くときは、今の作業ツリーから作ったその単位だけの git worktree の中で動き、並べる相手がいなければその場で動きます- worktree で動いた単位は
units merge <name>で取り込みます。ファイルごとにgit merge-fileを使い、作業ツリーだけを変えます。衝突したときは.ai/execution/units/<name>-conflicts.mdに説明を残して終了コード 7 で止まり、オーケストレーターがreview_fixerに解消させます。解消した後はunits merge <name> --resolvedで記録します - レビュアーには毎回、衝突を解消したファイルと、単位が自分の担当の外で変えたファイルを伝えます
units statusは単位ごとの状態と始められる単位を、units cleanは残った worktree の片付けを行います。jobs cancelは単位のジョブの worktree も消しますjobs waitに複数のジョブ ID を渡せるようになりました。すべての終わりを待ち、--anyを付けると最初の 1 つの終わりを待ちます。ID が 1 つのときの動きは変わりませんrun architect --unitとunits joinで、単位ごとに architect に設計させ、1 つの plan にまとめられます。レビューと承認はまとめて 1 回です- 新しい
implementationの節で、max_parallel(1〜8、既定 2)とhub_paths(既定はCHANGELOGのファイル)を決められます
変えたこと
- 1 つの plan の作業の単位は、まとめて implementer の試行 1 回分として数えます(#343)。plan のハッシュで最初の単位を実行したときに
budgets.implementerを 1 回使い、ほかの単位は追加なしで加わります。同じ回の中で単位をやり直したときだけ、もう 1 回使います。新しい plan のハッシュ(新しい承認)かbudget resetで次の回になります。run architect --unitも同じ考え方でbudgets.architectを使います。total_delegated_runsとmax_runtime_secondsはこれまでどおりすべての実行を数え、--unitなしのrunは 1 回使います。budget showは今の回を出し、--jsonにpassesを足しました - 作業の進め方の指示(
references/workflow.md)を、安く済むように見直しました。CLI の動きは変わりません- 設計の依頼では、短い plan を求めます。背景は
path:lineを挙げた箇条書き、テストは 1 行に 1 つ、手順ごとに触るファイルと関数を書きます。修正の依頼では、指摘のない節はそのまま残します - 実装の依頼では、手順に要るものだけを読み、lint と型の確認は手順ごとに 1 回にするよう求めます
- 実装の手順が 4 つを超える plan は、手順のまとまりごとに順番に動く作業の単位に分けます。数の上限はありません。その場で 1 つずつ動き、試行は合わせて 1 回分です
- 小さな実装や修正は、その役割に
lightの段があればそれで動かします
- 設計の依頼では、短い plan を求めます。背景は
- 実行がもういない作業の単位は、どこで読んでも失敗として記録するようになりました(#345)。これまでは
units cleanだけでしたが、units statusとrun implementer --unitでも、runningのまま担当のプロセスがいない単位をfailedにします。そのため、その単位を待っていた単位はunits cleanなしで始められます。run implementer --unitとunits joinは、plan の Files to Modify にない単位のファイルについて、units checkと同じwarning:を出します。単位の worktree に.claude/settings.local.jsonを写すのは、Claude がその単位を動かすときだけです - 自分で書く adapter:
Provider.worktree_files(既定())で、作業の単位の worktree に写す、git が無視しているファイルを指定できます(#345)
直したこと
- Windows で、日本語などの ASCII 以外の文字がパイプやファイルへの出力で化けていました。Python はパイプやファイルに ANSI コードページ(日本語の Windows では cp932)で書く一方、オーケストレーターは
jobs waitやjobs show --outputなどの出力を UTF-8 として読むため、任せたエージェントの日本語の返事が文字化けしていました。パイプとファイルへは UTF-8 で書くようにしました。コンソールへの出力は変わりません - このため PowerShell(5.1 も 7 も)で出力を取り込む場合(
$x = dev-orchestra ...や別のコマンドへのパイプ)は、[Console]::OutputEncodingを UTF-8 にしていないと、こんどはそちらで化けます。[Console]::OutputEncodingを UTF-8 にするか、前の出力にしたいときはPYTHONIOENCODING=cp932を設定してください。PYTHONIOENCODING、PYTHONUTF8、-X utf8を設定した場合は、常にそれに従います
実機で確かめた CLI
- claude 2.1.307(architect のセッションの再開)
詳しくは CHANGELOG を参照してください。