---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 134
  claims_with_evidence: 134
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：nu-plugin-core.csv

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `crates/nu-plugin-core/src/lib.rs` - モジュール構造・公開API定義
- E-02: `crates/nu-plugin-core/src/serializers/mod.rs` - Encoder/EncodingType定義
- E-03: `crates/nu-plugin-core/src/serializers/json.rs` - JsonSerializer実装
- E-04: `crates/nu-plugin-core/src/serializers/msgpack.rs` - MsgPackSerializer実装
- E-05: `crates/nu-plugin-core/src/serializers/tests.rs` - シリアライザテストマクロ
- E-06: `crates/nu-plugin-core/src/communication_mode/mod.rs` - CommunicationMode実装
- E-07: `crates/nu-plugin-core/src/communication_mode/local_socket/mod.rs` - LocalSocket実装
- E-08: `crates/nu-plugin-core/src/communication_mode/local_socket/tests.rs` - LocalSocketテスト
- E-09: `crates/nu-plugin-core/src/interface/mod.rs` - Interface/InterfaceManager定義
- E-10: `crates/nu-plugin-core/src/interface/tests.rs` - Interfaceテスト
- E-11: `crates/nu-plugin-core/src/interface/stream/mod.rs` - StreamManager/StreamReader/StreamWriter実装
- E-12: `crates/nu-plugin-core/src/interface/stream/tests.rs` - Streamテスト
- E-13: `crates/nu-plugin-core/src/interface/test_util.rs` - TestCase実装
- E-14: `crates/nu-plugin-core/src/util/waitable.rs` - Waitable/WaitableMut実装
- E-15: `crates/nu-plugin-core/src/util/with_custom_values_in.rs` - with_custom_values_in実装

## 3) Claims と根拠の対応（レビューの主戦場）

### シリアライザモジュール（UT-NPC-001 〜 UT-NPC-016）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | EncodingType::try_from_bytesがb"json"でJsonSerializerを返す | E-02 (L44-47) | ○ |
| C-02 | EncodingType::try_from_bytesがb"msgpack"でMsgPackSerializerを返す | E-02 (L47-48) | ○ |
| C-03 | EncodingType::try_from_bytesが不正入力でNoneを返す | E-02 (L48-49) | ○ |
| C-04 | EncodingType::try_from_bytesが空入力でNoneを返す | E-02 (L48-49) | ○ |
| C-05 | JsonSerializer::encodeがPluginInputをエンコードする | E-03 (L25-39) | ○ |
| C-06 | JsonSerializer::encodeが改行で終わる | E-03 (L32, L117-127) | ○ |
| C-07 | JsonSerializer::encodeが余分な改行を含まない | E-03 (L129-146) | ○ |
| C-08 | JsonSerializer::decodeが有効JSONをデコードする | E-03 (L41-49) | ○ |
| C-09 | JsonSerializer::decodeがEOFでNoneを返す | E-03 (L95-97), E-05 (L14-25) | ○ |
| C-10 | JsonSerializer::decodeがI/OエラーでShellError::Ioを返す | E-03 (L98-103), E-05 (L27-53) | ○ |
| C-11 | JsonSerializer::decodeが不正JSONでPluginFailedToDecodeを返す | E-03 (L105-107), E-05 (L55-83) | ○ |
| C-12 | MsgPackSerializer::encodeがPluginInputをエンコードする | E-04 (L25-32) | ○ |
| C-13 | MsgPackSerializer::decodeが有効MsgPackをデコードする | E-04 (L34-42) | ○ |
| C-14 | MsgPackSerializer::decodeがEOFでNoneを返す | E-04 (L87-91), E-05 (L14-25) | ○ |
| C-15 | MsgPackSerializer::decodeがI/OエラーでShellError::Ioを返す | E-04 (L92-100), E-05 (L27-53) | ○ |
| C-16 | MsgPackSerializer::decodeが不正MsgPackでPluginFailedToDecodeを返す | E-04 (L103-107), E-05 (L55-83) | ○ |

### CommunicationModeモジュール（UT-NPC-017 〜 UT-NPC-031）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | CommunicationMode::args がStdioで--stdioを返す | E-06 (L51-54) | ○ |
| C-18 | CommunicationMode::args がLocalSocketで--local-socketとパスを返す | E-06 (L54-58) | ○ |
| C-19 | CommunicationMode::setup_command_ioがStdioでPipedを設定 | E-06 (L63-67) | ○ |
| C-20 | CommunicationMode::setup_command_ioがLocalSocketでInheritを設定 | E-06 (L68-75) | ○ |
| C-21 | CommunicationMode::serveがStdioでサーバー準備完了 | E-06 (L78-81) | ○ |
| C-22 | CommunicationMode::serveがLocalSocketでリスナー作成 | E-06 (L83-100) | ○ |
| C-23 | CommunicationMode::connect_as_clientがStdioでstdin/stdout取得 | E-06 (L104-109) | ○ |
| C-24 | CommunicationMode::connect_as_clientがLocalSocketでソケット接続 | E-06 (L110-136) | ○ |
| C-25 | PreparedServerCommunication::connectがStdioでstdin/stdout取得 | E-06 (L156-172) | ○ |
| C-26 | PreparedServerCommunication::connectがstdinなしでエラー | E-06 (L158-163) | ○ |
| C-27 | PreparedServerCommunication::connectがstdoutなしでエラー | E-06 (L165-170) | ○ |
| C-28 | make_local_socket_nameがPIDを含む | E-07 (L12-24), E-08 (L3-10) | ○ |
| C-29 | make_local_socket_nameがunique_idを含む | E-07 (L12-24), E-08 (L12-19) | ○ |
| C-30 | is_would_block_errがWouldBlockでtrue | E-07 (L58-60) | ○ |
| C-31 | is_would_block_errが他エラーでfalse | E-07 (L58-60) | ○ |

### Interfaceモジュール（UT-NPC-032 〜 UT-NPC-053）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | PluginRead (R, E)::readがデータをデコード | E-09 (L39-47) | ○ |
| C-33 | PluginRead (R, E)::readがEOFでNone | E-09 (L39-47) | ○ |
| C-34 | PluginWrite (Stdout, E)::writeがstdoutにエンコード書き込み | E-09 (L73-80) | ○ |
| C-35 | PluginWrite (Stdout, E)::flushがstdoutをフラッシュ | E-09 (L82-89) | ○ |
| C-36 | PluginWrite (Stdout, E)::is_stdoutがtrue | E-09 (L92-94) | ○ |
| C-37 | PluginWrite (Mutex<W>, E)::writeがMutex経由で書き込み | E-09 (L97-107) | ○ |
| C-38 | PluginWrite (Mutex<W>, E)::writeがpoisonedでエラー | E-09 (L103-105) | ○ |
| C-39 | InterfaceManager::read_pipeline_dataがEmptyでEmpty返却 | E-09 (L186-187), E-10 (L125-134) | ○ |
| C-40 | InterfaceManager::read_pipeline_dataがValueでValue返却 | E-09 (L188), E-10 (L136-156) | ○ |
| C-41 | InterfaceManager::read_pipeline_dataがListStreamでListStream返却 | E-09 (L189-193), E-10 (L158-200) | ○ |
| C-42 | InterfaceManager::read_pipeline_dataがByteStreamでByteStream返却 | E-09 (L195-201), E-10 (L202-269) | ○ |
| C-43 | InterfaceManager::read_pipeline_dataがprepare_pipeline_dataを呼び出す | E-09 (L186), E-10 (L271-297) | ○ |
| C-44 | Interface::init_write_pipeline_dataがEmptyでEmpty/None | E-09 (L266), E-10 (L300-317) | ○ |
| C-45 | Interface::init_write_pipeline_dataがValueでValue/None | E-09 (L262-265), E-10 (L319-342) | ○ |
| C-46 | Interface::init_write_pipeline_dataがListStreamでListStream/ListStream | E-09 (L267-276), E-10 (L366-421) | ○ |
| C-47 | Interface::init_write_pipeline_dataがByteStreamでByteStream/ByteStream | E-09 (L278-293), E-10 (L423-486) | ○ |
| C-48 | Interface::init_write_pipeline_dataがprepare_pipeline_dataを呼び出す | E-09 (L261), E-10 (L344-364) | ○ |
| C-49 | PipelineDataWriter::writeがNoneで何もせずOk | E-09 (L330) | ○ |
| C-50 | PipelineDataWriter::writeがListStreamでストリーム書き込み | E-09 (L332-335) | ○ |
| C-51 | PipelineDataWriter::writeがByteStreamでバイト書き込み | E-09 (L337-345) | ○ |
| C-52 | PipelineDataWriter::write_backgroundがNoneでスレッドなし | E-09 (L356) | ○ |
| C-53 | PipelineDataWriter::write_backgroundがListStreamでスレッド起動 | E-09 (L357-376) | ○ |

### Streamモジュール（UT-NPC-054 〜 UT-NPC-107）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | StreamReader::newが正しく初期化 | E-11 (L46-57) | ○ |
| C-55 | StreamReader::recvがListメッセージ受信 | E-11 (L64-102), E-12 (L74-85) | ○ |
| C-56 | StreamReader::recvがRawメッセージ受信 | E-11 (L64-102), E-12 (L104-116) | ○ |
| C-57 | StreamReader::recvがAck送信 | E-11 (L89-90), E-12 (L137-162) | ○ |
| C-58 | StreamReader::recvがストリーム終端でNone | E-11 (L93-97), E-12 (L164-178) | ○ |
| C-59 | StreamReader::recvが切断でエラー | E-11 (L65-71, L84) | ○ |
| C-60 | StreamReader::recvが型変換失敗でエラー | E-11 (L92), E-12 (L87-102, L118-134) | ○ |
| C-61 | StreamReader (Iterator)::nextが値取得 | E-11 (L112-122) | ○ |
| C-62 | StreamReader (Iterator)::nextがエラー時fromShellError結果 | E-11 (L116-119) | ○ |
| C-63 | StreamReader (Iterator)::nextがエラー後None | E-11 (L126-131), E-12 (L180-193) | ○ |
| C-64 | StreamReader (Drop)::dropがDropメッセージ送信 | E-11 (L137-145), E-12 (L195-220) | ○ |
| C-65 | StreamWriter::newが正しく初期化 | E-11 (L182-189) | ○ |
| C-66 | StreamWriter::is_droppedがドロップ状態取得 | E-11 (L193-195) | ○ |
| C-67 | StreamWriter::is_droppedがドロップ後true | E-11 (L193-195) | ○ |
| C-68 | StreamWriter::writeがデータ書き込み | E-11 (L201-227) | ○ |
| C-69 | StreamWriter::writeが書き込み後フラッシュ | E-11 (L209) | ○ |
| C-70 | StreamWriter::writeが高圧力マーク時wait_for_drain呼び出し | E-11 (L210-215) | ○ |
| C-71 | StreamWriter::writeがend後エラー | E-11 (L216-226), E-12 (L266-284) | ○ |
| C-72 | StreamWriter::write_allが全要素書き込み | E-11 (L238-255) | ○ |
| C-73 | StreamWriter::write_allがドロップ時早期終了 | E-11 (L243-252), E-12 (L222-264) | ○ |
| C-74 | StreamWriter::endがEndメッセージ送信 | E-11 (L260-270), E-12 (L266-284) | ○ |
| C-75 | StreamWriter::endが2回目で何もしない | E-11 (L267-269), E-12 (L275) | ○ |
| C-76 | StreamWriter (Drop)::dropがEnd送信 | E-11 (L277-282) | ○ |
| C-77 | StreamWriterSignal::newが正しく初期化 | E-11 (L309-319) | ○ |
| C-78 | StreamWriterSignal::is_droppedが初期状態false | E-11 (L330-332), E-12 (L286-293) | ○ |
| C-79 | StreamWriterSignal::set_droppedがdropped設定 | E-11 (L335-340), E-12 (L286-293) | ○ |
| C-80 | StreamWriterSignal::set_droppedが待機スレッド通知 | E-11 (L339), E-12 (L339-357) | ○ |
| C-81 | StreamWriterSignal::notify_sentが未確認数インクリメント | E-11 (L346-356) | ○ |
| C-82 | StreamWriterSignal::notify_sentが高圧力マーク未満でtrue | E-11 (L356), E-12 (L295-303) | ○ |
| C-83 | StreamWriterSignal::notify_sentが高圧力マーク以上でfalse | E-11 (L356), E-12 (L295-303) | ○ |
| C-84 | StreamWriterSignal::notify_sentがオーバーフロー時エラー | E-11 (L351-354) | ○ |
| C-85 | StreamWriterSignal::wait_for_drainがブロック | E-11 (L360-370), E-12 (L317-337) | ○ |
| C-86 | StreamWriterSignal::wait_for_drainがドロップ時解除 | E-11 (L362), E-12 (L339-357) | ○ |
| C-87 | StreamWriterSignal::notify_acknowledgedが未確認数デクリメント | E-11 (L375-386) | ○ |
| C-88 | StreamWriterSignal::notify_acknowledgedが待機スレッド通知 | E-11 (L385), E-12 (L305-315) | ○ |
| C-89 | StreamWriterSignal::notify_acknowledgedがアンダーフロー時エラー | E-11 (L380-383) | ○ |
| C-90 | StreamManager::newが正しく初期化 | E-11 (L420-424) | ○ |
| C-91 | StreamManager::get_handleがハンドル取得 | E-11 (L431-435) | ○ |
| C-92 | StreamManager::handle_messageがDataメッセージ処理 | E-11 (L441-452), E-12 (L359-391) | ○ |
| C-93 | StreamManager::handle_messageが未知IDへのDataでエラー | E-11 (L448-451) | ○ |
| C-94 | StreamManager::handle_messageがEndメッセージ処理 | E-11 (L454-464), E-12 (L359-391) | ○ |
| C-95 | StreamManager::handle_messageが未知IDへのEndでエラー | E-11 (L460-463) | ○ |
| C-96 | StreamManager::handle_messageがDropメッセージ処理 | E-11 (L466-475), E-12 (L453-502) | ○ |
| C-97 | StreamManager::handle_messageが存在しないDropでOk | E-11 (L474-475) | ○ |
| C-98 | StreamManager::handle_messageがAckメッセージ処理 | E-11 (L477-489), E-12 (L453-502) | ○ |
| C-99 | StreamManager::handle_messageが存在しないAckでOk | E-11 (L487-488) | ○ |
| C-100 | StreamManager::broadcast_read_errorが全ストリームにエラー送信 | E-11 (L495-502), E-12 (L504-536) | ○ |
| C-101 | StreamManager (Drop)::dropが全書き込みストリームドロップ通知 | E-11 (L507-517, L527-530), E-12 (L538-551) | ○ |
| C-102 | StreamManagerHandle::read_streamがストリーム登録 | E-11 (L566-591), E-12 (L359-391) | ○ |
| C-103 | StreamManagerHandle::read_streamが重複IDでエラー | E-11 (L577-588) | ○ |
| C-104 | StreamManagerHandle::read_streamがManager解放済みでエラー | E-11 (L551-556) | ○ |
| C-105 | StreamManagerHandle::write_streamがストリーム登録 | E-11 (L600-629), E-12 (L453-502) | ○ |
| C-106 | StreamManagerHandle::write_streamが重複IDでエラー | E-11 (L616-626) | ○ |
| C-107 | StreamManagerHandle::write_streamがManager解放済みでエラー | E-11 (L551-556) | ○ |

### Waitableモジュール（UT-NPC-108 〜 UT-NPC-121）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-108 | WaitableMut::newが正しく初期化 | E-14 (L49-59) | ○ |
| C-109 | WaitableMut::readerがWaitable取得 | E-14 (L62-66) | ○ |
| C-110 | WaitableMut::setが値設定 | E-14 (L70-76), E-14 (L147-162) | ○ |
| C-111 | WaitableMut::setが待機スレッド通知 | E-14 (L74), E-14 (L147-162) | ○ |
| C-112 | WaitableMut (Clone)::cloneがwritersインクリメント | E-14 (L86-94) | ○ |
| C-113 | WaitableMut (Drop)::dropがwritersデクリメント | E-14 (L98-109) | ○ |
| C-114 | WaitableMut (Drop)::dropが待機スレッド通知 | E-14 (L107), E-14 (L164-181) | ○ |
| C-115 | Waitable::getが値返却 | E-14 (L117-119), E-14 (L147-162) | ○ |
| C-116 | Waitable::getが値未設定時待機 | E-14 (L123-129), E-14 (L147-162) | ○ |
| C-117 | Waitable::getがwriter無し・値無しでNone | E-14 (L120-122), E-14 (L164-181) | ○ |
| C-118 | Waitable::try_getが値設定時返却 | E-14 (L136-138) | ○ |
| C-119 | Waitable::try_getが値未設定時None | E-14 (L136-138) | ○ |
| C-120 | Waitable::is_setが値設定時true | E-14 (L142-144), E-14 (L160) | ○ |
| C-121 | Waitable::is_setが値未設定時false | E-14 (L142-144), E-14 (L152) | ○ |

### with_custom_values_inモジュール（UT-NPC-122 〜 UT-NPC-127）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-122 | with_custom_values_inがCustomValueにコールバック呼び出し | E-15 (L8-25, L56-64) | ○ |
| C-123 | with_custom_values_inがネストされたCustomValueに呼び出し | E-15 (L8-25, L28-55) | ○ |
| C-124 | with_custom_values_inがリスト内CustomValueに呼び出し | E-15 (L8-25, L28-55) | ○ |
| C-125 | with_custom_values_inがクロージャ内CustomValueに呼び出し | E-15 (L8-25, L28-55) | ○ |
| C-126 | with_custom_values_inがCustomValue無しでコールバック無呼び出し | E-15 (L17-22) | ○ |
| C-127 | with_custom_values_inがエラー伝播 | E-15 (L10-11) | ○ |

### TestCaseモジュール（UT-NPC-128 〜 UT-NPC-134）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-128 | TestCase::newが正しく初期化 | E-13 (L72-77) | ○ |
| C-129 | TestCase::addが入力データ追加 | E-13 (L85-87) | ○ |
| C-130 | TestCase::clearがバッファクリア | E-13 (L80-82) | ○ |
| C-131 | TestCase::next_writtenが書き込みデータ取得 | E-13 (L105-107) | ○ |
| C-132 | TestCase::set_read_errorがreadエラー設定 | E-13 (L95-97) | ○ |
| C-133 | TestCase::set_write_errorがwriteエラー設定 | E-13 (L100-102) | ○ |
| C-134 | TestCase::was_flushedがフラッシュ状態取得 | E-13 (L115-117) | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし
  - 全てのテストケースはソースコードの実装に基づいて生成されており、根拠が存在する

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースに根拠あり

### 注意点
1. **local-socket機能フラグ**: UT-NPC-018〜024, 028〜031はlocal-socket機能が有効な場合のみ実行可能
2. **プラットフォーム依存**: make_local_socket_nameとis_would_block_errはUnix/Windowsで実装が異なる
3. **既存テストとの重複**: 既存のテストコード（E-05, E-08, E-10, E-12）と一部重複するケースあり

## 6) レビュアーチェックリスト（最小）
- [ ] シリアライザ（JSON/MsgPack）のエンコード・デコードテストケースが網羅的か確認
- [ ] フロー制御（StreamWriterSignal）のテストケースが並行性を考慮しているか確認
- [ ] エラーハンドリングのテストケースが全てのエラーパスをカバーしているか確認
- [ ] local-socket機能のテストケースがプラットフォーム依存を適切に考慮しているか確認
- [ ] Waitable/WaitableMutの並行アクセステストケースが適切か確認
