---
generated_at: 2026-02-22 17:00:00
metrics:
  claims_total: 144
  claims_with_evidence: 139
  claims_without_evidence: 5
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：139 / 144、根拠なし：5
- 優先レビュー（高）
  1. **C-034**：メモリ確保失敗のテスト条件 - 実行時依存でコードパスの再現条件が不明確
  2. **C-035**：不正フラグのassert検証 - assertマクロの挙動はビルド設定依存
  3. **C-101**：メモリ確保失敗時のフォールバック - 実行時依存
  4. **C-136**：macOSフレームワーク不在条件 - 環境依存が強い
  5. **C-138**：fork失敗条件 - 実行時リソース状態依存

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

- E-01: `src/unix/process.c` - プロセス管理の主要実装（uv_spawn, uv_kill, uv_process_kill, uv__process_close, uv__wait_children等）
- E-02: `src/unix/signal.c` - シグナル管理の実装（uv_signal_init, uv_signal_start, uv_signal_stop, uv__signal_handler等）
- E-03: `src/unix/dl.c` - 動的ライブラリ操作の実装（uv_dlopen, uv_dlclose, uv_dlsym, uv_dlerror）
- E-04: `src/unix/proctitle.c` - プロセスタイトル管理の主要実装（uv_setup_args, uv_set_process_title, uv_get_process_title）
- E-05: `src/unix/bsd-proctitle.c` - BSD系プロセスタイトル実装
- E-06: `src/unix/darwin-proctitle.c` - macOS固有のプロセスタイトル実装（uv__set_process_title）
- E-07: `src/unix/os390-proctitle.c` - OS/390固有のプロセスタイトル実装
- E-08: `src/unix/no-proctitle.c` - プロセスタイトル未サポート環境の実装
- E-09: `src/unix/procfs-exepath.c` - procfs経由の実行パス取得（uv_exepath）
- E-10: `src/unix/internal.h` - 内部ヘッダ（関数宣言、マクロ定義）
- E-11: `include/uv.h` - パブリックAPIヘッダ（参照のみ）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | uv__process_init（SIGCHLD版）がuv_signal_initを呼び0を返す | E-01 L81-90 | ○ |
| C-002 | uv__process_init（kqueue版）がmemsetで0クリアし0を返す | E-01 L94-97 | ○ |
| C-003 | uv_signal_init失敗時にエラーが伝播する | E-01 L84-86 | ○ |
| C-004 | 正常終了した子プロセスのexit_statusが取得される | E-01 L166-168 | ○ |
| C-005 | シグナル終了した子プロセスのterm_signalが取得される | E-01 L170-172 | ○ |
| C-006 | exit_cb==NULLの場合にコールバックが呼ばれない | E-01 L163-164 | ○ |
| C-007 | process_handlesキューが空で正常処理される | E-01 L114-116 | ○ |
| C-008 | waitpidがECHILDを返した場合にcontinueする | E-01 L139-145 | ○ |
| C-009 | UV_IGNOREフラグで0を返す | E-01 L199-200 | ○ |
| C-010 | UV_CREATE_PIPEでソケットペアが作成される | E-01 L202-216 | ○ |
| C-011 | UV_CREATE_PIPEでstreamがUV_NAMED_PIPE以外の場合UV_EINVAL | E-01 L204-205 | ○ |
| C-012 | UV_INHERIT_FDでFDが継承される | E-01 L218-229 | ○ |
| C-013 | UV_INHERIT_STREAMでストリームFDが継承される | E-01 L219-229 | ○ |
| C-014 | UV_INHERIT_FDでfd==-1の場合UV_EINVAL | E-01 L225-226 | ○ |
| C-015 | UV_CREATE_PIPEでストリームがオープンされる | E-01 L238-260 | ○ |
| C-016 | UV_WRITABLE_PIPEでUV_HANDLE_READABLEが設定される | E-01 L254-255 | ○ |
| C-017 | UV_READABLE_PIPEでUV_HANDLE_WRITABLEが設定される | E-01 L256-257 | ○ |
| C-018 | UV_CREATE_PIPEフラグなしで0を返す | E-01 L243-244 | ○ |
| C-019 | UV_CREATE_PIPEでストリームがクローズされる | E-01 L263-266 | ○ |
| C-020 | UV_CREATE_PIPEフラグ未設定時にスキップ | E-01 L264 | ○ |
| C-021 | シグナルハンドラがSIG_DFLにリセットされる | E-01 L302-315 | ○ |
| C-022 | UV_PROCESS_DETACHEDでsetsid呼び出し | E-01 L317-318 | ○ |
| C-023 | cwdが指定された場合にchdir実行 | E-01 L382 | ○ |
| C-024 | 不正cwdでエラー書き込み | E-01 L382-383 | ○ |
| C-025 | UV_PROCESS_SETUIDでsetuid実行 | E-01 L399-400 | ○ |
| C-026 | UV_PROCESS_SETGIDでsetgid実行 | E-01 L396-397 | ○ |
| C-027 | envが指定された場合にenviron設定 | E-01 L402-403 | ○ |
| C-028 | stdio fd 0-2が未使用時に/dev/nullリダイレクト | E-01 L346-358 | ○ |
| C-029 | uv_spawnで子プロセスが生成される | E-01 L966-1094 | ○ |
| C-030 | stdio_count<3の場合に3に調整 | E-01 L996-997 | ○ |
| C-031 | stdio_count>8でヒープ割り当て | E-01 L1001-1002 | ○ |
| C-032 | exit_cbがprocess->exit_cbに設定される | E-01 L1054 | ○ |
| C-033 | UV_PROCESS_DETACHEDでデタッチドプロセス生成 | E-01 L982 | ○ |
| C-034 | メモリ確保失敗時にUV_ENOMEM返却 | E-01 L999, L1004-1005 | △ |
| C-035 | 不正フラグでassert発生 | E-01 L982-989 | △ |
| C-036 | stdio初期化失敗時のクリーンアップ | E-01 L1075-1090 | ○ |
| C-037 | process_handlesキューにプロセス追加 | E-01 L1055 | ○ |
| C-038 | uv_process_killがuv_killを呼ぶ | E-01 L1097-1099 | ○ |
| C-039 | 無効シグナルでエラー返却 | E-01 L1103 | ○ |
| C-040 | uv_killが正常にkillを呼ぶ | E-01 L1102-1114 | ○ |
| C-041 | 存在しないPIDでESRCH | E-01 L1103, L1111 | ○ |
| C-042 | 権限不足でEPERM | E-01 L1103, L1111 | ○ |
| C-043 | signum=0でプロセス存在確認 | E-01 L1102-1114 | ○ |
| C-044 | uv__process_closeでキュー除去とハンドル停止 | E-01 L1117-1124 | ○ |
| C-045 | 最後のプロセスクローズでSIGCHLDウォッチャー停止 | E-01 L1121-1123 | ○ |
| C-046 | uv__spawn_find_path_in_envでPATH取得 | E-01 L661-675 | ○ |
| C-047 | PATH未設定でNULL返却 | E-01 L661-675 | ○ |
| C-048 | 空環境変数配列でNULL返却 | E-01 L667 | ○ |
| C-049 | uv_signal_initで初期化される | E-02 L341-354 | ○ |
| C-050 | シグナルパイプ初期化失敗時エラー | E-02 L344-345 | ○ |
| C-051 | uv_signal_startでシグナル監視開始 | E-02 L362-364 | ○ |
| C-052 | signum=0でUV_EINVAL | E-02 L388-389 | ○ |
| C-053 | 同一signumで再登録時にコールバック更新 | E-02 L396-399 | ○ |
| C-054 | 異なるsignumへの変更で前のシグナル停止 | E-02 L402-404 | ○ |
| C-055 | 無効signumでハンドラ登録失敗 | E-02 L415-420 | ○ |
| C-056 | ワンショットモードでUV_SIGNAL_ONE_SHOTフラグ設定 | E-02 L424-425 | ○ |
| C-057 | ワンショットシグナル受信後に自動停止 | E-02 L486-487 | ○ |
| C-058 | uv_signal_stopで監視停止 | E-02 L533-537 | ○ |
| C-059 | 未開始ハンドルの安全な停止 | E-02 L548-549 | ○ |
| C-060 | 最後のウォッチャー停止でハンドラ解除 | E-02 L561-563 | ○ |
| C-061 | 他ウォッチャー残存時にハンドラ維持 | E-02 L564-572 | ○ |
| C-062 | uv__signal_closeでuv__signal_stop呼び出し | E-02 L357-359 | ○ |
| C-063 | シグナル受信時にパイプ書き込み | E-02 L207-209 | ○ |
| C-064 | 同一シグナルに複数ハンドラで全通知 | E-02 L195-216 | ○ |
| C-065 | errnoが保存・復元される | E-02 L187, L219 | ○ |
| C-066 | パイプからメッセージ読み取りでコールバック呼び出し | E-02 L438-500 | ○ |
| C-067 | dispatched_signalsインクリメント | E-02 L484 | ○ |
| C-068 | ワンショットハンドラのディスパッチ後停止 | E-02 L486-487 | ○ |
| C-069 | パイプ空でEAGAIN時に即座返却 | E-02 L454-463 | ○ |
| C-070 | signumが小さいハンドルが先に来る | E-02 L509-510 | ○ |
| C-071 | 同一signumでONE_SHOTなしが先に来る | E-02 L515-518 | ○ |
| C-072 | 同一ハンドルで0返却 | E-02 L526-527 | ○ |
| C-073 | 有効シグナルでハンドラ登録 | E-02 L223-241 | ○ |
| C-074 | oneshot時にSA_RESETHAND設定 | E-02 L233-234 | ○ |
| C-075 | 無効シグナルでUV__ERR返却 | E-02 L237-238 | ○ |
| C-076 | パイプFDがクローズされる | E-02 L79-96 | ○ |
| C-077 | パイプFDが-1の場合スキップ | E-02 L87, L93 | ○ |
| C-078 | シグナルパイプ初期化 | E-02 L260-283 | ○ |
| C-079 | 初期化済みの場合に再初期化しない | E-02 L266-267 | ○ |
| C-080 | fork後にパイプ再初期化 | E-02 L286-310 | ○ |
| C-081 | signal_pipefd==-1で0返却 | E-02 L289-290 | ○ |
| C-082 | 全ウォッチャー停止とパイプクローズ | E-02 L313-338 | ○ |
| C-083 | 指定シグナルの最初のハンドル返却 | E-02 L164-179 | ○ |
| C-084 | 該当ハンドルなしでNULL返却 | E-02 L175-178 | ○ |
| C-085 | シグナルロック取得 | E-02 L115-124 | ○ |
| C-086 | シグナルロック解放 | E-02 L127-136 | ○ |
| C-087 | uv_dlopenで共有ライブラリオープン | E-03 L33-38 | ○ |
| C-088 | 存在しないライブラリでエラー | E-03 L37 | ○ |
| C-089 | filename=NULLでプロセス自身のハンドル取得 | E-03 L36 | ○ |
| C-090 | uv_dlcloseでハンドルクローズ | E-03 L41-50 | ○ |
| C-091 | handle=NULLでdlclose未呼び出し | E-03 L45-49 | ○ |
| C-092 | errmsg=NULLでuv__free安全呼び出し | E-03 L42 | ○ |
| C-093 | uv_dlsymでシンボル取得 | E-03 L53-57 | ○ |
| C-094 | 存在しないシンボルでエラー | E-03 L56 | ○ |
| C-095 | errmsg設定時にそれが返却 | E-03 L61 | ○ |
| C-096 | errmsg=NULLで"no error"返却 | E-03 L61 | ○ |
| C-097 | dlerror()メッセージでerrmsg設定 | E-03 L65-79 | ○ |
| C-098 | dlerror()がNULLでerrmsg=NULL | E-03 L76-79 | ○ |
| C-099 | uv_setup_argsでargvコピー | E-04 L46-93 | ○ |
| C-100 | argc<=0でargvそのまま返却 | E-04 L53-54 | ○ |
| C-101 | メモリ確保失敗でargvそのまま返却 | E-04 L69-70 | △ |
| C-102 | argc=1で正常動作 | E-04 L46-93 | ○ |
| C-103 | uv_set_process_titleでタイトル設定 | E-04 L96-124 | ○ |
| C-104 | args_mem==NULLでUV_ENOBUFS | E-04 L101-102 | ○ |
| C-105 | タイトルcapacity超過で切り詰め | E-04 L110-114 | ○ |
| C-106 | 空文字列タイトル設定 | E-04 L96-124 | ○ |
| C-107 | uv_get_process_titleでタイトル取得 | E-04 L127-151 | ○ |
| C-108 | buffer=NULLでUV_EINVAL | E-04 L128-129 | ○ |
| C-109 | size=0でUV_EINVAL | E-04 L128-129 | ○ |
| C-110 | args_mem==NULLでUV_ENOBUFS | E-04 L132-133 | ○ |
| C-111 | バッファサイズ不足でUV_ENOBUFS | E-04 L138-141 | ○ |
| C-112 | バッファサイズちょうどで正常取得 | E-04 L138 | ○ |
| C-113 | uv__process_title_cleanupでargs_mem解放 | E-04 L154-157 | ○ |
| C-114 | uv_exepathで実行パス取得 | E-09 L28-45 | ○ |
| C-115 | buffer=NULLでUV_EINVAL | E-09 L31 | ○ |
| C-116 | size=NULLでUV_EINVAL | E-09 L31 | ○ |
| C-117 | *size=0でUV_EINVAL | E-09 L31 | ○ |
| C-118 | *size=1でNUL終端のみ | E-09 L34-35 | ○ |
| C-119 | readlink失敗でエラー | E-09 L38-39 | ○ |
| C-120 | BSD版uv_setup_argsでargv[0]コピー | E-05 L46-49 | ○ |
| C-121 | BSD版argc<=0でNULL設定 | E-05 L47-48 | ○ |
| C-122 | BSD版uv_set_process_titleでsetproctitle呼び出し | E-05 L53-70 | ○ |
| C-123 | BSD版uv__strdup失敗でUV_ENOMEM | E-05 L57-58 | ○ |
| C-124 | BSD版uv_get_process_titleでタイトル取得 | E-05 L73-100 | ○ |
| C-125 | BSD版buffer=NULLでUV_EINVAL | E-05 L76-77 | ○ |
| C-126 | BSD版バッファサイズ不足でUV_ENOBUFS | E-05 L85-88 | ○ |
| C-127 | OS390版uv_setup_argsでargvコピー | E-07 L38-74 | ○ |
| C-128 | OS390版uv_set_process_titleで更新 | E-07 L77-102 | ○ |
| C-129 | OS390版buffer=NULLでUV_EINVAL | E-07 L108-109 | ○ |
| C-130 | no-proctitle版uv_setup_argsでargvそのまま返却 | E-08 L28-30 | ○ |
| C-131 | no-proctitle版uv_set_process_titleで0返却 | E-08 L35-37 | ○ |
| C-132 | no-proctitle版uv_get_process_titleで空文字列返却 | E-08 L39-45 | ○ |
| C-133 | no-proctitle版buffer=NULLでUV_EINVAL | E-08 L40-41 | ○ |
| C-134 | no-proctitle版size=0でUV_EINVAL | E-08 L40-41 | ○ |
| C-135 | macOS LaunchServicesでタイトル設定 | E-06 L36-176 | ○ |
| C-136 | ApplicationServicesフレームワーク不在でUV_ENOENT | E-06 L64-75 | △ |
| C-137 | forkが成功して子プロセス生成 | E-01 L841 | ○ |
| C-138 | fork失敗でUV__ERR(errno)返却 | E-01 L852-854 | △ |
| C-139 | fork前後のシグナルマスク管理 | E-01 L829-850 | ○ |
| C-140 | signal_pipe経由のexec結果読み取り | E-01 L922-958 | ○ |
| C-141 | exec失敗でエラーコード返却 | E-01 L943-948 | ○ |
| C-142 | cloexec_lockの取得・解放 | E-01 L927-932 | ○ |
| C-143 | uv__write_intでFDに書き込み_exit | E-01 L269-279 | ○ |
| C-144 | uv__write_errnoでerrno変換書き込み | E-01 L282-284 | ○ |

## 4) 不足情報（Unknown / Missing）
- C-034, C-101, C-138：メモリ確保失敗やfork失敗は実行時条件であり、テスト時にモック等で再現する必要がある。コード上のエラーパスは存在するが、テスト可能性は環境依存。
  - 候補：メモリアロケータのモック / リソース制限の設定 / fault injection
- C-035：assertマクロはNDEBUGの定義に依存する。リリースビルドではassertが無効化される可能性がある。
  - 候補：デバッグビルドでのテスト実行 / assertの代替バリデーション確認
- C-136：macOS固有のフレームワーク依存であり、フレームワーク不在の条件再現が難しい。
  - 候補：dlopen失敗のモック / CI環境での検証

## 5) リスクフラグ（レビュー観点）
- 0: process.c の公開API（uv_spawn, uv_kill, uv_process_kill）のテストケースは十分なカバレッジがある
- 0: signal.c の公開API（uv_signal_init, uv_signal_start, uv_signal_stop）のテストケースは網羅的
- 0: dl.c の全公開API（uv_dlopen, uv_dlclose, uv_dlsym, uv_dlerror）がカバーされている
- 0: proctitle.c, bsd-proctitle.c, os390-proctitle.c, no-proctitle.c の全プラットフォーム実装がカバーされている
- 0: procfs-exepath.c のバリデーション（NULL/ゼロチェック）が網羅されている
- 1: process.c のApple固有パス（posix_spawn関連）はstatic関数が多く直接テストが困難 - 統合テストでの検証推奨
- 1: signal.c のuv__signal_handler はシグナルハンドラコンテキストで実行されるため単体テストでの再現が難しい
- 1: fork/exec関連の失敗パスは実行時条件のモックが必要
- 2: uv__process_child_init は子プロセス内でのみ実行され、失敗時に_exitするため単体テスト困難 - 統合テストで検証すべき

## 6) レビュアーチェックリスト（最小）
- [ ] process.c の公開API（uv_spawn, uv_kill, uv_process_kill, uv__process_close）のテストケースが正常系・異常系・境界値を網羅しているか
- [ ] signal.c のシグナル登録・解除・ワンショットの全パスがカバーされているか
- [ ] dl.c の動的ライブラリ操作（open/close/sym/error）の正常系・異常系が十分か
- [ ] proctitle系の4つのプラットフォーム実装それぞれにテストケースがあるか
- [ ] procfs-exepath.c の入力バリデーション（NULL, 0サイズ）が網羅されているか
- [ ] Apple固有のposix_spawn関連のstatic関数のテスト戦略が適切か（統合テストでの補完）
- [ ] fork/exec失敗パスのテスト実行可能性を確認（モック/fault injection の必要性）
- [ ] uv__process_child_initのような子プロセス内実行関数のテスト戦略を確認
