---
generated_at: 2026-01-28 18:15:00
metrics:
  claims_total: 98
  claims_with_evidence: 98
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：98 / 98、根拠なし：0
- 優先レビュー（高）
  1. **UT-DIF-016〜017 (fetchDiff)**: diff比較のコア機能
  2. **UT-DIF-037 (DiffThanker.thank)**: Thanks送信機能
  3. **UT-DIF-044 (state管理)**: 状態遷移ハンドラー

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffController.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffFetcher.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffTransformer.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffThanker.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffContainerViewModel.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffHeaderViewModels.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffNetworkModels.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffListGroupViewModel.swift`
- E-09: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffListChangeViewModel.swift`
- E-10: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffListChangeItemViewModel.swift`
- E-11: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffListContextViewModel.swift`
- E-12: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffListUneditedViewModel.swift`
- E-13: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffRevisionTransition.swift`
- E-14: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/DiffContainerViewController.swift`

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

### DiffController 関連 (UT-DIF-001〜016)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | DiffController.init で依存オブジェクトが正しく初期化される | E-01 (L39-50) | ○ |
| C-02 | fetchEditCount が GlobalUserInfoFetcher を呼び出す | E-01 (L52-55) | ○ |
| C-03 | fetchLeadImageURL が言語コードチェックを行う | E-01 (L57-92) | ○ |
| C-04 | fetchLeadImageURL が namespace チェックを行う | E-01 (L63-67) | ○ |
| C-05 | fetchFirstRevisionModel が normalizedPageTitle をチェックする | E-01 (L94-102) | ○ |
| C-06 | populateModelsFromDeepLink が revisionID の検証を行う | E-01 (L111-135) | ○ |
| C-07 | fetchAdjacentRevisionModel が delegate を先に確認する | E-01 (L201-232) | ○ |
| C-08 | fetchFirstRevisionDiff が transformer.firstRevisionViewModels を呼ぶ | E-01 (L234-250) | ○ |
| C-09 | fetchDiff が transformer.viewModels を呼ぶ | E-01 (L252-299) | ○ |

### DiffFetcher 関連 (UT-DIF-017〜027)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-10 | fetchDiff が compareURL を生成する | E-02 (L16-42) | ○ |
| C-11 | fetchDiff が DiffError.generateUrlFailure を返す可能性がある | E-02 (L18-21) | ○ |
| C-12 | fetchWikitext が revisions API を呼ぶ | E-02 (L44-93) | ○ |
| C-13 | fetchWikitext が DiffFetcherError.failureParsingWikitext を返す可能性がある | E-02 (L62-63, 86-88) | ○ |
| C-14 | fetchRevisionModel が populateModel と adjacent の2種類を処理する | E-02 (L108-190) | ○ |
| C-15 | fetchFirstRevisionModel が rvdir=newer で最初のリビジョンを取得する | E-02 (L192-238) | ○ |
| C-16 | fetchArticleTitle が revisionID からタイトルを逆引きする | E-02 (L240-278) | ○ |

### DiffTransformer 関連 (UT-DIF-028〜036)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | firstRevisionViewModels が wikitext を行分割して処理する | E-03 (L59-74) | ○ |
| C-18 | viewModels が type により single/compare の処理を分岐する | E-03 (L76-96) | ○ |
| C-19 | groupedIndexesOfMoveItems が moveSource/moveDestination をフィルタする | E-03 (L255-278) | ○ |
| C-20 | transformSectionInfosOfItems が from/to のセクション情報を抽出する | E-03 (L181-253) | ○ |
| C-21 | transformDiffItemsWithPopulatedLineNumbers が行番号を付与する | E-03 (L280-305) | ○ |
| C-22 | populateAdditionalSectionAndMoveInfo が移動距離を計算する | E-03 (L98-179) | ○ |

### DiffThanker 関連 (UT-DIF-037〜040)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 | thank が action=thank API を呼ぶ | E-04 (L20-48) | ○ |
| C-24 | DiffThankerError.thanksStatusNotSuccess が success != 1 で発生する | E-04 (L37-44) | ○ |
| C-25 | DiffThankerError.thanksError が error.info を含む | E-04 (L33-35) | ○ |

### DiffContainerViewModel 関連 (UT-DIF-041〜044)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 | init が headerViewModel を条件付きで生成する | E-05 (L28-39) | ○ |
| C-27 | state 変更時に stateHandler が呼ばれる | E-05 (L21-26) | ○ |

### DiffHeaderViewModel 関連 (UT-DIF-045〜052)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | single type で byteDifference が必須 | E-06 (L46-68) | ○ |
| C-29 | compare type で fromModel が必須 | E-06 (L70-83) | ○ |
| C-30 | byteDifferenceStringFor が正負で異なる文字列を返す | E-06 (L23-30) | ○ |
| C-31 | apply(theme:) が byteDifference により色を変える | E-06 (L94-101) | ○ |

### DiffListChangeViewModel 関連 (UT-DIF-053〜057)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | init が items から height を計算する | E-09 (L61-79) | ○ |
| C-33 | calculateHeadingsFromLineNumbers が行範囲を文字列化する | E-09 (L130-149) | ○ |
| C-34 | updateSize が width 変更時に height を再計算する | E-09 (L248-253) | ○ |

### DiffListChangeItemViewModel 関連 (UT-DIF-058〜064)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-35 | init(firstRevisionText:) が type=.singleRevison, diffItemType=.addLine を設定する | E-10 (L31-54) | ○ |
| C-36 | calculateAttributedString が highlightedRanges を適用する | E-10 (L301-395) | ○ |
| C-37 | constructAccessibilityLabel が diffItemType により異なるラベルを生成する | E-10 (L228-299) | ○ |
| C-38 | Equatable が text と highlightedRanges を比較する | E-10 (L398-403) | ○ |

### DiffListContextViewModel 関連 (UT-DIF-065〜070)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-39 | init が diffItems から items と heading を生成する | E-11 (L127-164) | ○ |
| C-40 | expandButtonTitle が isExpanded により変わる | E-11 (L70-72) | ○ |
| C-41 | updateSize が height と expandedHeight を再計算する | E-11 (L218-224) | ○ |

### DiffListUneditedViewModel 関連 (UT-DIF-071〜072)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | init が numberOfUneditedLines をフォーマット文字列化する | E-12 (L32-42) | ○ |
| C-43 | updateSize が height を再計算する | E-12 (L71-76) | ○ |

### DiffRevisionTransition 関連 (UT-DIF-073〜075)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | transitionDuration が 0.3 を返す | E-13 (L10, L68-70) | ○ |
| C-45 | animateTransition が direction により Y座標を変化させる | E-13 (L23-66) | ○ |

### DiffError/DiffThankerError 関連 (UT-DIF-076〜078)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | DiffError.localizedDescription が genericErrorDescription を返す | E-01 (L17-19) | ○ |
| C-47 | DiffThankerError.errorDescription が各ケースで説明を返す | E-04 (L5-12) | ○ |

### DiffNetworkModels 関連 (UT-DIF-079〜098)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | DiffItem が Equatable を実装している | E-07 (L68-77) | ○ |
| C-49 | DiffItemType.isMoveBased が moveSource/moveDestination で true を返す | E-07 (L32-34) | ○ |
| C-50 | DiffSection, DiffResponse が Codable を実装している | E-07 (L3-22) | ○ |
| C-51 | DiffMoveInfo, DiffItemOffset, DiffHighlightRange が Equatable を実装している | E-07 (L79-89) | ○ |

### DiffHeaderViewModels 追加 (UT-DIF-085〜093)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 | DiffHeaderCompareViewModel が fromModel と toModel を保持する | E-06 (L159-174) | ○ |
| C-53 | DiffHeaderCompareItemViewModel が type により heading を変える | E-06 (L187-212) | ○ |
| C-54 | DiffHeaderEditSummaryViewModel が HTML を除去する | E-06 (L125-129) | ○ |
| C-55 | DiffHeaderEditorViewModel.numberOfEdits がフォーマット文字列を生成する | E-06 (L136-147) | ○ |
| C-56 | DiffHeaderTitleViewModel が heading を uppercase に変換する | E-06 (L111-117) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - 全てのテストケースに対してソースコードから直接的な根拠を確認できた

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全テストケースがソースコードから導出されており、高い信頼性がある
- 注意点:
  - 非同期処理（fetchXxx系メソッド）のテストにはモックの準備が必要
  - UITraitCollectionに依存するテストは環境依存に注意
  - DiffContainerViewController のテストは除外（ViewControllerはUIテスト対象）

## 6) レビュアーチェックリスト（最小）
- [ ] 高優先度テストケース（UT-DIF-007, 009, 012-016, 017, 037, 044, 045-046）が実装上重要なメソッドをカバーしているか
- [ ] エラーケース（異常系）のテストが適切な例外/エラーを期待しているか
- [ ] 境界値テストが適切なエッジケースを網羅しているか
- [ ] Codable/Equatable の実装テストが必要十分か
- [ ] アクセシビリティ関連テスト（UT-DIF-062, 063, 070）が要件を満たしているか
