Stitch の最初のバージョンは、箱に書かれた通りのことをしました。CI 設定に stitch-monitor と stitch-heal の2つのジョブを追加し、公開 Docker イメージを指すようにすれば、次に lint ルールやテストが壊れたときにパッチ付きの merge request が現れました。うまく処理できた失敗のサブセットについては、体験はほぼ魔法のようでした。
私たちはそれを出荷しました。自分たちのリポジトリでも使いました。そして数ヶ月かけて、それが間違えたことの正直なリストをまとめました。この記事がそのリストです。
間違った場所にいた
Stitch v1 はあなたの CI システムの住人でした。下流のジョブとして動き、上流の失敗で起動し、すべての仕事をパイプライン環境の中で行いました。きれいに聞こえます。私たちが過小評価した帰結がありました。
すべての修正はパイプラインの完全な往復を必要としました。CI が動き、失敗し、Stitch が動き、commit し、push し、CI がまた動く。速いランナーでもフィードバックループは数分、時には十数分でした。Stitch が扱うはずだった種類のエラー、import 漏れ、フォーマッタの食い違い、テストランナーが気に入らない型注釈、そういうものは修正自体は1秒で、検証に永遠にかかりました。人間はやはりマシンを待っていました。ただ部屋が違うだけでした。
エージェントは別の場所にいると仮定した
v1 は API 経由で言語モデルと話していました。OpenRouter インテグレーション、GitHubAdapter、StitchAgent クラスを出荷しました。オンボーディングの筋書きは「自分の API キーを持ち込む」でした。小さなお願いに見えます。実際には、Stitch を試したいチームごとに、プロバイダーのアカウントを作成し、キーを生成し、CI シークレットに保存し、トークンを予算化する必要がありました。
一方で、ますます多くの開発者が、すでに Claude Code や Codex を自分のラップトップに持ち、すでに認証済みで、個人またはチームのサブスクリプションで支払済みでした。Stitch v1 はそのどれとも話す方法を知りませんでした。ユーザーに二重払いを求めていたのです。
見える部分を過剰設計した
v1 は正規表現分類器を出荷しました。重み付きエンジンが CI ログを読み、150 のパターンに通し、エラーを9つのカテゴリに分類しました: lint、formatting、types、build、CI config、test、complex types、logic、unknown。各カテゴリには信頼度スコアがありました。各カテゴリには修正戦略がありました。
作るのは満足感がありました。そしてほとんど劇場でもありました。API の向こうのエージェントは、生のログを読んで何が悪かったかを理解する能力がありました。私たちの分類器は、よく見てもプロンプトを短く保つ方法でした。悪く言えば、独自のバグを持ち込む変換レイヤーでした。エージェントが良くなっても、私たちは分類器を残しました。すでに作ってしまっていたからです。
知る前に push した
auto-merge はフラグでした。デフォルト無効でしたが、宣伝されていました。修正が着地し、再実行が通れば、merge request は自分で閉じられました。実際には、このフラグは自爆装置です。CI が通るのはテストスイートが満足している証拠であり、パッチが正しかった証拠ではありません。エージェントがアサーションを変えて失敗テストを黙らせ、グリーンになり、チームが信号を完全に失ったケースがありました。v1 の答えは「すべての MR をレビューする」でした。v2 の答えは違うものでなければなりませんでした。
小さなケースでのスケールが悪かった
v1 はチームが Docker イメージをホストできる CI プラットフォームを持ち、失敗のたびに追加の計算予算があり、パイプライン設定にジョブを追加する権限を持つ人がいることを仮定していました。エンジニア3人のスタートアップには、最初の修正までに3つのハードルがありました。サイドプロジェクトの一人開発者には、壁でした。
Stitch が最も得意だった失敗ケース、5分で片付く修正は、小規模チームが最も助けを必要としたケースでした。そしてそれは、まさに v1 が届かないチームでした。
残したもの
すべてではありません。しかし、多く。
中核のアイデア、つまり AI エージェントが失敗ログを読み、問題を理解し、的を絞ったパッチを作れるというものは、正しかったです。検証への執着、つまり再実行できないパッチは修正ではないという考え方は、正しかったです。制限された試行の後にエスカレートするという概念は、正しかったです。これらは v2 にそのまま引き継がれました。
それらを取り巻く形は、そうではありませんでした。このシリーズの次の記事は、私たちがそれをどこへ持っていったかについてです。