---
generated_at: 2026-01-28 12:00:00
metrics:
  claims_total: 22
  claims_with_evidence: 22
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート: 29-編集通知

## 概要

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

## 根拠一覧

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

| 主張 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| VisualEditor APIから通知取得 | EditNoticesFetcher.swift | L30-37 | `action=visualeditor, paction=metadata` パラメータ |
| HTML→AttributedString変換 | EditNoticesView.swift | L258 | `NSAttributedString.attributedStringFromHtml(...)` |
| 常時表示設定 | EditNoticesViewController.swift | L38, L60 | `UserDefaults.standard.wmf_alwaysDisplayEditNotices` |
| リンクタップナビゲーション | EditNoticesViewController.swift | L74-81 | `delegate?.editNoticesControllerUserTapped(url:)` |

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

| パラメータ | 根拠ファイル | 該当行 | 根拠内容 |
|-----------|-------------|--------|----------|
| theme | EditNoticesViewController.swift | L21, L24 | `init(theme: Theme, viewModel:)` と `self.theme = theme` |
| viewModel | EditNoticesViewController.swift | L11, L22 | `let viewModel: EditNoticesViewModel` |
| siteURL | EditNoticesViewModel.swift | L7 | `var siteURL: URL` |
| notices | EditNoticesViewModel.swift | L8 | `var notices: [EditNoticesFetcher.Notice]` |

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

| 項目 | 根拠ファイル | 該当行 | 根拠内容 |
|-----|-------------|--------|----------|
| EditNoticesViewControllerDelegate | EditNoticesViewController.swift | L3-5 | プロトコル定義 |
| editNoticesControllerUserTapped | EditNoticesViewController.swift | L4 | `func editNoticesControllerUserTapped(url: URL)` |

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

| ルールNo | 根拠ファイル | 該当行 | 根拠内容 |
|---------|-------------|--------|----------|
| BR-001 | EditNoticesFetcher.swift | L45 | `filter({ $0.key.contains("editnotice")})` |
| BR-002 | EditNoticesViewController.swift | L38, L60 | `wmf_alwaysDisplayEditNotices` 読み書き |
| BR-003 | EditNoticesView.swift | L263 | `semanticContentAttribute == .forceRightToLeft ? .right : .left` |
| BR-004 | EditNoticesView.swift | L254-258 | HtmlUtils.Styles使用とattributedStringFromHtml変換 |
| BR-005 | EditNoticesViewController.swift | L75 | `URL(string: url.absoluteString, relativeTo: viewModel.siteURL)` |

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

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| loadView | EditNoticesViewController.swift | L31-40 | ビュー初期化とアクション設定 |
| doneButton | EditNoticesView.swift | L86-93 | ボタン定義 |
| toggleSwitch | EditNoticesView.swift | L140-146 | スイッチ定義 |
| textView | EditNoticesView.swift | L148-157 | テキストビュー定義 |
| configure | EditNoticesView.swift | L253-274 | ビューモデル適用 |

### 6. API通信に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| fetchNotices | EditNoticesFetcher.swift | L24-54 | 通知取得メソッド |
| parameters | EditNoticesFetcher.swift | L30-37 | APIパラメータ定義 |
| Response構造体 | EditNoticesFetcher.swift | L10-20 | レスポンスデコード |
| Notice生成 | EditNoticesFetcher.swift | L44-49 | 通知配列生成 |

### 7. アクセシビリティに関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| screenChanged | EditNoticesViewController.swift | L45 | `UIAccessibility.post(notification: .screenChanged, ...)` |
| VoiceOver遅延表示 | EditNoticesViewController.swift | L47-50 | 1秒後にtextViewを表示 |
| accessibilityElements | EditNoticesView.swift | L245-250 | `changeTextViewVoiceOverVisibility(...)` |

### 8. 計算ロジックに関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| semanticContentAttribute | EditNoticesViewModel.swift | L17-19 | `MWKLanguageLinkController.semanticContentAttribute(...)` |
| テキスト配置 | EditNoticesView.swift | L263 | RTL判定によるテキスト配置 |

## 根拠なし項目

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

## 信頼度評価

- **claims_total**: 22（処理概要4、入力4、デリゲート2、ビジネスルール5、UI5、API4、アクセシビリティ3、計算2 - 重複除外後）
- **claims_with_evidence**: 22
- **claims_without_evidence**: 0
- **confidence_derived**: 22/22 = 1.00

## 検証方法

1. 各根拠ファイルの該当行を確認し、記述内容と一致することを検証
2. API通信パラメータがVisualEditor仕様に準拠していることを確認
3. HTML→AttributedString変換のフローが正確であることを確認
