---
generated_at: 2026-02-21 20:50:00
metrics:
  claims_total: 112
  claims_with_evidence: 112
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：io.csv

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

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

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

- E-01: `src/io/Handle.php` - 基本インターフェース定義
- E-02: `src/io/ReadHandle.php` - ReadHandleインターフェース（readImpl, readAllowPartialSuccessAsync, readAllAsync, readFixedSizeAsync）
- E-03: `src/io/WriteHandle.php` - WriteHandleインターフェース（writeImpl, writeAllowPartialSuccessAsync, writeAllAsync）
- E-04: `src/io/SeekableHandle.php` - SeekableHandleインターフェース（seek, tell）
- E-05: `src/io/CloseableHandle.php` - CloseableHandleインターフェース（close, closeWhenDisposed）
- E-06: `src/io/FDHandle.php` - FDHandleインターフェース（getFileDescriptor）
- E-07: `src/io/MemoryHandle.php` - インメモリバッファ実装（__construct, close, closeWhenDisposed, readImpl, readAllowPartialSuccessAsync, seek, tell, writeImpl, writeAllowPartialSuccessAsync, getBuffer, reset, appendToBuffer, checkIsOpen）
- E-08: `src/io/BufferedReader.php` - バッファ付きリーダー実装（__construct, getHandle, readImpl, readAllowPartialSuccessAsync, readUntilAsync, readUntilxAsync, readLineAsync, readLinexAsync, linesIterator, readFixedSizeAsync, readByteAsync, isEndOfFile, fillBufferAsync）
- E-09: `src/io/BufferedReaderLineIterator.php` - 行イテレータ実装（__construct, next）
- E-10: `src/io/pipe.php` - パイプ生成関数（pipe, pipe_nd）
- E-11: `src/io/stdio.php` - 標準入出力関数（request_output, request_error, request_errorx, request_input）
- E-12: `src/io/ReadHandleConvenienceMethodsTrait.php` - 読み込み便利メソッドトレイト（readAllAsync, readFixedSizeAsync）
- E-13: `src/io/WriteHandleConvenienceMethodsTrait.php` - 書き込み便利メソッドトレイト（writeAllAsync）
- E-14: `src/io/intersection_interfaces.php` - 複合インターフェース定義
- E-15: `src/io/_Private/FileDescriptorHandle.php` - FDハンドル基底クラス（__construct, getFileDescriptor, selectAsync, close, closeWhenDisposed）
- E-16: `src/io/_Private/FileDescriptorReadHandleTrait.php` - FD読み込みトレイト（readImpl, readAllowPartialSuccessAsync）
- E-17: `src/io/_Private/FileDescriptorWriteHandleTrait.php` - FD書き込みトレイト（writeImpl, writeAllowPartialSuccessAsync）
- E-18: `src/io/_Private/PipeReadHandle.php` - パイプ読み込みハンドル（__construct）
- E-19: `src/io/_Private/PipeWriteHandle.php` - パイプ書き込みハンドル（__construct）
- E-20: `src/io/_Private/StdioReadHandle.php` - 標準入力ハンドル（__construct）
- E-21: `src/io/_Private/StdioWriteHandle.php` - 標準出力ハンドル（__construct）
- E-22: `src/io/_Private/RequestReadHandle.php` - リクエスト読み込みハンドル（readImpl, readAllowPartialSuccessAsync）
- E-23: `src/io/_Private/ResponseWriteHandle.php` - レスポンス書き込みハンドル（writeImpl, writeAllowPartialSuccessAsync）
- E-24: `src/io/_Private/CloseWhenDisposed.php` - Disposable実装（__construct, __dispose）
- E-25: `src/io/_Private/DEFAULT_READ_BUFFER_SIZE.php` - 定数定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | UT-IOP-001: MemoryHandle.__constructデフォルト初期化 | E-07 (L34-38) | ○ |
| C-02 | UT-IOP-002: MemoryHandle.__construct初期バッファ指定 | E-07 (L34-38) | ○ |
| C-03 | UT-IOP-003: MemoryHandle.__construct APPENDモード | E-07 (L16-19, L34-38) | ○ |
| C-04 | UT-IOP-004: MemoryHandle.closeクローズ処理 | E-07 (L40-43) | ○ |
| C-05 | UT-IOP-005: MemoryHandle.closeWhenDisposed | E-07 (L45-48) | ○ |
| C-06 | UT-IOP-006: MemoryHandle.readImpl基本読み込み | E-07 (L57-71) | ○ |
| C-07 | UT-IOP-007: MemoryHandle.readImpl全データ読み込み | E-07 (L57-71) | ○ |
| C-08 | UT-IOP-008: MemoryHandle.readImpl EOF処理 | E-07 (L63-65) | ○ |
| C-09 | UT-IOP-009: MemoryHandle.readImpl EBADF | E-07 (L58, L149-156) | ○ |
| C-10 | UT-IOP-010: MemoryHandle.readImpl引数検証 | E-07 (L61) | ○ |
| C-11 | UT-IOP-011: MemoryHandle.readAllowPartialSuccessAsync | E-07 (L50-55) | ○ |
| C-12 | UT-IOP-012: MemoryHandle.seekシーク操作 | E-07 (L73-79) | ○ |
| C-13 | UT-IOP-013: MemoryHandle.seek EOF超えシーク | E-07 (L76-78) | ○ |
| C-14 | UT-IOP-014: MemoryHandle.seek負位置エラー | E-07 (L76) | ○ |
| C-15 | UT-IOP-015: MemoryHandle.seek EBADF | E-07 (L74, L149-156) | ○ |
| C-16 | UT-IOP-016: MemoryHandle.tell位置取得 | E-07 (L81-84) | ○ |
| C-17 | UT-IOP-017: MemoryHandle.tell EBADF | E-07 (L82, L149-156) | ○ |
| C-18 | UT-IOP-018: MemoryHandle.writeImpl OVERWRITE | E-07 (L86-116) | ○ |
| C-19 | UT-IOP-019: MemoryHandle.writeImpl APPEND | E-07 (L94-98) | ○ |
| C-20 | UT-IOP-020: MemoryHandle.writeImplギャップ埋め | E-07 (L89-92) | ○ |
| C-21 | UT-IOP-021: MemoryHandle.writeImpl EBADF | E-07 (L87, L149-156) | ○ |
| C-22 | UT-IOP-022: MemoryHandle.writeAllowPartialSuccessAsync | E-07 (L118-123) | ○ |
| C-23 | UT-IOP-023: MemoryHandle.getBuffer | E-07 (L125-127) | ○ |
| C-24 | UT-IOP-024: MemoryHandle.resetリセット処理 | E-07 (L134-138) | ○ |
| C-25 | UT-IOP-025: MemoryHandle.reset空リセット | E-07 (L134-138) | ○ |
| C-26 | UT-IOP-026: MemoryHandle.appendToBuffer | E-07 (L144-147) | ○ |
| C-27 | UT-IOP-027: MemoryHandle.appendToBuffer EBADF | E-07 (L145, L149-156) | ○ |
| C-28 | UT-IOP-028: BufferedReader.__construct | E-08 (L27-28) | ○ |
| C-29 | UT-IOP-029: BufferedReader.getHandle | E-08 (L30-32) | ○ |
| C-30 | UT-IOP-030: BufferedReader.readImpl基本読み込み | E-08 (L38-63) | ○ |
| C-31 | UT-IOP-031: BufferedReader.readImpl EOF | E-08 (L44-46) | ○ |
| C-32 | UT-IOP-032: BufferedReader.readImpl引数検証 | E-08 (L39-42) | ○ |
| C-33 | UT-IOP-033: BufferedReader.readAllowPartialSuccessAsync | E-08 (L65-88) | ○ |
| C-34 | UT-IOP-034: BufferedReader.readAllowPartialSuccessAsyncタイムアウト検証 | E-08 (L73-76) | ○ |
| C-35 | UT-IOP-035: BufferedReader.readUntilAsync区切り読み込み | E-08 (L102-126) | ○ |
| C-36 | UT-IOP-036: BufferedReader.readUntilAsyncサフィックス未検出 | E-08 (L116-118) | ○ |
| C-37 | UT-IOP-037: BufferedReader.readUntilAsync空サフィックス | E-08 (L102-126) | ○ |
| C-38 | UT-IOP-038: BufferedReader.readUntilxAsync | E-08 (L133-142) | ○ |
| C-39 | UT-IOP-039: BufferedReader.readUntilxAsync EPIPE | E-08 (L135-140) | ○ |
| C-40 | UT-IOP-040: BufferedReader.readLineAsync行読み込み | E-08 (L165-182) | ○ |
| C-41 | UT-IOP-041: BufferedReader.readLineAsync改行なし | E-08 (L180-181) | ○ |
| C-42 | UT-IOP-042: BufferedReader.readLineAsync空入力 | E-08 (L181) | ○ |
| C-43 | UT-IOP-043: BufferedReader.readLineAsync EBADF | E-08 (L168-173) | ○ |
| C-44 | UT-IOP-044: BufferedReader.readLinexAsync | E-08 (L188-194) | ○ |
| C-45 | UT-IOP-045: BufferedReader.readLinexAsync EPIPE | E-08 (L193) | ○ |
| C-46 | UT-IOP-046: BufferedReader.linesIterator | E-08 (L206-208) | ○ |
| C-47 | UT-IOP-047: BufferedReader.readFixedSizeAsync | E-08 (L211-249) | ○ |
| C-48 | UT-IOP-048: BufferedReader.readFixedSizeAsync EPIPE | E-08 (L231-234) | ○ |
| C-49 | UT-IOP-049: BufferedReader.readFixedSizeAsync ETIMEDOUT | E-08 (L215-223) | ○ |
| C-50 | UT-IOP-050: BufferedReader.readByteAsync | E-08 (L255-275) | ○ |
| C-51 | UT-IOP-051: BufferedReader.readByteAsync EPIPE | E-08 (L265-267) | ○ |
| C-52 | UT-IOP-052: BufferedReader.readByteAsyncタイムアウト検証 | E-08 (L258-261) | ○ |
| C-53 | UT-IOP-053: BufferedReader.isEndOfFile EOF true | E-08 (L288-318) | ○ |
| C-54 | UT-IOP-054: BufferedReader.isEndOfFile false | E-08 (L292-294) | ○ |
| C-55 | UT-IOP-055: BufferedReader.isEndOfFile EBADF | E-08 (L310-314) | ○ |
| C-56 | UT-IOP-056: BufferedReaderLineIterator.__construct | E-09 (L15-17) | ○ |
| C-57 | UT-IOP-057: BufferedReaderLineIterator.next | E-09 (L19-25) | ○ |
| C-58 | UT-IOP-058: BufferedReaderLineIterator.next EOF | E-09 (L21-22) | ○ |
| C-59 | UT-IOP-059: pipe()パイプ生成 | E-10 (L20-26) | ○ |
| C-60 | UT-IOP-060: pipe()通信テスト | E-10 (L20-26) | ○ |
| C-61 | UT-IOP-061: pipe_nd()非推奨 | E-10 (L29-32) | ○ |
| C-62 | UT-IOP-062: request_output() | E-11 (L25-35) | ○ |
| C-63 | UT-IOP-063: request_output()メモ化 | E-11 (L25) | ○ |
| C-64 | UT-IOP-064: request_output() EBADF | E-11 (L29-33) | ○ |
| C-65 | UT-IOP-065: request_error() | E-11 (L46-55) | ○ |
| C-66 | UT-IOP-066: request_error() EBADF | E-11 (L49-52) | ○ |
| C-67 | UT-IOP-067: request_errorx() | E-11 (L66-68) | ○ |
| C-68 | UT-IOP-068: request_errorx() EBADF | E-11 (L66-68) | ○ |
| C-69 | UT-IOP-069: request_input() | E-11 (L77-87) | ○ |
| C-70 | UT-IOP-070: request_input()メモ化 | E-11 (L77) | ○ |
| C-71 | UT-IOP-071: request_input() EBADF | E-11 (L81-85) | ○ |
| C-72 | UT-IOP-072: ReadHandleConvenienceMethodsTrait.readAllAsync | E-12 (L22-60) | ○ |
| C-73 | UT-IOP-073: ReadHandleConvenienceMethodsTrait.readAllAsync max_bytes | E-12 (L26-29) | ○ |
| C-74 | UT-IOP-074: ReadHandleConvenienceMethodsTrait.readAllAsync引数検証 | E-12 (L26-29) | ○ |
| C-75 | UT-IOP-075: ReadHandleConvenienceMethodsTrait.readAllAsyncタイムアウト検証 | E-12 (L30-33) | ○ |
| C-76 | UT-IOP-076: ReadHandleConvenienceMethodsTrait.readAllAsync ETIMEDOUT | E-12 (L38-46) | ○ |
| C-77 | UT-IOP-077: ReadHandleConvenienceMethodsTrait.readFixedSizeAsync | E-12 (L62-76) | ○ |
| C-78 | UT-IOP-078: ReadHandleConvenienceMethodsTrait.readFixedSizeAsync EPIPE | E-12 (L67-73) | ○ |
| C-79 | UT-IOP-079: WriteHandleConvenienceMethodsTrait.writeAllAsync | E-13 (L22-65) | ○ |
| C-80 | UT-IOP-080: WriteHandleConvenienceMethodsTrait.writeAllAsync空文字列 | E-13 (L26-28) | ○ |
| C-81 | UT-IOP-081: WriteHandleConvenienceMethodsTrait.writeAllAsyncタイムアウト検証 | E-13 (L30-33) | ○ |
| C-82 | UT-IOP-082: WriteHandleConvenienceMethodsTrait.writeAllAsync EPIPE | E-13 (L57-63) | ○ |
| C-83 | UT-IOP-083: FileDescriptorHandle.__construct | E-15 (L19-23) | ○ |
| C-84 | UT-IOP-084: FileDescriptorHandle.getFileDescriptor | E-15 (L25-27) | ○ |
| C-85 | UT-IOP-085: FileDescriptorHandle.close | E-15 (L52-54) | ○ |
| C-86 | UT-IOP-086: FileDescriptorHandle.closeWhenDisposed | E-15 (L56-59) | ○ |
| C-87 | UT-IOP-087: FileDescriptorHandle.selectAsync | E-15 (L29-50) | ○ |
| C-88 | UT-IOP-088: FileDescriptorHandle.selectAsync EBADFD | E-15 (L38-40) | ○ |
| C-89 | UT-IOP-089: FileDescriptorHandle.selectAsync ENOTSUP | E-15 (L42-47) | ○ |
| C-90 | UT-IOP-090: FileDescriptorReadHandleTrait.readImpl | E-16 (L20-25) | ○ |
| C-91 | UT-IOP-091: FileDescriptorReadHandleTrait.readImplデフォルトサイズ | E-16 (L21) | ○ |
| C-92 | UT-IOP-092: FileDescriptorReadHandleTrait.readImpl引数検証 | E-16 (L23) | ○ |
| C-93 | UT-IOP-093: FileDescriptorReadHandleTrait.readAllowPartialSuccessAsync | E-16 (L27-48) | ○ |
| C-94 | UT-IOP-094: FileDescriptorReadHandleTrait.readAllowPartialSuccessAsyncブロッキング | E-16 (L40-47) | ○ |
| C-95 | UT-IOP-095: FileDescriptorReadHandleTrait.readAllowPartialSuccessAsyncタイムアウト検証 | E-16 (L34-37) | ○ |
| C-96 | UT-IOP-096: FileDescriptorWriteHandleTrait.writeImpl | E-17 (L20-22) | ○ |
| C-97 | UT-IOP-097: FileDescriptorWriteHandleTrait.writeAllowPartialSuccessAsync | E-17 (L24-41) | ○ |
| C-98 | UT-IOP-098: FileDescriptorWriteHandleTrait.writeAllowPartialSuccessAsyncブロッキング | E-17 (L34-40) | ○ |
| C-99 | UT-IOP-099: FileDescriptorWriteHandleTrait.writeAllowPartialSuccessAsyncタイムアウト検証 | E-17 (L28-31) | ○ |
| C-100 | UT-IOP-100: PipeReadHandle.__construct | E-18 (L19-21) | ○ |
| C-101 | UT-IOP-101: PipeWriteHandle.__construct | E-19 (L20-22) | ○ |
| C-102 | UT-IOP-102: StdioReadHandle.__construct | E-20 (L20-22) | ○ |
| C-103 | UT-IOP-103: StdioWriteHandle.__construct | E-21 (L20-22) | ○ |
| C-104 | UT-IOP-104: RequestReadHandle.readImpl | E-22 (L19-23) | ○ |
| C-105 | UT-IOP-105: RequestReadHandle.readImplデフォルトサイズ | E-22 (L20) | ○ |
| C-106 | UT-IOP-106: RequestReadHandle.readImpl引数検証 | E-22 (L21) | ○ |
| C-107 | UT-IOP-107: RequestReadHandle.readAllowPartialSuccessAsync | E-22 (L25-30) | ○ |
| C-108 | UT-IOP-108: ResponseWriteHandle.writeImpl | E-23 (L18-20) | ○ |
| C-109 | UT-IOP-109: ResponseWriteHandle.writeAllowPartialSuccessAsync | E-23 (L22-27) | ○ |
| C-110 | UT-IOP-110: CloseWhenDisposed.__construct | E-24 (L17-19) | ○ |
| C-111 | UT-IOP-111: CloseWhenDisposed.__dispose | E-24 (L21-23) | ○ |
| C-112 | UT-IOP-112: DEFAULT_READ_BUFFER_SIZE定数 | E-25 (L13) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - 全てのテストケースはソースコードから直接抽出された根拠に基づいています

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードに直接対応しており、信頼性は高い
- 注意点：
  - 非同期処理（Awaitable）のテストは実行環境に依存する部分がある
  - OS固有の挙動（epoll/kqueueの違い等）は環境によって異なる可能性がある
  - HTTP環境とCLI環境で挙動が異なる関数（request_output等）のテストには環境設定が必要

## 6) レビュアーチェックリスト（最小）
- [ ] MemoryHandle関連テスト（UT-IOP-001〜027）：インメモリバッファの読み書き・シーク操作の網羅性を確認
- [ ] BufferedReader関連テスト（UT-IOP-028〜055）：バッファ付き読み込み、行読み込み、EOF処理の網羅性を確認
- [ ] パイプ関連テスト（UT-IOP-059〜061）：プロセス間通信の基本動作確認
- [ ] 標準入出力関連テスト（UT-IOP-062〜071）：CLI/HTTP環境での挙動差異を考慮したテスト設計の妥当性確認
- [ ] エラーハンドリングテスト：EBADF、EPIPE、ETIMEDOUTなどの例外処理が適切にテストされているか確認
- [ ] 境界値テスト：空文字列、0バイト、負値などのエッジケースが網羅されているか確認
