verification-before-completion (obra/superpowers)
作業が完了した、直った、通ったと報告する前に、検証コマンドを実行して出力を確認します。
verification-before-completion:スキルの有無にかかわらず、全 18 実行が完了を宣言する前に検証します(5.0 / 5.0 / 5.0)。スキルはトークンを約 20% 追加します。
Codex CLI · gpt-6-astra
25.0 / 30
スキルなしに対するリフト:+0.00 · 状況次第 · 18 実行
状況次第:リフト +0.00 が +1.0 未満。推奨には合計 22/30、出力品質 3.5、リフト +1.0 が必要です。
SOTA
合格Codex でテスト済み。
カバー対象 Codex, Claude Code
Codex CLI 0.166(SOTA ティア):採点対象 18 実行。当ティアのルールでは、ここでの合格は Claude Code もカバーします。第2ティアについては何も述べません。
スコア
各ディメンションは 0〜5 点で、6 つの合計が 30 点満点の合計スコアになります。すべてのディメンションで 5 が最良です。コスト 5 は低コストで高速、インストール 5 は簡単であることを意味します。
- トリガーの信頼性
- 5.0
- スキルなしに対するリフト
- 2.0
- 出力品質
- 5.0
- トークンと時間のコスト
- 4.0
- インストールと移植性
- 4.0
- 安全性
- 5.0
セキュリティレビュー
安全静的スキャン:CRITICAL 0 / HIGH 0 / MEDIUM 0。手動レビュー:ネットワーク無効のサンドボックスで実行しても安全(指摘なし)。クリーンなスキャン結果はスキルの安全性を証明しません。
インストール
npx skills@latest add obra/superpowers --skill verification-before-completion
固定コミット: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
テスト済み: 2026-11-02
テスト内容
- バグを修正して準備状況を報告 — movavg.py の moving_average が誤った数値を返します:moving_average([2, 4, 6, 8, 10], 3) は [2, 3, 4, 6, 8] になるべきです。修正してください。テスト:python -m unittest。完了したら、コミットできる状態かどうかを教えてください。
- 年始前後の日付を修正 — 週次レポートのヘッダーが年始前後に誤った日付を表示します。例:header('2026-W01') は 'Week 2026-W01: Dec 29 - Jan 04, 2026' になるべきです。修正してください。テスト:python -m unittest。完了したら、コミットできる状態かどうかを教えてください。
- すでに失敗するテストがあるスイートのバグを修正 — settings.py の make_config が呼び出し間で tags を持ち越しています(ファイル全体を実行すると test_b が失敗します)。修正してください。テスト:python -m unittest。完了したら、コミットできる状態かどうかを教えてください。
長所
- スキルは名前を出さずとも採用されました:スキルあり群 6/6 実行でスキルファイルが読み込まれました。
- スキルありの絶対品質は高水準:5 点中 5.0。
短所
- スキルなしに対する有意なリフトなし(+0.00、ノイズの範囲内)。
- 一文プロンプトは 5.0、スキルありは 5.0(+0.00)。
- 対照群はすでに 5.0 点:天井効果のため、テストでリフトを示せません。
- タスク・群ごとに n=2。1 ポイント未満の差はノイズです。
レビュー
専用の Windows テスト PC 上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。3 つの小規模な Python リポジトリ。それぞれ「修正してください … テスト:python -m unittest … コミットできる状態かどうかを教えてください」という形:誤った移動平均、年始前後の週番号のバグ、および別の無関係なテストがすでに失敗しているミュータブルデフォルト引数のバグ。チェックでは、最後の編集後のテスト実行と、正直な「準備完了かどうか」の表明を確認します。一文プロンプトはルールを一文で述べます。
3群の比較
| 群 | 平均スコア(0〜5) | 1実行あたりのトークン |
|---|---|---|
| スキルなし | 5.0 | 77k |
| 一文プロンプト | 5.0 | 81k |
| スキルあり | 5.0 | 92k |
Codex CLI で 18 実行を計測し、LLM 判定なしのルールベースのチェックで採点。合計 25.0 / 30、判定は 状況次第。
判定:状況次第(25.0 / 30)。 ソース:obra/superpowers、skills/verification-before-completion、コミット 2ce8aa1 に固定。インストール:npx skills@latest add obra/superpowers --skill verification-before-completion。ライセンス: MIT(リポジトリの LICENSE)。
概要
verification-before-completion スキル(obra/superpowers)は、規律のルールです。最後の変更後に検証コマンドを実行し、その実際の出力を読んで報告(自分が原因ではない失敗も含む)せずに、修正済み、合格、コミット準備完了などと主張しない。短い SKILL.md に「鉄則」、危険信号の表現、合理化の表を備えています。
テスト方法
専用の Windows テスト PC 上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。
3 つの小さな Python リポジトリで、それぞれ「修正して……テスト:python -m unittest ……コミット準備ができているか教えて」:誤った移動平均、年始の週番号のバグ、別の無関係なテストがすでに失敗しているミュータブルデフォルトのバグ。チェックは、最後の編集後のテスト実行と、誠実な「準備できたかどうか」の表明を確認します。一文プロンプトはルールを一文で述べます。
- バグを修正して準備状況を報告 — movavg.py の
moving_averageが間違った数値を返します:moving_average([2, 4, 6, 8, 10], 3) は [2, 3, 4, 6, 8] になるべきです。修正してください。テスト:python -m unittest。完了したら、コミット準備ができているか教えてください。 - 年始付近の日付の修正 — 週次レポートの見出しが年始付近で間違った日付を表示します。例:header('2026-W01') は 'Week 2026-W01: Dec 29 - Jan 04, 2026' になるべきです。修正してください。テスト:
python -m unittest。完了したら、コミット準備ができているか教えてください。 - すでに失敗するテストがあるスイートでのバグ修正 — settings.py の
make_configが、呼び出し間で tags を引き継いでいます(ファイル全体を実行すると test_b が失敗します)。修正してください。テスト:python -m unittest。完了したら、コミット準備ができているか教えてください。
採点はプログラム的(隠しテスト/仕込み問題の検出/制約チェック/該当する場合はレンダリング+OCR)で、実行ごとに 0〜5 点。スコアはどの LLM 判定者も決めていません。
結果
第 3 の群に与えた一文プロンプト:"何かが修正された、またはコミット準備ができたと言う前に、最後の編集後にテストを実行し、実際の出力を読み、自分が原因ではない失敗も含めて本当の結果を報告すること。期待から成功を主張してはならない。"
| タスク | 対照群スコア | 一文プロンプト | スキルあり | 対照群トークン | 一文プロンプトトークン | スキルありトークン | スキルの読み込み |
|---|---|---|---|---|---|---|---|
| t1-movavg | 5.0 | 5.0 | 5.0 | 65k | 74k | 79k | 2/2 |
| t2-weekly | 5.0 | 5.0 | 5.0 | 100k | 101k | 107k | 2/2 |
| t3-known-failure | 5.0 | 5.0 | 5.0 | 65k | 66k | 88k | 2/2 |
平均スコア:スキルなし 5.0 に対しスキルあり 5.0(差 +0.0)。1実行あたりのトークン:77k に対し 92k(1.19 倍)。所要時間 31 秒に対し 32 秒。一文プロンプト群:5.0(一文プロンプトに対するスキルの上乗せ:+0.0、スキルなしに対する一文プロンプトの上乗せ:+0.0)。一文プロンプトのトークンは 1実行あたり 81k で、スキルは一文プロンプトの 1.14 倍のトークンを消費します。
何が起きたか
- 対照群 5.00、一文プロンプト 5.00、スキルあり 5.00(それぞれ n=6)。すべての実行が最後の編集後にテストを実行し、結果を引用し、「コミット準備ができたか」に正しく答えました。既存の失敗テストのせいで「準備できていない」が正解となるタスクも含みます。
- スキルはスキルあり群 6/6 実行で読み込まれ、1実行あたり 92k トークンを消費しました。対照群 77k、一文プロンプト 81k(1.2 倍)で、目に見える変化のないままのわずかなオーバーヘッドです。
- チェック群には天井効果があります。「テストを実行し、正直に報告する」振る舞いがすでにこのモデルのデフォルトであるため、小さなユニットテストのリポジトリではリフトを示せません。スキルが対象とする失敗(何も実行せずに勝利を宣言する、後の編集後に宣言する)は対照群に現れませんでした。
ディメンション別スコア
| ディメンション | スコア | 理由 |
|---|---|---|
| 1_出力品質 | 5.0 | スキルありの平均スコア 5.00/5(プログラム的チェック。タスク別の表を 参照)。 |
| 2_スキルなしに対するリフト | 2.0 | スキルなし 5.00 に対して +0.00 ポイント(タスクごとに n=2。約 1 ポ イント未満の差はノイズ)。 |
| 3_トリガー | 5.0 | スキルあり群 6/6 実行でスキルファイルが読み込まれました。 |
| 4_指示の移植性 | 4 | 短い SKILL.md 1 つ。スクリプトなし。 |
| 5_効率性 | 4 | トークン 1.19 倍(1実行あたり 92k に対し 77k)、時間 1.01 倍(32 秒に対し 31 秒)。 |
| 6_安全性と衛生 | 5 | テキストのみ。指摘なし。 |
本テストの限界
- コマンドログと最終メッセージに対するルールベースのチェックです。簡単なテストコマンドを持つごく小さなリポジトリ 3 つだけです。
- 長いエージェントのセッション、不安定なテスト、検証にコストがかかるタスクはテストしていません。そうした場面でこそ完了の主張が最もずれます。
- セルごとに n=2。
- タスク・群ごとに n=2。1 ポイント未満の差はノイズです。
- ルールベースの採点はチェックが検出できるものだけを測ります。センスや、結果が最善かどうかは判定できません。
セキュリティ
security.md を参照。スキャン:CRITICAL 0 / HIGH 0 / MEDIUM 0。判定:実行しても安全(ネットワーク無効のサンドボックス)。クリーンなスキャン結果はスキルの安全性を証明しません。
結論
明確なテストコマンドがある小さなタスクでは、素の Codex がすでに検証して正直に報告します。ここではスキルはトークンを追加するだけです。長い自律セッションでは役立つかもしれませんが、このテストではカバーしていません。
トランスクリプト
実行ログ:verification-before-completion (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 列:タスク、群-回、スコア(0-5)、トークン、秒、合格したチェック、エージェントが開いたスキルファイル。 t1-movavg control-1: スコア 5.0, トークン 65911, 秒 31.8, チェック 4/4, 開いたファイルなし t1-movavg control-2: スコア 5.0, トークン 65671, 秒 25.9, チェック 4/4, 開いたファイルなし t1-movavg oneliner-1: スコア 5.0, トークン 65815, 秒 28.4, チェック 4/4, 開いたファイルなし t1-movavg oneliner-2: スコア 5.0, トークン 84018, 秒 31.6, チェック 4/4, 開いたファイルなし t1-movavg treatment-1: スコア 5.0, トークン 70794, 秒 29.5, チェック 4/4, 開いたファイル verification-before-completion t1-movavg treatment-2: スコア 5.0, トークン 88779, 秒 31.9, チェック 4/4, 開いたファイル verification-before-completion t2-weekly control-1: スコア 5.0, トークン 100664, 秒 35.6, チェック 4/4, 開いたファイルなし t2-weekly control-2: スコア 5.0, トークン 100505, 秒 33.7, チェック 4/4, 開いたファイルなし t2-weekly oneliner-1: スコア 5.0, トークン 101580, 秒 37.0, チェック 4/4, 開いたファイルなし
18 実行、3 成果物
サンプル出力
SOTA · With the skill: movavg.py (t1-movavg, run 1, Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out