---
generated_at: 2026-02-21 10:30:00
metrics:
  claims_total: 48
  claims_with_evidence: 48
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：async.csv

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：48 / 48、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全テストケースがソースコードに基づいて生成されている

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/async/Condition.php` - Conditionクラスの定義（succeed, fail, waitForNotificationAsyncメソッド）
- E-02: `src/async/ConditionNode.php` - ConditionNodeクラスの定義（addNext, getNextメソッド）
- E-03: `src/async/BasePoll.php` - BasePollクラスの定義（create, addImpl, addMultiImpl, next, hasNextメソッド）
- E-04: `src/async/Poll.php` - Pollクラスの定義（from, add, addMulti, waitUntilEmptyAsyncメソッド）
- E-05: `src/async/KeyedPoll.php` - KeyedPollクラスの定義（from, add, addMultiメソッド）
- E-06: `src/async/Semaphore.php` - Semaphoreクラスの定義（__construct, waitForAsyncメソッド）
- E-07: `src/async/LowPri.php` - LowPriクラスの定義（run, prioritizeメソッド）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Condition.succeed - 通知前に結果を設定できること | E-01 L23-35: succeedメソッドの実装 | ○ |
| C-02 | Condition.succeed - 二重通知時にInvariantExceptionがスローされること | E-01 L29-31: invariant条件 | ○ |
| C-03 | Condition.fail - 通知前に例外を設定できること | E-01 L41-52: failメソッドの実装 | ○ |
| C-04 | Condition.fail - 二重通知時にInvariantExceptionがスローされること | E-01 L47-49: invariant条件 | ○ |
| C-05 | Condition.waitForNotificationAsync - 成功通知で結果を受け取れること | E-01 L66-73: waitForNotificationAsyncメソッドの実装 | ○ |
| C-06 | Condition.waitForNotificationAsync - 失敗通知で例外を受け取れること | E-01 L66-73: waitForNotificationAsyncメソッドの実装 | ○ |
| C-07 | Condition.waitForNotificationAsync - 通知後に待機開始しても結果を受け取れること | E-01 L69-70: condition !== nullの分岐 | ○ |
| C-08 | ConditionNode.addNext - 次のノードを追加できること | E-02 L19-23: addNextメソッドの実装 | ○ |
| C-09 | ConditionNode.addNext - 既に次ノードが存在する場合にInvariantExceptionがスローされること | E-02 L20: invariant条件 | ○ |
| C-10 | ConditionNode.getNext - 次のノードが存在しない場合はnullが返却されること | E-02 L17, L25-27: nextプロパティの初期値とgetNextメソッド | ○ |
| C-11 | ConditionNode.getNext - 次のノードが存在する場合はそのノードが返却されること | E-02 L25-27: getNextメソッドの実装 | ○ |
| C-12 | BasePoll.create - 新しいインスタンスが生成されること | E-03 L58-60: createメソッドの実装 | ○ |
| C-13 | BasePoll.addImpl - Awaitableを追加できること | E-03 L84-102: addImplメソッドの実装 | ○ |
| C-14 | BasePoll.addImpl - イテレーション終了後に追加を試みるとInvariantExceptionがスローされること | E-03 L85-88: invariant条件 | ○ |
| C-15 | BasePoll.addMultiImpl - 複数のAwaitableを一度に追加できること | E-03 L104-130: addMultiImplメソッドの実装 | ○ |
| C-16 | BasePoll.addMultiImpl - 空のトラバーサブルを追加した場合も正常に動作すること | E-03 L116-123: foreachループは空コレクションでもエラーなし | ○ |
| C-17 | BasePoll.addMultiImpl - 1件のみのトラバーサブルを追加した場合も正常に動作すること | E-03 L116-123: foreachループは1件でも動作 | ○ |
| C-18 | BasePoll.next - 完了したAwaitableの結果を取得できること | E-03 L148-163: nextメソッドの実装 | ○ |
| C-19 | BasePoll.next - 全てのAwaitableが処理完了した後はnullが返却されること | E-03 L155-159: null返却の条件 | ○ |
| C-20 | BasePoll.next - イテレーション終了後に呼び出すとInvariantExceptionがスローされること | E-03 L149-152: invariant条件 | ○ |
| C-21 | BasePoll.next - Awaitableが例外をスローした場合、その例外が伝播すること | E-03 L141-145: waitForThenNotifyでのfail呼び出し | ○ |
| C-22 | BasePoll.hasNext - 次の結果が存在する場合はtrueが返却されること | E-03 L165-171: hasNextメソッドの実装 | ○ |
| C-23 | BasePoll.hasNext - 次の結果が存在しない場合はfalseが返却されること | E-03 L170: getNext() !== nullの評価 | ○ |
| C-24 | BasePoll.hasNext - イテレーション終了後に呼び出すとInvariantExceptionがスローされること | E-03 L166-169: invariant条件 | ○ |
| C-25 | Poll.from - Traversableから新しいPollインスタンスを生成できること | E-04 L28-30: fromメソッドの実装 | ○ |
| C-26 | Poll.from - 空のTraversableからPollを生成した場合も正常に動作すること | E-04 L29: Vector(空コレクション)は正常動作 | ○ |
| C-27 | Poll.add - 単一のAwaitableを追加できること | E-04 L33-35: addメソッドの実装 | ○ |
| C-28 | Poll.addMulti - 複数のAwaitableを追加できること | E-04 L41-43: addMultiメソッドの実装 | ○ |
| C-29 | Poll.waitUntilEmptyAsync - 全てのAwaitableが完了するまで待機できること | E-04 L50-54: waitUntilEmptyAsyncメソッドの実装 | ○ |
| C-30 | Poll.waitUntilEmptyAsync - 空のPollに対して呼び出しても正常に完了すること | E-04 L51-53: foreachは空でも正常終了 | ○ |
| C-31 | KeyedPoll.from - KeyedTraversableから新しいKeyedPollインスタンスを生成できること | E-05 L37-41: fromメソッドの実装 | ○ |
| C-32 | KeyedPoll.from - 空のKeyedTraversableからKeyedPollを生成した場合も正常に動作すること | E-05 L40: fromImplは空コレクションでも正常動作 | ○ |
| C-33 | KeyedPoll.add - キー付きでAwaitableを追加できること | E-05 L47-49: addメソッドの実装 | ○ |
| C-34 | KeyedPoll.addMulti - 複数のキー付きAwaitableを追加できること | E-05 L52-56: addMultiメソッドの実装 | ○ |
| C-35 | Semaphore.__construct - 有効なconcurrentLimitでインスタンスを生成できること | E-06 L38-44: コンストラクタの実装 | ○ |
| C-36 | Semaphore.__construct - concurrentLimitが0以下の場合にInvariantExceptionがスローされること | E-06 L42: invariant条件 | ○ |
| C-37 | Semaphore.__construct - concurrentLimitが1の場合に正常にインスタンスが生成されること | E-06 L42: invariant($concurrentLimit > 0) | ○ |
| C-38 | Semaphore.waitForAsync - concurrentLimit内であれば即座に処理が実行されること | E-06 L47-86: waitForAsyncメソッドの実装 | ○ |
| C-39 | Semaphore.waitForAsync - concurrentLimitを超える場合は前の処理完了を待ってから実行されること | E-06 L49-62: Condition待機ロジック | ○ |
| C-40 | Semaphore.waitForAsync - 処理関数が例外をスローした場合、その例外が伝播すること | E-06 L70: awaitでの例外伝播 | ○ |
| C-41 | Semaphore.waitForAsync - 処理完了後にスロットが解放され次の処理が開始されること | E-06 L71-79: finallyブロックでの解放処理 | ○ |
| C-42 | Semaphore.waitForAsync - 複数の同時呼び出しがconcurrentLimit内で並行実行されること | E-06 L63-66: runningCount < concurrentLimitの検証 | ○ |
| C-43 | LowPri.run - 低優先度で処理を実行し結果を取得できること | E-07 L52-63: runメソッドの実装 | ○ |
| C-44 | LowPri.run - 同一インスタンスで2回runを呼び出すとInvariantExceptionがスローされること | E-07 L55: invariant条件 | ○ |
| C-45 | LowPri.run - 処理関数が例外をスローした場合、その例外が伝播すること | E-07 L62: awaitでの例外伝播 | ○ |
| C-46 | LowPri.prioritize - run前にprioritizeを呼び出すと、runは通常優先度で実行されること | E-07 L59-61, L74-77: isPrioritizedフラグとprioritizeメソッド | ○ |
| C-47 | LowPri.prioritize - run中にprioritizeを呼び出すと優先度が上がること | E-07 L76: wh?->prioritize()の呼び出し | ○ |
| C-48 | LowPri.prioritize - 複数回prioritizeを呼び出しても問題なく動作すること | E-07 L74-77: prioritize()は冪等的 | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし：全てのテストケースがソースコードに基づいて生成されている

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全テストケースがソースコードのメソッド定義・invariant条件から直接導出されており、高い信頼性がある

## 6) レビュアーチェックリスト（最小）
- [ ] Semaphoreの並行制限テスト（C-39, C-42）が実際の並行実行環境で検証可能か確認
- [ ] LowPriの優先度テスト（C-46, C-47）がHHVM/ASIOの実行環境で検証可能か確認
- [ ] BasePollのイテレーション終了検出（C-19, C-20）のテストシナリオが十分か確認
- [ ] Conditionの二重通知防止（C-02, C-04）のテストが実際のエッジケースをカバーしているか確認
