Originally published at devopsdiary.blog. 「静かな年」シリーズの記事 R24。

この記事のドラフトタイトルは4月から公開カレンダーに載ったままになっています:「60日間で24のリポジトリを構築した」。数週間に一度目を通すたびに数字がまた間違っていました。24は30になり、次に41になりました。60日間は5ヶ月間に引き延ばされました。私は書き続けていなかったのですが、それが結局は最善の編集判断となりました。なぜならその間に物語が数ではなくなっていたからです。

記録のために数字は本物です。AIEOS(数週間前に紹介したフレームワーク)は現在41のリポジトリです:ソフトウェアデリバリライフサイクルの15層モデル、マルチエージェントハーネス、ブラウザコンソール、SherpaというCLIガイド、13のツールアダプタ、そして無人でイニシアチブを歩けるコントロールプレーンです。すべてのリポジトリはCIの下で実行されます。アダプタは署名付きのSigstore証明を生成します。オーケストレーションコアは100%の行カバレッジで、452のテストがWindowsとLinuxの両方で合格しています。

しかし、私に尋ねる価値のある数字は別のものです:ゼロ。それは7月1日に私が監査したときに、アダプタの適合性が合格していた回数です。2ヶ月間の緑のチェックマークの背後にありました。この2つの数字の間のギャップは、41が教えてくれたことよりも多くのことを私に教えてくれました。

オマハの3月は良い構築天気です

灰色で、34度で、他に何もすることがありません。

1月はアイデアを突く9つのコミットでした。2月は足場作りでした。3月は24のリポジトリにわたる358のコミットで、そのうち22は1日目には存在していませんでした。4月9日までに、8つのパイプライン層すべてが構築されました。その年の580あまりのGitHub貢献のほとんどがその期間内のものです。私は30年間ソフトウェアを出荷してきましたが、それに近いペースで何かを生産したことはありません。手作業では誰もできません。

正直な仕組み:私はほとんどコードを書いていませんでした。ルール、テンプレート、プロンプト、バリデータを書き、モデルにそれらに対して生成させ、次のものがその上に構築される前にすべての成果物を凍結させました。だからAI支援開発で誰もが自慢するペースが本物かどうかと人々が尋ねるとき、私はその向こう側から答えることができます。本物です。私にとってそれは決して問題ではありませんでした。

私が3年間他のチームに尋ねてきた質問でした:どうやってそれが機能することを知るのですか?

2ヶ月間の緑、ゼロの実合格

7月1日、私は完成したはずの単一のアダプタを検証しに行きましたが、パイプラインで何かが目に留まりました。署名ステップがスキップされていました。赤ではありませんでした。スキップされていました。

13のアダプタすべてでその糸を引くと、絵は崩れます。すべての適合ジョブがcontinue-on-error: trueの下で実行されていました。これは実際に何が起こったかにかかわらず、ステップが成功を報告することを強制する設定です。署名ステップは本物の合格にゲートされており、すべてのアダプタの最新の実行でスキップされていました。このようなゲートは、その条件がfalseの場合にのみスキップします。適合性は一度も合格していませんでした。どのアダプタでも一度も。私のドキュメントで説明していたドッグフーディングループは存在せず、何も私に教えてくれることはありませんでした。

根本原因はほとんど侮辱的に普通のものでした。1つのアダプタのCIジョブはpytestをインストールしたことがなく、アダプタは何も実行することがなく、4つの基準すべてに失敗しました。他の11は、テストハーネスが送信したことがない入力キーを読み取っていました。KeyError、何もする前に、4月末以来のすべての実行で。

その監査の12日後、私はSonarの用語「検証債務」を採用した記事を公開しました。エージェントが生成するものと実際に検証したものの間のギャップを指す用語です。定義を書いている間、私は2ヶ月間の検証債務を抱えていたことを記録に残しておきたいと思います。

修正はマスクの削除から始まりました。修復全体で最も価値のある単一の変更は、YAMLの1行を削除することでした:本物の合格が署名し、本物の失敗がビルドを大声で壊すようになりました。次に各テストスイートが独自の入力契約を宣言するハーネスの再設計と、コンテナイメージやライブエンドポイントに対して自分自身を証明する必要があるアダプタのための実際のフィクスチャが来ました。7月5日までに、13のアダプタすべてが本物の合格から署名付きの適合性証明を生成するようになりました。

7月1日以前(マスク済み)

  適合性失敗
        |
        v
  continue-on-error: true
        |
        +--> ステップが「成功」を報告 --> 緑のチェックマーク
        |
        '--> 署名ステップ(本物の合格にゲート):
             スキップ、すべての実行。証明書、なし。


以後(マスク解除)

  適合性失敗  --> ビルドが大声で壊れる
  適合性合格 --> 署名付きの証明がアップロードされる

フルスクリーンモードに入る フルスクリーンモードを終了

1つのYAMLキーが証拠と装飾の違いでした。スキップされた署名ステップが、パイプラインで唯一の正直なシグナルでした。

緑は今、何かを意味します。

フレームワークは著者を持ち続けました

v1.3は7月中旬に、私が気に入った主張とともにリリースされました:1つの共有エンジンの上に3つのドライバ(ガイド付きセッション用のSherpa、ポイントアンドクリック用のコンソール、無人実行用の「ダークファクトリ」)。次に本物のモデルをループに含めた最初のドッグフードパスを実行しました。合格した実行はまた、主張を反証しました。コンソールは、コンソール自身のテストフィクスチャ以外にフレームワークに存在しないフローファイルを必要としました。実キットをロードしたことがありませんでした。1つのエンジンの上に3つのドライバは、そのうち2つに対しては真実で、私自身の検証実行が私がそれを知る唯一の理由でした。

同じ実行で、より悪い発見がありました。凍結前昇格を強制する関数、フレームワークの第二の戒律は、完全なテストスイートとゼロのプロダクションコール元を持っていました。徹底的にテスト済み。一度も呼ばれていません。インバリアントはとにかく保持されていましたが、それは無関係のバグが偶然同じパスをブロックしたためです。「安全プロパティは異なる欠陥によって支持された」ということがあなたを不安にさせないなら、もう一度ゆっくり読んでください。

同じ週にCIにWindowsランナーを追加しました。存在し始めて45秒後にエンコーディングギャップで失敗し、スイートの最初の完全に正しいWindows実行につながりました:435のテスト、環境の支えなし。その後2日間で10のギャップが閉じられ、それぞれが最初に失敗したテストで証明され、コミットメッセージで主張されたものではありません。それらを追跡するレジスタは形容詞ではなく、名前、日付、証拠を保持しています。

ペースが実際に買ったもの

5月に私はエージェントは作業の20%で、プラットフォームが他の80%と書きました。他の人々のエージェントについて書きました。私のものについても真実で、私はプラットフォーム側を特に構築したので、80%が即興にならないようにしました。

人々が5ヶ月間のフルスピードAI支援構築がどのようなものかと尋ねるとき、これが今私が与える答えです。生成は安価な部分で、リポジトリ数が興味深いものでなくなるほど安価です。緑のチェックマークは誰かが設定した主張です。証拠は、それを反証しようとする試みに耐えるものであり、これら2つの間の距離は、レビューされていない1つのYAMLキーでした。そして、それ自体で実行しないガバナンスシステムはスライドデッキです。私のものは7月に4回著者自身を捕まえました(マスクされた適合性、幻のドライバ、強制されていないインバリアント、エンコーディングバグ)、そして各捕獲は約1時間恥ずかしいものでしたが、その後永続的に耐荷重性のあるものになりました。

古くなったタイトルは数を達成と見なしていました。5ヶ月後、数はその組織で最も興味のない成果物です。私が実際にあなたに見せたいのは、私自身のチェックマークが嘘つきだと呼んだ7月1日の監査と、その後嘘をつくことを構造的に難しくしたパイプラインの変更です。AIは喜んで41のリポジトリを構築します。あなたがそれらを信頼できるかどうかは、まだあなたの仕事です。


Todd Linnertzは30年のエンタープライズエンジニアリング経験を持つシニアソリューションエンジニアです。彼はソフトウェアデリバリチームのためのオープンソースAIガバナンスシステムであるAIEOSの作成者です。devopsdiary.bloggithub.com/wtlinnertzで彼を見つけてください。