# バッチ設計書 19-close-cant-reproduce-issues.yml

## 概要

本ドキュメントは、GitHub Actionsによる再現不可能Issue自動クローズワークフロー `.github/workflows/close-cant-reproduce-issues.yml` のバッチ設計書である。"can't reproduce" ラベル付きIssueを3日間非アクティブ後に自動クローズする。

### 本バッチの処理概要

"can't reproduce"（再現不可能）ラベルが付与されたIssueのうち、3日間アクティビティがないものを自動的にクローズするスケジュール実行ワークフローである。

**業務上の目的・背景**：再現不可能と判断されたIssueが長期間オープンのまま放置されることを防止する。メンテナーが"can't reproduce"ラベルを付与した後、報告者が3日以内に追加情報を提供しない場合は、自動的にIssueをクローズすることで、Issueトラッカーの整理を自動化し、メンテナーの管理負担を軽減する。

**バッチの実行タイミング**：毎日0時（UTC）にcronスケジュールで実行される。

**主要な処理内容**：
1. "can't reproduce" ラベルが付与されたIssueを検索する
2. 最終アクティビティから3日以上経過したIssueを特定する
3. 該当するIssueを自動クローズする

**前後の処理との関連**：メンテナーが手動で"can't reproduce"ラベルを付与することが前提となる。クローズ後、No.20の `lock-closed-issues.yml` により14日間非アクティブ後にロックされる可能性がある。

**影響範囲**：vuejs/coreリポジトリのIssueのオープン/クローズ状態に影響する。

## バッチ種別

CI/CD（Issue自動管理）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 日次 |
| 実行時刻 | 00:00 UTC |
| 実行曜日 | 毎日 |
| 実行日 | 毎日 |
| トリガー | cron（'0 0 * * *'） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| GitHub Actionsランナー | ubuntu-latestが利用可能であること |
| permissions | issues: write |
| GITHUB_TOKEN | Issueのクローズに必要な権限が付与されていること |

### 実行可否判定

`github.repository == 'vuejs/core'` の場合のみ実行される。fork上では実行されない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | ワークフロー入力パラメータなし |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| GitHub Issues API | JSON | "can't reproduce" ラベル付きのオープンIssue |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| GitHub Issues | ステータス変更 | 対象Issueのクローズ |

### 出力ファイル仕様

ファイル出力なし。

## 処理フロー

### 処理シーケンス

```
1. スケジュールトリガー（毎日00:00 UTC）
2. vuejs/coreリポジトリかどうかを判定
3. actions-cool/issues-helper@v3 で close-issues アクションを実行
   ├─ ラベル: "can't reproduce"
   ├─ 非アクティブ期間: 3日
   └─ 該当Issueを自動クローズ
```

### フローチャート

```mermaid
flowchart TD
    A[cron 00:00 UTC] --> B{vuejs/core リポジトリ?}
    B -->|Yes| C[can't reproduce ラベル付きIssue検索]
    B -->|No| Z[スキップ]
    C --> D{3日以上非アクティブ?}
    D -->|Yes| E[Issue自動クローズ]
    D -->|No| F[スキップ]
    E --> G[ワークフロー完了]
    F --> G
    Z --> G
```

## データベース操作仕様

### 操作別データベース影響一覧

データベース操作なし（GitHub Issues APIを通じた操作のみ）。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | APIエラー | GitHub Issues APIの呼び出しが失敗した場合 | GITHUB_TOKENの権限を確認する |
| - | レート制限 | GitHub APIのレート制限に達した場合 | 次回のスケジュール実行を待つ |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（次回スケジュール実行で再試行） |
| リトライ間隔 | 24時間（次回スケジュール） |
| リトライ対象エラー | - |

### 障害時対応

ワークフローの失敗時は、GitHub Actionsのログを確認する。対象Issueが多すぎる場合はAPIレート制限に注意する。

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | Issue単位（各Issueの操作は独立） |
| コミットタイミング | - |
| ロールバック条件 | - |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | "can't reproduce"ラベル付きの非アクティブIssue件数に依存 |
| 目標処理時間 | GitHub Actionsの実行時間制限内 |
| メモリ使用量上限 | GitHub Actionsランナーのデフォルトリソースに依存 |

## 排他制御

明示的な排他制御なし。日次実行のため、同時実行の可能性は低い。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| ジョブログ | 各ステップ実行時 | GitHub Actions標準のステップ実行ログ |
| クローズログ | Issue処理時 | actions-cool/issues-helperの処理結果 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ワークフロー実行結果 | 失敗時 | GitHubリポジトリの通知設定に依存 |

## 備考

- `actions-cool/issues-helper@v3` の `close-issues` アクションを使用している
- 非アクティブ期間は `inactive-day: 3` で3日間に設定されている
- ラベル名は `"can't reproduce"` でシングルクォート内にアポストロフィを含む
- 本ワークフローはIssueのクローズのみを行い、コメントの追加は行わない
- クローズ後の自動ロックはNo.20の `lock-closed-issues.yml` が担当する
