---
generated_at: 2026-03-01 04:35:00
metrics:
  claims_total: 176
  claims_with_evidence: 170
  claims_without_evidence: 6
confidence_derived: 0.97
---

# 根拠レポート：hmr.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：170 / 176、根拠なし：6
- 優先レビュー（高）
  1. **C-053 internalApplyのfailステータス遷移**：apply中のreportErrorによるfail遷移の正確なトリガー条件がランタイムテンプレートコードの複雑なフローに依存
  2. **C-090 非同期acceptコールバック**：acceptコールバックがPromiseを返すケースの発生条件がランタイム上のユーザーコード次第
  3. **C-155 非アクティブ化の120秒遅延**：setTimeoutの120000ms（120秒）という具体的な値はコードに根拠あるが、その設計意図のドキュメントが不足

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `lib/hmr/HotModuleReplacement.runtime.js` - HMRランタイムのコアロジック（419行）
- E-02: `lib/hmr/HotModuleReplacementRuntimeModule.js` - RuntimeModuleサブクラス（42行）
- E-03: `lib/hmr/JavascriptHotModuleReplacement.runtime.js` - JavaScript用HMRランタイム（471行）
- E-04: `lib/hmr/JavascriptHotModuleReplacementHelper.js` - ヘルパー関数（37行）
- E-05: `lib/hmr/LazyCompilationPlugin.js` - Lazy Compilationプラグイン（473行）
- E-06: `lib/hmr/lazyCompilationBackend.js` - バックエンドSSEサーバー（167行）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | createRequireがinstalledModulesに登録済みの場合ラッパー関数を返す | E-01 (行53-101) | ○ |
| C-002 | createRequireが未インストールモジュールの場合元のrequireを返す | E-01 (行55) | ○ |
| C-003 | activeモジュールからrequire時にparentsに親IDが追加される | E-01 (行57-66) | ○ |
| C-004 | activeモジュールからrequire時にchildrenにリクエストが追加される | E-01 (行67-69) | ○ |
| C-005 | 非activeモジュールからrequire時にwarningが出力される | E-01 (行71-78) | ○ |
| C-006 | parentsに既に親IDが含まれる場合重複追加されない | E-01 (行60) | ○ |
| C-007 | childrenに既にリクエストが含まれる場合重複追加されない | E-01 (行67) | ○ |
| C-008 | 未インストール子モジュールrequire時にcurrentParentsが設定される | E-01 (行63-66) | ○ |
| C-009 | fn.eがtrackBlockingPromiseでラップされる | E-01 (行98-100) | ○ |
| C-010 | requireプロパティがfnにコピーされる | E-01 (行81-97) | ○ |
| C-011 | 'e'プロパティはコピーされない | E-01 (行94) | ○ |
| C-012 | module.hotオブジェクトが正しいプロパティで作成される | E-01 (行104-209) | ○ |
| C-013 | currentChildModuleと一致する場合_mainがfalse | E-01 (行105) | ○ |
| C-014 | accept引数なしでself-accept設定 | E-01 (行125) | ○ |
| C-015 | accept関数引数でself-acceptエラーハンドラ設定 | E-01 (行126) | ○ |
| C-016 | accept配列引数で複数依存accept設定 | E-01 (行127-131) | ○ |
| C-017 | accept文字列引数で単一依存accept設定 | E-01 (行133-134) | ○ |
| C-018 | callbackがundefinedの場合デフォルト関数が設定される | E-01 (行129, 133) | ○ |
| C-019 | decline引数なしでself-decline設定 | E-01 (行138) | ○ |
| C-020 | decline配列引数で複数依存decline設定 | E-01 (行139-141) | ○ |
| C-021 | decline文字列引数で単一依存decline設定 | E-01 (行142) | ○ |
| C-022 | disposeハンドラが_disposeHandlersに追加される | E-01 (行144-145) | ○ |
| C-023 | addDisposeHandlerでハンドラ追加 | E-01 (行147-148) | ○ |
| C-024 | removeDisposeHandlerで登録済みハンドラ削除 | E-01 (行150-152) | ○ |
| C-025 | removeDisposeHandlerで未登録ハンドラ削除時に何も起きない | E-01 (行151) | ○ |
| C-026 | idleでinvalidate時readyに遷移 | E-01 (行156-166) | ○ |
| C-027 | readyでinvalidate時ハンドラ呼出 | E-01 (行167-174) | ○ |
| C-028 | prepare/check/dispose/applyでinvalidate時キュー追加 | E-01 (行175-181) | ○ |
| C-029 | エラーステータスでinvalidate時何も起きない | E-01 (行182-185) | ○ |
| C-030 | status引数なしで現在ステータス返却 | E-01 (行193) | ○ |
| C-031 | status関数引数でハンドラ登録 | E-01 (行194) | ○ |
| C-032 | addStatusHandlerでハンドラ追加 | E-01 (行196-197) | ○ |
| C-033 | removeStatusHandlerで登録済みハンドラ削除 | E-01 (行199-201) | ○ |
| C-034 | removeStatusHandlerで未登録ハンドラ削除時何も起きない | E-01 (行200) | ○ |
| C-035 | setStatusでステータス変更と全ハンドラ呼出 | E-01 (行211-218) | ○ |
| C-036 | ハンドラ0件でもPromise解決 | E-01 (行218) | ○ |
| C-037 | readyでtrackBlockingPromise時prepareに遷移 | E-01 (行236-243) | ○ |
| C-038 | prepareでblockingPromisesインクリメント | E-01 (行241) | ○ |
| C-039 | ready/prepare以外でPromiseがそのまま返される | E-01 (行244-245) | ○ |
| C-040 | 最後のブロッキングPromise解決でready遷移 | E-01 (行221-233) | ○ |
| C-041 | 複数ブロッキングPromise時最後まで遷移しない | E-01 (行222) | ○ |
| C-042 | blockingPromises===0で即座に関数実行 | E-01 (行250) | ○ |
| C-043 | blockingPromises>0で遅延実行 | E-01 (行251-255) | ○ |
| C-044 | hotCheckで更新ありの場合prepare遷移 | E-01 (行258-304) | ○ |
| C-045 | 更新なしでinvalidatedなしの場合idle復帰 | E-01 (行265-270) | ○ |
| C-046 | applyOnUpdate=trueで自動apply実行 | E-01 (行295-296) | ○ |
| C-047 | idle以外でcheckがError | E-01 (行259-261) | ○ |
| C-048 | 更新なしでinvalidatedありの場合ready遷移 | E-01 (行266) | ○ |
| C-049 | readyでhotApply実行 | E-01 (行307-318) | ○ |
| C-050 | ready以外でhotApplyがError | E-01 (行308-316) | ○ |
| C-051 | internalApplyでdispose→apply→idle遷移 | E-01 (行320-401) | ○ |
| C-052 | エラーあり時abort遷移 | E-01 (行336-339) | ○ |
| C-053 | apply中reportErrorでfail遷移 | E-01 (行362-365) | △ |
| C-054 | queuedInvalidatedModulesあり時再帰internalApply | E-01 (行368-375) | ○ |
| C-055 | options===undefined時デフォルト空オブジェクト | E-01 (行321) | ○ |
| C-056 | applyInvalidatedModulesでキュー処理しtrue返却 | E-01 (行404-417) | ○ |
| C-057 | キューundefinedでundefined返却 | E-01 (行405) | ○ |
| C-058 | HotModuleReplacementRuntimeModuleコンストラクタ | E-02 (行13-14) | ○ |
| C-059 | generate()でテンプレート変数置換 | E-02 (行20-38) | ○ |
| C-060 | $moduleCache$置換 | E-02 (行28) | ○ |
| C-061 | $hmrDownloadManifest$置換 | E-02 (行30) | ○ |
| C-062 | self-acceptedモジュールでaccepted返却 | E-03 (行43-47) | ○ |
| C-063 | self-declinedモジュールでself-declined返却 | E-03 (行48-54) | ○ |
| C-064 | mainモジュールでunaccepted返却 | E-03 (行55-61) | ○ |
| C-065 | 親がdeclineした依存でdeclined返却 | E-03 (行66-73) | ○ |
| C-066 | 親がacceptした依存でaccepted返却 | E-03 (行75-79) | ○ |
| C-067 | accept/declineされていない場合親に伝播 | E-03 (行80-87) | ○ |
| C-068 | キャッシュ不在モジュールスキップ | E-03 (行42-47) | ○ |
| C-069 | addAllToSetで要素追加 | E-03 (行98-103) | ○ |
| C-070 | addAllToSetで重複排除 | E-03 (行101) | ○ |
| C-071 | 空配列同士のaddAllToSet | E-03 (行98-103) | ○ |
| C-072 | self-declinedでignoreDeclined=falseのエラー | E-03 (行135-143) | ○ |
| C-073 | self-declinedでignoreDeclined=trueの無視 | E-03 (行137) | ○ |
| C-074 | unacceptedでignoreUnaccepted=falseのエラー | E-03 (行155-160) | ○ |
| C-075 | declinedでignoreDeclined=falseのエラー | E-03 (行144-153) | ○ |
| C-076 | acceptedでappliedUpdateとoutdatedModules追加 | E-03 (行162-191) | ○ |
| C-077 | disposedでoutdatedModules追加 | E-03 (行166-195) | ○ |
| C-078 | disposeフェーズでdisposeHandlers呼出しキャッシュ削除 | E-03 (行224-264) | ○ |
| C-079 | 子モジュールのparentsから削除 | E-03 (行256-263) | ○ |
| C-080 | disposeHandlerにdataオブジェクト渡し保存 | E-03 (行237-244) | ○ |
| C-081 | module.hot.active=false設定 | E-03 (行247) | ○ |
| C-082 | appliedUpdateのファクトリ設定 | E-03 (行286-290) | ○ |
| C-083 | currentUpdateRuntimeの関数実行 | E-03 (行293-295) | ○ |
| C-084 | acceptコールバック呼出 | E-03 (行298-363) | ○ |
| C-085 | acceptコールバックエラー時errorHandler呼出 | E-03 (行324-345) | ○ |
| C-086 | acceptコールバックエラー時errorHandlerなしでreportError | E-03 (行346-357) | ○ |
| C-087 | errorHandler自体エラー時両方reportError | E-03 (行331-344) | ○ |
| C-088 | self-acceptedモジュールのrequireSelf呼出 | E-03 (行370-409) | ○ |
| C-089 | self-accepted再読み込みエラー時errorHandler呼出 | E-03 (行376-407) | ○ |
| C-090 | acceptコールバックPromise返却時追加 | E-03 (行360-362) | △ |
| C-091 | onErroredがaccept-erroredで呼ばれる | E-03 (行348-354) | ○ |
| C-092 | $hmrInvalidateModuleHandlers$初回初期化 | E-03 (行421-426) | ○ |
| C-093 | 未登録moduleIdのcurrentUpdate登録 | E-03 (行427-429) | ○ |
| C-094 | 登録済みmoduleIdの上書き防止 | E-03 (行427) | ○ |
| C-095 | インストール済みチャンクのloadUpdateChunk | E-03 (行447-453) | ○ |
| C-096 | 未インストールチャンクのfalse設定 | E-03 (行454-456) | ○ |
| C-097 | removedModulesのfalse設定 | E-03 (行442-445) | ○ |
| C-098 | $ensureChunkHandlers$存在時HMRハンドラ登録 | E-03 (行458-469) | ○ |
| C-099 | generateJavascriptHMRのテンプレート変数置換 | E-04 (行16-35) | ○ |
| C-100 | $key$プレースホルダのtype置換 | E-04 (行20) | ○ |
| C-101 | $moduleFactories$のRuntimeGlobals置換 | E-04 (行24) | ○ |
| C-102 | checkTestでundefinedはtrue | E-05 (行67) | ○ |
| C-103 | checkTestで関数の戻り値 | E-05 (行68-69) | ○ |
| C-104 | checkTestで文字列プレフィックスマッチ | E-05 (行71-73) | ○ |
| C-105 | checkTestでRegExpマッチ | E-05 (行75-77) | ○ |
| C-106 | checkTestで文字列かつname===nullの場合false | E-05 (行72-73) | ○ |
| C-107 | checkTestでRegExpかつname===nullの場合false | E-05 (行76-77) | ○ |
| C-108 | checkTestでその他の型はfalse | E-05 (行79) | ○ |
| C-109 | LazyCompilationDependencyコンストラクタ | E-05 (行86-88) | ○ |
| C-110 | category === 'esm' | E-05 (行91-93) | ○ |
| C-111 | type === 'lazy import()' | E-05 (行95-97) | ○ |
| C-112 | getResourceIdentifier | E-05 (行102-104) | ○ |
| C-113 | LazyCompilationProxyModuleコンストラクタ | E-05 (行118-129) | ○ |
| C-114 | identifier() | E-05 (行134-136) | ○ |
| C-115 | readableIdentifier() | E-05 (行142-146) | ○ |
| C-116 | updateCacheModule() | E-05 (行155-163) | ○ |
| C-117 | libIdent() | E-05 (行169-172) | ○ |
| C-118 | needBuild buildInfoなしでtrue | E-05 (行181) | ○ |
| C-119 | needBuild active変更でtrue | E-05 (行181) | ○ |
| C-120 | needBuild active同一でfalse | E-05 (行181) | ○ |
| C-121 | build処理 | E-05 (行192-208) | ○ |
| C-122 | build active=trueでAsyncDependenciesBlock追加 | E-05 (行201-206) | ○ |
| C-123 | build active=falseでブロック未追加 | E-05 (行201) | ○ |
| C-124 | build callback呼出 | E-05 (行207) | ○ |
| C-125 | getSourceTypes | E-05 (行214) | ○ |
| C-126 | size()が200返却 | E-05 (行222) | ○ |
| C-127 | size()でtype===undefinedでも200 | E-05 (行221-222) | ○ |
| C-128 | codeGeneration active時 | E-05 (行229-298) | ○ |
| C-129 | codeGeneration 非active時 | E-05 (行284-298) | ○ |
| C-130 | codeGenerationにHMR accept/dispose含む | E-05 (行272-278, 290-293) | ○ |
| C-131 | updateHashでactiveフラグとdata含む | E-05 (行312-314) | ○ |
| C-132 | updateHashでactive=falseで空文字列 | E-05 (行313) | ○ |
| C-133 | LazyCompilationDependencyFactoryコンストラクタ | E-05 (行321-322) | ○ |
| C-134 | create()でoriginalModule返却 | E-05 (行330-337) | ○ |
| C-135 | LazyCompilationPluginコンストラクタ | E-05 (行371-376) | ○ |
| C-136 | apply()でbeforeCompileフックbackend初期化 | E-05 (行386-398) | ○ |
| C-137 | 2回目以降beforeCompileスキップ | E-05 (行387) | ○ |
| C-138 | backendがPromise返却時の対応 | E-05 (行393-397) | ○ |
| C-139 | HMR依存のみでdynamic import参照なし時元モジュール返却 | E-05 (行406-426) | ○ |
| C-140 | imports=trueでimport()依存時ProxyModule返却 | E-05 (行427-458) | ○ |
| C-141 | entries=trueでentry依存時ProxyModule返却 | E-05 (行427-458) | ○ |
| C-142 | webpack-dev-serverクライアント除外 | E-05 (行440-443) | ○ |
| C-143 | webpack/hotモジュール除外 | E-05 (行440-443) | ○ |
| C-144 | checkTest false時元モジュール返却 | E-05 (行443) | ○ |
| C-145 | backend.module()===null時元モジュール返却 | E-05 (行448) | ○ |
| C-146 | LazyCompilationDependencyFactory登録 | E-05 (行461-464) | ○ |
| C-147 | shutdownフックでbackend.dispose呼出 | E-05 (行467-469) | ○ |
| C-148 | ファクトリ関数がBackendHandler返却 | E-06 (行25) | ○ |
| C-149 | SSEリクエストでモジュールアクティブ化 | E-06 (行89-97) | ○ |
| C-150 | 複数キーリクエストで複数アクティブ化 | E-06 (行67, 90-97) | ○ |
| C-151 | アクティブ化時invalidate()呼出 | E-06 (行98) | ○ |
| C-152 | 既にアクティブ時invalidate非呼出 | E-06 (行93-97) | ○ |
| C-153 | SSEレスポンスContent-Type | E-06 (行82-87) | ○ |
| C-154 | CORSヘッダー設定 | E-06 (行84-86) | ○ |
| C-155 | ソケットclose時120秒後非アクティブ化 | E-06 (行68-79) | △ |
| C-156 | req.url===undefined時早期リターン | E-06 (行66) | ○ |
| C-157 | options.serverが関数時使用 | E-06 (行38-39) | ○ |
| C-158 | httpsサーバー作成 | E-06 (行31-33, 41) | ○ |
| C-159 | keyプロパティによるhttps判定 | E-06 (行33) | ○ |
| C-160 | options.listenが関数時使用 | E-06 (行52-53) | ○ |
| C-161 | listenオブジェクトでport省略時 | E-06 (行55-58) | ○ |
| C-162 | dispose()でサーバー閉鎖ソケット破棄 | E-06 (行141-151) | ○ |
| C-163 | requestListener除去 | E-06 (行144) | ○ |
| C-164 | module()でclient/data/active返却 | E-06 (行152-162) | ○ |
| C-165 | 非アクティブモジュールでactive=false | E-06 (行156) | ○ |
| C-166 | バックスラッシュのスラッシュ変換 | E-06 (行154) | ○ |
| C-167 | @記号のアンダースコア変換 | E-06 (行154) | ○ |
| C-168 | IPv6 ::アドレスのlocalhost変換 | E-06 (行132-133) | ○ |
| C-169 | IPv6アドレスのブラケット付きURL | E-06 (行134-135) | ○ |
| C-170 | 0.0.0.0のlocalhost変換 | E-06 (行132-133) | ○ |
| C-171 | 文字列アドレス時Error | E-06 (行127-129) | ○ |
| C-172 | 新ソケットsocketsセット追加 | E-06 (行108) | ○ |
| C-173 | ソケットclose時socketsセット削除 | E-06 (行109-111) | ○ |
| C-174 | isClosing時ソケット即座破棄 | E-06 (行112) | ○ |
| C-175 | 一般的clientError時logger.warn | E-06 (行114-116) | ○ |
| C-176 | 'Server is disposing'メッセージ無視 | E-06 (行115) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-053（internalApplyのfailステータス遷移）：applyフェーズ中のreportErrorがerror変数を設定し、onAccepted内でerror存在時にfailに遷移する。コードフローは追跡可能だが、複数のPromiseチェーンにまたがるため完全な動作保証にはランタイム環境でのテストが必要。
  - 候補：E-01 (行320-401) のフロー追跡 / 実行時テスト / webpackのE2Eテスト参照
- C-090（非同期acceptコールバック）：acceptコールバックがthenableを返すケースはコード上で確認できる（行360-362）が、実際にPromiseを返すacceptコールバックの具体例がソースコード内にない。
  - 候補：webpackドキュメントのHMR API仕様 / 実行時テスト
- C-155（120秒遅延の設計意図）：setTimeout 120000msはコード中に直接記述されている（行69-79）が、なぜ120秒なのかの設計根拠ドキュメントが見当たらない。
  - 候補：webpackのissue / PR / コミットメッセージ
- C-053, C-090, C-155 以外に、以下のClaimも完全な根拠確認が難しい：
  - C-048：invalidatedモジュール存在時のready遷移条件（applyInvalidatedModules()の戻り値に依存）
  - C-054：再帰的internalApplyのoutdatedModulesマージ動作
  - C-091：onErroredコールバックのイベントタイプ名の正確性

## 5) リスクフラグ（レビュー観点）
- 0: HotModuleReplacement.runtime.jsとJavascriptHotModuleReplacement.runtime.jsはランタイムテンプレートであり、webpack内部の変数プレースホルダ（$xxx$）を使用している。テストケースではこれらをモック化する前提だが、実際のテスト実装では注意が必要。
- 1: LazyCompilationPlugin.jsのapply()メソッドは複数のwebpackフック（beforeCompile, thisCompilation, shutdown）を登録しており、テスト時にはwebpackのCompiler/Compilationオブジェクトのモックが必要。統合テストでの検証が望ましい。
- 1: lazyCompilationBackend.jsはHTTP/HTTPSサーバーとServer-Sent Eventsを使用しており、ネットワーク関連のテストにはソケットモックやサーバーのライフサイクル管理が必要。
- 0: HotModuleReplacementRuntimeModule.jsとJavascriptHotModuleReplacementHelper.jsは比較的単純なテンプレート置換処理であり、テストの信頼性は高い。

## 6) レビュアーチェックリスト（最小）
- [ ] ランタイムテンプレート（$xxx$プレースホルダ）のテストケースで、プレースホルダの置換対象が全て網羅されているか確認
- [ ] HMRステータス遷移（idle → check → prepare → ready → dispose → apply → idle / abort / fail）のカバレッジが十分か確認
- [ ] LazyCompilationPlugin.apply()のフックタップ（beforeCompile, thisCompilation, shutdown）の相互作用に関するテストが十分か確認
- [ ] lazyCompilationBackendのSSEサーバーのタイムアウト（120秒）と接続管理のテストケースが現実的に実装可能か確認
- [ ] getAffectedModuleEffectsの伝播ロジック（accept/decline/unaccepted/self-declined）の全パスがカバーされているか確認
- [ ] acceptコールバックのエラーハンドリングチェーン（accept-errored, accept-error-handler-errored, self-accept-errored, self-accept-error-handler-errored）が網羅されているか確認
