---
name: implement
description: "実装パイプラインを開始する．コーディング → テスト → リファクタリングの順で 3 つのエージェントを実行し，各フェーズ間で人間の確認を挟む．"
argument-hint: "<タスク内容>"
---

あなたはオーケストレーターです．以下の実装パイプラインを管理してください．
各フェーズ間で必ず人間の確認を挟み，承認を得てから次のフェーズに進むこと．

## 前提確認 (Pre-check)

1. 現在のブランチを確認する（`git branch --show-current`）
2. `main` ブランチにいる場合，GUIDE_04 に従い作業ブランチを作成する
   - ブランチ名: `feature/`/`fix/` + タスク内容を表す英単語 2〜4 語（kebab-case）
3. 実装対象のタスクを確認する: $ARGUMENTS

## Phase 1: コーディング (Coder)

coder エージェントに以下を委譲する:

「以下のタスクを実装してください: $ARGUMENTS」

Coder の出力（実装サマリー）を記録する．

### 人間の確認ポイント 1

Coder の実装サマリーをユーザーに提示し，以下を依頼する:

「**Phase 1（コーディング）が完了しました．**

{Coder の実装サマリー}

ブラウザや実機で動作を確認してください．
- **OK** → 次のフェーズ（テスト）に進みます
- **NG** → 問題点を教えてください．修正します」

ユーザーの OK を得るまで Phase 2 に進まないこと．
NG の場合は coder エージェントに修正を委譲し，再度確認を依頼する．

## Phase 2: テスト (Tester)

tester エージェントに以下を委譲する:

「直前の実装に対するテストを仕様ベースで作成・実行してください．

実装サマリー:
{Coder の出力}」

Tester の出力（テストサマリー）を記録する．

### Phase 2 完了後の分岐

テスト結果に応じて自動で分岐する:

- **全テスト成功**: ユーザーにテストサマリーを表示した上で，自動的に Phase 3 に進む．
- **テスト失敗あり**: ユーザーに報告し，判断を仰ぐ．

テスト失敗時のみ，以下をユーザーに提示する:

「**Phase 2（テスト）でテスト失敗がありました．**

{Tester のテストサマリー}

テスト失敗の原因を判断してください:
- **仕様の問題** → 仕様の修正方針を教えてください
- **実装の問題** → coder エージェントに修正を委譲します
- **テストの問題** → tester エージェントに修正を委譲します」

ユーザーの指示に従い対応した後，再度テストを実行して全テスト成功を確認してから Phase 3 に進む．

## Phase 3: リファクタリング (Refactorer)

refactorer エージェントに以下を委譲する:

「直前の実装・テスト後のコードをリファクタリングしてください．

実装サマリー:
{Coder の出力}

テストサマリー:
{Tester の出力}」

Refactorer の出力（リファクタリングサマリー）を記録する．

### 人間の確認ポイント 3

Refactorer のリファクタリングサマリーをユーザーに提示し，以下を依頼する:

「**Phase 3（リファクタリング）が完了しました．**

{Refactorer のリファクタリングサマリー}

全フェーズが完了しました．最終確認をお願いします．
- **OK** → コミット・push・PR 作成に進みます
- **NG** → 修正点を教えてください」

## Phase 4: ドキュメント更新 (Documentation)

リファクタリング完了後，実装内容に応じてドキュメントを更新する．

### docs/ の更新チェック

以下に該当する変更がある場合，docs/ 内の関連ドキュメントを更新する:

- API やデータ構造の変更
- 環境設定の変更
- 開発計画の進捗に関わる変更
- 規約やルールに関わる変更

### CLAUDE.md の更新

変更内容に応じて CLAUDE.md の「開発進捗」セクションを更新する．

### コミットコンテキストの書き出し

Phase 4 の結果を `.claude/commit-context.md` に書き出す．
このファイルは `/commit` が参照し，docs/CLAUDE.md の更新漏れチェックをスキップするために使う．

```markdown
# commit-context
- docs_updated: true/false
- claude_md_updated: true/false
- note: （更新不要の理由や更新内容の要約）
```

### 更新がある場合のみ確認

ドキュメントを更新した場合は，更新内容をユーザーに提示する:

「**Phase 4（ドキュメント更新）が完了しました．**

{更新したドキュメントの一覧と変更内容の要約}

確認をお願いします．
- **OK** → `/commit` でコミットできます
- **NG** → 修正点を教えてください」

更新不要と判断した場合は，確認を挟まず完了処理に進む．

## 完了処理 (Finalization)

「全フェーズが完了しました．`/commit` でコミットしてください．」

## 注意事項 (Notes)

- 各フェーズは必ず順番に実行する（並列実行しない）
- フェーズをスキップしない．リファクタリング不要の判断は Refactorer エージェント自身が行う
- エージェントがエラーを報告した場合，ユーザーに報告して判断を仰ぐ
- 人間の確認なしに次のフェーズに進まない
