Claude-skill-registry github-issue-state-management
GitHub Issueのラベルとメタデータを使用した環境状態管理。container-use/worktree/ホスト環境すべてからアクセス可能なSingle Source of Truth
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/github-issue-state-management" ~/.claude/skills/majiayu000-claude-skill-registry-github-issue-state-management && rm -rf "$T"
manifest:
skills/data/github-issue-state-management/SKILL.mdsource content
GitHub Issue 状態管理
Single Source of Truth: GitHub Issue のラベルとメタデータによる環境状態管理
概要
なぜ GitHub Issue で管理するのか?
| 課題(ローカルファイル) | 解決策(GitHub Issue) |
|---|---|
| container-use内からホストファイルにアクセス不可 | CLI はどこからでも使用可能 |
| worktree間でファイル共有不可 | Issue は全環境で同一 |
| 並列実行時の競合リスク | ラベル操作は GitHub がアトミック処理 |
| ローカルファイルのため可視性が低い | GitHub UI で状態が一目瞭然 |
ラベル体系
ステータスラベル(排他: 1つのみ)
| ラベル | 説明 | 色(推奨) |
|---|---|---|
| 作業中 | (緑) |
| 人間の介入が必要 | (赤) |
| PR作成済み | (青) |
| マージ完了 | (紫) |
Phase ラベル(排他: 1つのみ)
| ラベル | 説明 |
|---|---|
| ブランチ作成 |
| 環境構築 |
| 設計書参照 |
| 設計書実現性チェック |
| テスト作成(Red) |
| 実装(Green) |
| リファクタリング |
| レビュー依頼/修正 |
| ストレステスト(任意) |
| ユーザー承認待ち |
| PR作成 |
| CI監視 |
| マージ & クリーンアップ |
領域ラベル(任意: 複数可)
| ラベル | 説明 |
|---|---|
| バックエンド |
| フロントエンド |
| インフラ |
| データベース |
メタデータ管理
Issue Body へのメタデータ埋め込み
Issue 作成時または環境開始時に、Issue body の末尾に以下のブロックを追加:
<!-- ENV_METADATA env_id: abc-123-def branch: feature/issue-42-user-auth env_type: container-use worktree_path: created_at: 2026-01-17T10:00:00Z last_updated_at: 2026-01-17T15:30:00Z -->
フィールド定義
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| string | ✅ | container-use 環境ID または worktree 識別子 |
| string | ✅ | Git ブランチ名 |
| string | ✅ | / / |
| string | worktree 使用時のパス | |
| string | PR作成後に設定(途中再開時のCI監視に必要) | |
| string | ✅ | 作成日時(ISO 8601) |
| string | ✅ | 最終更新日時(ISO 8601) |
メタデータの抽出
# Issue body からメタデータを抽出 gh issue view 42 --json body -q '.body' | \ grep -oP '(?<=<!-- ENV_METADATA)[\s\S]*?(?=-->)' | \ grep -E '^[a-z_]+:' | \ sed 's/^/ /'
Blocked 状態の詳細記録
Blocked コメント形式
Blocked 発生時は、ラベル変更と共に以下形式のコメントを追加:
## Blocked: [reason_code] **Description**: [問題の詳細説明] **Suggested Action**: [推奨される解決アクション] **Context**: - [関連情報1] - [関連情報2] **Blocked at**: 2026-01-17T14:00:00Z --- > このコメントは `env:blocked` ラベルと連動しています。 > 問題解決後、ラベルを `env:active` に変更し、このコメントに「Resolved」と返信してください。
Blocked Reason コード
| Reason | 説明 | 推奨アクション |
|---|---|---|
| 設計書実現性チェックNG | 設計書修正 |
| レビュー3回失敗 | 設計書見直し |
| 依存Subtask未完了 | 依存解決待ち |
| 外部要因(API未提供等) | 人間エスカレーション |
| 環境リソース不足 | Docker cleanup |
| CI 3回連続失敗 | 手動調査必要 |
API 操作
主要関数(CLI ラッパー)
| 関数 | 用途 | コマンド例 |
|---|---|---|
| 環境開始時に登録 | |
| Phase更新 | |
| Blocked状態に設定 | |
| Blocked解除 | |
| 現在の状態取得 | |
| アクティブな環境一覧 | |
直接 gh コマンド
# 環境登録(ラベル追加) gh issue edit 42 --add-label "env:active,phase:1-env,area:backend" # Phase 更新(ラベル入れ替え) gh issue edit 42 --remove-label "phase:4-red" --add-label "phase:5-green" # Blocked 設定 gh issue edit 42 --remove-label "env:active" --add-label "env:blocked" gh issue comment 42 --body "## Blocked: design_ambiguity..." # PR作成済みに更新 gh issue edit 42 --remove-label "env:active" --add-label "env:pr-created" # 状態取得(JSON) gh issue view 42 --json number,title,labels,body,comments # アクティブな環境一覧 gh issue list --label "env:active" --json number,title,labels # Blocked な環境一覧 gh issue list --label "env:blocked" --json number,title,labels
必須更新ポイント (NON-NEGOTIABLE)
| トリガー | アクション | ラベル操作 |
|---|---|---|
| 環境作成開始 | ラベル追加 + メタデータ埋め込み | , |
| Phase 遷移 | ラベル入れ替え | , |
| Blocked 発生 | ラベル変更 + コメント追加 | , |
| Blocked 解除 | ラベル変更 | , |
| PR 作成 | ラベル変更 | , , |
| PR マージ | ラベル変更 | , , |
| 環境削除 | ラベル削除 | 全 , ラベルを削除 |
セッション復旧(途中再開)
resume コマンド(推奨)
# 復旧情報をJSON形式で取得 bash .opencode/skill/github-issue-state-management/scripts/issue-state.sh resume 42
出力例:
{ "issue_number": 42, "status": "env:active", "phase": "5-green", "env_id": "abc-123-def", "branch": "feature/issue-42-user-auth", "env_type": "container-use", "action": "reopen_environment", "command": "environment_open with env_id=abc-123-def" }
復旧判定マトリクス
| ステータス | Phase | アクション | 具体的な操作 |
|---|---|---|---|
| | 環境作成 | |
| 〜 | 環境再開 | |
| 〜 | レビュー再開 | 環境を開いてレビューループを継続 |
| | 承認待ち | ユーザーに承認ゲートを提示 |
| 〜 | CI監視 | |
| - | 人間の介入 | Blockedコメント確認 → 解決 → |
| - | PR確認 | で状態確認 |
| - | クリーンアップ | 環境削除(残っている場合) |
| (なし) | - | 初期化 | で環境を登録 |
手動復旧手順(参考)
# 1. アクティブな環境を検索 gh issue list --label "env:active" --json number,title,labels # 2. 特定 Issue の復旧情報を取得 bash .opencode/skill/github-issue-state-management/scripts/issue-state.sh resume 42 # 3. 出力された action/command に従って再開
並列実行時のルール
| Actor | 責任 |
|---|---|
| 作業完了後、自身で ラベルを更新可能 |
| Main agent (Sisyphus) | 複数 Issue を並列処理する場合、各 Issue を独立して管理 |
競合回避:
- 同一 Issue への同時編集は避ける(既存ルールと同じ)
- ラベル操作は GitHub がアトミックに処理するため、ファイルベースより安全
ラベル初期設定
リポジトリに必要なラベルを一括作成:
# ステータスラベル gh label create "env:active" --color "0E8A16" --description "作業中" gh label create "env:blocked" --color "D93F0B" --description "人間の介入が必要" gh label create "env:pr-created" --color "1D76DB" --description "PR作成済み" gh label create "env:merged" --color "6F42C1" --description "マージ完了" # Phase ラベル gh label create "phase:0-branch" --color "FBCA04" --description "ブランチ作成" gh label create "phase:1-env" --color "FBCA04" --description "環境構築" gh label create "phase:2-design" --color "FBCA04" --description "設計書参照" gh label create "phase:3-check" --color "FBCA04" --description "設計実現性チェック" gh label create "phase:4-red" --color "FBCA04" --description "TDD Red" gh label create "phase:5-green" --color "FBCA04" --description "TDD Green" gh label create "phase:6-refactor" --color "FBCA04" --description "リファクタリング" gh label create "phase:7-review" --color "FBCA04" --description "レビュー" gh label create "phase:8-stress" --color "FBCA04" --description "ストレステスト" gh label create "phase:9-approval" --color "FBCA04" --description "承認待ち" gh label create "phase:10-pr" --color "FBCA04" --description "PR作成" gh label create "phase:11-ci" --color "FBCA04" --description "CI監視" gh label create "phase:12-merge" --color "FBCA04" --description "マージ完了" # 領域ラベル gh label create "area:backend" --color "C2E0C6" --description "バックエンド" gh label create "area:frontend" --color "C2E0C6" --description "フロントエンド" gh label create "area:infra" --color "C2E0C6" --description "インフラ" gh label create "area:database" --color "C2E0C6" --description "データベース"
CLI スクリプト
使用方法:
bash .opencode/skill/github-issue-state-management/scripts/issue-state.sh <command> [args...]
| コマンド | 説明 | 使用例 |
|---|---|---|
| 環境を登録 | |
| Phase を更新 | |
| Blocked 状態に設定 | |
| Blocked を解除 | |
| PR作成済みに更新 | |
| マージ完了に更新 | |
| 状態を取得 | |
| アクティブ一覧 | |
| 途中再開情報を取得 | |
| ラベル一括作成 | |
エラーリトライ
スクリプトはネットワークエラーやGitHub APIのレート制限に対して自動リトライを行います。
| 設定 | 環境変数 | デフォルト |
|---|---|---|
| 最大リトライ回数 | | 3 |
| リトライ間隔(秒) | | 5 |
レート制限時: 60秒待機後にリトライ ネットワークエラー時:
RETRY_DELAY秒待機後にリトライ
# カスタムリトライ設定 MAX_RETRIES=5 RETRY_DELAY=10 bash issue-state.sh phase 42 5-green
ハードブロック (違反禁止)
| 違反 | 結果 |
|---|---|
| 環境開始時にラベル未追加 | FORBIDDEN - 復旧不可 |
| Phase 遷移時にラベル未更新 | FORBIDDEN - 状態不整合 |
| Blocked 時にコメント未追加 | FORBIDDEN - 理由が不明 |
変更履歴
| 日付 | バージョン | 変更内容 |
|---|---|---|
| 2026-01-17 | 1.0.0 | 初版作成 |