fix-github-issue reference
fix-github-issue は、既存の GitHub Issue 1 件を実装し、検証、review、PR 作成まで進める skill です。
対象読者と使いどころ
| 項目 | 内容 |
|---|---|
| 対象読者 | 受け入れ条件と非ゴールが定まった Issue を実装したい人 |
| 目的 | Issue の範囲を保ったまま、実装から PR 作成後の確認まで終える |
| 代表的な入口 | /fix-github-issue 123 pr=create |
| 対象外 | 親 Issue の分解、複数 Issue の queue 実行、Issue のない要求 |
まず何が起きるか
- Issue の担当者、依存関係、受け入れ条件、非ゴールを確認します。
- 実装範囲と検証方法を決め、必要な場合だけユーザーに質問します。
- 実装、通常検証、PR 前 simplify を行います。
- PR 前 simplify とそこで生じた変更の commit の後、review、push、PR 作成の前に
fix-code-commentsskill を実行します。対応言語の変更が無い branch でも省略せず、review 指摘の対応で HEAD が変わった場合は push 前に再実行して run record を最新 HEAD に揃えます。 - 指定された review を行い、PR を作成または更新して review と CI を確認します。
- 指定された E2E を行い、結果を PR と完了記録へ反映します。
| 指定 | 利用者視点の動作 |
|---|---|
pr=create / pr=draft / pr=none |
通常 PR、Draft PR、PR なしのいずれかを選ぶ |
research=... / research-packet=... |
実装前の調査方法を選ぶ |
triage=skip |
trivial な変更に限り、初期質問を減らす |
| task ledger | ユーザーが指定する引数ではない。実装中の前提ずれを検出するために内部で使う |
review=auto |
Issue と指定 option から review の強さを自動選択する |
agents=... |
local reviewer の runtime を選ぶ |
reviewers=... |
GitHub 上の reviewer / trigger を選ぶ |
max-local-review-loops=auto / max-local-review-loops=<positive-integer> / max-local-review-loops=unlimited、max-github-review-loops=auto / max-github-review-loops=<positive-integer> / max-github-review-loops=unlimited |
local / GitHub review loop の上限を選ぶ |
e2e=auto / e2e=off / e2e=pre-review / e2e=final / e2e=both |
E2E の実行時期を選ぶ |
e2e-apply=confirmed |
local apply の実行を事前承認する |
worktree=on / worktree=off |
専用 worktree を使うか選ぶ |
stack=<PR number|PR URL|auto> / stack=true |
stacked PR の親を PR または Issue 依存から解決する |
stack-base=<branch> |
stacked PR の親 branch を明示し、作業起点と review / PR の base をそろえる |
停止条件
- 別の担当者が claim 済み、または依存 Issue が未完了の場合。
- 受け入れ条件、非ゴール、公開 API、設定形式、画面上の挙動に複数の完了形がある場合。
- readiness gate、review、CI、E2E の required action が残る場合。
- Issue と linked Cosense design doc が矛盾する場合。
- dirty worktree や branch 衝突があり、安全に作業を続けられない場合。
詳細 contract
公開ページには、利用者が選ぶ option と停止条件だけを記載します。Agent が使う command、artifact schema、復旧手順は次の source of truth を参照してください。
| 内容 | Source of truth |
|---|---|
| workflow の入口と phase routing | claude/skills/fix-github-issue/SKILL.md |
| readiness、実装、review、PR 確認 | claude/skills/fix-github-issue/references/ |
| readiness artifact | implementation readiness contract |
| E2E | E2E auto policy contract |
| review 運用 | review operations |
| degraded mode | degraded mode |
人間判断 gate
- human action が必要な場合は次の該当経路へ戻す。
| gate | 質問する条件 |
|---|---|
| Issue 不明点 / drift 確認 | Issue の範囲や完了形を一意に決められない |
| E2E 実行方法の確認 | 対象環境や実行許可を自動決定できない |
| PR mode 選択 | pr= が未指定 |
| review profile 選択 | 明示 override または代表 profile の選択が必要 |
PR mode
| 引数 | 動作 |
|---|---|
pr=create |
通常 PR を作成する |
pr=draft |
Draft PR を作成する |
pr=none |
commit と push まで行い、PR は作成しない |
| 未指定 | 作業開始前に確認する |
- PR 作成後は最新 HEAD の review と CI を確認する。billing、runner、GitHub Actions service の障害は infrastructure failure として分けて報告する。
drift-checkで「変更してはいけない契約」と受け入れ条件を確認する。unmetは required action とする。- design doc は作成時点のスナップショットとし、進捗と PR は GitHub Issue 側を source of truth とする。design doc 本文にも readability gate を適用する。
research packet
| 引数 | 動作 |
|---|---|
research=auto / research=light / research=standard / research=deep / research=spike |
実装前に read-only 調査を行う |
research=off |
追加の調査メモを作らない |
research-packet=<path> |
既存の調査結果を再利用する |
research-packet=auto |
current candidate が 1 件だけなら自動採用する |
grill=skip |
research artifact の確認 interview を明示的に省略する |
- packet が古い、複数ある、または対象 Issue と一致しない場合は自動採用しない。
design doc の記録
- Issue に design doc の実 URL がある場合は、repo-scoped record、flat compatibility record、page 本文の legacy record の順で authoring 記録を探す。
- 対象 Issue の record を先に探し、見つからない場合だけ Parent の共有 record を探す。flat record は repository、Cosense project、page title も一致する場合だけ使う。
- 同じ優先順位の候補が複数ある場合や記録同士が矛盾する場合は、readiness で停止する。
- Issue に design doc の実 URL がない場合は、flat record を推測で採用しない。
triage skip
- implementation brief が
change_scale=trivialで、risk と未確定事項がない。 acceptance、validation_commands、candidate_filesがそれぞれ1件以上ある。Design docsection に実 URL または承認済みの省略理由がある。- design doc を正当に省略した Issue に link は要求しない。
- 変更行数が 20 を超える(
lines_added+lines_deleted<=20を満たさない)、または変更ファイル数が 2 件を超える場合は通常の triage に戻る。 - readiness と drift 確認は省略しない。
review mode
| 引数 | 動作 |
|---|---|
review=auto |
Issue に応じて review profile を選ぶ |
review=simplify |
PR 前 simplify だけを行う |
review=once |
単一 runtime の one-shot review を行う |
review=on |
multi-review を収束まで行う |
review=off |
review=simplify の alias として扱う |
local reviewer と GitHub reviewer
| 指定 | 対象 |
|---|---|
agents=codex / agents=claude / agents=copilot / agents=none |
local reviewer |
reviewers=copilot / reviewers=codex / reviewers=codex,copilot / reviewers=copilot,codex / reviewers=none |
GitHub reviewer / trigger |
agents=とreviewers=は別の selector とする。- task ledger 開始時は
pr_mode、review_mode、agents、e2e_mode、smoke_modeを同じ durable state revision に保存する。現在の Codex thread ID または Claude Code session ID を取得できる場合は、workflow kind / ID とrole=implementationの session binding も保存する。resume 時は保存済み selector を優先し、部分的な legacy state だけ不足分を補完する。 implementation-statusは live binding の再検証結果を selector backfill と同じ revision に保存してから判定する。selector mismatch または保存失敗時は後続へ進まない。- Stop hook は明示 workflow identity または current session binding と
role=implementationを branch 推定より優先する。保存済み selector と canonical artifact ref をCompletionCheckOptionsへ変換し、issue completion-checkと同じ evaluator の結果をcanonical_completionに記録する。reviewer、verifier、subagent、read-only research と、durable state が無い branch-only inference は no-op にする。 requiredmode ではissue completion-checkと同じ canonical 判定を effective exit に使う。旧判定はlegacy_decisionに残し、shadow_decisionとdivergenceに比較結果を記録する。issue completion-checkは実行のたびにfix-code-commentsの run record を照合し、comment-check-observation.v1を state root の repository 単位 path へ保存して、stdout に summary を additive に含める。この観測は report_only で、required_actionを追加せず完了判定と exit code を変えない。base は optional な--base-refで明示でき、省略時は origin/main との merge-base を使う。review=onceのagents=はcodex、claude、copilotのいずれか 1 件だけを指定する。review=onで local reviewer と GitHub reviewer のどちらも実行できない組み合わせは停止する。no-copilot-botは旧互換の Copilot bot opt-out とする。
E2E option
| 引数 | 動作 |
|---|---|
e2e=auto / 未指定 |
Issue と対象 surface から実行方法を決める |
e2e=off |
E2E を実行しない |
e2e=pre-review |
local review 前に実行する |
e2e=final |
review と code-affecting な CI 対応の収束後に実行する |
e2e=both |
pre-review と final の両方で実行する |
e2e=final|bothでは、final E2E の成功またはユーザーが明示した skip がなければ完了扱いにしない。通常検証や review の成功は E2E の代わりにしない。e2e-apply=confirmedは handoff / checkpoint に保持し、resume command にe2e-apply=confirmedを復元する。- 承認として使えるのは、ユーザーの直接入力と、その入力から同じ task 内で作成した handoff / checkpoint に限る。
- 単独の
e2e_apply値やhandoff_contextは承認根拠にしない。needs_user_decisionとして停止する。 - 未指定時は従来どおり実行前にユーザー確認する。
worktree option
| 引数 | 動作 |
|---|---|
worktree=on / 未指定 |
readiness 通過後に専用 worktree を作成または再利用する |
worktree=off |
current cwd で作業する |
- 既存 worktree を再利用する場合も、編集前に branch と clean state を確認する。
stacked PR の親
stack=<PR number|PR URL> は同じ repository の open PR を親として指定します。stack=auto または stack=true は、対象 Issue の親 Issue にある実装順序表と依存 Issue の PR から、親 PR が一意な場合だけ自動解決します。
解決した親 PR、base branch、base OID は worktree、review、PR 作成へ引き継ぎます。PR 作成直前に再検査し、親 PR の更新、複数候補、PR 未作成、fork、別 repository、既存 stack の途中への挿入が見つかった場合は停止します。
stack=auto は logical dependency PR と、検証済みの effective_tail_candidate を区別して返します。途中の sibling PR を観測しても legacy parent_pr_not_top を維持し、後続 coordinator が使う publication_order_snapshot、chain_root_status、stack_members を追加 evidence として残します。
publication coordinator を使う経路では、ready intent を凍結順に lease します。required mode は clean かつ未 push の branch だけを effective tail 上へ積み直し、restack 後の HEAD で validation、review、E2E をやり直します。conflict、tail drift、期限切れ、effect 不明では push せず、保存済みの resume または abort action に戻ります。
親 Issue の表が更新された場合は、未公開 intent の row と相対順を再確認します。相対順が同じなら snapshot と Phase を更新し、並び替えまたは row 消失なら publication_order_stale で lease と branch の変更前に停止します。
復旧するときは、親 Issue の表で元の相対順と欠けた row を復元してから、resolver と intent 登録をやり直します。順序変更を維持する場合は、既存 intent を resume または abort の手順で解決してから、新しい順序で登録します。
standalone の auto stack は、対象になる resolution を root owner の publication intent として登録します。commit 後に current branch と HEAD を ready にし、先行 intent がある間は status と heartbeat を続けます。順番が来たら prepare から同じ session で再開し、restack 後の HEAD が変わった場合だけ validation、simplify、review、E2E を再実行します。
計測と独立 review を通過したため、明示 stack=auto|true の publication gate と closing Issue gate は required です。generic resolver と selector 未指定経路の legacy 既定値は変更しません。
false stop、unsafe pass、duplicate publication、順序違反、closing Issue の誤停止または見逃しが 1 件でも観測された場合は、両 gate を report-only に rollback します。残存 publication intent は計測 artifact に記録して abort し、required registry へ持ち越しません。
required coordinator の worker は implementation と publication-finalization を分けます。implementation は commit までで止まり、finalization は保存済み intent から prepare を再開します。gate timeout は validation、simplify、review、E2E の有限上限を lease 用に合算するもので、gate 自体の実行時間を打ち切りません。
PR 作成前の再検査では legacy parent_pr_not_top artifact も読み直せます。ただし candidate の変化だけで resolved や stale に読み替えず、resolved artifact の parent PR、branch、OID が変わった場合だけ parent_pr_stale にします。
stack と stack-base は同時に指定できません。どちらも未指定なら default branch 起点の既存手順を維持します。
branch を直接指定する互換経路
stack-base=<branch> を指定すると、先に対象 branch を fetch し、origin/<stack-base> を worktree または branch の起点にします。同じ branch を review-profile-plan、local review、create-pr にも渡します。
既存 linked worktree は、clean で origin/<stack-base> が HEAD の祖先になっている場合だけ再利用します。条件を満たさない場合は、自動 rebase や追加 worktree の作成を行わず、必要な操作を案内して停止します。
未指定時は stack-base による上書きを行わず、作業起点、review base、PR base の各既存手順を維持します。
実行例
| 入力 | 何が起きるか |
|---|---|
/fix-github-issue 123 pr=create |
通常 PR を作成し、review と E2E は自動判定する |
/fix-github-issue 123 pr=draft agents=claude |
Draft PR を作成し、local reviewer に Claude を使う |
/fix-github-issue 123 pr=create reviewers=none |
GitHub reviewer を起動しない |
/fix-github-issue 123 pr=create stack=auto |
Issue 依存から親 PR を一意に解決して stacked PR を作る |
/fix-github-issue 123 pr=none e2e=off |
PR と E2E なしで commit と push まで進める |
/fix-github-issue 123 pr=create e2e=final e2e-apply=confirmed |
review 収束後に final E2E を行い、確認済みの local apply 許可を使う |