FIELD NOTES 01 · COMPLETION

PR merged is not complete.
AI worker 時代の Completion Contract

·株式会社Strassen·読了 約8分
TL;DR

test が通り、PR が merge され、deploy が成功しても、業務はまだ終わっていない。AI worker に仕事を任せるなら、「完了」を 実利用経路で効果が起き、結果が保存され、再起動後にも読み戻せる ことと定義し、その証拠を依頼のたびに残す契約(Completion Contract)を先に決める。完了の定義が曖昧なまま AI を増やすと、返事だけが増える。

EVIDENCE STATUS: DESIGN / OPINION — NOT MEASUREDこの記事は、Strassen が hiyu の設計と自社運用で採用している原則を説明する設計ノートです。効果を示す数値・顧客事例・ベンチマークは掲載していません。測定できたものは、scope・環境・期間・baseline・検証日を添えて別途公開します。

1. 問題の定義

人が仕事を引き継ぐとき、「終わりました」の裏には暗黙の確認があります。本番で動いているか、データが残っているか、翌朝も同じ状態か。人はそれを経験で補います。

AI worker にはその暗黙知がありません。AI は「指示された手順を実行し、返事を返す」ことを完了とみなしがちで、その返事は非常に自然に「終わりました」と読めます。すると次の事故が起きます。

どれも「返事」と「exit code」の上では成功です。問題は AI の能力ではなく、何をもって完了とするかが契約になっていないことにあります。

2. よくある弱い実装

弱い完了判定何が抜けているか強い完了判定
AI が「完了しました」と返した返事は主張であって証拠ではない実 system の状態を独立に読み戻す
単体テストが green本番の設定・データ・権限が違う本番相当の経路で受入条件を検証する
PR が merge されたmerge は deploy ではない正確な candidate version が配信されていることを確認する
deploy コマンドが成功したキャッシュ・CDN・別環境で旧版が残る外部利用経路から served 内容のハッシュを照合する
ログに「保存しました」と出た永続化先が一時領域・別プロセスプロセス再起動後に同じ結果を読み戻す
cron を登録した登録は実行ではないoccurrence / run / artifact / retry まで台帳に残す

共通点は、中間状態を終端状態と誤認していることです。中間状態はすべて「まだ何も証明していない」と扱うのが安全側です。

3. 強い設計原則

原則 1 — 完了は宣言ではなく read-back で決まる

完了を判定するのは、仕事をした worker 本人ではなく、独立した読み戻しです。同じ worker が「確認しました」と言っても、それは主張の重複にすぎません。別の経路(外部 URL、別プロセス、別アカウント)から実 system を読み、期待値と照合します。

原則 2 — 受入条件は着手前に書く

「何が読み戻せたら完了か」を依頼時に決めます。後から決めると、出来上がったものに合わせて条件が緩みます。受入条件には、対象の system、確認する経路、期待する値、確認する時刻(deploy 直後・キャッシュ期限後・再起動後)を含めます。

原則 3 — 中間状態を終端と混同しない

test、review、merge、deploy、"成功" 表示は、それぞれ次の段階へ進む条件であって完了ではありません。段階ごとに「通過した証拠」を残しつつ、完了の判定は最後の read-back にだけ与えます。

原則 4 — 永続化と再起動耐性を完了に含める

結果が残っていること、そして controlled restart の後にも同じ結果が読み戻せることを確認して初めて、業務として完了です。メモリ上の状態、一時ファイル、別プロセスのバッファに残った「成功」は完了に数えません。

原則 5 — 失敗理由も成果物である

完了できなかったとき、どの段階で、何が期待と違ったかを、次の worker(人でも AI でも)が読める形で残します。「失敗しました」だけの報告は、返事だけの「成功」と同じ欠陥です。

4. Architecture — Completion Contract の形

Strassen では、一つの依頼を次の段階に分けて扱います。各段階は「通過」の証拠を残し、完了は最後の段階でだけ宣言できます。

  1. Intent / Work Contract目的・scope・受入条件・権限・成果物を、着手前に文章にする。
  2. Talent & Route誰が、どの runtime で、どの権限で実行するかを決め、実行直前に exact process を確認する。
  3. Execution実 system への作用。test / review / merge / deploy はここに含まれる「中間状態」。
  4. Intermediate — ここで止めないtest green、PR merged、deploy success はいずれも完了ではない。証拠として記録するだけ。
  5. Result / Artifact成果物と実行記録(何を、どの version で、いつ、どこへ)を残す。
  6. Independent Verificationworker 本人ではない経路で、実利用経路の outcome を読み戻し、受入条件と照合する。
  7. Persistence結果が永続化先に書かれていることを確認する。
  8. Controlled Restart → Read-back再起動(またはキャッシュ期限経過)後に同じ結果が読み戻せて、初めて VERIFIED COMPLETE。
hiyu での扱い。hiyu はこの段階を Completion & Audit として管理し、「AI が返事をした」を成功としません。実際の system で効果が起き、結果が保存され、再起動後にも読み戻せて初めて complete と記録します。これは設計方針であり、提供状況は各 product の status に従います。

5. Implementation checklist

自社の AI worker 運用に Completion Contract を入れるときの最小チェックリストです。

6. Evaluation metrics

Completion Contract が機能しているかは、次の指標で観測できます。Strassen ではこれらを標準的に測定する指標としていますが、このページに実績値は掲載していません

7. Security considerations

8. FAQ

すべての依頼に再起動確認まで必要ですか?

いいえ。受入条件で決めます。永続化を伴わない一時的な調査であれば read-back だけで十分です。逆に、本番の設定や data を変える依頼は、再起動後の確認まで含めるのが安全側です。

人間のレビューがあれば十分では?

レビューは中間状態の一つです。レビューは「変更が妥当か」を見ますが、「本番で効果が起きたか」は見ません。両方が必要です。

read-back を AI に任せてよいですか?

実行した worker と独立していれば構いません。同じ worker が自分の仕事を確認するのは主張の重複です。別の worker、別の経路、または決定論的なスクリプトで確認します。

コストが増えませんか?

検証の分だけ増えます。ただし、false-complete が本番で見つかる費用と比べると小さい、というのが Strassen の判断です。実測は今後、scope と baseline を添えて公開します。

BRING ONE WORKFLOW

止まっている一つの業務を、持ってきてください。

受入条件の定義から、実環境での実装、read-back まで、一緒に閉じます。