---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 112
  claims_with_evidence: 106
  claims_without_evidence: 6
confidence_derived: 0.95
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：106 / 112、根拠なし：6
- 優先レビュー（高）
  1. **C-085 resolveBuildDependencies 正常系**：非同期コールバックの結果構造は推測に基づく
  2. **C-086 resolveBuildDependencies 異常系**：エラー伝播のパスが複雑で、全分岐を検証していない
  3. **C-088/089 checkResolveResultsValid**：非同期並列処理の結果判定ロジックの詳細確認が必要

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

- E-01: `lib/SizeFormatHelpers.js` (25行) - formatSize関数の実装
- E-02: `lib/RequestShortener.js` (36行) - RequestShortenerクラスの実装
- E-03: `lib/ResolverFactory.js` (157行) - ResolverFactoryクラスおよびconvertToResolveOptions関数の実装
- E-04: `lib/FileSystemInfo.js` (4131行) - Snapshot, SnapshotIterable, SnapshotOptimization, FileSystemInfoクラスの実装
- E-05: `lib/FileSystemInfo.js:12-13` - formatSizeのtypeof/NaNチェック
- E-06: `lib/FileSystemInfo.js:17` - formatSizeのsize<=0チェック
- E-07: `lib/RequestShortener.js:29-31` - shorten関数の!requestチェック
- E-08: `lib/ResolverFactory.js:51-55` - convertToResolveOptionsのfileSystemチェック
- E-09: `lib/ResolverFactory.js:98-121` - ResolverFactory.getのキャッシュロジック
- E-10: `lib/ResolverFactory.js:128-155` - ResolverFactory._createのwithOptions付与
- E-11: `lib/FileSystemInfo.js:281-601` - Snapshotクラスの全メソッド
- E-12: `lib/FileSystemInfo.js:616-663` - SnapshotOptimizationクラスのconstructor/getStatisticMessage/clear
- E-13: `lib/FileSystemInfo.js:670-800` - SnapshotOptimization.optimize
- E-14: `lib/FileSystemInfo.js:1072-1262` - FileSystemInfo.constructor
- E-15: `lib/FileSystemInfo.js:1374-1408` - FileSystemInfo.clear
- E-16: `lib/FileSystemInfo.js:1415-1436` - addFileTimestamps/addContextTimestamps
- E-17: `lib/FileSystemInfo.js:1443-1496` - getFileTimestamp/getFileHash
- E-18: `lib/FileSystemInfo.js:1454-1565` - getContextTimestamp/getContextHash/getContextTsh
- E-19: `lib/FileSystemInfo.js:1602-1750` - resolveBuildDependencies
- E-20: `lib/FileSystemInfo.js:2133-2207` - checkResolveResultsValid
- E-21: `lib/FileSystemInfo.js:2218-2307` - createSnapshot
- E-22: `lib/FileSystemInfo.js:2703-2782` - mergeSnapshots
- E-23: `lib/FileSystemInfo.js:2789-2838` - checkSnapshotValid
- E-24: `lib/FileSystemInfo.js:4105-4127` - getDeprecatedFileTimestamps/getDeprecatedContextTimestamps
- E-25: `lib/FileSystemInfo.js:1264-1372` - logStatistics/_log

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | formatSize: バイト単位のサイズフォーマット | E-01 | ○ |
| C-002 | formatSize: KiB単位のサイズフォーマット | E-01 | ○ |
| C-003 | formatSize: MiB単位のサイズフォーマット | E-01 | ○ |
| C-004 | formatSize: GiB単位のサイズフォーマット | E-01 | ○ |
| C-005 | formatSize: 端数のあるKiBサイズフォーマット | E-01 | ○ |
| C-006 | formatSize: サイズ0で'0 bytes'返却 | E-01, E-06 | ○ |
| C-007 | formatSize: 負数で'0 bytes'返却 | E-01, E-06 | ○ |
| C-008 | formatSize: サイズ1の最小正値フォーマット | E-01 | ○ |
| C-009 | formatSize: undefined入力で'unknown size' | E-01, E-05 | ○ |
| C-010 | formatSize: null入力で'unknown size' | E-01, E-05 | ○ |
| C-011 | formatSize: NaN入力で'unknown size' | E-01, E-05 | ○ |
| C-012 | formatSize: 文字列入力で'unknown size' | E-01, E-05 | ○ |
| C-013 | RequestShortener: コンストラクタ基本動作 | E-02 | ○ |
| C-014 | RequestShortener: キャッシュオブジェクトなし初期化 | E-02 | ○ |
| C-015 | RequestShortener.shorten: リクエストパス短縮 | E-02 | ○ |
| C-016 | RequestShortener.shorten: undefined返却 | E-02, E-07 | ○ |
| C-017 | RequestShortener.shorten: null返却 | E-02, E-07 | ○ |
| C-018 | RequestShortener.shorten: 空文字列返却 | E-02, E-07 | ○ |
| C-019 | convertToResolveOptions: 基本変換処理 | E-03, E-08 | ○ |
| C-020 | convertToResolveOptions: plugins '...'フィルタ | E-03 | ○ |
| C-021 | convertToResolveOptions: plugins undefined | E-03 | ○ |
| C-022 | convertToResolveOptions: fileSystem未指定エラー | E-03, E-08 | ○ |
| C-023 | ResolverFactory.constructor: hooks/cache初期化 | E-03 | ○ |
| C-024 | ResolverFactory.get: 新規リゾルバ作成 | E-03, E-09 | ○ |
| C-025 | ResolverFactory.get: directキャッシュヒット | E-03, E-09 | ○ |
| C-026 | ResolverFactory.get: stringifiedキャッシュヒット | E-03, E-09 | ○ |
| C-027 | ResolverFactory.get: デフォルトオプション | E-03, E-09 | ○ |
| C-028 | ResolverFactory.get: タイプ別キャッシュ分離 | E-03, E-09 | ○ |
| C-029 | ResolverFactory._create: withOptions付与 | E-03, E-10 | ○ |
| C-030 | ResolverFactory._create: withOptionsで追加オプション | E-03, E-10 | ○ |
| C-031 | ResolverFactory._create: withOptionsキャッシュ | E-03, E-10 | ○ |
| C-032 | ResolverFactory._create: resolver hook呼び出し | E-03, E-10 | ○ |
| C-033 | Snapshot.constructor: 初期フラグ0 | E-04, E-11 | ○ |
| C-034 | Snapshot.hasStartTime: false返却 | E-04, E-11 | ○ |
| C-035 | Snapshot.setStartTime: フラグ設定 | E-04, E-11 | ○ |
| C-036 | Snapshot.setMergedStartTime: 両方ある場合Min | E-04, E-11 | ○ |
| C-037 | Snapshot.setMergedStartTime: valueのみ | E-04, E-11 | ○ |
| C-038 | Snapshot.setMergedStartTime: snapshotのみ | E-04, E-11 | ○ |
| C-039 | Snapshot.setMergedStartTime: value=0(falsy) | E-04, E-11 | ○ |
| C-040 | Snapshot.hasFileTimestamps: false返却 | E-04, E-11 | ○ |
| C-041 | Snapshot.setFileTimestamps: フラグ設定 | E-04, E-11 | ○ |
| C-042 | Snapshot.hasFileHashes: false返却 | E-04, E-11 | ○ |
| C-043 | Snapshot.setFileHashes: フラグ設定 | E-04, E-11 | ○ |
| C-044 | Snapshot.addChild: 初回追加 | E-04, E-11 | ○ |
| C-045 | Snapshot.addChild: 複数追加 | E-04, E-11 | ○ |
| C-046 | Snapshot.serialize: 基本シリアライズ | E-04, E-11 | ○ |
| C-047 | Snapshot.serialize: 全プロパティシリアライズ | E-04, E-11 | ○ |
| C-048 | Snapshot.deserialize: 基本デシリアライズ | E-04, E-11 | ○ |
| C-049 | Snapshot.getFileIterable: 基本返却 | E-04, E-11 | ○ |
| C-050 | Snapshot.getFileIterable: キャッシュヒット | E-04, E-11 | ○ |
| C-051 | Snapshot.getContextIterable: 基本返却 | E-04, E-11 | ○ |
| C-052 | Snapshot.getMissingIterable: 基本返却 | E-04, E-11 | ○ |
| C-053 | SnapshotIterable: Mapキーイテレーション | E-04, E-11 | ○ |
| C-054 | SnapshotIterable: 子スナップショット走査 | E-04, E-11 | ○ |
| C-055 | SnapshotIterable: undefined Mapスキップ | E-04, E-11 | ○ |
| C-056 | SnapshotOptimization.constructor: 初期化 | E-04, E-12 | ○ |
| C-057 | SnapshotOptimization.getStatisticMessage: フォーマット | E-04, E-12 | ○ |
| C-058 | SnapshotOptimization.getStatisticMessage: total=0 | E-04, E-12 | ○ |
| C-059 | SnapshotOptimization.clear: リセット | E-04, E-12 | ○ |
| C-060 | SnapshotOptimization.optimize: 初回登録 | E-04, E-13 | ○ |
| C-061 | SnapshotOptimization.optimize: 空capturedFiles | E-04, E-13 | ○ |
| C-062 | FileSystemInfo.constructor: デフォルト初期化 | E-04, E-14 | ○ |
| C-063 | FileSystemInfo.constructor: managedPaths設定 | E-04, E-14 | ○ |
| C-064 | FileSystemInfo.constructor: immutablePaths設定 | E-04, E-14 | ○ |
| C-065 | FileSystemInfo.constructor: RegExpパス分離 | E-04, E-14 | ○ |
| C-066 | FileSystemInfo.constructor: logger設定あり | E-04, E-14 | ○ |
| C-067 | FileSystemInfo.constructor: logger未設定 | E-04, E-14 | ○ |
| C-068 | FileSystemInfo.clear: リセット | E-04, E-15 | ○ |
| C-069 | FileSystemInfo.clear: ロガーリセット | E-04, E-15 | ○ |
| C-070 | FileSystemInfo.addFileTimestamps: 追加 | E-04, E-16 | ○ |
| C-071 | FileSystemInfo.addFileTimestamps: immutable | E-04, E-16 | ○ |
| C-072 | FileSystemInfo.addFileTimestamps: キャッシュ無効化 | E-04, E-16 | ○ |
| C-073 | FileSystemInfo.addContextTimestamps: 追加 | E-04, E-16 | ○ |
| C-074 | FileSystemInfo.getFileTimestamp: キャッシュヒット | E-04, E-17 | ○ |
| C-075 | FileSystemInfo.getFileTimestamp: キューへ追加 | E-04, E-17 | ○ |
| C-076 | FileSystemInfo.getContextTimestamp: ignore | E-04, E-18 | ○ |
| C-077 | FileSystemInfo.getContextTimestamp: resolved | E-04, E-18 | ○ |
| C-078 | FileSystemInfo.getContextTimestamp: キューへ追加 | E-04, E-18 | ○ |
| C-079 | FileSystemInfo.getFileHash: キャッシュヒット | E-04, E-17 | ○ |
| C-080 | FileSystemInfo.getFileHash: キューへ追加 | E-04, E-17 | ○ |
| C-081 | FileSystemInfo.getContextHash: resolved | E-04, E-18 | ○ |
| C-082 | FileSystemInfo.getContextHash: キューへ追加 | E-04, E-18 | ○ |
| C-083 | FileSystemInfo.getContextTsh: resolved | E-04, E-18 | ○ |
| C-084 | FileSystemInfo.getContextTsh: キューへ追加 | E-04, E-18 | ○ |
| C-085 | FileSystemInfo.resolveBuildDependencies: 正常解決 | E-04, E-19 | △ |
| C-086 | FileSystemInfo.resolveBuildDependencies: エラー | E-04, E-19 | △ |
| C-087 | FileSystemInfo.resolveBuildDependencies: 空依存 | E-04, E-19 | ○ |
| C-088 | FileSystemInfo.checkResolveResultsValid: 全有効 | E-04, E-20 | △ |
| C-089 | FileSystemInfo.checkResolveResultsValid: 無効 | E-04, E-20 | △ |
| C-090 | FileSystemInfo.checkResolveResultsValid: 不明タイプ | E-04, E-20 | ○ |
| C-091 | FileSystemInfo.checkResolveResultsValid: false期待 | E-04, E-20 | ○ |
| C-092 | FileSystemInfo.createSnapshot: ファイル | E-04, E-21 | ○ |
| C-093 | FileSystemInfo.createSnapshot: ディレクトリ | E-04, E-21 | ○ |
| C-094 | FileSystemInfo.createSnapshot: missing | E-04, E-21 | ○ |
| C-095 | FileSystemInfo.createSnapshot: hashモード | E-04, E-21 | ○ |
| C-096 | FileSystemInfo.createSnapshot: TSHモード | E-04, E-21 | ○ |
| C-097 | FileSystemInfo.createSnapshot: startTime=null | E-04, E-21 | ○ |
| C-098 | FileSystemInfo.mergeSnapshots: 基本マージ | E-04, E-22 | ○ |
| C-099 | FileSystemInfo.mergeSnapshots: startTime Min | E-04, E-22 | ○ |
| C-100 | FileSystemInfo.mergeSnapshots: 片側startTime | E-04, E-22 | ○ |
| C-101 | FileSystemInfo.mergeSnapshots: キャッシュ伝播 | E-04, E-22 | ○ |
| C-102 | FileSystemInfo.checkSnapshotValid: true | E-04, E-23 | ○ |
| C-103 | FileSystemInfo.checkSnapshotValid: false | E-04, E-23 | ○ |
| C-104 | FileSystemInfo.checkSnapshotValid: 配列追加 | E-04, E-23 | ○ |
| C-105 | FileSystemInfo.checkSnapshotValid: キャッシュミス | E-04, E-23 | ○ |
| C-106 | FileSystemInfo.getDeprecatedFileTimestamps: 基本 | E-04, E-24 | ○ |
| C-107 | FileSystemInfo.getDeprecatedFileTimestamps: キャッシュ | E-04, E-24 | ○ |
| C-108 | FileSystemInfo.getDeprecatedContextTimestamps: 基本 | E-04, E-24 | ○ |
| C-109 | FileSystemInfo.logStatistics: ログ出力 | E-04, E-25 | ○ |
| C-110 | FileSystemInfo._log: 基本ログ | E-04, E-25 | ○ |
| C-111 | FileSystemInfo._log: 重複抑制 | E-04, E-25 | ○ |
| C-112 | FileSystemInfo._log: ログ上限 | E-04, E-25 | △ |

## 4) 不足情報（Unknown / Missing）
- **resolveBuildDependencies の非同期コールバック構造**：processAsyncTree による複雑な非同期処理のため、コールバック結果の正確な構造は実行時テストで確認が必要
  - 候補：実際のファイルシステムを使用した統合テスト / enhanced-resolveのドキュメント / 既存のwebpackテストスイート
- **checkResolveResultsValid の並列処理結果**：neo-async の eachLimit による並列処理の結果判定ロジックの詳細は実行時の動作確認が必要
  - 候補：neo-async のドキュメント / 既存テストスイート
- **_log のログ上限到達後の挙動**：_remainingLogsが0になった後の後続呼び出しの挙動は、条件分岐の組み合わせにより確認が必要
  - 候補：デバッグ実行による確認

## 5) リスクフラグ（レビュー観点）
- **リスク1（中）**: resolveBuildDependencies は非常に長い関数（約530行）であり、テストケースで全分岐をカバーしきれていない可能性がある。特にESM/CJSの解決パスの分岐が複雑
- **リスク1（中）**: checkResolveResultsValid の4種類のリゾルバ（d/f/c/e）に対するテストケースは代表的なもののみであり、各リゾルバタイプ固有のエッジケースが不足している可能性がある
- **リスク0（低）**: FileSystemInfo の private メソッド（_readFileTimestamp, _readFileHash, _readContext等）は直接テスト対象にしていないが、publicメソッド経由で間接的にテストされる想定

## 6) レビュアーチェックリスト（最小）
- [ ] formatSize のtoPrecision(3)による丸め動作が期待通りか確認（特に大きな値での表示精度）
- [ ] RequestShortener.shorten で空文字が返却される主張（C-018）の !'' === true であることを確認
- [ ] convertToResolveOptions で removeOperations/resolveByProperty の動作仕様を確認
- [ ] ResolverFactory.get のWeakMapキャッシュとJSON.stringifyキャッシュの二段キャッシュの期待動作を確認
- [ ] FileSystemInfo.resolveBuildDependencies の非同期コールバック結果構造（C-085, C-086）を実行テストで確認
- [ ] checkResolveResultsValid の INVALID シンボルによるフロー制御が正しくテストされているか確認
- [ ] Snapshot のビットフラグ操作（_flags）がすべてのhas/setペアで正しく対応しているか確認
- [ ] createSnapshot の mode 変数（1=timestamp, 2=hash, 3=both）の分岐が網羅されているか確認
