---
generated_at: 2026-02-24 15:30:00
metrics:
  claims_total: 173
  claims_with_evidence: 173
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：app.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：173 / 173、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全テストケースにソースコード根拠あり

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

- E-01: `packages/app/src/context/file/content-cache.ts` - ファイルコンテンツキャッシュ管理（approxBytes, setFileContentBytes, removeFileContentBytes, touchFileContent, evictContentLru, resetFileContentLru, hasFileContent, getFileContentBytesTotal, getFileContentEntryCount）
- E-02: `packages/app/src/context/file/path.ts` - ファイルパスユーティリティ（stripFileProtocol, stripQueryAndHash, unquoteGitPath, decodeFilePath, encodeFilePath, createPathHelpers）
- E-03: `packages/app/src/context/file/watcher.ts` - ファイル変更監視（invalidateFromWatcher）
- E-04: `packages/app/src/context/file/tree-store.ts` - ファイルツリーストア（createFileTreeStore）
- E-05: `packages/app/src/utils/uuid.ts` - UUID生成（uuid）
- E-06: `packages/app/src/utils/scoped-cache.ts` - スコープキャッシュ（createScopedCache）
- E-07: `packages/app/src/utils/server-health.ts` - サーバーヘルスチェック（checkServerHealth）
- E-08: `packages/app/src/utils/terminal-writer.ts` - ターミナル書き込み（terminalWriter）
- E-09: `packages/app/src/utils/worktree.ts` - ワークツリー状態管理（Worktree）
- E-10: `packages/app/src/context/model-variant.ts` - モデルバリアント（getConfiguredAgentVariant, resolveModelVariant, cycleModelVariant）
- E-11: `packages/app/src/context/notification-index.ts` - 通知インデックス（buildNotificationIndex）
- E-12: `packages/app/src/context/global-sync/session-trim.ts` - セッショントリム（sessionUpdatedAt, compareSessionRecent, takeRecentSessions, trimSessions）
- E-13: `packages/app/src/context/layout-scroll.ts` - スクロール永続化（createScrollPersistence）
- E-14: `packages/app/src/addons/serialize.ts` - ターミナルシリアライズ（SerializeAddon）
- E-15: `packages/app/src/components/session/session-context-breakdown.ts` - セッションコンテキスト内訳（estimateSessionContextBreakdown）
- E-16: `packages/app/src/components/session/session-context-metrics.ts` - セッションコンテキストメトリクス（getSessionContextMetrics）
- E-17: `packages/app/src/pages/layout/helpers.ts` - レイアウトヘルパー（workspaceKey, sortSessions, isRootVisibleSession, childMapByParent, getDraggableId, displayName, errorMessage, syncWorkspaceOrder）
- E-18: `packages/app/src/pages/layout/sidebar-project-helpers.ts` - サイドバープロジェクトヘルパー（projectSelected, projectTileActive）
- E-19: `packages/app/src/pages/session/helpers.ts` - セッションヘルパー（focusTerminalById, createOpenReviewFile, createOpenSessionFileTab, getTabReorderIndex）
- E-20: `packages/app/src/pages/session/file-tab-scroll.ts` - ファイルタブスクロール（nextTabListScrollLeft, createFileTabListSync）
- E-21: `packages/app/src/pages/session/message-gesture.ts` - メッセージジェスチャー（normalizeWheelDelta, shouldMarkBoundaryGesture）
- E-22: `packages/app/src/pages/session/scroll-spy.ts` - スクロールスパイ（pickVisibleId, pickOffsetId, createScrollSpy）
- E-23: `packages/app/src/utils/notification-click.ts` - 通知クリック（handleNotificationClick）
- E-24: `packages/app/src/context/global-sync/utils.ts` - グローバル同期ユーティリティ（cmp, normalizeProviderList, sanitizeProject）
- E-25: `packages/app/src/utils/base64.ts` - Base64デコード（decode64）
- E-26: `packages/app/src/utils/time.ts` - 相対時刻（getRelativeTime）
- E-27: `packages/app/src/utils/id.ts` - ID生成（Identifier）
- E-28: `packages/app/src/utils/runtime-adapters.ts` - ランタイムアダプター（isDisposable, disposeIfDisposable, hasSetOption, setOptionIfSupported, getHoveredLinkText, getSpeechRecognitionCtor）
- E-29: `packages/app/src/pages/layout/sidebar-shell-helpers.ts` - サイドバーシェルヘルパー（sidebarExpanded）
- E-30: `packages/app/src/utils/persist.ts` - 永続化（Persist, persisted, removePersisted）
- E-31: `packages/app/src/utils/prompt.ts` - プロンプトユーティリティ（extractPromptFromParts）
- E-32: `packages/app/src/context/global-sync/event-reducer.ts` - イベントリデューサー（applyGlobalEvent, applyDirectoryEvent）

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

### ファイルコンテンツキャッシュ（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | approxBytes関数がパッチ/diff付きコンテンツのバイト数を計算 | E-01 L9-16 | ○ |
| C-02 | approxBytesがパッチなしの場合を正しく処理 | E-01 L10-13 | ○ |
| C-03 | setFileContentBytesがバイト数を記録 | E-01 L66-68 | ○ |
| C-04 | removeFileContentBytesがバイト数を削除 | E-01 L70-72 | ○ |
| C-05 | removeFileContentBytesが存在しないパスを安全に処理 | E-01 L32-37 | ○ |
| C-06 | touchFileContentがLRU更新 | E-01 L26-30 | ○ |
| C-07 | evictContentLruがエントリ数上限を適用 | E-01 L44-59 | ○ |
| C-08 | evictContentLruがバイト数上限を適用 | E-01 L47 | ○ |
| C-09 | resetFileContentLruが完全リセット | E-01 L62-64 | ○ |
| C-10 | hasFileContentが存在確認 | E-01 L86-88 | ○ |
| C-11 | hasFileContentが不存在確認 | E-01 L86-88 | ○ |

### ファイルパスユーティリティ（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | stripFileProtocolがfile://を除去 | E-02 L1-4 | ○ |
| C-13 | stripFileProtocolが非file://を変更しない | E-02 L2 | ○ |
| C-14 | stripQueryAndHashがクエリを除去 | E-02 L6-17 | ○ |
| C-15 | stripQueryAndHashがハッシュを除去 | E-02 L6-17 | ○ |
| C-16 | stripQueryAndHashがクエリとハッシュの複合を処理 | E-02 L10-12 | ○ |
| C-17 | unquoteGitPathがクォートされたパスをデコード | E-02 L19-73 | ○ |
| C-18 | unquoteGitPathが8進数エスケープをデコード | E-02 L38-48 | ○ |
| C-19 | unquoteGitPathがクォートなしパスをそのまま返却 | E-02 L20-21 | ○ |
| C-20 | decodeFilePathがURLエンコードをデコード | E-02 L75-81 | ○ |
| C-21 | decodeFilePathが不正エンコードを安全に処理 | E-02 L78-80 | ○ |
| C-22 | encodeFilePathがWindowsパスを変換 | E-02 L83-102 | ○ |
| C-23 | encodeFilePathがパスセグメントをエンコード | E-02 L95-101 | ○ |
| C-24 | createPathHelpers.normalizeがルートプレフィックスを除去 | E-02 L104-133 | ○ |
| C-25 | createPathHelpers.normalizeが./プレフィックスを除去 | E-02 L124-126 | ○ |
| C-26 | createPathHelpers.tabがタブURLを生成 | E-02 L135-138 | ○ |
| C-27 | createPathHelpers.pathFromTabがパスを抽出 | E-02 L140-143 | ○ |
| C-28 | createPathHelpers.pathFromTabが非file://でundefined | E-02 L141 | ○ |

### ファイル変更監視（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-29 | invalidateFromWatcherがファイルをリロード | E-03 L31-33 | ○ |
| C-30 | invalidateFromWatcherが.gitディレクトリを無視 | E-03 L29 | ○ |
| C-31 | invalidateFromWatcherがaddイベントで親をリフレッシュ | E-03 L47-52 | ○ |
| C-32 | invalidateFromWatcherが不正イベントを無視 | E-03 L19 | ○ |

### ファイルツリーストア（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | createFileTreeStore.listDirがファイル一覧を取得 | E-04 L42-128 | ○ |
| C-34 | createFileTreeStore.listDirがロード済みをスキップ | E-04 L47 | ○ |
| C-35 | createFileTreeStore.listDirがforce=trueで強制取得 | E-04 L47 | ○ |
| C-36 | createFileTreeStore.expandDirが展開状態に設定 | E-04 L130-135 | ○ |
| C-37 | createFileTreeStore.collapseDirが折りたたみ状態に設定 | E-04 L137-141 | ○ |
| C-38 | createFileTreeStore.childrenが子ノードを取得 | E-04 L148-158 | ○ |
| C-39 | createFileTreeStore.childrenが未ロード時に空配列 | E-04 L151 | ○ |
| C-40 | createFileTreeStore.resetが全状態をリセット | E-04 L30-35 | ○ |

### UUID生成（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | uuid関数がcrypto.randomUUIDを使用 | E-05 L3-11 | ○ |
| C-42 | uuid関数がフォールバックを使用 | E-05 L1, L10 | ○ |

### スコープキャッシュ（E-06）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-43 | createScopedCache.getが新規作成 | E-06 L70-89 | ○ |
| C-44 | createScopedCache.getがキャッシュヒット | E-06 L72-76 | ○ |
| C-45 | createScopedCache.getがTTL期限切れを処理 | E-06 L21-24, L77-80 | ○ |
| C-46 | createScopedCache.getがmaxEntries制限を適用 | E-06 L41-51 | ○ |
| C-47 | createScopedCache.peekがLRU更新なしで取得 | E-06 L61-68 | ○ |
| C-48 | createScopedCache.peekが存在しないキーでundefined | E-06 L63-64 | ○ |
| C-49 | createScopedCache.deleteが削除とdispose | E-06 L53-58 | ○ |
| C-50 | createScopedCache.clearが全削除 | E-06 L91-96 | ○ |

### サーバーヘルスチェック（E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | checkServerHealthがhealthy=trueを返却 | E-07 L58-83 | ○ |
| C-52 | checkServerHealthがサーバー不応答でhealthy=false | E-07 L67-71 | ○ |
| C-53 | checkServerHealthがタイムアウトでhealthy=false | E-07 L63-64 | ○ |
| C-54 | checkServerHealthがリトライ動作 | E-07 L65-71 | ○ |

### ターミナル書き込み（E-08）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | terminalWriter.pushがバッファリング | E-08 L42-50 | ○ |
| C-56 | terminalWriter.pushが空文字列を無視 | E-08 L43 | ○ |
| C-57 | terminalWriter.pushが複数を結合 | E-08 L30 | ○ |
| C-58 | terminalWriter.flushが即座に書き込み | E-08 L52-62 | ○ |
| C-59 | terminalWriter.flushが空でdone即呼び出し | E-08 L53-55 | ○ |

### ワークツリー状態管理（E-09）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-60 | Worktree.getが状態を取得 | E-09 L33-35 | ○ |
| C-61 | Worktree.getが未登録でundefined | E-09 L34 | ○ |
| C-62 | Worktree.pendingがpending状態に設定 | E-09 L36-41 | ○ |
| C-63 | Worktree.readyがready状態に設定しwaiterを解決 | E-09 L42-50 | ○ |
| C-64 | Worktree.failedがfailed状態に設定しwaiterを解決 | E-09 L51-59 | ○ |
| C-65 | Worktree.waitがpending以外で即座に解決 | E-09 L60-63 | ○ |

### モデルバリアント（E-10）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-66 | getConfiguredAgentVariantがvariantを返却 | E-10 L21-29 | ○ |
| C-67 | getConfiguredAgentVariantがvariantなしでundefined | E-10 L22 | ○ |
| C-68 | getConfiguredAgentVariantがモデル不一致でundefined | E-10 L25-26 | ○ |
| C-69 | resolveModelVariantがselectedを優先 | E-10 L31-35 | ○ |
| C-70 | resolveModelVariantがconfiguredを使用 | E-10 L33 | ○ |
| C-71 | resolveModelVariantが両方なしでundefined | E-10 L34 | ○ |
| C-72 | cycleModelVariantが次のvariantにサイクル | E-10 L37-50 | ○ |
| C-73 | cycleModelVariantが最後でundefined | E-10 L41 | ○ |
| C-74 | cycleModelVariantが空配列でundefined | E-10 L38 | ○ |

### 通知インデックス（E-11）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-75 | buildNotificationIndexがセッションインデックスを構築 | E-11 L8-66 | ○ |
| C-76 | buildNotificationIndexが未読カウントを集計 | E-11 L30 | ○ |
| C-77 | buildNotificationIndexがエラーフラグを設定 | E-11 L31 | ○ |
| C-78 | buildNotificationIndexがプロジェクトインデックスを構築 | E-11 L35-49 | ○ |
| C-79 | buildNotificationIndexが空リストで空Map | E-11 L18-50 | ○ |

### セッショントリム（E-12）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | sessionUpdatedAtがupdatedを返却 | E-12 L5-7 | ○ |
| C-81 | sessionUpdatedAtがcreatedをフォールバック | E-12 L6 | ○ |
| C-82 | compareSessionRecentが更新日時順でソート | E-12 L9-14 | ○ |
| C-83 | takeRecentSessionsが制限数まで取得 | E-12 L16-31 | ○ |
| C-84 | takeRecentSessionsがcutoffでフィルタ | E-12 L24 | ○ |
| C-85 | takeRecentSessionsがlimit=0で空配列 | E-12 L17 | ○ |
| C-86 | trimSessionsがアーカイブを除外 | E-12 L40-41 | ○ |
| C-87 | trimSessionsが親子を一緒に保持 | E-12 L49-54 | ○ |

### スクロール永続化（E-13）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-88 | createScrollPersistence.scrollがスクロール位置を取得 | E-13 L40-43 | ○ |
| C-89 | createScrollPersistence.setScrollが位置を保存 | E-13 L54-63 | ○ |
| C-90 | createScrollPersistence.setScrollが重複をスキップ | E-13 L58 | ○ |
| C-91 | createScrollPersistence.flushが永続化 | E-13 L65-74 | ○ |
| C-92 | createScrollPersistence.dropがキャッシュを削除 | E-13 L85-102 | ○ |

### ターミナルシリアライズ（E-14）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-93 | SerializeAddon.serializeがバッファをシリアライズ | E-14 L529-557 | ○ |
| C-94 | SerializeAddon.serializeが未初期化でエラー | E-14 L530-532 | ○ |
| C-95 | SerializeAddon.serializeAsTextがプレーンテキストでシリアライズ | E-14 L563-603 | ○ |
| C-96 | SerializeAddon.disposeがリソースをクリーンアップ | E-14 L518-520 | ○ |

### セッションコンテキスト内訳（E-15）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-97 | estimateSessionContextBreakdownが内訳を推定 | E-15 L70-132 | ○ |
| C-98 | estimateSessionContextBreakdownがinput=0で空配列 | E-15 L76 | ○ |
| C-99 | estimateSessionContextBreakdownがスケーリング | E-15 L119-131 | ○ |

### セッションコンテキストメトリクス（E-16）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-100 | getSessionContextMetricsがメトリクスを取得 | E-16 L80-82 | ○ |
| C-101 | getSessionContextMetricsが空メッセージでcontext=undefined | E-16 L53 | ○ |
| C-102 | getSessionContextMetricsがトークンを集計 | E-16 L37-39 | ○ |

### レイアウトヘルパー（E-17）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-103 | workspaceKeyが末尾スラッシュを除去 | E-17 L4-9 | ○ |
| C-104 | workspaceKeyがWindowsドライブを処理 | E-17 L5-6 | ○ |
| C-105 | sortSessionsが更新順でソート | E-17 L11-23 | ○ |
| C-106 | sortSessionsが1分以内をID順 | E-17 L18 | ○ |
| C-107 | isRootVisibleSessionがルート判定 | E-17 L25-26 | ○ |
| C-108 | isRootVisibleSessionがparentIDありでfalse | E-17 L26 | ○ |
| C-109 | childMapByParentが子をグループ化 | E-17 L31-43 | ○ |
| C-110 | getDraggableIdがドラッグIDを取得 | E-17 L45-51 | ○ |
| C-111 | getDraggableIdがdraggableなしでundefined | E-17 L48 | ○ |
| C-112 | displayNameがnameを返却 | E-17 L53-54 | ○ |
| C-113 | displayNameがworktreeから表示名 | E-17 L54 | ○ |
| C-114 | errorMessageがErrorからメッセージ | E-17 L56-63 | ○ |
| C-115 | errorMessageがdata.messageを返却 | E-17 L57-59 | ○ |
| C-116 | syncWorkspaceOrderが順序を同期 | E-17 L65-70 | ○ |

### サイドバープロジェクトヘルパー（E-18）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-117 | projectSelectedがworktree一致でtrue | E-18 L1-2 | ○ |
| C-118 | projectSelectedがsandboxes含有でtrue | E-18 L2 | ○ |

### セッションヘルパー（E-19）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-119 | focusTerminalByIdがフォーカス成功 | E-19 L3-21 | ○ |
| C-120 | focusTerminalByIdが要素なしでfalse | E-19 L6 | ○ |
| C-121 | getTabReorderIndexが移動先インデックス | E-19 L59-64 | ○ |
| C-122 | getTabReorderIndexがfrom不存在でundefined | E-19 L62 | ○ |

### ファイルタブスクロール（E-20）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-123 | nextTabListScrollLeftが右端にスクロール | E-20 L9-14 | ○ |
| C-124 | nextTabListScrollLeftがコンテキスト開きで0 | E-20 L11 | ○ |

### メッセージジェスチャー（E-21）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-125 | normalizeWheelDeltaが行単位で40倍 | E-21 L2 | ○ |
| C-126 | normalizeWheelDeltaがページ単位でrootHeight倍 | E-21 L3 | ○ |
| C-127 | shouldMarkBoundaryGestureがスクロール不可でtrue | E-21 L13 | ○ |
| C-128 | shouldMarkBoundaryGestureが上端でtrue | E-21 L17 | ○ |

### スクロールスパイ（E-22）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-129 | pickVisibleIdが最高表示率を返却 | E-22 L21-35 | ○ |
| C-130 | pickVisibleIdが空リストでundefined | E-22 L22 | ○ |
| C-131 | pickOffsetIdがcutoff以下の最大topを返却 | E-22 L37-59 | ○ |
| C-132 | createScrollSpy.registerが要素を登録 | E-22 L207-220 | ○ |
| C-133 | createScrollSpy.unregisterが要素を解除 | E-22 L222-232 | ○ |
| C-134 | createScrollSpy.destroyがリソースをクリア | E-22 L252-263 | ○ |

### 通知クリック（E-23）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-135 | handleNotificationClickがフォーカスとナビゲート | E-23 L8-12 | ○ |
| C-136 | handleNotificationClickがhref無しでフォーカスのみ | E-23 L10 | ○ |

### グローバル同期ユーティリティ（E-24）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-137 | cmpが文字列を比較 | E-24 L3 | ○ |
| C-138 | normalizeProviderListがdeprecatedをフィルタ | E-24 L5-13 | ○ |
| C-139 | sanitizeProjectがicon.url/overrideを削除 | E-24 L15-25 | ○ |

### Base64デコード（E-25）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-140 | decode64がBase64をデコード | E-25 L3-10 | ○ |
| C-141 | decode64が不正Base64でundefined | E-25 L7-8 | ○ |
| C-142 | decode64がundefined入力でundefined | E-25 L4 | ○ |

### 相対時刻（E-26）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-143 | getRelativeTimeが1分未満でJust now | E-26 L10 | ○ |
| C-144 | getRelativeTimeが1時間未満でXm ago | E-26 L11 | ○ |
| C-145 | getRelativeTimeが24時間未満でXh ago | E-26 L12 | ○ |
| C-146 | getRelativeTimeが24時間以上でXd ago | E-26 L13 | ○ |

### ID生成（E-27）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-147 | Identifier.ascendingが昇順ID生成 | E-27 L22-24 | ○ |
| C-148 | Identifier.descendingが降順ID生成 | E-27 L26-28 | ○ |
| C-149 | Identifier.ascendingがgivenを返却 | E-27 L32-40 | ○ |
| C-150 | Identifier.ascendingが不正プレフィックスでエラー | E-27 L36-38 | ○ |

### ランタイムアダプター（E-28）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-151 | isDisposableがdisposeありでtrue | E-28 L7-9 | ○ |
| C-152 | isDisposableがdisposeなしでfalse | E-28 L8 | ○ |
| C-153 | disposeIfDisposableがDisposableでdispose呼び出し | E-28 L11-14 | ○ |
| C-154 | hasSetOptionがsetOptionありでtrue | E-28 L16-18 | ○ |
| C-155 | getHoveredLinkTextがtext返却 | E-28 L25-31 | ○ |

### サイドバーシェルヘルパー（E-29）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-156 | sidebarExpandedがmobile=trueでtrue | E-29 L1 | ○ |
| C-157 | sidebarExpandedがopened=trueでtrue | E-29 L1 | ○ |

### 永続化（E-30）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-158 | Persist.globalがグローバルターゲット作成 | E-30 L306-308 | ○ |
| C-159 | Persist.workspaceがワークスペースターゲット作成 | E-30 L309-311 | ○ |
| C-160 | Persist.sessionがセッションターゲット作成 | E-30 L312-314 | ○ |

### プロンプトユーティリティ（E-31）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-161 | extractPromptFromPartsがテキストパートを抽出 | E-31 L56-203 | ○ |
| C-162 | extractPromptFromPartsがファイルパートを抽出 | E-31 L81-102 | ○ |
| C-163 | extractPromptFromPartsが画像データURLを抽出 | E-31 L104-113 | ○ |
| C-164 | extractPromptFromPartsがエージェントパートを抽出 | E-31 L115-127 | ○ |
| C-165 | extractPromptFromPartsが空パートで空テキスト | E-31 L197-199 | ○ |

### イベントリデューサー（E-32）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-166 | applyGlobalEventがglobal.disposedでrefresh | E-32 L23-26 | ○ |
| C-167 | applyGlobalEventがproject.updatedで更新 | E-32 L28-40 | ○ |
| C-168 | applyDirectoryEventがsession.createdで追加 | E-32 L94-107 | ○ |
| C-169 | applyDirectoryEventがsession.deletedで削除 | E-32 L135-150 | ○ |
| C-170 | applyDirectoryEventがmessage.updatedで追加/更新 | E-32 L167-187 | ○ |
| C-171 | applyDirectoryEventがmessage.part.deltaで差分更新 | E-32 L243-259 | ○ |
| C-172 | applyDirectoryEventがpermission.askedで追加 | E-32 L268-288 | ○ |
| C-173 | applyDirectoryEventがpermission.repliedで削除 | E-32 L289-303 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全てのテストケースにソースコード根拠あり

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードの関数/メソッド定義と直接対応している

## 6) レビュアーチェックリスト（最小）
- [ ] 各テストケースがソースコードの実際の実装と一致しているか確認
- [ ] 境界値テストが適切にエッジケースをカバーしているか確認
- [ ] 異常系テストが想定されるエラーシナリオを網羅しているか確認
- [ ] テスト観点（正常系/異常系/境界値）の分類が適切か確認
- [ ] 優先度の設定が機能の重要度と一致しているか確認
