---
generated_at: 2026-02-22 17:00:00
metrics:
  claims_total: 60
  claims_with_evidence: 57
  claims_without_evidence: 3
confidence_derived: 0.95
---

# 根拠レポート：src-fs 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：57 / 60、根拠なし：3
- 優先レビュー（高）
  1. **C-11 (UT-SFS-011)**：PATH_MAX境界値テストの具体的な動作はOS依存であり、ソースコードからは直接確認不可
  2. **C-12 (UT-SFS-012)**：空文字列パスの動作はuv_fs_stat内部の処理に依存し、fs-poll.c単体からは確認不可
  3. **C-58 (UT-SFS-058)**：Windows固有のuv__fs_poll_endgameはプリプロセッサ分岐内にあり、テスト実行環境が制約される

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

- E-01: `src/fs-poll.c` - ファイルシステムポーリング実装（行1-291）
- E-02: `include/uv.h` - パブリックAPI宣言（uv_fs_poll_t構造体、uv_fs_poll_init/start/stop/getpath関数宣言、行1700-1717）
- E-03: `include/uv.h` - uv_fs_poll_cbコールバック型定義（行409-412）
- E-04: `include/uv.h` - UV_FS_POLLハンドルタイプ定義（行165）
- E-05: `src/fs-poll.c` - struct poll_ctx定義（行37-49）
- E-06: `src/fs-poll.c` - uv_fs_poll_init実装（行59-63）
- E-07: `src/fs-poll.c` - uv_fs_poll_start実装（行66-113）
- E-08: `src/fs-poll.c` - uv_fs_poll_stop実装（行116-135）
- E-09: `src/fs-poll.c` - uv_fs_poll_getpath実装（行138-164）
- E-10: `src/fs-poll.c` - uv__fs_poll_close実装（行167-172）
- E-11: `src/fs-poll.c` - timer_cb実装（行175-185）
- E-12: `src/fs-poll.c` - poll_cb実装（行188-234）
- E-13: `src/fs-poll.c` - timer_close_cb実装（行237-258）
- E-14: `src/fs-poll.c` - statbuf_eq実装（行261-276）
- E-15: `src/fs-poll.c` - uv__fs_poll_endgame実装（行284-288、Windows専用）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | uv_fs_poll_initが0を返しpoll_ctxをNULLに初期化する | E-06 (行59-63) | ○ |
| C-02 | ハンドルタイプがUV_FS_POLLに設定される | E-04, E-06 (行60: uv__handle_init) | ○ |
| C-03 | 有効なパスとコールバックでポーリングが開始される | E-07 (行66-113) | ○ |
| C-04 | 既にアクティブなハンドルで再呼び出し時に0が返る | E-07 (行75-76: uv_is_active条件) | ○ |
| C-05 | intervalが0の場合1に補正される | E-07 (行87: interval ? interval : 1) | ○ |
| C-06 | パスがコンテキストにコピーされる | E-07 (行90: memcpy) | ○ |
| C-07 | 前回のコンテキストがpreviousチェーンに保持される | E-07 (行103-104) | ○ |
| C-08 | メモリ確保失敗時にUV_ENOMEMが返る | E-07 (行82-83) | ○ |
| C-09 | uv_timer_init失敗時にエラーが返りメモリ解放される | E-07 (行93-94, 110-112) | ○ |
| C-10 | uv_fs_stat失敗時にエラーが返りメモリ解放される | E-07 (行100-101, 110-112) | ○ |
| C-11 | 非常に長いパスでポーリングが開始できる | E-07 (行79-80: strlen+calloc) | △ |
| C-12 | 空文字列パスでの動作 | E-07 (行79: strlen("") = 0) | △ |
| C-13 | intervalが最大値(UINT_MAX)の場合の動作 | E-07 (行87: unsigned int) | ○ |
| C-14 | intervalが1の場合の動作 | E-07 (行87) | ○ |
| C-15 | アクティブなハンドルの停止が成功する | E-08 (行116-135) | ○ |
| C-16 | 非アクティブなハンドルでstop呼び出し時に0が返る | E-08 (行119-120) | ○ |
| C-17 | タイマーがアクティブな場合にタイマーがクローズされる | E-08 (行129-130) | ○ |
| C-18 | stat要求進行中にタイマークローズが呼ばれない | E-08 (行129: uv_is_active条件) | ○ |
| C-19 | アクティブなハンドルから監視パスを取得できる | E-09 (行138-164) | ○ |
| C-20 | 取得したパスがNUL終端されている | E-09 (行161: buffer[required_len] = '\0') | ○ |
| C-21 | bufferがNULLの場合にUV_EINVALが返る | E-09 (行142-143) | ○ |
| C-22 | sizeがNULLの場合にUV_EINVALが返る | E-09 (行142-143) | ○ |
| C-23 | *sizeが0の場合にUV_EINVALが返る | E-09 (行142-143) | ○ |
| C-24 | 非アクティブなハンドルでUV_EINVALが返る | E-09 (行145-148) | ○ |
| C-25 | バッファサイズがパス長と同じ場合にUV_ENOBUFSが返る | E-09 (行154-157: required_len >= *size) | ○ |
| C-26 | バッファサイズがパス長+1の場合に成功する | E-09 (行154: >=条件により+1で成功) | ○ |
| C-27 | バッファサイズがパス長-1の場合にUV_ENOBUFSが返る | E-09 (行154-157) | ○ |
| C-28 | poll_ctxがNULLの場合にclose_pendingが設定される | E-10 (行170-171) | ○ |
| C-29 | poll_ctxが存在する場合にstopが呼ばれclose_pendingが遅延される | E-10 (行168-172) | ○ |
| C-30 | ファイル変更検出時にコールバックが呼ばれる | E-12 (行213-215) | ○ |
| C-31 | 初回stat成功時にコールバックが呼ばれない | E-12 (行213: busy_polling != 0条件) | ○ |
| C-32 | statbufが同一の場合にコールバックが呼ばれない | E-12 (行214: !statbuf_eq条件) | ○ |
| C-33 | stat失敗時にエラーコールバックが呼ばれる | E-12 (行200-208) | ○ |
| C-34 | 同じエラーが連続した場合にコールバックが重複して呼ばれない | E-12 (行201: busy_polling != req->result条件) | ○ |
| C-35 | ハンドル非アクティブ時にコールバックが呼ばれずクリーンアップされる | E-12 (行197-198, 222-226) | ○ |
| C-36 | ハンドルがクローズ中の場合にコールバックが呼ばれずクリーンアップされる | E-12 (行197: uv__is_closing) | ○ |
| C-37 | タイマーが正しい間隔で再スケジュールされる | E-12 (行229-233) | ○ |
| C-38 | エラーから正常に復帰した場合にコールバックが呼ばれる | E-12 (行213-214: busy_polling < 0条件) | ○ |
| C-39 | uv_fs_req_cleanupが必ず呼ばれる | E-12 (行221) | ○ |
| C-40 | タイマー発火時にuv_fs_statが呼ばれる | E-11 (行183) | ○ |
| C-41 | 現在のコンテキストがクローズ時にリンクリストから正しく除去される | E-13 (行245-248) | ○ |
| C-42 | 過去のコンテキストがクローズ時にリンクリストから正しく除去される | E-13 (行250-256) | ○ |
| C-43 | 最後のコンテキスト削除時にclose_pendingが設定される | E-13 (行247-248) | ○ |
| C-44 | 同一のstatbufを比較した場合に1(真)が返る | E-14 (行261-276) | ○ |
| C-45 | st_mtim.tv_secが異なる場合に0(偽)が返る | E-14 (行265) | ○ |
| C-46 | st_mtim.tv_nsecが異なる場合に0(偽)が返る | E-14 (行263) | ○ |
| C-47 | st_sizeが異なる場合に0(偽)が返る | E-14 (行268) | ○ |
| C-48 | st_modeが異なる場合に0(偽)が返る | E-14 (行269) | ○ |
| C-49 | st_uidが異なる場合に0(偽)が返る | E-14 (行270) | ○ |
| C-50 | st_gidが異なる場合に0(偽)が返る | E-14 (行271) | ○ |
| C-51 | st_inoが異なる場合に0(偽)が返る | E-14 (行272) | ○ |
| C-52 | st_devが異なる場合に0(偽)が返る | E-14 (行273) | ○ |
| C-53 | st_flagsが異なる場合に0(偽)が返る | E-14 (行274) | ○ |
| C-54 | st_genが異なる場合に0(偽)が返る | E-14 (行275) | ○ |
| C-55 | st_ctim.tv_secが異なる場合に0(偽)が返る | E-14 (行264) | ○ |
| C-56 | st_birthtim.tv_secが異なる場合に0(偽)が返る | E-14 (行266) | ○ |
| C-57 | 全フィールドが0の場合に1(真)が返る | E-14 (行261-276) | ○ |
| C-58 | Windows環境でクローズ中フラグ設定時にハンドルがクローズされる | E-15 (行284-288) | △ |
| C-59 | タイマーハンドルにUV_HANDLE_INTERNALフラグが設定される | E-07 (行96) | ○ |
| C-60 | タイマーハンドルがunrefされる | E-07 (行97) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-11 (長いパスの境界値テスト)**：PATH_MAXを超えるパスの挙動はOS・ファイルシステム依存であり、fs-poll.c内にはパス長の明示的な制限チェックが存在しない。実際の動作はuv_fs_stat内部およびOS APIに委ねられる。
  - 候補：各OS固有のPATH_MAX定義 / uv_fs_stat実装 / OSのstat(2)仕様
- **C-12 (空文字列パスの動作)**：空文字列パスはstrlen("")=0で正常にcallocされるが、実際のstat呼び出し結果はOS依存。fs-poll.c自体にはパスの空文字列チェックが存在しない。
  - 候補：POSIX stat(2)の空パス動作仕様 / 各OS実装
- **C-58 (Windows endgame処理)**：`#if defined(_WIN32)` プリプロセッサ条件内のコードであり、非Windows環境ではコンパイル・テスト不可。assertによるフラグチェックは確認できるが、実行時の検証はWindows環境が必要。
  - 候補：Windows CI環境でのテスト / win/handle-inl.hのuv__handle_close実装

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - statbuf_eq関数のテスト（C-44〜C-57）：純粋な比較関数であり、ソースコードから動作が完全に確認可能
- **0: 低リスク** - uv_fs_poll_getpathの入力検証テスト（C-21〜C-27）：明示的な条件分岐がソースコードに記載
- **1: 中リスク** - poll_cbのコールバック制御テスト（C-30〜C-39）：busy_pollingの状態遷移が複雑であり、条件の組み合わせに注意が必要
- **1: 中リスク** - timer_close_cbのリンクリスト操作テスト（C-41〜C-43）：リンクリストの走査・削除処理であり、メモリ関連のバグリスクがある
- **2: 高リスク** - uv_fs_poll_startのメモリ管理テスト（C-08〜C-10）：メモリ確保失敗のシミュレーションが必要であり、テスト実装が困難な場合がある

## 6) レビュアーチェックリスト（最小）
- [ ] 全60テストケースが対象ファイル（src/fs-poll.c）のpublic関数・internal関数・static関数を網羅しているか確認
- [ ] uv_fs_poll_initの初期化テスト（C-01, C-02）が十分か確認
- [ ] uv_fs_poll_startの正常系・異常系・境界値テスト（C-03〜C-14）がメモリ管理を含め網羅的か確認
- [ ] uv_fs_poll_stopの正常系テスト（C-15〜C-18）がタイマー状態の各パターンを網羅しているか確認
- [ ] uv_fs_poll_getpathの入力検証テスト（C-19〜C-27）がNULLチェック・バッファサイズ境界値を網羅しているか確認
- [ ] poll_cbの状態遷移テスト（C-30〜C-39）がbusy_pollingの全パターン（0, 正, 負）を網羅しているか確認
- [ ] statbuf_eqの全比較フィールド（14フィールド）に対応するテストケースが存在するか確認
- [ ] Windows固有コード（uv__fs_poll_endgame）のテストケースが含まれているか確認
- [ ] 空文字列パス（C-12）および長いパス（C-11）の期待結果がプロジェクトの方針と整合しているか確認
