---
name: fix-with-verify
description: バグ修正→コンパイル確認→回帰テスト→失敗時 revert の安全修正パイプライン。修正が新たなバグを生まないことを機械的に保証する。USE WHEN 単発バグ修正、影響範囲が見えにくい変更、リファクタの安全確認。SKIP 大規模機能追加は impl-orchestrator、セキュリティ Finding 一括修正は robust-fix、仕様整合性回復は spec-fix を使うこと。
argument-hint: "[issue-description or file:line]"
allowed-tools: Read, Write, Edit, MultiEdit, Bash, Grep, Glob
---

# 修正 → 検証パイプライン

## Step 1: ベースライン記録

1. 修正対象ファイルの現在の状態を `git diff` で確認
2. **既存テストを実行してベースライン記録**（言語を自動検出）:

| 言語 | コマンド |
|------|---------|
| Rust | `cargo test -p <crate> 2>&1 \| tail -20` |
| Python | `pytest <テストファイル> 2>&1 \| tail -20` |
| Go | `go test ./<パッケージ>/... 2>&1 \| tail -20` |
| Node | `npm test 2>&1 \| tail -20` |

3. 失敗テストがあれば、それが今回の修正対象か確認

## Step 2: 影響範囲分析

1. 修正対象の関数/型の呼び出し元を Grep で特定
2. モジュール依存関係を確認（コアモジュール修正 → 依存モジュールにも影響）
3. 公開 API のシグネチャ変更は影響範囲が広いため要注意

## Step 3: 修正実行

1. **1ファイルずつ修正**（複数ファイル一括変更禁止）
2. 各ファイル修正後にコンパイル/型チェック確認:

| 言語 | コマンド |
|------|---------|
| Rust | `cargo check -p <crate>` (コア修正時は `cargo check --workspace`) |
| Python | `ruff check <file>` / `mypy <file>` |
| Go | `go build ./<パッケージ>/...` |
| Node | `npx tsc --noEmit` |

3. コンパイル/型エラーがあれば即座に修正

## Step 4: セキュリティ・堅牢性チェック（修正内容に応じて）

以下のパターンが修正に含まれる場合、追加チェック:

### パニック/クラッシュ防止
- `unwrap()` / `expect()` → `?` またはエラーハンドリングに置換
- 配列インデックス → `.get()` + エラーハンドリング
- 0除算 → 分母の事前チェック

### インジェクション防止
- SQL/NoSQL 文字列結合 → パラメータバインドに置換

### 入力バリデーション
- 外部入力の型・範囲チェック追加
- NaN / Infinity / 空入力のハンドリング

## Step 5: リグレッション検証

1. Step 1 と同じテストスイートを実行
2. コアモジュール修正時は依存モジュールも検証:
   - Rust: `cargo test --workspace`
   - Go: `go test ./...`
   - Node: `npm test`
3. **新たに失敗したテストがあれば修正を revert**:
   ```bash
   git checkout HEAD -- <file>
   ```
4. revert 後、より小さな単位で再修正を試みる
5. 3回連続でリグレッションが起きたら代替案を3つ提案してユーザーに選択を求める

## Step 6: エッジケーステスト追加

修正に対応するテストが不足している場合、以下を追加:
- 修正したバグの再現テスト（今後のリグレッション防止）
- 境界値テスト（0, 空, 最大値, null/None/nil）
- エラーケーステスト（不正入力、タイムアウト等）

テスト追加後に再度テスト実行で PASS を確認。

## Step 7: 完了確認

1. `git diff --stat` で変更概要確認
2. lint グリーン確認（言語に応じたツール）
3. 修正内容サマリーを表示:
   - 何が壊れていたか
   - どう直したか
   - 追加したテスト
