---
generated_at: 2026-01-30 12:00:00
metrics:
  claims_total: 198
  claims_with_evidence: 198
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `packages/desktop-client/src/util/versions.ts`
- E-02: `packages/desktop-client/src/util/ruleUtils.ts`
- E-03: `packages/desktop-client/src/util/router-tools.ts`
- E-04: `packages/desktop-client/src/queries/aqlQuery.ts`
- E-05: `packages/desktop-client/src/queries/liveQuery.ts`
- E-06: `packages/desktop-client/src/queries/pagedQuery.ts`
- E-07: `packages/desktop-client/src/app/appSlice.ts`
- E-08: `packages/desktop-client/src/prefs/prefsSlice.ts`
- E-09: `packages/desktop-client/src/modals/modalsSlice.ts`
- E-10: `packages/desktop-client/src/accounts/accountsSlice.ts`
- E-11: `packages/desktop-client/src/payees/payeesSlice.ts`
- E-12: `packages/desktop-client/src/tags/tagsSlice.ts`
- E-13: `packages/desktop-client/src/transactions/transactionsSlice.ts`
- E-14: `packages/desktop-client/src/components/filters/subfieldFromFilter.ts`
- E-15: `packages/desktop-client/src/components/filters/updateFilterReducer.ts`
- E-16: `packages/desktop-client/src/components/filters/subfieldToOptions.ts`
- E-17: `packages/desktop-client/src/notes/linkParser.ts`
- E-18: `packages/desktop-client/src/style/customThemes.ts`
- E-19: `packages/desktop-client/src/components/util/accountValidation.ts`
- E-20: `packages/desktop-client/src/components/reports/util.ts`
- E-21: `packages/desktop-client/src/components/reports/numberFormatter.ts`
- E-22: `packages/desktop-client/src/components/reports/reportRanges.ts`
- E-23: `packages/desktop-client/src/components/budget/util.ts`
- E-24: `packages/desktop-client/src/components/budget/tracking/budgetsummary/fraction.ts`
- E-25: `packages/desktop-client/src/components/modals/ImportTransactionsModal/utils.ts`
- E-26: `packages/desktop-client/src/components/mobile/utils.ts`
- E-27: `packages/desktop-client/src/components/budget/goals/reducer.ts`
- E-28: `packages/desktop-client/src/components/schedules/schedule-edit-utils.ts`
- E-29: `packages/desktop-client/src/components/transactions/table/utils.ts`
- E-30: `packages/desktop-client/src/undo/index.ts`
- E-31: `packages/desktop-client/src/spreadsheet/bindings.ts`

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | UT-DC-001: parseSemanticVersionがバージョン文字列をパースする | E-01 | ○ |
| C-002 | UT-DC-002: parseSemanticVersionがvプレフィックスを処理する | E-01 | ○ |
| C-003 | UT-DC-003: cmpSemanticVersionが正の値を返す | E-01 | ○ |
| C-004 | UT-DC-004: cmpSemanticVersionが負の値を返す | E-01 | ○ |
| C-005 | UT-DC-005: cmpSemanticVersionが0を返す | E-01 | ○ |
| C-006 | UT-DC-006: マイナーバージョン差分検出 | E-01 | ○ |
| C-007 | UT-DC-007: パッチバージョン差分検出 | E-01 | ○ |
| C-008 | UT-DC-008: getIsOutdatedがtrueを返す | E-01 | ○ |
| C-009 | UT-DC-009: getIsOutdatedがfalseを返す | E-01 | ○ |
| C-010 | UT-DC-010: unknown入力でfalseを返す | E-01 | ○ |
| C-011 | UT-DC-011: groupActionsBySplitIndexがグループ化する | E-02 | ○ |
| C-012 | UT-DC-012: デフォルトsplitIndex=0 | E-02 | ○ |
| C-013 | UT-DC-013: 空配列入力 | E-02 | ○ |
| C-014 | UT-DC-014: aqlQueryがsendを呼ぶ | E-04 | ○ |
| C-015 | UT-DC-015: LiveQuery初期化 | E-05 | ○ |
| C-016 | UT-DC-016: addListener追加 | E-05 | ○ |
| C-017 | UT-DC-017: addListener削除関数 | E-05 | ○ |
| C-018 | UT-DC-018: run実行 | E-05 | ○ |
| C-019 | UT-DC-019: unsubscribe | E-05 | ○ |
| C-020 | UT-DC-020: optimisticUpdate | E-05 | ○ |
| C-021 | UT-DC-021: isRunning true | E-05 | ○ |
| C-022 | UT-DC-022: isRunning false | E-05 | ○ |
| C-023 | UT-DC-023: PagedQuery初期化 | E-06 | ○ |
| C-024 | UT-DC-024: hasNext true | E-06 | ○ |
| C-025 | UT-DC-025: hasNext false | E-06 | ○ |
| C-026 | UT-DC-026: fetchNext | E-06 | ○ |
| C-027 | UT-DC-027: fetchNext終端 | E-06 | ○ |
| C-028 | UT-DC-028: optimisticUpdate totalCount | E-06 | ○ |
| C-029 | UT-DC-029: setAppState | E-07 | ○ |
| C-030 | UT-DC-030: resetApp | E-07 | ○ |
| C-031 | UT-DC-031: resetApp部分保持 | E-07 | ○ |
| C-032 | UT-DC-032: setPrefs | E-08 | ○ |
| C-033 | UT-DC-033: mergeLocalPrefs | E-08 | ○ |
| C-034 | UT-DC-034: mergeGlobalPrefs | E-08 | ○ |
| C-035 | UT-DC-035: mergeSyncedPrefs | E-08 | ○ |
| C-036 | UT-DC-036: mergeServerPrefs | E-08 | ○ |
| C-037 | UT-DC-037: pushModal | E-09 | ○ |
| C-038 | UT-DC-038: keyboard-shortcuts特殊ケース | E-09 | ○ |
| C-039 | UT-DC-039: popModal | E-09 | ○ |
| C-040 | UT-DC-040: closeModal | E-09 | ○ |
| C-041 | UT-DC-041: replaceModal | E-09 | ○ |
| C-042 | UT-DC-042: collapseModals | E-09 | ○ |
| C-043 | UT-DC-043: setAccountsSyncing | E-10 | ○ |
| C-044 | UT-DC-044: markAccountFailed | E-10 | ○ |
| C-045 | UT-DC-045: markAccountSuccess | E-10 | ○ |
| C-046 | UT-DC-046: markUpdatedAccounts | E-10 | ○ |
| C-047 | UT-DC-047: markAccountRead | E-10 | ○ |
| C-048 | UT-DC-048: getAccountsById | E-10 | ○ |
| C-049 | UT-DC-049: getAccountsById空配列 | E-10 | ○ |
| C-050 | UT-DC-050: getAccountsById null | E-10 | ○ |
| C-051 | UT-DC-051: markPayeesDirty | E-11 | ○ |
| C-052 | UT-DC-052: getActivePayees | E-11 | ○ |
| C-053 | UT-DC-053: getPayeesById | E-11 | ○ |
| C-054 | UT-DC-054: markTagsDirty | E-12 | ○ |
| C-055 | UT-DC-055: setNewTransactions | E-13 | ○ |
| C-056 | UT-DC-056: updateNewTransactions | E-13 | ○ |
| C-057 | UT-DC-057: setLastTransaction | E-13 | ○ |
| C-058 | UT-DC-058: subfieldFromFilter date month | E-14 | ○ |
| C-059 | UT-DC-059: subfieldFromFilter date year | E-14 | ○ |
| C-060 | UT-DC-060: subfieldFromFilter amount inflow | E-14 | ○ |
| C-061 | UT-DC-061: subfieldFromFilter amount outflow | E-14 | ○ |
| C-062 | UT-DC-062: subfieldFromFilter fallback | E-14 | ○ |
| C-063 | UT-DC-063: updateFilterReducer配列から単一 | E-15 | ○ |
| C-064 | UT-DC-064: updateFilterReducer単一から配列 | E-15 | ○ |
| C-065 | UT-DC-065: updateFilterReducer set-value | E-15 | ○ |
| C-066 | UT-DC-066: updateFilterReducer未知アクション | E-15 | ○ |
| C-067 | UT-DC-067: subfieldToOptions amount-inflow | E-16 | ○ |
| C-068 | UT-DC-068: subfieldToOptions amount-outflow | E-16 | ○ |
| C-069 | UT-DC-069: subfieldToOptions month | E-16 | ○ |
| C-070 | UT-DC-070: subfieldToOptions year | E-16 | ○ |
| C-071 | UT-DC-071: isFilePathUrl Unix | E-17 | ○ |
| C-072 | UT-DC-072: isFilePathUrl Windows | E-17 | ○ |
| C-073 | UT-DC-073: isFilePathUrl file:// | E-17 | ○ |
| C-074 | UT-DC-074: isFilePathUrl http | E-17 | ○ |
| C-075 | UT-DC-075: normalizeUrl www | E-17 | ○ |
| C-076 | UT-DC-076: normalizeUrl Unix path | E-17 | ○ |
| C-077 | UT-DC-077: normalizeUrl https | E-17 | ○ |
| C-078 | UT-DC-078: parseNotes Markdown | E-17 | ○ |
| C-079 | UT-DC-079: parseNotes http | E-17 | ○ |
| C-080 | UT-DC-080: parseNotes hashtag | E-17 | ○ |
| C-081 | UT-DC-081: parseNotes空文字列 | E-17 | ○ |
| C-082 | UT-DC-082: parseNotes句読点除外 | E-17 | ○ |
| C-083 | UT-DC-083: extractRepoOwner | E-18 | ○ |
| C-084 | UT-DC-084: extractRepoOwner invalid | E-18 | ○ |
| C-085 | UT-DC-085: extractRepoOwner空 | E-18 | ○ |
| C-086 | UT-DC-086: normalizeGitHubRepo | E-18 | ○ |
| C-087 | UT-DC-087: normalizeGitHubRepoエラー | E-18 | ○ |
| C-088 | UT-DC-088: normalizeGitHubRepo空オーナー | E-18 | ○ |
| C-089 | UT-DC-089: validateThemeCss valid | E-18 | ○ |
| C-090 | UT-DC-090: validateThemeCss invalid selector | E-18 | ○ |
| C-091 | UT-DC-091: validateThemeCss @import | E-18 | ○ |
| C-092 | UT-DC-092: validateThemeCss non-custom property | E-18 | ○ |
| C-093 | UT-DC-093: validateThemeCss hex | E-18 | ○ |
| C-094 | UT-DC-094: validateThemeCss rgb | E-18 | ○ |
| C-095 | UT-DC-095: generateThemeId | E-18 | ○ |
| C-096 | UT-DC-096: generateThemeId決定性 | E-18 | ○ |
| C-097 | UT-DC-097: parseInstalledTheme valid | E-18 | ○ |
| C-098 | UT-DC-098: parseInstalledTheme invalid | E-18 | ○ |
| C-099 | UT-DC-099: parseInstalledTheme undefined | E-18 | ○ |
| C-100 | UT-DC-100: serializeInstalledTheme | E-18 | ○ |
| C-101 | UT-DC-101: validateAccountName valid | E-19 | ○ |
| C-102 | UT-DC-102: validateAccountName blank | E-19 | ○ |
| C-103 | UT-DC-103: validateAccountName duplicate | E-19 | ○ |
| C-104 | UT-DC-104: validateAccountName self | E-19 | ○ |
| C-105 | UT-DC-105: fromDateRepr | E-20 | ○ |
| C-106 | UT-DC-106: indexCashFlow | E-20 | ○ |
| C-107 | UT-DC-107: indexCashFlow合算 | E-20 | ○ |
| C-108 | UT-DC-108: calculateHasWarning category | E-20 | ○ |
| C-109 | UT-DC-109: calculateHasWarning payee | E-20 | ○ |
| C-110 | UT-DC-110: calculateHasWarning account | E-20 | ○ |
| C-111 | UT-DC-111: calculateHasWarning false | E-20 | ○ |
| C-112 | UT-DC-112: calculateHasWarning null | E-20 | ○ |
| C-113 | UT-DC-113: numberFormatterTooltip number | E-21 | ○ |
| C-114 | UT-DC-114: numberFormatterTooltip string | E-21 | ○ |
| C-115 | UT-DC-115: numberFormatterTooltip null | E-21 | ○ |
| C-116 | UT-DC-116: validateStart | E-22 | ○ |
| C-117 | UT-DC-117: validateEnd | E-22 | ○ |
| C-118 | UT-DC-118: validateRange | E-22 | ○ |
| C-119 | UT-DC-119: getLatestRange | E-22 | ○ |
| C-120 | UT-DC-120: getFullRange | E-22 | ○ |
| C-121 | UT-DC-121: calculateTimeRange full | E-22 | ○ |
| C-122 | UT-DC-122: calculateTimeRange sliding-window | E-22 | ○ |
| C-123 | UT-DC-123: addToBeBudgetedGroup | E-23 | ○ |
| C-124 | UT-DC-124: removeCategoriesFromGroups | E-23 | ○ |
| C-125 | UT-DC-125: removeCategoriesFromGroups空 | E-23 | ○ |
| C-126 | UT-DC-126: separateGroups | E-23 | ○ |
| C-127 | UT-DC-127: makeAmountGrey 0 | E-23 | ○ |
| C-128 | UT-DC-128: makeAmountGrey positive | E-23 | ○ |
| C-129 | UT-DC-129: makeBalanceAmountStyle negative | E-23 | ○ |
| C-130 | UT-DC-130: makeBalanceAmountStyle positive | E-23 | ○ |
| C-131 | UT-DC-131: makeAmountFullStyle | E-23 | ○ |
| C-132 | UT-DC-132: findSortDown top | E-23 | ○ |
| C-133 | UT-DC-133: findSortDown bottom | E-23 | ○ |
| C-134 | UT-DC-134: findSortUp bottom | E-23 | ○ |
| C-135 | UT-DC-135: findSortUp top | E-23 | ○ |
| C-136 | UT-DC-136: getScrollbarWidth | E-23 | ○ |
| C-137 | UT-DC-137: fraction normal | E-24 | ○ |
| C-138 | UT-DC-138: fraction denom=0 positive | E-24 | ○ |
| C-139 | UT-DC-139: fraction denom=0 zero | E-24 | ○ |
| C-140 | UT-DC-140: parseDate yyyy mm dd | E-25 | ○ |
| C-141 | UT-DC-141: parseDate mm dd yyyy | E-25 | ○ |
| C-142 | UT-DC-142: parseDate dd mm yyyy | E-25 | ○ |
| C-143 | UT-DC-143: parseDate month name | E-25 | ○ |
| C-144 | UT-DC-144: parseDate invalid | E-25 | ○ |
| C-145 | UT-DC-145: parseDate non-string | E-25 | ○ |
| C-146 | UT-DC-146: isDateFormat valid | E-25 | ○ |
| C-147 | UT-DC-147: isDateFormat invalid | E-25 | ○ |
| C-148 | UT-DC-148: applyFieldMappings | E-25 | ○ |
| C-149 | UT-DC-149: applyFieldMappings payee | E-25 | ○ |
| C-150 | UT-DC-150: parseAmountFields inflow | E-25 | ○ |
| C-151 | UT-DC-151: parseAmountFields outflow | E-25 | ○ |
| C-152 | UT-DC-152: parseAmountFields flip | E-25 | ○ |
| C-153 | UT-DC-153: parseAmountFields multiplier | E-25 | ○ |
| C-154 | UT-DC-154: parseAmountFields inOutMode | E-25 | ○ |
| C-155 | UT-DC-155: stripCsvImportTransaction | E-25 | ○ |
| C-156 | UT-DC-156: getPrettyPayee transfer | E-26 | ○ |
| C-157 | UT-DC-157: getPrettyPayee split | E-26 | ○ |
| C-158 | UT-DC-158: getPrettyPayee payee | E-26 | ○ |
| C-159 | UT-DC-159: getPrettyPayee undefined | E-26 | ○ |
| C-160 | UT-DC-160: getInitialState simple | E-27 | ○ |
| C-161 | UT-DC-161: getInitialState percentage | E-27 | ○ |
| C-162 | UT-DC-162: getInitialState null | E-27 | ○ |
| C-163 | UT-DC-163: getInitialState unsupported | E-27 | ○ |
| C-164 | UT-DC-164: templateReducer set-type | E-27 | ○ |
| C-165 | UT-DC-165: templateReducer set-template | E-27 | ○ |
| C-166 | UT-DC-166: templateReducer update-template | E-27 | ○ |
| C-167 | UT-DC-167: updateScheduleConditions | E-28 | ○ |
| C-168 | UT-DC-168: updateScheduleConditions date null | E-28 | ○ |
| C-169 | UT-DC-169: updateScheduleConditions amount null | E-28 | ○ |
| C-170 | UT-DC-170: serializeTransaction debit | E-29 | ○ |
| C-171 | UT-DC-171: serializeTransaction credit | E-29 | ○ |
| C-172 | UT-DC-172: serializeTransaction zero | E-29 | ○ |
| C-173 | UT-DC-173: serializeTransaction invalid date | E-29 | ○ |
| C-174 | UT-DC-174: deserializeTransaction debit | E-29 | ○ |
| C-175 | UT-DC-175: deserializeTransaction credit | E-29 | ○ |
| C-176 | UT-DC-176: deserializeTransaction arithmetic | E-29 | ○ |
| C-177 | UT-DC-177: isLastChild true | E-29 | ○ |
| C-178 | UT-DC-178: isLastChild false | E-29 | ○ |
| C-179 | UT-DC-179: selectAscDesc toggle | E-29 | ○ |
| C-180 | UT-DC-180: selectAscDesc default | E-29 | ○ |
| C-181 | UT-DC-181: getDisplayValue | E-29 | ○ |
| C-182 | UT-DC-182: getDisplayValue null | E-29 | ○ |
| C-183 | UT-DC-183: makeTemporaryTransactions | E-29 | ○ |
| C-184 | UT-DC-184: enableUndo | E-30 | ○ |
| C-185 | UT-DC-185: disableUndo | E-30 | ○ |
| C-186 | UT-DC-186: undo enabled | E-30 | ○ |
| C-187 | UT-DC-187: undo disabled | E-30 | ○ |
| C-188 | UT-DC-188: redo enabled | E-30 | ○ |
| C-189 | UT-DC-189: redo disabled | E-30 | ○ |
| C-190 | UT-DC-190: accountBalance | E-31 | ○ |
| C-191 | UT-DC-191: accountBalanceCleared | E-31 | ○ |
| C-192 | UT-DC-192: accountBalanceUncleared | E-31 | ○ |
| C-193 | UT-DC-193: allAccountBalance | E-31 | ○ |
| C-194 | UT-DC-194: onBudgetAccountBalance | E-31 | ○ |
| C-195 | UT-DC-195: offBudgetAccountBalance | E-31 | ○ |
| C-196 | UT-DC-196: categoryBalance | E-31 | ○ |
| C-197 | UT-DC-197: uncategorizedBalance | E-31 | ○ |
| C-198 | UT-DC-198: uncategorizedCount | E-31 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全テストケースに対応するソースコードが存在

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードに基づいて生成されている
- 注意点：
  - React/TypeScriptのフロントエンドモジュールのため、UIコンポーネントのテストは本一覧に含まれていない（単体テストの対象はユーティリティ関数、Redux slice、クエリクラスに限定）
  - 非同期処理（async/await）のテストでは、モックの適切な設定が必要

## 6) レビュアーチェックリスト（最小）
- [ ] テストケースの優先度（高/中/低）が妥当か確認
- [ ] 境界値テストが十分にカバーされているか確認
- [ ] エラーハンドリングのテストケースが網羅されているか確認
- [ ] Redux sliceのリデューサーテストが状態遷移を適切にテストしているか確認
- [ ] クエリ関連クラス（LiveQuery, PagedQuery）の非同期動作テストが適切か確認
- [ ] CSSバリデーション関連のセキュリティテストが十分か確認
- [ ] 日付パース関連のテストで各フォーマットがカバーされているか確認
