---
generated_at: 2026-01-28 11:30:00
metrics:
  claims_total: 32
  claims_with_evidence: 32
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート: 27-説明文編集

## 概要

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

## 根拠一覧

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

| 主張 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| 現在の説明文取得 | DescriptionEditViewController.swift | L72-94 | `articleDescriptionController.currentDescription` 呼び出し |
| テキスト入力による編集 | DescriptionEditViewController.swift | L14 | `@IBOutlet private var descriptionTextView: UITextView!` |
| 文字数警告（90文字） | ArticleDescriptionControlling.swift | L33 | `var descriptionMaxLength: Int { return 90 }` |
| 大文字開始警告 | ArticleDescriptionControlling.swift | L40-46 | `descriptionIsUppercase(_:)` メソッド |
| Wikidata API公開 | WikidataDescriptionController.swift | L37-48 | `publishDescription(_:editType:completion:)` |
| Wikitext公開 | ShortDescriptionController.swift | L57-80 | `publishDescription(_:editType:completion:)` |
| 一時アカウント対応 | DescriptionEditViewController.swift | L101-112 | `checkWikiStatus()` と `authState` 設定 |

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

| パラメータ | 根拠ファイル | 該当行 | 根拠内容 |
|-----------|-------------|--------|----------|
| dataStore | DescriptionEditViewController.swift | L45 | `var dataStore: MWKDataStore!` |
| theme | DescriptionEditViewController.swift | L24 | `private var theme = Theme.standard` |
| articleDescriptionController | DescriptionEditViewController.swift | L31 | `private var articleDescriptionController: ArticleDescriptionControlling!` |
| isAddingNewTitleDescription | DescriptionEditViewController.swift | L44, L48 | `var isAddingNewTitleDescription: Bool!` と初期化 |

### 3. デリゲートプロトコルに関する根拠

| 項目 | 根拠ファイル | 該当行 | 根拠内容 |
|-----|-------------|--------|----------|
| DescriptionEditViewControllerDelegate | DescriptionEditViewController.swift | L5-7 | プロトコル定義 |
| descriptionEditViewControllerEditSucceeded | DescriptionEditViewController.swift | L6 | メソッド定義 |
| didPublishNotification | DescriptionEditViewController.swift | L10 | `static let didPublishNotification = NSNotification.Name(...)` |

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

| ルールNo | 根拠ファイル | 該当行 | 根拠内容 |
|---------|-------------|--------|----------|
| BR-001 | ArticleDescriptionControlling.swift | L33 | `var descriptionMaxLength: Int { return 90 }` |
| BR-002 | DescriptionEditViewController.swift | L59 | `casingWarningLabel.text` 設定と表示条件 |
| BR-003 | DescriptionEditViewController.swift | L562-565 | `normalizedWhitespaceText()` メソッド |
| BR-004 | WikidataDescriptionController.swift | L39 | `let editTag: WMFEditTag = editType == .add ? .appDescriptionAdd : .appDescriptionChange` |
| BR-005 | DescriptionEditViewController.swift | L376-412 | 一時アカウント作成時のトースト表示処理 |
| BR-006 | DescriptionEditViewController.swift | L90-93 | `presentBlockedPanel(error:)` 呼び出し |

### 5. UI処理に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| viewDidLoad | DescriptionEditViewController.swift | L55-113 | UI初期設定処理 |
| プレースホルダー設定 | DescriptionEditViewController.swift | L65 | `descriptionPlaceholderLabel.text = WMFLocalizedString(...)` |
| ナビゲーションバー設定 | DescriptionEditViewController.swift | L192-206 | `configureNavigationBar()` メソッド |
| 警告ラベル更新 | DescriptionEditViewController.swift | L502-511 | `updateWarningLabels()` メソッド |
| textViewDidChange | DescriptionEditViewController.swift | L518-523 | テキスト変更時の処理 |

### 6. 公開処理に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| save | DescriptionEditViewController.swift | L335-459 | 公開処理メインメソッド |
| テキスト正規化 | DescriptionEditViewController.swift | L340-341 | `descriptionTextView.normalizedWhitespaceText()` |
| publishDescription呼び出し | DescriptionEditViewController.swift | L354 | `articleDescriptionController.publishDescription(...)` |
| 成功時デリゲート通知 | DescriptionEditViewController.swift | L365 | `self.delegate?.descriptionEditViewControllerEditSucceeded(...)` |
| 成功時通知発行 | DescriptionEditViewController.swift | L414 | `NotificationCenter.default.post(name: DescriptionEditViewController.didPublishNotification, ...)` |

### 7. エラーハンドリングに関する根拠

| エラー種別 | 根拠ファイル | 該当行 | 根拠内容 |
|-----------|-------------|--------|----------|
| blocked | DescriptionEditViewController.swift | L446-448 | `case .blocked: self.presentBlockedPanel(...)` |
| abuseFilterDisallow | DescriptionEditViewController.swift | L449-450 | `case .abuseFilterDisallowed: self.presentAbuseFilterDisallowedPanel(...)` |
| abuseFilterWarning | DescriptionEditViewController.swift | L451-452 | `case .abuseFilterWarning, .abuseFilterOther: self.presentAbuseFilterWarningPanel(...)` |
| WikidataPublishingError | DescriptionEditViewController.swift | L422-436 | Wikidataエラーの個別処理 |

### 8. コントローラー実装に関する根拠

| 項目 | 根拠ファイル | 該当行 | 根拠内容 |
|-----|-------------|--------|----------|
| WikidataDescriptionController初期化 | WikidataDescriptionController.swift | L14-26 | `init?(article:articleLanguageCode:descriptionSource:fetcher:)` |
| ShortDescriptionController初期化 | ShortDescriptionController.swift | L43-51 | `init(wikitextFetcher:sectionUploader:article:articleLanguageCode:articleURL:descriptionSource:delegate:)` |
| Wikidataフェッチャー使用 | WikidataDescriptionController.swift | L7, L41 | `private let fetcher: WikidataFetcher` と `fetcher.publish(...)` |
| Wikitextテンプレート正規表現 | ShortDescriptionController.swift | L30 | `static let templateRegex = "(\\{\\{\\s*[sS]hort description\\|...)` |
| テンプレート存在確認 | ShortDescriptionController.swift | L250-258 | `containsShortDescription()` メソッド |
| テンプレート置換 | ShortDescriptionController.swift | L266-273 | `replacingShortDescription(with:)` メソッド |

## 根拠なし項目

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

## 信頼度評価

- **claims_total**: 32（処理概要7、入力4、デリゲート3、ビジネスルール6、UI5、公開5、エラー4、コントローラー6 - 重複除外後）
- **claims_with_evidence**: 32
- **claims_without_evidence**: 0
- **confidence_derived**: 32/32 = 1.00

## 検証方法

1. 各根拠ファイルの該当行を確認し、記述内容と一致することを検証
2. ArticleDescriptionControllingプロトコルと2つの実装クラスの関係を確認
3. エラーハンドリングのフローがWikidataとShortDescriptionの両方で適切であることを確認
