devteam-issue
GitHubの課題番号を指定して修正できます。詳細を自動的に取得し、修正を実装します。
description の原文を見る
Fix a GitHub issue by number. Automatically fetches details and implements a fix.
SKILL.md 本文
Current session: !source "${CLAUDE_PLUGIN_ROOT}/scripts/state.sh" && get_current_session 2>/dev/null || echo "No active session"
Active sprint: !source "${CLAUDE_PLUGIN_ROOT}/scripts/state.sh" && get_kv_state "active_sprint" 2>/dev/null || echo "None"
Failure count: !source "${CLAUDE_PLUGIN_ROOT}/scripts/state.sh" && get_kv_state "consecutive_failures" 2>/dev/null || echo "0"
DevTeam Issue コマンド
コマンド: /devteam:issue <number>
GitHubのイシューを番号で修正します。詳細を自動的に取得し、修正を実装します。
使用方法
/devteam:issue 123 # GitHubのイシュー#123を修正
/devteam:issue 456 --council # 複雑な診断にバグカウンシルを強制
処理フロー
フェーズ 0: 状態トラッキングの初期化
開始前に、SQLiteデータベース(.devteam/devteam.db)に状態を初期化します:
# 状態管理機能をソースする
source "${CLAUDE_PLUGIN_ROOT}/scripts/state.sh"
# 必要に応じてデータベースを初期化
source "${CLAUDE_PLUGIN_ROOT}/scripts/db-init.sh"
# プロジェクトメタデータを設定
set_kv_state "metadata.created_at" "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
set_kv_state "metadata.project_name" "Issue #123 Fix"
set_kv_state "metadata.project_type" "issue"
# イシューの詳細を設定
set_kv_state "issue.number" "123"
set_kv_state "issue.title" "[GitHubから取得]"
set_kv_state "issue.type" "bug" # bug | security | performance | enhancement
set_kv_state "issue.severity" "high" # critical | high | medium | low
set_kv_state "issue.complexity" "moderate" # simple | moderate | complex
# 実行コンテキストを設定
set_kv_state "current_execution.command" "/devteam:issue 123"
set_phase "diagnosis"
# 自律実行モードを設定
set_kv_state "autonomous_mode.enabled" "true"
set_kv_state "autonomous_mode.max_iterations" "20"
set_kv_state "autonomous_mode.current_iteration" "0"
set_kv_state "autonomous_mode.circuit_breaker.consecutive_failures" "0"
set_kv_state "autonomous_mode.circuit_breaker.max_failures" "3"
set_kv_state "autonomous_mode.circuit_breaker.state" "closed"
フェーズ 1: イシューの詳細を取得
# GitHubからイシューを取得
gh issue view 123 --json title,body,labels,comments,state
# 主要情報を抽出
- タイトル
- 説明
- 再現手順
- ラベル (bug、enhancement、security など)
- コメント (追加のコンテキストが含まれている可能性あり)
フェーズ 2: イシューを分類
イシュータイプを判定:
bug- 何か壊れているsecurity- セキュリティの脆弱性performance- パフォーマンス低下enhancement- 小規模な機能リクエスト
重要度を判定:
critical- システム停止、セキュリティの脆弱性、データ喪失high- 主要な機能が壊れているmedium- 重要だが回避策があるlow- 軽微な問題
複雑さを判定:
simple- 原因が明確で、修正が単純 (1~2ファイル)moderate- 調査が必要で、複数ファイルに影響complex- アーキテクチャ上の問題で、深い分析が必要
フェーズ 3: バグカウンシル (複雑なバグの場合)
以下の場合にバグカウンシルを有効化:
- 複雑さが
complex - イシューに明確な再現手順がない
- 修正試行が複数回失敗している
--councilフラグが指定されている
バグカウンシルのプロセス:
// 5つの診断エージェントを並行実行
const councilResults = await Promise.all([
Task({
subagent_type: "diagnosis:root-cause-analyst",
model: "opus",
prompt: `イシュー #${issueNumber} を分析:
タイトル: ${title}
説明: ${body}
以下を含む診断を提供:
- 根本原因分析
- 証拠
- 推奨される修正
- 信頼度スコア (0-1)`
}),
Task({
subagent_type: "diagnosis:code-archaeologist",
model: "opus",
prompt: `イシュー #${issueNumber} のgit履歴を調査...`
}),
Task({
subagent_type: "diagnosis:pattern-matcher",
model: "opus",
prompt: `コードベースで類似パターンを検索...`
}),
Task({
subagent_type: "diagnosis:systems-thinker",
model: "opus",
prompt: `システム相互作用を分析...`
}),
Task({
subagent_type: "diagnosis:adversarial-tester",
model: "opus",
prompt: `エッジケースと関連する障害を見つけ...`
})
])
// ランク付き選択投票
const proposals = councilResults.map(r => r.proposal)
const votes = councilResults.map(r => r.ranking)
const winner = calculateRankedChoice(proposals, votes)
console.log(`バグカウンシルの決定: ${winner.approach}`)
console.log(`合意: ${winner.votes}/${councilResults.length}`)
バグカウンシルの出力:
bug_council:
activated: true
issue_number: 123
proposals:
A:
agent: diagnosis:root-cause-analyst
diagnosis: "ゲストユーザー処理のNull参照"
confidence: 0.85
B:
agent: diagnosis:code-archaeologist
diagnosis: "コミットabc123からのリグレッション"
confidence: 0.78
C:
agent: diagnosis:pattern-matcher
diagnosis: "オプショナルチェーンの不一貫性"
confidence: 0.92
D:
agent: diagnosis:systems-thinker
diagnosis: "AuthContextコントラクト違反"
confidence: 0.80
E:
agent: diagnosis:adversarial-tester
diagnosis: "同じ障害への複数のパス"
confidence: 0.75
voting:
method: ranked_choice
winner: C
consensus: "強い合意 (5/5中4つがCを上位2に投票)"
selected_approach:
diagnosis: "4つの場所でのオプショナルチェーンの不一貫性"
fix: "すべてのuser.settings アクセスにオプショナルチェーンを追加"
prevention: "オプショナルチェーン向けのeslintルールを追加"
フェーズ 4: 修正の実装
シンプル/中程度のイシュー (カウンシルなし):
Task({
subagent_type: "orchestration:task-loop",
model: "opus",
prompt: `イシュー #${issueNumber} を修正:
イシュー: ${title}
根本原因: ${diagnosis}
1. 修正を実装
2. リグレッションテストを追加
3. 既存のテストを実行
4. コードレビュー
各ステップ後に状態を更新してください。`
})
複雑なイシュー (カウンシルあり):
Task({
subagent_type: "orchestration:task-loop",
model: "sonnet",
prompt: `バグカウンシルの決定を使用してイシュー #${issueNumber} を修正:
選択されたアプローチ: ${councilDecision.approach}
場所: ${councilDecision.locations}
1. すべての特定された場所に修正を適用
2. 予防措置を実装
3. 包括的なリグレッションテストを追加
4. 完全なテストスイートを実行
5. セキュリティ監査 (該当する場合)
カウンシルの推奨事項を正確に従ってください。`
})
フェーズ 4.5: 失敗時のモデルエスカレーション
修正の試行が失敗した場合:
model_escalation:
# イシュー固有のエスカレーション (プロジェクト作業より高速)
consecutive_failures:
simple_issue:
haiku_to_sonnet: 1 # 素早くエスカレーション
sonnet_to_opus: 1
opus_to_council: 2 # バグカウンシルを有効化
moderate_issue:
sonnet_to_opus: 1
opus_to_council: 2
complex_issue:
# 既にopusで、2回の失敗後カウンシルへ
opus_to_council: 2
エスカレーション時に状態を更新:
issue:
fix_attempts:
- attempt: 1
model: haiku
result: fail
reason: "テストが引き続き失敗"
- attempt: 2
model: sonnet
result: fail
reason: "リグレッションを導入"
- attempt: 3
model: opus
result: pass
フェーズ 5: 検証とドキュメント作成
- すべてのテストを実行
- イシューが解決されたことを確認
- リグレッションがないことを確認
- 動作が変更された場合はドキュメントを更新
- チェンジログエントリを追加
フェーズ 6: GitHub統合
# 修正の詳細とともにイシューにコメント
gh issue comment 123 --body "コミット $(git rev-parse HEAD) で修正されました
**根本原因:**
${diagnosis}
**修正:**
${fixDescription}
**テスト:**
- リグレッションテストを追加
- すべての既存テストが成功
**予防:**
${preventionMeasures}"
# イシューをクローズ
gh issue close 123 --reason completed
ユーザーへの通知
開始時:
イシュー #123 を取得中...
イシュー: ゲストユーザーのログインに失敗
ラベル: bug、high-priority
ステータス: open
イシューの複雑さを分析中...
タイプ: bug
重要度: high
複雑さ: complex
深い分析のためバグカウンシルを有効化中...
バグカウンシルの進行:
バグカウンシルの検討
5つの診断エージェントをスポーン中...
[A] Root Cause Analyst 分析中...
[B] Code Archaeologist 分析中...
[C] Pattern Matcher 分析中...
[D] Systems Thinker 分析中...
[E] Adversarial Tester 分析中...
すべての分析が完了しました。ランク付き選択投票を実施中...
提案のランキング:
C (Pattern Matcher): 11ポイント - 勝者
D (Systems Thinker): 10ポイント
A (Root Cause): 16ポイント
E (Adversarial): 16ポイント
B (Archaeologist): 22ポイント
カウンシルの決定: 提案 C
「4つの場所でのオプショナルチェーンの不一貫性」
合意: 強い (5/5中4つが上位2に投票)
実装中:
修正を実装中
以下に修正を適用:
UserService.java:142
ProfileController.java:89
SettingsPage.tsx:45
AccountApi.ts:112
予防策を追加:
オプショナルチェーン向けのESLintルール
テスト実行中...
234/234 テスト成功
新しいリグレッションテストを追加
コードレビュー中...
承認
完了時:
イシュー #123 が解決されました
イシュー: ゲストユーザーのログインに失敗
根本原因: オプショナルチェーンの不一貫性
修正: 4つの場所に ?. 演算子を追加
予防: ESLintルールを追加
変更されたファイル:
- UserService.java
- ProfileController.java
- SettingsPage.tsx
- AccountApi.ts
- .eslintrc.js (新しいルール)
テスト: 235個が成功 (新規1個)
GitHubのイシュー #123 が自動的にクローズされました。
コスト見積もり
シンプルなバグ (カウンシルなし):
- 分析: 約$0.20
- 実装: 約$0.50
- テスト: 約$0.30
- 合計: 約$1.00
複雑なバグ (カウンシルあり):
- カウンシル (5x Opus): 約$3.50
- 実装: 約$1.50
- テスト: 約$0.50
- 合計: 約$5.50
関連項目
/devteam:bug- ローカルで発見されたバグを修正 (GitHubイシューがない場合に使用)/devteam:implement- 一般的な実装/devteam:status- 進行状況を確認
/devteam:issuevs/devteam:bugの使い分け: 追跡されているGitHubイシューを番号で修正する場合は/devteam:issueを使用します。GitHubイシューなしでローカルで発見されたバグに対しては/devteam:bugを使用します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- michael-harris
- ライセンス
- MIT
- 最終更新
- 2026/2/26
Source: https://github.com/michael-harris/devteam / ライセンス: MIT