0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OMA のテストゲートが失敗すると何を返すか

0
Posted at

oh-my-agent(OMA)は、実行中のワークフローが終了しようとすると、設定済みの
テストスクリプトを再実行できます。この例では、有効期限の判定を意図的に
誤らせた小さなテスト環境で、フックを手動で呼び出しました。
OMA 15.0.13 のソース CLI を使っています。

このテスト環境では、now === expiresAt の時点で有効期限が切れたと判定します。
実装に > を使っていたため、境界値のテストが失敗しました。
テストプロセスの終了コードは 1 でした。実際の出力から抜粋します。

not ok 2 - at expiry: expired
# pass 2
# fail 1

テスト環境の実行中の Ralph ワークフローには、終了条件として test ゲートを
設定していました。OMA の Stop フックを手動で呼び出すと、パッケージの
テストスクリプトが再実行されました。応答には "decision":"block" と、
次の理由が含まれていました。

Stop gate 'test' FAILED (reinforcement 1/5).

oma hook run プロセス自体の終了コードは 0 です。終了を拒否する判断は
JSON の decision に入っています。この終了コードだけでテスト成功と判断すると
誤りになります。

修正したのは比較演算子だけです。

-  return now > expiresAt;
+  return now >= expiresAt;

テストを再実行すると、次の結果になりました。

# pass 3
# fail 0

次の Stop 呼び出しでは、同じゲートが実行され、標準出力は空でした。
OMA はテスト環境のワークフロー状態を削除しました。イベントログには
gate.passed、続いて理由が completion_gate_passed の session.ended が
記録されました。

デモ、実行記録、再現スクリプトには、コマンド、時刻、出力の
全文を載せています。reproduce.py をダウンロードして、CLI の依存パッケージが
そろった OMA のソースチェックアウトに対して実行してください。

python3 reproduce.py --oma-source /path/to/oh-my-agent --output /path/to/new-demo-run

45 秒の解説を見るには、Gist から demo.html をダウンロードし、保存したファイルをブラウザーで開いてください。GitHub のページには HTML のソースが表示されます。

Python 3、Git、Node、Bun が必要です。スクリプトは独立したテスト環境と
セッション保存先を作ります。利用中のプロジェクトのワークフロー状態は
変更しません。

これはローカルのテスト環境でフックを手動呼び出しした例です。
エージェントが自律的に作業する録画でも、本番環境の障害事例でもありません。
この設定のゲートが、このテストに対してどう動くかを示しています。
作業全体の正しさや、他のツールとの優劣を示すものではありません。

ここで使った CLI とフックには、フルハーネスが必要です。
スキルのみのインストールには含まれません。
Quick Start
で小さなタスクを 1 つ試し、差分と検証結果を確認してください。
ソースは GitHub にあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?