メインコンテンツへスキップ
TOP/ サービス/ MCPツール/ 完了条件チェッカー
BETA / QA向けMCP / done-verifier実装・コードレビュー

完了条件チェッカー

「完了しました」の一言を、そのまま信じて大丈夫ですか。

無料ベータ・面談制/正式版は有料提供予定

言語不問 決定的(LLM不使用)

前提:acceptanceはDoDチェックリスト形式(- [ ]/* /1. 等のマーカー付き改行区切りリスト、1項目以上)

  • 所要時間: 30分
  • 進め方: 現場の状況をヒアリングし、最初に効くツールと順番を一緒に決めます
  • ご準備は不要です

概要

「DoDを満たした」という自己申告は人もAIも楽観に振れやすく、レビューで一つずつ突き合わせるのは手間がかかり抜けが出ます。完了主張を機械的に裏取りし、満たせていない項目だけを正直に突きつけることで、未完了のまま「完了」として下流に流れる手戻りを止めます。

効果

  • 自己申告の「完了」を項目単位で裏取りし、未充足を漏れなく可視化する。
  • 証跡が変更に無い項目と、そもそも機械照合できない曖昧な受入条件を区別し、受入条件の書き方の不備まで指摘する。
  • 決定的(同入力→同出力)なので CI に組み込み、未充足ゼロをマージ条件にできる。

インプット

  • 「完了」と主張された変更
  • 受入条件(DoDチェックリスト)

汎用LLMとの違い

受入条件から証跡(シンボル・ファイル・要件ID)を抽出し変更へ照合する規則・正規化・過検出抑止のカタログが bubo 独自の中核です。汎用LLMに「完了してる?」と聞くと楽観に流れるのに対し、自己申告を排して変更内の証跡だけで決定的に裏取りし、裏取りできない項目を満了と偽らず正直に列挙します。

BENCHMARK

「全部チェック済み」の申告と、証跡照合の結果

同じPR説明つきの変更・受入条件を done-verifier にそのまま渡した実際の出力です(要約ではありません)。

入力したPR説明つきの変更と受入条件(実物・全文)
【PR説明つきの変更】
ギフトカード返金対応 PR

既存の返金APIにギフトカード残高への部分返金機能を追加しました。存在しないカードID・通貨不一致・
二重返金といったエッジケースも洗い出し、単体テストを追加してCIでもgreenを確認しています。
通貨まわりの検証も含め受入条件は全て満たしているので、自信を持ってapproveをお願いします。

diff --git a/src/gift_card_refund.py b/src/gift_card_refund.py
@@ -5,6 +5,23 @@ def get_gift_card_balance(card_id):
     return _lookup_balance(card_id)

+def apply_gift_card_balance_refund(card_id, amount):
+    """Refund the given amount back onto a gift card balance."""
+    balance = _lookup_balance(card_id)
+    if balance is None:
+        raise ValueError("unknown card_id")
+    balance["refunded_amount"] = amount
+    balance["refund_status"] = "gift_card_refunded"
+    _save_balance(balance)
+    return balance
+
+def validate_gift_card_currency(card_id, currency):
+    """Validate that the refund currency matches the card's issuing currency."""
+    raise NotImplementedError("TODO: currency validation pending finance sign-off")
+
 def _lookup_balance(card_id):
     return _db.get(card_id)

【受入条件(DoD)— 提出者は全項目に [x] を付けています】
# 受入条件: ギフトカード返金機能の追加

- [x] `apply_gift_card_balance_refund` が実装されている
- [x] `validate_gift_card_currency` の実装と `tests/test_gift_card_refund.py` によるユニットテスト
- [x] `send_gift_card_refund_notification` が呼び出される
- [x] 二重返金が発生しないこと(同一カードへの返金は一度のみ許可される)

判定結果の比較(集計: done: false / 4項目中 met 1・unmet 3)

#受入条件提出者の自己申告本ツールの判定判定の根拠(本ツール)
1apply_gift_card_balance_refund が実装されている[x] 済met変更に apply_gift_card_balance_refund が現れる
2validate_gift_card_currency の実装と tests/test_gift_card_refund.py によるユニットテスト[x] 済unmet(missing_evidence)条件が名指す tests/test_gift_card_refund.py が変更に現れない
3send_gift_card_refund_notification が呼び出される[x] 済unmet(missing_evidence)条件が名指す send_gift_card_refund_notification が変更に現れない
4二重返金が発生しないこと[x] 済unmet(unverifiable)機械照合できる手がかり(シンボル/ファイル/識別子)が条件文に無い
done-verifier の回答(実測そのまま)
# 完了条件の検証結果

## 指摘一覧(3件)

### 1. 受入条件が名指す証跡(シンボル/ファイル/識別子)が変更に現れず、充足を裏取りできない
- 場所: tests/test_gift_card_refund.py
- 直し方: `tests/test_gift_card_refund.py` を変更に含めて実装する(または受入条件の記述と実装の名称を一致させる)
- 指摘ID: `6b2c4a0b749c`(report_outcome で正否・採否を記録できます)

### 2. 受入条件が名指す証跡(シンボル/ファイル/識別子)が変更に現れず、充足を裏取りできない
- 場所: send_gift_card_refund_notification
- 直し方: `send_gift_card_refund_notification` を変更に含めて実装する(または受入条件の記述と実装の名称を一致させる)
- 指摘ID: `6761228afb8b`(report_outcome で正否・採否を記録できます)

### 3. この受入条件は変更テキストから機械照合できる手がかり(シンボル/ファイル/識別子)が無く、充足を裏取りできない
- 場所: 全体
- 直し方: この受入条件に機械検証できる証跡(対象シンボル/ファイル/識別子)を明示する(例 `関数名`・path/to/file.py・REQ-番号)
- 指摘ID: `fab6cd23fb9a`(report_outcome で正否・採否を記録できます)

「全部 [x]・CIもgreen・自信を持ってapprove」と書かれたPRに対して、本ツールは受入条件を1項目ずつに分解し、その条件文が名指している証跡(関数名・ファイルパス・識別子)が変更の中に実在するかだけを機械的に照合します。結果は met 1件・unmet 3件で、「テストファイルが変更に無い」「通知関数が変更に無い」という2件は裏取り不能として、「二重返金が起きないこと」は照合できる手がかりが条件文に無いため unverifiable として、いずれも別立てで返ります。同じ入力なら常に同じ判定・同じ順序で、文面の自信の強さには一切左右されません。

本ツールが見るのは「受入条件が名指す証跡が変更に在るか」です。したがって、証跡が揃っているのに中身の計算が間違っているタイプの欠陥(例: 為替レートの適用方向が逆で上限判定が実質機能しない)は、この方式では met と判定されます。ロジックの正しさの検証はテスト側の道具(test-design / test-oracle-deriver)の役割であり、done-verifier は「申告と証跡の突き合わせ」に特化した機械的チェックとして、これらのテスト側の道具との併用を推奨します。

社外秘のコードを、どう守るか

buboは入力を保存しません

ツールに渡したコード・仕様・データを、buboのサーバーは保存しません。bubo自身が学習に使うこともなく、処理はその場限りです。

AIに送るか・どこへ送るかは、あなたが握ります

標準のキーレス接続では、意味を読む処理は普段お使いのAIクライアントの中で実行されます。データの扱いは、お客様とそのプロバイダの既存のご契約のもとにあり、buboがAPIキーやコードをお預かりすることはありません。ご自身の契約するプロバイダを直接指定したい場合は、BYOK(Bring Your Own Key)として任意で設定できます。

AIに送らず動くツールも多くあります

多くのツールは決定的な静的解析だけで完結し、LLMに渡すのは必要な場面に限られます。AIに送る範囲を、あなた自身で絞り込めます。

ワンタイムコードは単回使用・有効期限7日・サーバーに平文保存はしません。発行したトークンは設定ファイルに直書きせず環境変数で参照します。既存のMCP設定がある場合も、壊さず冪等にマージします。

どう申し込み、どうつなぐのか

STEP 1

1. 面談を予約する

予約フォームから面談をお申し込みください。現在のQAの困りごとと、試したいツールをお聞かせいただきます。

STEP 2

2. 面談で適用先を一緒に決める

そろえたツールのうち、貴社の工程で効く順番をご一緒に見立てます。ワンタイムコードと接続コマンドは、面談後にあわせてお渡しします。

STEP 3

3. コード1つ、コマンド1行で接続

お受け取りしたワンタイムコードで、コマンドを1行実行(Windows / mac / Linux 各1行)。有効化・MCP設定(.mcp.json)生成・環境変数設定まで自動で完了します。あとはAIクライアント(Claude Code / Gemini CLI)を再起動するだけで、そのままQA方法論を呼び出せます。APIキーのご用意は不要です。ご自身の契約するLLMを使いたい場合は、BYOK(Bring Your Own Key)として任意で設定いただけます。

← QA向けMCPツール一覧へ戻る

AIの番人になる道具「Nioh」を、まず試す

貴社のQA工程に合わせて、Niohのどのツールから始めるかをご一緒に見立てます。無料ベータの枠には限りがあります。まずは面談からお気軽にどうぞ。