---
generated_at: 2026-02-17 23:15:00
metrics:
  claims_total: 110
  claims_with_evidence: 108
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート：lib-windows.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：108 / 110、根拠なし：2
- 優先レビュー（高）
  1. **UT-WIN-037/038/039**：inet_ntop_emulated関数のテストケースは、Windows XP環境での動作確認が必要であり、現代のテスト環境で検証困難
  2. **UT-WIN-105/106/107**：ファイバー関連APIのテストケースは、実行環境への依存が強い

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

- E-01: `lib/windows/registry.nim` - レジストリ操作モジュール（行1-83）
- E-02: `lib/windows/winlean.nim` - Windows API軽量ラッパー（行1-1069）
- E-03: `lib/windows/registry.nim` 内 `getUnicodeValue` プロシージャ（行49-72）
- E-04: `lib/windows/registry.nim` 内 `setUnicodeValue` プロシージャ（行78-82）
- E-05: `lib/windows/winlean.nim` 内 `isSuccess` 関数（行140-143）
- E-06: `lib/windows/winlean.nim` 内 `rdFileTime` 関数（行338-339）
- E-07: `lib/windows/winlean.nim` 内 `rdFileSize` 関数（行341-342）
- E-08: `lib/windows/winlean.nim` 内 `FD_ISSET` 関数（行557-558）
- E-09: `lib/windows/winlean.nim` 内 `FD_SET` 関数（行560-563）
- E-10: `lib/windows/winlean.nim` 内 `FD_ZERO` 関数（行565-566）
- E-11: `lib/windows/winlean.nim` 内 `toFILETIME` 関数（行1019-1021）
- E-12: `lib/windows/winlean.nim` 内 `inet_ntop` 関数（行869-881）
- E-13: `lib/windows/winlean.nim` 内 `inet_ntop_emulated` 関数（行842-867）
- E-14: `lib/windows/winlean.nim` 内 `hasOverlappedIoCompleted` テンプレート（行758-759）
- E-15: `lib/windows/winlean.nim` 内 SocketHandle 型と `==` 演算子（行375-376, 477）
- E-16: `lib/windows/winlean.nim` 内 各種Windows API宣言（行151-1066）
- E-17: Windows API公式ドキュメント（暗黙参照）

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

### registry.nim関連テストケース

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-WIN-001) | getUnicodeValueで存在するレジストリキーから値を取得できる | E-01, E-03 | ○ |
| C-02 (UT-WIN-002) | HKEY_LOCAL_MACHINEから値を取得できる | E-01, E-03 | ○ |
| C-03 (UT-WIN-003) | 64ビットレジストリビューからの取得 | E-03 (KEY_WOW64_64KEYフラグ使用) | ○ |
| C-04 (UT-WIN-004) | 存在しないパスでの異常系処理 | E-03 (regGetValueのエラー処理) | ○ |
| C-05 (UT-WIN-005) | 存在しない値名での異常系処理 | E-03 | ○ |
| C-06 (UT-WIN-006) | 空文字列のパスの境界値処理 | E-03 | ○ |
| C-07 (UT-WIN-007) | 空文字列の値名の境界値処理 | E-03 | ○ |
| C-08 (UT-WIN-008) | 非常に長いパスの境界値処理 | E-03 | ○ |
| C-09 (UT-WIN-009) | setUnicodeValueで新規レジストリ値を設定 | E-01, E-04 | ○ |
| C-10 (UT-WIN-010) | 既存のレジストリ値を上書き | E-04 | ○ |
| C-11 (UT-WIN-011) | Unicode文字を含む値を設定 | E-04 (WideCString使用) | ○ |
| C-12 (UT-WIN-012) | 書き込み権限がない場合の異常系 | E-04 (call テンプレートでraiseOSError) | ○ |
| C-13 (UT-WIN-013) | 空文字列の設定の境界値 | E-04 | ○ |
| C-14 (UT-WIN-014) | 非常に長い値の境界値 | E-04 | ○ |

### winlean.nim - ユーティリティ関数

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-15 (UT-WIN-015) | isSuccessで非ゼロ値がtrueを返す | E-05 (行140-143: `a != 0`) | ○ |
| C-16 (UT-WIN-016) | isSuccessでゼロ値がfalseを返す | E-05 | ○ |
| C-17 (UT-WIN-017) | isSuccessで負の値がtrueを返す | E-05 | ○ |
| C-18 (UT-WIN-018) | rdFileTimeでFILETIMEをint64に変換 | E-06 | ○ |
| C-19 (UT-WIN-019) | rdFileTimeで最大値を変換 | E-06 | ○ |
| C-20 (UT-WIN-020) | rdFileTimeでゼロ値を変換 | E-06 | ○ |
| C-21 (UT-WIN-021) | rdFileSizeでファイルサイズ取得 | E-07 | ○ |
| C-22 (UT-WIN-022) | rdFileSizeで4GB以上のサイズ取得 | E-07 | ○ |
| C-23 (UT-WIN-023) | rdFileSizeでゼロサイズ | E-07 | ○ |

### winlean.nim - ソケット関連

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 (UT-WIN-024) | FD_ISSETでソケットが含まれている場合 | E-08 | ○ |
| C-25 (UT-WIN-025) | FD_ISSETでソケットが含まれていない場合 | E-08 | ○ |
| C-26 (UT-WIN-026) | FD_SETでソケット追加 | E-09 | ○ |
| C-27 (UT-WIN-027) | FD_SETでセット満杯時の処理 | E-09 (if s.fd_count < FD_SETSIZE) | ○ |
| C-28 (UT-WIN-028) | FD_ZEROでセットクリア | E-10 | ○ |
| C-29 (UT-WIN-029) | FD_ZEROで既に空のセット | E-10 | ○ |

### winlean.nim - 時間変換

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 (UT-WIN-030) | toFILETIMEでint64からFILETIME変換 | E-11 | ○ |
| C-31 (UT-WIN-031) | toFILETIMEでゼロ値変換 | E-11 | ○ |
| C-32 (UT-WIN-032) | toFILETIMEで最大値変換 | E-11 | ○ |

### winlean.nim - ネットワーク関連

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 (UT-WIN-033) | inet_ntopでIPv4アドレス変換 | E-12 | ○ |
| C-34 (UT-WIN-034) | inet_ntopでIPv6アドレス変換 | E-12 | ○ |
| C-35 (UT-WIN-035) | inet_ntopで不正なファミリ | E-12, E-13 | ○ |
| C-36 (UT-WIN-036) | inet_ntopでバッファ不足 | E-12 | ○ |
| C-37 (UT-WIN-037) | inet_ntop_emulatedでIPv4変換 | E-13 | △ |
| C-38 (UT-WIN-038) | inet_ntop_emulatedでIPv6変換 | E-13 | △ |
| C-39 (UT-WIN-039) | inet_ntop_emulatedで不正ファミリ | E-13 (setLastError呼び出し) | ○ |

### winlean.nim - オーバーラップIO

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 (UT-WIN-040) | hasOverlappedIoCompletedで完了判定 | E-14 | ○ |
| C-41 (UT-WIN-041) | hasOverlappedIoCompletedで保留判定 | E-14 | ○ |

### winlean.nim - ソケットハンドル

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 (UT-WIN-042) | SocketHandleの同値比較 | E-15 | ○ |
| C-43 (UT-WIN-043) | SocketHandleの非同値比較 | E-15 | ○ |

### winlean.nim - ハンドル操作

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 (UT-WIN-044) | closeHandleで有効なハンドルを閉じる | E-16 (行151-152) | ○ |
| C-45 (UT-WIN-045) | closeHandleで無効なハンドル | E-16 | ○ |
| C-46 (UT-WIN-046) | getLastErrorでエラーコード取得 | E-16 (行211-212) | ○ |
| C-47 (UT-WIN-047) | setLastErrorでエラーコード設定 | E-16 (行214-215) | ○ |
| C-48-50 (UT-WIN-048-050) | getStdHandleで標準ハンドル取得 | E-16 (行204-205) | ○ |

### winlean.nim - タイミング・待機

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 (UT-WIN-051) | sleepでスリープ | E-16 (行347-348) | ○ |
| C-52 (UT-WIN-052) | sleepでゼロミリ秒 | E-16 | ○ |
| C-53 (UT-WIN-053) | waitForSingleObjectで待機成功 | E-16 (行195-196) | ○ |
| C-54 (UT-WIN-054) | waitForSingleObjectでタイムアウト | E-16 | ○ |
| C-55 (UT-WIN-055) | waitForSingleObjectで無効ハンドル | E-16 | ○ |

### winlean.nim - パイプ操作

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-56 (UT-WIN-056) | createPipeでパイプ作成 | E-16 (行163-166) | ○ |
| C-57 (UT-WIN-057) | createPipeでサイズゼロ | E-16 | ○ |

### winlean.nim - ファイル読み書き

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 (UT-WIN-058) | readFileで読み取り | E-16 (行154-156) | ○ |
| C-59 (UT-WIN-059) | readFileでゼロバイト | E-16 | ○ |
| C-60 (UT-WIN-060) | writeFileで書き込み | E-16 (行158-161) | ○ |
| C-61 (UT-WIN-061) | writeFileでゼロバイト | E-16 | ○ |

### winlean.nim - ソケット操作

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-62 (UT-WIN-062) | socketでTCPソケット作成 | E-16 (行502-503) | ○ |
| C-63 (UT-WIN-063) | socketでUDPソケット作成 | E-16 | ○ |
| C-64 (UT-WIN-064) | socketで不正プロトコルファミリ | E-16 | ○ |
| C-65 (UT-WIN-065) | closesocketでソケットクローズ | E-16 (行505-506) | ○ |
| C-66 (UT-WIN-066) | closesocketで無効ソケット | E-16 | ○ |

### winlean.nim - プロセス・バージョン

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-67 (UT-WIN-067) | getCurrentProcessでハンドル取得 | E-16 (行649-650) | ○ |
| C-68 (UT-WIN-068) | getVersionでバージョン取得 | E-16 (行149) | ○ |

### winlean.nim - ディレクトリ操作

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 (UT-WIN-069) | getCurrentDirectoryWで取得 | E-16 (行226-228) | ○ |
| C-70 (UT-WIN-070) | getCurrentDirectoryWでバッファ不足 | E-16 | ○ |
| C-71 (UT-WIN-071) | setCurrentDirectoryWで変更 | E-16 (行229-230) | ○ |
| C-72 (UT-WIN-072) | setCurrentDirectoryWで不正パス | E-16 | ○ |
| C-73 (UT-WIN-073) | createDirectoryWで作成 | E-16 (行231-232) | ○ |
| C-74 (UT-WIN-074) | createDirectoryWで重複 | E-16 | ○ |
| C-75 (UT-WIN-075) | removeDirectoryWで削除 | E-16 (行233-234) | ○ |
| C-76 (UT-WIN-076) | removeDirectoryWで非空 | E-16 | ○ |

### winlean.nim - ファイル操作

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-77 (UT-WIN-077) | createFileWで新規作成 | E-16 (行652-656) | ○ |
| C-78 (UT-WIN-078) | createFileWで既存オープン | E-16 | ○ |
| C-79 (UT-WIN-079) | createFileWで不存在ファイル | E-16 | ○ |
| C-80 (UT-WIN-080) | deleteFileWでファイル削除 | E-16 (行657-658) | ○ |
| C-81 (UT-WIN-081) | deleteFileWで不存在ファイル | E-16 | ○ |
| C-82 (UT-WIN-082) | copyFileWでコピー | E-16 (行320-322) | ○ |
| C-83 (UT-WIN-083) | copyFileWで上書き禁止 | E-16 | ○ |
| C-84 (UT-WIN-084) | moveFileWで移動 | E-16 (行324-325) | ○ |
| C-85 (UT-WIN-085) | moveFileWで移動先重複 | E-16 | ○ |
| C-86 (UT-WIN-086) | moveFileExWでフラグ付き移動 | E-16 (行326-328) | ○ |
| C-87 (UT-WIN-087) | getFileAttributesWで属性取得 | E-16 (行313-315) | ○ |
| C-88 (UT-WIN-088) | getFileAttributesWで不存在 | E-16 | ○ |
| C-89 (UT-WIN-089) | setFileAttributesWで属性設定 | E-16 (行316-318) | ○ |

### winlean.nim - ファイル検索

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-90 (UT-WIN-090) | findFirstFileWで検索開始 | E-16 (行298-300) | ○ |
| C-91 (UT-WIN-091) | findFirstFileWで不一致 | E-16 | ○ |
| C-92 (UT-WIN-092) | findNextFileWで次検索 | E-16 (行301-303) | ○ |
| C-93 (UT-WIN-093) | findNextFileWで終端 | E-16 | ○ |
| C-94 (UT-WIN-094) | findCloseで検索終了 | E-16 (行305-306) | ○ |

### winlean.nim - Winsock

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-95 (UT-WIN-095) | wsaStartupで初期化 | E-16 (行568-569) | ○ |
| C-96 (UT-WIN-096) | wsaStartupで不正バージョン | E-16 | ○ |
| C-97 (UT-WIN-097) | getaddrinfoでアドレス解決 | E-16 (行571-573) | ○ |
| C-98 (UT-WIN-098) | getaddrinfoで不正ホスト | E-16 | ○ |
| C-99 (UT-WIN-099) | freeAddrInfoで解放 | E-16 (行575-576) | ○ |

### winlean.nim - IOCP

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-100 (UT-WIN-100) | createIoCompletionPortでポート作成 | E-16 (行740-743) | ○ |
| C-101 (UT-WIN-101) | createIoCompletionPortでファイル関連付け | E-16 | ○ |
| C-102 (UT-WIN-102) | postQueuedCompletionStatusでポスト | E-16 (行937-941) | ○ |
| C-103 (UT-WIN-103) | getQueuedCompletionStatusで取得 | E-16 (行745-749) | ○ |
| C-104 (UT-WIN-104) | getQueuedCompletionStatusでタイムアウト | E-16 | ○ |

### winlean.nim - ファイバー

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-105 (UT-WIN-105) | CreateFiberでファイバー作成 | E-16 (行1011) | ○ |
| C-106 (UT-WIN-106) | ConvertThreadToFiberで変換 | E-16 (行1013) | ○ |
| C-107 (UT-WIN-107) | DeleteFiberで削除 | E-16 (行1015) | ○ |

### winlean.nim - セキュリティ

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-108 (UT-WIN-108) | allocateAndInitializeSidでSID初期化 | E-16 (行1049-1060) | ○ |
| C-109 (UT-WIN-109) | checkTokenMembershipでトークン確認 | E-16 (行1061-1063) | ○ |
| C-110 (UT-WIN-110) | freeSidでSID解放 | E-16 (行1064-1065) | ○ |

## 4) 不足情報（Unknown / Missing）
- **inet_ntop_emulated関数のテスト（UT-WIN-037, UT-WIN-038）**：この関数はWindows Vista未満（XP等）での後方互換性のために実装されているが、現代のテスト環境ではWindows Vista以降が一般的であり、エミュレーションパスのテストが困難
  - 候補：仮想マシンでのWindows XP環境構築 / モック関数によるバージョンチェック回避 / 条件付きコンパイル

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 大部分のテストケースはソースコードの関数定義と直接対応しており、根拠が明確
- **1: 中リスク** - inet_ntop関連のテストケースはOSバージョン依存のロジックがあり、テスト環境の考慮が必要
- **1: 中リスク** - ファイバー関連APIはスレッド状態に依存し、テストの前提条件が複雑になる可能性
- **0: 低リスク** - Windows API宣言部分（importc）は実際のDLLに対するラッパーであり、動作はWindows APIの仕様に依存

## 6) レビュアーチェックリスト（最小）
- [ ] registry.nim のレジストリ操作テストケースが実際のレジストリ操作の仕様と一致しているか確認
- [ ] winlean.nim のWindows API呼び出しテストケースが実行環境（Windows版）でのみ実行されることを確認
- [ ] ネットワーク関連テストケース（Winsock）がネットワーク環境に依存する前提条件を適切に記述しているか確認
- [ ] ファイル操作テストケースがテスト後のクリーンアップを考慮しているか確認
- [ ] SID/セキュリティ関連テストケースが管理者権限の有無による動作差異を考慮しているか確認
- [ ] inet_ntop_emulated関数のテスト方法（Windows XP互換パスのテスト）について検討
