Skip to content

v1.2.0

Choose a tag to compare

@istb16 istb16 released this 22 Oct 09:27
· 50 commits to main since this release
899c569

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 の段があればそれで動かします
  • 実行がもういない作業の単位は、どこで読んでも失敗として記録するようになりました(#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 を参照してください。