v1 から v2 への書き直しのほとんどは、外形についてでした。リモートではなくローカル、Python ではなく TypeScript、CI ジョブではなく CLI。単独で書くに値する部分は内部についてです。v2 は v1 よりずっと少ないコードで出荷され、欠けているものの大半は意図的に削除されました。
単一で最大の削除は、エラー分類器でした。
それが何をしていたか
v1 の分類器は重み付き正規表現エンジンでした。CI ログを読み、およそ150個のパターンに通し、エラーを9つのバケツに並べ替えました: lint、formatting、types、build、CI config、test contracts、complex types、logic、そして万能の unknown。各分類には信頼度スコアが付きました。各バケツは修正戦略にマッピングされていました。
Stitch v1 のランディングページは9つのカテゴリすべてを誇らしげに列挙していました。機能だと思っていたのです。
なぜ作ったか
分類器は実際の問題への答えでした。言語モデルの呼び出しはトークンを消費します。CI ログは巨大です。ログ全体を送れば、コンテキストを無駄にし、モデルが自力で信号を見つけなければならないので結果が悪くなります。ログを前処理し、ノイズを取り除き、関連するエラーを分離し、種類をラベル付けすれば、トークンを節約でき、モデルに先手を与えられます。
そこで前処理器を作りました。モデルの前に動きました。「これはファイル X の Y 行目の型エラーです、これがトレースバック、これが呼び出し箇所周辺の5行」と言うコンパクトなペイロードを作りました。モデルはそれから修正を作りました。これはうまくいきました。
なぜ消す必要があったか
2つのことが変わりました。
モデルが生のログを読むのがうまくなりました。Claude と GPT はトークンあたり安くなり、非構造化出力の解析が鋭くなりました。「外科的に抽出されたエラーをモデルに送る」と「ログをモデルに送って考えさせる」のギャップが縮まりました。抽出ステップはそのコストに見合わなくなりました。
比較すると、私たちの分類器は悪化しました。TypeScript、Python、Go 用のパターンはありました。Elixir、Rust、今週ユーザーが動かしているフレームワーク用のパターンはありませんでした。正規表現がマッチしないログが入ってくると、unknown バケツにルーティングして、モデルに任せました。それがヒントでした。フォールバックが機能するなら、専門化されたパスはオプションでした。専門化されたパスがオプションなら、それは理由なくメンテナンスしているバグの発生源でもありました。
転機となった気づきは v2 のローカルコンテキストでした。開発者のマシンで stitch run claude を動かすことは、Claude Code を呼び出すことを意味します。Claude Code は、ファイルを読み、コマンドを実行し、エラーについて推論するツールをすでに持つプラガブルなエージェントです。事前に分類されたペイロードを送るのは、シニアエンジニアに事前記入されたバグレポートを送り、私たちのテンプレートを使うよう要求するようなものでした。彼らはそれを必要としませんでした。テンプレートは摩擦を足していました。
何で置き換えたか
2つのこと。前よりずっとシンプルなものと、同じレイヤーですらないものです。
Stitch v2 もわずかな前処理はしますが、粗く、正直です。ジョブ名を見て、動かすかどうかを決めます。deploy-prod という名前のジョブはインフラ、ローカルではスキップ。lint という名前のジョブは verify、ローカルで実行。これはジョブごとに1行の判断です。エラーが何になるかを知ったふりはしません。
本物の診断はエージェントに移りました。ジョブが失敗すると、Stitch は意図的に退屈な短いプロンプトでログをエージェントに渡します: これがジョブ、これがログ、これがリポジトリ、直してください。エージェントは対話セッションでするのと同じことをします。ファイルを読み、コマンドを走らせ、試してみる。Stitch はジョブを再実行して結果を検証します。
削除されたコード総量は数千行でした。失われた能力はゼロでした。エージェントが5行の抜粋ではなくリポジトリ全体にアクセスできるようになったので、診断は良くなりました。
教訓
教訓は居心地が悪いですが、AI エージェントの周りに作られたツールで何度も現れます: モデルを助けるために作った抽象は、モデルが十分良くなるとしばしば助けにならなくなる。前処理器とプロンプトの両方を持っていると、前処理器がプロンプトを悪くしている地点に到達します。気づきません。自分で作ったからです。
私たちが気づいた唯一の方法は、自分たちに削除させて何が起きるかを見ることでした。何も起きませんでした。それが肝心でした。
シリーズ次の記事: Stitch 2.0 が出荷されます。実際に何をインストールして何をするのか。