name: 1natsu-auto-resolve-conflicts
description: Gitのコンフリクト解消をAI単独で完全自動化する自走スキル。merge / rebase / cherry-pick / stash pop で衝突した時、履歴と変更意図を読み、両側の機能を壊さず統合し、検証を自動実行して --continue まで完了する。すでに衝突している場合に加え、stale な PR(mergeable:false)で未コンフリクトの状態からでも base 追従で衝突を発生させて解消する。merge は解消履歴を追えるよう2段コミットで残す。「自動でコンフリクト解消」「コンフリクト解消お任せ」「auto resolve conflicts」「stale な PR を base 追従して解消」「mergeable false を直して」等、AI主導の自動化・自走を示唆した時に使う。デグレ防止が最優先で、安全に解消できなければ 1natsu-pair-resolve-conflicts へ引き継ぐ。1ファイルずつ承認しながら解消したい場合は本スキルでなく 1natsu-pair-resolve-conflicts を使う。
license: MIT
metadata:
author: 1natsu
version: "1.2.0"
Auto Resolve Conflicts(自動コンフリクト解消)
コミット履歴・diff・検証結果という観測事実だけを根拠に、コンフリクトを 解消 → 検証 → ステージング → コミット/--continue までAI単独で完了させる自走モード。
姉妹スキル 1natsu-pair-resolve-conflicts(人間と1ハンクずつ承認を取りながら解消する協調モード)と対をなす。本スキルは「AIが責任を持って一気にやり切る」が役割で、安全に判断できない場面では潔く pair モードへ引き渡す。
このスキルが言う「解消」の定義
コンフリクトマーカー(<<<<<<< / ======= / >>>>>>>)を消すことはゴールではない。マーカーの除去 + 両側の機能を壊さない整合したコードの統合 が揃って初めて「解消」と呼ぶ。ours と theirs がそれぞれ別の機能を実装しているのに、片側を丸ごと捨ててマーカーだけ消すのは「解消」ではなくデグレである。コミット履歴から「両側が何を実現したかったか」を読み取り、その意図が解消後コードに両方とも生き残っていることを担保する(Point: [相互機能保持])。
起点の2パターン
本スキルは2つの起点から開始できる:
- すでにコンフリクト状態 —
git statusに unmerged paths がある(merge/rebase/cherry-pick/stash pop 進行中)。→ Phase 0 から始める。 - 未コンフリクト状態だが追従が必要 — stale な PR(
mergeable:false)等で、ローカルはまだ衝突していないが base ブランチに追従するとコンフリクトが起きる。→ Phase A で base 追従してコンフリクトを発生させてから Phase 0 に合流する。
役割分担
- 本スキル: 解消方針の決定・適用・検証・コミット/--continue の実行までAIが担当する。人間に承認は求めない(検証コマンドが見つからない場合の例外を除く)
- bail-out: デグレ懸念があると判定したら、安全に解消できた部分はそのまま残し、未着手分を
1natsu-pair-resolve-conflictsに引き継ぐ
対話ルール
基本は出力のみで進める。ユーザーへの確認はデグレに直結する場面(bail-out への移行、検証コマンドが見つからない場合)に限定する。確認が必要な時はプラットフォームが提供する対話型の選択UIを使う。
モードの開始
ユーザーからの明示的な起動
以下のようなフレーズで要求された場合、即座にモードに入る:
- 「自動でコンフリクト解消して」「コンフリクト解消お任せ」「auto resolve」
- 「黙って解消して」「コミットまで自動でやって」「--continue まで一気に」「自走で解消」
- 「stale な PR を base 追従して解消して」「mergeable false を直して」「base に追従してコンフリクト直して」(→ 未コンフリクト状態なら Phase A から)
- 「この PR を base にマージできる状態にして」「最新の base に追従して」(目標だけの依頼。未コンフリクトでも base より遅れていれば Phase A から)
AIからの提案
コンフリクト状態を検知し、かつユーザーが「自動で」「お任せ」「自走」を示唆した場合は本スキルへの移行を提案する(勝手に入らない)。明確な意思表示がなければ、まず 1natsu-pair-resolve-conflicts か本スキルかをユーザーに 1 回確認する。
提案の例:
コンフリクトが発生しています。自動モードで解消からコミットまでやり切りますか?デグレ懸念があれば途中で pair モードに切り替えます。
起動直後の宣言
モードに入ったら、必ず以下を1メッセージで宣言する:
- 自動モードで進めること
- 起点(すでにコンフリクト状態か / Phase A で base 追従して発生させるか)
- 解消・検証・コミット/--continue まで自走すること
- デグレ懸念がある場面では
1natsu-pair-resolve-conflictsに切り替えること
Phase A: 追従の起点作り(未コンフリクト状態からの起動時のみ)
git status に unmerged paths がなく、かつユーザーの意図が 「現在のブランチ/PR を base に統合できる状態にする」 である場合に実行する。すでにコンフリクト状態なら本フェーズは飛ばして Phase 0 へ進む。
意図の汲み取り(重要): ユーザーは必ずしも「base を merge してコンフリクトを発生させて」と機構を指示してこない。次のような 目標・症状 も Phase A のトリガーになる:
- 症状の提示 — 「PR が stale」「GitHub で mergeable=false」「base とコンフリクトしてマージできない」
- 目標の提示 — 「この PR を base にマージできる状態にして」「最新の base に追従して」「base に取り込めるようにして」
「コンフリクトを直して」と言われてローカルに衝突が無い時は、即「解消対象なし」と結論づけず、まず「base に対して遅れていて、取り込むと衝突する状態ではないか」を疑う。これが本スキルの期待挙動。ただし、base 統合の意図がまったく読み取れない(単に clean なブランチで作業中など)場合は、勝手に base を merge せず状況を報告するか1回確認する(不用意な merge はしない)。
目的は base ブランチへの追従でコンフリクトを意図的に発生させ、その後 Phase 0 以降の通常フローに合流する こと。追従戦略は base を現在ブランチにマージ(git merge origin/<base>)を既定とする。force-push 不要で PR のレビュー履歴・コメントが剥がれず、Phase 4 の2段コミットとも相性が良い。
手順
- 前提確認 —
git statusで「merge/rebase 等が進行中でない」「ワーキングツリーが clean(未コミット変更がない)」を確認する。汚染があれば Phase 0 の早期 bail-out と同じ理由(責任分離困難)で着手前に bail-out する。 - base ブランチ決定 —
gh pr view --json baseRefName,mergeable,mergeStateStatus(gh があり PR が紐づく場合)→ 上流追跡@{upstream}/ リポジトリ default(git symbolic-ref refs/remotes/origin/HEAD)→ いずれも不明ならユーザーに1回だけ確認、の順で決める。 - 乖離の観測(追従が必要かの裏取り) — base を取得(
git fetch origin <base>。remote が無ければ省略)した上で、git log --oneline <base>..HEADとgit log --oneline HEAD..<base>で乖離を見る。**HEAD が base に対して遅れている(base 側に未取り込みのコミットがある)**なら追従が必要と確定する。既に base を含んでいて遅れていないなら「追従不要・統合済み」と報告して終了する(観測事実で判断し、思い込みで merge しない)。 - 追従の適用 —
git merge origin/<base>(remote が無ければローカル base を直接git merge <base>)。- コンフリクトなしで完了 — base が綺麗に取り込めた。追従が完了した旨(作成された merge コミット)を報告して終了する。解消対象のコンフリクトは無い。
- コンフリクト発生 — 期待どおり。これで起点ができたので Phase 0 に合流 し、以降は通常の merge コンフリクトとして解消・検証・2段コミットまで進める。
詳細な base 検出ロジック(gh の有無、PR 非紐づけ時のフォールバック、remote が無い場合、rebase 慣習が明確な場合の例外)は references/stale-pr-follow.md を参照する。
Phase 0: 状況把握と早期 bail-out チェック
状況把握
# 現在の操作種別(merge / rebase / cherry-pick / stash pop)
git status
# rerere の状態
git config rerere.enabled
git rerere status # 有効な場合
rerere が有効で自動解消が適用されている場合は、その内容を診断対象に含める。rerere が怪しい挙動をしているなら git rerere forget <file> での取り消しを検討する。rerere が無効でも有効化を提案しない(ユーザー判断領域)。
早期 bail-out チェック
以下のいずれかに該当したら、Phase 1 に入る前に即 bail-out する:
- 巨大バイナリ・生成物・スナップショットの両側変更(
dist/,build/,*.png,*.pdf,*.snap) - submodule の競合(
Subproject commit行の両側変更) - DB マイグレーション系(
migrations/,prisma/migrations/,alembic/versions/) - 依存関係 manifest の両側変更で Auto-No 判定(同ライブラリの異バージョン指定、片側削除と片側更新の競合 等)。
package.jsonのdependenciesセクション、Cargo.toml [dependencies]、pyproject.toml、go.mod、Gemfile等 - security-critical(
auth,crypto,secrets,RBAC,IAM,.env*名前を含む) - 「deleted by us / by them」と「modified」の組み合わせ
- 作業ツリーがコンフリクト解消対象以外で汚染(
git statusで untracked / unstaged の他要因変更がある)
lockfile(パッケージマネージャが生成する依存解決ファイル全般)の両側変更は早期 bail-out にしない。代表例として bun.lock / bun.lockb / pnpm-lock.yaml / yarn.lock / package-lock.json / Cargo.lock / go.sum / poetry.lock / uv.lock / Gemfile.lock / composer.lock / mix.lock / flake.lock 等があるが、ファイル名一覧で判定するのではなく「機械生成・対応 manifest あり・対応するパッケージマネージャあり・再生成コマンドと frozen 検証手段が揃う」という 性質 で Auto-Regenerate に該当するか判定する。lockfile はテキストマージで整合性を壊しやすく、対応するパッケージマネージャで再生成するのがベストプラクティス。詳細な判定原則と対応表は references/lockfile-regeneration.md を参照。
詳細な判定基準と検出方法は references/bailout-rules.md を参照する。
Phase 1: 全体俯瞰とトリアージ
コンフリクト全体の把握
# コンフリクトファイル一覧
git diff --name-only --diff-filter=U
# 操作種別ごとの両側コミット履歴
# merge:
git log --oneline HEAD...MERGE_HEAD -- <files>
# rebase:
git log --oneline REBASE_HEAD~1..REBASE_HEAD -- <files>
# cherry-pick:
git log --oneline CHERRY_PICK_HEAD -- <files>
Auto-OK / Auto-Risky / Auto-Regenerate / Auto-No 分類
ファイルごと(必要に応じてハンクごと)に以下の4段階で分類する:
- Auto-OK — import文だけの競合、機械的な改名、両側追記の順序統合、設定ファイルの別キー追加など、明らかに安全に自動解消できるもの
- Auto-Regenerate — lockfile 等の機械生成依存解決ファイル。対応 manifest が安全に解決できるなら、対応するパッケージマネージャ(
bun install/pnpm install/cargo generate-lockfile/go mod tidy/poetry lock --no-update/uv lockなど、エコシステムごとの再生成コマンド)で 再生成 する。手動マージは絶対にしない。ファイル名一覧で判定するのではなく、機械生成性 + 対応 manifest の存在 + 再生成コマンドと frozen 検証の有無 という性質で判定するため、対応表外の未知 lockfile も性質を満たせば対象に含める。references/lockfile-regeneration.md参照 - Auto-Risky — 1ファイル内ハンク数 ≥ 4、同一行近傍の両側変更、テストファイル、公開エクスポート定義ファイルなど、慎重判断が必要なもの。複数該当で bail-out
- Auto-No — 関数シグネチャ変更と呼び出し側の不整合、両側で同関数の本体を異なる方向に書き換え、依存 manifest の同ライブラリ異バージョン競合など。1つでも該当したら全体 bail-out
詳細な判定基準と具体的な検出コマンドは references/bailout-rules.md を参照する。
トリアージ結果の宣言
分類が終わったら、1メッセージで以下を提示する:
- ファイル数 N 件のうち、Auto-OK が M 件、Auto-Regenerate が G 件、Auto-Risky が R 件、Auto-No が K 件
- 取り得る進路(全自動 / 再生成併用 / 混合 bail-out / 全体 bail-out)の判定結果と理由
- 自動解消対象・再生成対象・bail-out 対象ファイルの一覧
Auto-No が 1 件でもある場合は 全体 bail-out が原則。ただし Auto-OK / Auto-Regenerate と独立に解消できることが明確な場合(同じファイルではない、依存関係がない)は、安全な部分だけ適用する 混合 bail-out を選んでもよい。デグレ懸念が拭えなければ全体 bail-out を選ぶ。
Phase 2: 自動解消ループ
各ファイルを 直列(並列にしない)で処理する。並列化は依存関係の見落としを生み、デグレ防止原則に反する。
処理順序の推奨: 同じ Phase 2 ループ内では、Auto-OK の manifest を先に解消 → Auto-Regenerate を実行 → 残りの Auto-OK を解消 の順で進めると、lockfile の再生成が最新の manifest を反映でき、整合性が高まる。
ループ全体の鉄則: git add しない(2段コミットと bail-out の生命線)
Phase 2 全体を通して git add は一切しない。これにより index には unmerged stages(git が記録した両側+ベースの3版)がそのまま残る。merge の2段コミットでは、解消後に git checkout --merge -- <file> で index から「マーカー入りの衝突原文」を git に再生成させてスナップショットコミットを作る(手順は references/two-stage-commit.md)。マーカー原文を自前のファイルに退避しておく必要はなく、git の index が真実の源になる。bail-out 時に再衝突状態へ戻せる退路も同じ仕組みで保たれる。
衝突原文を一時ファイルに退避する設計は採らない(固定パスは並列実行で衝突し、状態が壊れやすい)。原文は常に
git checkout --mergeで index から復元する。
Auto-OK ファイルごとの処理ステップ
各ファイルに対して以下のサイクルを回す:
- 履歴調査 —
git log -p HEAD -- <file>とgit log -p MERGE_HEAD -- <file>(操作種別に応じてリビジョン名を変える)で両側の変更履歴を読み、コミットメッセージと周辺コードから変更意図を抽出する - 意図推定 — 各ハンクについて「ours は何をしたかったか」「theirs は何をしたかったか」を1行ずつ言語化する。意図が読み取れないハンクは Auto-No に再分類 して bail-out
- 解消方針決定(片側採用妥当性チェックを通す) — 「ours採用 / theirs採用 / 統合 / 一方を基準に他方の意図を移植」のいずれかを選ぶ。ただし
ours採用/theirs採用(=片側を丸ごと捨てる)を選んでよいのは、捨てる側に固有の機能・意味的変更が無いと観測事実で言える場合に限る。具体的には捨てる側が「純粋なリネーム / フォーマット / 空白・コメントのみ / 採用する側の完全な部分集合(採用側が上位互換)」のいずれか。両側がそれぞれ別の機能・分岐・ロジックを足している場合、片側採用は機能欠落=デグレなので選んではならない。統合か移植を選ぶ。 安全に統合できないなら Auto-No に再分類して bail-out(推測で混ぜない) - 解消適用 — コンフリクトマーカーを除去して解消後のコードを書き込む。この時点では
git addしない - 機能保持チェック(相互機能保持ゲート) — 解消後コードに対し、両側 diff から抽出した「追加された関数・メソッド・エクスポート・条件分岐・設定キー・テストケース」を1件ずつ照合し、両側の固有機能が解消後コードに残っている(または採用側に上位互換として吸収されている)ことを確認する。片側の固有機能が理由なく消えていたら、それはデグレ。当該ファイルを Auto-No に再分類して bail-out する。判断は「たぶん残っている」ではなく、シンボル名・分岐条件を実際に grep して確認する
- 局所検証 — 解消したファイルの構文を軽く確認する(言語に応じて
tsc --noEmit <file>、python -m py_compile <file>、go vet <pkg>、cargo check -p <pkg>等)。失敗したら 即 bail-out - 進捗ログ —
<file>: ours採用 / 統合 / theirs採用 — <一行根拠(片側採用なら「捨てた側に固有機能なし」の根拠を含める)>の形式で1行サマリを出力
Auto-Regenerate ファイルの処理ステップ
lockfile 等は手動マージしない。詳細手順と対応表は references/lockfile-regeneration.md を参照。要点のみ:
- 性質の確認 — 機械生成 / 対応 manifest あり / 対応ツールあり / 再生成・frozen 検証の手段あり、を満たすか確認。満たさなければ Auto-No に降格して bail-out
- 対応 manifest の確認 — 該当 lockfile に紐づく manifest(
package.json/Cargo.toml/pyproject.toml等)が決定済みか確認。未解消なら先に Auto-OK ループで解消 - lockfile を一度削除(または競合状態のまま) —
rm <lockfile>でクリーンに再生成する方が確実 - 再生成コマンド実行 — エコシステムに応じた再生成コマンド(lockfile-regeneration.md 対応表参照、未知ファイルは公式 docs /
--helpで確認) - frozen 検証 — エコシステム標準の immutable / frozen / locked 検証コマンドで manifest との整合を確認。失敗したら bail-out
- 進捗ログ —
<lockfile>: regenerated via <command> (<frozen-verification> verified)の形式で出力
ループ中の bail-out
- 局所検証が失敗
- 履歴を読んでも意図が判明しない
- 機能保持チェックで、片側の固有機能が解消後コードから失われていた(相互機能保持の破れ=デグレ)
- 当初 Auto-OK と判定したが、適用過程で Auto-No 相当の問題(呼び出し側の不整合等)が発覚
これらが起きたら そのファイルを未解消のまま 残し(解消を書き込み済みなら git checkout --merge -- <file> で再衝突状態に戻す)、混合 bail-out に切り替える。それまでに適用した他ファイルはそのまま残す。
Phase 3: 検証コマンドの自動検出と実行
検出フロー
- リポジトリ直下のマーカーファイルを列挙(
package.json, lockfile 各種,pyproject.toml,Cargo.toml,go.mod,Makefile,Justfile,.pre-commit-config.yaml) - モノレポ判定(
pnpm-workspace.yaml,turbo.json,nx.json, ルートpackage.jsonのworkspaces) - パッケージマネージャ判定(lockfile 優先順位:
bun.lockb>pnpm-lock.yaml>yarn.lock>package-lock.json) - 検証カテゴリ(typecheck / lint / test / build)のコマンドを抽出
詳細は references/verification-detection.md を参照する。言語別の優先コマンド表とフォールバックを記載している。
実行ポリシー
- 順序: typecheck → lint → test → build(速いものから、失敗で stop-the-line)
- タイムアウト: 各カテゴリ デフォルト 5 分。超過したら bail-out
- 対象範囲: モノレポでは変更ファイルが属する workspace に限定
- 失敗時: 自動修正は試みず、失敗ログを添えて即 bail-out
- flaky 疑い: 過去実行で失敗履歴のあるテスト名や、
docker/db/networkを含むテスト名は環境依存の疑いがあるため、失敗時は人間判断のため bail-out
検証コマンドが見つからない場合
検出に失敗した場合は 唯一の例外 としてユーザーに 3 択を提示する:
- 検証なしで Phase 4 に進む(自己責任)
1natsu-pair-resolve-conflictsに渡す- 検証コマンドを教える(受け取って実行)
それ以外の場面ではユーザー確認を取らない。
Phase 4: コミット / --continue(履歴優先の2段構成)
ここまでで全ファイルが解消済み・検証通過済み・ステージング前(index は unmerged stages のまま)になっている。完了処理は操作種別で分岐する。
なぜ2段か — AI が「マーカーを消したコミット」を1つ積むだけだと、git ログには解消後の姿しか残らず、どのマーカーをどう解消したのか(解消の diff)が履歴から追えない。問題が起きた時にレビュワーが「どの解消でミスが入ったか」を辿れない。そこで merge/stash では ①コンフリクト発生状態(マーカー入り)をコミット → ②マーカー解消をコミット の2段にし、①→②の diff として解消内容を履歴に残す。
merge — 2段コミット
references/two-stage-commit.md の手順に従う。要点(状態は git index に持ち、自前の固定パス退避はしない):
- 解消内容を一意ディレクトリへ退避 — 検証済みのワーキングツリー(解消後)を
mktemp -dで作った一意のディレクトリにコピー(並列実行で衝突しないよう固定パスは使わない)。 - ①スナップショットコミット —
git checkout --merge -- <conflicted-files>で index の unmerged stages から マーカー入りの衝突原文を git に再生成させ、git add <conflicted-files>→git commit --no-verify。これが 2親を持つマージコミットで、中身はマーカー入り。フットプリントはconflict-snapshot by 1natsu-auto-resolve-conflicts(hook がマーカーを弾くため--no-verify)。 - ②解消コミット — 退避した解消内容を書き戻し、
git add <files>→git commit。これは①を親に持つ通常コミットで、マーカーは除去済み。メッセージは解消サマリ+フットプリントauto-resolved by 1natsu-auto-resolve-conflicts(references/commit-message-template.md参照)。
結果、git log は「マージコミット(マーカー入り)→ 解消コミット」となり、git diff <マージコミット>..<解消コミット> が解消内容そのものになる。混合 bail-out(一部のみ解消)の場合は2段にせず、解消済みファイルを残したまま commit せず handoff する(従来どおり)。
stash pop
stash pop は性質上コミットを作らない。解消済みファイルを git add するに留め、2段コミットは適用しない(コミットが無いので①②が成立しない)。スナップショット退避も結果として使わない。
rebase / cherry-pick — 1段(解消サマリで監査)
2段にすると replay 中のコミットにマーカーが焼き込まれ、元コミットの意味破壊・bisect 破壊・履歴増殖・force-push 増幅を招くため、従来どおり1コミットに解消を畳む。
- ステージング —
git add <resolved-file-1> <resolved-file-2> ...(未解消ファイルは add しない) - 継続 —
git rebase --continue/git cherry-pick --continue。元コミットメッセージは--continueが保持する。--continueの前にgit commit --amendを実行してはならない(その時点の HEAD は replay 対象ではなく一つ前の既存コミットで、上書きすると履歴を破壊する)。フットプリントauto-resolved by 1natsu-auto-resolve-conflictsは既定では完了報告に記す(コミットへ無理に注入しない)。コミットにも残したい場合は cherry-pick なら--continue後にgit commit --amend、rebase は replay コミットが HEAD である時に限り amend する。詳細・禁止事項はreferences/commit-message-template.md参照。 - rebase で Git が次のコンフリクトで止まった場合、Phase 0 から再帰的に処理する。
- 監査性は解消サマリ+(必要時)
git range-diff/ reflog で代替する。
完了報告
3 点をまとめて出力する:
- 解消サマリ — 各ファイルでどう解消したかの一行リスト
- 検証結果 — 実行した検証コマンドと結果(pass/fail/skip)
- 完了アクション — 何のコマンドで完了したか(2段の場合は snapshot コミットと解消コミットの両 hash、rebase なら状態)
bail-out プロトコル
動作
bail-out が発動したら:
- 既に適用済みのファイルはワーキングツリーに残す(git add 済みかどうかは適用時点での状態を維持する)
- 未解消ファイルと bail-out 理由を構造化して出力
1natsu-pair-resolve-conflictsへの引き継ぎプロンプトを生成
引き継ぎプロンプトのテンプレートは references/handoff-to-pair-resolve.md にある。操作種別 × bail-out 理由のマトリクスで定義しているので、当てはまるテンプレートを使う。
Phase 3 検証失敗後の bail-out
検証コマンドが落ちて Phase 3 で bail-out する場合、Phase 2 までの解消は 適用済みでステージング前(2段コミットの①スナップショットはまだ取っていない=merge コミットは未作成)。ロールバックは強制せず、ユーザーが git reset / git checkout --merge するか pair で続行するかを選択できるよう、ハンドオフプロンプトに状態説明を含める。
bail-out は失敗ではない
「安全に判断できなかったので人間に渡す」は本スキルの正しい振る舞い。デグレを起こす自動コミットより、bail-out の方が常に望ましい。
核心ルール
- デグレ防止が最優先 — 速度や完了率より、安全に解消できる確信が持てるかを優先する。迷ったら bail-out
- 相互機能保持 — マーカーを消すことはゴールではない。ours と theirs が別々の機能を実装しているなら、片側採用は機能欠落=デグレ。両側の機能が解消後コードに保持されることを担保する(片側採用は「捨てる側に固有機能なし」と観測できる時だけ)。安全に統合できなければ bail-out
- 観測根拠主義 — コミット履歴・diff・テスト結果という事実のみを判断根拠にする。「たぶん」「おそらく」は bail-out のサイン
- 不確実性の正直な報告 — 確信が持てない判断を「自動解消した」と報告しない。曖昧さは bail-out 理由として明示する
- 履歴優先の解消記録 — merge/stash では「マーカー入りコミット → 解消コミット」の2段で残し、解消の diff を履歴から辿れるようにする。rebase/cherry-pick は履歴・bisect を壊さないため1段+解消サマリで監査する
- 自動コミットの責任 — 本スキルが作ったコミットは AI が責任を負う。コミットメッセージにはフットプリント(
references/commit-message-template.md)を必ず残し、後から監査できるようにする - bail-out しても恥じない — pair モードへの引き渡しは安全運用の一部であり、後退ではない
- 検証なしのコミットはしない — 唯一の例外は Phase 3 の検証コマンド未検出時のユーザー確認のみ。それ以外で検証をスキップしない
- rerere は尊重する — rerere の自動解消は人間が過去に下した判断の蓄積。怪しい場合は
git rerere forgetで取り消す前に観測事実で根拠を示す - AI が勝手に rerere を有効化しない — 設定変更はユーザーの責任領域
参考ドキュメント
references/bailout-rules.md— Auto-No/Risky/Regenerate/OK の詳細条件と検出方法references/stale-pr-follow.md— Phase A の base ブランチ検出と追従(未コンフリクト状態からの起点作り)references/two-stage-commit.md— Phase 4 の履歴優先2段コミットの手順(merge/stash)references/lockfile-regeneration.md— lockfile 等の自動再生成フローとパッケージマネージャ別コマンド表references/verification-detection.md— 言語・パッケージマネージャ別の検証コマンド表references/handoff-to-pair-resolve.md— bail-out 時の引き継ぎプロンプトテンプレートreferences/commit-message-template.md— 自動コミットメッセージの規約とフットプリント
関連スキル
1natsu-pair-resolve-conflicts— 人間と1ファイル/1ハンクずつ承認を取りながら解消する協調モード。本スキルが bail-out した時の引き継ぎ先