---
generated_at: 2026-01-28 16:15:00
metrics:
  claims_total: 100
  claims_with_evidence: 98
  claims_without_evidence: 2
confidence_derived: 0.98
---

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

## 本レポートについて

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

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

1. **根拠の有無確認**：各テストケースに対して、ソースコード・実装・メソッドシグネチャなどの根拠（Evidence）が存在するか
2. **根拠との整合性**：テストケースの内容が実装と矛盾していないか
3. **網羅性**：対象モジュールのクラス・メソッドを適切にカバーしているか

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：98 / 100、根拠なし：2
- 優先レビュー（高）
  1. **UT-OTD-037（featuredEventIndexローテーション）**：年ベースのローテーションロジックは実装から確認済みだが、境界条件の詳細確認推奨
  2. **UT-OTD-100（startYOfCircle計算）**：グローバル関数のため実装コンテキストの確認推奨

## 2) 参照した情報（Evidence一覧）
> 以下に実在するソースファイルを列挙

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFFeedOnThisDayEvent.h`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFFeedOnThisDayEvent.m`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/WMFFeedOnThisDayEvent+LocalizedDates.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/WMFOnThisDayEventsFetcher.h`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/WMFOnThisDayEventsFetcher.m`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFOnThisDayContentSource.h`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WMFOnThisDayContentSource.m`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/OnThisDayViewController.swift`
- E-09: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/OnThisDayCollectionViewCell.swift`
- E-10: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/OnThisDayCollectionViewCell+WMFFeedContentDisplaying.swift`
- E-11: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/OnThisDayExploreCollectionViewCell.swift`
- E-12: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/OnThisDayExploreCollectionViewCell+WMFFeedContentDisplaying.swift`
- E-13: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/OnThisDayViewControllerHeader.swift`
- E-14: `/Users/tomoka.baba/Work/wikipedia-ios-main/Widgets/Widgets/OnThisDayWidget.swift`
- E-15: `/Users/tomoka.baba/Work/wikipedia-ios-main/Widgets/Widgets/OnThisDayView.swift`
- E-16: `/Users/tomoka.baba/Work/wikipedia-ios-main/WMF Framework/Widget/Models/WidgetOnThisDayElement.swift`
- E-17: `/Users/tomoka.baba/Work/wikipedia-ios-main/WikipediaUnitTests/Fixtures/FeedOnThisDay-en.json`

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

### WMFFeedOnThisDayEvent（モデル）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 (UT-OTD-001) | JSONKeyPathsByPropertyKeyが正しく定義されている | E-02 (L16-22) | ○ |
| C-02 (UT-OTD-002) | articlePreviewsJSONTransformerが配列変換を行う | E-02 (L24-26) | ○ |
| C-03 (UT-OTD-003) | siteURLがarticlePreviewsから派生する | E-02 (L28-30) | ○ |
| C-04 (UT-OTD-004) | siteURLがarticlePreviews空時にnil | E-02 (L28-30) | ○ |
| C-05 (UT-OTD-005) | languageCodeがsiteURLから派生 | E-02 (L32-34) | ○ |
| C-06 (UT-OTD-006) | contentLanguageCodeがsiteURLから派生 | E-02 (L36-38) | ○ |
| C-07 (UT-OTD-007) | previewsImageCountが画像数をカウント | E-02 (L40-48) | ○ |
| C-08 (UT-OTD-008) | previewsImageCountが空配列で0を返す | E-02 (L40-48) | ○ |
| C-09 (UT-OTD-009) | 画像なし記事はカウントされない | E-02 (L42-46) | ○ |
| C-10 (UT-OTD-010) | textDeathRegexMatchCountが英語でマッチ | E-02 (L51-56) | ○ |
| C-11 (UT-OTD-011) | textDeathRegexMatchCountが非英語で0 | E-02 (L52) | ○ |
| C-12 (UT-OTD-012) | textがnilの場合0を返す | E-02 (L52) | ○ |
| C-13 (UT-OTD-013) | enDeathRegexが死亡関連キーワードにマッチ | E-02 (L58-71) | ○ |
| C-14 (UT-OTD-014) | 正規表現が大文字小文字を区別しない | E-02 (L67: NSRegularExpressionCaseInsensitive) | ○ |
| C-15 (UT-OTD-015) | calculateScoreが英語で画像+デスを計算 | E-02 (L73-86) | ○ |
| C-16 (UT-OTD-016) | calculateScoreが非英語で画像数のみ | E-02 (L77-79) | ○ |
| C-17 (UT-OTD-017) | calculateScoreが0を返す境界値 | E-02 (L73-86) | ○ |
| C-18 (UT-OTD-018) | languageVariantCodePropagationSubelementKeys | E-02 (L88-90) | ○ |

### WMFFeedOnThisDayEvent+LocalizedDates（拡張）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 (UT-OTD-019) | yearStringがAD年をフォーマット | E-03 (L3-5) | ○ |
| C-20 (UT-OTD-020) | yearStringがBC年をフォーマット | E-03 (L4: wmf_yearString) | ○ |
| C-21 (UT-OTD-021) | yearがnilの場合0としてフォーマット | E-03 (L4: ?? 0) | ○ |

### WMFOnThisDayEventsFetcher（フェッチャー）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 (UT-OTD-022) | supportedLanguagesが10言語を含む | E-05 (L8-15) | ○ |
| C-23 (UT-OTD-023) | isOnThisDaySupportedByLanguageがサポート言語でtrue | E-05 (L17-19) | ○ |
| C-24 (UT-OTD-024) | isOnThisDaySupportedByLanguageが非サポートでfalse | E-05 (L17-19) | ○ |
| C-25 (UT-OTD-025) | fetchOnThisDayEventsForURLがイベント取得 | E-05 (L21-53) | ○ |
| C-26 (UT-OTD-026) | siteURLがnilでエラー | E-05 (L23-27) | ○ |
| C-27 (UT-OTD-027) | 非サポート言語でエラー | E-05 (L23) | ○ |
| C-28 (UT-OTD-028) | 月が0以下でエラー | E-05 (L23: month < 1) | ○ |
| C-29 (UT-OTD-029) | 日が0以下でエラー | E-05 (L23: day < 1) | ○ |
| C-30 (UT-OTD-030) | 304ステータスでnoNewDataError | E-05 (L39-42) | ○ |

### WMFOnThisDayContentSource（コンテンツソース）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 (UT-OTD-031) | initWithSiteURLで初期化 | E-07 (L24-32) | ○ |
| C-32 (UT-OTD-032) | loadNewContentで現在日付を使用 | E-07 (L42-44) | ○ |
| C-33 (UT-OTD-033) | 既存グループがない場合新規作成 | E-07 (L108-114) | ○ |
| C-34 (UT-OTD-034) | 既存グループがある場合スキップ | E-07 (L57-63) | ○ |
| C-35 (UT-OTD-035) | siteURLがnilで即座に完了 | E-07 (L49-54) | ○ |
| C-36 (UT-OTD-036) | イベントにスコアとインデックス設定 | E-07 (L88-94) | ○ |
| C-37 (UT-OTD-037) | featuredEventIndexが年ベースでローテーション | E-07 (L96-106) | ○ |
| C-38 (UT-OTD-038) | onThisDayForDateでグループ取得 | E-07 (L125-127) | ○ |
| C-39 (UT-OTD-039) | removeAllContentで全削除 | E-07 (L129-131) | ○ |

### OnThisDayViewController（ビューコントローラー）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 (UT-OTD-040) | initで正しく初期化 | E-08 (L16-25) | ○ |
| C-41 (UT-OTD-041) | numberOfSectionsがevents.count+1 | E-08 (L128-130) | ○ |
| C-42 (UT-OTD-042) | section0で0アイテム | E-08 (L132-134) | ○ |
| C-43 (UT-OTD-043) | section1以上で1アイテム | E-08 (L132-134) | ○ |
| C-44 (UT-OTD-044) | event(for:)でイベント取得 | E-08 (L136-141) | ○ |
| C-45 (UT-OTD-045) | event(for:)がsection0でnil | E-08 (L137-139) | ○ |
| C-46 (UT-OTD-046) | scrollToInitialEventでスクロール | E-08 (L54-60) | ○ |
| C-47 (UT-OTD-047) | initialEventがnilで何もしない | E-08 (L55-57) | ○ |
| C-48 (UT-OTD-048) | shouldHighlightItemAtがfalse | E-08 (L206-208) | ○ |
| C-49 (UT-OTD-049) | shouldSelectItemAtがfalse | E-08 (L210-212) | ○ |
| C-50 (UT-OTD-050) | contextMenuが設定を返す | E-08 (L238-259) | ○ |
| C-51 (UT-OTD-051) | articleURLがnilでnil返却 | E-08 (L240-242) | ○ |

### OnThisDayCollectionViewCell（セル）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 (UT-OTD-052) | RTLでタイムライン右配置 | E-09 (L20-22) | ○ |
| C-53 (UT-OTD-053) | LTRでタイムライン左配置 | E-09 (L24-25) | ○ |
| C-54 (UT-OTD-054) | pauseDotsAnimationが伝播 | E-09 (L39-43) | ○ |
| C-55 (UT-OTD-055) | isHiddenでアニメーション停止 | E-09 (L45-49) | ○ |
| C-56 (UT-OTD-056) | apply(theme:)でテーマ適用 | E-09 (L56-63) | ○ |
| C-57 (UT-OTD-057) | configureでイベント表示 | E-10 (L4-40) | ○ |
| C-58 (UT-OTD-058) | 経過年数計算 | E-10 (L15-21) | ○ |
| C-59 (UT-OTD-059) | yearがnilでsubTitleがnil | E-10 (L21-23) | ○ |
| C-60 (UT-OTD-060) | showArticlesで記事設定 | E-10 (L27-31) | ○ |

### OnThisDayExploreCollectionViewCell（Exploreセル）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-61 (UT-OTD-061) | isFirstでトップグラデーション表示 | E-11 (L17) | ○ |
| C-62 (UT-OTD-062) | isLastでボトムグラデーション表示 | E-11 (L18) | ○ |
| C-63 (UT-OTD-063) | configureでisFirst/isLast設定 | E-12 (L4-9) | ○ |

### OnThisDayViewControllerHeader（ヘッダー）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-64 (UT-OTD-064) | イベント数メッセージフォーマット | E-13 (L34) | ○ |
| C-65 (UT-OTD-065) | 日付フォーマット | E-13 (L36) | ○ |
| C-66 (UT-OTD-066) | 年範囲表示 | E-13 (L38-42) | ○ |
| C-67 (UT-OTD-067) | 年文字列がnilでfromLabelがnil | E-13 (L40-42) | ○ |
| C-68 (UT-OTD-068) | apply(theme:)でテーマ適用 | E-13 (L47-52) | ○ |

### OnThisDayWidget/Provider（ウィジェット）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 (UT-OTD-069) | ウィジェット設定 | E-14 (L8-21) | ○ |
| C-70 (UT-OTD-070) | placeholderでエントリー返却 | E-14 (L37-39) | ○ |
| C-71 (UT-OTD-071) | getTimelineでタイムライン生成 | E-14 (L41-55) | ○ |
| C-72 (UT-OTD-072) | current時に翌日深夜後更新 | E-14 (L45-47) | ○ |
| C-73 (UT-OTD-073) | エラー時に2時間後更新 | E-14 (L48-50) | ○ |

### OnThisDayData（データソース）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-74 (UT-OTD-074) | placeholderEntryFromLanguageで生成 | E-14 (L96-141) | ○ |
| C-75 (UT-OTD-075) | RTL言語でisRTL=true | E-14 (L98) | ○ |
| C-76 (UT-OTD-076) | サポート言語でエントリー取得 | E-14 (L145-162) | ○ |
| C-77 (UT-OTD-077) | 非サポート言語でエラーエントリー | E-14 (L149-152) | ○ |
| C-78 (UT-OTD-078) | assembleOnThisDayFromContentGroup | E-14 (L164-195) | ○ |
| C-79 (UT-OTD-079) | プレビューなしでプレースホルダー | E-14 (L166-172) | ○ |
| C-80 (UT-OTD-080) | ErrorType.errorColorでgray500 | E-14 (L72-74) | ○ |
| C-81 (UT-OTD-081) | ErrorType.errorColorでgray800 | E-14 (L75-77) | ○ |
| C-82 (UT-OTD-082) | ErrorType.errorTextでメッセージ | E-14 (L80-88) | ○ |

### OnThisDayEntry（エントリーモデル）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 (UT-OTD-083) | init(_:)でContentGroupから初期化 | E-14 (L227-277) | ○ |
| C-84 (UT-OTD-084) | 必須データなしでnil | E-14 (L229-241) | ○ |
| C-85 (UT-OTD-085) | yearRange設定 | E-14 (L268) | ○ |
| C-86 (UT-OTD-086) | eventYearsAgo計算 | E-14 (L265-267) | ○ |
| C-87 (UT-OTD-087) | contentURLにインデックス含む | E-14 (L270-275) | ○ |
| C-88 (UT-OTD-088) | errorEntry生成 | E-14 (L279-284) | ○ |

### OnThisDayColors/Views（ビュー）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-89 (UT-OTD-089) | blueColor lightでblue600 | E-15 (L9-11) | ○ |
| C-90 (UT-OTD-090) | blueColor darkでblue300 | E-15 (L9-11) | ○ |
| C-91 (UT-OTD-091) | systemLargeでヘッダー+記事ボックス | E-15 (L43-55) | ○ |
| C-92 (UT-OTD-092) | systemMediumで適切レイアウト | E-15 (L57-62) | ○ |
| C-93 (UT-OTD-093) | systemSmallで適切レイアウト | E-15 (L63-65) | ○ |
| C-94 (UT-OTD-094) | RTLでlayoutDirection設定 | E-15 (L72) | ○ |
| C-95 (UT-OTD-095) | エラー時ErrorSquare表示 | E-15 (L77-83) | ○ |
| C-96 (UT-OTD-096) | エラーなしでEmptyView | E-15 (L77-83) | ○ |

### WidgetOnThisDayElement（ウィジェットモデル）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-97 (UT-OTD-097) | CodableでJSONデコード | E-16 (L3-53) | ○ |
| C-98 (UT-OTD-098) | Page.isRTLがRTLでtrue | E-16 (L41-43) | ○ |
| C-99 (UT-OTD-099) | Page.isRTLがLTRでfalse | E-16 (L41-43) | ○ |

### ユーティリティ関数
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-100 (UT-OTD-100) | startYOfCircle計算 | E-15 (L436-438) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-100 (startYOfCircle)**: グローバル関数のため単体テストの実装方法に追加検討が必要
  - 候補：XCTestでの直接呼び出しテスト / SwiftUIプレビューでの視覚的確認
- **テストフィクスチャ**: `WikipediaUnitTests/Fixtures/FeedOnThisDay-en.json` が存在するが、全テストケースでの活用方法は実装時に検討が必要

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク**: UT-OTD-001〜018（モデルプロパティ・メソッド）- 単純なゲッター/セッターのテスト
- **0: 低リスク**: UT-OTD-052〜068（UIコンポーネント）- レイアウト・テーマ適用のテスト
- **1: 中リスク**: UT-OTD-019〜021（日付フォーマット）- ロケール依存の処理
- **1: 中リスク**: UT-OTD-022〜039（API/データ取得）- 非同期処理・モック必要
- **1: 中リスク**: UT-OTD-069〜100（ウィジェット）- iOS WidgetKitの制約あり

## 6) レビュアーチェックリスト（最小）
- [ ] calculateScore のスコア計算ロジック（画像スコア * 0.2 - デススコア）が仕様通りか確認
- [ ] featuredEventIndex のローテーションロジック（year % 10）が意図通りか確認
- [ ] supportedLanguages の10言語リストが最新か確認
- [ ] enDeathRegex の正規表現パターンがフィルタリング要件を満たすか確認
- [ ] OnThisDayEntry 初期化時の必須パラメータが網羅されているか確認
- [ ] RTL言語対応のレイアウト処理が正しいか確認
- [ ] WidgetKit のタイムライン更新ポリシー（2時間後/翌日深夜後）が適切か確認
