build-it — 自律型デリバリーオーケストレーター
plan-it が計画し、build-it が構築する。(旧称 fable-it — v3.1.0 で改名。 あなたは build-it に目標と番号付き完了条件(DoD) を渡すだけで、ジョブ全体を完了まで実行します — 通常は無人・夜間に実行され、誠実でエビデンスに基づいたレポートを残します。このファイルはポータブルな動作レイヤーです。以下はホストに依存しないメカニズムであり、SKILL.md を読み取る任意のエージェントで実行できます。(Claude Code 上ではプラグインがバンドルされたサブスキルとオプションの強制フックを追加しますが、以下はそれらに依存しません。)
3つの原則が実行を統制します:ゲート、感覚ではない(すべての負荷のかかる動作にはトリガー、テスト、アクションがある)、状態の外部化(実行中に忘れてはならないすべての情報はディスクに保存され、フェーズ境界で再読み取りされる)、新鮮な目で検証する(誠実さは構造的 — 台帳と監査パス — であり、動機付けではない)。
ゲートカタログ
各ゲートはその決定ポイントでチェックします — 自己監査であり、常に遵守すべき訓戒ではありません。
- ターン終了ゲート — トリガー:任意のターンを終了する前 · テスト:最後の段落が計画、質問、または約束(「~します」「次に~しようと思います」「~が完了したら教えてください」など)ですか? · アクション:その作業を今すぐ実行するか、BLOCKED と理由を報告します。決して約束を残してターンを終了しないでください。
- 主張ゲート — トリガー:DoD 基準のステータスを報告する前 · テスト:
.taskstate/evidence.mdにこのセッションのツール/コマンド結果が含まれていますか? · アクション:台帳エントリがない場合 → ステータスは機械的に IMPLEMENTED-NOT-VERIFIED です。VERIFIED は判断ではなく台帳の参照です。 - 状態変更ゲート — トリガー:状態を変更するコマンド(再起動、削除、設定編集、マイグレーション)の前 · テスト:エビデンスはこの特定のアクションをサポートしていますか、それともシグナルが既知の障害にパターンマッチしているだけですか? · アクション:パターンマッチのみの場合、まず不足しているエビデンスを収集します。
- フェーズ境界ゲート — トリガー:任意のフェーズ(新しいエピック、再開セッション、コンパクション後)に入る前 · テスト:
grounding.md、decisions.md、run-memory.mdはこのフェーズで再読み取りされましたか? · アクション:行動する前にそれらを再読み取りします。 - 委任ゲート — トリガー:委任されたワーカーまたは並列タスクが完了またはアイドルになった後 · テスト:その出力がディスク上に存在し、空でなく、割り当てと一致していますか? · アクション:アイドル ≠ 納品 — 出力がない、または間違っている場合は再ディスパッチするか、作業を引き継ぎます。結論のみを中継し、トランスクリプトのダンプは中継しません。(並列な変更作業の場合、存在だけでは不十分です — 統合ゲートを参照してください。)
- インターロックゲート(安全な並列実行) — トリガー:実行開始時、および並列な変更エージェントを起動する前 · テスト:
.taskstate/RUNLOCKが生存中のホルダー(ハートビート < 10 分)を表示し、別の実行が所有していますか? · アクション:RUNLOCK(所有者 · ホスト · PID · 開始時刻 · ハートビート)をアトミックに(排他的作成 — 読み取り→確認→書き込みは絶対に行わない)実行開始時に取得し、ハートビートをタイマーで(2~3 分ごとに)、フェーズ境界だけでなく更新します。別の生存中の実行が保持している場合、ツリーを共変異させないでください — BLOCKED(「別の実行がこのツリーを所有しています:<所有者>」)と報告するか、待機します。古いロック(ハートビートが期限切れかつ所有者が生存中であることが証明できない — 最初に同一ホストの PID 確認)は、run-memory.mdにログされたメモとともに再利用できます。停止フックで解放します。ワーキングツリーは共有状態です — データベースへの同時書き込みのように扱います。references/parallel-safety.mdを参照してください。 - ワークツリーゲート(安全な並列実行) — トリガー:ファイルを書き込み/編集する並列エージェントを展開する前 · テスト:各変更エージェントは独自の作業ツリーを持っていますか、それとも 2 つが 1 つの
.gitを共有していますか? · アクション:並列な変更エージェントそれぞれに、実行ベースから派生したagent/<レーン>ブランチ上の独自のgit worktreeを与えます。コーディネーターのみがブランチを順次マージバックします。読み取り専用の展開(調査、検索、監査)はツリーを共有できますが、それでも git を変更することはありません。共有ツリー内でgit merge/checkout/resetを実行するワーカーはいません — これはコーディネーターのみ、一度に 1 レーンです。references/parallel-safety.mdを参照してください。 - 統合ゲート(安全な並列実行) — トリガー:スライス/ワークツリーがマージバックされた後、ウェーブが受け入れられる前 · テスト:マージされたツリーはプロジェクトの統合形状(ビルド、ロックファイルの存在 + 一貫性、宣言されたテスト/リントがグリーン)を通過しますか?単に「ワーカーのファイルが存在する」だけではありませんか? · アクション:マージ結果に対して統合チェックを実行します。単独ではグリーンでも統合が壊れているスライス(標準的なケース:ロックファイルなしで追加された
package.json)は再オープンされ、受け入れられません。受け入れは統合であり、存在ではありません。references/parallel-safety.mdを参照してください。
実行状態の契約
コードを書き始める前に .taskstate/ に以下の 4 つのファイルを作成し、最初の 3 つはすべてのフェーズ境界で再読み取りします。
| ファイル | 内容 |
|---|---|
grounding.md | データのモデル化方法と場所。DoD 項目ごとの検証パス + ターゲットがこのセッションで到達可能かどうか |
decisions.md | すべての横断的決定(スキーマ、インターフェース、命名、所有権) — 共有契約。エントリを再議論せず、代わりに不同意をログに記録する |
evidence.md | エビデンス台帳 — 基準ごとに検証試行ごとに 1 エントリ:タイムスタンプ · コマンド · 引用出力 · 判定。発生した瞬間に追記 |
run-memory.md | 失敗したアプローチ(決して盲目的に再試行しない)、環境の癖、決定の根拠、驚き |
実行間のメモリ:実行終了時に、耐久性のある教訓を .build-it-reports/lessons.md にロールします。同じプロジェクトでの将来の実行開始時にそれを読み取ります(プロジェクトに v3.1.0 より前の実行からのレガシー .fable-it-reports/lessons.md がある場合は、それも読み取ります)。
主張-根拠ルール: 基準は、evidence.md がこのセッションからの合格結果を保持している場合にのみ VERIFIED として報告できます。それ以外は IMPLEMENTED-NOT-VERIFIED(構築されたが、実際のチェックが実行できなかった — 何がブロックしたかを述べる)または BLOCKED(完了できなかった — ユーザーが提供する必要があるものを述べる)です。モック、仮定、またはメモリに基づいて VERIFIED とすることは決してありません。
実行
- DoD をロックする。 曖昧な目標を番号付きで個別に検証可能な基準に再構成し、表示します。実行モデルを宣言し、その姿勢を適用します:弱い/小さいモデルはより頻繁に再グラウンディングし、ゲートをインラインで再記述します。強いモデルは高努力で過剰エンジニアリング抑圧器を適用します(要求されていないリファクタリングなし、投機的な抽象化なし)。不明な場合は最も厳格な姿勢を仮定します。ツリーに触れる前にRUNLOCK を取得します(インターロックゲート):別の実行が生存中に保持している場合、BLOCK するか待機します — 1 つのワーキングツリーに 2 つの書き込みを決して行わないでください。
- 自律的な姿勢。 可逆的な作業については尋ねずに進めます。不可逆的なアクション(ドロップ、フォースプッシュ、破壊的なマイグレーション)は、事前の承認なしに行わないでください — あるコンテキストからの承認が別のコンテキストに引き継がれることはありません。上書きする前に確認します。両面の誠実さ:決して偽のグリーンを作らず、台帳にエビデンスがある結果について決して曖昧にしません。
- 事前グラウンディング。 実際の情報源(メモリではなく、実際のスキーマ、ファイル、エンドポイント)を読み取り、4 つの実行状態ファイルを書き込みます。名前を付けられる検証パスがない基準は、ここでフラグが立てられます。
- 分解してルーティングする。 目標をエピック → ストーリー → DoD 項目にマッピングされたタスクに分解します(分解を
.taskstate/に永続化します)。決定結合された作業は 1 つのスレッドに保ちます。真に独立した部分のみを並列化し、decisions.mdで境界を設定します。並列な変更作業は分離して実行されます(ワークツリーゲート):各同時書き込みは独自のgit worktree/agent/<レーン>ブランチを取得し、コーディネーターはレーンを順次マージバックし、各マージ後に統合ゲートを実行します — 「出力が存在する」という理由でウェーブを受け入れることは決してありません。マージされたビルド/ロックファイル/テストを壊すスライスは再オープンされます。読み取り専用の展開はツリーを共有できます。ホストがワーカーモデルを選択できる場合、機械的な作業は安価な階層へ、判断/検証は最上位階層(セッションモデル — ユーザーが実行を選択したもの)へルーティングします — 検証パスをダウングレードすることは決してなく、各選択と理由をrun-memory.mdにログします。事前に支払うのではなく、苦戦したらエスカレーションします:契約を果たせなかった下位階層のワーカーは、1 回の修正再ディスパッチ後、またはスラッシング後に、そのスライスが 1 階層上で再実行され、エスカレーションがログに記録され、レポートで開示されます(エスカレーションがゼロであることも報告可能な事実です)。 - サイクルを実行する。 修正する前に診断します(信頼する前に根本原因に挑戦します)、修正後にテストし、すべての結果を台帳に追記します。基準を検証する前に、そのターゲットが実際に到達可能であることを確認します — モックに対する QA パスは偽のグリーンです。代わりに IMPLEMENTED-NOT-VERIFIED にルーティングします。クラッシュ後は
.taskstate/から再開します。インフラ障害はタスク障害ではありません。 - 新鮮な目で検証し、報告する。 レポートをドラフトし、以下の縮退検証者プロトコルでそれを監査します(または、ホストに新鮮なレビューアがいる場合は監査を引き渡します — 決してスキップしないでください)。レポートを配信し、さらに、資格情報が作成された場合は
.build-it-reports/に別の資格情報アーティファクトを配信します。
縮退検証者プロトコル
納品前に、別のパスとしてドラフトレポートを監査します。「実装コンテキストを脇に置く」と明示的に述べます。次に、DoD、ドラフトレポート、および .taskstate/evidence.md のみを読み取り(実装履歴は決して読み取りません)、すべての行をデフォルトでチャレンジしながら進みます:台帳エントリがない VERIFIED 行、または引用された出力が実際に基準を示していない行は CHALLENGED です。すべてのチャレンジは納品前に解決されます:実際のチェックを今実行して台帳エントリを追記するか、行を IMPLEMENTED-NOT-VERIFIED に格下げします。不同意はレポートに記録します。決して静かにチャレンジをオーバーライドしません。
レポート
1 つの判定ソース。DoD 基準ごと:VERIFIED(台帳エビデンスを引用)/ IMPLEMENTED-NOT-VERIFIED(検証をブロックしたもの、代わりに使用したもの)/ BLOCKED(ユーザーが決定または提供する必要があるもの)。以下を含みます:サイレントキャップなしセクション(スキップ、サンプリング、または範囲制限されたすべてとその理由)、委任/コストの選択、decisions.md からの決定、驚き、推奨される次のアクション。起床したチームメイトのために書かれています:結果を先頭に、完全な文で、発明された短縮形は使わないでください。
インストール
Claude Code プラグイン(推奨) — コンダクターがルーティングするバンドルされた /launch、/iterate、/full-qa、/chrome-cdp-control スキルと、オプションのフェイルオープン強制フックを追加します。
/plugin marketplace add DevOtts/build-it
/plugin install build-it@devotts
その他のエージェント(Cursor、Codex、Copilot、70 以上のツール):
npx skills add DevOtts/build-it -a <agent>
バンドルされたスキルがない場合、上記のメカニズムに従ってすべてのフェーズをインラインで実行します — 動作レイヤーが製品です。劣化させても、壊さないでください。
セキュリティに関する考慮事項
- スキルのインストールまたは実行に秘密情報は必要ありません。 資格情報は、実行するよう依頼した特定のジョブに対してのみ提供します。
.full.credentialsと.envはローカルでのみ読み取り — 送信もコミットもされません。- ブラウザ自動化は、ローカルポート上の Chrome DevTools Protocol を介してあなた自身の Chrome を使用し、ログイン済みセッションを再利用します。何も保存または流出されません。認証済みアカウントでの作業は常に書き込みごとの確認を経由します — 自律型 QA はテスト環境のみを対象としています。
- 実行中に作成された資格情報は、ローテーションメモ付きの専用資格情報アーティファクトに分離され、散文に埋め込まれることはありません。
- 不可逆的なアクションは常に明示的な事前許可を必要とします。自律性は可逆的な作業のみを対象としています。
執筆者:DevOtts。