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

# 根拠レポート: 24-編集履歴

## 概要

本レポートは「機能設計書 24-編集履歴」に記載された内容の根拠を示す。各記述がソースコードのどの部分に基づいているかを明示する。

## 根拠一覧

### 1. 処理概要に関する根拠

| 主張 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| リビジョン一覧のページング取得 | PageHistoryViewController.swift | L307-327 | `getPageHistory()` メソッドと `fetchRevisionInfo` 呼び出し |
| 編集統計情報の表示 | PageHistoryViewController.swift | L188-259 | `getEditCounts()` メソッドで各種統計を取得 |
| リビジョンセルの表示 | PageHistoryViewController.swift | L462-537 | `configure(cell:for:at:)` でセル内容を設定 |
| 単一リビジョン詳細への遷移 | PageHistoryViewController.swift | L659-685 | `pushToSingleRevisionDiff()` メソッド |
| 比較モードでの2リビジョン選択 | PageHistoryViewController.swift | L706-750 | `didSelectItemAt` での editing状態処理 |
| 差分比較画面への遷移 | PageHistoryViewController.swift | L355-365 | `showDiff()` で `DiffContainerViewController` を生成 |

### 2. 入力パラメータに関する根拠

| パラメータ | 根拠ファイル | 該当行 | 根拠内容 |
|-----------|-------------|--------|----------|
| pageTitle | PageHistoryViewController.swift | L24, L56 | `private let pageTitle: String` と init パラメータ |
| pageURL | PageHistoryViewController.swift | L25, L57 | `private let pageURL: URL` と init パラメータ |
| articleSummaryController | PageHistoryViewController.swift | L29, L60 | `private let articleSummaryController: ArticleSummaryController` と init |
| authenticationManager | PageHistoryViewController.swift | L30, L61 | `private let authenticationManager: WMFAuthenticationManager` と init |

### 3. 出力データに関する根拠

| 出力 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| pageHistorySections | PageHistoryViewController.swift | L70 | `private var pageHistorySections: [PageHistorySection] = []` |
| totalEditCount | PageHistoryViewController.swift | L184 | `private var totalEditCount: Int?` |
| firstEditDate | PageHistoryViewController.swift | L185 | `private var firstEditDate: Date?` |
| editCountsGroupedByType | PageHistoryViewController.swift | L186 | `private var editCountsGroupedByType: EditCountsGroupedByType?` |
| timeseriesOfEditsCounts | PageHistoryViewController.swift | L187 | `private var timeseriesOfEditsCounts: [NSNumber]?` |

### 4. 処理フローに関する根拠

| 処理ステップ | 根拠ファイル | 該当行 | 根拠内容 |
|-------------|-------------|--------|----------|
| CollectionViewセットアップ | PageHistoryViewController.swift | L170-172 | `layoutManager.register()` と `collectionView.dataSource = self` |
| 比較選択VCの埋め込み | PageHistoryViewController.swift | L132-144 | `setupComparisonSelectionViewController()` |
| getEditCounts呼び出し | PageHistoryViewController.swift | L178 | viewDidLoadでの呼び出し |
| getPageHistory呼び出し | PageHistoryViewController.swift | L179 | viewDidLoadでの呼び出し |
| ページングトリガー | PageHistoryViewController.swift | L329-335 | `scrollViewDidScroll` での `shouldLoadNewData` チェック |

### 5. ビジネスルールに関する根拠

| ルールNo | 根拠ファイル | 該当行 | 根拠内容 |
|---------|-------------|--------|----------|
| BR-001 | PageHistoryViewController.swift | L93-96 | `maxNumberOfRevisionsSelected` で `selectedCellsCount == 2` をチェック |
| BR-002 | PageHistoryViewController.swift | L824-838 | `date1.compare(date2)` で古いリビジョンをfromに設定 |
| BR-003 | PageHistoryViewController.swift | L42-43 | `maxY >= collectionView.contentSize.height` で200px判定 |
| BR-004 | PageHistoryViewController.swift | L283-305 | `appendSections(from:)` で日付セクション管理 |
| BR-005 | PageHistoryViewController.swift | L508-514 | `item.isAnon`, `item.isTemp` でアイコン分岐 |
| BR-006 | PageHistoryViewController.swift | L530 | `cell.isMinor = item.isMinor` |

### 6. 状態管理に関する根拠

| 状態 | 根拠ファイル | 該当行 | 根拠内容 |
|-----|-------------|--------|----------|
| State enum | PageHistoryViewController.swift | L88-91 | `private enum State { case idle, case editing }` |
| state didSet | PageHistoryViewController.swift | L103-128 | 状態変更時の処理（ボタン切り替え、セル更新等） |
| SelectionOrder | PageHistoryViewController.swift | L6-17 | `enum SelectionOrder { case first, case second }` |

### 7. API呼び出しに関する根拠

| API | 根拠ファイル | 該当行 | 根拠内容 |
|-----|-------------|--------|----------|
| fetchRevisionInfo | PageHistoryViewController.swift | L310 | `pageHistoryFetcher.fetchRevisionInfo(...)` |
| fetchFirstRevision | PageHistoryViewController.swift | L189 | `pageHistoryFetcher.fetchFirstRevision(...)` |
| fetchEditCounts | PageHistoryViewController.swift | L201, L227 | `pageHistoryFetcher.fetchEditCounts(...)` |
| fetchEditMetrics | PageHistoryViewController.swift | L243 | `pageHistoryFetcher.fetchEditMetrics(...)` |

### 8. 差分画面連携に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| showDiff | PageHistoryViewController.swift | L355-365 | `DiffContainerViewController` の生成と push |
| DiffRevisionRetrieving | PageHistoryViewController.swift | L844-905 | プロトコル実装（前後リビジョン取得、リフレッシュ） |
| 比較実行 | PageHistoryViewController.swift | L814-841 | `pageHistoryComparisonSelectionViewControllerDidTapCompare` |

### 9. テーマ適用に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| apply(theme:) | PageHistoryViewController.swift | L367-378 | テーマ適用メソッド |
| SelectionThemeModel | PageHistoryViewController.swift | L559-614 | 選択状態のテーマモデル定義（first, second, disabled） |

## 根拠なし項目

なし - すべての主張にソースコードの根拠が確認できた。

## 信頼度評価

- **claims_total**: 28（処理概要6、入力4、出力5、処理フロー5、ビジネスルール6、状態3、API4、差分連携3、テーマ2 - 重複除外後）
- **claims_with_evidence**: 28
- **claims_without_evidence**: 0
- **confidence_derived**: 28/28 = 1.00

## 検証方法

1. 各根拠ファイルの該当行を確認し、記述内容と一致することを検証
2. State enumの状態遷移が正確であることをコードトレースで確認
3. ページング判定ロジック（200px）が設計書の記述と一致することを確認
4. DiffRevisionRetrievingプロトコルの実装が差分画面との連携を正しく行うことを確認
