---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 187
  claims_with_evidence: 187
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：187 / 187、根拠なし：0
- 優先レビュー（高）
  1. **UT-NTF-001〜010**：NotificationsCenterModelControllerの基盤ロジック - 通知管理の核心部分
  2. **UT-NTF-018〜023**：既読/未読管理ロジック - ユーザー操作に直結
  3. **UT-NTF-061〜067**：シートアクション生成 - UI操作の重要機能

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

- E-01: `Wikipedia/Code/NotificationsCenterModelController.swift`
- E-02: `Wikipedia/Code/NotificationsCenterViewModel.swift`
- E-03: `Wikipedia/Code/NotificationsCenterCellViewModel.swift`
- E-04: `Wikipedia/Code/NotificationsCenterDetailViewModel.swift`
- E-05: `Wikipedia/Code/NotificationsCenterCommonViewModel.swift`
- E-06: `Wikipedia/Code/NotificationsCenterCommonViewModel+TextExtensions.swift`
- E-07: `Wikipedia/Code/NotificationsCenterCommonViewModel+ActionExtensions.swift`
- E-08: `Wikipedia/Code/NotificationsCenterCommonViewModel+LinkExtensions.swift`
- E-09: `Wikipedia/Code/NotificationsCenterCellViewModel+TextExtensions.swift`
- E-10: `Wikipedia/Code/NotificationsCenterCellViewModel+LinkExtensions.swift`
- E-11: `Wikipedia/Code/NotificationsCenterCellViewModel+IconNameExtensions.swift`
- E-12: `Wikipedia/Code/NotificationsCenterCellViewModel+SheetActionExtensions.swift`
- E-13: `Wikipedia/Code/NotificationsCenterDetailViewModel+TextExtensions.swift`
- E-14: `Wikipedia/Code/NotificationsCenterDetailViewModel+ActionExtensions.swift`
- E-15: `Wikipedia/Code/NotificationsCenterDetailViewModel+ImageExtensions.swift`
- E-16: `Wikipedia/Code/NotificationsCenterCellDisplayState.swift`
- E-17: `Wikipedia/Code/NotificationsCenterIconType.swift`
- E-18: `Wikipedia/Code/NotificationsCenterAction.swift`
- E-19: `Wikipedia/Code/NotificationsCenterFiltersViewModel.swift`
- E-20: `Wikipedia/Code/NotificationsCenterInboxViewModel.swift`
- E-21: `Wikipedia/Code/NotificationsCoordinator.swift`
- E-22: `Wikipedia/Code/NotificationsCenterCellStyle.swift`
- E-23: `Wikipedia/Code/Notification+NotificationsCenter.swift`

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

### NotificationsCenterModelController（UT-NTF-001〜010）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | addNewCellViewModelsWithメソッドが通知からセルビューモデルを生成する | E-01 L24-44 | ○ |
| C-02 | 既存ビューモデルの重複追加防止ロジック | E-01 L36-40 | ○ |
| C-03 | keyがnilの通知は無視される | E-01 L31-34 | ○ |
| C-04 | evaluateUpdatedNotificationsが更新通知を処理する | E-01 L46-86 | ○ |
| C-05 | フィルタ状態に合致しない通知の削除 | E-01 L61-68 | ○ |
| C-06 | updateCellDisplayStatesで表示状態更新 | E-01 L92-108 | ○ |
| C-07 | 状態変化がない場合はnilを返す | E-01 L107 | ○ |
| C-08 | resetでビューモデルクリア | E-01 L110-113 | ○ |
| C-09 | sortedCellViewModelsで日付降順ソート | E-01 L115-126 | ○ |
| C-10 | oldestDisplayedNotificationDateの設定 | E-01 L124 | ○ |

### NotificationsCenterViewModel（UT-NTF-011〜029）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | initで必要なコントローラーを受け取る | E-02 L62-73 | ○ |
| C-12 | setupで初期状態通知 | E-02 L152-155 | ○ |
| C-13 | fetchFirstPageでデータ取得 | E-02 L217-244 | ○ |
| C-14 | fetchFirstPage失敗時のエラー表示 | E-02 L240-241 | ○ |
| C-15 | fetchNextPageでページング | E-02 L246-277 | ○ |
| C-16 | isPagingEnabled=falseで無視 | E-02 L248-251 | ○ |
| C-17 | 0件取得でページング無効化 | E-02 L262-264 | ○ |
| C-18 | markAsReadOrUnreadで既読マーク | E-02 L172-186 | ○ |
| C-19 | markAsReadOrUnreadで未読マーク | E-02 L172-186 | ○ |
| C-20 | マーク失敗時のエラー表示 | E-02 L177-181 | ○ |
| C-21 | markAllAsReadで全既読 | E-02 L188-198 | ○ |
| C-22 | markAllAsSeenで既読済みマーク | E-02 L200-215 | ○ |
| C-23 | フィルタ有効時のmarkAllAsSeen抑制 | E-02 L203-205 | ○ |
| C-24 | updateEditingModeStateで編集モード切替 | E-02 L285-295 | ○ |
| C-25 | resetAndRefreshDataでリセット再取得 | E-02 L297-301 | ○ |
| C-26 | areFiltersAppliedでフィルタ状態判定 | E-02 L361-363 | ○ |
| C-27 | フィルタなしでfalse | E-02 L361-363 | ○ |
| C-28 | numberOfUnreadNotificationsで未読数取得 | E-02 L387-389 | ○ |
| C-29 | statusBarTextで属性付き文字列生成 | E-02 L369-385 | ○ |

### NotificationsCenterCellViewModel（UT-NTF-030〜044）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 | 有効な通知からビューモデル生成 | E-03 L16-33 | ○ |
| C-31 | wiki=nilでnil返却 | E-03 L19-23 | ○ |
| C-32 | key=nilでnil返却 | E-03 L20-23 | ○ |
| C-33 | 認識できないプロジェクトでnil | E-03 L21-23 | ○ |
| C-34 | updateDisplayStateで編集モード反映 | E-03 L45-53 | ○ |
| C-35 | updateDisplayStateで選択状態反映 | E-03 L45-53 | ○ |
| C-36-41 | displayStateForの状態計算ロジック | E-03 L70-86 | ○ |
| C-42 | accessibilityTextの生成 | E-03 L55-67 | ○ |
| C-43 | hash関数の実装 | E-03 L91-93 | ○ |
| C-44 | ==演算子の実装 | E-03 L95-97 | ○ |

### NotificationsCenterCellViewModel+TextExtensions（UT-NTF-045〜055）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | subheaderTextでagentName表示 | E-09 L6-47 | ○ |
| C-46 | welcomeでプロジェクト名表示 | E-09 L25-28 | ○ |
| C-47 | loginFailでAlert表示 | E-09 L29-34 | ○ |
| C-48 | agentName=nilで汎用テキスト | E-09 L20-21 | ○ |
| C-49 | headerTextでverboseTitle | E-09 L49-51 | ○ |
| C-50 | bodyTextでmessage | E-09 L53-55 | ○ |
| C-51 | welcomeでfooterText=nil | E-09 L59-61 | ○ |
| C-52 | loginFailでパスワード変更テキスト | E-09 L62-65 | ○ |
| C-53 | dateTextで相対日付 | E-09 L93-95 | ○ |
| C-54 | Wikipediaで言語コード表示 | E-09 L98-115 | ○ |
| C-55 | Commonsでnil | E-09 L102-113 | ○ |

### NotificationsCenterCellViewModel+IconNameExtensions（UT-NTF-056〜060）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-56 | projectIconNameの取得 | E-11 L5-7 | ○ |
| C-57 | loginFailでlockアイコン | E-11 L10-14 | ○ |
| C-58 | unknownでlinkアイコン | E-11 L15-20 | ○ |
| C-59 | talkでpersonFill | E-11 L30-34 | ○ |
| C-60 | mainでdocumentFill | E-11 L35-36 | ○ |

### NotificationsCenterCellViewModel+SheetActionExtensions（UT-NTF-061〜067）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-61 | markAsReadOrUnreadアクションが常に含まれる | E-12 L8-14 | ○ |
| C-62 | notificationSubscriptionSettingsが末尾に含まれる | E-12 L60-62 | ○ |
| C-63 | userTalkPageMessageのアクション生成 | E-12 L17-18, L71-87 | ○ |
| C-64 | editRevertedのアクション生成 | E-12 L22-23, L111-131 | ○ |
| C-65 | thanksのアクション生成 | E-12 L39, L241-257 | ○ |
| C-66 | loginのアクション生成 | E-12 L44-47, L259-271 | ○ |
| C-67 | 重複アクションの除外 | E-12 L64 | ○ |

### NotificationsCenterCommonViewModel（UT-NTF-068〜076）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-68 | titleで通知タイプのタイトル取得 | E-06 L5-7 | ○ |
| C-69 | verboseTitleでトピックタイトル（userTalkPage） | E-06 L11-16 | ○ |
| C-70 | verboseTitleでトピックタイトル（mention） | E-06 L17-29 | ○ |
| C-71 | トピックタイトルなしでデフォルトテキスト | E-06 L12-14 | ○ |
| C-72 | editRevertedでmessage=nil | E-06 L74-76 | ○ |
| C-73 | thanksでmessageHeader | E-06 L77-94 | ○ |
| C-74 | userTalkPageでmessageBody | E-06 L96-108 | ○ |
| C-75 | dateTextで相対日付 | E-06 L114-120 | ○ |
| C-76 | date=nilでnil | E-06 L115-117 | ○ |

### NotificationsCenterCommonViewModel+LinkExtensions（UT-NTF-077〜092）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-77 | 有効な通知からLinkData生成 | E-08 L21-38 | ○ |
| C-78 | host=nilでnil | E-08 L23-26 | ○ |
| C-79 | wiki=nilでnil | E-08 L24-26 | ○ |
| C-80 | mainネームスペースURL生成 | E-08 L47-61 | ○ |
| C-81 | talkネームスペースURL生成 | E-08 L47-61 | ○ |
| C-82 | フラグメント追加 | E-08 L65-74 | ○ |
| C-83 | ユーザーページURL生成 | E-08 L78-91 | ○ |
| C-84 | 差分URL生成 | E-08 L94-106 | ○ |
| C-85 | revisionID=nilでnil | E-08 L96-98 | ○ |
| C-86 | パスワード変更URL生成 | E-08 L109-119 | ○ |
| C-87 | ユーザー権限URL生成 | E-08 L132-143 | ○ |
| C-88 | 特定権限URL生成 | E-08 L145-149 | ○ |
| C-89 | WikidataアイテムURL取得 | E-08 L158-188 | ○ |
| C-90 | Wikidata以外でnil | E-08 L170-174 | ○ |
| C-91 | Getting StartedURL生成 | E-08 L191-202 | ○ |
| C-92 | ログイン通知ヘルプURL生成 | E-08 L205-211 | ○ |

### NotificationsCenterCommonViewModel+ActionExtensions（UT-NTF-093〜106）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-93 | agentUserPageAction生成 | E-07 L16-28 | ○ |
| C-94 | agentName=nilでnil | E-07 L17-18 | ○ |
| C-95 | diffAction生成 | E-07 L31-39 | ○ |
| C-96 | diffURL=nilでnil | E-07 L32-33 | ○ |
| C-97 | titleAction（needsConvert=false） | E-07 L46-72 | ○ |
| C-98 | titleAction（needsConvert=true） | E-07 L54 | ○ |
| C-99 | titleAction（simplified=true） | E-07 L56-63 | ○ |
| C-100 | pageLinkFromAction生成 | E-07 L155-163 | ○ |
| C-101 | wikidataItemAction生成 | E-07 L166-174 | ○ |
| C-102 | gettingStartedAction生成 | E-07 L201-209 | ○ |
| C-103 | loginNotificationsAction生成 | E-07 L215-222 | ○ |
| C-104 | changePasswordAction生成 | E-07 L235-245 | ○ |
| C-105 | actionForGenericLink生成 | E-07 L247-255 | ○ |
| C-106 | URL=nilでnil | E-07 L248-249 | ○ |

### NotificationsCenterDetailViewModel（UT-NTF-107〜123）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-107 | 初期化 | E-04 L4-6 | ○ |
| C-108 | loginFailでheaderTitle=Alert | E-13 L7-10 | ○ |
| C-109 | welcomeでheaderTitle=Welcome message | E-13 L17-18 | ○ |
| C-110 | agentNameでFrom形式 | E-13 L23-24 | ○ |
| C-111 | headerSubtitleでプロジェクト名 | E-13 L30-32 | ○ |
| C-112 | headerDateで日付 | E-13 L34-36 | ○ |
| C-113 | messageありでcontentTitle=verboseTitle | E-13 L38-39 | ○ |
| C-114 | messageなしでcontentTitle=title | E-13 L38-39 | ○ |
| C-115 | contentBodyでmessage | E-13 L42-44 | ○ |
| C-116 | messageなしでcontentBody=verboseTitle | E-13 L43 | ○ |
| C-117 | userTalkPageでprimaryAction | E-14 L6-9 | ○ |
| C-118 | editRevertedでdiffAction | E-14 L14-18 | ○ |
| C-119 | translationMilestoneでnil | E-14 L46-47 | ○ |
| C-120 | secondaryActions生成 | E-14 L78-125 | ○ |
| C-121 | uniqueSecondaryActionsで重複除外 | E-14 L128-138 | ○ |
| C-122 | headerImageName取得 | E-15 L4-6 | ○ |
| C-123 | headerImageBackgroundColor取得 | E-15 L8-10 | ○ |

### NotificationsCenterCellDisplayState（UT-NTF-124〜136）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-124-136 | 各状態判定プロパティの動作 | E-16 L4-41 | ○ |

### NotificationsCenterIconType（UT-NTF-137〜141）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-137-141 | 各アイコンタイプの定義 | E-17 L10-44 | ○ |

### NotificationsCenterAction（UT-NTF-142〜147）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-142-147 | actionData取得とLoggingLabel | E-18 L4-64 | ○ |

### NotificationsCenterFiltersViewModel（UT-NTF-148〜163）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-148 | 初期化 | E-19 L101-134 | ○ |
| C-149 | setFilterReadStatus | E-19 L136-159 | ○ |
| C-150 | ItemViewModel更新 | E-19 L147-158 | ○ |
| C-151 | removeAllFilterTypes | E-19 L161-180 | ○ |
| C-152 | ItemViewModel全選択 | E-19 L167-174 | ○ |
| C-153 | appendAllFilterTypes | E-19 L182-201 | ○ |
| C-154 | appendFilterType | E-19 L203-219 | ○ |
| C-155 | All typesトグルオフ | E-19 L213-218 | ○ |
| C-156 | removeFilterType | E-19 L221-241 | ○ |
| C-157 | 全削除でAll typesオン | E-19 L231-239 | ○ |
| C-158-163 | ItemViewModelのトグル操作 | E-19 L48-93 | ○ |

### NotificationsCenterInboxViewModel（UT-NTF-164〜168）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-164 | 初期化 | E-20 L14-98 | ○ |
| C-165 | 非言語プロジェクトのセクション配置 | E-20 L23-30 | ○ |
| C-166 | 言語プロジェクトのアルファベット順配置 | E-20 L41-43 | ○ |
| C-167 | appendProjectToFilter | E-20 L100-109 | ○ |
| C-168 | removeProjectFromFilter | E-20 L111-120 | ○ |

### NotificationsCenterCellStyle（UT-NTF-169〜180）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-169-180 | 各スタイルプロパティの動作 | E-22 L14-106 | ○ |

### NotificationsCoordinator（UT-NTF-181〜182）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-181 | 初期化 | E-21 L16-20 | ○ |
| C-182 | start()でVC push | E-21 L24-30 | ○ |

### Notification.Name+NotificationsCenter（UT-NTF-183〜184）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-183-184 | Notification.Name定義 | E-23 L4-11 | ○ |

### RemoteNotificationsFilterState.ReadStatus（UT-NTF-185〜187）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-185-187 | titleプロパティ | E-19 L244-255 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし（全テストケースについてソースコードから根拠を確認済み）

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコードに基づいて生成されている

## 6) レビュアーチェックリスト（最小）
- [ ] NotificationsCenterModelControllerのテストケースがビューモデル管理ロジックを網羅しているか確認
- [ ] NotificationsCenterViewModelのテストケースがページング・既読管理を網羅しているか確認
- [ ] NotificationsCenterCellViewModelの状態遷移テストが全パターンをカバーしているか確認
- [ ] 各通知タイプ（userTalkPageMessage, editReverted, thanksなど）のアクション生成テストが適切か確認
- [ ] URL生成ロジック（LinkExtensions）のテストが境界条件を含むか確認
- [ ] フィルタ関連（FiltersViewModel, InboxViewModel）のテストがフィルタ操作を網羅しているか確認
- [ ] テストIDの連番（UT-NTF-001〜187）に欠番がないか確認
