# 通知設計書 49-Update Check Failed

## 概要

本ドキュメントは、OpenCodeデスクトップアプリケーションにおける「Update Check Failed」ダイアログ通知の設計を記載する。アプリケーションのアップデート確認処理が失敗した際に表示されるエラーダイアログである。

### 本通知の処理概要

Tauriのアップデーターを使用したアップデート確認処理が失敗した際に、ネイティブダイアログでユーザーにエラーを通知する処理を行う。

**業務上の目的・背景**：OpenCodeデスクトップアプリケーションは、Tauriの自動アップデート機能を使用してアプリケーションの更新を管理している。ユーザーが手動でアップデート確認を要求した場合（メニューから「Check for Updates...」を選択）、ネットワークエラーやサーバーエラーなどでアップデート確認が失敗する可能性がある。この通知により、ユーザーは確認処理の失敗を認識し、後で再試行するか、ネットワーク接続を確認することができる。

**通知の送信タイミング**：ユーザーが手動でアップデート確認を要求し（`alertOnFail: true`）、`check()`関数が例外をスローした場合に表示される。

**通知の受信者**：アップデート確認を要求したユーザー自身。デスクトップアプリケーションのネイティブダイアログとして表示される。

**通知内容の概要**：タイトル「Update Check Failed」と、メッセージ「Failed to check for updates」が表示される。

**期待されるアクション**：ユーザーはダイアログを閉じた後、以下のアクションを検討する。
1. ネットワーク接続を確認する
2. 後で再度アップデート確認を試みる

## 通知種別

デスクトップダイアログ（Tauriネイティブダイアログ）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（アップデート確認失敗時に即時表示） |
| 優先度 | 中 |
| リトライ | 無 |

### 送信先決定ロジック

アップデート確認を要求したユーザーのデスクトップアプリケーションにネイティブダイアログが表示される。

## 通知テンプレート

### ダイアログ

| 項目 | 内容 |
|-----|------|
| 種別 | メッセージダイアログ |
| タイトル | `desktop.updater.checkFailed.title`（"Update Check Failed"） |
| メッセージ | `desktop.updater.checkFailed.message`（"Failed to check for updates"） |
| ボタン | OK（デフォルト） |

### 本文テンプレート

```
タイトル: Update Check Failed
メッセージ: Failed to check for updates
```

### 添付ファイル

なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| - | 固定テキストのみ | i18n（desktop） | - |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| メニュー操作 | Check for Updates...クリック | check()例外発生 && alertOnFail=true | 手動アップデート確認失敗時 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| alertOnFail=false | 自動アップデート確認の場合は通知しない |
| check()成功 | アップデート確認が成功した場合は通知しない |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[ユーザーがCheck for Updates選択] --> B[runUpdater alertOnFail=true]
    B --> C[check 関数呼び出し]
    C --> D{結果}
    D -->|例外発生| E{alertOnFail?}
    E -->|true| F[message ダイアログ表示]
    E -->|false| G[終了]
    D -->|成功| H[アップデート確認続行]
    F --> G
    H --> I[updateあり/なしの処理]
    I --> G
```

## データベース参照・更新仕様

### 参照テーブル一覧

本通知はクライアントサイドで完結するため、データベースへの直接参照は行わない。

### 更新テーブル一覧

本通知はクライアントサイドで完結するため、データベースへの更新は行わない。

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| ネットワークエラー | アップデートサーバーに到達できない | ダイアログでエラー通知 |
| サーバーエラー | アップデートサーバーがエラーを返す | ダイアログでエラー通知 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0（Tauriのcheck関数内での処理） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | 制限なし（ユーザー操作ベース） |
| 1日あたり上限 | 制限なし |

### 配信時間帯

制限なし（ユーザー操作に応じて即時表示）

## セキュリティ考慮事項

- 詳細なエラー情報（スタックトレースなど）は表示しない
- アップデートサーバーのURLは表示しない

## 備考

- Tauri専用の通知であり、ブラウザ版では使用されない
- `@tauri-apps/plugin-dialog`の`message`関数を使用
- `@tauri-apps/plugin-updater`の`check`関数でアップデート確認を行う
- 自動アップデート確認（起動時など、`alertOnFail=false`）では表示されない

---

## コードリーディングガイド

本通知を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

アップデーター関数の引数を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | updater.ts | `packages/desktop/src/updater.ts` | `runUpdater`関数の引数`{ alertOnFail }` |

**読解のコツ**: `alertOnFail`パラメータがダイアログ表示の制御に使用される。

#### Step 2: エントリーポイントを理解する

処理の起点となる関数を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | updater.ts | `packages/desktop/src/updater.ts` | L11-51の`runUpdater`関数 |

**主要処理フロー**:
1. **L12**: i18n初期化
2. **L14-21**: check()関数呼び出しとcatch句
3. **L17-19**: alertOnFailがtrueの場合にmessageダイアログ表示

#### Step 3: メッセージ定義を理解する

i18n定義を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | en.ts | `packages/desktop/src/i18n/en.ts` | L11-12のcheckFailed定義 |

**主要処理フロー**:
- **L11**: `desktop.updater.checkFailed.title` = "Update Check Failed"
- **L12**: `desktop.updater.checkFailed.message` = "Failed to check for updates"

### プログラム呼び出し階層図

```
メニュー「Check for Updates...」
    │
    └─ runUpdater({ alertOnFail: true }) (updater.ts L11)
           │
           ├─ initI18n() (L12)
           │
           ├─ check() (L16)
           │      └─ @tauri-apps/plugin-updater
           │
           └─ catch (L17-20)
                  │
                  └─ [alertOnFail=true]
                         │
                         └─ message(t("...message"), { title: t("...title") })
                                └─ @tauri-apps/plugin-dialog
```

### データフロー図

```
[入力]               [処理]                    [出力]

メニュー選択 ───▶ runUpdater ───▶ ネイティブダイアログ
                      │               │
                      ▼               ├─ "Update Check Failed"
                 check() API          └─ "Failed to check for updates"
                      │
                      ▼
               [失敗時] catch
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| updater.ts | `packages/desktop/src/updater.ts` | ソース | アップデーター処理（L11-51） |
| en.ts | `packages/desktop/src/i18n/en.ts` | 設定 | 英語メッセージ定義（L11-12） |
| ja.ts | `packages/desktop/src/i18n/ja.ts` | 設定 | 日本語メッセージ定義 |
| i18n/index.ts | `packages/desktop/src/i18n/index.ts`（推定） | ソース | i18n初期化・t関数 |
